<?xml version="1.0" encoding="utf-8"?>
<comments>
  <row Id="7" PostId="2" Score="0" Text="Software recommendations are hard on SE, but I could see this being useful to this community." CreationDate="2017-05-23T14:22:59.063" UserId="7" />
  <row Id="14" PostId="2" Score="1" Text="very useful. This is a huge concern." CreationDate="2017-05-23T14:34:40.610" UserId="21" />
  <row Id="15" PostId="2" Score="0" Text="To note it, there's an [SE for Software Recommendations](https://softwarerecs.stackexchange.com).  But, I'm not suggesting that this is off-topic since it seems like a helpful type of question." CreationDate="2017-05-23T14:36:16.600" UserId="39" />
  <row Id="16" PostId="2" Score="0" Text="I agree that this question can be problematic for SE, but it is also extremely important.  How do other SEs deal with such list-format questions?  Surely there must be some mechanism on [matheducators](https://matheducators.stackexchange.com/)." CreationDate="2017-05-23T14:36:25.217" UserId="27" />
  <row Id="21" PostId="2" Score="0" Text="@Choirbean This is how most sites handle it: [Meta Math Educators](https://matheducators.meta.stackexchange.com/questions/101/books-and-materials-recommendations). They typically say &quot;focused&quot; but have their own cultural way of determining what focused means." CreationDate="2017-05-23T14:50:08.280" UserId="7" />
  <row Id="46" PostId="2" Score="1" Text="I see this as a GOOD question about tool and workflow with a splash of pedagogy. For that reason I'd find it more valuable to keep this question here on the CS Ed site rather than on SE for Software Recs." CreationDate="2017-05-23T15:11:24.863" UserId="50" />
  <row Id="245" PostId="2" Score="0" Text="I have been considering Unit test tools (this is a class of tool, not a specific tool), so could be applied to other languages). I have just started teaching, so not tried yet. For Java I think JUnit is a popular one." CreationDate="2017-05-25T17:51:37.593" UserId="204" />
  <row Id="437" PostId="2" Score="1" Text="I'm curious to hear more on this topic. Almost tempted to start a bounty. I came across this thread regarding unit testing student work: https://stackoverflow.com/questions/28862949/how-to-junit-test-multiple-java-files-in-eclipse I'd like to hear what else people implement to automate the process. I do love CodingBat, but it would not work offline nor would it work if I don't first set everything up on their system." CreationDate="2017-05-30T04:47:56.947" UserId="76" />
  <row Id="2232" PostId="2" Score="0" Text="What type of programming are you testing? Small methods with well-defined inputs and outputs? Client-server programs such as websites? Graphical user interfaces in Swing? Each of these has to be tested differently..." CreationDate="2017-06-30T13:50:27.547" UserId="913" />
  <row Id="9461" PostId="3" Score="0" Text="Even in industry there is no way to break up tasks proportionately. Databases are trivial to me,  but web interfaces are hard. My partner is a rockstar with node js, but really had no clue about how an RDBMS works. Our division of labor is obvious,  but is there any way to say they are equal?" CreationDate="2018-01-01T15:03:38.720" UserId="1537" />
  <row Id="9249" PostId="4" Score="1" Text="Have you considered making them use an OO- API before writing their own classes?" CreationDate="2017-12-17T18:58:49.030" UserId="2103" />
  <row Id="9250" PostId="4" Score="0" Text="@MichelBillaud That's a good point.  And there are many resources out there to help with that.  I've never been inclined in that direction, but perhaps you are right that that is the best path forward." CreationDate="2017-12-17T19:13:37.903" UserId="27" />
  <row Id="9256" PostId="4" Score="0" Text="@BenI. The interest of encapsulation, polymorphism, inheritance etc. is difficult to demonstrate on small size self-contained examples. Silly examples like animals and vehicles don't help." CreationDate="2017-12-18T10:41:49.650" UserId="2103" />
  <row Id="41" PostId="6" Score="0" Text="I am a student, can you give me an example?" CreationDate="2017-05-23T15:05:51.840" UserId="56" />
  <row Id="33" PostId="7" Score="1" Text="would you consider flowcharts (like if/else flows) as a flavor or pseudo-code?" CreationDate="2017-05-23T14:57:12.293" UserId="50" />
  <row Id="42" PostId="7" Score="2" Text="It seems to me that you need some programming language to actually run things and test ideas.  It is one thing to understand what makes something work and another to actually execute it." CreationDate="2017-05-23T15:07:37.473" UserId="21" />
  <row Id="53" PostId="7" Score="3" Text="Are we talking elementary school, high school, university, adult education? Programming **or** Algorithm class?" CreationDate="2017-05-23T15:24:56.873" UserId="51" />
  <row Id="260" PostId="7" Score="0" Text="The question can help to give some ideas about what the 'no-programming language' approach looks like: https://cs.stackexchange.com/questions/29830/how-can-i-teach-computer-science-without-using-computers ." CreationDate="2017-05-25T22:00:11.477" UserId="154" />
  <row Id="261" PostId="7" Score="1" Text="I second that this question should distinguish between basic programming or a basic algorithms, as both the audience and the learning goals often differ: does the student want to design algorithms or does the student want to do more programming? (Although the tasks are related, they are quite different still)" CreationDate="2017-05-25T22:08:33.867" UserId="154" />
  <row Id="1100" PostId="7" Score="0" Text="Answer to last sentence of Question: professionals prefer being able to use a range of tools and techniques to quickly and reliably get to good solutions. Students prefer thrashing around with the IDE." CreationDate="2017-06-16T13:34:55.160" UserDisplayName="user737" />
  <row Id="1122" PostId="7" Score="0" Text="Students *do not* prefer to deal with the IDE. That's just a frustration point. That actually brings another point. Newbies don't know any IDEs so they'll use whatever the teacher thinks is best, not the actual good tools." CreationDate="2017-06-16T14:39:11.883" UserId="28" />
  <row Id="1004" PostId="9" Score="0" Text="I think you missed one other important aspect of objects: reuse. A properly built object can be reused in many future projects. Look to the 'libraries' included with many programming languages as a prime example." CreationDate="2017-06-15T03:51:48.330" UserId="104" />
  <row Id="1011" PostId="9" Score="1" Text="@GypsySpellweaver Yes, I wasn't trying to be comprehensive in the list above, just a few of the more common, easier to appreciate, items. But code re-use is mostly achieved without objects - the things that make objects good for code re-use were already common before OOP - so I think it's a more nuanced one." CreationDate="2017-06-15T08:38:29.853" UserDisplayName="user31" />
  <row Id="5906" PostId="9" Score="0" Text="@GypsySpellweaver, unfortunately, &quot;reuse&quot; has been overhyped. Libraries are reused, of course, but not a lot else. It is incredibly difficult to build objects with the intention of reuse. Some domain frameworks work, but not much else. OTOH, OOP makes it easy to construct purpose-built (bespoke) solutions. But inheritance is NOT the main tool, and is itself overused. Inheritance from classes (rather than interfaces) can lead you quickly into dead ends." CreationDate="2017-07-24T13:36:20.687" UserId="1293" />
  <row Id="5909" PostId="9" Score="0" Text="A fourth possibility is &quot;Object = Bundle of Behavior&quot;. The public interface defines the behavior. Any &quot;data&quot; is there only as a consequence of the implementation of the behavior. The data could be directly held or could be deferred to other objects, either held in fields or simply referenced. This is not quite the same as aggregation of functions, since the behaviors have a consistent overall purpose. The methods can also be thought of as services of various kinds. What does the Monkey _do_?" CreationDate="2017-07-24T13:44:45.613" UserId="1293" />
  <row Id="17" PostId="10" Score="2" Text="I do like the idea of injecting a little bit of project management into the assignment. That's also an interesting note about there possibly being value in testing their ability to spot people not contributing." CreationDate="2017-05-23T14:36:42.540" UserId="7" />
  <row Id="19" PostId="10" Score="2" Text="In practice, I've found &quot;make sure each role is relatively equal in scope&quot; is prohibitively difficult, and many times easier said than done. I'm a fan of running N x small projects, and telling each student they will have to do EVERY role once, encouraging them to help with the process of balancing the roles, knowing there's nowhere for them to hide." CreationDate="2017-05-23T14:44:29.570" UserDisplayName="user31" />
  <row Id="24" PostId="10" Score="2" Text="@Adam That sounds like the start of an interesting answer." CreationDate="2017-05-23T14:53:11.240" UserId="7" />
  <row Id="54" PostId="11" Score="1" Text="The code example here is just way too abstract for a beginner IMO." CreationDate="2017-05-23T15:26:18.853" UserId="51" />
  <row Id="57" PostId="11" Score="2" Text="If you're teaching a first &quot;Hello World&quot; program, there will often be mysterious syntax that the kids won't understand at first.  `System.out.println(&quot;hello world&quot;);`, `printf(&quot;hello, world\n&quot;);`, `putStrLn &quot;Hello World&quot;`, pick your poison." CreationDate="2017-05-23T15:33:03.647" UserId="27" />
  <row Id="60" PostId="11" Score="1" Text="And this is a big problem. You will want to keep the number of exotic symbols to a minimum. Why `::`, not just `:`? What is `&lt;`? What is `std` and why not just call it `Standard` then? &quot;I saw my brother use `=` when he was programming, was he doing it wrong?&quot; Etc... There is a difference between a brainfuck code and `print &quot;hello world&quot;` or   `program HelloWorld;` `begin`	`writeln('Hello World');` `end.`. Human readability is important." CreationDate="2017-05-23T15:40:36.130" UserId="51" />
  <row Id="138" PostId="11" Score="0" Text="You say the ability to compile is important. But why? As someone learning how programming works, the different programming paradigms, etc, why is it important that I deal with compiling code? An interpreted language seems much more practical. I hated when I had to spend so much time fixing my Eclipse setup to make it build my Java project so I could focus on the task at hand." CreationDate="2017-05-24T07:48:41.733" UserId="28" />
  <row Id="148" PostId="11" Score="1" Text="I was being super informal with the word &quot;compile&quot; and casting a large umbrella to indicate both, which is not technically correct. Plus the whole statement was stronger without it, so I removed the word." CreationDate="2017-05-24T10:35:15.850" UserId="27" />
  <row Id="513" PostId="11" Score="0" Text="I'm surprised by @BenI.'s comment. If you want your computer to say `&quot;hello world&quot;`, why not just write the program `&quot;hello world&quot;`? Why do you need any of these &quot;poison&quot;s?" CreationDate="2017-06-03T00:44:59.773" UserId="290" />
  <row Id="517" PostId="11" Score="0" Text="Because the alternative to a language with syntax is a language that they can't actually run." CreationDate="2017-06-03T01:53:44.763" UserId="27" />
  <row Id="25" PostId="14" Score="1" Text="any specific context? college? high school? etc?" CreationDate="2017-05-23T14:53:35.080" UserId="49" />
  <row Id="27" PostId="14" Score="0" Text="I am wary of making the site too US-centric.  Is there a better way to designate this?" CreationDate="2017-05-23T14:54:54.023" UserId="27" />
  <row Id="28" PostId="14" Score="0" Text="Are you taking this test on a computer?" CreationDate="2017-05-23T14:55:14.497" UserId="46" />
  <row Id="31" PostId="14" Score="0" Text="Not tests, this is regarding lab assignments" CreationDate="2017-05-23T14:56:29.907" UserId="27" />
  <row Id="32" PostId="14" Score="0" Text="maybe just state the age range? i.e. 15-18 or whatever your age range is" CreationDate="2017-05-23T14:56:54.707" UserId="49" />
  <row Id="34" PostId="14" Score="0" Text="@Choirbean Can you care to expand on what you mean about labs. Like cheating off of other students?" CreationDate="2017-05-23T14:57:24.140" UserId="46" />
  <row Id="38" PostId="14" Score="0" Text="A more specific example will make for an easier to answer question. Particularly in the closed beta, it's very easy to jump in with over-generalised questions rather than relating the question to a specific example." CreationDate="2017-05-23T15:01:53.160" UserId="41" />
  <row Id="48" PostId="14" Score="0" Text="I think it would be hard to detect cheating for simple programs because of the reason you mentioned. But how about you ask them to write comment next to each statement as to why they wrote it? Everyone should explain it their own terms?" CreationDate="2017-05-23T15:13:13.460" UserId="56" />
  <row Id="1156" PostId="14" Score="0" Text="I sometimes require that they do a flowchart first, and that their code match the flowchart." CreationDate="2017-06-16T20:43:58.593" UserDisplayName="user737" />
  <row Id="39" PostId="17" Score="0" Text="Do you have any specific language you are using?" CreationDate="2017-05-23T15:02:26.913" UserId="46" />
  <row Id="40" PostId="17" Score="7" Text="This is language agnostic, I'm really looking forward to ways for students to grasp the concept of recusion" CreationDate="2017-05-23T15:03:14.630" UserId="48" />
  <row Id="44" PostId="17" Score="0" Text="How about [Fractals](https://en.wikipedia.org/wiki/Fractal)?" CreationDate="2017-05-23T15:08:45.480" UserId="56" />
  <row Id="45" PostId="17" Score="0" Text="Fractals are nice, but it doesn't get away from my problem of not having an end state / goal" CreationDate="2017-05-23T15:09:31.047" UserId="48" />
  <row Id="55" PostId="17" Score="10" Text="Wait, what's recursion again?  Okay, [Google &quot;recursion&quot;](https://www.google.com/?gws_rd=ssl#q=recursion)... huh, it gives &quot;_Did you mean: [recursion](https://www.google.com/?gws_rd=ssl#q=recursion)_&quot;?  Okay, clicking that... huh, it gives &quot;_Did you mean: [recursion](https://www.google.com/?gws_rd=ssl#q=recursion)_&quot;?  Okay, clicking that... huh, it gives &quot;_Did you mean: [recursion](https://www.google.com/?gws_rd=ssl#q=recursion)_&quot;?  Okay, clicking that... huh, it gives &quot;_Did you mean: [recursion](https://www.google.com/?gws_rd=ssl#q=recursion)_&quot;?  Opps, out of characters - stack overflow!" CreationDate="2017-05-23T15:27:21.753" UserId="39" />
  <row Id="106" PostId="17" Score="6" Text="You may find [this discussion](https://cseducators.stackexchange.com/questions/17/analogy-for-teaching-recursion) helpful." CreationDate="2017-05-23T20:25:03.307" UserId="44" />
  <row Id="405" PostId="17" Score="3" Text="There is a question about recursion here https://cseducators.stackexchange.com/questions/17/analogy-for-teaching-recursion" CreationDate="2017-05-28T16:17:34.910" UserId="204" />
  <row Id="499" PostId="17" Score="0" Text="This was a great question. I hope we hear more from you!" CreationDate="2017-06-02T15:34:46.397" UserId="27" />
  <row Id="2545" PostId="17" Score="1" Text="curse = to abuse something verbally.  recurse = to repeat oneself while abuse something verbally" CreationDate="2017-07-03T23:43:54.457" UserId="1537" />
  <row Id="4677" PostId="17" Score="0" Text="You've ordered things, and you receives a parcel. It is a cardbox containing things, some of them are enclosed in cardboxes. Boxes may contain other (obviously smaller) cardboxes." CreationDate="2017-07-21T12:06:51.367" UserId="2103" />
  <row Id="4678" PostId="17" Score="0" Text="You've posted a message, which now has other messages as answers. Answer themselves may have answers, etc." CreationDate="2017-07-21T12:07:52.410" UserId="2103" />
  <row Id="8668" PostId="17" Score="0" Text="To teach recursion, I first teach iteration, then I teach recursion." CreationDate="2017-10-06T13:43:59.853" UserId="2103" />
  <row Id="9636" PostId="17" Score="0" Text="There are lot's of good suggestions below. I would suggest using an example that does not admit an easy iterative solution. Bonus points if it does not use tail-recursion." CreationDate="2018-01-14T04:56:52.130" UserId="3948" />
  <row Id="12317" PostId="17" Score="0" Text="Find the file named &quot;ThisIsIt&quot; but only if it is at the bottom-most node of a tree-structured directory." CreationDate="2018-05-06T22:13:05.503" UserId="3524" />
  <row Id="13411" PostId="17" Score="0" Text="It is like teaching recursion." CreationDate="2018-09-08T11:13:39.070" UserId="204" />
  <row Id="13489" PostId="17" Score="0" Text="A recursive program is a program that calls itself recursively." CreationDate="2018-09-18T16:02:58.870" UserId="5930" />
  <row Id="16901" PostId="17" Score="0" Text="Related thread (no, this is not a recursive link to the same thread) over at CS SE: [teaching recursion](https://cs.stackexchange.com/questions/30712/teaching-recursion)" CreationDate="2020-08-26T17:51:02.867" UserId="9426" />
  <row Id="18249" PostId="17" Score="0" Text="Well people wrote a lot of ideas, I'll just remind of the simple Fibonacci Series as it doesn't involve programming just the recursion concept in a simple form; and they already took it in high school without the emphasize on the recursion concept" CreationDate="2021-09-07T13:57:03.917" UserId="9131" />
  <row Id="137" PostId="18" Score="0" Text="I would strongly advise against locking students to a vendor off the bat. Notice I'm not implying students are CS students. You can teach CS to other engineering students, for instance. My Mechanical Engineering friends had some programming and algorithms courses where they did algorithms is pseudo code on paper and also some exercises and projects in Visual Basic." CreationDate="2017-05-24T07:45:27.693" UserId="28" />
  <row Id="109" PostId="19" Score="4" Text="I'm voting to close this question because “is anyone out there doing this?” invites a long list of “me too” answers, which [Stack Exchange isn't a good place for](https://cseducators.stackexchange.com/help/dont-ask). There are surely good questions to ask about how to devise a course around Processing, about how to teach this and that subject using Processing, about what audiences it's suitable for... but this question isn't it." CreationDate="2017-05-23T20:59:22.753" UserId="124" />
  <row Id="118" PostId="19" Score="1" Text="This is a new site and this is the basis for useful discussion.  We need to get some of those started." CreationDate="2017-05-24T00:34:01.937" UserId="21" />
  <row Id="143" PostId="19" Score="3" Text="No, this is [not a discussion site](https://cseducators.stackexchange.com/help/dont-ask), it's a [question and answer site](/tour). We do *not* need overly broad questions to get started, in fact they're a bad idea because they start the site with poor content that is inferior to other, more established resources. The ideal way to start the site is with *focused*, *expert* questions." CreationDate="2017-05-24T08:40:51.833" UserId="124" />
  <row Id="312" PostId="19" Score="0" Text="I have a vested interest in this topic and would love for substantive, experiential responses, so I suggested an edit that might address the issue of it being &quot;too broad.&quot;" CreationDate="2017-05-27T01:53:58.030" UserId="76" />
  <row Id="829" PostId="19" Score="0" Text="@Peter:I have (hopefully) narrowed the question by asking for whether this meets &quot;minimum requirements&quot;/entry point as opposed to &quot;best practices,&quot; and wonder if the question can be reopened in its current form." CreationDate="2017-06-12T02:46:37.643" UserId="613" />
  <row Id="845" PostId="19" Score="0" Text="@TomAu Absolutely - it has my nomination for reopening certainly. Thanks for the revision." CreationDate="2017-06-12T21:15:28.840" UserId="76" />
  <row Id="1646" PostId="19" Score="0" Text="What's the age level here?" CreationDate="2017-06-23T15:07:47.213" UserId="919" />
  <row Id="1648" PostId="19" Score="0" Text="Grades 11 and 12.  The audience is students who are brand new to programming.  My school is a statewide magnet school (NCSSM) located in Durham, NC." CreationDate="2017-06-23T15:20:45.260" UserId="21" />
  <row Id="8652" PostId="21" Score="0" Text="&quot;find the innermost expression, evaluate it, then repeat&quot;&quot; is actually a *non-recursive* algorithm for expression evaluation." CreationDate="2017-10-05T23:20:29.423" UserId="1275" />
  <row Id="8675" PostId="21" Score="0" Text="The &quot;move outwards part&quot; is usually implemented via recursion." CreationDate="2017-10-07T00:16:53.563" UserId="42" />
  <row Id="50" PostId="22" Score="2" Text="Hi Marc, I like these, can you expand on how you would use any of these? For example (and rather simply) the tree: for branch, if water available, grow branch, split branch in two." CreationDate="2017-05-23T15:15:29.930" UserId="48" />
  <row Id="74" PostId="22" Score="4" Text="Your examples are missing a purpose. It may seem obvious, but I'm not sure the snail shell example works as well as 'fill a volume of soil with uniform root density'" CreationDate="2017-05-23T17:02:46.257" UserId="41" />
  <row Id="724" PostId="22" Score="0" Text="I think students are _surprised_ and _fascinated_ to see the pattern of a recurrent arithmetic sequence emerge in nature (e.g., the Fibonacci sequence in the petals on a sunflower).  I don't think this taps into any deep intuition for them. So, to say &quot;if you want to understand recursion, just reflect on the natural processes around you that have surprising recurrent properties...&quot; may not be helpful." CreationDate="2017-06-08T04:50:45.853" UserId="475" />
  <row Id="51" PostId="24" Score="0" Text="Can you also mention how the automated plagiarism tests handle the style of cheating where just variable + function names are changed? but the basic structure of the program is the same." CreationDate="2017-05-23T15:17:58.157" UserId="50" />
  <row Id="52" PostId="24" Score="2" Text="@andytilia variable and function names are stripped, so not considered by the plagiarism check. I included an example for clarification." CreationDate="2017-05-23T15:22:44.447" UserDisplayName="user24" />
  <row Id="140" PostId="24" Score="0" Text="One professor that used such plagiarism tools said that the tool was set up in such a way that if more than 50% of students had the same code, it gets ignored as boilerplate. This seemed to work for her." CreationDate="2017-05-24T07:53:39.087" UserId="28" />
  <row Id="798" PostId="25" Score="1" Text="This answer would be improved if it had more of a synopsys of the linked material. Reading it without following the links (or if the links die), there is not a lot to go in." CreationDate="2017-06-11T09:24:42.813" UserId="41" />
  <row Id="6334" PostId="25" Score="0" Text="@adamblan, Could you give any more details about this assignment?" CreationDate="2017-07-31T02:53:54.230" UserId="27" />
  <row Id="152" PostId="28" Score="0" Text="While this is not the most popular question so far, I think I like this one the best" CreationDate="2017-05-24T11:41:33.253" UserId="28" />
  <row Id="56" PostId="29" Score="0" Text="I already grade labs through code interviews, so much of this is easy for me to implement.  I also *love* your notion for how to set up different assignments.  I'm going to set up a new question to ask about that, specifically, because I think it deserves its own discussion." CreationDate="2017-05-23T15:30:04.390" UserId="27" />
  <row Id="58" PostId="29" Score="0" Text="@Chiorbean yeah, the screen checks and the differing assignments were the two changes for me that had the biggest impact.  Especially for introductory assignments, tweaking the lab is trivial for us the teachers but for the students it seems like entirely different assignments and really demotivates the urge to copy." CreationDate="2017-05-23T15:33:05.940" UserId="49" />
  <row Id="87" PostId="30" Score="5" Text="After introducing HTML, add an assignment at the end of the lab session to make a web page that lists the prime numbers under 100, without hard-coding them? :-)" CreationDate="2017-05-23T18:34:34.240" UserDisplayName="user24" />
  <row Id="1680" PostId="30" Score="0" Text="Does the markup language have an if-then statement or conditional loops?" CreationDate="2017-06-24T00:52:29.930" UserId="662" />
  <row Id="7795" PostId="30" Score="0" Text="HTML *is* a language, but it's not a programming language, nor is it a regular language. But &quot;regular language&quot; means something different to what you probably meant. C, Java and Scheme aren't regular languages either." CreationDate="2017-09-04T03:27:19.083" UserId="1275" />
  <row Id="8225" PostId="30" Score="0" Text="See: [Turing completeness](https://en.wikipedia.org/wiki/Turing_completeness)" CreationDate="2017-09-17T14:29:14.633" UserId="2516" />
  <row Id="62" PostId="32" Score="1" Text="Is it possible that the &quot;scare&quot; intimidation factor is a modern myth?  Or perhaps a result using too high a level language for too long?  The CARDIAC computer fit on one sheet of cardboard, and a class of  (IIRC) mostly non-STEM undergrads seemed to have no problems with programming it for an assignment.  And plenty (perhaps tens to hundreds of thousands?) of 14-17 year old kids learned to poke 6502 asm instructions." CreationDate="2017-05-23T15:55:40.307" UserId="59" />
  <row Id="63" PostId="32" Score="1" Text="@hotpaw2 I think it'll be hard to find an answer to that, but it's an interesting idea. I'd conjecture it's more a case of &quot;I only learned 6502 assembly, so it was easy for me&quot; being said by those who **did** thrive, and anyone who was unable to make the jump simply dropped out and gave up completely. I'll have a look round to see if I can find any research about how students learn in assembly, compared to a higher language, though." CreationDate="2017-05-23T16:01:34.347" UserId="2" />
  <row Id="113" PostId="32" Score="5" Text="“they almost certainly won't be writing much unless they go into fields like embedded development, OS development, etc.” — or even if they do. I am an embedded OS developer and I write maybe a handful of lines of assembly a year. In a busy year." CreationDate="2017-05-23T21:33:32.617" UserId="124" />
  <row Id="200" PostId="32" Score="2" Text="The point would likely not be to train students how to write applications in assembly language, but more so that they learn enough about (near 1-to-1) machine code, to better understand how a CPU/processor actually carries out the real work." CreationDate="2017-05-24T22:37:48.820" UserId="59" />
  <row Id="230" PostId="32" Score="1" Text="@hotpaw2 Ah, right, sorry about that; it appears I've missed the point a little bit. I think the answer would depend on what language you plan to teach—a Python class probably wouldn't need an awareness of assembly just yet, but a C/C++ class might find it helpful. I'll revise my answer a little if you edit with that info in the question." CreationDate="2017-05-25T14:55:00.347" UserId="2" />
  <row Id="446" PostId="32" Score="1" Text="The scare/intimidation factor exists, to a degree. The affected students aren't &quot;scared&quot; of doing it, or of programming in general, rather they decide that &quot;that's too much work.&quot; Especially when dealing with modern youth in the larger countries, cost-benefit analysis seems to be automatically performed at every turn, and in such an analysis assembly creates the impression that the effort far out weighs the gains." CreationDate="2017-05-30T12:22:27.257" UserId="104" />
  <row Id="4021" PostId="32" Score="1" Text="I'm a bits and bytes guy. I learned back in the day when, to build something decently fast, you'd write your program in assembly, transcode it to decimal numbers, then &quot;poke&quot; it into RAM. As recently as 10 years ago I was on a project where the only way to accomplish what we needed (super fast RFC 4122 compliant UUID on z Series architecture) was to build it in assembly. But that is the only time I have used assembly seriously since the early 1990's." CreationDate="2017-07-11T02:09:58.990" UserId="1537" />
  <row Id="10147" PostId="32" Score="1" Text="Nice answer, definitely agree it's not appropriate for people who don't know how to think of the right algo for simple stuff.  Asm is *much* easier to learn after you understand pointers (e.g. in C).  I found it pretty straightforward to learn from looking at how a compiler implemented the logic of my code using asm.  Once you have the mental model of registers as the architectural state, and each instruction doing something specific to that state, you understand the building blocks you can use to implement algorithms." CreationDate="2018-02-23T05:11:14.743" UserId="1654" />
  <row Id="10150" PostId="32" Score="0" Text="I wouldn't say it's hard to read, though.  Almost all computer languages are hard if you don't know them, so yes of course it's hard for beginners to read, but not a lot worse than C unless you don't even understand what registers are.  e.g. once you know one C-like language, you can make some sense of most other languages that use similar syntax.  With asm, I can usually make some sense of assembly language for architectures I barely know anything about, because usually the mnemonics + context are enough of a hint to figure out load / store / move." CreationDate="2018-02-23T05:27:40.517" UserId="1654" />
  <row Id="10151" PostId="32" Score="0" Text="And BTW, OS-dev is a giant complication beyond just creating working algorithms in user-space.  Knowing some (or a lot) of asm is useful for performance tuning: e.g. looking at compiler output to see where you could [tweak the source to help the compiler](https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster-than-my-hand-written-assembly-for-testing-the-collat/40355466#40355466), or looking at `perf` (HW performance counter profiles), and none of that has anything to do with writing drivers or setting up x86 IDT/GDT / segment registers (or making BIOS calls)." CreationDate="2018-02-23T05:31:50.733" UserId="1654" />
  <row Id="10206" PostId="32" Score="0" Text="This is full of unqualified assertions that fly in the face of my experiences as a teacher and student. The TL;DR appears to be &quot;IF you pick an obscure, hard-to-use, assembler ... and you try to write a far too complex program ... then assembly is hard and of little value&quot;. But that starting point fails irrespective of assembly's pros/cons. For starters, Assembly is very easy to read/write if you pick an assembly that's designed to be easy to read/write (there are plenty - some purpose-designed for this, c.f. my answer below). I think it's unhelpful to throw out all assembly so simplistically." CreationDate="2018-02-27T18:31:48.603" UserDisplayName="user31" />
  <row Id="10153" PostId="33" Score="1" Text="... or they'll become compiler developers / performance tuning experts.  I got into computer programming after messing around with electronics / digital logic as a hobby in high school, and I've always loved knowing how things *really* work.  And now I code-golf in x86 machine code for fun :P" CreationDate="2018-02-23T06:01:02.057" UserId="1654" />
  <row Id="59" PostId="35" Score="0" Text="better to teach client side first because more interactive, easier and much less chance to accidentally screw up." CreationDate="2017-05-23T15:38:03.943" UserId="70" />
  <row Id="72" PostId="36" Score="0" Text="This is an interesting idea that I hadn't considered.  I like your proposal to fractionate your approach to the various stacks." CreationDate="2017-05-23T16:23:51.303" UserId="27" />
  <row Id="629" PostId="37" Score="1" Text="[TIS-100](http://www.zachtronics.com/tis-100/) is another great resource in this area." CreationDate="2017-06-06T20:43:33.307" UserId="372" />
  <row Id="67" PostId="40" Score="1" Text="I find your last paragraph gives the impression that markup could go some of the way towards providing a computational engine - so risking re-enforcing the confusion. Markup/code isn't apples/oranges, its more apples/coal." CreationDate="2017-05-23T16:13:53.263" UserId="41" />
  <row Id="111" PostId="40" Score="1" Text="I made my wording a little more like what I would actually say. Hopefully clearer :)" CreationDate="2017-05-23T21:22:51.850" UserId="27" />
  <row Id="686" PostId="40" Score="1" Text="Time like this make me miss WordPerfect. If you selected &quot;reveal code&quot; it opened a small pane at the bottom and showed graphical open/close tags around bold/italic/center/etc. Shaped like a box with a point on one end, or like really old wooden direction arrow street signs. Perfect for showing the &quot;tags&quot; in HTML. Could even save as HTML and match the tags 1:1." CreationDate="2017-06-07T10:14:31.173" UserId="104" />
  <row Id="687" PostId="40" Score="3" Text="If you want to go crazy with this, you can still use Word.  Make a very simple document, save it as docx, and rename the .docx to .zip - inside are folders of xml files, one of which contains your text in an insane markup." CreationDate="2017-06-07T10:17:46.720" UserId="27" />
  <row Id="1681" PostId="40" Score="0" Text="Use some other example program than a word processor - I've had a student use OpenOffice to write his shell scripts in my Linux class, after I explained that &quot;shell scripts are just plain text files, so you can edit them in any plain text editor - vi, joe, geany, kwrite, even OpenOffice (as long as you save as plain text)&quot;.  It brings a whole new dimension to the vi vs. emacs debate..." CreationDate="2017-06-24T00:55:08.930" UserId="662" />
  <row Id="7794" PostId="40" Score="0" Text="I wouldn't mention XML. You don't need to look at how Word actually stores its documents to get the point." CreationDate="2017-09-04T03:25:46.813" UserId="1275" />
  <row Id="66" PostId="41" Score="0" Text="Perhaps something even simpler.  The CARDIAC was a 10 instruction, decimal, single accumulator computer that could be described (and run!) on one sheet of cardboard.  Knuth's MMIX is another, more RISC like, possibility.  Both designed for pedagogy, rather than implementation efficiency vs. gate count." CreationDate="2017-05-23T16:05:16.907" UserId="59" />
  <row Id="69" PostId="41" Score="2" Text="As I understand it, LMC was specifically designed for pedagogy too. I listed it first because - as far as I know - it's the most recent, most widely supported, easiest to find documentation for (partly because it's still on syllabuses today)" CreationDate="2017-05-23T16:18:15.683" UserDisplayName="user31" />
  <row Id="10148" PostId="41" Score="1" Text="I'm not a big fan of LMC.  It's *too* crippled, so basic asm concepts like checking for even numbers by checking the low bit is a major challenge, because [the architecture doesn't include an AND instruction](https://en.wikipedia.org/wiki/Little_man_computer#Instructions) or any other bitwise operation.  It only has add/sub, load/store, and branch on zero / branch on positive.  (And IN / OUT).  So you can teach instructions / load / store, but you can't teach manipulating binary." CreationDate="2018-02-23T05:20:49.900" UserId="1654" />
  <row Id="10149" PostId="41" Score="0" Text="There are less-crippled teaching architectures like LC-3 https://en.wikipedia.org/wiki/LC-3#Instruction_set, which is a register machine rather than an accumulator machine, and has bitwise AND and NOT.  We see some SO questions from people with assignments to write things that are only hard because they need to work around the limitations of LMC or LC-3.  Maybe's that's useful as lateral thinking, but some instructors have gone too far out into the weeds.  If you're teaching asm with a stripped-down architecture, IMO don't usually make students synthesize left-shift from `add same,same`, etc." CreationDate="2018-02-23T05:26:36.420" UserId="1654" />
  <row Id="10152" PostId="41" Score="1" Text="related: [What is the minimum instruction set required for any Assembly language to be considered useful?](https://stackoverflow.com/a/19677755/224132)" CreationDate="2018-02-23T05:32:30.757" UserId="1654" />
  <row Id="120" PostId="42" Score="0" Text="Site seems to have gone offline :(. Google &quot;l-system trees&quot; and you'll get many great examples in image-search." CreationDate="2017-05-24T01:44:52.143" UserDisplayName="user31" />
  <row Id="110" PostId="43" Score="11" Text="You've shown tail-recursion on a problem of the same size at each function invocation, and have thus merely reformulated a `do {...} until` block. This doesn't demonstrate the general power of recursion. To keep with your example, I prefer a formulation like this:&#xA;&#xA;`function revise(essay) {&#xA;    if essay.scale &gt; sentence {&#xA;        foreach s in essay.subsections {&#xA;            revise(s);&#xA;        }&#xA;    }&#xA;    do {&#xA;        read(essay);&#xA;        get_feedback_on(essay);&#xA;        apply_changes_to(essay);&#xA;    } until essay.complete?&#xA;}`" CreationDate="2017-05-23T21:08:31.730" UserId="62" />
  <row Id="9563" PostId="43" Score="2" Text="The first one is just a loop..." CreationDate="2018-01-11T02:17:22.980" UserId="1275" />
  <row Id="64" PostId="44" Score="2" Text="which programming language are you focusing on ? like python, web development" CreationDate="2017-05-23T16:02:22.937" UserId="73" />
  <row Id="65" PostId="44" Score="1" Text="Sorry, should have said, front-end web development, HTML, CSS and maybe a bit of JS" CreationDate="2017-05-23T16:03:16.583" UserId="55" />
  <row Id="9114" PostId="44" Score="0" Text="I have been looking at [brackets editor](http://brackets.io/). It is very interactive (it opens chrome, and displays results as you type), and simple. I will be using it with pupils in a few months. I will give an update then." CreationDate="2017-11-27T19:04:15.603" UserId="204" />
  <row Id="2257" PostId="47" Score="0" Text="One rarely spits out HTML directly with modern frameworks. More frequently, the html is stored in resource files (jsp, asp, xml, etc) and the framework merges the parameters with the resources to produce HTML. It is poor practice to embed HTML in your application code." CreationDate="2017-07-01T04:40:49.623" UserId="1537" />
  <row Id="68" PostId="48" Score="5" Text="+1: A simpler &quot;IDE&quot;, such as Notepad++, gives you enough help while forcing you to learn" CreationDate="2017-05-23T16:16:50.227" UserId="35" />
  <row Id="70" PostId="48" Score="8" Text="This is an unfair characterization of IDEs, and - in my experience - leads to whole classrooms full of children who detest programming because they've been blocked from using any of the tools that modern programmers take for granted. If you want to REALLY make them work, use pen-and-paper. If you're going to let them use a computer, give them an IDE. Anything in between is needless punishment." CreationDate="2017-05-23T16:20:23.057" UserDisplayName="user31" />
  <row Id="204" PostId="48" Score="1" Text="@Adam I'm not suggesting that IDEs be blocked entirely, but that as a teacher, you use a simpler code editor. Students can use what they prefer, because everyone has different editor preferences, but set the example of keeping it simple." CreationDate="2017-05-25T02:09:43.347" UserId="58" />
  <row Id="263" PostId="48" Score="0" Text="@thesecretmaster it's not about preference, it's about teaching people to use the correct tools for the job. Teaching people to &quot;not use an IDE&quot; is liking teaching carpenters &quot;not to use a saw; snap the wood roughly in half instead&quot;. IDE's are not some new-fangled device that hampers programming, they are core to programming. I accept some people want purism - but purism here would be manually stimulating transistors, or writing all code on paper and never letting a compiler error-check it." CreationDate="2017-05-25T23:11:47.373" UserDisplayName="user31" />
  <row Id="264" PostId="48" Score="2" Text="I disagree. One can write, for example, ruby professionally (e.g. the creator of Ruby on Rails) and still use a simple editor with syntax hilighting (TextMate). It _is_ about preferance because the same code can be written with `nano` as can be written with RubyMine. A carpenter can't cut the wood the same with their hands as they can we a saw. It could be like the difference between a hand saw and a motorized saw. Some people like `nano`, some people like RubyMine, some people like somthing else. It's all a matter of preference." CreationDate="2017-05-25T23:23:31.433" UserId="58" />
  <row Id="267" PostId="48" Score="2" Text="Additionally, as a carpenter myself I can say that on some projects I'd use my power tools and on others I'd use my hand tools. It depends on various characteristics of the task. Same thing with programming. When I work with ruby, I use a text editor. When I write code for android, I use Android Studio. It depends on the demands of the job." CreationDate="2017-05-25T23:50:42.147" UserId="58" />
  <row Id="447" PostId="48" Score="1" Text="@Adam What _are_ the &quot;correct tools&quot; for the job? I had a programming position where the required tool _was_ Notepad++, installed and configured on the computer assigned to me. The same rules applied to all 45 programmers (Perl, Python, Ruby, HTML and JavaScript), _and_ the DBA as well. The only person using anything else was the graphic artist. The &quot;correct tool&quot; is a well trained mind using the best tools available that are appropriate for the task. Maybe and IDE, maybe not. Don't short-change the students by denying them exposure to the full range of options." CreationDate="2017-05-30T12:33:32.670" UserId="104" />
  <row Id="700" PostId="48" Score="0" Text="@GypsySpellweaver There is an exceptional example to prove any viewpoint. I expect common sense to prevail: jobs where you mustn't use an IDE are the 0.01%. As a teacher, I care about the 99%. I also care about teaching people the core principles of programming: planning a program, structuring their code, iterating on a solution, etc. Teaching people to be efficient with pen and paper, or vim, is not my job. (by contrast: at university level, I encourage students to learn vim et al - we're teaching wider and deeper)" CreationDate="2017-06-07T15:49:28.797" UserDisplayName="user31" />
  <row Id="16907" PostId="48" Score="1" Text="@Thesecretmaster : The [IDE divide](https://blog.osteele.com/2004/11/ides) is worth reading for this debate [Disclaimer: Old vi/emacser here! ]" CreationDate="2020-08-29T03:42:49.803" UserId="8837" />
  <row Id="71" PostId="49" Score="0" Text="Of all the options available - free, minimal, cross-platform, open-source - suggesting Microsoft's single-platform, monolithic, closed-source, pay-for product has to be the worst option IMHO." CreationDate="2017-05-23T16:21:22.177" UserDisplayName="user31" />
  <row Id="73" PostId="49" Score="2" Text="@Adam, maybe you can check here: https://www.visualstudio.com/free-developer-offers/" CreationDate="2017-05-23T16:36:34.123" UserId="80" />
  <row Id="75" PostId="49" Score="0" Text="None of those are VS. They are all cut-down versions of VS that don't work properly, and cause problems when you try to use them on real projects - forcing you to go purchase real VS. VS is great, but I stand by my statement that there are many many better options for educators." CreationDate="2017-05-23T17:20:11.433" UserDisplayName="user31" />
  <row Id="6197" PostId="50" Score="0" Text="In this same vein, jsFiddle is good for trying out ideas and seeing how things look quickly. It does not have autocomplete." CreationDate="2017-07-27T16:20:52.990" UserId="1079" />
  <row Id="89" PostId="51" Score="5" Text="Simple is good, but NotePad is far too extreme. Its never too early to stop using Notepad." CreationDate="2017-05-23T18:36:26.203" UserId="41" />
  <row Id="630" PostId="54" Score="0" Text="Soon to be released is JupyterLab, which is a full IDE in the browser." CreationDate="2017-06-06T20:49:32.350" UserId="384" />
  <row Id="20925" PostId="54" Score="0" Text="Atom is now end-of-life." CreationDate="2023-01-10T16:13:16.390" UserId="9426" />
  <row Id="1005" PostId="58" Score="1" Text="To link Notepad++ to the JDK, if I understand things, check out [Using Notepad++ to compile Java code](https://stackoverflow.com/q/4314027/7412956) on Stack Overflow. It references one post, but another good-lucking one is [Compile Java Code Directly in Notepad++](https://www.willnwish.com/complie-java-code-directly-notepad/)." CreationDate="2017-06-15T06:33:16.887" UserId="104" />
  <row Id="112" PostId="59" Score="0" Text="I think there are two questions here: one about the appeal for adult students (undergrads), and one for kids. Since the current answers don't focus on kids, I would recommend focusing the question on adults." CreationDate="2017-05-23T21:28:05.900" UserId="124" />
  <row Id="18244" PostId="62" Score="1" Text="_&quot;Then, I'd show the students how to covert between flat form and recursive form, and discuss the pro's/con's of using both in implementation.&quot;_ Due to the finite stack, if you **can** convert between a loop or recursion, the loop is objectively superior. Recursion is reserved for those cases where loops simply don't cut it (or become insanely complex)" CreationDate="2021-09-03T10:31:28.797" UserId="2164" />
  <row Id="181" PostId="63" Score="1" Text="Basic knowledge of data structures is necessary, as a few synchronization mechanisms use queues. You could potentially include it in a data structures course IMO. pthreads could be confusing at this level, though. C++11 threads would be a better choice." CreationDate="2017-05-24T17:29:58.800" UserId="130" />
  <row Id="6346" PostId="63" Score="1" Text="I didn't do a CS degree, but I did learn mutli threading at my first year of studying after high school, however it was because I had finished the past exercices already (i was quite above the level of our classe because I already practiced programmation before with PHP/web). I learned fork() and process intercommunication (pipe, socket, semaphore,file, ...) right before." CreationDate="2017-07-31T11:00:13.620" UserId="1375" />
  <row Id="6727" PostId="63" Score="0" Text="Maybe my memory is poor, but what I recall of my college degree program 30 yeas ago seems very limited and simplistic compared to what people seem to be learning in high school these days. Is it really that much better now? Why?" CreationDate="2017-08-08T01:59:03.743" UserDisplayName="user737" />
  <row Id="6728" PostId="63" Score="0" Text="30 years ago, the typical student PC did not have an OS that supported multi-threading or multiple processors.  Whereas today, a typical student's mobile phone might expose quad or octo CPUs running 100's of processes." CreationDate="2017-08-08T02:37:23.487" UserId="59" />
  <row Id="233" PostId="65" Score="1" Text="In my opinion the two main disadvantages of the Raspberry Pi are the cost (besides the Pi you'll also need displays and keyboard+mouse), and the complexity of running a full Linux system.  Learning how to use a new operating system by itself can already be a barrier to entry, and it can be time-consuming to troubleshoot and fix the OS if something goes wrong.&#xA;&#xA;An Arduino can in that respect can be easier as flashing a new program is a fresh start.  Additionally there is plenty of room for a variety of skill levels, as there are tools which allow block-based programming of the Arduino too." CreationDate="2017-05-25T15:13:34.387" UserId="200" />
  <row Id="249" PostId="65" Score="0" Text="Fair points. As for the cost, and I know this is not universal, my school has quite a few old displays/keyboard/mice. Without older peripherals to use, then the cost issue does arise. Additionally, the HDMI-VGA connection with older displays is not without its issues. The command-line environment aside, I think the latest PIXEL desktop goes a long way to making the OS more beginner-friendly. Out of curiosity, what are the block-based tools for Arduino? I always used the now-defunct codebender on a Chromebook, so I haven't seen a non-text based IDE." CreationDate="2017-05-25T19:13:33.167" UserId="76" />
  <row Id="298" PostId="65" Score="1" Text="There are Scratch plugins for interfacing with Arduino and mod called S4A.  There is also library called [BlocklyDuino](https://github.com/BlocklyDuino/BlocklyDuino) which is a port of Blockly to generate code for the Arduino.  One project which uses it is [iForge](https://www.genlrn.com/iForge/).  I'm also using a 3rd party Arduino called the LightBlue Bean which can be programmed over bluetooth from an iPad.  It can be programmed with blocks in the iPad apps [Tickle](https://itunes.apple.com/us/app/id1063639403?mt=8) and [Bean Forge](https://itunes.apple.com/us/app/id1226549950?mt=8)." CreationDate="2017-05-26T15:41:37.093" UserId="200" />
  <row Id="418" PostId="69" Score="0" Text="Note you are asking about revision-control not version-control. Yes they are different things." CreationDate="2017-05-28T22:53:25.553" UserId="204" />
  <row Id="8103" PostId="69" Score="0" Text="@ctrl-alt-delor Wikipedia says that they are the same thing: https://en.wikipedia.org/wiki/Version_control" CreationDate="2017-09-12T22:23:25.723" UserId="2068" />
  <row Id="8106" PostId="69" Score="0" Text="An introductory class may be the only exposure some students ever get to CS. There are so many interesting, inspiring and cross-subject topics to cover in such little time. If a student doesn't end up sticking with CS, was investing time in a specific VCS worth it?" CreationDate="2017-09-12T23:03:23.523" UserId="3032" />
  <row Id="8115" PostId="69" Score="0" Text="@KevinWorkman Wikipedia is good, real good. However is is not **always** correct. There is a difference, but in seems that most people do not make it. Like the difference between noise and sound, or heat and temperature. No one else on this site, is making the distinction, so I would not worry too much." CreationDate="2017-09-13T07:40:22.467" UserId="204" />
  <row Id="8116" PostId="69" Score="0" Text="As revision control is useful for **everyone**, not just CS students. It could be introduced outside of a programming context, very early on. see also https://cseducators.stackexchange.com/a/3601/204" CreationDate="2017-09-13T07:45:14.217" UserId="204" />
  <row Id="8132" PostId="69" Score="0" Text="@ctrl-alt-delor In that case it sounds like one of those arbitrary distinctions that doesn't actually impact the real world. In fact, [tag:version-control] is marked as a synonym of [tag:revision-control]." CreationDate="2017-09-13T16:18:05.353" UserId="2068" />
  <row Id="8133" PostId="69" Score="0" Text="@KevinWorkman Depends what you are doing in the word (Medical device manufacturers have to have version control, but do not have to use revision control (US FDE, EU medical device directive )). Version control is being able to identify the version of a binary, and then recreate it from source. But the distinction is probably not important for most people." CreationDate="2017-09-13T17:08:14.977" UserId="204" />
  <row Id="8134" PostId="69" Score="0" Text="@ctrl-alt-delor Then why mention it at all? :p" CreationDate="2017-09-13T17:10:45.167" UserId="2068" />
  <row Id="77" PostId="70" Score="0" Text="Does 'having lost hours of coding through not using backups' count as a reason?" CreationDate="2017-05-23T17:36:49.803" UserId="41" />
  <row Id="78" PostId="70" Score="0" Text="Yeah, probably should :) I've certainly had students accidentally delete things they're working on." CreationDate="2017-05-23T17:40:25.970" UserId="30" />
  <row Id="14525" PostId="70" Score="0" Text="+1 on the reason. A big motivation for some of my students is the easy ability to access their code from home. And when collaborative projects come along many will appreciate having tools to support parallel development (my students want it to work like Google Docs with partners typing in the same file at the same time - while at the same time resisting pair programming, I'd love a way to let them try that without a lot of overhead...)." CreationDate="2019-03-18T03:02:56.120" UserId="134" />
  <row Id="123" PostId="72" Score="0" Text="[Harvard's use of Github](https://github.com/blog/2322-how-cs50-at-harvard-uses-github-to-teach-computer-science) for CS50 is worth investigating." CreationDate="2017-05-24T05:07:12.617" UserId="44" />
  <row Id="83" PostId="75" Score="0" Text="I've looked for this before, but I never found it.  In your experience, practically speaking, how complex can an assignment be to be realistically tenable here?" CreationDate="2017-05-23T18:24:04.903" UserId="27" />
  <row Id="86" PostId="75" Score="0" Text="Works pretty well for warm up type stuff in an intro class. Not all that useful for labs once you get past single methods. I actually wound up writing my own because I couldn't do as much as I needed to with CodingBat." CreationDate="2017-05-23T18:30:52.530" UserId="30" />
  <row Id="88" PostId="75" Score="0" Text="Is your tool published?  *folds hands behind back, bats eyelashes innocently, whistles and looks down at feet*" CreationDate="2017-05-23T18:35:40.780" UserId="27" />
  <row Id="90" PostId="75" Score="0" Text="There's a link on my profile. Don't want to post a link here. Seems a little spammy :)" CreationDate="2017-05-23T18:38:48.437" UserId="30" />
  <row Id="84" PostId="76" Score="0" Text="I never knew what these kinds of systems were called before.  Nice!  Is it hard to make one?" CreationDate="2017-05-23T18:26:15.343" UserId="27" />
  <row Id="85" PostId="76" Score="0" Text="@Choirbean it depends on the kind of language and the kind of checks that you want to run. For imperative language, there are many tools that can do analysis like the number of branching points per function, line length, whether variable names conform to some standard, etc. If you want to check for things like loose coupling between components, component balancing, etc. or even suggesting different ways of writing the same, it gets more tricky. I am working with a functional language, and at first sight I would expect that the rules of thumb are harder to quantify in that paradigm." CreationDate="2017-05-23T18:30:23.863" UserDisplayName="user24" />
  <row Id="91" PostId="76" Score="0" Text="I can understand a little bit of pushing towards style, but how much would you want? Should braces go on the same line as an if, or the line below? Should they be indented, or not? Seems like a lot of this would come down to the instructor." CreationDate="2017-05-23T18:42:04.210" UserId="30" />
  <row Id="93" PostId="76" Score="1" Text="@RyanNutt that is true, but some things are general ideas about code quality (I updated the question with some examples). Using locally defined functions, avoiding redundant parentheses and things like this are quite universal - and, the idea behind this question is that using too many parentheses (e.g.) may indicate a problem with your understanding of the language." CreationDate="2017-05-23T18:44:35.510" UserDisplayName="user24" />
  <row Id="97" PostId="76" Score="0" Text="@Keelan - Gotcha. Makes more sense with the edit." CreationDate="2017-05-23T19:00:16.960" UserId="30" />
  <row Id="399" PostId="76" Score="1" Text="Teaching advice: Feed back should be frequent and as soon as possible. From my programming experience (before I was teaching): Some people did not learn, until the feedback was given in the editor, as the code was typed. For getting buy-in for lint, we had to explain the difference between error messages, and errors, and that lint is your friend. Your role is not to minimise error messages, but to read them and allow it to help you minimise errors. Warnings help with potential errors, and latent errors (a latent error is one that may manifest, when someone changes the code)." CreationDate="2017-05-28T12:07:21.833" UserId="204" />
  <row Id="92" PostId="78" Score="0" Text="So you've invented design by validation - but is it _worse_ than before? Would they still struggle - if so there is a risk of mis-juding the value of the tool." CreationDate="2017-05-23T18:42:27.317" UserId="41" />
  <row Id="96" PostId="78" Score="0" Text="It's a fair question, and I (obviously) only have a subjective answer. With my lowest performers, I believe that it is worse, because what helps them is to (slightly) increase the pain of the editing/compiling/running cycle.  If it takes them 9-12 quick, thoughtless edits to get rid of a red underline in Eclipse, forcing them to compile after each one also makes actually *thinking* about what they're written comparatively more appealing." CreationDate="2017-05-23T18:49:23.667" UserId="27" />
  <row Id="103" PostId="78" Score="0" Text="I'm cynically less interested in the lowest performers, more those who have latent talent (or talent in a related area that CS might unlock if they're not put off early). - but I appreciate that's not a universal approach..." CreationDate="2017-05-23T19:57:06.723" UserId="41" />
  <row Id="105" PostId="78" Score="0" Text="I work hard to pull my low-performers up, but the environment that I'm in absolutely *forces* me to. For you, I guess I would then say that for medium and high performers, other than the exception I've outlined above, that there's no substantive benefit. Convenience, sure, but they won't be learning more in your class for having a linter." CreationDate="2017-05-23T20:03:49.280" UserId="27" />
  <row Id="98" PostId="79" Score="1" Text="Is this really something you want to incorporate into programming courses? In my experience, courses work better when they focus on one, or a few closely related topics. So, I'd suggest a separate security course in the curriculum." CreationDate="2017-05-23T19:05:39.043" UserDisplayName="user24" />
  <row Id="151" PostId="79" Score="0" Text="I was thinking about beginners here. I know there are CS master's courses that explicitly focus on detecting vulnerabilities (network security, for example)." CreationDate="2017-05-24T11:14:39.660" UserId="69" />
  <row Id="308" PostId="81" Score="0" Text="This looks so much nicer now that math notation is enabled :)" CreationDate="2017-05-26T19:45:59.150" UserId="27" />
  <row Id="310" PostId="81" Score="0" Text="@Choirbean Yeah. I expected that the math notation would be enabled soon enough, so I already used it when writing the answer. This answer is also a good one to show it is needed here, I think." CreationDate="2017-05-26T20:12:20.000" UserId="111" />
  <row Id="99" PostId="82" Score="7" Text="Second this. Used to use Python 2 because Pygame wasn't available for 3. Now that it is, no reason to look back." CreationDate="2017-05-23T19:06:47.863" UserId="30" />
  <row Id="100" PostId="82" Score="1" Text="The only reason to look into Python 2 is if you are working with some library or package that is created in it.  Otherwise, I 100% agree with @Aurora001" CreationDate="2017-05-23T19:18:40.207" UserId="27" />
  <row Id="115" PostId="82" Score="0" Text="at this time web mining libraries like pattern (https://pypi.python.org/pypi/Pattern) still stick with python2. Their py3 version still at testing stage" CreationDate="2017-05-23T23:48:33.903" UserId="133" />
  <row Id="850" PostId="82" Score="1" Text="Also keep in mind that -as noted in [PEP-373](https://www.python.org/dev/peps/pep-0373/)- in [2020](https://pythonclock.org/) Python 2.X will be retired..." CreationDate="2017-06-13T10:03:22.897" UserId="306" />
  <row Id="139" PostId="83" Score="1" Text="If someone finds a flaw in your app, you lose 1 credit. Who finds it first gets 1 extra credit. Let the games begin!" CreationDate="2017-05-24T07:50:42.143" UserId="28" />
  <row Id="150" PostId="83" Score="0" Text="How would I handle the case when there are no flaws in the code? You can't assign points for flaws that don't exist. So you'd have to require the students to explain why there is no flaw?" CreationDate="2017-05-24T11:10:15.097" UserId="69" />
  <row Id="158" PostId="83" Score="0" Text="Explain or defend, yes. Then the project becomes &quot;how did you prove there are now flaws&quot;. You could also give the class a program with known flaws and have them attack that." CreationDate="2017-05-24T12:07:01.223" UserId="35" />
  <row Id="159" PostId="83" Score="1" Text="@ecc When the course objective is not related to security, it is inappropriate to deduct points for security flaws." CreationDate="2017-05-24T12:09:03.097" UserDisplayName="user24" />
  <row Id="214" PostId="83" Score="1" Text="@Keelan I disagree.  For example in a C class, code that could have buffer overflows should lose points." CreationDate="2017-05-25T11:41:27.863" UserId="183" />
  <row Id="215" PostId="83" Score="2" Text="@EricJohnson that depends. If the course objective is to implement algorithms, it is not really relevant. As a rule of thumb, I would say don't grade what you don't teach." CreationDate="2017-05-25T11:43:48.187" UserDisplayName="user24" />
  <row Id="2276" PostId="84" Score="1" Text="These sort of constrained problems can be great seminar and assignment submission, but I'd caution you against assigning too many of these sort of problems in the context of a time-pressured exam. You'll filter not for those who are able to do this sort of abstract thinking, but for those who happen to see the solution more quickly and those who are less 'anxious' about solving problems under pressure." CreationDate="2017-07-01T16:17:17.807" UserId="916" />
  <row Id="101" PostId="85" Score="0" Text="What about an API?" CreationDate="2017-05-23T19:40:45.257" UserId="58" />
  <row Id="102" PostId="85" Score="0" Text="@thesecretmaster That'd be cool, but I think they might struggle with the purpose without some understanding on front end stuff. Although I have been trying to come up with a project to use https://deckofcardsapi.com/ . There's got to be something there." CreationDate="2017-05-23T19:49:47.023" UserId="30" />
  <row Id="12728" PostId="89" Score="0" Text="The example you give is finding logical errors.  Basic syntax will get syntax errors, which the compiler/interpreter should catch.  Not so with logical errors.  And mixing up `=` vs `==` will lead to logical errors, because it almost always evaluates to `true` - as in , &quot;why yes, this value can be or just has been assigned to that variable&quot;.  So... test on debugging code.  Both syntax errors and logic errors. Add in testing for edge cases, and you are part way on to teaching how to create unit tests :)" CreationDate="2018-06-01T01:26:59.703" UserId="662" />
  <row Id="1653" PostId="92" Score="0" Text="*`and are thought to be of little value now`* Depends on who you ask. They're still quite common. (And in some respects I'm not very good *at* them, even though I'm a rather proficient coder)." CreationDate="2017-06-23T16:34:30.817" UserId="1244" />
  <row Id="1654" PostId="92" Score="0" Text="Well, they're good in that the people who refuse to do them are worth interviewing..." CreationDate="2017-06-23T16:36:04.023" UserId="41" />
  <row Id="1658" PostId="92" Score="0" Text="Not necessarily there either. People can refuse because *they know that the measure of the test is pointless* or they might refuse because *they know that they aren't any good at programming.*  In either case the result is equivalent to, &quot;This scores Banana out of Ten.&quot;" CreationDate="2017-06-23T16:51:01.813" UserId="1244" />
  <row Id="107" PostId="93" Score="1" Text="Do they already know HTML?" CreationDate="2017-05-23T20:34:43.943" UserId="111" />
  <row Id="108" PostId="93" Score="0" Text="Most of them knows the basic of HTML, but i can't ensure it for all of them." CreationDate="2017-05-23T20:46:41.290" UserId="116" />
  <row Id="124" PostId="93" Score="2" Text="It sounds to me like it is not your task to incorporate this into your course. If the curriculum doesn't match with student needs, the education board should consider adding, removing and changing courses. Adding web development to a course teaching C will be confusing for students, as the two are not really related, and may very well be destructive for their proficiency with C." CreationDate="2017-05-24T05:13:46.857" UserDisplayName="user24" />
  <row Id="149" PostId="93" Score="1" Text="I agree with @Keelan, and also this is a pretty broad question: When+How should I introduce web development? I'd try and narrow it down if I were you." CreationDate="2017-05-24T10:41:20.717" UserId="58" />
  <row Id="15235" PostId="93" Score="0" Text="What is a &quot;BS&quot;? Are we talking about swear words here or *Bachelor of Science*? Or something else?" CreationDate="2019-06-18T09:29:34.913" UserId="1314" />
  <row Id="15239" PostId="93" Score="0" Text="@PeterMortensen I was talking about Bachelor of Science. However, looking at this question from 2017, I noted that these things are clear to me now and I know when to taech web development. Hope that this questions helps someone else with similar questions." CreationDate="2019-06-18T17:56:36.310" UserId="116" />
  <row Id="114" PostId="96" Score="0" Text="Agree about CS-APA and FRQs. We do a bunch of those in class. But they're graded very lightly on syntax. Ex: = and == can be used interchangeably. Braces can generally be omitted if the intent can be determined by indention." CreationDate="2017-05-23T21:36:55.597" UserId="30" />
  <row Id="121" PostId="96" Score="2" Text="As a fellow APCS-A teacher I have students keep a written notebook. In this they hand-write sample code as concepts are covered in class. I grade their notebooks every week by walking around the class with a checklist while they are working on their Friday coding project. Super fast and easy to do, and it is very evident who is not progressing, or who is just sloppy. I think the key to this is frequent, regular, formal checking with a consequence (notebooks are 5% of their final grade)." CreationDate="2017-05-24T04:01:10.357" UserId="136" />
  <row Id="126" PostId="96" Score="1" Text="@Kapai Thanks for sharing your practice. I really like that idea for next year." CreationDate="2017-05-24T05:37:21.243" UserId="76" />
  <row Id="185" PostId="96" Score="1" Text="For my HS work we had a very rigorous; Flowchart -&gt; Hand Code -&gt; Enter into IDE &amp; Debug to force us to work on thinking through the problem, attempting it by hand, and then fixing what we b0rked." CreationDate="2017-05-24T18:53:13.170" UserId="35" />
  <row Id="15234" PostId="100" Score="0" Text="What do you mean by the verb &quot;lacing&quot;? Can you elaborate?" CreationDate="2019-06-18T09:28:07.197" UserId="1314" />
  <row Id="12703" PostId="104" Score="0" Text="See this answer (https://cseducators.stackexchange.com/a/4852/1293) to a related question. It may offer some insight into this as well." CreationDate="2018-05-30T12:46:29.183" UserId="1293" />
  <row Id="14756" PostId="104" Score="0" Text="How do you measure diversity? Who do you want to attract to your course? Is it something like gender or race? I don't even know WTH is a CS-type. I see all kinds of people in CS, they don't seem to have a type to me" CreationDate="2019-04-22T02:03:39.360" UserId="6827" />
  <row Id="14792" PostId="104" Score="0" Text="@Aksakal - my big goal is to have the demographics of my classes match those of my school. What I mean by &quot;CS types&quot; are people who are comfortable doing computational thinking - so in part my question is about how you encourage people who may not see themselves as &quot;nerds&quot; to explore the possibility. One aspect of this is designing classes that encourage exploration and where success isn't predicated on &quot;natural&quot; CS talent." CreationDate="2019-04-23T00:46:07.543" UserId="134" />
  <row Id="14796" PostId="104" Score="0" Text="@dlu, the &quot;nerd&quot; is a silly stereotype. I suppose I would fit it, but a few of my friends did not. They weren't exactly jocks, but more like normal boys and girls, who just happened to like programming. I sense that by demographics you don't mean mere appearance, bit something else. I don't know if there's natural CS talent. What I see is that some people like it, and end up spending a lot of time doing it, and become very skillful. Maybe the way to accomplish your goal is to promote the idea that there's no CS type, and that everyone can do it if they like it." CreationDate="2019-04-23T01:44:33.400" UserId="6827" />
  <row Id="18245" PostId="105" Score="0" Text="&quot;Repeat until&quot; suggests that there is no need for recursion in this example, which there indeed isn't here. Your analogy is perfectly encapsulated by e.g. a linked list, which does not require recursion to traverse." CreationDate="2021-09-03T10:33:07.977" UserId="2164" />
  <row Id="122" PostId="106" Score="6" Text="I see that people are voting to close, but I'm not sure why - are they actually suggesting that there are not pedagogic implications of language choice that are not purely subjective?  Surely, Java is a better language to begin teaching Object Oriented Programming than C.  Different languages have different features, and these choices have real educational implications." CreationDate="2017-05-24T04:07:44.200" UserId="27" />
  <row Id="125" PostId="106" Score="1" Text="This seems like &quot;Good Subjective.&quot; I had a similar struggle this year choosing between PHP and Python for a particular unit. Based on the context such a question would certainly have objectivity and research to support one appoach over the other." CreationDate="2017-05-24T05:36:02.223" UserId="76" />
  <row Id="19153" PostId="106" Score="1" Text="My answer below composed from bits and pieces written at different times&#xA;Depending on interest can refactor as appropriate" CreationDate="2022-01-30T16:27:34.403" UserId="8837" />
  <row Id="1021" PostId="109" Score="0" Text="I fully agree with your last paragraph. I tell my students that programming can be the most frustrating thing I have ever seen, which is part of the reason I teach it now instead of doing it. The other reason was: *not enough interaction with other people*, which is probably the reason that very sensible females &quot;don't go there&quot;, and something that might be inherent to the field. Just sayin'" CreationDate="2017-06-15T11:51:32.993" UserDisplayName="user737" />
  <row Id="2241" PostId="109" Score="1" Text="Had a rock solid c++ intro/basic/intermediate guy...students from every major school in the area would goto his community college take his classes ... a working program was only 10% of the grade on each assignment." CreationDate="2017-06-30T15:03:04.430" UserId="1297" />
  <row Id="127" PostId="110" Score="1" Text="We're using [The Little Schemer](https://mitpress.mit.edu/books/little-schemer), which is a wonderful little book!  I shall miss it if I switch." CreationDate="2017-05-24T05:41:23.737" UserId="27" />
  <row Id="134" PostId="110" Score="0" Text="Very interesting! Do you have references (blog posts, course material) of the school that uses Haskell with 6-year olds?" CreationDate="2017-05-24T07:20:02.067" UserDisplayName="user24" />
  <row Id="142" PostId="110" Score="1" Text="See pp 60-61 of [Hello World #2](http://s3-eu-west-1.amazonaws.com/rpi-magazines/issues/full_pdfs/000/000/003/original/HelloWorld02.pdf)" CreationDate="2017-05-24T08:36:31.457" UserId="44" />
  <row Id="558" PostId="110" Score="2" Text="Just to be clear, Pyret and Racket are not in opposition. We created Pyret because we were tired of having arguments about the virtues of parenthetical syntax and decided to give people a non-parenthetical alternative that is very similar in many ways, though of course having &quot;forked off&quot;, we did feel free to make some changes that don't violate the spirit of the Racket tradition.&#xA;&#xA;Bootstrap uses both Scheme and Pyret. Bootstrap:Algebra is and will always be in Scheme syntax. The :Reactive, :Physics, and (new) :DataScience curricula are all in Pyret." CreationDate="2017-06-04T00:30:42.233" UserId="290" />
  <row Id="559" PostId="110" Score="2" Text="While I have great respect for Wadler's critique, I don't treat it as gospel. It's unsurprising that it aligns with Haskell! In particular, I do not view either static types or laziness as critical, and they can in fact be very problematic too. As for user-defined types, Racket has long since broken with Scheme on that front, as does Pyret (which also has algebraic datatypes). In short, there's a complex design space here." CreationDate="2017-06-04T00:32:54.450" UserId="290" />
  <row Id="10275" PostId="110" Score="1" Text="To this answer I would add that Haskell is simply easier to read and strongly typed, both things that I find helpful for beginners." CreationDate="2018-03-08T12:54:22.867" UserId="4082" />
  <row Id="19439" PostId="111" Score="0" Text="Yes! I remember seeing this on an educational TV programme in Germany, and I found this so elegant. I was then very disappointed when I realised that the BASIC dialect that I used did not support recursion (directly). Well, it was a reason to learn Pascal later :)" CreationDate="2022-03-02T16:50:46.477" UserId="1645" />
  <row Id="20428" PostId="111" Score="0" Text="I find this a really good example because — unlike many of the other examples — this one _can't_ be seen as a fancy way of writing an iterative algorithm." CreationDate="2022-06-23T22:43:31.633" UserId="9454" />
  <row Id="133" PostId="112" Score="1" Text="I'm voting to close this question as off-topic because it is not specific to education; the differences between two languages are the same regardless of the education context." CreationDate="2017-05-24T07:18:09.167" UserDisplayName="user24" />
  <row Id="135" PostId="112" Score="2" Text="I made a slight change to the question. Yes, the languages are different regardless of context, but as with another thread, there may be pedagogical reasons to differentiate between languages, reasons that are unique to a classroom. I also want to stray from opinion-based questions, so the differences for the classroom seemed a more answerable question. See this thread and comments: https://cseducators.stackexchange.com/questions/106/scheme-vs-haskell-for-introducing-functional-programming" CreationDate="2017-05-24T07:25:57.840" UserId="76" />
  <row Id="136" PostId="112" Score="1" Text="One more thought...I started a thread on meta that speaks to a broader issue your comment brings up. Thanks, @Keelan, for addressing it and helping to spur on the conversation as it will help all of us give this site an identity over the coming days and weeks. https://cseducators.meta.stackexchange.com/questions/24/language-a-v-language-b-v-language-c" CreationDate="2017-05-24T07:39:57.973" UserId="76" />
  <row Id="141" PostId="112" Score="0" Text="Thanks. I realised it was borderline, my initial comment could have been suggesting improvements rather than closure directly, apologies for that. I think it's good like this." CreationDate="2017-05-24T08:00:47.480" UserDisplayName="user24" />
  <row Id="6012" PostId="112" Score="3" Text="I'm happy with it here because Snap! and Scratch are languages designed for teaching programming." CreationDate="2017-07-25T00:23:44.383" UserId="283" />
  <row Id="129" PostId="113" Score="0" Text="What level is this? Are the students familiar with more abstract structures?" CreationDate="2017-05-24T06:53:11.873" UserId="111" />
  <row Id="130" PostId="113" Score="0" Text="@wythagoras their level is the most basic `java`. By that I mean only `Scanner` and the simplest of things. I will update the question to add this information." CreationDate="2017-05-24T06:54:19.963" UserId="150" />
  <row Id="271" PostId="113" Score="2" Text="Do you teach the DOM? I found that the tree-like structure and the accompanying visualization helped illustrate how HTML works." CreationDate="2017-05-26T00:52:56.230" UserId="76" />
  <row Id="286" PostId="113" Score="0" Text="@Peter I didn't think about showing it like that. Thanks" CreationDate="2017-05-26T11:08:29.487" UserId="150" />
  <row Id="397" PostId="113" Score="0" Text="Explain the structure: opening and closing tags; nesting (Russian dolls). Then use an editor that automatically adds closing tags, and indentation." CreationDate="2017-05-28T12:01:09.353" UserId="204" />
  <row Id="398" PostId="113" Score="0" Text="@richard Oh, the Russian dolls analogy is one that I have never thought of. Thanks! And if you think that you or fellow educators will find this question useful I suggest adding your own answer, as we need a critical mass of answers on this site." CreationDate="2017-05-28T12:01:51.797" UserId="150" />
  <row Id="10479" PostId="114" Score="0" Text="40 hours!? Either they've changed a lot or there's a lot of variety between countries: when I competed in the British one the first round was (IIRC) 2 hours under exam conditions, and the national finals took place over 2 days." CreationDate="2018-03-13T12:39:32.960" UserId="1219" />
  <row Id="11680" PostId="114" Score="0" Text="@PeterTaylor I think it varies, here the first round is just sending in solutions and it is open for a few months. Then there is a second round (best 100 of first round), which is 3 hours under exam conditions and a third round (best 10 of second round) which is also 3  or 4 hours under exam conditions. In addition to that there is some training for the final round. I think your first round is comparable to our second round." CreationDate="2018-03-20T07:16:52.857" UserId="111" />
  <row Id="131" PostId="117" Score="2" Text="So effectively, going in reverse: teaching `html` structure and then showing that it is actually a particular case of a more abstract structure, which is `xml`? *This suggestion actually makes the lesson plan flow better, so thanks for that*" CreationDate="2017-05-24T07:05:20.457" UserId="150" />
  <row Id="132" PostId="117" Score="2" Text="@ItamarGreen Yes, that is what I suggest. In fact, I think that this is important in most CS: use examples as much as possible, and if possible, use examples students are already familiar with." CreationDate="2017-05-24T07:10:02.453" UserId="111" />
  <row Id="396" PostId="117" Score="1" Text="I think html, head, body are abstract, they don't appear to do anything. Start with the tags that produce, obvious, output." CreationDate="2017-05-28T11:59:09.177" UserId="204" />
  <row Id="13665" PostId="117" Score="0" Text="Technically, html is an irregular subset case of sgml, while xml is a compliant subset of sgml. Xhtml is a subset of sgml that is fully compliant with the xml  that implements the html concepts. Html is irregular to reduce bandwidth usage on slow acoustic modems, and to minimize typing when web pages were all hand built" CreationDate="2018-10-16T02:43:50.653" UserId="1537" />
  <row Id="147" PostId="118" Score="0" Text="TBH, I don't know what monads are.  I personally learned FP using SML decades ago, but utilization is so low today... there are many fewer resources around, so I chose to steer clear. As someone who does not consider myself to be 100% solid, I thought that I might really need those resources :)" CreationDate="2017-05-24T10:31:52.730" UserId="27" />
  <row Id="179" PostId="118" Score="1" Text="@Choirbean You may want to try OCaml then. There are lots of resources (like Real World OCaml, etc) and a quite large community for it. As for SML, it hasn't died, but all available resources (e.g., Ullman) are quite dated." CreationDate="2017-05-24T17:26:47.410" UserId="130" />
  <row Id="186" PostId="118" Score="2" Text="In terms of SML, there is a MOOC on Coursera, Programming Languages Part A. I completed the course for my first dive into functional programming and really enjoyed it. The other two parts focus on Racket and Ruby, respectively. There are great videos, lecture notes, exercises, etc. Plus, it taught me Emacs, which I found valuable. Here's a link: http://courses.cs.washington.edu/courses/cse341/17sp/" CreationDate="2017-05-24T21:09:38.647" UserId="76" />
  <row Id="144" PostId="119" Score="0" Text="^ This. When I used to use Scratch in an intro class we used Berkeley's BYOB for exactly this reason. The ability to create blocks / functions opened up a lot more possibilities." CreationDate="2017-05-24T10:25:23.827" UserId="30" />
  <row Id="157" PostId="120" Score="0" Text="Can you share some questions that people might ask? Will be easier to answer them, right? Plus, Excel is a client side spreadsheet software that looks *similar* to Database tables, but not a Relational Database Management System." CreationDate="2017-05-24T11:50:46.603" UserId="164" />
  <row Id="207" PostId="120" Score="3" Text="I have had some experience teaching normalization to undergrad business students. It was a fairly painful process, and I think it would be a lot to ask a non-technical audience to do it correctly in just three days (assuming you are teaching the practical Access skills alongside?) Is the goal to enable them to do all of this entirely on their own? I would think that enabling them to get to a level where they could comprehend and use a solution delivered by someone else might be more achievable, but maybe not deliver business goals. Either way, the exact goal will inform the answer here." CreationDate="2017-05-25T09:57:54.320" UserId="188" />
  <row Id="209" PostId="120" Score="0" Text="@DiarmuidÓMuirgheasa Thank you, you are right. My only goal is to help them understand the basic concept of a relational database better. To help them get a feel for it. The way I see it, NF1 through a few examples helps achieve this. I'll update my answer so this is clearer." CreationDate="2017-05-25T10:55:51.130" UserId="51" />
  <row Id="211" PostId="120" Score="0" Text="Maybe this question is too specific for this site? Maybe not a lot of people are foolish enough to try and teach database basics to non IT adults in 2-3 days? :)" CreationDate="2017-05-25T11:02:54.653" UserId="51" />
  <row Id="212" PostId="120" Score="0" Text="Not sure you can cover the tradeoffs in normalization, alone, in 2 to 3 days. Combined with &quot;these are the database skills you need&quot;, it feels like too much. What about doing it as two classes?" CreationDate="2017-05-25T11:40:01.357" UserId="35" />
  <row Id="285" PostId="120" Score="2" Text="@vacip I think you can definitely explain why we normalize in a short period of time - demonstrate the various anomalies that result if we don't. That's reasonably intuitive with good examples, I think. You could also have a good discussion of cardinality, and teach them the mechanics of Access as well. I'll have a think about a more complete answer to post below." CreationDate="2017-05-26T08:18:31.383" UserId="188" />
  <row Id="417" PostId="120" Score="0" Text="MS access is not the best sql/relational database system. Sql and relational are rarely the best database solution. Have you considered other database systems particularly nosql." CreationDate="2017-05-28T22:48:07.133" UserId="204" />
  <row Id="421" PostId="120" Score="1" Text="@richard You are right, but my students want to learn MS Access, not relational databases or database management. So these trainings are &quot;MS Access for Beginners&quot;." CreationDate="2017-05-29T07:32:34.303" UserId="51" />
  <row Id="9097" PostId="120" Score="0" Text="@vacip  Ms access is a fully relational database, in every sense of the word. It lacks some of the tuning and maintenance tools of the big boys,  but if you understand tuning DB2, you can apply the same techniques to access. I once worked in a division of a company that grew from 300M per year revenue to 1B per year on the basis of an access database that I helped maintain." CreationDate="2017-11-23T14:17:18.590" UserId="1537" />
  <row Id="9098" PostId="120" Score="0" Text="@ctlaltdelor Nosql is a broad category encompassing everything from raw ISAM in c to JSON stores like Mongo or graphing databases like neo4j, and a host of other esoteric solutions. The reason the sql RDBMS persists is because for most solutions it offers a good balance of performance and usability,  one of the big markets today is creating tools to allow people to use sql with Nosql solutions (hive, for example)" CreationDate="2017-11-23T14:26:28.337" UserId="1537" />
  <row Id="9107" PostId="120" Score="0" Text="@Heather I've been programming with databases for decades (since before SQL was mainstream), and I can't keep the names and definitions of normal forms straight in my head. While it's necessary to be able to choose the pattern, It's not necessary to manage names and definitions. Knowledge itself has a structure, and the simplest structure that captures the problem wins. Sometimes you have to adjust the structure of your database to match new knowledge." CreationDate="2017-11-24T02:37:55.783" UserId="1537" />
  <row Id="145" PostId="121" Score="2" Text="So if I understand correctly you are not struggling with CSS but with teaching design itself? The two can be - sort of - separate." CreationDate="2017-05-24T10:26:07.753" UserId="51" />
  <row Id="146" PostId="121" Score="0" Text="You're asking three different questions: How can I teach creativity? How can I teach design? How can I teach CSS? I currently thing this should be closed as too broad until it gets narrowed down." CreationDate="2017-05-24T10:30:30.377" UserId="58" />
  <row Id="153" PostId="121" Score="0" Text="@thesecretmaster Thanks for pointing out. I have updated the question." CreationDate="2017-05-24T11:47:44.013" UserId="164" />
  <row Id="154" PostId="121" Score="0" Text="@vacip True that. Now I have clarified it." CreationDate="2017-05-24T11:47:54.470" UserId="164" />
  <row Id="202" PostId="121" Score="0" Text="Consider phrasing the question so that it leads to researched, longer answers. &quot;Is there a way to...?&quot; is less open-ended then &quot;What are the techniques for...?&quot; The latter seems to me to lead to more focused, experienced-based answers." CreationDate="2017-05-24T23:55:35.287" UserId="76" />
  <row Id="295" PostId="126" Score="0" Text="Downvote with no comment? The OP asked for an _analogy_. IMO the Cat in the Hat's Little Cats are a perfect analogy." CreationDate="2017-05-26T15:24:07.887" UserId="65" />
  <row Id="404" PostId="126" Score="0" Text="Do all cats in the hat, have a cat in their hat?" CreationDate="2017-05-28T16:12:35.903" UserId="204" />
  <row Id="536" PostId="126" Score="0" Text="I like that this is imperfect as an analogy, gives scope for discussion." CreationDate="2017-06-03T13:02:58.900" UserId="41" />
  <row Id="1270" PostId="126" Score="5" Text="@richard no. they don't need to. otherwise you get stackoverflow." CreationDate="2017-06-18T18:08:06.257" UserId="150" />
  <row Id="1274" PostId="126" Score="0" Text="@ItamarGreen but as can be seen from the image, the stack is a cat stack. If every can in a hat had a cat in there hat, then the stack would not overflow, because it would be infinite. This could lead to a very tall stack of cats, but as each cat is getting smaller. it may be asymptotic. For example if each cat was half the size of the one bellow then the hight for an infinite number of cats would be 2×size_of_bottom_cat." CreationDate="2017-06-18T20:57:52.197" UserId="204" />
  <row Id="6730" PostId="126" Score="1" Text="As a katz in a hat, I always enjoy cats in a hat." CreationDate="2017-08-08T04:10:45.627" UserId="2460" />
  <row Id="8302" PostId="126" Score="2" Text="I read this to my intro class when we introduce recursion. It's not a perfect match, but works really well to intro the concept. Plus, high school kids love it when their teacher reads them a Dr. Seuss book." CreationDate="2017-09-23T14:04:36.573" UserId="30" />
  <row Id="14660" PostId="126" Score="1" Text="I just rediscovered this answer, and I wish I could upvoted it a second time. It's just so delightful!" CreationDate="2019-04-07T15:41:47.220" UserId="27" />
  <row Id="15184" PostId="126" Score="0" Text="is there an end state to the cat in the hat?" CreationDate="2019-06-10T21:25:41.873" UserId="48" />
  <row Id="15191" PostId="126" Score="1" Text="@pluke I don't have the book in front of me, but the interwebs tell me it's Little Cat Z." CreationDate="2019-06-11T12:13:15.167" UserId="65" />
  <row Id="1555" PostId="128" Score="0" Text="If &quot;*any mistakes in the markup will be visible when you load the page*&quot; then you must be using a custom browser, because most of them go out of their way not to cover up mistakes in the markup." CreationDate="2017-06-22T10:08:59.383" UserId="1219" />
  <row Id="160" PostId="129" Score="1" Text="There's a very interesting further discussion here: http://www.pbs.org/newshour/making-sense/truth-women-stem-careers/" CreationDate="2017-05-24T13:06:01.167" UserId="27" />
  <row Id="161" PostId="129" Score="3" Text="It's an issue that matters a great deal to me as well. I would give advice here, but everything that we have tried has failed miserably." CreationDate="2017-05-24T13:06:31.913" UserId="27" />
  <row Id="175" PostId="129" Score="0" Text="FWIW, my answer here is in the context of an all-girls environment: https://cseducators.stackexchange.com/questions/104/best-practices-effective-strategies-for-building-diversity-in-high-school-cs-p" CreationDate="2017-05-24T15:36:51.430" UserId="76" />
  <row Id="164" PostId="130" Score="2" Text="How large are the programs that are being written? If they were 5-10 lines, I can understand why he'd say that, and giving a longer task to complete might help to make him realise the value of indentation. The answer depends on the length, I suspect, and without that, it's hard to really address the problem." CreationDate="2017-05-24T13:24:24.873" UserId="2" />
  <row Id="167" PostId="130" Score="22" Text="On April 1st, provide all code examples in Code-Golf'd form, telling the students that you've realized the sublime elegance of short code." CreationDate="2017-05-24T13:52:39.467" UserId="39" />
  <row Id="203" PostId="130" Score="0" Text="@Nat I'm going to have to steal your April 1st idea. That's great." CreationDate="2017-05-25T01:30:51.630" UserId="30" />
  <row Id="244" PostId="130" Score="0" Text="@nat When I was a software engineer, I had a colleague that argued against good-names (for methods and variables). I could not convince him, so issued a new rule, all names should be as short as possible (a, b, c … z, aa, ab …). At this point he agreed to at least give it a go." CreationDate="2017-05-25T17:38:20.770" UserId="204" />
  <row Id="290" PostId="130" Score="9" Text="One virtue of Python is that it requires proper indentation.  The students quickly see the benefit of good formatting habits.  These habits stick when they program in other languages." CreationDate="2017-05-26T12:58:39.507" UserId="21" />
  <row Id="11860" PostId="130" Score="0" Text="Introduce them to the Obfuscated C contest, and ask them to debug the programs.  Since editors will fix indentation now, show them &quot;Ctrl + Shift + F&quot;. Unless you're doing python, it's something that programmers don't worry about, they let the editor do it for them. My son (7 years old) has just started learning Java, and once he discovered the magic key strokes in Eclipse all was good" CreationDate="2018-03-29T01:52:22.480" UserId="1537" />
  <row Id="12607" PostId="130" Score="3" Text="Why is it a hassle? Don't they use editors that indent automatically?" CreationDate="2018-05-20T07:41:50.027" UserId="1471" />
  <row Id="165" PostId="131" Score="7" Text="Another example you could add would be asking the students to debug unindented code v. indented code." CreationDate="2017-05-24T13:33:35.790" UserId="58" />
  <row Id="333" PostId="132" Score="2" Text="number four is in a way inter-student &quot;community moderation&quot; of code." CreationDate="2017-05-27T12:41:06.300" UserId="150" />
  <row Id="2841" PostId="132" Score="0" Text="Introduce them to some examples from code golf" CreationDate="2017-07-08T04:18:28.787" UserId="1537" />
  <row Id="17026" PostId="132" Score="0" Text="Do you think break should always be avoided? Sometimes the clearest exit point from the loop is in the middle, or there are two exit conditions - I find that break can be very clear in these situations." CreationDate="2020-09-15T16:15:38.743" UserId="9246" />
  <row Id="17031" PostId="132" Score="0" Text="@composerMike Largely, yes, but not always.  If it's part of the core, logical flow of the loop, then the loop should be structured to make the intention clear in the first place. If it's for exceptions, however, then breaks can make sense.  One litmus test I use when explaining a loop header to students is, &quot;if the inside contents of the loop were pages and pages long (so we couldn't, at a glance, find break statements, for instance), would your loop header still make obvious what's happening and why?&quot; I recognize this is an extreme position. I even encourage meaningful variable (cont)" CreationDate="2020-09-16T11:58:04.570" UserId="27" />
  <row Id="17032" PostId="132" Score="0" Text="(cont) names in loop headers if the loops aren't crystal clear on their own." CreationDate="2020-09-16T11:58:42.727" UserId="27" />
  <row Id="17132" PostId="132" Score="0" Text="@BenI. Extreme, maybe, but makes sense as a position for students. Just the other day one of my students wrote a break for core loop logic and I realized right away what you are talking about. I asked him to restructure the loop." CreationDate="2020-10-04T06:50:02.183" UserId="9246" />
  <row Id="17133" PostId="132" Score="0" Text="@composerMike Your comment just made my day!! " CreationDate="2020-10-04T13:23:33.440" UserId="27" />
  <row Id="177" PostId="133" Score="0" Text="Given the audience, it shouldn't be necessary to ask for explanations of down-votes. Have I upset someone already?" CreationDate="2017-05-24T17:05:21.993" UserId="41" />
  <row Id="2842" PostId="133" Score="0" Text="with modern editors, keeping the code tidy, to the minimum standards of the language's preferred style book, is usually two keystrokes." CreationDate="2017-07-08T04:24:40.760" UserId="1537" />
  <row Id="9226" PostId="134" Score="0" Text="I've edited and re-opened the question.  A. Biswas, if I've modified your intention, feel free to roll back the edit.  (I tried to stick with what I believed you were asking)" CreationDate="2017-12-14T23:45:06.527" UserId="27" />
  <row Id="9257" PostId="134" Score="0" Text="The example given seems to me to correspond to a different question (how to explain to people the importance of using library functions rather than writing everything from scratch?)" CreationDate="2017-12-18T11:02:31.700" UserId="1219" />
  <row Id="256" PostId="137" Score="0" Text="I suspect it is easier to teach octal before hexadecimal. Then explain that it is not used **much** these days, but is still used." CreationDate="2017-05-25T19:27:40.520" UserId="204" />
  <row Id="336" PostId="137" Score="2" Text="Could you please tell: what is the subject of the whole lesson? I'm trying to guess the amount of time devoted to the octal system and its place in the general context of the lesson. Because, per my opinion, learning explicitly octal for those who already have experience with binary and hexadecimal is really unneeded — octal is used *relatively* rare and a student having experience with other 2ⁿ-base systems would catch it on-the-fly when he meets it in real life. I'd rather ensure that they know two topics: generic conversion and m-base↔mⁿ-base conversion (especially for m=2)." CreationDate="2017-05-27T14:52:46.913" UserId="216" />
  <row Id="9144" PostId="137" Score="0" Text="It was important to know in the 1980s, when there were still computers for which the natural expression of the bit-ness was octal in common use. There are still Unix-isms where knowledge of octal is useful,  otherwise I'd agree it's mostly a waste of time." CreationDate="2017-12-03T03:48:17.230" UserId="1537" />
  <row Id="12679" PostId="137" Score="0" Text="I teach my students octal and ask them, each year: Why do computer programmers confuse Halloween with Christmas? Answer: https://armchairdissident.wordpress.com/2009/04/15/a-long-explanation-of-a-damned-fine-joke/" CreationDate="2018-05-27T17:59:19.223" UserId="283" />
  <row Id="14247" PostId="137" Score="0" Text="Actually lots of current programming languages follow the brillant idea of octal numbers starting with 0. What could go wrong with   int january = 01, february = 02, ...;" CreationDate="2019-02-09T10:50:59.107" UserId="2103" />
  <row Id="4195" PostId="138" Score="0" Text="I always thought there was a case for Ternary in electronics. I just found out about a Soviet computer based on ternary. Long ago I created a simple program to convert a number to &quot;balanced ternary&quot; (-1, 0 and 1 are the 'digits') which would work great for mapping to electrical signals - negative, zero, positive. (Didn't RS-232 used to work that way?) Anyhow, awareness of different representation methods is very important. And base 64 is so interesting..." CreationDate="2017-07-13T18:03:51.533" UserDisplayName="user737" />
  <row Id="178" PostId="142" Score="1" Text="This slightly compounds the misapprehension posed by the question that algorithms are only the special functions. So, your two step process is an algorithm (not a very useful one maybe). Honestly, I think the question is too general as it stands." CreationDate="2017-05-24T17:10:38.373" UserId="41" />
  <row Id="183" PostId="142" Score="0" Text="Algorithms as systematic, replicable, automatable ways to solve problems?" CreationDate="2017-05-24T17:54:31.463" UserId="44" />
  <row Id="184" PostId="142" Score="0" Text="Yes. Like a machine learning algorithm might be keep trying random stuff till you get a better result... Not just stuff that you find on github if you need to copy it (or have to memorise for an exam)." CreationDate="2017-05-24T18:00:08.153" UserId="41" />
  <row Id="213" PostId="143" Score="0" Text="No points for solving the problem?" CreationDate="2017-05-25T11:41:20.393" UserId="35" />
  <row Id="222" PostId="143" Score="0" Text="Rarely, and only 1/2 to 1 point. The goal (if I can extrapolate) seems to be to award points for properly executed components, and build up the full score that way." CreationDate="2017-05-25T13:02:04.497" UserId="27" />
  <row Id="291" PostId="143" Score="1" Text="On #6, they don't use 1/2 point any more. They're all full points. So if I was creating a rubric from scratch I would only use whole points." CreationDate="2017-05-26T13:02:10.300" UserId="30" />
  <row Id="224" PostId="144" Score="3" Text="I don't think this is a _relevant_ answer here. It might fit in retrocomputing, but I get twitchy every time people use 1970's tech (or earlier) to justify a modern education topic." CreationDate="2017-05-25T13:27:22.560" UserId="41" />
  <row Id="255" PostId="144" Score="3" Text="7 seg can do a-f" CreationDate="2017-05-25T19:26:25.310" UserId="204" />
  <row Id="848" PostId="144" Score="2" Text="@SeanHoulihane How much has TCP/IP changed since the 1970s? Where would this site be if nobody understood such ancient technology? Sometime one cannot escape the current, real-world application of ancient technology. Were relevant it must still be a _modern education topic_." CreationDate="2017-06-13T06:12:43.677" UserId="104" />
  <row Id="849" PostId="144" Score="3" Text="@GypsySpellweaver - not quite sure I get your meaning, but I see legacy constructs holding back design all the time. Teaching legacy stuff as if it had meaning is a big mistake." CreationDate="2017-06-13T07:28:18.813" UserId="41" />
  <row Id="9450" PostId="144" Score="0" Text="Those who don’t study history (including computer history) are condemned to repeating historical mistakes." CreationDate="2017-12-29T16:28:46.740" UserId="59" />
  <row Id="711" PostId="145" Score="3" Text="This applies not only to indentation, but also to issues such as naming and comments." CreationDate="2017-06-07T17:42:59.260" UserId="387" />
  <row Id="11863" PostId="145" Score="1" Text="I really like the idea of having them trace messy code. Might have to try that next year." CreationDate="2018-03-29T17:35:10.920" UserId="30" />
  <row Id="375" PostId="146" Score="3" Text="I'm voting to close as too broad, because there's no such thing as “the” object oriented paradigm. A lot of concepts hide behind these words, they're different concepts depending on who's talking and what language they treat as the one true way of doing things, and different analogies will be needed for these different concepts." CreationDate="2017-05-27T23:44:03.950" UserId="124" />
  <row Id="376" PostId="146" Score="0" Text="It is broad, but I wouldn't say it's too broad. Just because there is no &quot;correct&quot; answer doesn't mean that it's too broad. There are many different ways to kill a process, each with upsides and downsides, but they all could be covered by one question." CreationDate="2017-05-27T23:51:14.803" UserId="58" />
  <row Id="411" PostId="146" Score="1" Text="You're cherry-picking different aspects of different flavours of OOP. They are not official. You have selectively ignored some core aspects. This question is poor: OOP is not something to be taught by a simple analogy. In my experience, teachers who use analogies for OOP cause massive damage to their students' learning. Teach OOP, don't dumb it down." CreationDate="2017-05-28T18:37:50.537" UserDisplayName="user31" />
  <row Id="1034" PostId="146" Score="1" Text="@Adam I agree in principle, but a good analogy, if there was one, would be helpful. Didn't Robert M. Prisig say that everything is an analogy? *Poor* analogies cause damage, like poor *anything*. We can't rebuke the only tool that we have for teaching abstract ideas (comparing them to something concrete). Consider Piaget with the Concrete and Formal Operations stages. What experience do the students have, how old are they, what are the trying to learn? I have been reading a book about anthropology that says that the Apprenticeship model is basically the first way of teaching (pre-language)." CreationDate="2017-06-15T14:51:44.893" UserDisplayName="user737" />
  <row Id="1097" PostId="146" Score="0" Text="@nocomprende fair points, except that: it's definitely not &quot;the only tool that we have&quot; for teaching OOP. And in my experience: - with OOP in particular - analogies used to teach OOP cause more harm than good. I've had more success with &quot;here's a problem/here's a solution&quot; approaches - OOP was created to solve specific problems, and it makes a lot of sense when viewed from the perspective of those problems." CreationDate="2017-06-16T12:38:49.840" UserDisplayName="user31" />
  <row Id="1098" PostId="146" Score="0" Text="@Adam Good, I certainly would like to see a better way of teaching OOP than by analogy, so I look forward to seeing your answer here, or on a better question. Many schools and companies have resigned themselves to the fact that creating good programmers is a long-term project, and Apprenticeship is the best way we have found to accomplish that. But an overall view of the problem / solution that OOPs address might end a lot of useless debate. Consider the points made in the article: &quot;*Object Oriented Programming is an expensive disaster which must end*&quot;" CreationDate="2017-06-16T13:15:24.007" UserDisplayName="user737" />
  <row Id="1214" PostId="146" Score="0" Text="@nocomprende That's a different question :). I dislike this question. But for that question, you could c.f. my comments + linked materials here: https://cseducators.stackexchange.com/a/9/31" CreationDate="2017-06-17T22:41:31.960" UserDisplayName="user31" />
  <row Id="1996" PostId="146" Score="1" Text="In the essence, OOP is based on messages and contracts, an object pass a message to another, which will eventualy return a value, whatever it does within in process is unkwown by the sender of the message. Otherwise a good way to restrict the scope of your question would be to limit yourself to encapsulation, polymorphism and inheritance. Which is the basis of OOP. Patterns (singleton) that come as specific usage of those bases is a somewhat another subject that come after." CreationDate="2017-06-28T11:02:40.313" UserId="1375" />
  <row Id="205" PostId="147" Score="0" Text="The two best _objects_ to use are &quot;vehicles&quot; and &quot;computers.&quot; The benefit to both is that they, commonly, have inner workings (private methods and data) that are not exposed by the interface. The &quot;vehicle&quot; class can start with a bicycle (no motor) and move on to cars/trucks, and just in case &quot;wheels&quot; gets thought of as a base class attribute, what about the helicopter? The benefit of the computer as a sample object is that it should already be in the classroom and easily compared to the smart phone and tablets that students are likely to have available as well." CreationDate="2017-05-25T03:00:34.053" UserId="104" />
  <row Id="1037" PostId="147" Score="0" Text="I teach OO because it is used, but I also have a bookmark to: &quot;*Object Oriented Programming is an expensive disaster which must end*&quot;. I assume you do." CreationDate="2017-06-15T14:58:26.130" UserDisplayName="user737" />
  <row Id="201" PostId="148" Score="1" Text="I use a similar analogy for variables. Could you elaborate a bit on how you might use boxes to model inheritance, instance methods, class methods, and properties? I think there's more here that could be expanded upon." CreationDate="2017-05-24T23:50:36.540" UserId="76" />
  <row Id="299" PostId="148" Score="1" Text="@OldBunny2800: There's no need to include 'EDIT:' in your post—see [What's wrong with putting “EDIT: …” in the body of a post?](https://meta.stackexchange.com/questions/202472/whats-wrong-with-putting-edit-in-the-body-of-a-post). Users can check the revision history to see when you edited, so you needn't clutter your post with `EDIT:` if you don't want." CreationDate="2017-05-26T15:43:17.457" UserId="2" />
  <row Id="232" PostId="149" Score="1" Text="I use this one too. It goes Thing &gt; Living Thing &gt; Animal &gt; Mammal &gt; Human &gt; Student &gt; High School Student &gt; Computer Science Student &gt; 3rd Period Computer Science Student. We add in properties and methods at each level when we talk about inheritance." CreationDate="2017-05-25T15:04:21.117" UserId="30" />
  <row Id="4020" PostId="150" Score="0" Text="It helps that C is essentially structured PDP-11 Assembly language  :D" CreationDate="2017-07-11T01:58:22.650" UserId="1537" />
  <row Id="412" PostId="152" Score="3" Text="Poor. How is inheritance here? A domestic cat is not a tiger, and a tiger is not a domestic cat. I see here many sources of easy confusion between class vs object, instance vs instance, and every combination." CreationDate="2017-05-28T18:40:44.417" UserDisplayName="user31" />
  <row Id="413" PostId="152" Score="0" Text="A domestic cat is a feline and a tiger is a feline. I apologize for using cat and feline interchangeably here." CreationDate="2017-05-28T18:41:51.517" UserId="130" />
  <row Id="414" PostId="152" Score="2" Text="But this is still muddling up classes and objects for the students. I'm reading this as: feline as an abstract class (there's no such physical thing as a &quot;feline&quot;), tiger/house-cat as objects. But also classes. But objects. What's the difference? ... and the pain begins (I've seen many, many, many students go down this route. I don't believe we should use analogies in OOP teaching)." CreationDate="2017-05-28T18:45:30.810" UserDisplayName="user31" />
  <row Id="1321" PostId="152" Score="0" Text="And then you are throwing away languages which forbid multiple inheritance" CreationDate="2017-06-19T12:43:06.613" UserId="1006" />
  <row Id="18998" PostId="152" Score="0" Text="Note that in the Linnaeus classification, which is treelike, all of the nodes are abstract except the leaf nodes. In Java you can use interfaces for that. But it isn't a good example of concrete inheritance." CreationDate="2022-01-13T15:53:08.280" UserId="1293" />
  <row Id="226" PostId="153" Score="1" Text="My students learn both a command line environment (javac/java) and they use an IDE (usually drJava although some migrate to NetBeans, IntelliJ, or Eclipse).  I don't know what you &quot;lose&quot; using the command line interface." CreationDate="2017-05-25T14:23:39.923" UserId="21" />
  <row Id="253" PostId="153" Score="0" Text="When I was in HS, we used IDEs. One teacher used NetBeans and I believe the other used Eclipse. Although students might have some trouble dealing with CLI environments when they eventually continue learning programming in college, it does remove a lot of hassle and allow students to focus on programming, not setting up the environment (can be a headache especially if you're using Windows)." CreationDate="2017-05-25T19:18:58.263" UserId="130" />
  <row Id="227" PostId="154" Score="0" Text="I think there are probably *hundreds* of games that would use lists; I'm not sure whether it's practical to fit these options in the Stack Exchange format. Do you have any specific game types in mind, or additional constraints to limit the answer set a bit?" CreationDate="2017-05-25T14:43:17.517" UserId="2" />
  <row Id="228" PostId="154" Score="0" Text="@Aurora0001 Well, i specifically ask for &quot;relatively easy games&quot;. I can try and narrow it down a bit more." CreationDate="2017-05-25T14:48:46.963" UserId="166" />
  <row Id="229" PostId="154" Score="0" Text="I'm sure you can imagine there are hundreds of ideas that could meet that criteria; perhaps including the tasks that you've set so far would help so that answers can get a clearer picture of what might be useful to you, rather than a big list of *every* game that could possibly use a list, which probably won't help you so much." CreationDate="2017-05-25T14:51:17.450" UserId="2" />
  <row Id="237" PostId="154" Score="0" Text="We've started a discussion about this question on meta [here](https://cseducators.meta.stackexchange.com/questions/40/questions-simply-seeking-ideas)." CreationDate="2017-05-25T15:52:37.707" UserId="27" />
  <row Id="584" PostId="154" Score="0" Text="@Scimonster I think it would be useful to try and narrow the question based on the answers so far and the meta discussion - with the aim of re-opening." CreationDate="2017-06-04T15:54:16.653" UserId="41" />
  <row Id="206" PostId="156" Score="1" Text="Linking the words to an audio recording of each, see [e.g.](https://scratch.mit.edu/projects/13589755/#editor)" CreationDate="2017-05-25T09:43:37.167" UserId="44" />
  <row Id="847" PostId="160" Score="0" Text="Switching from Scratch to Python will probably feel like switching from space travel to inventing the wheel." CreationDate="2017-06-13T05:12:15.477" UserId="104" />
  <row Id="216" PostId="161" Score="3" Text="For those that do not know Phrogram, could you clarify what you mean what you mean by 'language oddities and paradoxes' and how Phrogram avoided them? Additionally, since the list of requirements appears to be non-exhaustive, can you sketch the intended usage and learning goals for the students which the language you seek should help achieve?" CreationDate="2017-05-25T11:50:50.447" UserId="154" />
  <row Id="217" PostId="161" Score="0" Text="I'm curious where C# and Java fail the requirements you listed. I don't necessarily disagree with you. But they seem to hit all of your bullet points, with the exception of indention maybe. Your requirements seem more like a list of things for the IDE instead of the language." CreationDate="2017-05-25T11:55:10.710" UserId="30" />
  <row Id="218" PostId="161" Score="1" Text="For someone who doesn't know Phrogram, this is not at all clear, very broad, and very opinion based." CreationDate="2017-05-25T11:57:50.353" UserId="58" />
  <row Id="219" PostId="161" Score="0" Text="OK, I'll rework the question after lunch... Give me an hour." CreationDate="2017-05-25T12:10:44.667" UserId="51" />
  <row Id="220" PostId="161" Score="0" Text="@RyanNutt I have reworked the question a bit. C# and JAVA might work, but I don't know of an IDE that is not way too complicated for a beginner. Something that you just double click and start coding, then hit run." CreationDate="2017-05-25T12:46:06.680" UserId="51" />
  <row Id="221" PostId="161" Score="0" Text="@Discretelizard You are right, sorry. I'll have a hard time explaining what's exactly wrong with C#, because I've gotten used to it too much. It has a few odd structures, like the iconic x++ for incrementing, the type-first variable declaration, or the odd syntax for the for loop. Granted, you will get used to it in a few days, but I think beginners need something closer to human language and closer to pseudocode-like logical statements." CreationDate="2017-05-25T12:54:47.503" UserId="51" />
  <row Id="240" PostId="161" Score="0" Text="scratch, python, eiffel (depending on where they are). Eiffel is for learning OO, so around A-level. Scratch is for  beginners. Definitely Eiffel before C♯,  Java or C++." CreationDate="2017-05-25T17:24:26.337" UserId="204" />
  <row Id="301" PostId="161" Score="2" Text="Perhaps of interest: https://en.wikipedia.org/wiki/List_of_educational_programming_languages" CreationDate="2017-05-26T16:27:20.743" UserId="111" />
  <row Id="1088" PostId="161" Score="2" Text="Also see Bret Victor's excellent [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that delves deeply into considerations for programming languages and environments designed for learning / understanding." CreationDate="2017-06-16T08:46:42.617" UserId="646" />
  <row Id="1036" PostId="163" Score="1" Text="Then you could say, &quot;Oh, new requirement: handle non-wheeled vehicles as well.&quot; This would let them consider the aspects of the structure that can be built on, modified, extended... vs those that cannot. A good implementation vs poor one." CreationDate="2017-06-15T14:55:36.563" UserDisplayName="user737" />
  <row Id="525" PostId="164" Score="1" Text="I agree completely with the first sentence. Our intro CS course is designed around real-world labs with lab reports. In our department discussions we often cite research suggesting this is better for retention for women and minorities, and has better learning outcomes for all students. If you want, I can try to dig up references. In my experience, we retain more women from CS 1 to CS 2 every semester. We're up to 50-50 in CS 2 (of course, the university is 60% women, so we have more work to do)." CreationDate="2017-06-03T07:07:25.640" UserId="294" />
  <row Id="535" PostId="164" Score="0" Text="References would be useful, I think - This approach is a diversion from the traditional, more abstract approach (making solutions before problems if you like - or add your own answer if you'd prefer." CreationDate="2017-06-03T11:58:49.077" UserId="41" />
  <row Id="1022" PostId="164" Score="0" Text="@nocomprende, not having a plan is fine. I mentored a couple of pre-uni students, both were concerned to understand career progression, project structures, etc. Told them plans always change..." CreationDate="2017-06-15T11:55:31.860" UserId="41" />
  <row Id="223" PostId="165" Score="0" Text="Thank you! Very nice, looks really good! I'll try it in the evening. Just what I was looking for. I'll leave the question open though, in the hopes of getting some more similarly good ideas." CreationDate="2017-05-25T13:12:37.557" UserId="51" />
  <row Id="225" PostId="165" Score="0" Text="Is it even possible to write scratch without the IDE? I've never heard of that happening." CreationDate="2017-05-25T13:33:29.710" UserId="58" />
  <row Id="231" PostId="165" Score="0" Text="@thesecretmaster There have been some user-contributed alternate players for Scratch. Examples: [Phosphorus](https://phosphorus.github.io/), [official HTML5 player](https://github.com/LLK/scratch-html5), [SB2.JS](https://code.google.com/p/sb2-js/). And even some alternate IDEs: [M30w](https://sourceforge.net/projects/m30w/) (text based), [Pixie](http://nathan.github.io/pixie/) (in JS)." CreationDate="2017-05-25T15:01:56.207" UserId="166" />
  <row Id="235" PostId="165" Score="0" Text="I guess Scratch is a very great child-focused option. Remember it has an online option very useful." CreationDate="2017-05-25T15:41:03.053" UserId="6" />
  <row Id="284" PostId="165" Score="4" Text="See also Scratch's cleverer, less well known brother, [Snap!](snap.berkeley.edu), and [this discussion](https://cseducators.stackexchange.com/questions/112/what-can-snap-do-that-scratch-cannot) comparing them." CreationDate="2017-05-26T08:09:55.817" UserId="44" />
  <row Id="8918" PostId="165" Score="0" Text="Snap is like scratch, but they have improved it to remove some limitations. Snap has functions and procedures. Scratch only has procedures. (note these words are often erroneously mixed up, including by authorities). However when I last used it at school on IE, there was some stability issues, and saving/loading issues." CreationDate="2017-11-02T15:27:44.590" UserId="204" />
  <row Id="9149" PostId="168" Score="0" Text="The first case is more about teaching the idiosyncrasies of the tools involved." CreationDate="2017-12-04T13:14:32.080" UserId="3524" />
  <row Id="234" PostId="171" Score="5" Text="+1 because Python is good, but i disagree with saying Scratch isn't a *real* language. It teaches the basic programming concepts without making you worry about annoying things like syntax. You can still make cool projects in Scratch that use actual algorithms." CreationDate="2017-05-25T15:37:58.647" UserId="166" />
  <row Id="236" PostId="171" Score="1" Text="@Scimonster You're right, I think 'real' doesn't reflect what I was trying to get at—a general purpose language that can be used for nearly anything, whereas Scratch is more limited in its uses (although still has a very important place in education). In Scratch, you can make games and animations, but Python allows you to make applications, games, websites, command line programs—nearly anything. That was what I meant when I said *real*, although re-reading it, it did sound a bit 'snobby', so I've changed that." CreationDate="2017-05-25T15:44:51.780" UserId="2" />
  <row Id="246" PostId="171" Score="2" Text="+1 for mentioning ```turtle```. The concept is simple, but it seems very effective to get interesting visual output in 'non-visual' language." CreationDate="2017-05-25T18:15:00.587" UserId="154" />
  <row Id="282" PostId="171" Score="0" Text="Check out Guido van Rossum's (Python's creator and 'benevolent dictator for life') paper on [computer programming for everyone[(http://legacy.python.org/doc/essays/cp4e/) from 1999." CreationDate="2017-05-26T08:02:32.743" UserId="44" />
  <row Id="1095" PostId="171" Score="0" Text="For a simple(r) IDE for learning Python programming, also see the open-source Thonny at http://thonny.org. Has (sub)expression evaluation stepping, visualisation of the call stack, etc. -- all very useful for beginners especially. There is also an extension available so that you can use this same IDE for programming the BBC Micro:Bit as well." CreationDate="2017-06-16T11:33:51.973" UserId="646" />
  <row Id="429" PostId="172" Score="1" Text="I'm assuming userscripts won't help, but maybe..." CreationDate="2017-05-29T22:27:48.680" UserId="41" />
  <row Id="1087" PostId="173" Score="2" Text="Just to present the other side of the coin, see Bret Victor's [Learnable Programming](http://worrydream.com/LearnableProgramming/) essay that looks at (conceptually &amp; concretely) language/environment design for learning to program with. He says **JavaScript and Processing are poorly-designed languages that support weak ways of thinking, and ignore decades of learning about learning.** when considering readability, making computation visible, decomposition, recomposition and more. It has global state, modes that alter the meaning of a line of code, etc., so not great for learners specifically." CreationDate="2017-06-16T08:41:45.977" UserId="646" />
  <row Id="1155" PostId="173" Score="0" Text="@Abraham - I'm curious - I was wowed by Bret Victor's talk a couple of years back like everyone else but what actually makes him an authority on learning? He seems to be a a CS guy and an interface designer. Has he been a teacher for any length of time? An education researcher (even though education research has a horrible reputation)?" CreationDate="2017-06-16T20:24:40.297" UserId="237" />
  <row Id="1163" PostId="173" Score="1" Text="@MikeZamansky His work speaks for itself. The brilliance of it, the research that evidently goes into it and the impact that it has. But also, the organisations like MIT that invite him over, the people like Alan Kay who more-than-endorse him, etc. -- he is a design-for-humans genius. :) From human-computer interaction research and design at Apple to learn/understand/create research, been working with Alan Kay and other comp sci education and learning sciences researchers (amongst others) in essence continuing the design-for-understanding-and-human-empowerment work of especially Seymour Papert" CreationDate="2017-06-16T22:38:10.873" UserId="646" />
  <row Id="1164" PostId="173" Score="1" Text="Got it - his work speaks for itself. Just like Bill Gates when he had his theories of how schools should be run.&#xA;&#xA;I do think Victor's work is pretty cool and interesting but I wouldn't be willing say his personal theories are unquestionably correct until  they're vetted by actual teachers.&#xA;&#xA;Plenty of teachers have had terrific results with those horrible tools." CreationDate="2017-06-16T23:03:32.963" UserId="237" />
  <row Id="5954" PostId="173" Score="0" Text="See also: https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course" CreationDate="2017-07-24T18:28:47.010" UserId="2068" />
  <row Id="8921" PostId="173" Score="0" Text="@Abraham you may be able to help answer this question https://cseducators.stackexchange.com/q/3907/204" CreationDate="2017-11-02T15:31:38.030" UserId="204" />
  <row Id="247" PostId="174" Score="1" Text="Algorithms do not have a complexity or membership in P or NP. The _problems_ that may be solved by various different algorithms, can be in P or NP, however." CreationDate="2017-05-25T18:23:24.770" UserId="154" />
  <row Id="250" PostId="174" Score="0" Text="More specifically, only *decision problems* can be in P or NP." CreationDate="2017-05-25T19:14:59.427" UserId="130" />
  <row Id="1038" PostId="177" Score="0" Text="I think that this is the original vision for OO, which apparently got lost somewhere along the way." CreationDate="2017-06-15T15:01:22.867" UserDisplayName="user737" />
  <row Id="5739" PostId="177" Score="1" Text="@nocomprende Oh cool, it looks like I groked it." CreationDate="2017-07-22T08:36:00.417" UserId="204" />
  <row Id="7168" PostId="179" Score="1" Text="for me the issue is, it does not scale well. As in, after learning BASIC students find it difficult to relate with currently popular languages like Java and C sharp, which they eventually have to learn as it is." CreationDate="2017-08-22T04:13:26.067" UserId="2605" />
  <row Id="9161" PostId="179" Score="0" Text="As a counter-point, many Basic programmers, who had to use ultra-low-level peeks and pokes, became competetent assembly language and low level C programmers. Skills which are still needed for some OS drivers, energy-harvesting IoT, embedded, and DSP development, and etc." CreationDate="2017-12-06T02:05:19.780" UserId="59" />
  <row Id="254" PostId="180" Score="1" Text="I was recently contemplating cross curricular computing and what this should be: not using a word processor in English, and creating a power point for history. But instead History teaching the history of computing; English teaching the poetry “there is no place like `::1`” (also `127.0.0.1` and `~`);  Geography considering computing culture, moor's law, and the fact that the internet is full (the internet is dead, long live IPv4);" CreationDate="2017-05-25T19:21:27.227" UserId="204" />
  <row Id="273" PostId="180" Score="2" Text="Isn't this purely opinion?  Without knowing the goals of the course, it is impossible to guess." CreationDate="2017-05-26T02:13:42.820" UserId="27" />
  <row Id="278" PostId="180" Score="0" Text="I think that the question is attempting to ask about if history should be part of the course goals. I'd prefer to say that this is too broad, but then again &quot;Should I talk about history?&quot; is 90% of the time &quot;Yes,&quot; but because of the &quot;why&quot; aspect of the question it may still be too broad." CreationDate="2017-05-26T03:03:36.300" UserId="58" />
  <row Id="289" PostId="180" Score="0" Text="IMO, this really only becomes relevant as you face going out into the workforce to maintain legacy code. Understanding that the first databases weren't relational is only useful when you're looking at code that's a holdover/hangover from those days." CreationDate="2017-05-26T12:27:33.507" UserId="65" />
  <row Id="309" PostId="180" Score="0" Text="Which curriculum? You don't teach the same thing to future programmers and to future accountants." CreationDate="2017-05-26T19:57:53.810" UserId="124" />
  <row Id="789" PostId="180" Score="0" Text="I (hopefully) made the question more objective and wonder if it can be reopened in its current form." CreationDate="2017-06-11T03:31:56.070" UserId="613" />
  <row Id="811" PostId="180" Score="0" Text="... in the past? (from the original question) e.g. going from when great-grandma may have been employed as a computer to computers shrinking from the size of a house to that of a speck of dust, how good they have it not having to punch cards, and etc." CreationDate="2017-06-11T15:16:16.593" UserId="59" />
  <row Id="812" PostId="180" Score="0" Text="(from the original question) ... Are there any other merits of including the technology history? Or knowledge of historical computing frowned upon by mainstream CS educators?" CreationDate="2017-06-11T15:19:50.473" UserId="59" />
  <row Id="816" PostId="180" Score="0" Text="@hotpaw2 I edited those at because I saw the questions left as covering those areas implicitly. Asking further questions can often muddy the waters. Limiting it to 1-2 questions keeps the scope narrow enough for a precise answer." CreationDate="2017-06-11T17:01:20.937" UserId="76" />
  <row Id="1072" PostId="180" Score="0" Text="Obligatory: show the video &quot;*The Future of Programming*&quot; by Bret Victor." CreationDate="2017-06-15T19:47:57.330" UserDisplayName="user737" />
  <row Id="265" PostId="181" Score="2" Text="That's a great article to keep in mind - thanks for sharing it. Could you elaborate a bit as to how it connects to the specific question being asked above?" CreationDate="2017-05-25T23:26:37.683" UserId="76" />
  <row Id="2780" PostId="181" Score="0" Text="Have you seen this article about [notional machines](https://computinged.wordpress.com/2012/05/24/defining-what-does-it-mean-to-understand-computing/)? It's fabulous." CreationDate="2017-07-07T15:27:20.927" UserDisplayName="user737" />
  <row Id="287" PostId="184" Score="0" Text="Oh. wow CLIs number 2 is very interesting. I'll remember that for when I need to explain it. Thanks" CreationDate="2017-05-26T11:09:44.287" UserId="150" />
  <row Id="257" PostId="185" Score="1" Text="prolog (or languages like it) are use in real world applications, they can be used for anything that imperative languages are used for, however declarative languages are not always the best language for the job. Although prolog is described as logical it is also declarative. There are other ways to teach logic." CreationDate="2017-05-25T19:36:31.203" UserId="204" />
  <row Id="259" PostId="185" Score="0" Text="Not really. There are resources for doing logic programming in functional languages like Racket. I'll post the links when I find them." CreationDate="2017-05-25T21:30:54.007" UserId="130" />
  <row Id="262" PostId="185" Score="1" Text="Do you want to teach about logic in general, or about [logical programming](https://en.wikipedia.org/wiki/Logic_programming) in particular?" CreationDate="2017-05-25T22:19:30.683" UserId="154" />
  <row Id="266" PostId="185" Score="1" Text="Have you heard of the course Nand2Tetris? It's not logical programming per se, but the first three chapters are all logic-focused using HDL (Hardware Description Language). If your goal is logical concepts in general using programming, I will elaborate below. It might be helpful to rephrase your question as a few of us are on the fence here as to what you might be seeking." CreationDate="2017-05-25T23:40:21.087" UserId="76" />
  <row Id="293" PostId="185" Score="0" Text="Thanks for the comments. I'll try to improve the question for clarity." CreationDate="2017-05-26T15:07:51.227" UserId="116" />
  <row Id="313" PostId="185" Score="0" Text="@James I made a suggestion. See if it is in the spirit of what you are seeking." CreationDate="2017-05-27T02:02:16.327" UserId="76" />
  <row Id="332" PostId="185" Score="1" Text="This talk about real world applications really becomes annoying. I fail to see how it pertains to your question." CreationDate="2017-05-27T12:27:19.237" UserId="160" />
  <row Id="9143" PostId="189" Score="0" Text="I agree, I thing it can also be useful to practice other number bases. Base 3 is interesting when you have digits of `-`, `0` and `+`. There are other number bases that they may already know: E.g ask when is $11 + 3 = 2$?" CreationDate="2017-12-02T18:06:31.680" UserId="204" />
  <row Id="9151" PostId="189" Score="0" Text="+1 on a working example... until you throw the setuid/setgid/sticky bits in :)" CreationDate="2017-12-05T05:06:10.837" UserId="662" />
  <row Id="274" PostId="191" Score="0" Text="While I love teaching front end web stuff, I don't think that the OP is asking about that. The problem is that HTML+CSS are not &quot;real&quot; languages in that they cannot do logic, accept user input on their own, etc." CreationDate="2017-05-26T02:34:03.473" UserId="58" />
  <row Id="275" PostId="191" Score="1" Text="@thesecretmaster Correct. The point is that it is a natural introduction into a real world. And besides, CSS does drive toward an object oriented mindset. And javascript has plenty of logics. The order is very important." CreationDate="2017-05-26T02:37:13.060" UserId="182" />
  <row Id="276" PostId="191" Score="0" Text="It also doesn't match what the OP asks for. HTML+CSS are not programming languages, they are markup languages. And if you want to talk about JS, although it is a programming language, it is not free of language oddities and paradoxes, as the OP requests." CreationDate="2017-05-26T02:41:26.137" UserId="58" />
  <row Id="277" PostId="191" Score="0" Text="@thesecretmaster Let's agree do disagree. HTML+CSS _is_ a programming language, as much as Make and Prolog are. All of them transform a set of rules to the visible result. Who cares that they are not functional, or imperative, or whatever, but descriptive." CreationDate="2017-05-26T02:53:16.740" UserId="182" />
  <row Id="283" PostId="191" Score="0" Text="Absence [the implementation of Rule 110 in HTML and CSS](https://www.google.co.uk/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=2&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwin47XtjI3UAhXsJsAKHTKkDZoQFggsMAE&amp;url=https%3A%2F%2Fstackoverflow.com%2Fquestions%2F2497146%2Fis-css-turing-complete&amp;usg=AFQjCNG33DBUIhIVAbh4v8Aq52QRdGBAXg&amp;sig2=itn_S0Kspafa-Wslfzdpmg), it's coding, but it ain't programming: write me some HTML/CSS that adds a couple of numbers, checks if a number is prime, or sorts a list into order..." CreationDate="2017-05-26T08:07:59.720" UserId="44" />
  <row Id="296" PostId="191" Score="1" Text="@user58697 I concur. I think the learning comes from students manipulating and creating something that they are already familiar. Being able to go home and think they have come part of the way in understanding a real-world concept." CreationDate="2017-05-26T15:26:29.417" UserId="146" />
  <row Id="8922" PostId="191" Score="0" Text="I have just been looking at the brackets editor, it gives instant feedback when editing html and css (maybe js in the future). And html is a real language (not programming-language), and css is a programming language, but very specialised." CreationDate="2017-11-02T15:45:51.030" UserId="204" />
  <row Id="12367" PostId="191" Score="0" Text="For me HTML and CSS got me into the field of computer science. So it might not be a programming language but if the goal is 'to show the children to write some code and the pc reacts to it' then it's well-suited to start with. Real programming might be the next step." CreationDate="2018-05-09T05:49:15.903" UserId="5089" />
  <row Id="526" PostId="199" Score="0" Text="I agree completely. This is how I do it for the final projects in intro CS at Denison. The key is to get them to start early, but I find it's like pulling teeth. When I did weekly check-ins, students hated it (because we still had our usual labs due). If I do it again, I'll end the usual labs when the check-ins start, so students don't perceive that it's double the work." CreationDate="2017-06-03T07:09:35.543" UserId="294" />
  <row Id="538" PostId="199" Score="0" Text="That makes a lot of sense. I can see how a structure designed to get students to get work done regularly on long-term projects would be unpopular if they're still doing other classwork. :)" CreationDate="2017-06-03T14:02:50.220" UserId="27" />
  <row Id="1031" PostId="199" Score="0" Text="My students drill down on the Labs to the exclusion of all else, even reading the textbook - immediately after I have lectured on the section they need to do the next lab. Giving them overlapping projects would be like saying, &quot;do this while you are sleeping tonight.&quot; Not sure why they are so incredibly deadline-focused that they don't do things to help them work faster. The stress of having to get a job, I guess." CreationDate="2017-06-15T13:31:24.707" UserDisplayName="user737" />
  <row Id="527" PostId="201" Score="1" Text="For an intro CS class, I have found the following tool helps students with the process of stepping through the code line by line: http://www.pythontutor.com/visualize.html#mode=edit . I show the TAs how to use it, then demo it in class, then make students use it in the first lab. After that, it's up to students if they want to use it or not, but they report that they do use it and it helps them. In intro, my goal is to empower them in cs, so I try to reduce time spent debugging as much as possible." CreationDate="2017-06-03T07:11:48.967" UserId="294" />
  <row Id="607" PostId="201" Score="1" Text="You've just described all my programming classes." CreationDate="2017-06-06T03:58:57.790" UserId="313" />
  <row Id="943" PostId="201" Score="0" Text="Long ago in college while learning C, I wrote some code: *int arr[10], i; for ( i = 1 ; i &lt;= 10 ; i++ ) arr[i] = 0;* - The program locked up, no error message. TA would not tell me why. 2 hours later, I had learned an important lesson." CreationDate="2017-06-14T18:43:31.943" UserDisplayName="user737" />
  <row Id="1609" PostId="201" Score="0" Text="Lead by example. During you lecturer instead of running your code examples why not step through them?" CreationDate="2017-06-22T21:07:02.517" UserId="1255" />
  <row Id="12678" PostId="202" Score="0" Text="Are you able to share any of these activities?" CreationDate="2018-05-27T16:40:03.107" UserId="283" />
  <row Id="12682" PostId="202" Score="0" Text="Sorry, I no longer have access. In general, I can tell you the error exercises usually involved an error related to what they'd just learned." CreationDate="2018-05-28T06:59:53.937" UserId="65" />
  <row Id="294" PostId="203" Score="4" Text="I'm not sure that &quot;elderly&quot; is enough information here.  Is this a recreational course at a retirement facility?  Are these just regular adults signing up for coursework in order to learn a skill?" CreationDate="2017-05-26T15:14:14.633" UserId="27" />
  <row Id="297" PostId="203" Score="2" Text="Do you have the scope to break the course into optional modules, or structure it more as a drop-in (with a published schedule)?" CreationDate="2017-05-26T15:29:09.997" UserId="41" />
  <row Id="302" PostId="203" Score="0" Text="There is a discussion about this thread [here](https://cseducators.meta.stackexchange.com/questions/47/can-we-replace-the-elderly-tag)" CreationDate="2017-05-26T17:54:36.990" UserId="27" />
  <row Id="305" PostId="203" Score="1" Text="I don't think that one-size-fits-all approach is good. State the goals of the class beforehand." CreationDate="2017-05-26T19:03:23.497" UserId="182" />
  <row Id="424" PostId="203" Score="0" Text="@Choirbean. The project started as a recreational course to teach basic use of tech for adults with more than 50 years. The classes were in the university facilities. Our current problem is define a new curriculum for those how want to continue to learn tech, including basic CS and programming. Some of them keep the recreational mindset, but some other really want a career change and this is the challenge in curriculum definition." CreationDate="2017-05-29T11:10:14.190" UserId="116" />
  <row Id="425" PostId="203" Score="1" Text="@SeanHoulihane. Break the course in modules is an good idea that actually never crossed my mind. I'll think about it and share with my partners." CreationDate="2017-05-29T11:27:29.010" UserId="116" />
  <row Id="7557" PostId="203" Score="0" Text="Consider what you want them to be able to do at the end of the course as well, and use this to guide the content of each section of the course." CreationDate="2017-08-30T01:35:52.163" UserId="2706" />
  <row Id="792" PostId="206" Score="0" Text="Now that we've had this conversation, you might be able to glean some ideas from here as well: https://cseducators.stackexchange.com/questions/430/problematic-student-at-a-very-high-level" CreationDate="2017-06-11T07:48:09.357" UserId="76" />
  <row Id="958" PostId="206" Score="3" Text="Interesting. My first thought on reading this Question Title was: students who just do the minimum and are not motivated to spend more time improving their submissions. These usually drop out of my curriculum. To paraphrase the basketball coach quote: &quot;You can't teach enthusiasm.&quot;" CreationDate="2017-06-14T20:10:01.237" UserDisplayName="user737" />
  <row Id="303" PostId="207" Score="3" Text="Projecteuler is also an excellent site for high-fliers." CreationDate="2017-05-26T18:15:31.007" UserId="27" />
  <row Id="304" PostId="207" Score="0" Text="@Choirbean - That's on my list too. That's the go to site for 2 or 3 students every year. Also a really good source for lab ideas." CreationDate="2017-05-26T18:20:07.067" UserId="30" />
  <row Id="306" PostId="207" Score="2" Text="@Choirbean I do not recommend ProjectEuler. It is much more about math than programming." CreationDate="2017-05-26T19:08:28.450" UserId="182" />
  <row Id="307" PostId="207" Score="2" Text="While it's true that the questions are very mathy, I've gotten a lot of student enthusiasm from some of them.  I have a few go-to exercises (like the dynamic programming exercise about brick line intersections) that have gone very well" CreationDate="2017-05-26T19:32:25.377" UserId="27" />
  <row Id="311" PostId="207" Score="3" Text="Why would it being mathy mean it's not good for a CompSci class? The ones that do the Euler problems like them a lot, and they wind up writing some impressive code to solve the problems." CreationDate="2017-05-26T21:28:31.397" UserId="30" />
  <row Id="321" PostId="211" Score="2" Text="Hard to remember back this far, but the malloc example is useful even if you skip over the work underneath. It exposes the machinery inside the black box just enough." CreationDate="2017-05-27T10:19:00.950" UserId="41" />
  <row Id="325" PostId="211" Score="2" Text="Is this an AP CS class, or something where you have more free reign in the curriculum?  And what is the general language of the course?" CreationDate="2017-05-27T10:34:51.010" UserId="27" />
  <row Id="357" PostId="211" Score="1" Text="Yes, AP CS Principles, more specifically CS50 AP. The curriculum includes pointers in an optional unit, but my gut says to include it regardless. We spend about a week in Scratch for general programming concepts and then focus on C for the rest of the semester before also going over basic Python the second semester." CreationDate="2017-05-27T18:30:54.993" UserId="76" />
  <row Id="380" PostId="211" Score="0" Text="Note: `sizeof(myarray)` gives the size of your array, (if I remember correctly) in bytes. Where as `sizeof(mypointer)` gives the size of a pointer (4 or 8, depending or architecture). Also arrays can-not be passed to another routine, only a pointer is passed." CreationDate="2017-05-28T09:19:37.160" UserId="204" />
  <row Id="771" PostId="211" Score="0" Text="I agree with @Sasha that 0-based arrays are a little strange but pointers are much much more difficult. Better to not confuse things by combining the two until both concepts are consolidated in students' minds." CreationDate="2017-06-09T18:52:00.987" UserId="57" />
  <row Id="2433" PostId="211" Score="0" Text="https://www.quora.com/Why-do-array-indexes-start-with-0-zero-in-many-programming-languages describes multiple reasons for 0 indexing, including last_index - first_index should be length_of_array as well as your pointer argument." CreationDate="2017-07-03T03:54:17.017" UserId="765" />
  <row Id="4327" PostId="211" Score="0" Text="I don't think of pointers as 'abstract' because indirect addressing is built in to probably every cpu that has ever been made, and computing without it would be impossible. It is no more abstract than arithmetic, compare and branch. Fundamental. What *are* they teaching these days?" CreationDate="2017-07-15T20:13:37.203" UserDisplayName="user737" />
  <row Id="9223" PostId="211" Score="0" Text="I know a handful of seasoned C programmers, who seeing `*(pointer + integer) = z` would instantly charge at you with any sharp and heavy object they can find. It is widely believed that doing arithmetic on pointers and integers is one of the worst intentional features of C. This was a motivation for creation of a lot of other languages, who'd proudly declare that, unlike in C, this kind of pointer arithmetic is prohibited." CreationDate="2017-12-14T13:04:56.860" UserId="1000" />
  <row Id="314" PostId="212" Score="2" Text="Possible duplicate of [Should assembly language be taught in an introductory course (or soon after)?](https://cseducators.stackexchange.com/questions/27/should-assembly-language-be-taught-in-an-introductory-course-or-soon-after)" CreationDate="2017-05-27T07:42:20.753" UserId="76" />
  <row Id="316" PostId="212" Score="2" Text="Disagree. That question is specifically asking if assembly should be taught at all. In today's world, C is considered low level." CreationDate="2017-05-27T07:44:40.343" UserId="215" />
  <row Id="317" PostId="212" Score="1" Text="Fair enough. I see the distinction you are attempting to draw." CreationDate="2017-05-27T07:55:17.143" UserId="76" />
  <row Id="327" PostId="212" Score="2" Text="I prefer to teach high level first, and thing that we are usually not high enough. However I have seen one teacher start with very low-level, and hardware. I fully agree with what this teacher did. I would say very high or very low, not in-between. Also do not try to follow the course of history, the history of computing is important, but this should not dictate the order of learning." CreationDate="2017-05-27T11:28:56.810" UserId="204" />
  <row Id="367" PostId="212" Score="1" Text="A good balance of both would be best. One of the new courses focuses more on higher level languages, but doesn't neglect lower level languages either." CreationDate="2017-05-27T19:26:59.690" UserDisplayName="user223" />
  <row Id="944" PostId="212" Score="0" Text="To teach flowcharts, I always have to explain: &quot;*The computer can only do 5 things - fetch, store, arithmetic, compare, jump.*&quot; All high-level languages, decision structures, loops... are all built basically on test and branch. So, flowcharts show those. They do not show high level structures well, but they are indispensable, because that is how computers *actually work*. If students don't know that, they know nothing at all. You can start at low level and go to high, they will be gratified. If you start at high and go low, they will be frustrated, but savvy. But you must have both." CreationDate="2017-06-14T18:50:27.263" UserDisplayName="user737" />
  <row Id="319" PostId="213" Score="17" Text="The index of an array is a measure of the distance from the start. (not what you asked for, but another way to explain it)." CreationDate="2017-05-27T10:12:05.053" UserId="204" />
  <row Id="324" PostId="213" Score="4" Text="There are a few here: https://en.wikipedia.org/wiki/Zero-based_numbering" CreationDate="2017-05-27T10:32:38.070" UserId="204" />
  <row Id="366" PostId="213" Score="7" Text="When playing board games, my six year old starts counting from zero, for the square her counter is on." CreationDate="2017-05-27T19:13:51.677" UserId="44" />
  <row Id="379" PostId="213" Score="0" Text="Was there a, very good, answer about azimov's laws of robotics here? Or did I dream it?" CreationDate="2017-05-28T09:05:51.413" UserId="204" />
  <row Id="382" PostId="213" Score="0" Text="If you thing zero-indexing is weird (see answer below for why it is not), then consider temperature: °F and °C have a strange starting point, −459.67°F and −273.15°C." CreationDate="2017-05-28T10:04:56.763" UserId="204" />
  <row Id="427" PostId="213" Score="5" Text="One is the first natural number, but nought is the zeroth." CreationDate="2017-05-29T18:41:19.233" UserId="44" />
  <row Id="448" PostId="213" Score="10" Text="As seen by the majority of the comments, the key is to separate `index` from `count`. `index` relates to distance or movement, which has zero as the beginning, while `count` relates to quantity, which has a (possibly) natural beginning of one. If the students have the proper level of mathematics, you can also use the powers-of-10 (the first, lowest, digit is x*10^0." CreationDate="2017-05-30T13:44:47.483" UserId="104" />
  <row Id="569" PostId="213" Score="2" Text="@GypsySpellweaver love the positional (Arabic number system) ($10^n 10^2 10^1 10^0$). You should add this as an answer. I think this question will benefit from lots of answers, as different pupils will grok different analogies." CreationDate="2017-06-04T07:56:51.520" UserId="204" />
  <row Id="570" PostId="213" Score="0" Text="@richard That's one that needs decent algebra to fathom, but can fit if the class is right." CreationDate="2017-06-04T08:00:23.633" UserId="104" />
  <row Id="1065" PostId="213" Score="0" Text="@GypsySpellweaver Reminded me of [xkcd - Powers of 1](https://xkcd.com/271/)" CreationDate="2017-06-15T19:26:09.817" UserDisplayName="user737" />
  <row Id="4669" PostId="213" Score="1" Text="ob xkcd: https://xkcd.com/163/" CreationDate="2017-07-21T03:27:02.580" UserId="283" />
  <row Id="6241" PostId="213" Score="0" Text="another cartoon: http://i.imgur.com/uqhv4mB.png" CreationDate="2017-07-27T23:02:58.047" UserId="283" />
  <row Id="20140" PostId="213" Score="0" Text="Why not just explain the hardware reason why array indexes start at zero *in some languages*?  There isn't a good abstract reason why the compiler writers did this, and suggesting there is is likely to be a block for some students." CreationDate="2022-05-30T08:27:22.003" UserId="11932" />
  <row Id="20141" PostId="213" Score="0" Text="@DikranMarsupial it is just distance.Try using a language that indexes starting at 1. You end up subtracting 1 doing the calculation then adding 1. It is a complete pain. e.g find the centre index." CreationDate="2022-05-30T08:58:12.233" UserId="204" />
  <row Id="20142" PostId="213" Score="0" Text="@ctrl-alt-delor I have used languages which index starting at 1.  The two languages I program in most are C/C++ and MATLAB.  The point is that it is better to be honest when teaching and give the real reason why something is the way it is, rather than give a post-hoc fiction.  I personally don't find it a problem, unless people try to fudge it (e.g. &quot;Numerical Recipes in C&quot; where they did pretty much exactly that IIRC and made it much harder to integrate into C programs)." CreationDate="2022-05-30T10:05:04.467" UserId="11932" />
  <row Id="20151" PostId="213" Score="0" Text="I love this question.  This is the type of thing I am always looking for, and encouraging my students to develop, but it never would have occurred to me to ask it here.  :-)" CreationDate="2022-05-31T14:09:42.660" UserId="12011" />
  <row Id="326" PostId="214" Score="11" Text="I thing this answer is exactly it. Just like a ruler, and @Choirbean's string answer: we measure from 0, but (usually) count from 1. In arrays we are giving the distance, a measure." CreationDate="2017-05-27T11:22:57.693" UserId="204" />
  <row Id="360" PostId="214" Score="8" Text="I really like the idea of thinking of the index not as a count per se but as a measurement from the origin." CreationDate="2017-05-27T18:46:24.897" UserId="76" />
  <row Id="17073" PostId="214" Score="0" Text="I think this is the right answer to the original question, but want to add for the OP something unrelated that I've found useful: the words that languages and libraries use can make this much easier or harder to grasp. Whenever I'm dealing with 0-based indexes, I mentally translate to skip and take, which makes them perfectly clear. If you can find a library that uses these terms as your first introduction to the concept, it might make it easier to learn." CreationDate="2020-09-24T22:09:32.793" UserId="2682" />
  <row Id="20139" PostId="214" Score="0" Text="&quot;For the first year of life, children are 0 years old. &quot; but we would say that they were in their first year of life" CreationDate="2022-05-30T08:22:31.637" UserId="11932" />
  <row Id="20169" PostId="214" Score="0" Text="A valid point and true if the measuring criteria is years. When a child is in it first year of life I've often heard its age being referred to in terms of months. As an alternative to your example, and this is very much a custom of a group or a culture, many years ago I often heard migrants from eastern Europe refer to people, whether child or adult, as being in their such-and-such year of life, not so many year old. ..." CreationDate="2022-06-04T10:33:56.177" UserDisplayName="user11948" />
  <row Id="20170" PostId="214" Score="0" Text="...  To use your example, a child that hadn't yet reached its first birthday would be in its first year of life. An adult who, by our custom, would be 40 years years old would be referred to as being in their 41st year of life." CreationDate="2022-06-04T10:34:02.400" UserDisplayName="user11948" />
  <row Id="12764" PostId="215" Score="2" Text="The problem with this is, that, while they are numbered 0, 1, and so on, the floor with number one is also called the first floor (at least in Germany and other European countries I know of), while in an array the first element is not indexed with 1." CreationDate="2018-06-06T14:29:51.450" UserId="3335" />
  <row Id="13263" PostId="215" Score="2" Text="@RaimundKrämer well, that's a defect of the way we talk about arrays, probably stemming back to Fortran days. I avoid using _erstes_, _zweites_ etc. to refer to array elements, and say instead _Startelement_ and _Nachfolgerelement_. In English, I use list terminology: the _head_ and the _head of tail_. (Naming more than the frontmost two, the last, or the middle elements is seldom necessary.)" CreationDate="2018-09-03T10:56:04.110" UserId="1157" />
  <row Id="20150" PostId="215" Score="1" Text="&lt;colorful curse redacted&gt;, you beat me to it. An elevator was the first example I thought about.  :-)" CreationDate="2022-05-31T14:07:39.010" UserId="12011" />
  <row Id="340" PostId="216" Score="0" Text="I don't doubt that teaching a low level language is beneficial, but it's more a question of which is better as a foundation to build knowledge on: low or high level" CreationDate="2017-05-27T16:54:41.357" UserId="215" />
  <row Id="342" PostId="216" Score="0" Text="@BrDaHa I see your point. I'll add more to the answer." CreationDate="2017-05-27T17:15:15.000" UserId="150" />
  <row Id="343" PostId="216" Score="0" Text="@BrDaHa edited the answer." CreationDate="2017-05-27T17:18:24.467" UserId="150" />
  <row Id="320" PostId="217" Score="2" Text="Similarly, [Asimov's Laws](https://en.wikipedia.org/wiki/Three_Laws_of_Robotics#Zeroth_Law_added) start from zero (although chronologically, the zeroth law was added later)." CreationDate="2017-05-27T10:18:30.007" UserId="2" />
  <row Id="568" PostId="217" Score="1" Text="@Aurora0001 I added in a bit on asimov. (also I think you should make an answer on asimov)" CreationDate="2017-06-04T07:50:17.203" UserId="204" />
  <row Id="9795" PostId="219" Score="1" Text="You are missing 5 freedoms.  And the fact that a bunch of computing folks used an 0 indexed array as is kinda... expected.  OP is looking for non-computing examples, like military time and people's age (as mentioned in other answers/comments)" CreationDate="2018-01-23T14:26:22.137" UserId="662" />
  <row Id="9802" PostId="219" Score="1" Text="@ivanivan can you tell us about the 5 freedoms, I know not of this. And added answer on 24hour time." CreationDate="2018-01-23T17:01:59.143" UserId="204" />
  <row Id="9808" PostId="219" Score="1" Text="the freedoms you list are from the Free Software Foundation - Stallman and co.  However, the Open Source Definition lists other requirements/freedoms needed for a license to be considered Open - https://opensource.org/osd-annotated.  Remember, Stallman insists that all software be free, the Open Source Initiative wants as much as possible to be free, but not at the expense of extremism" CreationDate="2018-01-23T19:57:32.673" UserId="662" />
  <row Id="16916" PostId="219" Score="0" Text="@ivanivan the Free Software foundation also have a longer version: these 3 points are only a summary. The freedoms in the rest of the [Free Software definition](https://www.gnu.org/philosophy/free-sw.en.html), and the [Open Source definition](https://opensource.org/osd-annotated) do not add any extra freedoms. They only add clarification. The Free Software definition has 3 levels: the name &quot;Free Software&quot; (where free refers to freedom not price), the 4 freedoms, and the detailed explanation. The Open Source definition only has a detailed explanation, so is harder to grok." CreationDate="2020-08-30T14:15:55.223" UserId="204" />
  <row Id="1069" PostId="220" Score="2" Text="The US had a channel 1 at some point but it was repurposed very early on. TV channels started at 2. Zero was right out." CreationDate="2017-06-15T19:40:14.310" UserDisplayName="user737" />
  <row Id="20135" PostId="220" Score="0" Text="This numbering system was far from universal on UK TVs. A Hitachi model we had in the early 90s had 12 presets, but they were numbered up from 1 to 12. Some models I encountered later c.2000 would treat channel 0 as the AV/SCART input, but only a subset did this." CreationDate="2022-05-29T14:07:58.203" UserId="11516" />
  <row Id="20136" PostId="220" Score="0" Text="@Kaz. True, I have updated the answer." CreationDate="2022-05-29T17:44:32.250" UserId="204" />
  <row Id="337" PostId="221" Score="0" Text="Personally, the infamous error I would get when learning C was SEGFAULT :)" CreationDate="2017-05-27T16:17:35.650" UserId="215" />
  <row Id="338" PostId="221" Score="0" Text="Lol, yes, thank you!!  Slip of the tongue there :P Conceptually similar errors, though." CreationDate="2017-05-27T16:19:30.133" UserId="27" />
  <row Id="449" PostId="221" Score="0" Text="If you, and your students, find the `for` loop syntax odd, start with the `while` loop first. (Set `x`, test `x`, increment `x`). Then &quot;roll it up&quot; into a single `for` loop." CreationDate="2017-05-30T13:55:39.130" UserId="104" />
  <row Id="450" PostId="221" Score="0" Text="I'm not confused by for loops :)  But the ordering of the operations causes confusion.  Looking at `for (1 ; 2 ; 3) { 4 }`, you would expect the operations to run in a similar order, but they don't. Students seem to regularly get confused by this hidden ordering trap - they need to understand the ordering as (1,2,4,3,[2,4,3...])" CreationDate="2017-05-30T14:02:03.067" UserId="27" />
  <row Id="362" PostId="222" Score="3" Text="I think the idea is that the first hour of the day in the 24-hour clock is 00:00. Hence, what would be 12:01 am is in fact 00:01. See http://militarytimechart.com/" CreationDate="2017-05-27T18:55:26.083" UserId="76" />
  <row Id="1067" PostId="222" Score="2" Text="So what does the phrase &quot;The Eleventh Hour&quot; mean, 10 am? Big deal. Still have more than 13 hours to go." CreationDate="2017-06-15T19:33:09.747" UserDisplayName="user737" />
  <row Id="1081" PostId="222" Score="1" Text="@nocomprende strangely the 11th hour meant from 11pm. So the **12th** hour of the afternoon." CreationDate="2017-06-15T21:36:34.340" UserId="204" />
  <row Id="7210" PostId="222" Score="2" Text="@nocomprende I just realised that the 11hour is like an octave. An octave is named because depending how you count there is ether 7 or 12 notes in an octave. The 2 biggest cases of error are, null references, not validating inputs, and out by one errors." CreationDate="2017-08-23T14:00:41.890" UserId="204" />
  <row Id="7215" PostId="222" Score="1" Text="Also, a 'third' in music is the 3rd note in the scale, not three up from the first note. A fifth, seventh, etc - same thing. Octave is thus: 8 notes up, or the entire scale starting over again. The hours of the day used to be noted from sunrise, so there were only about 12 (near the equator). Hours at night were not noted, because no one could see the sundial. &quot;Ship's Bells&quot; start at noon / midnight with a single ring and add one at the half hour. They start over after 8 rings, thus 4, 8 and so on." CreationDate="2017-08-23T14:35:06.617" UserDisplayName="user737" />
  <row Id="374" PostId="224" Score="6" Text="I like this. You can get more real-life examples based on counting the DISTANCE. e.g. If you knock on the first door in an apartment block and ask where Alice lives, they say 'go down 3 doors', that's like indexing into the array of apartments. And if Alice lives in the first then you don't move, ie you go down 0 doors." CreationDate="2017-05-27T21:26:15.200" UserId="57" />
  <row Id="358" PostId="225" Score="0" Text="Thanks for sharing that link. I'll use to supplement this lesson should I likely go this direction next year." CreationDate="2017-05-27T18:32:30.210" UserId="76" />
  <row Id="359" PostId="225" Score="0" Text="@Peter Glad I could help. Because this is about AP CS Principles, I guess I should add that this is from the perspective of someone who is taking the class next year." CreationDate="2017-05-27T18:34:44.580" UserId="58" />
  <row Id="330" PostId="228" Score="0" Text="It's really broad as it is, but to try and narrow it you could specify what you want out of a language. You've said &quot;Name a new language I can teach.&quot; You should make it more &quot;What is a language that will help kids with xyz&quot;" CreationDate="2017-05-27T12:11:40.787" UserId="58" />
  <row Id="335" PostId="228" Score="2" Text="Newer is not always better." CreationDate="2017-05-27T14:46:29.607" UserId="160" />
  <row Id="339" PostId="228" Score="0" Text="@beroal my mistake. I didn't make it clear what kind of `new` I'm talking about" CreationDate="2017-05-27T16:22:33.087" UserId="150" />
  <row Id="347" PostId="228" Score="2" Text="@thesecretmaster not sure I understand the issue you're referring to. I'm not looking for any specific language. I'm trying to teach students to learn things (techniques, algorithms etc.) on their own." CreationDate="2017-05-27T17:39:35.447" UserId="150" />
  <row Id="348" PostId="228" Score="0" Text="So &quot;How can I teach my students to teach themselves?&quot; That's still a very broad question." CreationDate="2017-05-27T17:41:03.280" UserId="58" />
  <row Id="350" PostId="228" Score="0" Text="@thesecretmaster Oh. That's what you mean. I'll try to make it more specific." CreationDate="2017-05-27T17:43:11.620" UserId="150" />
  <row Id="352" PostId="228" Score="0" Text="My answer might change depending on the ages and background of the students. Can you give a little more context about that?" CreationDate="2017-05-27T17:55:57.733" UserId="27" />
  <row Id="355" PostId="228" Score="0" Text="@Choirbean fixed the issue." CreationDate="2017-05-27T18:07:49.033" UserId="150" />
  <row Id="948" PostId="229" Score="0" Text="Learning to program is definitely hands-on. It is as close to riding a bicycle as your brain is going to get." CreationDate="2017-06-14T19:19:56.587" UserDisplayName="user737" />
  <row Id="1068" PostId="231" Score="3" Text="When I was a child, I thought that adding past 10 required adding two: one to change the 9 to a zero and one more to put the one in front. It took a while for a tutor to figure out why all my sums were off by one." CreationDate="2017-06-15T19:39:05.380" UserDisplayName="user737" />
  <row Id="361" PostId="232" Score="4" Text="I didn't refer to it as complex, just challenging. I don't think it is a difficult idea. Based on my experience with students in the classroom, the adjustment to starting at 0 &quot;feels&quot; different and odd at first. I'm just seeking ways of making it feel more intuitive by grounding it in real-life examples, hence the motivation for the other thread." CreationDate="2017-05-27T18:50:37.633" UserId="76" />
  <row Id="12697" PostId="232" Score="0" Text="Pointers are (unfortunately for beginners) a must-have in early stage of C teaching, as you certainly want the students to use a procedural approach for programming (decomposition of actions as small functions, thus transmitting parameters by copy and by reference)." CreationDate="2018-05-30T07:15:15.137" UserId="2103" />
  <row Id="12702" PostId="232" Score="0" Text="@MichelBillaud, yes, I consider it a big downside of C. I personally started from Pascal and therefore, when being beginner, I had by-ref-parameters without pointers. Maybe it's better to start learning C without by-ref parameters (i.e. pass in by copy, pass out through result or through a member of result structure) in the beginning?" CreationDate="2018-05-30T12:40:59.783" UserId="216" />
  <row Id="12704" PostId="232" Score="1" Text="@Sasha Maybe it's better to learn the basics of programming with a more civilized language, and keep C for occasions where you really need low level stuff for efficiency (which drastically excludes transmitting copies of things when not necessary). C as a first language defeats its own purpose." CreationDate="2018-05-30T13:09:46.053" UserId="2103" />
  <row Id="453" PostId="235" Score="1" Text="I would suggest, that a fourier transform would be one of the early steps. Then the rest of the code would be analysing frequencies." CreationDate="2017-05-30T14:44:54.487" UserId="204" />
  <row Id="455" PostId="235" Score="0" Text="That's exactly the sort of specificity I'm looking for. Could you flesh that out into more of an answer?" CreationDate="2017-05-30T14:58:11.870" UserId="27" />
  <row Id="356" PostId="236" Score="2" Text="So you're saying I simply shouldn't try to teach them to be independent in what they learn?" CreationDate="2017-05-27T18:08:27.693" UserId="150" />
  <row Id="363" PostId="236" Score="0" Text="I don't know if independence can be taught per se, but exposing students to multiple languages could encourage them to seek out more unknowns" CreationDate="2017-05-27T19:00:38.013" UserId="215" />
  <row Id="364" PostId="236" Score="2" Text="Downvoters: at least explain why you're downvoting. It's not helpful without an explanation" CreationDate="2017-05-27T19:01:28.013" UserId="215" />
  <row Id="365" PostId="236" Score="2" Text="@Itamar Green I don't think it's that so much as students may be averse to finding a new technology without seeing a project they can build with it. They can still be independent in a sense, but should be compelled to be independent by virtue of some motivating factor so as to not be dismissive of that which could be challenging, confusing, and/or seemingly irrelevant at first glance. For example, requiring students to use BeautifulSoup for webscraping in Python may lead to seeing its value more than having them find their own library to explore in Python. Too much freedom in the latter." CreationDate="2017-05-27T19:03:12.460" UserId="76" />
  <row Id="369" PostId="236" Score="0" Text="@Peter I see what you mean. So you're saying that a measure of freedom is a good way to go about it?" CreationDate="2017-05-27T19:30:18.670" UserId="150" />
  <row Id="371" PostId="236" Score="3" Text="Precisely. Too much freedom can be paralyzing. Especially for newer/younger programmers, freedom with helpful guidelines/boundaries/constraints is more freeing." CreationDate="2017-05-27T19:35:21.167" UserId="76" />
  <row Id="1259" PostId="236" Score="1" Text="@Peter a lot has been written lately about &quot;the paradox of choice&quot; and that having no guidelines or way forward is stressful and unhelpful. Lots of pension plans fail because well-meaning people provide so many options that people never choose. When I signed up for the ACA a few years ago, there were about 10 insurers, and one had over 40 plans in just one of the 4 tiers. This is not choice, it is torment. Many graduates have no idea what to do next. &quot;The world is at your feet&quot; feels more like, *&quot;I am drowning!*&quot;" CreationDate="2017-06-18T16:58:30.323" UserDisplayName="user737" />
  <row Id="410" PostId="240" Score="2" Text="When I used to teach a preAP course we started with Python for exactly this reason. By the time we got to Java everybody was indenting." CreationDate="2017-05-28T18:32:43.967" UserId="30" />
  <row Id="647" PostId="240" Score="0" Text="I was about to say the same. Teach Python (or other such indented language) for a while." CreationDate="2017-06-07T04:27:10.947" UserId="473" />
  <row Id="704" PostId="240" Score="4" Text="This is not teaching &quot;indentation is good&quot;. All it's teaching is &quot;indentation is annoying and required; it has no benefit to me, and I do it because I'm forced to&quot;." CreationDate="2017-06-07T16:11:34.223" UserDisplayName="user31" />
  <row Id="1258" PostId="243" Score="0" Text="The &quot;abstract understanding&quot; part seems to be what makes programming different from many other fields. I have seen many articles debating the idea: &quot;You can't teach abstraction&quot;. In my opinion, this is the main unsolved issue in computer science instruction. I certainly have no clue how to do it." CreationDate="2017-06-18T16:47:49.930" UserDisplayName="user737" />
  <row Id="377" PostId="245" Score="0" Text="I see what you're saying, but I'm not quite sure how pairing students would aid them in being more independent. Could you please clarify that?" CreationDate="2017-05-28T07:43:22.863" UserId="150" />
  <row Id="378" PostId="245" Score="1" Text="Its about being able to discuss ideas with someone and obtain direction. Sometimes they may have a direction without having to discuss it (but that would assume having the knowledge in the first place). Being able to discuss affirm amongst themselves they are heading in the right direction, and being able to describe what they are doing aids learning." CreationDate="2017-05-28T07:54:30.643" UserId="146" />
  <row Id="1260" PostId="245" Score="0" Text="And, pair programming is common too." CreationDate="2017-06-18T17:00:47.620" UserDisplayName="user737" />
  <row Id="381" PostId="248" Score="0" Text="Setting a limit on the size of the program should force them to not make large and unnecessary programs or functions. For the example you gave, set the limit to 50 characters, or something around that range. That will make them try to shorten the program as much as possible." CreationDate="2017-05-28T10:00:06.267" UserDisplayName="user223" />
  <row Id="384" PostId="248" Score="0" Text="I would suggest solving this with programming. I would make a neural network that would evaluate the students' answers. But I feel like that's overkill. Then again, that is sometimes my style ;)" CreationDate="2017-05-28T10:23:15.420" UserId="150" />
  <row Id="385" PostId="248" Score="0" Text="What language? For ruby there is a static code analyzer that checks for best practice called rubocop. Maybe there is a similar utility for the language of your choice" CreationDate="2017-05-28T10:27:19.800" UserId="58" />
  <row Id="386" PostId="248" Score="0" Text="@thesecretmaster perhaps looking into how `rubocop` works could be insightful" CreationDate="2017-05-28T10:28:46.730" UserId="150" />
  <row Id="387" PostId="248" Score="0" Text="rubocop is a [static code analyzer](https://stackoverflow.com/questions/49716/what-is-static-code-analysis). It works by looking at the code without running it and evaluating for best practices, etc." CreationDate="2017-05-28T10:34:39.850" UserId="58" />
  <row Id="388" PostId="248" Score="0" Text="@thesecretmaster More general solutions would be ideal, but Python would be the language I'm most interested in evaluating." CreationDate="2017-05-28T10:47:32.123" UserId="2" />
  <row Id="389" PostId="248" Score="0" Text="@subscript You should post that as an answer, since it seems like a good idea. Ideas on how to find an appropriate size limit would be interesting, too—my solution may be much shorter than theirs, but a longer solution might not be unreasonable necessarily." CreationDate="2017-05-28T10:51:24.750" UserId="2" />
  <row Id="395" PostId="248" Score="1" Text="@Aurora0001 Programming is about efficiency, and the shorter answer is generally more efficient than a long, work-around one." CreationDate="2017-05-28T11:55:23.333" UserDisplayName="user223" />
  <row Id="451" PostId="251" Score="2" Text="You have done step-1 admitting that you have a problem, are powerless to fix. Step-2: Came to believe that a Power greater than ourselves could restore us to sanity. Step-3: Made a decision to turn your will and our lives over to the care of a higher-power. That is trust that things will go well (on average better), if you don't do it. (see http://www.alcoholics-anonymous.org.uk/About-AA/The-12-Steps-of-AA for more help) ☺These steps have helped me in a lot of things." CreationDate="2017-05-30T14:39:44.987" UserId="204" />
  <row Id="392" PostId="252" Score="0" Text="I have my own projects, but I'm certainly not working on them during class time." CreationDate="2017-05-28T11:03:57.473" UserId="166" />
  <row Id="390" PostId="253" Score="4" Text="I really like your answer, but I disagree with the last paragraph. You should _never_ write code for your student. You can say out loud what has to be done and why, but _never_ write the code yourself." CreationDate="2017-05-28T11:03:17.753" UserId="58" />
  <row Id="391" PostId="253" Score="2" Text="@thesecretmaster right, I was occupied for a moment so I couldn't edit it" CreationDate="2017-05-28T11:03:47.907" UserId="150" />
  <row Id="393" PostId="253" Score="1" Text="@thesecretmaster there. Much better. I agree completely, but I couldn't put my thoughts into words properly" CreationDate="2017-05-28T11:05:57.843" UserId="150" />
  <row Id="400" PostId="257" Score="1" Text="... or next to another doll? How does this relate to using XML to teach HTML?" CreationDate="2017-05-28T12:17:11.570" UserId="58" />
  <row Id="401" PostId="257" Score="1" Text="This isn't an answer to the question as posed. Can you flesh this out?" CreationDate="2017-05-28T12:46:57.420" UserId="27" />
  <row Id="402" PostId="257" Score="0" Text="@thesecretmaster it relates to a comment on the question itself. I suggested adding an answer that explains what he meant, but I wasn't expecting this kind of answer o.o" CreationDate="2017-05-28T12:52:43.923" UserId="150" />
  <row Id="403" PostId="258" Score="1" Text="Use a third language to explain one of the other two? Can see why ..." CreationDate="2017-05-28T12:53:17.927" UserId="150" />
  <row Id="1557" PostId="258" Score="0" Text="There is an editor called [Pollo](http://pollo.sourceforge.net/) which has a similar aesthetic but is actually designed to edit XML. In addition, you can give it a schema and it will enforce it, which makes it useful for teaching the structure of a real document. I have actually used this with a custom schema for a configuration file which was essentially a basic programming language to teach someone who knew nothing of programming how to create config files without having to worry about syntax errors." CreationDate="2017-06-22T10:13:20.330" UserId="1219" />
  <row Id="1587" PostId="258" Score="0" Text="@ItamarGreen what is the 2nd language? (I see html and snap)." CreationDate="2017-06-22T17:26:28.617" UserId="204" />
  <row Id="1588" PostId="258" Score="0" Text="@richard HTML and XML." CreationDate="2017-06-22T17:27:48.627" UserId="150" />
  <row Id="601" PostId="259" Score="1" Text="Can't agree more. Code is for people first and foremost; otherwise, we should all have been coding 0s and 1s instead of Python and Scheme." CreationDate="2017-06-05T20:39:56.453" UserId="130" />
  <row Id="406" PostId="260" Score="0" Text="I see. I'll definitely use that slide. Thanks!" CreationDate="2017-05-28T16:34:00.657" UserId="150" />
  <row Id="2432" PostId="260" Score="0" Text="I agree: start students with a minimal skeleton of working HTML. They can load the local file in their browser and see the effect of saved changes by refreshing the browser. But I precede the skeleton with an overview of server/client and HTML/CSS/JS. I immediately follow the skeleton by adding an `&lt;h1&gt;`  element and then modify the start tag with `style=&quot;color: #ff00ff;&quot;` and teach inline CSS, reinforcing hex RGB which I taught earlier in a different context." CreationDate="2017-07-03T02:38:19.230" UserId="765" />
  <row Id="415" PostId="261" Score="1" Text="This question makes me wish I could upvote multiple times." CreationDate="2017-05-28T18:56:46.593" UserId="27" />
  <row Id="416" PostId="261" Score="0" Text="The `static` keyword was re-used in C++ for this usage, to avoid introducing another keyword. How did you explain `void`, `public`, `main`? All of these have no good meaning in lesson1, and can only be explained about ½way through the course. In Eiffel it does not have these words, there is no main, there are reasonable defaults of access, if you don't return a value than don't declare a return type, and there is no such thing as static, you don't need it (the only use for it is once methods, eiffel has these. All other uses are harmful)." CreationDate="2017-05-28T22:39:38.903" UserId="204" />
  <row Id="419" PostId="261" Score="1" Text="You should tag this question with a language for specificity's sake." CreationDate="2017-05-28T23:08:14.557" UserId="27" />
  <row Id="408" PostId="264" Score="0" Text="I see what you're talking about, but that isn't about `static` or not." CreationDate="2017-05-28T18:14:55.507" UserId="150" />
  <row Id="407" PostId="265" Score="0" Text="I like the necessary-sufficient idea. Thanks!" CreationDate="2017-05-28T18:13:52.683" UserId="150" />
  <row Id="1902" PostId="266" Score="0" Text="Out of curiosity, which auto grader tool do you use?" CreationDate="2017-06-26T22:32:01.393" UserId="1397" />
  <row Id="1906" PostId="266" Score="0" Text="@tusharsoni Actually wrote my own. Link is in my profile." CreationDate="2017-06-27T01:55:48.913" UserId="30" />
  <row Id="16091" PostId="266" Score="0" Text="&quot;There's enough frustration in a first year course without worrying too much about style and efficiency.&quot; The problem here is that when bad habits get ingrained early on, it much more work and frustration to fix them later." CreationDate="2020-01-20T19:35:49.800" UserId="8137" />
  <row Id="420" PostId="268" Score="0" Text="Aw shoot! Then I should have used that 2 years ago. Well it's still applicable. Thanks!" CreationDate="2017-05-29T07:10:20.270" UserId="150" />
  <row Id="422" PostId="269" Score="1" Text="I can attest to this grading policy. As a teacher of CS50 AP, I appreciate the four-axis approach as it allows me to focus on multiple elements of students' work. It works very well, and Harvard provided great training on it before I adopted the curriculum." CreationDate="2017-05-29T07:42:07.090" UserId="76" />
  <row Id="460" PostId="269" Score="1" Text="I raise my hand as well on the CS50 AP policy but I like what Choirbean said as well.  The process was very time intensive early on in the class but the programs were small so it was manageable.  Like Choirbean, I found I didn't need to keep at it all that much as most students just used better style once they understood the expectations." CreationDate="2017-05-30T17:55:03.623" UserId="261" />
  <row Id="17330" PostId="269" Score="0" Text="Late comment: This was very useful, and I used it as a model for how to grade assignments in my CS courses starting a few years ago. The one drawback, re: the given question, is that only 1 of the 4 components seems to be really automatable." CreationDate="2020-11-27T03:45:02.043" UserId="8137" />
  <row Id="9178" PostId="270" Score="0" Text="I feel this answer could be improved by expanding on the &quot;belongs to the type&quot; notion by making it clearer that it is **&quot;shared&quot; by all instances of the class** (where changing it affects all classes (and sub-classes)). For example, if all cars make a &quot;honk&quot; noise, then that could be modelled as `public static String noise = &quot;honk&quot;;` (or perhaps as a static `makeNoise()` method. If you were to be providing sound-effects over a silent movie, then it would be inefficient to have a separate &quot;honker&quot; per car - instead you'd have one for all cars (i.e. make it static, therefore shared, by all cars)" CreationDate="2017-12-06T21:57:11.213" UserId="3697" />
  <row Id="9179" PostId="270" Score="0" Text="Of course, whether it is appropriate for &quot;whatever-is-being-made-static&quot; to be shared is another question is a topic of later when looking at proper design and design-patterns." CreationDate="2017-12-06T22:00:04.823" UserId="3697" />
  <row Id="431" PostId="279" Score="0" Text="I love this idea. I have a kid right now who is trying to make an algebraic solver for a project. What a creative way to package such projects!" CreationDate="2017-05-29T23:43:10.757" UserId="27" />
  <row Id="432" PostId="279" Score="0" Text="Also, welcome to the community. I hope we hear more from you in the future!" CreationDate="2017-05-29T23:47:34.330" UserId="27" />
  <row Id="435" PostId="279" Score="0" Text="It might be useful to add some more detail about this project and how it relates to object, but otherwise great answer! Welcome to CSEducators.SE!" CreationDate="2017-05-30T02:24:54.457" UserId="58" />
  <row Id="452" PostId="282" Score="1" Text="Not sure I understand what you mean by &quot;concretely fits within the algorithm&quot;..." CreationDate="2017-05-30T14:43:35.300" UserId="150" />
  <row Id="454" PostId="282" Score="0" Text="Good point, that was rather unclear.  I edited the prompt - better now?" CreationDate="2017-05-30T14:57:23.413" UserId="27" />
  <row Id="456" PostId="282" Score="0" Text="So if I understand correctly, you want to show them how the heuristics play their part?" CreationDate="2017-05-30T15:10:53.047" UserId="150" />
  <row Id="457" PostId="282" Score="0" Text="I want them to see where the heuristic fits into the larger decision making process, and how the choice of heuristic impacts the overall performance." CreationDate="2017-05-30T15:12:11.390" UserId="27" />
  <row Id="5803" PostId="282" Score="0" Text="I'm curious how you decided to do it in the end." CreationDate="2017-07-23T17:20:43.497" UserId="150" />
  <row Id="5804" PostId="282" Score="0" Text="It's summer, so I haven't reworked the lab yet.  This lab is usually given some time around January, so there's plenty of time :)" CreationDate="2017-07-23T17:26:33.040" UserId="27" />
  <row Id="5805" PostId="282" Score="0" Text="Oh, well that makes sense. Still, I'd like to see it (if you'll let me :P) after you've reworked it." CreationDate="2017-07-23T17:27:50.040" UserId="150" />
  <row Id="1032" PostId="283" Score="0" Text="Wow, someone else assigned a journal. You read their journals? I was just going on what Gerald M. Weinberg said about &quot;a tool for self development&quot;." CreationDate="2017-06-15T13:35:34.683" UserDisplayName="user737" />
  <row Id="433" PostId="286" Score="0" Text="Why not do all of this in google drive and make it free?" CreationDate="2017-05-30T01:51:07.557" UserId="58" />
  <row Id="434" PostId="286" Score="0" Text="I haven't explored Google Drive well, but I'm not averse to making changes. Does it allow for direct mirroring of directories on my personal HD, and proper read/write privileges?  Right now, all of my student submission folders are highly organized, together in a folder that I can access and grade from while on an airplane without internet, which is a freedom I enjoy." CreationDate="2017-05-30T01:54:34.430" UserId="27" />
  <row Id="436" PostId="288" Score="1" Text="Welcome to cseducators. We're glad to have you here! This may be good advice generally, but it isn't really an answer to OP's question, which was asking about advice specific to explaining HTML." CreationDate="2017-05-30T04:18:55.300" UserId="27" />
  <row Id="1589" PostId="288" Score="0" Text="@austin good to see some teaching theory, in an answer." CreationDate="2017-06-22T17:28:13.763" UserId="204" />
  <row Id="4682" PostId="288" Score="0" Text="I use this system when teaching html to young pupils" CreationDate="2017-07-21T12:48:14.547" UserId="1705" />
  <row Id="14418" PostId="289" Score="1" Text="Wonderful! I'd just like to point out that the developer tools are **not specific to Chrome**. Firefox and Safari both have quite capable dev tools as well (I don't have experience with any other browsers). Let's not forget that Chrome isn't the only browser!" CreationDate="2019-02-25T05:12:33.330" UserId="3700" />
  <row Id="439" PostId="290" Score="0" Text="The Big-O idea is a great one for testing that the design is reasonable automatically. Seems like a good 'sanity check' to make sure the code is scalable, which is always a good thing. Thanks for the idea!" CreationDate="2017-05-30T09:19:19.520" UserId="2" />
  <row Id="442" PostId="290" Score="1" Text="I think codility does big-o dynamicaly (by running the code). I think that static analysis of big-o is hard to do, and get right 100%. But static complexity analysis is also good." CreationDate="2017-05-30T10:57:10.210" UserId="204" />
  <row Id="440" PostId="291" Score="0" Text="You might want to elaborate on &quot;They don't yet have the exposure to _know_ they want to become programmers&quot; and maybe add some more specifics about the course" CreationDate="2017-05-30T10:29:49.550" UserId="58" />
  <row Id="441" PostId="291" Score="5" Text="The OP states the previous course covered from &quot;turning on the computer&quot; up to email and &quot;basic use for Microsoft Office suite.&quot; At that level they haven't learned enough to know what programming is, so how can they know they want to do it?" CreationDate="2017-05-30T10:38:06.087" UserId="104" />
  <row Id="1157" PostId="293" Score="0" Text="Agree. After teaching Normalization a few times, I have reduced it to a few concise and easy-to-recall sentences. They can take that as a cheat-sheet. Applying it is the real test, but at least they have it in hand." CreationDate="2017-06-16T20:48:57.617" UserDisplayName="user737" />
  <row Id="443" PostId="294" Score="0" Text="I love this idea.  I'm going to tinker around with it a bit and see what I can come up with." CreationDate="2017-05-30T11:14:48.293" UserId="27" />
  <row Id="444" PostId="295" Score="1" Text="This is the first answer I've seen that took on a first *algorithms* class, which is very different from a first *programming* class." CreationDate="2017-05-30T12:09:04.817" UserId="27" />
  <row Id="445" PostId="295" Score="2" Text="All I did was read the title." CreationDate="2017-05-30T12:10:43.787" UserId="104" />
  <row Id="469" PostId="295" Score="0" Text="@Choirbean Sorry if the title is not obvious, but it does say algorithms. I don't think you can teach algorithms without programming, nor programming without algorithms unless you are really only teach a programming language, which is not so useful." CreationDate="2017-05-31T09:52:28.577" UserId="28" />
  <row Id="470" PostId="295" Score="0" Text="@GypsySpellweaver I really liked your answer. The most important thing a CS teacher should ask themselves is &quot;What am I grading here?&quot;, &quot;Do i want students to show me they understand the material or that they can succesfully build a program without the build failing?&quot;" CreationDate="2017-05-31T10:12:31.343" UserId="28" />
  <row Id="472" PostId="295" Score="1" Text="@ecc You can teach programming without using the &quot;word&quot; _algorithm_, or the concepts behind it, but programs _are_ algorithms. Doing so, however, short changes the students in both their programming skills and their life skills. Conversely, teaching algorithms does _not_ require programs, or computers. A cake recipe is an algorithm, as is any set of instructions to do anything. Check out [Wikipedia](http://en.wikipedia.org/wiki/Algorithm)." CreationDate="2017-05-31T12:29:35.850" UserId="104" />
  <row Id="473" PostId="295" Score="0" Text="You are right. But given the context of this discussion, saying a recipe is an algorithm is just being pedantic and you know that's not what's being talked about." CreationDate="2017-05-31T12:35:00.660" UserId="28" />
  <row Id="474" PostId="295" Score="1" Text="That's in response to part of what you comment to Choirbean above, about not teaching algorithms without programming. And sometimes &quot;recipe&quot; is used in computers anyway, such as the *nix make/build process is commonly called a recipe." CreationDate="2017-05-31T12:38:25.137" UserId="104" />
  <row Id="1099" PostId="295" Score="1" Text="On the use of 'algorithm': computers were constructed to rapidly, reliably and automatically perform existing algorithms that were done by hand. Not realizing that amounts to not knowing what a computer is. It is a tool, to do things that we know how to do, but which are too time-consuming or taxing to be done by hand, just like a bulldozer does what we could do with shovels, and a car takes us places we could walk. I fear that the whole concept of automation has already become such a 'given' that people will start saying foolish things. 'Computer' used to be a job title." CreationDate="2017-06-16T13:29:26.310" UserDisplayName="user737" />
  <row Id="459" PostId="296" Score="1" Text="Upvoted. This was a very helpful answer to me." CreationDate="2017-05-30T16:45:39.783" UserId="27" />
  <row Id="2431" PostId="302" Score="0" Text="If possible, please reference the handful of articles you refer to or a review of lit. If a user finds this question in a search, the links are very useful to them." CreationDate="2017-07-03T02:01:37.763" UserId="765" />
  <row Id="4518" PostId="302" Score="0" Text="Marvelous. Of course any drag-and-drop editor can be adapted to this. Scratch, for example. But you can also seek higher level &quot;chunks&quot; than single statements." CreationDate="2017-07-19T12:41:37.690" UserId="1293" />
  <row Id="16975" PostId="304" Score="0" Text="+1 for MOSS, but you have to use discretion because it often overreaches. See my answer below." CreationDate="2020-09-07T00:53:28.180" UserId="6112" />
  <row Id="1218" PostId="305" Score="2" Text="@Peter The code example is wrong, because the unit for pointer arithmetic is the size of the pointed-to type. whatsthis + 4 points 4 ints ahead of whatsthis (Or, rather, it would if whatsthis were pointing into an array large enough to do that. The code as written invokes undefined behavior.)" CreationDate="2017-06-18T06:31:56.133" UserId="935" />
  <row Id="1245" PostId="305" Score="0" Text="@EricMSchmidt I believe Ben I. was aware of this when posting the example. Even the undefined behavior can be teachable for students to learn pointers (and the precautions that one must take with them). At least I think this was intentional..." CreationDate="2017-06-18T14:38:49.537" UserId="76" />
  <row Id="1247" PostId="305" Score="1" Text="Yes, the undefined behavior was the purpose of the exercise.  By arranging the demonstration so that the wrong variable gets modified, it should both pique their interest and give a great entrée to the idea of separating a memory address from the data it stores." CreationDate="2017-06-18T15:00:41.040" UserId="27" />
  <row Id="6076" PostId="305" Score="0" Text="I don't get why you're adding 4 to go from *a* to *c* when they should be *two* addresses apart, and yet you say it's *four* bytes per int.  Where is *b*, then?  (Nevertheless, +1 for a great illustration.)" CreationDate="2017-07-25T20:12:35.490" UserId="1103" />
  <row Id="6078" PostId="305" Score="0" Text="@Wildcard I tried to clarify the text.  IIRC, on my compiler (I tested my code when I wrote this), ints were 2 byes." CreationDate="2017-07-25T20:44:48.807" UserId="27" />
  <row Id="6081" PostId="305" Score="0" Text="Got it, thanks.  It wasn't the answer text that caused the confusion; it was your earlier comment: *&quot;Mine used a 4-byte integer, which is also permitted.&quot;*  I understand now that was just a slip.  Thanks for clarifying!  :)" CreationDate="2017-07-25T20:57:04.773" UserId="1103" />
  <row Id="9340" PostId="305" Score="0" Text="Uh, how can we know what the distance is between the two variables, at all? Couldn't they be anywhere in the address space, in any order?" CreationDate="2017-12-22T18:39:09.973" UserId="3700" />
  <row Id="9350" PostId="305" Score="0" Text="@seaturtle gcc can disable stack protections: https://stackoverflow.com/q/2340259/4151129" CreationDate="2017-12-22T20:08:00.970" UserId="27" />
  <row Id="9365" PostId="305" Score="0" Text="Huh. I didn't know that was on _purpose_, I always figured that was just how it was, like file fragmentation on disk. Thanks. (:" CreationDate="2017-12-23T00:45:00.387" UserId="3700" />
  <row Id="17817" PostId="305" Score="0" Text="I must say that I'm still very confused by this example. It's never explicitly stated here: What do you *expect* this code to print? I'll point out that on my current GCC compiler, if I add one or more printf statements *after* these lines, then the positions of a, b, c in memory get re-ordered -- and so I can get this same code to print out any of 30, 45, or 0 (i.e., anything). If your point is truly that this is undefined and might do anything, then what do you actually mean by &quot;be able to figure this out&quot; for the students in this context?" CreationDate="2021-03-24T14:58:59.697" UserId="8137" />
  <row Id="17819" PostId="305" Score="1" Text="@DanielR.Collins With modern, stack-randomizing compilers, you are correct, and I will add a caveat to that effect.  Because of my schedule, I typically teach this as part of a computer security class on stack-based attacks, and we purposefully use dated virtual machines without stack randomization for exactly the reason you cite.  I wasn't thinking about that when I wrote the answer, though.  Oops!" CreationDate="2021-03-24T17:14:38.683" UserId="27" />
  <row Id="17830" PostId="305" Score="0" Text="@BenI.: Is that really a stack-randomizing issue, though? With my current stock copy of GCC, the ordering is fixed/deterministic with any particular piece of code. However, there are some complicated rules which are opaque to predict. For example, if I make 4 int variables and print any or all values, then GCC puts them in declaration order. But if I print out the address of one of them, then GCC puts that one in the top slot on the stack. Etc." CreationDate="2021-03-28T15:20:02.220" UserId="8137" />
  <row Id="17831" PostId="305" Score="0" Text="Perhaps you should put more detail/a link with the &quot;you must turn off stack randomization in gcc&quot; piece, because my other searches for that aren't getting hits." CreationDate="2021-03-28T15:21:01.220" UserId="8137" />
  <row Id="17833" PostId="305" Score="0" Text="@DanielR.Collins I edited the post again!  I'm not aware of all of the protections used for stacks, tbh.  Like I said, I do this on old virtual machines that have no stack protections built into GCC at all for exactly these pedagogic demonstration purposes, so there may be fine distinctions that I am missing here in more modern setups." CreationDate="2021-03-28T16:44:45.673" UserId="27" />
  <row Id="17834" PostId="305" Score="0" Text="@BenI.: Probably good that you removed the word &quot;randomization&quot; there. Unfortunately I'm still skeptical that the current detail is correct. (a) &quot;-fno-stack-protector-all&quot; isn't a valid GCC flag (see comments to what you linked for that). (b) I don't think there's any sign that these buffer protections involve re-ordering the stack (I just tested and see no difference)..." CreationDate="2021-03-28T20:00:30.743" UserId="8137" />
  <row Id="17835" PostId="305" Score="0" Text="Note that any time a question gets asked about GCC stack ordering in particular, the answers usually are some form of &quot;there is absolutely no way to tell or control it without looking into the GCC code about how it makes its choices&quot;. E.g.: https://stackoverflow.com/questions/66793187/why-does-gcc-order-integers-on-the-stack-in-this-way" CreationDate="2021-03-28T20:06:53.377" UserId="8137" />
  <row Id="465" PostId="307" Score="1" Text="[I have not tried this.] When showing how variables work, using the box metaphor, burn the box(and its content) at the end of its block. (you may want to do this out-side.)" CreationDate="2017-05-31T07:40:17.723" UserId="204" />
  <row Id="466" PostId="307" Score="2" Text="Suggested better title “How to illustrate scope problem when creating variables inside `if` statements.” — with current title my first thought was “Yes you can”." CreationDate="2017-05-31T07:42:56.060" UserId="204" />
  <row Id="468" PostId="307" Score="0" Text="Its certainly a scope problem, and there's no problem with initialising (except for only initialising in one path)." CreationDate="2017-05-31T09:45:49.513" UserId="41" />
  <row Id="471" PostId="307" Score="0" Text="That's a much better title. Thanks, @richard." CreationDate="2017-05-31T10:29:16.787" UserId="27" />
  <row Id="15598" PostId="307" Score="0" Text="Scope of variables, and distinction between  declaration and initialization. Anyway students stumble every year, because they are  learning." CreationDate="2019-09-22T08:49:18.497" UserId="2103" />
  <row Id="2516" PostId="309" Score="1" Text="I would teach about the computer's memory as a big array first, then teach about how pointers and arrays interact with it. Because the memory is what *is*, and the notation is what works with it. Why does everyone want to go from Formal to Concrete, in complete defiance of Piaget?" CreationDate="2017-07-03T17:06:43.337" UserDisplayName="user737" />
  <row Id="2575" PostId="309" Score="0" Text="An interesting question is whether memory is an example of a concrete array, or an array is an example of a concrete memory system (of capacitors, electron wells, magnets, sound waves, beads, knots, etc.)" CreationDate="2017-07-04T15:27:00.793" UserId="59" />
  <row Id="2576" PostId="309" Score="2" Text="How computers are constructed might change over time, but the ideas of variables and memory and pointers are unlikely to change. The students need to learn an abstraction in order to program, I am simply arguing for teaching *the simplest and most straightforward and general abstraction possible*. I have been thinking about a question along these lines, because it comes up a lot when teaching, but I have not finished formulating the question yet." CreationDate="2017-07-04T15:41:14.820" UserDisplayName="user737" />
  <row Id="464" PostId="310" Score="1" Text="I don't get what you mean in the 2nd paragraph. Do you mean that the variable still exist but have a value of undefined?" CreationDate="2017-05-31T07:32:18.070" UserId="204" />
  <row Id="476" PostId="310" Score="1" Text="I like it. I don't understand it, since I have no context for Dory (never watched Finding Nemo). That's part of the problem, finding context that matches what the students know." CreationDate="2017-06-01T03:55:45.887" UserId="104" />
  <row Id="484" PostId="310" Score="0" Text="Here's a scene from the movie that you could show for reference:  https://www.youtube.com/watch?v=tESffhWs8l0" CreationDate="2017-06-01T18:24:03.600" UserId="265" />
  <row Id="4547" PostId="321" Score="0" Text="I don't think I've seen a multi-function Parsons problem before. That could be a really cool category though--- then students have to think about what functionality goes in which function." CreationDate="2017-07-19T16:35:03.763" UserId="2045" />
  <row Id="475" PostId="327" Score="17" Text="Just from my experience as a student, computer out == doing whatever you want." CreationDate="2017-06-01T02:16:22.280" UserId="58" />
  <row Id="480" PostId="327" Score="1" Text="Mostly,I want my students to have their computers when we are creating code. They should also keep a written notebook." CreationDate="2017-06-01T11:45:23.640" UserId="21" />
  <row Id="481" PostId="327" Score="0" Text="And we create a whole lot of code in my classes." CreationDate="2017-06-01T11:45:45.460" UserId="21" />
  <row Id="520" PostId="327" Score="1" Text="Using the computer, personal or school-supplied, during labs and generating code is, of course, fine. During the lecture, to take notes, can often be a different issue. A nice synergy can be found by creating &quot;lectures&quot; that are &quot;follow-along&quot; style where what's being said/done by the instructor is replicated or utilized by the students on their terminals. You access the visual learners, the auditory learners, _and_ the kinesthetic learners (VAK or VAKT learning styles). It also has everyone using the keyboards, so no one is distracted by the typing of others." CreationDate="2017-06-03T03:13:02.510" UserId="104" />
  <row Id="521" PostId="327" Score="1" Text="I call these *code-alongs*, and I agree that they're extremely valuable!" CreationDate="2017-06-03T03:15:19.263" UserId="27" />
  <row Id="1858" PostId="327" Score="0" Text="Every student is different and has a different learning method, trying to enforce what you think is the best learning method 'on average' can harm those that learn in a different manner then the average and thus best avoided.  For instance I retain less information when I take notes of any kind.  I find it's best to commit 100% of my focus to learning the material the first time through, and if I have questions later I look up the information online, which is faster and more accurate result then using my notes often would be for comp sci.  Would you penalize me for choosing to not take notes?" CreationDate="2017-06-26T17:53:44.333" UserId="1008" />
  <row Id="8891" PostId="327" Score="1" Text="from my experience - laptop out for practical lessons - as @GypsySpellweaver says, some people learn best by doing.  If students save code samples - that's the majority of their notes right there.  for theory however - pencil and paper.  It's far faster to get information down, especially when it involves diagrams etc." CreationDate="2017-11-01T17:14:35.937" UserId="993" />
  <row Id="9046" PostId="327" Score="1" Text="I can type while looking at the teacher, but I can't write while looking at the teacher. Unless you're specifically trying to put an end to people using their laptop for non-lesson things, I wouldn't be so quick to prohibit it. It shouldn't be your job to tell them how they should memorize the lesson (unless they come and ask you for help). Also, where would you place e.g. digital writing, like on a Surface pro?" CreationDate="2017-11-16T14:33:37.020" UserId="2164" />
  <row Id="477" PostId="328" Score="0" Text="+1. That is a very good explanation. Also, the spelling bee example is quite interesting." CreationDate="2017-06-01T05:38:14.907" UserId="150" />
  <row Id="478" PostId="328" Score="10" Text="At first I thought the girl had a problem with motor control until I recognized her finger motions matching letter placement on the keyboard. If I hadn't taught touch typing I probably would have missed it completely. Still, everyone has _their_ unique way of processing information. Studies or no studies." CreationDate="2017-06-01T05:41:24.060" UserId="104" />
  <row Id="482" PostId="328" Score="1" Text="I think modern kids keyboard from an early age, so motor memory of spelling is very common.  It's a &quot;spinal cord&quot; level phenomenon." CreationDate="2017-06-01T11:47:31.807" UserId="21" />
  <row Id="7643" PostId="330" Score="0" Text="you are correct that there is a plethora of r sources out there. I have suggested some ideas for the &quot;how&quot; below. Whether this works well for increasing student learning depends on the student imho. If you also set some work that relates to the resources, perhaps they are more useful. Is there anything you need expansion on before you could select an acceptable answer?" CreationDate="2017-08-30T21:38:41.080" UserId="2706" />
  <row Id="479" PostId="331" Score="0" Text="&quot;However, I would make point to advise them against searching for other sites, and rather ask in class if something in the site is unclear.&quot; Wouldn't it be a good thing to encourage the students to independently research? Yeah, there's a potential for confusion, but finding the answer you need from Google is a great skill to have." CreationDate="2017-06-01T11:24:02.553" UserId="2" />
  <row Id="483" PostId="331" Score="1" Text="@Aurora0001 good point. I'm not sure what I had in mind when writing that" CreationDate="2017-06-01T12:44:44.390" UserId="150" />
  <row Id="486" PostId="335" Score="1" Text="I get the same in my computer lab, using computers provided by the school. I find that consequences, and praising good behaviour work." CreationDate="2017-06-01T20:07:53.297" UserId="204" />
  <row Id="690" PostId="335" Score="0" Text="A technical solution may work as well. Most games that are enticing enough to play when they shouldn't be require Internet access. If the IT dept. can block those addresses from the APs that cover the classroom(s), or from the school's network as a whole, they will be forced to use mobile data to play. The co$t of that _might_ slow them down some." CreationDate="2017-06-07T11:47:06.107" UserId="104" />
  <row Id="2088" PostId="335" Score="0" Text="You don't.  It's their device. If they're old enough to bring their own laptop, they will do what they will will do. Your class simply (hah!) needs to be more engaging than the game.  You might actually encourage modding games, since that is a programming skill set.  Minecraft is particularly open to modders, but many other popular games are as well." CreationDate="2017-06-29T04:32:40.723" UserId="1537" />
  <row Id="636" PostId="338" Score="1" Text="Our [ITiCSE Working Group](http://dl.acm.org/citation.cfm?id=3024908) discovered [more than 100 games](https://docs.google.com/spreadsheets/d/1Goocx7_Mop5boQsT0JlWwLoUwei0JNOcDW3lahTaaoY/edit?usp=sharing) related to topics in the ACM/IEEE computer science curricula framework." CreationDate="2017-06-06T22:18:37.780" UserId="372" />
  <row Id="489" PostId="339" Score="0" Text="I put in an answer, but the question is rather open-ended - are there some more specific lesson goals?" CreationDate="2017-06-01T21:29:47.487" UserId="27" />
  <row Id="490" PostId="339" Score="0" Text="I wasn't thinking about specific lessons. More like when you've got something planned and technology has other ideas. Guess I was thinking more generic." CreationDate="2017-06-01T21:33:39.780" UserId="30" />
  <row Id="1650" PostId="339" Score="0" Text="Haha, in my experience, lack of an internet connection can greatly enhance the learning experience on-computer. Especially with high-schoolers." CreationDate="2017-06-23T16:04:06.073" UserId="1290" />
  <row Id="507" PostId="340" Score="2" Text="What's wrong with some students finishing in 15 minutes and others taking the full 2 hours?" CreationDate="2017-06-02T21:02:22.240" UserId="283" />
  <row Id="524" PostId="340" Score="0" Text="I find designing exams very difficult. Perhaps you could start with some samples from your colleagues and then modify them as you see fit. The exams I have that I'm happy about were created this way." CreationDate="2017-06-03T07:00:00.993" UserId="294" />
  <row Id="580" PostId="340" Score="0" Text="@DavidWhite I do that, and overall I'm pretty happy with my final. But also always looking for ideas outside of a standard test." CreationDate="2017-06-04T13:21:14.543" UserId="30" />
  <row Id="1181" PostId="341" Score="0" Text="My students are not to bring laptops, tablets, phones to class. There is a tool I could use to see their screens, but the idea makes my skin crawl. Your approach of &quot;no dark corners&quot; seems more natural to me. Even so, they are adults, and I neither feel I should nor wish to watch to see that they are using class time well. Maybe I am too introverted to feel comfortable intervening in someone else's self-management in such a way?" CreationDate="2017-06-17T15:37:13.800" UserDisplayName="user737" />
  <row Id="1585" PostId="341" Score="1" Text="I use the &quot;you can play games you write yourself as well.&quot; Sometimes the kids actually do write a game and play it. Then I tell them to make the game better. :-)" CreationDate="2017-06-22T16:02:16.540" UserId="541" />
  <row Id="1049" PostId="342" Score="3" Text="I had a middle school girl howl: &quot;*How can x be equal to x plus 1?*&quot; It took me a moment to figure out what she was saying. And, she is correct. (-- all computers around the world instantly stop functioning --)" CreationDate="2017-06-15T17:32:40.170" UserDisplayName="user737" />
  <row Id="3962" PostId="342" Score="0" Text="You are correct that part of the problem is in the notation resembling normal maths. There is nothing wrong with this maths (except that things are much much harder to prove in imperative programs, unless constrained to me functional), it is just different. 1+1 = 1 (Boolean algebra)." CreationDate="2017-07-10T17:49:21.890" UserId="204" />
  <row Id="10269" PostId="342" Score="0" Text="There's two big concepts here that are not fully &quot;common sense&quot;. The concept of a variable, and order of operations. These are &quot;operations or steps&quot; not &quot;truths&quot;, these are &quot;variables&quot; not &quot;unknown constants&quot;." CreationDate="2018-03-07T19:56:59.693" UserId="4082" />
  <row Id="631" PostId="343" Score="1" Text="Can also be good to have each team write out the code by hand, and trade with another team to trace through and test. Then have the two teams get together and discuss their solutions." CreationDate="2017-06-06T21:08:01.743" UserId="392" />
  <row Id="492" PostId="344" Score="0" Text="No doubt there's lots of good stuff there. I just used the binary dots as an example because that's the one that I have printed out and ready to go all year." CreationDate="2017-06-02T01:02:07.603" UserId="30" />
  <row Id="493" PostId="344" Score="0" Text="@Kapai Good answer :) You should post more around here." CreationDate="2017-06-02T02:33:58.460" UserId="27" />
  <row Id="735" PostId="344" Score="0" Text="I'm a big fan of the error detection activity, especially for junior high students. For high school students, I might extend the example to force the students to &quot;discover&quot; how the trick works, rather than telling them. IIRC, there are also extension activities in the activity itself." CreationDate="2017-06-09T03:22:21.553" UserId="595" />
  <row Id="1076" PostId="344" Score="0" Text="Don't know how I missed the error detection one. That's awesome. We do a Luhn algorithm project early in my second year course. That activity would be a really good lead in." CreationDate="2017-06-15T20:36:02.177" UserId="30" />
  <row Id="512" PostId="345" Score="1" Text="Functional programming doesn't imply recursion. The [Bootstrap curricula](http://www.bootstrapworld.org/) all use functional programming with only very limited recursion, and get students through a ton of material, all without the problems you rightly identify with imperative programming!" CreationDate="2017-06-03T00:23:34.330" UserId="290" />
  <row Id="515" PostId="345" Score="0" Text="I'm not sure what you mean by &quot;functional programming doesn't imply recursion&quot; - while there may be many things you can learn as a beginner in a functional paradigm before you get to recursion, at some point, you still have to be able to work your way through a list." CreationDate="2017-06-03T01:50:00.420" UserId="27" />
  <row Id="519" PostId="345" Score="1" Text="I was also being a bit flippant in my description of functional programming - my point wasn't specifically about recursion, but rather that it has its own cognitive traps, so it is not some easy panacea for the problems I described about imperative programming" CreationDate="2017-06-03T01:58:46.380" UserId="27" />
  <row Id="532" PostId="345" Score="1" Text="What I mean is that there's an awful lot you can get through without recursion, and you can also do a lot of recursive work through higher-order procedures that &quot;hide&quot; the recursion (as you seem to know). So it's a matter of how your curriculum is designed." CreationDate="2017-06-03T11:44:28.100" UserId="290" />
  <row Id="533" PostId="345" Score="1" Text="And yes, there are surely traps in FP too. What's a great pity is that the CS Ed literature has done so startlingly little to identify what they might be, caught up in hysteria about the &quot;paradigm&quot; itself to not investigate it in any real detail. But that doesn't mean it's not a &quot;panacea&quot; (unnecessarily grand term, but I'm just borrowing it from you) for _the problems described about imperative programming_; I think it is. It just moves some of the problems elsewhere." CreationDate="2017-06-03T11:45:15.760" UserId="290" />
  <row Id="539" PostId="345" Score="1" Text="This next September will only be my second year teaching Scheme, so this is an area in which my thinking is very much evolving. Since you are both more experienced in this area, and have clearly thought about it a great deal, I am very curious about what you would think about [this question](https://cseducators.stackexchange.com/questions/106/scheme-vs-haskell-for-introducing-functional-programming), which I have been wrestling with." CreationDate="2017-06-03T14:55:08.967" UserId="27" />
  <row Id="1050" PostId="345" Score="0" Text="My co-instructor had to impress on me how some students seem mystified by the concept of *assignment*. I started learning about programming in middle school (late 70's), so I definitely have no way of relating to this gap in understanding now. It sure would make programming... difficult. I guess there are two kinds of people, like the two kinds of airplane pilots: those who have learned how to absorb new abstractions, and those that haven't (yet). I have no idea how to teach people how to learn abstractions... bootstrap problem... Induction... *infinite page fault - system halted*" CreationDate="2017-06-15T17:45:14.970" UserDisplayName="user737" />
  <row Id="6948" PostId="345" Score="0" Text="Actually, computers have nothing to do with Turing machines, that are abstract machines to reason about computability. TM can be implemented https://www.youtube.com/watch?v=cYw2ewoO6c4 but nobody will ever use them as the basis for practical calculations. When Turing worked on computers at Manchester, they were based on the registers, alu, memory etc model. When programming such devices, most of the operations are moving data from one place to another (thus the concept of variables holding data) and adding, subtracting etc. And it fitted with what you wanted to do with computers at the time." CreationDate="2017-08-12T16:19:09.070" UserId="2103" />
  <row Id="504" PostId="346" Score="0" Text="What do parents think of this, assuming you're high school? I could see some flipping out about there being new content on the final, even if there's no way that grades could go down. I assume there are still a few students that don't improve their grades." CreationDate="2017-06-02T19:59:32.343" UserId="30" />
  <row Id="688" PostId="346" Score="0" Text="Grades always came up (since it was a mathematical certainty, as long as the exam was attempted).  I never spoke to any parents about it, but I also never received any complaints.  I think I explained it clearly enough to the kids that such complaints were possibly headed off at the pass.  (Or maybe I was just lucky?)" CreationDate="2017-06-07T10:30:54.100" UserId="27" />
  <row Id="698" PostId="346" Score="0" Text="I guess my concern would be a student ending the semester with an 88 or 89 and the parent (or student) getting upset because they weren't given an assessment of what they learned causing them to stay at a B. I certainly can see the validity of doing something like this, and I really like the idea, but I could see a lot of misunderstandings." CreationDate="2017-06-07T14:31:08.213" UserId="30" />
  <row Id="14636" PostId="349" Score="4" Text="FYI: The traditional meaning of &quot;hello world,&quot; has nothing to do with learning a new language (or a first language). It always was about learning a new _toolchain_. It was not a program that you wrote for yourself; It was a program that somebody gave to you. As in, &quot;Here, when you can get this known-good source code to compile and run, then you will be ready to compile and run something of your own.&quot;" CreationDate="2019-03-31T19:51:02.220" UserId="1269" />
  <row Id="14637" PostId="349" Score="3" Text="P.S., I am not an educator, I'm a software developer. Been working almost forty years, and still go through the &quot;Hello World&quot; experience--proving that I can install, configure, and use the build tools for a new project--on a pretty regular basis." CreationDate="2019-03-31T20:02:42.117" UserId="1269" />
  <row Id="18403" PostId="349" Score="0" Text="Same goes for hardware. But we do blinking LEDs instead of Hello World." CreationDate="2021-11-09T09:13:11.560" UserId="11138" />
  <row Id="18885" PostId="349" Score="0" Text="A program that says: &quot;*Buckle your seatbelt Dorothy, 'cause Kansas is going bye bye*&quot;" CreationDate="2022-01-07T22:13:21.077" UserId="5349" />
  <row Id="18894" PostId="349" Score="0" Text="If you're really going that far back, why are you advocating &quot;hello, world&quot; with no capitals? When you think the need for justification based on experience, expertise and facts &quot;helps it from being too broad&quot; what does that mean? When you're happy to revise, why not run two or three suggestions up the SE flagpole?" CreationDate="2022-01-08T23:41:05.607" UserId="9185" />
  <row Id="18893" PostId="351" Score="0" Text="Yeah, when a student asked how X can equal X plus one I was a bit started. I mean, we get a year older each year, right? How else would it happen?" CreationDate="2022-01-08T14:57:24.423" UserId="5349" />
  <row Id="496" PostId="353" Score="0" Text="These kinds of questions are fine on this site, but what this question is currently missing is a goal." CreationDate="2017-06-02T14:34:42.230" UserId="27" />
  <row Id="503" PostId="353" Score="0" Text="I've been considering creating a class in Excel for Programmers, so I am interested in what this thread produces" CreationDate="2017-06-02T18:06:32.683" UserId="27" />
  <row Id="17462" PostId="353" Score="0" Text="Spreadsheets implement a fine and upstanding functional language. Excel also implements Visual Basic (VBA). Spreadsheets are at there best when there are functions in the cells. To make things simpler there can be intermediate cells, in hidden columns. Visual Basic is a dreadful language, is poorly implemented, a security risk (documents using VBA can have viruses), and not visual. Almost everything I have seen done with VBA, both in the classroom and out, can be done without it: just functions in cells. This may be why you are struggling to find a use for it. It you are thinking that, you nee" CreationDate="2017-07-22T14:43:01.130" UserId="204" />
  <row Id="501" PostId="355" Score="1" Text="This is potentially #1, #2, #3, #4..." CreationDate="2017-06-02T15:48:41.023" UserId="41" />
  <row Id="505" PostId="358" Score="0" Text="Could you clarify whether you want to measure how well students have learned material in a class they took together or if you're trying to measure general programming ability/aptitude?" CreationDate="2017-06-02T20:51:41.187" UserId="283" />
  <row Id="506" PostId="358" Score="0" Text="@EllenSpertus Done." CreationDate="2017-06-02T20:56:03.787" UserId="282" />
  <row Id="508" PostId="358" Score="1" Text="Why would it be any different between a 17 year old and a 30 year old? If you can code, you can code." CreationDate="2017-06-02T21:09:38.787" UserId="30" />
  <row Id="509" PostId="358" Score="0" Text="So, you are looking for standards and tests?" CreationDate="2017-06-02T21:34:36.263" UserId="27" />
  <row Id="510" PostId="358" Score="0" Text="@RyanNutt Typically these tests go in the direction of showing your knowledge in a concrete programming language, administering a system and the like." CreationDate="2017-06-02T23:35:15.727" UserId="282" />
  <row Id="511" PostId="358" Score="0" Text="@BenI. Correct. One of the problems that we face in the implantation of CS in the school is how to evaluate in an objective way, so there must be standards that we all agree on." CreationDate="2017-06-02T23:36:28.917" UserId="282" />
  <row Id="11867" PostId="360" Score="0" Text="Real programmers don't use debuggers, or `pre: real-programmer. post: debugger not used.` We use contracts, it reduces bugs, and makes the remainder easy to find." CreationDate="2018-03-30T15:22:23.273" UserId="204" />
  <row Id="11871" PostId="360" Score="0" Text="Contacts are a huge help . I wish I could track down the study circa 1980 that tracked progress of university students learning traditionally versus with debuggers first. The speed at which students really understood the course material was much better with debuggers than without" CreationDate="2018-04-01T01:12:09.530" UserId="1537" />
  <row Id="11877" PostId="360" Score="0" Text="@pojo-guy I assume you accidentally left off the &quot;r&quot; in the first word of your response? Surely you're not suggesting it's who you know, not what you know. :-)" CreationDate="2018-04-01T20:16:50.003" UserId="283" />
  <row Id="11886" PostId="360" Score="0" Text="Lol yes, responding on a cell phone is always fun. At least automisspell didn't embarrass me this time." CreationDate="2018-04-02T00:32:28.653" UserId="1537" />
  <row Id="523" PostId="361" Score="1" Text="The second one is, in my opinion, a very, very good one." CreationDate="2017-06-03T05:44:47.093" UserId="150" />
  <row Id="516" PostId="363" Score="1" Text="I started on your paper - very interesting.  +1 for getting me thinking in a very different direction (though I still have to figure out if I can apply it to my environment)" CreationDate="2017-06-03T01:52:19.890" UserId="27" />
  <row Id="522" PostId="364" Score="0" Text="Not Sure I understand what `notional machine` means... could you explain" CreationDate="2017-06-03T05:29:01.023" UserId="150" />
  <row Id="531" PostId="364" Score="1" Text="Well, you could always Google for it (-:. See, for instance, this detailed [blog post](https://computinged.wordpress.com/2012/05/24/defining-what-does-it-mean-to-understand-computing/)." CreationDate="2017-06-03T11:42:41.007" UserId="290" />
  <row Id="2766" PostId="364" Score="1" Text="OMG - *notional machine* - this is what I have been looking for! Analogies, begone!" CreationDate="2017-07-07T14:57:43.420" UserDisplayName="user737" />
  <row Id="12498" PostId="364" Score="0" Text="This isn't right. A notational machine is, itself, an analogy for a similar, more realistic process. The famous, oft-(over)stated danger of analogies should really only be considered the danger of *poor* analogies. I would argue instead that connecting new ideas to older, already encoded ideas (a literal, physical manifestation of analogy) is the most basic mechanism of how we learn.  Great analogies are not at all an indication that something is &quot;too complex to be taught&quot;." CreationDate="2018-05-15T13:58:15.530" UserId="27" />
  <row Id="12501" PostId="364" Score="0" Text="A notional machine is not an _analogy_. It's a faithful representation at some human-comprehensible level of abstraction. It should at least be sound, if not complete. Analogies, by definition, are going to be unsound at some level." CreationDate="2018-05-15T18:15:24.940" UserId="290" />
  <row Id="1162" PostId="366" Score="1" Text="As a high school educator using the student languages in the classroom, I can vouch for this philosophy! The limited feature set of the Beginning Student Language allows for excellent error messages, and allows students to feel they have &quot;the whole language&quot; in their heads. The Intermediate and Advanced Student Languages are the perfect &quot;small steps&quot; up." CreationDate="2017-06-16T21:34:35.247" UserId="895" />
  <row Id="514" PostId="367" Score="2" Text="+1 for DrRacket which I love as an environment and would love to teach with some day." CreationDate="2017-06-03T01:19:29.380" UserId="76" />
  <row Id="534" PostId="367" Score="0" Text="If you're at the middle-/high-school levels, take a look at the [Bootstrap](http://www.bootstrapworld.org/) family of curricula. There's something in there for everyone, and cut from the same cloth." CreationDate="2017-06-03T11:52:59.120" UserId="290" />
  <row Id="2096" PostId="367" Score="1" Text="This does not seem like a program that would come right after &quot;Hello World&quot;, it seems more complex than that." CreationDate="2017-06-29T12:12:42.937" UserId="58" />
  <row Id="518" PostId="368" Score="1" Text="I do a fair amount of activity with my class away from the computers entirely, so I appreciate this perspective.  I definitely believe that we foster over-dependence on the machines." CreationDate="2017-06-03T01:56:09.030" UserId="27" />
  <row Id="1052" PostId="371" Score="0" Text="Definitely. If they don't have a mental model, they have nothing of any use. You have to be able to walk before you can build a robot that can walk. This is like the difference between Piaget's Concrete Operations and Formal Operations stages. This change cannot be taught, and not everyone gets beyond Concrete." CreationDate="2017-06-15T17:54:13.617" UserDisplayName="user737" />
  <row Id="14649" PostId="371" Score="1" Text="In my quest for discovering what really makes mutations so hard I'm leaning towards these exact ideas. It's the *hiding of the gears* that plays a major role. It probably came to be to &quot;simplify&quot; the material to have the student not deal with &quot;too low&quot; level registers and instructions, but I suspect that a low level intro would make things much clearer. Might be that or might be some nice interface that makes the execution visible. But it's important to picture the *execution*, not the code, which is what instead I see getting quite a lot of attention." CreationDate="2019-04-05T10:08:43.470" UserId="6546" />
  <row Id="602" PostId="372" Score="0" Text="I would suggest asking @ShriramKrishnamurthi, as he is very likely the person most knowledgeable about Racket on this SE." CreationDate="2017-06-05T20:42:37.470" UserId="130" />
  <row Id="537" PostId="373" Score="0" Text="I'm 100% going to use the syllabus quiz idea beginning this September. I'll still go over the material (HS, after all), but I've been toying with something like this in the back of my mind, and your comment just made it explicit for me. I want them to *remember* the class policies, not just *hear* them. Plus, my policies just get more and more idiosyncratic as time goes on." CreationDate="2017-06-03T13:47:57.010" UserId="27" />
  <row Id="13668" PostId="374" Score="1" Text="`I'm convinced students do not have the ability to resist using their computers to check facebook, email, MLB, etc` Do keep in mind that these activities are easier to prove/observe than e.g. daydreaming or simply not paying attention, and your comparison of the two options may be more skewed than you think it is." CreationDate="2018-10-17T11:20:39.003" UserId="2164" />
  <row Id="1957" PostId="375" Score="0" Text="I would use Debian (100% Free = 0% proprietary), it has all of the software that you mention; it is a good compromise between conservative and up to date. If you need more up to date, then you can install docker, and add an up to date dock. It will also give you what you need with shared files, including everyone can write but not delete other people stuff (using sticky bit)." CreationDate="2017-06-27T17:21:01.933" UserId="204" />
  <row Id="545" PostId="376" Score="0" Text="Maybe explain the benefit of writing a class once that is able to handle instances of different types of objects. Start with several types that implements a base object or interface. Write a list that needs to call the base properties or methods, e.g. validating before allowing it to be added, or otherwise throw an exception. Maybe the penny will drop. I'm assuming they have some grasp OOP principles." CreationDate="2017-06-03T16:56:22.180" UserId="146" />
  <row Id="546" PostId="376" Score="0" Text="@JTC The problem isn't with the generics of `T`, it's the `Node` field of the `Node` class which is difficult for the students." CreationDate="2017-06-03T17:00:52.613" UserId="150" />
  <row Id="548" PostId="376" Score="1" Text="I know, i admit I'm not directly answering your question :(. I was giving an example to build them up to understanding." CreationDate="2017-06-03T17:07:49.540" UserId="146" />
  <row Id="550" PostId="376" Score="1" Text="@JTC Oh. Well it's more than welcome" CreationDate="2017-06-03T17:17:04.787" UserId="150" />
  <row Id="528" PostId="377" Score="0" Text="Oh. The template\object explanation is quite good. So I should add a section about what happens when (compile vs runtime) with this example (after the students understand it)?" CreationDate="2017-06-03T09:30:28.390" UserId="150" />
  <row Id="529" PostId="377" Score="0" Text="@ItamarGreen Or, divert into that to help them grasp this. They will need that to grasp polymorphism." CreationDate="2017-06-03T09:32:06.303" UserId="104" />
  <row Id="540" PostId="378" Score="1" Text="Have you covered polymorphism with them at this point? (`ArrayList&lt;Animal&gt; a = new ArrayList&lt;Animal&gt;(); a.add(new Mammal());`)?" CreationDate="2017-06-03T15:44:07.900" UserId="27" />
  <row Id="541" PostId="378" Score="0" Text="@BenI. Yes. I forgot to write that. I'll edit to include it" CreationDate="2017-06-03T15:46:11.703" UserId="150" />
  <row Id="542" PostId="378" Score="1" Text="Consider changing title to be more in line with other titles." CreationDate="2017-06-03T16:38:22.807" UserId="283" />
  <row Id="589" PostId="378" Score="1" Text="My classes do a lot with GUI/Event-Driven programming because this is a very natural realm in which to use inheritance." CreationDate="2017-06-05T13:38:54.077" UserId="21" />
  <row Id="1591" PostId="378" Score="0" Text="If you don't mind, I'm going to link the [answer I just supplied on another question](https://cseducators.stackexchange.com/questions/146/what-is-a-good-analogy-for-the-object-oriented-paradigm/970#970)." CreationDate="2017-06-22T17:56:22.870" UserId="1244" />
  <row Id="544" PostId="379" Score="0" Text="This is an interesting Idea to show them the is-a and has-a relationships. For some reason, students sometimes get confused with those" CreationDate="2017-06-03T16:42:41.420" UserId="150" />
  <row Id="547" PostId="380" Score="0" Text="Related: [Is it possible to ensure division of labor on a group assignment?](https://cseducators.stackexchange.com/questions/3/is-it-possible-to-ensure-division-of-labor-on-a-group-assignment) (at least on the aspect of one student putting in more work than another)" CreationDate="2017-06-03T17:07:42.513" UserId="2" />
  <row Id="549" PostId="380" Score="0" Text="Thank you for the pointer, although my goal is not to ensure that students do equal work." CreationDate="2017-06-03T17:09:57.483" UserId="283" />
  <row Id="633" PostId="380" Score="0" Text="Could you please clarify the learning objective(s) and the assessment method that gave rise to this particular situation?" CreationDate="2017-06-06T21:18:57.230" UserId="372" />
  <row Id="634" PostId="380" Score="1" Text="I believe the learning objective should inform the approach to assessment.&#xA;&#xA;So, if the learning objectives are specifically related to teamwork, then the use of single-blind peer assessment via systems like [SparkPLUS](http://sparkplus.com.au/factors/) can be effective. Particularly where students rate each others' collegiality, work ethic, ability to collaborate on particular tasks, etc. Students use a rubric and justify their rating by making comments, which I use to write a brief meta-review as feedback for the team." CreationDate="2017-06-06T21:19:56.620" UserId="372" />
  <row Id="16004" PostId="380" Score="0" Text="This thread is a Godsend.  I hate group projects of any sort in academic endeavors, mainly because of the loss of personal accountability.  However, that doesn't change it when the topic absolutely requires students contribute as members of a team. Thanks to all for this help in grading my upcoming class's group project." CreationDate="2019-12-28T17:55:28.397" UserId="8756" />
  <row Id="554" PostId="382" Score="1" Text="We do use GitHub. While provided statistics give some indication of contributions, # of commits or lines of code doesn't take into account pair programming, boiler-plate code, automatically generated files (such as javadoc), debugging, documentation, design, time spent on code reviews, etc." CreationDate="2017-06-03T18:10:52.467" UserId="283" />
  <row Id="555" PostId="382" Score="0" Text="@EllenSpertus no but you can see the activity graph, that shows you some useful information" CreationDate="2017-06-03T18:12:19.570" UserId="150" />
  <row Id="556" PostId="382" Score="1" Text="How do you grade the student that contributed work equal to or greater than the others, yet needed few commits since their code was near-correct from the beginning? The activity graph, etc. won't show much work, yet they've easily earned their credits." CreationDate="2017-06-03T20:12:21.077" UserId="104" />
  <row Id="557" PostId="382" Score="0" Text="@GypsySpellweaver - Well, GitHub shows number of additions and deletions as well as commits. So overall, it can be used to see a student's contribution." CreationDate="2017-06-03T20:23:10.430" UserId="150" />
  <row Id="701" PostId="382" Score="0" Text="Please note! Github's statistics are VERY VERY inaccurate - they have officially stated over and over again that you should never use them for anything official. I can, for instance, point you to mainstream git clients that will silently zero the submission stats for a contributor to github, due to quirks of the protocol. Yes to monitoring, but DO NOT USE Github's fancy web-based graphs, they are literally not correct." CreationDate="2017-06-07T16:01:15.210" UserDisplayName="user31" />
  <row Id="702" PostId="382" Score="0" Text="@Adam interesting. I didn't know that." CreationDate="2017-06-07T16:03:52.993" UserId="150" />
  <row Id="16005" PostId="382" Score="0" Text="What I intend to show with GitHub is that certain programmers try to inflate their status with a high volume of commits." CreationDate="2019-12-28T17:57:54.620" UserId="8756" />
  <row Id="17744" PostId="382" Score="0" Text="What about two students pair programming, but the commit is in the name of the first student?" CreationDate="2021-02-25T08:29:49.510" UserId="8696" />
  <row Id="553" PostId="383" Score="0" Text="That will be a very enjoyable lesson for them ;P. Thanks!" CreationDate="2017-06-03T18:00:08.117" UserId="150" />
  <row Id="562" PostId="384" Score="0" Text="It's an interesting idea, although I want to encourage collaboration and people stepping in where needed. It's an Android programming class, and some things that seem like they'll be easy may turn out to be hard, and vice versa." CreationDate="2017-06-04T01:11:35.160" UserId="283" />
  <row Id="563" PostId="384" Score="1" Text="I see what you mean. If students want to revise it and all agree, they can do it and not even let me know. It would only ever even come up again if the group dynamic isn't working. By the time it's gotten bad enough that someone is talking to the teacher, preserving the spirit of collaboration seems like a cause already lost." CreationDate="2017-06-04T01:13:48.327" UserId="27" />
  <row Id="13663" PostId="384" Score="0" Text="Can you give us an update?" CreationDate="2018-10-16T01:26:05.533" UserId="283" />
  <row Id="13666" PostId="384" Score="0" Text="@EllenSpertus I'm sorry to say that my update is that I forgot about this entirely. In the interim, I had a kid, and have been rather distracted. I should still try it!" CreationDate="2018-10-16T03:20:38.857" UserId="27" />
  <row Id="566" PostId="390" Score="0" Text="I very much like the idea of asking them to be creative. Thanks!" CreationDate="2017-06-04T06:24:44.430" UserId="150" />
  <row Id="1538" PostId="390" Score="1" Text="I like to use the example of Square inheriting from Rectangle vs inheriting from Shape.  What happens to a Square (with a given Side length) if you set Width different from Height?  After working it out, it shows that inheritance should have one responsibility - to fit the base interface Shape.  It doesn't always make sense for types to derive from each other.  Think Liskov Substitution Principle." CreationDate="2017-06-22T00:39:29.163" UserId="1196" />
  <row Id="560" PostId="392" Score="0" Text="To be honest, I don't consider codingbat to be a great resource for APCS A FRQs.  The FRQs are not about standalone methods, they are about integrating various components together, and that is not really what CodingBat does." CreationDate="2017-06-04T01:07:39.247" UserId="27" />
  <row Id="561" PostId="392" Score="0" Text="Good to know. Would you say they have a general benefit? If so, I'll revise my question." CreationDate="2017-06-04T01:09:48.310" UserId="76" />
  <row Id="564" PostId="392" Score="0" Text="Oh, certainly - I usually assign a section at a time, because they are grouped together as a bunch of short problems that all deal with one skill." CreationDate="2017-06-04T01:26:55.317" UserId="27" />
  <row Id="565" PostId="393" Score="2" Text="I love this idea for groups of 4 or greater!  It seems like 3 would start to break down, and groups of 2 might no longer be accurate.  What adjustment could be used for paired projects?" CreationDate="2017-06-04T01:36:49.350" UserId="27" />
  <row Id="5901" PostId="393" Score="1" Text="I seen this work well, with students not being able to give themselves credits and the lowest and highest credit each student got being ignored." CreationDate="2017-07-24T13:10:37.683" UserId="2171" />
  <row Id="16003" PostId="393" Score="0" Text="Kudos for contacting the author!" CreationDate="2019-12-28T17:52:33.380" UserId="8756" />
  <row Id="2265" PostId="395" Score="1" Text="I really like your &quot;distance to tower&quot; concept to illustrate a (straight line distance) heuristic" CreationDate="2017-07-01T13:43:00.413" UserId="916" />
  <row Id="571" PostId="396" Score="0" Text="This sounds a bit too general to be easy to answer. What part of this problem is really difficult, or different from what you're familiar with?" CreationDate="2017-06-04T09:49:07.730" UserId="41" />
  <row Id="572" PostId="396" Score="0" Text="@SeanHoulihane edited to add that" CreationDate="2017-06-04T10:41:29.890" UserId="150" />
  <row Id="573" PostId="396" Score="0" Text="Thanks, Its a bit clearer now. Still seems a little like an X-Y problem https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem but I think it's easy enough to answer." CreationDate="2017-06-04T10:49:53.893" UserId="41" />
  <row Id="574" PostId="399" Score="0" Text="This isn't exactly what I meant in my question... but it does give me a better idea how teaching these things could be done, so thanks for that. Regarding the last paragraph: As mentors, we want to guide the students and teach them in a way that would be useful for them later. Students who learn these things on their own are more than welcome, but they are a minority." CreationDate="2017-06-04T10:58:19.337" UserId="150" />
  <row Id="577" PostId="399" Score="0" Text="Oh whoops. What else would you like for me to try to address?" CreationDate="2017-06-04T11:00:33.133" UserId="58" />
  <row Id="578" PostId="399" Score="0" Text="&quot;programming concepts be taught in relation to the context&quot;. Teaching the concepts through the robot programming. The idea is a way to teach programming concepts, with orientation to some context." CreationDate="2017-06-04T11:04:34.503" UserId="150" />
  <row Id="581" PostId="400" Score="0" Text="This question is specifically about coding style?" CreationDate="2017-06-04T14:46:58.963" UserId="27" />
  <row Id="585" PostId="400" Score="0" Text="No one **needs** to follow your best practices.  They just greatly reduce the risk of certain kind of failure." CreationDate="2017-06-04T16:41:28.160" UserId="59" />
  <row Id="586" PostId="400" Score="0" Text="Well, in many ways writing clean code is needed to work effectively in a group. In a professional environment, you want to have clean code because if nobody can read your code you're almost useless." CreationDate="2017-06-04T16:44:57.827" UserId="58" />
  <row Id="590" PostId="400" Score="0" Text="In many professional environments, there may be automated style checks, and there will certainly be review (which may demand a consistent use of mostly arbitrary style)." CreationDate="2017-06-05T15:49:00.393" UserId="41" />
  <row Id="592" PostId="400" Score="0" Text="It is school: it is all practice. So we start on smaller problems. But also you need to convince them of the value. For instance you would have a hard time convincing me of the value of **most** comments." CreationDate="2017-06-05T16:06:01.020" UserId="204" />
  <row Id="1610" PostId="400" Score="0" Text="One thing I learned when stepping into the work field is that there is no best practices, there are only agreements between the team. I don't think your personal opinion should impact a student's grade." CreationDate="2017-06-22T21:32:11.903" UserId="1255" />
  <row Id="575" PostId="401" Score="0" Text="This answers the part of my question about indentation, but it doesn't really address testing or commenting which, in my experience, are harder to teach." CreationDate="2017-06-04T10:59:39.573" UserId="58" />
  <row Id="576" PostId="401" Score="0" Text="Good point, I'll add more about that." CreationDate="2017-06-04T10:59:59.390" UserId="150" />
  <row Id="579" PostId="401" Score="0" Text="@thesecretmaster did you see the edit?" CreationDate="2017-06-04T12:17:38.987" UserId="150" />
  <row Id="7140" PostId="401" Score="0" Text="this is pretty much what I do to. I have a bunch of repositories of the many many projects I have worked, and then I show them how 'clean' and hence appealing it looks (similar to how you have compared above). &#xA;&#xA;Some students seem to like it, while others ignore. I cannot do anything about those who ignored, but those who liked the 'clean' look, I find they end up adopting the best practices." CreationDate="2017-08-21T04:14:03.620" UserId="2605" />
  <row Id="1679" PostId="402" Score="1" Text="I like to show the same program - say a simple game like BlackJack or HangMan - done really really poorly and done &quot;right&quot;.  They both compile and run the same, one is pleasing to look at, easy to understand and modify/update, etc and the other is done all wrong with poor variable names, insane inconsistent spacing, lack of hard returns, lack of comments, badly named source files, etc." CreationDate="2017-06-24T00:51:35.433" UserId="662" />
  <row Id="587" PostId="406" Score="0" Text="If we were to use this analogy, how would we deal with variables declared prior to the `if`, which are accessible inside of it, or instance variables?" CreationDate="2017-06-05T02:18:35.137" UserId="27" />
  <row Id="588" PostId="406" Score="0" Text="Depends on which version. For Google Drive, the local computer (inside `if` has access to Google Drive (outside `if`) but Google Drive has no access to local computer. For the file system version emulate the `if` block's access with a symlink/shortcut. The file (variable) still belongs to the higher level, but the inner block has been granted access (probably by reference, either to the outer block's scope, or to the data itself)." CreationDate="2017-06-05T02:24:18.653" UserId="104" />
  <row Id="689" PostId="408" Score="4" Text="(Was an answer, but three separate people complained, so I'll make it a comment instead because I personally find pointers to authoritative sources extremely useful.) Track down a copy of David Gries' book &quot;The Science of Programming&quot;. He has many suggestions for developing loop invariants." CreationDate="2017-06-07T10:46:05.737" UserId="387" />
  <row Id="2799" PostId="408" Score="1" Text="Some languages have `assert` statements that will allow you to express the invariant in code." CreationDate="2017-07-07T18:08:42.640" UserId="1213" />
  <row Id="2815" PostId="408" Score="0" Text="Whats the plus 100 in the end? how to do that?" CreationDate="2017-07-07T19:51:40.110" UserId="1705" />
  <row Id="2818" PostId="408" Score="0" Text="@Harry That means that I wanted more answers (because I really need a good answer) and that I have put a bounty on it.  Anyone above 75 rep can put a bounty on any question after it has been around for 2 days.  At the end of the week, I will select one of the answers, and that person will receive the +100 reputation." CreationDate="2017-07-07T19:56:47.223" UserId="27" />
  <row Id="591" PostId="409" Score="4" Text="Similar to your link, but on a much larger scale, is the [`goto fail;`](https://nakedsecurity.sophos.com/2014/02/24/anatomy-of-a-goto-fail-apples-ssl-bug-explained-plus-an-unofficial-patch/) bug, which potentially left millions of users with an insecure SSL library that could be attacked. All because of some sloppy programming and some missing braces!" CreationDate="2017-06-05T15:54:38.243" UserId="2" />
  <row Id="594" PostId="410" Score="0" Text="would the language choice tag fit here?" CreationDate="2017-06-05T18:27:00.470" UserId="150" />
  <row Id="595" PostId="410" Score="1" Text="Good point, added." CreationDate="2017-06-05T19:19:50.440" UserId="27" />
  <row Id="596" PostId="410" Score="0" Text="Just curious, is this all for HS students? I'm quite impressed." CreationDate="2017-06-05T19:43:24.740" UserId="130" />
  <row Id="597" PostId="410" Score="0" Text="What would be wrong with using this RISC version of LMC http://www.peterhigginson.co.uk/RISC/ - or at least a subset thereof? What's the processor course implementation target?" CreationDate="2017-06-05T20:06:28.160" UserId="41" />
  <row Id="598" PostId="410" Score="1" Text="@xuq01 Yes, all for HS. We have an unusually advanced program for the states, with 4-year CS majors in HS." CreationDate="2017-06-05T20:13:18.430" UserId="27" />
  <row Id="599" PostId="410" Score="0" Text="@SeanHoulihane The processor class should be building a turing complete processor that they can do *some* coding on. The assembly class will do (obviously) much more coding, and zero wiring." CreationDate="2017-06-05T20:17:11.043" UserId="27" />
  <row Id="600" PostId="410" Score="0" Text="@BenI. Looks to me that your graduates could totally go right into graduate CS classes when they get to college. I wish I could have attended such a HS program. That being said, it looks to me that MIPS is one way to go. Its calling conventions are very similar to that of x86-64, and its ISA is simple enough (just a handful of instructions)." CreationDate="2017-06-05T20:30:35.983" UserId="130" />
  <row Id="605" PostId="410" Score="0" Text="Have you explored Nand2Tetris? That book/course could make for a rich, year-long course on the HS level and could lead to important discussions about processor design and assembly language." CreationDate="2017-06-05T23:38:50.067" UserId="76" />
  <row Id="9789" PostId="410" Score="0" Text="Back in the day,  we learned 6502 assembly, as @gypsyspellweaver siggests, because it was what was available. We then hand assembled it (ugh) and put it into memory with &quot;poke&quot; statements. Of course we did this all from spec sheets, since computing books didn't have enough circulation for economy of scale,  and teachers didn't have the interest or time to dig past the BASIC." CreationDate="2018-01-23T04:50:06.167" UserId="1537" />
  <row Id="610" PostId="412" Score="1" Text="Not meaning to be contrary, but why use a RPi for this? Couldn't you just use a Linux USB boot from a normal PC? Or even a Windows Machine / Mac? Minecraft and Python is the only thing on your list that might be more difficult to do elsewhere for free, but the costs of RPis memory cards and adapters might outweigh some MC licenses. Unless you are doing some physical computing I don't see RPis being any better than any current hardware you might have." CreationDate="2017-06-06T14:38:30.237" UserId="48" />
  <row Id="611" PostId="412" Score="1" Text="Fair question. I have a few reasons. 1) I want students to walk away with a RPi to inspire further projects after the class ends. 2) I do want to do physical computing with the GPIO pins. 3) I have keyboards/mice/monitors at my disposal, so those won't be an added cost." CreationDate="2017-06-06T15:16:17.317" UserId="76" />
  <row Id="625" PostId="419" Score="0" Text="Nice link to version control." CreationDate="2017-06-06T19:05:25.830" UserId="41" />
  <row Id="612" PostId="420" Score="0" Text="+1 for #4. I like that idea a lot. Will definitely add that to the repertoire. Do you distribute that starter code via GitHub in advance?" CreationDate="2017-06-06T15:20:26.720" UserId="76" />
  <row Id="613" PostId="420" Score="0" Text="I haven't done that yet, but I possibly have not taught algorithms large enough to make it worthwhile.  So far, I have only pre-distributed code for labs." CreationDate="2017-06-06T16:02:18.777" UserId="27" />
  <row Id="614" PostId="421" Score="3" Text="Welcome to cseducators! Could you add a little bit more context about the new coursework you are considering? It would help to make the answers you receive more targeted (and useful for future users)" CreationDate="2017-06-06T16:04:46.383" UserId="27" />
  <row Id="885" PostId="421" Score="1" Text="On hold so I can't answer, but you've found the difference between teaching at a community college (or equivalent) and a university." CreationDate="2017-06-14T01:44:56.687" UserId="662" />
  <row Id="1033" PostId="421" Score="0" Text="I wrote this procedural note as my feedback to the user(s) who flagged (who shall remain anonymous), but in case it's helpful for anyone else: &quot;Debating scope is a major part of the early beta process, so I'm unwilling to mod-override this 'too broad' decision right now. If you feel strongly about it, I recommend starting a meta discussion.&quot;" CreationDate="2017-06-15T14:31:54.797" UserId="202" />
  <row Id="1378" PostId="421" Score="0" Text="@Gergely - I've edited your prompt (with Itamar's help). We tried to leave the core question unchanged, but bring it to an openable state. If we erred, and you disagree with our edits, roll it back?" CreationDate="2017-06-20T13:03:32.833" UserId="27" />
  <row Id="1379" PostId="421" Score="1" Text="(if you agree, let us know, so that we can vote to reopen)" CreationDate="2017-06-20T13:12:39.817" UserId="27" />
  <row Id="1380" PostId="421" Score="1" Text="Let the edit roll!" CreationDate="2017-06-20T13:13:57.587" UserId="274" />
  <row Id="1416" PostId="421" Score="0" Text="To me, the groups &quot;students&quot; and &quot;prospective developers&quot; overlap. I'd want some clarification about the differences between the two groups." CreationDate="2017-06-20T20:04:14.367" UserId="283" />
  <row Id="1536" PostId="421" Score="0" Text="To me, this is less broad and more unclear what you're asking. How do you define the two groups? What sort of demographic/age/etc are *your* students at? Etcetera. It's hard to compare/contrast with poor definitions." CreationDate="2017-06-22T00:08:40.083" UserId="919" />
  <row Id="615" PostId="422" Score="1" Text="Developer training is more likely to be focused on a specific role than any university course though?" CreationDate="2017-06-06T16:59:40.887" UserId="41" />
  <row Id="619" PostId="422" Score="1" Text="That's also true, the fact that you are learning for a job might be learning for a very specific job" CreationDate="2017-06-06T17:09:46.323" UserId="48" />
  <row Id="967" PostId="422" Score="0" Text="They are trying to force universities in to a job-training role, measured by success criteria? Exasperating. Why can't people just leave things alone? In the USA, part of the reason that so many 'jobs' now require 'degrees' is because of **a 1971 Supreme Court decision** which said that employers could not use any screening tests that &quot;could be biased&quot;. So, the employers thought, &quot;Fine, we will just require four years of college instead of a 3 hour test. Not our problem.&quot; I guess you have that kind of thing in the UK also?" CreationDate="2017-06-14T20:40:59.500" UserDisplayName="user737" />
  <row Id="1009" PostId="422" Score="1" Text="I'm not sure that the UK model is so nefarious, just a slow creep of business thinking into academia. I was in a meeting the other day with trainee teachers, where one was quoted as saying &quot;Event X didn't feel like value for money&quot;, they are now customers..." CreationDate="2017-06-15T08:30:39.483" UserId="48" />
  <row Id="1030" PostId="422" Score="0" Text="&quot;*Nothing succeeds like success.*&quot;" CreationDate="2017-06-15T13:23:15.450" UserDisplayName="user737" />
  <row Id="617" PostId="426" Score="0" Text="&quot;each bag is about 16'? What does this mean?" CreationDate="2017-06-06T17:04:36.260" UserId="27" />
  <row Id="618" PostId="426" Score="0" Text="Each bag is about 16 (matchboxes) - sorry typing with a mental 3YO bouncing around!" CreationDate="2017-06-06T17:05:41.567" UserId="348" />
  <row Id="620" PostId="426" Score="1" Text="Welcome to cseducators, by the way! I'm reading through the answers you are putting up, and I'm finding them very hard to understand. Sentence fragments, missing context, etc. I'm sure that the questions would appreciate it if you went back through and edited them a bit for clarity." CreationDate="2017-06-06T17:11:20.660" UserId="27" />
  <row Id="621" PostId="428" Score="0" Text="So you've taught them to think in a project oriented way? Cool." CreationDate="2017-06-06T17:20:24.050" UserId="150" />
  <row Id="622" PostId="428" Score="0" Text="I don't see the obvious 'win' connection which you're suggesting." CreationDate="2017-06-06T17:26:39.540" UserId="41" />
  <row Id="623" PostId="428" Score="1" Text="They are planning better, and so producing better, working solutions. This is a win.&#xA;&#xA;The win for me is they are making the decision to plan themselves rather than just jumping on a computer and starting coding." CreationDate="2017-06-06T18:03:14.503" UserId="348" />
  <row Id="626" PostId="430" Score="0" Text="What is the age range? If it is prior to university, are you at a public or a private school? Sometimes your responses to issues like these depend on the administrative context of the institution you work for." CreationDate="2017-06-06T20:12:06.800" UserId="27" />
  <row Id="627" PostId="430" Score="9" Text="Nothing about your question seems specific to CS. Could you rewrite it?" CreationDate="2017-06-06T20:24:24.307" UserId="283" />
  <row Id="628" PostId="430" Score="1" Text="Differentiate: Look at your lesson objectives, and give him more challenging work, that leads to the same plus additional objectives. There is always more that they can learn, even if they are at M.Sc level, there is more. May be a research project. — Can you edit the question to make it specific: What material? What course? What age?" CreationDate="2017-06-06T20:37:25.483" UserId="204" />
  <row Id="637" PostId="430" Score="1" Text="What language is your course in? That might make a huge difference for how to provide additional challenges." CreationDate="2017-06-06T22:37:47.523" UserId="76" />
  <row Id="643" PostId="430" Score="2" Text="If the situation and school policy allows it, maybe the advanced student can help others as a teacher's aid. The helps the other students, reduces some of your load, and helps the advanced student by making them think about the subject enough to explain it to someone else." CreationDate="2017-06-07T01:28:48.247" UserId="104" />
  <row Id="645" PostId="430" Score="0" Text="This question has raised another [question in meta](https://cseducators.meta.stackexchange.com/q/87/104) about site scope. Join the discussion if you like." CreationDate="2017-06-07T02:49:17.590" UserId="104" />
  <row Id="663" PostId="430" Score="0" Text="@GypsySpellweaver I feel my question still needs more details, but I am unsure which." CreationDate="2017-06-07T07:49:17.760" UserId="150" />
  <row Id="664" PostId="430" Score="0" Text="Specifics always help, and will make this a CSE question rather than general education. We need these students in industry, don't loose them! The specifics can be exactly your scheme of work, etc." CreationDate="2017-06-07T09:01:34.850" UserId="41" />
  <row Id="982" PostId="430" Score="2" Text="How is disdain and uncooperation usually handled where you teach?" CreationDate="2017-06-14T22:00:07.690" UserDisplayName="user737" />
  <row Id="10486" PostId="430" Score="0" Text="I am this student. Send Halp." CreationDate="2018-03-13T16:47:12.220" UserId="1912" />
  <row Id="10513" PostId="430" Score="0" Text="@rahuldottech: For you I have good advance. Take the challenge/test out option." CreationDate="2018-03-14T02:38:52.850" UserId="1888" />
  <row Id="657" PostId="431" Score="0" Text="That is the core of the problem. He refuses to cooperate, but I have seen his work. He does do things on occasion." CreationDate="2017-06-07T05:46:18.477" UserId="150" />
  <row Id="981" PostId="431" Score="5" Text="Cooperation is a vital skill for a programmer." CreationDate="2017-06-14T21:58:07.167" UserDisplayName="user737" />
  <row Id="2838" PostId="431" Score="0" Text="@ItamarG3 What work is required to pass the class then?" CreationDate="2017-07-08T03:52:51.047" UserId="1213" />
  <row Id="656" PostId="432" Score="0" Text="This is a very good solution. In fact it helps with another students who fits the description (warned about future problems like that). Thanks!" CreationDate="2017-06-07T05:45:44.620" UserId="150" />
  <row Id="2273" PostId="432" Score="0" Text="Sounds like a Pedagogical Pattern, actually. Great name for it too. Head It Off At The Pass. Love it." CreationDate="2017-07-01T16:04:22.020" UserId="1293" />
  <row Id="2278" PostId="432" Score="0" Text="See the book, [Pedagogical Patterns: Advice for Educators](https://www.amazon.com/Pedagogical-Patterns-Educators-Joseph-Bergin/dp/1479171824) for a moderately complete view, though there is an international, ongoing effort. [Joseph Bergin's website](http://csis.pace.edu/~bergin) has a lot of the material. I have a connection to this group. -- OOPS. I was responding to a question, now withdrawn." CreationDate="2017-07-01T16:28:07.377" UserId="1293" />
  <row Id="632" PostId="435" Score="0" Text="As in, call one student to the front of the room and have them type some text that everyone can see?" CreationDate="2017-06-06T21:09:15.963" UserId="27" />
  <row Id="635" PostId="435" Score="0" Text="To me, it's unclear what you are having the student do. Are you choosing 1 student at random and only they have to type what you are typing? Or is everyone typing, but one students work is displayed?" CreationDate="2017-06-06T21:37:37.230" UserId="58" />
  <row Id="732" PostId="437" Score="0" Text="I can understand some good motivations behind making groups single-sex, but it has the negative effective of calling attention to gender, by making it a primary criterion." CreationDate="2017-06-08T23:13:10.793" UserId="283" />
  <row Id="2166" PostId="437" Score="0" Text="Yes, Ellen Spertus, I agree with what you say and felt and feel uncomfortable because of that. Nevertheless, in the CS1 course I taught this past spring,  women were 25% more likely to complete the course successfully than men.  I've had similar outcomes in the small number of other classes in which I took this approach. The sample size is too small for this to be publishable, but my sense is that this does help." CreationDate="2017-06-29T21:54:06.367" UserId="394" />
  <row Id="12685" PostId="437" Score="0" Text="@EllenSpertus, there is research to the effect that the presence of a woman on a team improves the team performance. However, there is also research evidence that if a woman is the only woman on a team, she will be unhappy. Sorry, but I can't remember the source. I likely heard of it at either SIGCSE or one of the Agile conferences. The lesson that I generalize is that diversity is good, and isolation is bad." CreationDate="2018-05-28T12:41:49.833" UserId="1293" />
  <row Id="659" PostId="443" Score="0" Text="The main issue is that we have project guidelines. They can't be made to fit the student's choice, so I am partly trying to think of a guideline that would allow him to do something on his level, and yet he'd still have to meet requirements (I guess you could say: &quot;on his terms&quot;)." CreationDate="2017-06-07T05:49:29.493" UserId="150" />
  <row Id="2089" PostId="443" Score="0" Text="My daughter is in a technical program in high school where she is well beyond the level of the teacher or the coursework, so she TA's.  She takes on a management role for class projects and helps to review/coach/prescreen other students work. this frees the teacher to take care of non-technical and non-classroom things that are a part of running a technical class." CreationDate="2017-06-29T05:23:28.510" UserId="1537" />
  <row Id="644" PostId="445" Score="2" Text="Some _very_ excellent suggestions. I really like the last option. Good chance the student is ahead of the curve because of self-directed learning and/or a true passion for the subject. Helping the student reach their own potential is much better than requiring them to drag their feet at the standard curriculum's level. Also allows for grading their work against their potential, and the student can feel they've actually _earned_ the grade instead of _passed_ some required course." CreationDate="2017-06-07T02:43:33.223" UserId="104" />
  <row Id="658" PostId="445" Score="0" Text="The java specifics are quite useful. I will definitely use them," CreationDate="2017-06-07T05:47:03.047" UserId="150" />
  <row Id="840" PostId="445" Score="0" Text="I'm a big fan of giving strong student's extra responsibilities. Research points to deeper learning and understanding of material through teaching it to others, and that's certainly been my experience with students as well. If the student can check their attitude about the way that the course is being taught, they could become an excellent asset to helping bring up students who are falling behind. Why not make use of that?" CreationDate="2017-06-12T16:12:23.313" UserId="629" />
  <row Id="2087" PostId="445" Score="0" Text="As a Junior in high school, my daughter became a teacher's assistant in a technical program. She actually knew quite a lot more about the contents of the program than the teacher did, so he delegated a lot of the responsibility to her, including reviewing hte work of other students, which enabled him to take care of the details (school politics, etc) that students shouldn't be involved in. The biggest problem with that was some students resented the perceived amount of &quot;pull&quot; she had, even as her role was primarily coaching them towards better grades." CreationDate="2017-06-29T04:08:44.960" UserId="1537" />
  <row Id="2839" PostId="445" Score="0" Text="@nocomprende You may have to learn a mindset in the process in addition to just learning the curriculum.  That will not happen if you skip the class." CreationDate="2017-07-08T03:54:35.920" UserId="1213" />
  <row Id="660" PostId="447" Score="1" Text="Could you not create a self-learning maze navigator? Natural lead in to machine learning and AI." CreationDate="2017-06-07T05:50:17.550" UserId="104" />
  <row Id="640" PostId="448" Score="1" Text="I really like this question, but it seems like it might be a better fit on [ux.se]. While it _is_ about cs education, it's also very much about designing an interface for a specific audience." CreationDate="2017-06-07T00:54:12.030" UserId="58" />
  <row Id="641" PostId="448" Score="0" Text="Wouldn't I get better information about my specific audience here? General UX design principles are certainly important, but the colors have a lot to do with programming concerns like types." CreationDate="2017-06-07T01:18:12.693" UserId="435" />
  <row Id="642" PostId="448" Score="0" Text="I guess you're right. I still think that the people at [ux.se] might have some interesting ideas, especially if you're looking for studies, but you'll also get good answers here." CreationDate="2017-06-07T01:23:13.000" UserId="58" />
  <row Id="650" PostId="448" Score="3" Text="I'm voting to close this question as off-topic because it's more about UX than education." CreationDate="2017-06-07T05:09:53.723" UserId="76" />
  <row Id="662" PostId="448" Score="0" Text="I'm voting to close this question as off-topic because it doesn't specifically deal with teaching computer science, rather it asks about color psychology in the sense of teaching, which isn't exactly in the site's scope." CreationDate="2017-06-07T07:36:56.337" UserId="150" />
  <row Id="685" PostId="448" Score="4" Text="This is on-topic. Let's build a community here. It's related to understanding why indentation is important. I don't know of research on this, but I am curious to hear others'thoughts. I am an App Inventor user and the main color I notice is the Event Handlers are purple. Other than this I don't find the colors helpful in this language." CreationDate="2017-06-07T10:10:08.650" UserId="499" />
  <row Id="693" PostId="448" Score="1" Text="Block colors organize code in block languages. This seems on-topic to me." CreationDate="2017-06-07T12:39:40.077" UserId="27" />
  <row Id="712" PostId="448" Score="1" Text="IMO this is related to the use of color for syntax highlighting &amp; relates to how people understand the code in front of them. I'm guessing that using colors at this stage will make the first use of an IDE feel more natural." CreationDate="2017-06-07T17:53:03.713" UserId="65" />
  <row Id="714" PostId="448" Score="4" Text="I have created a meta-question about this question [here](https://cseducators.meta.stackexchange.com/questions/103/questions-about-ide-features)" CreationDate="2017-06-07T22:26:11.363" UserId="27" />
  <row Id="722" PostId="448" Score="2" Text="As a consequence of the meta discussion, this question was discussed (and can be discussed further) [in chat.](http://chat.stackexchange.com/rooms/60102) **Before voting to reopen, please refer to the discussion in chat**" CreationDate="2017-06-08T02:04:15.810" UserId="58" />
  <row Id="723" PostId="448" Score="1" Text="@kaerimasu You may find this discussion helpful in discerning color choice (from UX.SE): https://ux.stackexchange.com/questions/94278/should-software-for-8-to-14-year-olds-be-colourful-and-childish" CreationDate="2017-06-08T02:06:18.790" UserId="76" />
  <row Id="653" PostId="451" Score="3" Text="I cannot express how much I like this question. I see students struggling with this." CreationDate="2017-06-07T05:29:16.890" UserId="150" />
  <row Id="692" PostId="451" Score="1" Text="I don't quite have an answer, but I think that lies somewhere along the path of 'what would they be missing if you didn't need to teach recursion'." CreationDate="2017-06-07T11:52:29.507" UserId="41" />
  <row Id="4200" PostId="451" Score="0" Text="One moment, I will tackle the first part by asking someone, and get back to you with the answer." CreationDate="2017-07-13T18:36:38.100" UserId="204" />
  <row Id="4202" PostId="451" Score="0" Text="This looks like a case for “That is a rely good question. Can you tell me what makes recursion good, and what makes recursion bad?”" CreationDate="2017-07-13T18:39:19.460" UserId="204" />
  <row Id="651" PostId="452" Score="0" Text="I agree that &quot;it's horrible in any programming language&quot; is misleading, but they don't know about functional languages and, as a CS1 class, its hard to appreciate side-effect free design. I fear the nuances of when recursion is a good design choice is hard to describe in CS1. (Your observation about an 'exit' statement is essentially 'you need a base case' and is something we cover and not, itself, answer to &quot;when is recursion good practice?&quot;). I'll revise my question to be clearer." CreationDate="2017-06-07T05:24:31.787" UserId="475" />
  <row Id="652" PostId="452" Score="0" Text="@GermaneDork yes. As I said, you should explain the importance of good exit statements. Ones that must happen, to avoid a stackoverflow," CreationDate="2017-06-07T05:25:50.407" UserId="150" />
  <row Id="655" PostId="452" Score="0" Text="@GermaneDork oh. Well then I'll revise my answer, for future readers" CreationDate="2017-06-07T05:40:14.220" UserId="150" />
  <row Id="1282" PostId="452" Score="0" Text="You don't need a base case. `def receive(event): process(event); receive(eventstream.next); end` is a perfectly good way of writing an operating system, for example. Operating systems don't have a base case, they should *never* stop." CreationDate="2017-06-19T00:04:55.923" UserId="945" />
  <row Id="654" PostId="453" Score="2" Text="I like this teachable moment, and I like reformulating the tool in their minds: an exercise in thinking more so than programming." CreationDate="2017-06-07T05:35:03.457" UserId="475" />
  <row Id="2256" PostId="453" Score="1" Text="The answer is, like most things, &quot;it depends&quot;.  +1 for traversing a tree structure." CreationDate="2017-07-01T04:31:53.687" UserId="1537" />
  <row Id="7406" PostId="453" Score="2" Text="More specifically, the answer is &quot;it's a tool, and like others, it does not fits everywhere&quot;" CreationDate="2017-08-28T13:22:19.267" UserId="1375" />
  <row Id="13509" PostId="453" Score="0" Text="Even experienced programmers have trouble with recursion. Even though TreeWalker + Visitor is a textbook pattern, I have a heck of a time getting programmers to trust it. The recursion seems to confuse them." CreationDate="2018-09-22T11:44:48.060" UserId="1537" />
  <row Id="6717" PostId="454" Score="0" Text="I'd go a step further and show them a non-recursive implementation of a tree traversal, or perhaps a merge sort, along with a recursive version.  Or if you *really* want to make the point, have them *write* both versions." CreationDate="2017-08-07T21:17:32.607" UserId="827" />
  <row Id="661" PostId="455" Score="0" Text="Welcome to Computer Science Educators. Generally it is better to include the basic information in the answer than to link to something externally. The link may not last, and then the answer will not help anyone. Would you please edit your answer to show how you have solved the problem of teaching induction in an intuitive and masterable fashion." CreationDate="2017-06-07T06:17:45.523" UserId="104" />
  <row Id="725" PostId="455" Score="0" Text="The document in question is 50 pages of mathematics. Do you really want me to include it inline?!" CreationDate="2017-06-08T07:02:45.413" UserId="481" />
  <row Id="699" PostId="460" Score="0" Text="I do something like this with my advanced classes. About two weeks out I give them a set of contest problems. They pick any 10 of what I give them and get 10 points a piece for the ones they solve. Works pretty well because they can skip the ones that they think are too difficult and they know exactly what score they get. Downside is they know exactly what score they get, so several students will only do 3 or 4 problems because that's enough to keep an A average." CreationDate="2017-06-07T14:33:45.180" UserId="30" />
  <row Id="677" PostId="462" Score="0" Text="Could you please clarify or add details to the questions asked?&#xA;&#xA;e.g.: *&quot;My question(s): how do I get students excited about recursion? How do I better motivate studying recursion? Can I better / more naturally express those conditions under which (or those languages for which) recursion is not a poor design choice?&quot;*" CreationDate="2017-06-07T09:32:21.907" UserId="150" />
  <row Id="695" PostId="465" Score="1" Text="This answer is great, but could be expanded upon to really cover and address the points in the question." CreationDate="2017-06-07T12:43:22.377" UserId="150" />
  <row Id="696" PostId="465" Score="2" Text="I think this is suggesting that the colours are less useful than the groupings which are coloured - being an answer which supports this being CS related." CreationDate="2017-06-07T13:41:02.663" UserId="41" />
  <row Id="709" PostId="465" Score="0" Text="They do help students find the blocks they're looking for. When I taught Scratch I'd get a lot of questions about where to find a specific block. Saying the &quot;purple group&quot; was usually the easiest way to explain it." CreationDate="2017-06-07T17:24:26.217" UserId="30" />
  <row Id="697" PostId="466" Score="0" Text="I disagree with the first part. Understanding that it makes code understandable to other humans is, in my opinion, essential." CreationDate="2017-06-07T14:30:07.503" UserId="150" />
  <row Id="719" PostId="466" Score="0" Text="I agree it's essential, but not that they have to get it right away. Most of my CS1 students only care about what they have to do to get an A (or B, or C...) so the best I can do is frame it in terms of *me* (the one grading their work) being able to read it. Their experience of software development just isn't mature enough to understand the collaborative aspect." CreationDate="2017-06-08T00:07:43.573" UserId="536" />
  <row Id="18993" PostId="467" Score="0" Text="Playing the (recursion-hating) devil's advocate here, I'd argue that this argument of &quot;Any one of them ... will at some point need to ... so they must be able to ...&quot; leads to somewhat of a vicious cycle - adding esoteric concepts to the syllabus encourages practitioners to utilizing such (and additional) esoteric concepts in production code, even at detriment to readability and maintainability, which in turn would require making CS degrees even harder. It's complex enough as is, and I'd be concerned about CS degrees striving to make grads prepared for any eventuality. But recursion is cool :)" CreationDate="2022-01-12T21:47:03.633" UserId="2119" />
  <row Id="705" PostId="469" Score="3" Text="Welcome to CSEducators.SE! Thanks for your first question. It seems like you are asking two questions here: one on guidelines and one on practice sites. Is that correct? If so, I'd suggest splitting this into two separate questions. Also, can you specify the relevant language(s)? Good coding practices and grading guidelines will most likely vary depending on the language." CreationDate="2017-06-07T16:19:44.997" UserId="76" />
  <row Id="727" PostId="469" Score="0" Text="This question would be improved if the title was more distinct from the other ta:best-practice question (which I don't feel is really related, so I won't link here). I think you're asking more about implementing style checking flows rather than 'selling' the concept of best practice." CreationDate="2017-06-08T09:26:22.913" UserId="41" />
  <row Id="710" PostId="470" Score="0" Text="Recursion is only slow if your language/compiler does not have tail call optimisation. see my answer for more info." CreationDate="2017-06-07T17:42:13.783" UserId="204" />
  <row Id="713" PostId="470" Score="0" Text="@richard Sure. I was assuming the question was valid, that the situation was one where recursion was demonstrably or predictably likely to be slower, and where there's a need to illustrate the reasoning process for the programmer, showing why we still need both approaches." CreationDate="2017-06-07T18:11:21.740" UserDisplayName="user31" />
  <row Id="4178" PostId="470" Score="1" Text="I disagree with the premise that finishing sooner or having poor performance equates with being lazy. There are other factors to consider in writing production software or eave &quot;useful&quot; software, for that matter." CreationDate="2017-07-12T23:50:11.730" UserId="1945" />
  <row Id="4225" PostId="470" Score="0" Text="I didn't equate them. Although I do encourage laziness when writing software - it generally achieves a better outcome for all concerned (except the computer, but I'm happy to wear out a few billion transistors a fraction of a century sooner)" CreationDate="2017-07-14T02:45:38.033" UserDisplayName="user31" />
  <row Id="706" PostId="471" Score="0" Text="*This doesn't exactly answer the question.* The question was about getting students to be excited about recursion, as well as other things that are specifically written in the question." CreationDate="2017-06-07T16:21:41.960" UserId="150" />
  <row Id="708" PostId="473" Score="5" Text="Welcome to the site. Can you expand (by editing the question) on CS1, CS2: What level are you teaching at? We have people here teaching from nursery to University and the work place. From all over the world. So we do not always know what something like CS1 is. Thanks." CreationDate="2017-06-07T17:22:30.517" UserId="204" />
  <row Id="715" PostId="473" Score="0" Text="Although scrum-orientated, there are some useful resources produced by [Mountain Goat Software](https://www.mountaingoatsoftware.com/agile). I use these resources in the first software development practice class my undergraduate students encounter, which runs in parallel with CS1." CreationDate="2017-06-07T22:26:34.497" UserId="372" />
  <row Id="1462" PostId="473" Score="0" Text="Can you clarify the structure of your project? Are the 5 &quot;assignments&quot; 5 iterations of the project? It is group work right?" CreationDate="2017-06-21T12:57:53.983" UserId="747" />
  <row Id="1280" PostId="474" Score="3" Text="&quot;For any language/compiler that supports tail-call optimisation, there is no use of the stack for recursion.&quot; – That is only true if the recursive call is a tail call, i.e. for tail-recursive calls. Traversing a tree, for example, is *not* trivially tail-recursive, since you have a recursive call for every branch and there can be at most one tail-recursive call. (You *can* make it tail-recursive by introducing a stack which you manage yourself, of course.)" CreationDate="2017-06-19T00:01:14.573" UserId="945" />
  <row Id="1281" PostId="474" Score="3" Text="Also, Scala does not support Proper Tail Calls. It only supports Direct Tail Recursion, i.e. Tail Recursion where a method *directly* calls itself in tail position. (And &quot;directly calls itself&quot; means that the method must be `final`, otherwise there would be no guarantee where the call is dynamically dispatched to!)" CreationDate="2017-06-19T00:02:33.617" UserId="945" />
  <row Id="716" PostId="477" Score="4" Text="Welcome to CSEducators! I'd like to make a request:could you add a bit of detail about CS0? It's not a generally understood term or universal curriculum. You give a bit of a hint when you mention that the students have decided to be miserable, but some more context would be helpful." CreationDate="2017-06-07T22:36:16.090" UserId="27" />
  <row Id="717" PostId="477" Score="1" Text="Also, what are &quot;SLOs&quot;?" CreationDate="2017-06-07T22:36:52.677" UserId="27" />
  <row Id="718" PostId="477" Score="0" Text="@BenI. My guess is that SLO = Student Learning Outcomes." CreationDate="2017-06-07T22:57:25.097" UserId="76" />
  <row Id="728" PostId="477" Score="0" Text="Could you please add more details as to what exactly are you asking? what is the problem you are facing, out of the many things listed in your question?" CreationDate="2017-06-08T10:09:45.283" UserId="150" />
  <row Id="825" PostId="477" Score="0" Text="Thank you for the edit! I think that the real reason we closed this question is because of this line: &quot;Any thoughts about what to cover, what not to cover, how to cover things effectively, are welcome!&quot; It's really broad. I'd vote to reopen if you changed it to something like &quot;How do the topics seem to you given &lt;constraints of class&gt;? Anything you'd add/remove/change?&quot; Also, making the title more general (e.g. instead of &quot;nonmajor CS0&quot; &quot;gen ed CS course&quot;) and also more specific (e.g. being more specific with &quot;good/bad topics&quot;)." CreationDate="2017-06-12T00:40:01.593" UserId="58" />
  <row Id="826" PostId="477" Score="0" Text="Also, just as a clarification to address your edit summary, none of us are moderators. We're just high-ish rep users. This site only has a SE employee moderator until it goes into public beta." CreationDate="2017-06-12T01:00:36.787" UserId="58" />
  <row Id="827" PostId="477" Score="1" Text="It feels like we're getting much closer to a viable question here.  What is &quot;CS0&quot;?  Or &quot;CS1&quot;? I am based in the states, and I have never heard of these things. I can make guesses about what they might be, but they would just be guesses." CreationDate="2017-06-12T01:02:11.517" UserId="27" />
  <row Id="828" PostId="477" Score="1" Text="If you're interested in discussing how we could narrow the scope of your question with us, feel free to say something in [the chat room](http://chat.stackexchange.com/rooms/59174). We'd be happy to talk about how to improve the question." CreationDate="2017-06-12T01:17:35.050" UserId="58" />
  <row Id="1427" PostId="477" Score="0" Text="In the SIGCSE community, CS0 is understood to be a non-major course, while CS1 is the first course for majors. This should be explicit in questions." CreationDate="2017-06-20T23:30:57.737" UserId="283" />
  <row Id="7724" PostId="477" Score="0" Text="Hi, I TA'ed an intro course for non-majors in college, 3 decades ago. My suggestion is to stick to bare basics of computing and programming, leave out anything relevant to 'mind' or 'users'. You will have your hands full just getting most of them to have runnable programs. If your course is all theory and no programming, well... Change it to a programming course. Have fun!" CreationDate="2017-09-01T13:18:22.973" UserDisplayName="user737" />
  <row Id="726" PostId="484" Score="0" Text="You could expand this answer to explain why the approach is well-suited to robotics." CreationDate="2017-06-08T09:21:28.027" UserId="41" />
  <row Id="730" PostId="492" Score="1" Text="Could it be that, at the OS level, the thread protecting the shared resource should never quit? For example, as long as the print spool is running, each process must be allowed to complete its print before another starts, but the spool is always protected by the critical section loop, even if nothing is being spooled. The protective loop will only terminate when its thread is killed externally, such as the OS removing that print spool." CreationDate="2017-06-08T17:54:51.893" UserId="104" />
  <row Id="731" PostId="493" Score="0" Text="A layman's introduction to cryptocurrencies: https://www.lrb.co.uk/v38/n08/john-lanchester/when-bitcoin-grows-up" CreationDate="2017-06-08T21:24:00.987" UserId="48" />
  <row Id="740" PostId="493" Score="0" Text="I'm sure a simple example can be done as a group exercise (with a trivial hash). I'll try and develop something unless someone beats me to it." CreationDate="2017-06-09T09:38:38.287" UserId="41" />
  <row Id="784" PostId="493" Score="1" Text="Block chains are not a currency thing (though are used by some). see https://en.wikipedia.org/wiki/Blockchain they are also used in the revision control system `git`, ipfs, and other systems. The basics are take the hash of the parent block, append the new block, and create a new hash." CreationDate="2017-06-10T16:03:41.980" UserId="204" />
  <row Id="785" PostId="493" Score="0" Text="Thanks for that - I didn't know that! But nevertheless, in order to understand the technology of finance going forward, it seems like [Blockchain](https://www.bloomberg.com/news/articles/2016-12-21/who-owns-blockchain-goldman-bofa-amass-patents-for-coming-wars) is [becoming](http://economictimes.indiatimes.com/industry/banking/finance/banking/big-banks-plan-interbank-blockchain-platform/articleshow/56770736.cms) rather [foundational](http://www.pepperlaw.com/publications/your-next-ipo-could-be-on-the-blockchain-2016-05-19/). So it still has a place in a &quot;Tech of Finance&quot; course." CreationDate="2017-06-10T16:08:52.890" UserId="27" />
  <row Id="972" PostId="493" Score="0" Text="are you teaching this at the university level? it does seem like a very interesting topic to teach!" CreationDate="2017-06-14T20:57:21.593" UserId="745" />
  <row Id="973" PostId="493" Score="0" Text="Technically, I'm teaching at a specialized HS, but the net result is that much of the material we teach is at a university level." CreationDate="2017-06-14T20:58:20.420" UserId="27" />
  <row Id="21813" PostId="494" Score="0" Text="*Deep Learning Teaching Resources* are Learning Teaching Resources which are Deep, and *Learning Teaching Resources* are *Teaching Resources* which are Learning. Not sure what you're asking about." CreationDate="2024-03-18T01:06:38.723" UserId="14351" />
  <row Id="733" PostId="498" Score="1" Text="I think CSTeachingTips is more aimed at college teaching than HS teaching, but, in any case, students might have outside jobs or responsibilities so they shouldn't be given unnecessary homework. As your question suggests, the hard part is figuring out what assignments are valuable. Your high school might also have policies about the amount of homework." CreationDate="2017-06-09T01:36:28.743" UserId="283" />
  <row Id="734" PostId="498" Score="1" Text="We do have a policy of up to 30 minutes/class/night or 45 minutes/class/night if it's AP/Honors, but that's a ceiling and doesn't speak to what exactly gets assigned. Good to know about CSTeachingTips - I find following it really valuable. Case in point, it inspired me to ask about homework and how best to approach it." CreationDate="2017-06-09T02:02:48.890" UserId="76" />
  <row Id="786" PostId="498" Score="1" Text="Can you tell us, what AP is? (this is an international website, and we don't all know what the acronyms mean)" CreationDate="2017-06-10T18:02:55.013" UserId="204" />
  <row Id="787" PostId="498" Score="1" Text="Have you considered `flip classroom`? Flipped classroom is an instructional strategy and a type of blended learning that reverses the traditional learning environment by delivering instructional content, often online, outside of the classroom. It moves activities, including those that may have traditionally been considered homework, into the classroom. In a flipped classroom, students watch online lectures, collaborate in online discussions, or carry out research at home and engage in concepts in the classroom with the guidance of a mentor. — https://en.wikipedia.org/wiki/Flipped_classroom" CreationDate="2017-06-10T18:06:06.517" UserId="204" />
  <row Id="788" PostId="498" Score="0" Text="@richard Great question. I'll clarify my question. It stands for &quot;Advanced Placement.&quot; Essentially it designates that a class is at an honors-level, i.e. more advanced than a standard grade-level course." CreationDate="2017-06-10T18:07:02.470" UserId="76" />
  <row Id="1044" PostId="498" Score="1" Text="@richard Advanced Placement in High School usually means that the student can test out of College courses, or get credit for having taken them. It *advances* the student's *placement* in the college curriculum. I don't think of it as 'honors' (which was always meaningless to me as a student, like saying I was 'tall') I think of it as: I get to skip boring weed courses and move on to something more interesting when I finally get to college. *And* it was more interesting in High School. Learn early and often!" CreationDate="2017-06-15T15:33:33.627" UserDisplayName="user737" />
  <row Id="1051" PostId="498" Score="0" Text="@nocomprende  honnors — is that like in UK? we have bachelor degree(under graduate degree), with and without honnors." CreationDate="2017-06-15T17:53:49.547" UserId="204" />
  <row Id="1056" PostId="498" Score="0" Text="@richard Well, I am not familiar enough with the UK system to answer. Most everyone finishes High School in the US. Only people who need jobs go on to college. 2 year degree is Associates, 4 year is Bachelors, next is a Masters degree, then Doctorate (PhD). Continuing in research is Post-Doc. The idea of &quot;with honors&quot; simply refers to the grade point average you achieved. There is Cum Laude (you understand Latin), Magna Cum Laude (you know it well) and Summa Cum Laude (you beat out your Latin instructor). Most people are just glad to leave with a degree, which is a requirement for a job now." CreationDate="2017-06-15T18:01:42.500" UserDisplayName="user737" />
  <row Id="1059" PostId="498" Score="0" Text="@nocomprende Not sure about the latin stuff, I don't think any one does this much any more. But the rest seems the same as here in UK. Except we have senior school, where we get Level 1 or 2 GCSE at age 16, then level3 A-level at 18, then we go to university to get our degrees. Though you can get an equivalent at a college. And I have heard that more and more jobs are demanding a degree." CreationDate="2017-06-15T18:13:24.020" UserId="204" />
  <row Id="1061" PostId="498" Score="0" Text="@richard right, I forgot to clarify about High School: schooling is compulsory across the US to age 16, which for most people would be after 2 years of High School. They get a diploma after 4 years of High School, around age 18. You get nothing for stopping short of a HS diploma, except a bad name and the chance to work to get your GED (HS equivalency) on your own time and your own dime. (The Latin thing was a joke. If I recall correctly, Cum Laude is 3.5 GPA, Magna is 3.75 and Summa is basically a 4.0. After graduating your GPA is not too important, except to continue in academia, of course.)" CreationDate="2017-06-15T18:18:41.697" UserDisplayName="user737" />
  <row Id="1080" PostId="498" Score="0" Text="UK is also compulsory until 16 years. But we have certificates at this age (GCSE). A lot of people stop at this. Senior school starts at age 11, so 5 or 7 years at senior. Though sometimes we have a middle school, but not often." CreationDate="2017-06-15T21:31:41.040" UserId="204" />
  <row Id="736" PostId="500" Score="1" Text="Using poor candidates as learning examples is a good point." CreationDate="2017-06-09T04:17:10.050" UserId="104" />
  <row Id="737" PostId="500" Score="0" Text="Wow. This is a very useful answer. It can also be used with neural networks." CreationDate="2017-06-09T04:53:52.133" UserId="150" />
  <row Id="762" PostId="502" Score="5" Text="This question is truly language specific, as norms are very different across different languages.  You can't avoid GOTO in BASIC or JMP in assembly languages, and there exist (rather rare) occasions in Java when `break` statements can be good practice.  What language is this instruction in?" CreationDate="2017-06-09T14:38:34.437" UserId="27" />
  <row Id="763" PostId="502" Score="0" Text="@BenI. True, and for example in VisualBasic 6 error handling is done solely with GoTo statements. Still, in most modern, high level programming languages, GoTo can - and should - be avoided. The reason I didn't name a language is I'm talking about concepts and best coding practice. (I also agree that `break` statements can actually make the code simpler, but beginners first need to learn to write proper exit conditions for their loops.)" CreationDate="2017-06-09T15:18:01.010" UserId="51" />
  <row Id="764" PostId="502" Score="2" Text="Could you add a language?  I'm trying to create an answer, but it's nearly impossible to formulate a response without one.  The discussion in ASM is just completely different from the discussion in Java." CreationDate="2017-06-09T15:23:54.050" UserId="27" />
  <row Id="770" PostId="502" Score="4" Text="`break`, `continue`, etc. all have a place and a time. The trick is to learning when and why. I recommend showing the power as well as the danger in using them. I'm always leery when someone says &quot;All X are bad&quot; - like the guy who said he never used loops, only LINQ. Time and place..." CreationDate="2017-06-09T17:30:48.033" UserId="35" />
  <row Id="1040" PostId="502" Score="2" Text="The real reason GoTos became extinct: [XKCD reference](https://xkcd.com/292/)" CreationDate="2017-06-15T15:14:37.393" UserDisplayName="user737" />
  <row Id="10264" PostId="502" Score="1" Text="We really do need a language referenced. GoTo is not always bad. Try using Basic without GoTo, or assembly without JMP, ...or JE. In fact, there are many industrial languages, used today, where GoTo is absolutely required. There are best practices for most languages, and they don't always agree." CreationDate="2018-03-07T18:50:03.373" UserId="4082" />
  <row Id="767" PostId="503" Score="0" Text="What language? Hungarian notation is good for assembler language (and pointers in C)." CreationDate="2017-06-09T16:52:13.790" UserId="204" />
  <row Id="768" PostId="503" Score="1" Text="Are you asking “What conventions should I use?”, or how do I encourage good practice? — https://cseducators.stackexchange.com/questions/505/the-importance-of-writing-understandable-code" CreationDate="2017-06-09T16:55:55.253" UserId="204" />
  <row Id="772" PostId="503" Score="0" Text="@richard The first mostly. Also, that question you quoted was asked an hour after mine, so I can't have duplicated it." CreationDate="2017-06-09T20:13:31.863" UserId="51" />
  <row Id="779" PostId="503" Score="0" Text="sorry if you thought I was accusing you of duplication. I was not, I was asking you a question, to clarify what you were asking. Which of the two meanings should we use to interpret your question?" CreationDate="2017-06-10T07:44:10.840" UserId="204" />
  <row Id="808" PostId="503" Score="0" Text="@richard Oh ok, sorry for misunderstanding then. I'm mostly looking for suggestions on what conventions should I use, and also on how strict should I enforce using them." CreationDate="2017-06-11T14:42:57.450" UserId="51" />
  <row Id="742" PostId="505" Score="0" Text="@thesecretmaster this isn't about the value, showing that there's an acceptable norm, and that they should follow it" CreationDate="2017-06-09T11:19:26.337" UserId="150" />
  <row Id="743" PostId="505" Score="0" Text="Why it's important == value, understandable == best practices." CreationDate="2017-06-09T11:21:45.323" UserId="58" />
  <row Id="744" PostId="505" Score="0" Text="@thesecretmaster still a duplicate?" CreationDate="2017-06-09T11:26:56.150" UserId="150" />
  <row Id="745" PostId="505" Score="0" Text="I think so. You reworded it but didnt change the meaning of the question." CreationDate="2017-06-09T11:34:40.827" UserId="58" />
  <row Id="746" PostId="505" Score="0" Text="@thesecretmaster ok, fair enough." CreationDate="2017-06-09T11:43:25.267" UserId="150" />
  <row Id="747" PostId="505" Score="1" Text="I think the 'best practices' question is very broad and there's value in having this as a separate one. There are different approaches to teaching people to use source control versus writing readable code, so it's ok to have different questions." CreationDate="2017-06-09T12:33:08.883" UserId="57" />
  <row Id="748" PostId="505" Score="0" Text="@Rory The other question is about best practices generally, including VCS, commenting, indentation, etc." CreationDate="2017-06-09T12:49:48.597" UserId="58" />
  <row Id="750" PostId="505" Score="1" Text="@thesecretmaster but it asks about teaching them and ensuring students continue with those best practices. Here I'm asking about ways for students to *understand* why coding conventions are necessary for writing understandable code, as well as the importance of those conventions." CreationDate="2017-06-09T12:52:24.840" UserId="150" />
  <row Id="751" PostId="505" Score="2" Text="@thesecretmaster - exactly. I meant my statement as a vote towards not closing this one, since the other question is broader. Therefore this should remain as an open question." CreationDate="2017-06-09T12:52:41.210" UserId="57" />
  <row Id="752" PostId="505" Score="2" Text="If anything, this question seems *more specific* to me, as the other question is also about testing and &quot;VCS&quot;.  The previous question is possibly too broad (are we really going to avoid any further discussions about the reasoning behind readable code?)" CreationDate="2017-06-09T12:53:48.297" UserId="27" />
  <row Id="753" PostId="505" Score="1" Text="This answer about indentation is good - https://cseducators.stackexchange.com/a/132/57" CreationDate="2017-06-09T12:57:17.350" UserId="57" />
  <row Id="754" PostId="505" Score="0" Text="@Rory Thanks. I looked at that, and it has helped me with a part of my question. It does give me a general Idea how it could be done, but teaching indentation only goes so far." CreationDate="2017-06-09T13:01:58.317" UserId="150" />
  <row Id="758" PostId="505" Score="1" Text="I don't see this question covering substantially different ground to the other two linked examples. You changed the spelling of the title, but it has the same meaning. Is the answer different to 'code is for people to read'? An answer of 'bugs are easier to spot in templated code' does not match your question." CreationDate="2017-06-09T14:01:51.933" UserId="41" />
  <row Id="759" PostId="505" Score="0" Text="@SeanHoulihane You are quite right that the questions might be covering *similar* ground. However, my question is about students gaining a deeper understanding of the conventions, and why they are important. As I see it, the bullets in Rory's answer address *that* very well. Would I have asked how to show them just how bad it would be if they didn't follow conventions, then the questions would be much more alike." CreationDate="2017-06-09T14:07:12.860" UserId="150" />
  <row Id="822" PostId="505" Score="0" Text="Suggested new title 'The importance of wrtiting code where the intent is explicit'. I don't quite like that title, but feels closer to what you're asking, maybe." CreationDate="2017-06-11T20:35:54.640" UserId="41" />
  <row Id="749" PostId="506" Score="1" Text="I like the approach but doubt it will work. Coding conventions allow the part of your brain that parses _what_ you're looking at to run on autopilot so you can concentrate on the _what's it doing_. But learners aren't at a level to have an autopilot yet. They're always fully concentrated on all aspects. So they won't notice the lack." CreationDate="2017-06-09T12:51:05.920" UserId="65" />
  <row Id="757" PostId="510" Score="0" Text="I could not have asked for a more thorough answer. Thanks!" CreationDate="2017-06-09T13:49:32.197" UserId="150" />
  <row Id="766" PostId="510" Score="0" Text="and assure them that good names, consistency and indentation will allow them to learn quicker." CreationDate="2017-06-09T16:49:02.740" UserId="204" />
  <row Id="769" PostId="512" Score="0" Text="Nobody should antagonize the kernel devs! Purpose should be the consideration not &quot;style&quot; although that has its place too." CreationDate="2017-06-09T16:57:37.383" UserId="104" />
  <row Id="1046" PostId="513" Score="0" Text="Paraphrase of famous quote: &quot;The Invariant is the only mystery.&quot;" CreationDate="2017-06-15T15:50:01.347" UserDisplayName="user737" />
  <row Id="18426" PostId="514" Score="0" Text="Now there are default methods and static methods that can be in interfaces.  This can often be an alternative to an abstract class, since you don't blow your inheritance when you implement it." CreationDate="2021-11-20T20:12:41.550" UserId="21" />
  <row Id="773" PostId="516" Score="0" Text="Elegant expansion of what I currently do, I like it! :)" CreationDate="2017-06-09T20:14:39.203" UserId="51" />
  <row Id="780" PostId="516" Score="1" Text="I have seen lint tools that will ban `break`, `continue`, and `goto`. However all the C languages need `break` for their broken `switch`/`case`." CreationDate="2017-06-10T07:49:06.363" UserId="204" />
  <row Id="1042" PostId="516" Score="0" Text="I figured out how to do fall-through Switch cases in C# using GoTo. I showed the students because I told them that it was an idiom that they might see in older production code. Re: &quot;can't leave the subroutine&quot; - what about setjmp() / longjmp() in C? Grok that and you really know something." CreationDate="2017-06-15T15:19:21.787" UserDisplayName="user737" />
  <row Id="774" PostId="517" Score="0" Text="Are you asking whether to teach this as part of existing class(es), or as a completely separate class (&quot;Markup Languages&quot;)?" CreationDate="2017-06-10T00:29:27.757" UserId="605" />
  <row Id="775" PostId="517" Score="0" Text="Existing classes. A separate class could be fun, but I don't think I could sell it as an elective against other elective options." CreationDate="2017-06-10T00:31:13.303" UserId="76" />
  <row Id="776" PostId="517" Score="0" Text="Ah, too bad, one of the best elective classes I took was one that studied page description languages that included markup (e.g., SGML) and printer languages (e.g., PostScript)." CreationDate="2017-06-10T00:40:56.773" UserId="605" />
  <row Id="778" PostId="517" Score="0" Text="You need to show it to be relevant (for the pupils), and relevant for the curriculum: Some pupils will find this very relevant/interesting, if you start with what it can do. In the UK the curriculum talks about special purpose languages, so would be relevant at key-stage3 (pre exam stage), but after that you have the question, is it relevant to the exam." CreationDate="2017-06-10T07:40:27.457" UserId="204" />
  <row Id="807" PostId="520" Score="1" Text="Big thanks for the seconds tip, really clever!" CreationDate="2017-06-11T14:39:14.793" UserId="51" />
  <row Id="809" PostId="520" Score="0" Text="Great answer but why no braces around if-bodies?" CreationDate="2017-06-11T14:47:54.303" UserId="283" />
  <row Id="810" PostId="520" Score="0" Text="I was imitating my students (j/k). In truth, I don't typically use extra braces unless they are needed.  I don't like the extra use of vertical space, and I find that indentation already makes the purpose clear." CreationDate="2017-06-11T14:49:08.757" UserId="27" />
  <row Id="1041" PostId="520" Score="0" Text="But we always want our programs to run until false. Then they should stop right away." CreationDate="2017-06-15T15:16:31.313" UserDisplayName="user737" />
  <row Id="4064" PostId="520" Score="1" Text="&quot;Brace all&quot; is a recognized best practice coding pattern. There are places like the old Bell Labs and its successors at which you get fired if you don't. Lack of bracing in the face of program update is a know bug generator. So @EllenSpertus comment should not be overlooked. Just do it." CreationDate="2017-07-11T12:21:23.880" UserId="1293" />
  <row Id="4349" PostId="520" Score="0" Text="Loops (or any method) that is more than a few lines long should usually be refactored into smaller methods." CreationDate="2017-07-16T01:04:07.317" UserId="1537" />
  <row Id="4426" PostId="520" Score="0" Text="I presume that `bugs[1] = 0; bugs[1] = 1;`, `f[1] = 0; f[1] = 1;`, and `fibonacciNums[1] = 0; fibonacciNums[1] = 1;` are all unintentional bugs?" CreationDate="2017-07-17T15:11:07.643" UserId="1219" />
  <row Id="4428" PostId="520" Score="0" Text="@PeterTaylor Not intentional, and fixed! It made no difference to the final output, though. I wanted to put in `fibonacciNums[0] = 0;` purely for clarity's sake as Java arrays are zeroed at instantiation anyway. (I just didn't know if that was a covered concept in OP's class by this point, so I thought it better to put that line in.) *Thank you!!*" CreationDate="2017-07-17T15:29:38.300" UserId="27" />
  <row Id="841" PostId="521" Score="1" Text="This would fit more into the category of general ML, but I appreciate your sharing the resource.  Here are my recommendations for similar resources: [https://sigai.acm.org/static/aimatters/3-2/AIMatters-3-2-05-Neller.pdf](https://sigai.acm.org/static/aimatters/3-2/AIMatters-3-2-05-Neller.pdf)&#xA;Thanks!" CreationDate="2017-06-12T18:38:52.120" UserId="589" />
  <row Id="844" PostId="521" Score="0" Text="@ProfPlum Agreed - I was just thinking that depending on the level of expertise, a short crash course on ML would be a good thing to have before diving into DL given no prior background." CreationDate="2017-06-12T21:14:49.273" UserId="76" />
  <row Id="783" PostId="525" Score="1" Text="Good high school example, and pretty rich." CreationDate="2017-06-10T14:25:43.250" UserId="27" />
  <row Id="20922" PostId="525" Score="0" Text="a perfect analogy.. thanks a lot and lot..  :)" CreationDate="2023-01-09T11:29:51.757" UserId="12936" />
  <row Id="801" PostId="527" Score="1" Text="You've asked 2 questions. One is mapping a problem to the most appropriate loop form (which is simple and definitive), the other is how to teach this... I'd suggest changing the title if you meant the former (and that I think is a clearer question to ask, hoping for some teaching input as a side-product)" CreationDate="2017-06-11T12:28:42.490" UserId="41" />
  <row Id="823" PostId="527" Score="1" Text="@SeanHoulihane Unfortunately, the former (how to program) is not on topic. The focus of this site is educators discussing teaching methodologies, but this question (and the top answer) has an air of &quot;when to use which loop?&quot; rather than **how to teach it.** The lower-scored answers are more on task, but I was concerned that this thread took the direction it did." CreationDate="2017-06-11T23:39:57.053" UserId="23" />
  <row Id="781" PostId="528" Score="0" Text="That's an especially good point about Java8 - I didn't know that that change had happened. It sounds like we're almost back to the multiple inheritance problem, then." CreationDate="2017-06-10T13:45:55.670" UserId="27" />
  <row Id="782" PostId="529" Score="0" Text="I've been considering using public code reviews, but have wondered about that exact problem. That is quite an elegant solution! (I will have to go back several years, given my [recent grading practices](https://cseducators.stackexchange.com/questions/130/how-to-teach-why-indentation-is-important)." CreationDate="2017-06-10T13:52:57.047" UserId="27" />
  <row Id="8565" PostId="530" Score="1" Text="@GypsySpelweaver Traversal of strings is also a typical use of the for loop in C.  `for(char *p = s; *p != '\0', p++) { do_something_with(*p); }`. Doesn't fit with the &quot;know how many times&quot; idea, which is a remain of the `for` loop in Pascal or Basic, or `do` loop in Fortran." CreationDate="2017-10-03T15:17:49.003" UserId="2103" />
  <row Id="8566" PostId="530" Score="0" Text="@MichelBillaud When written, the programmer may not know the number of iterations, but it is still bounded by the string length at run time." CreationDate="2017-10-03T15:24:24.473" UserId="104" />
  <row Id="8576" PostId="530" Score="0" Text="Well, most calculations given as exercices have a well-known worst case  time-complexity, and thus the number of iterations is bounded." CreationDate="2017-10-04T09:29:32.913" UserId="2103" />
  <row Id="968" PostId="531" Score="0" Text="Trainers: they are not just for running anymore." CreationDate="2017-06-14T20:43:09.817" UserDisplayName="user737" />
  <row Id="16129" PostId="532" Score="0" Text="Actually, it's often a n+1/2  loop,  like `while (true) { action1 ; if (some reason)  break; action 2; }. Removing the break leads to code duplication (call to action 1), or  more complicated code (extra if, or boolean indicator)" CreationDate="2020-01-27T06:29:38.147" UserId="2103" />
  <row Id="1621" PostId="539" Score="0" Text="TBH logic/control should come first - but in order to see it happen and make sure it works, you need the I/O too (well, at least the O)" CreationDate="2017-06-22T23:43:45.020" UserId="662" />
  <row Id="790" PostId="544" Score="1" Text="At least in this example, consider changing the class Edible to Food. It makes more sense to have the interface name a noun in this context as I see it." CreationDate="2017-06-11T07:18:14.677" UserId="76" />
  <row Id="791" PostId="544" Score="1" Text="@Peter I thought about it but I feared it was too much like a name I'd give an abstract class. But after more thought, i think it's not as confusing as I thought. Btw, it's not a class, but an interface" CreationDate="2017-06-11T07:20:09.993" UserId="150" />
  <row Id="4701" PostId="544" Score="1" Text="The contract on Eat is I take no data, I return no data, you can call me under any situation, and I promise to do what ever I want (your guess is as good as mine as to what I will do). I.E. there is no contract. They don't see it because it is not there. Do design by contract, that has contracts (pre and post conditions)." CreationDate="2017-07-21T20:19:41.013" UserId="204" />
  <row Id="13932" PostId="544" Score="5" Text="`public interface Edible { public boolean isEdible();`  I find this a very bad example for students. If a class has the `Edible` interface, **it is therefore edible**. Not only should the boolean value be irrelevant, it downright contradicts the meaning of assigning an interface to a class (&quot;it is edible because the interface is assigned, but it's not edible because the boolean says it isn't&quot;). In most (common) cases, the fact that you assign the interface is confirmation that the class _is_ &quot;Fooable&quot;. If it isn't Fooable, then it shouldn't have the IFooable interface. [..]" CreationDate="2018-11-15T13:17:19.097" UserId="2164" />
  <row Id="13933" PostId="544" Score="2" Text="[..] It also doesn't make sense to have an `eat()` method for something that's not edible. You're sullying the clear contract by having that boolean in the middle of it. The boolean (when false) can effectively negate the primary reason for the contract to exist in the first place." CreationDate="2018-11-15T13:20:23.977" UserId="2164" />
  <row Id="13942" PostId="544" Score="0" Text="@Flater You are quite right. When I wrote this answer more than a year ago, my knowledge of OOP was not as good as it is now. Thank you for bringing this to my attention." CreationDate="2018-11-17T07:41:03.060" UserId="150" />
  <row Id="793" PostId="547" Score="0" Text="The context of friendship sounds potentially useful." CreationDate="2017-06-11T08:27:49.633" UserId="150" />
  <row Id="13643" PostId="547" Score="0" Text="I just want to add onto this remote example. I did an assignment for class where students were constructing interfaces/classes for a Samsung-esque company. So they had interfaces like `VoiceAssistant` that were then only implemented on some of their classes (e.g., smartphone, smart assistant, but not TVs). The students found it very effective!" CreationDate="2018-10-13T21:11:14.457" UserId="830" />
  <row Id="799" PostId="548" Score="0" Text="I feel this question is quite broad. Could you specify which CS concepts you'd want to illustrate in such a way?" CreationDate="2017-06-11T09:25:42.693" UserId="150" />
  <row Id="800" PostId="548" Score="0" Text="It feels rather broad, but there is some focus (i.e. I have exactly these 2 devices - what can I teach with them).  More background on your other physical computing context would help." CreationDate="2017-06-11T10:41:47.750" UserId="41" />
  <row Id="813" PostId="548" Score="0" Text="@ItamarGreen It is broad, but it is almost inherently so. Part of the question is even identifying *if* these tools illustrate CS concepts well. I knew it was somewhat open-ended, but I tried to narrow it to short, self-contained lessons at the high-school level. It's hard because I'm asking essentially if something is effective for on-topic CS discussion vis-a-vis its place in the CS classroom." CreationDate="2017-06-11T15:50:53.897" UserId="76" />
  <row Id="794" PostId="549" Score="0" Text="I like the analogy, but I'm not sure it'll make it clear that `implements` I'd binding" CreationDate="2017-06-11T08:59:43.420" UserId="150" />
  <row Id="795" PostId="549" Score="0" Text="First day of the term, use a survey, with the stated rules that any open blanks on the survey is an error: no credit." CreationDate="2017-06-11T09:01:11.090" UserId="104" />
  <row Id="796" PostId="549" Score="0" Text="So then I could say that the student's answers implements `SurveyAnswer` and as such should contain answers for each question, and of the fitting type?" CreationDate="2017-06-11T09:03:27.560" UserId="150" />
  <row Id="797" PostId="549" Score="0" Text="I don't even like the analogy. I believe this is no more of a contract than using strong types (or a rigorous formatting styles) which permits automated checking for consistency. My view (with zero experience of java) is that an interface definition permits the compiler to tell you when you've made incorrect assumptions. There is no mutually beneficial trade as implied by a true contract." CreationDate="2017-06-11T09:20:49.367" UserId="41" />
  <row Id="802" PostId="549" Score="0" Text="@SeanHoulihane that is not entirely true. There might not be any mutually beneficial trade, but it's not a definition that allows the compiler to know of incorrect assumptions, either. It is a binding construct. But the idea of a contract is useful. I am trying to explain that to the students." CreationDate="2017-06-11T13:18:47.070" UserId="150" />
  <row Id="803" PostId="549" Score="0" Text="@ItamarGreen, agreed in a formal CS context - but I don't work in that context, and I suspect few of your students understand the word 'contract' in the same way that either of us do. Accepted that Java has some supporting definition, but I dislike it." CreationDate="2017-06-11T13:22:57.957" UserId="41" />
  <row Id="805" PostId="549" Score="0" Text="@SeanHoulihane but this is about formal CS context, o.o... Regardless, You're right that only a few students understand the word contract in that way. That is why I asked this question." CreationDate="2017-06-11T13:42:11.027" UserId="150" />
  <row Id="804" PostId="558" Score="0" Text="[tag:interface] specifically isn't about the **user** interface, it's about the object oriented programming interface." CreationDate="2017-06-11T13:35:22.930" UserId="150" />
  <row Id="806" PostId="558" Score="0" Text="This analogy works. FedEx ask for payment, a box, and a destination. Whatever is in the box, they'll ship it even if you put perishables in the box (or lithium batteries), and their shipping method isn't appropriate. They don't guarantee the contents arrive unharmed, they just move the box and its contents. Mis-treat an API, and you have a validation problem." CreationDate="2017-06-11T13:48:54.570" UserId="41" />
  <row Id="13670" PostId="558" Score="0" Text="@SeanHoulihane but I am hoping that FedEx would in fact enforce their conditions, because they don't want an entire truckload or plane cargohold of packages to burn up, whether I cared (or perhaps intended that) or not. Caring to protect yourself and your users is the bottom line." CreationDate="2018-10-17T20:39:00.233" UserId="5349" />
  <row Id="13679" PostId="558" Score="0" Text="@ScottRowe Your desires are irrelevant to the interface. There are implications for misusing the interface, but an interface which includes testing of its inputs is more expensive. Providing an un-validated interface may also be expensive (see GPZ vulnerabilities which use speculation and a cache side-channel) - this is reflected in your risk analysis." CreationDate="2018-10-18T07:54:02.943" UserId="41" />
  <row Id="814" PostId="570" Score="0" Text="I think there's a lot of value in that idea of creating documentation. That could also relate to our academic honesty conversation as students develop original docs for their programs." CreationDate="2017-06-11T16:17:02.983" UserId="76" />
  <row Id="815" PostId="571" Score="1" Text="Good point about languages. I'm sure C would be different if it were replaced now, and it's pretty mainstream in the right domains." CreationDate="2017-06-11T16:45:44.753" UserId="41" />
  <row Id="999" PostId="571" Score="0" Text="You beat me to mentioning using the history of computing to highlight women's contributions." CreationDate="2017-06-15T02:59:28.590" UserId="283" />
  <row Id="1000" PostId="571" Score="1" Text="Apparently, a single Google search uses more compute power than the whole Apollo program. I still can't wrap my mind around that. https://search.googleblog.com/2012/08/the-power-of-apollo-missions-in-single.html" CreationDate="2017-06-15T03:00:59.390" UserId="283" />
  <row Id="1074" PostId="571" Score="0" Text="I have that image in my LMS, and a picture of the Guidance Computer interface." CreationDate="2017-06-15T20:12:35.543" UserDisplayName="user737" />
  <row Id="817" PostId="580" Score="1" Text="But might not history be part of the central story?  Physics class labs often include significant time repeating some of Archimedes and Galileo's ancient experiments before moving on to tensors, statistical mechanics, etc." CreationDate="2017-06-11T18:03:15.400" UserId="59" />
  <row Id="818" PostId="580" Score="0" Text="Good point! I fleshed out my answer to clarify." CreationDate="2017-06-11T18:23:37.290" UserId="27" />
  <row Id="3943" PostId="580" Score="1" Text="I follow the ideas in your 3rd paragraph: say what needs to be said without clutter. Personally, I understand something much better when I have some idea of where it came from, why it exists, and where it is going. It is like if you go to a new city: a brief orientation of the important places and roads is enormously helpful." CreationDate="2017-07-10T14:22:17.143" UserDisplayName="user737" />
  <row Id="819" PostId="582" Score="0" Text="&quot;the score for the review was the same as the score for the underlying program itself&quot; - very interesting idea.  How can you convince someone else to look at your work when there is such a threatening grading policy?" CreationDate="2017-06-11T19:14:09.573" UserId="27" />
  <row Id="820" PostId="582" Score="0" Text="@Ben I.: First of all, the scores were additive, not averaged. So you could get the same cumulative score, 80, for 10 programs or reviews with an average score of 8, or 8 items with all 10s. Even so, there was a time constraint. So this one go-to guy had his pick of the best programmers, etc. He was not the best programmer but the best editor. Essentially the class sorted itself out, with programmers and reviewers finding counterparts of roughly equal caliber, barring &quot;interpersonal&quot; factors (e.g. the three girls in the class mostly reviewed each other's work)." CreationDate="2017-06-11T19:20:28.193" UserId="613" />
  <row Id="821" PostId="582" Score="0" Text="If I get time, I'm going to work up a question about this idea... students reviewing students. Or someone else can ask. That would be a very interesting discussion indeed!" CreationDate="2017-06-11T19:34:25.167" UserId="27" />
  <row Id="832" PostId="583" Score="6" Text="This is not an answer, so I'll leave it here in the comments. I think you'll like this [figure](https://dotdev.co/passing-value-reference/#.70h19fmm9)" CreationDate="2017-06-12T11:23:50.450" UserId="116" />
  <row Id="1146" PostId="583" Score="0" Text="What part are they struggling about? Have you already established how references work (without function calls)?" CreationDate="2017-06-16T17:11:35.280" UserId="660" />
  <row Id="5998" PostId="583" Score="0" Text="In _practice_ there are two ways that arguments are passed in the majority of programming languages, but _in general_, there are quite a few different ways:  https://en.wikipedia.org/wiki/Evaluation_strategy" CreationDate="2017-07-24T21:56:50.213" UserId="1269" />
  <row Id="16250" PostId="583" Score="0" Text="Re, &quot;...a reference to an _object_.&quot; I would not say &quot;object,&quot; I would say &quot;variable.&quot; There's been some heated arguments on StackOverflow over whether function arguments are passed by value or by reference in the Java programming language. The correct answer is, Java function args are always passed by value, but the controversy keeps returning because most Java &quot;values&quot; are references to objects. IMO, the key is, calling `foo(x)` can not assign the _variable_ `x` if `x` is passed by value. It maybe can mutate the object to which `x` refers, but it can not change which object `x` refers to." CreationDate="2020-03-09T13:58:04.433" UserId="1269" />
  <row Id="17198" PostId="583" Score="0" Text="Do you *really* have pass by reference? Ok it exists in C++ (and Pascal!). For most other languages... one should read this by [Steven d'Aprano](https://mail.python.org/pipermail/tutor/2010-December/080505.html)." CreationDate="2020-11-09T12:10:06.600" UserId="8837" />
  <row Id="7787" PostId="586" Score="0" Text="As I said to Simon M, Your answer suggests that pass by value is more work for the computer than pass by reference, but that may be misleading. I know that in PHP pass by value is implemented using Copy On Write, so the data is not physically copied if it doesn't need to be." CreationDate="2017-09-03T19:24:20.177" UserId="1636" />
  <row Id="7788" PostId="586" Score="0" Text="Note that copy-in-write is an implementation optimization, perhaps an optional one in the language definition." CreationDate="2017-09-03T19:43:04.167" UserId="59" />
  <row Id="1043" PostId="588" Score="0" Text="Right. You have to learn the rules before you can break them, you have to be able to write a structured solution before you can make a few exceptions within it." CreationDate="2017-06-15T15:27:39.663" UserDisplayName="user737" />
  <row Id="833" PostId="590" Score="0" Text="Is there a reason you don't just teach them git? Why are they so terrified of the command line?" CreationDate="2017-06-12T12:38:35.130" UserId="58" />
  <row Id="9108" PostId="590" Score="0" Text="I am still not convinced that `git` is teachable. Yes some will get it, but most will not. see https://cseducators.stackexchange.com/q/2897/204" CreationDate="2017-11-24T17:39:32.780" UserId="204" />
  <row Id="9466" PostId="590" Score="0" Text="Git is visual. Show them the pictures and avoid the command line. Everyone I talk to that &quot;knows git&quot; and uses the command line, doesn't actually know git" CreationDate="2018-01-04T01:04:18.737" UserId="3839" />
  <row Id="834" PostId="591" Score="0" Text="We are standardized on Eclipse so I have to use it (and it works well in any case). Command line is too much to ask of students who are struggling to learn programming language syntax. I was really hoping that someone else has done the same thing." CreationDate="2017-06-12T13:07:22.357" UserId="623" />
  <row Id="835" PostId="592" Score="0" Text="urrm. why don't you have `break;` in each case? I thought it was necessary..." CreationDate="2017-06-12T15:04:39.227" UserId="150" />
  <row Id="836" PostId="592" Score="0" Text="The choice about where (and if) to use `break`s is the great strength of the structure. If you put a break in every case, you will be back to an `if`/`else` structure. But if you skip some... try running the code =D" CreationDate="2017-06-12T15:06:09.443" UserId="27" />
  <row Id="837" PostId="592" Score="0" Text="It will create chains, won't it?" CreationDate="2017-06-12T15:09:36.500" UserId="150" />
  <row Id="838" PostId="592" Score="1" Text="I could tell you, but that would spoil the surprise.  (SPOILER ALERT: yes, it does.)" CreationDate="2017-06-12T15:14:35.240" UserId="27" />
  <row Id="839" PostId="592" Score="1" Text="If the students have been introduced to the &quot;clean code&quot; concept, the switch/case construct is easier to read even if there's a `break` for each case. Makes it obvious that it _is_ a multi-branch decision point." CreationDate="2017-06-12T15:23:34.243" UserId="104" />
  <row Id="1832" PostId="592" Score="0" Text="From a perspective of someone working in the industry: please don't. Just tell them it was a design mistake in the language. Seemed like a good idea at the time, but turned out to be a huge hurdle in everyday lives of poor Java programmers. Your own example is a good illustration for why it is a bad idea: you have repeated the same code over and over. Obviously, the text of the song won't change, but if you used switch with something that could, you'd again, had a problem with propagating the change through the code (possibly not owned by you)." CreationDate="2017-06-26T11:48:23.557" UserId="1000" />
  <row Id="843" PostId="598" Score="2" Text="Welcome to CSE.SE!  This question needs some more detail.  What is the level of the students in question?  And are you literally only asking for an opener?" CreationDate="2017-06-12T21:05:31.663" UserId="27" />
  <row Id="846" PostId="598" Score="2" Text="It would help us to give better answers if you could tell us the general methods you have tried, and what seems to be the part that they don't grasp. It would also be help if you told us the context for this. Is it in preparation for a functional language, or for closures in a procedural language, or some other context entirely?" CreationDate="2017-06-12T22:48:50.093" UserId="104" />
  <row Id="1001" PostId="598" Score="0" Text="How does teaching the Lambda Calculus differ from teaching about functions in math?" CreationDate="2017-06-15T03:05:49.520" UserId="283" />
  <row Id="1002" PostId="598" Score="0" Text="I know you asked about images and analogies, not code, but are you using Scheme? It's essentially an interpreter for the Lambda Calculus." CreationDate="2017-06-15T03:06:31.960" UserId="283" />
  <row Id="2803" PostId="598" Score="1" Text="Math:   The &quot;There exists&quot; and &quot;For all it is true&quot; equations (don't know how to make the actual symbols here) do the exact same thing as lambda expressions." CreationDate="2017-07-07T18:16:59.823" UserId="1213" />
  <row Id="855" PostId="599" Score="0" Text="To those who might not be familiar with ap cs a curriculum, could you please give a link (perhaps in a comment, as it is not overly needed in the question itself) to a list of subjects covered?" CreationDate="2017-06-13T11:56:14.243" UserId="150" />
  <row Id="856" PostId="599" Score="0" Text="(unable to edit the comment anymore, but it's still useful, to explain why there's need for a footnote in your question) The footnote works just fine, thanks." CreationDate="2017-06-13T15:34:03.373" UserId="150" />
  <row Id="858" PostId="599" Score="1" Text="Here is the course description as of 2014: https://secure-media.collegeboard.org/digitalServices/pdf/ap/ap-computer-science-a-course-description.pdf" CreationDate="2017-06-13T17:25:21.300" UserId="265" />
  <row Id="862" PostId="599" Score="0" Text="Add it after they take the AP test. We have a couple weeks of school after the test." CreationDate="2017-06-13T18:11:03.823" UserId="636" />
  <row Id="857" PostId="612" Score="1" Text="To make things clearer, try using a scalar rather than a list. The implicit loop of `forEach` muddies the water. And, maybe, try using an assignment rather than printing inside the lambda expression. `KISS` principle." CreationDate="2017-06-13T17:12:12.903" UserId="104" />
  <row Id="860" PostId="612" Score="0" Text="@GypsySpellweaver a scalar?" CreationDate="2017-06-13T18:05:20.877" UserId="150" />
  <row Id="863" PostId="612" Score="0" Text="Single item not a list or structure, such as int double chat etc." CreationDate="2017-06-13T18:16:21.787" UserId="104" />
  <row Id="865" PostId="612" Score="0" Text="In any OO language you can implement lambda expressions: first create an interface `lambda_string` with method `doit( value:string )`. Now implement `foreach_string( l: list of string,  L: lambda_string )`. Now show how to create in instance of `lambda_string`. One you have that done, do it again with templates/generics. Now explain that `l -&gt; {…}` is syntactic sugar for what you just did." CreationDate="2017-06-13T18:29:12.287" UserId="204" />
  <row Id="1290" PostId="612" Score="0" Text="&quot;I am trying to explain how they are interpreted by the JVM and what they unfold into.&quot; – Why? I mean, I get that the whole machinery using [`java.lang.invoke`](http://download.java.net/java/jdk9/docs/api/java/lang/invoke/package-summary.html), `invokedynamic`, `MethodHandle`, bootstrap methods, `MethodType`, and the [`LambdaMetafactory`](http://download.java.net/java/jdk9/docs/api/java/lang/invoke/LambdaMetafactory.html) is very interesting, but I don't think it is a good thing to teach. It is, after all, full of implementation details and clever tricks for performance." CreationDate="2017-06-19T06:42:18.930" UserId="945" />
  <row Id="1291" PostId="612" Score="0" Text="@JörgWMittag Clever tricks for performance is key. I want students to learn why they're useful. And that is part of it." CreationDate="2017-06-19T06:44:57.267" UserId="150" />
  <row Id="1292" PostId="612" Score="0" Text="Sure, but the whole machinery is probably going to take a long time to explain, unless the students are already intimately familiar with JSR-292, `invokedynamic`, bootstrap methods, `MethodHandle`s and so on. I certainly don't know how it works, I freely admit. It *really* is a very clever machinery with lots of moving interrelated parts. (Or maybe I am wrong and it is totally simple, I just haven't seen it yet. Feel free to correct me.)" CreationDate="2017-06-19T06:48:35.567" UserId="945" />
  <row Id="851" PostId="613" Score="0" Text="Where this breaks down, I think, is in the tricky case. (Apologies for the lack of formatting, but comments don't seem to permit them)  `public void silly(int[] g){ g[0] = 7; g = new int[10]; g[1] = 7; }`" CreationDate="2017-06-13T10:35:28.643" UserId="27" />
  <row Id="854" PostId="613" Score="0" Text="@BenI. Oh you are right, this is by no means a perfect analogy. I use this to explain the basic concept of passing variables between subroutines and functions, and to help with one specific question I got a lot of times: &quot;how come it is called *abc* in one routine and *xyz* in the other if it is the same thing?&quot;" CreationDate="2017-06-13T11:15:31.810" UserId="51" />
  <row Id="17370" PostId="613" Score="0" Text="C is a purely pass-by-value language.  You must ask: what is the variable storing?  Passing pointers passes a copy of the memory address specified by the pointer. There is no genuine pass by reference in C." CreationDate="2020-12-07T01:16:36.523" UserId="21" />
  <row Id="7725" PostId="618" Score="0" Text="This looks like a good list, and I would follow Kernighan in to the depths of Hell." CreationDate="2017-09-01T13:20:07.113" UserDisplayName="user737" />
  <row Id="861" PostId="621" Score="0" Text="The question seemed a bit odd. Does the OP have a plethora of students scoring 5? If so that's an anomaly and congrats. Certainly, we can use many topics to explore CS, but time is short in a CS AP class and there's a lot to be covered. Perhaps, the time might be better spent exploring the topics covered on the AP test more thoroughly? Perhaps an array game?" CreationDate="2017-06-13T18:10:23.937" UserId="636" />
  <row Id="864" PostId="621" Score="0" Text="We do, indeed. We have an usual program with a HS CS &quot;major&quot;, along with a 4-year core CS curriculum. My AP CS A kids enter the course about half a year ahead. They also simultaneously take a separate CS course, so they are learning linked list, trees, and some low-level concepts. This means that, though I cover the AP curriculum, I have a lot of latitude (and a duty!) to include other important concepts." CreationDate="2017-06-13T18:24:43.320" UserId="27" />
  <row Id="867" PostId="622" Score="2" Text="Welcome to CS Educators stack exchange! This question could really use more details. Is there an example that would help us see the problem you are facing (for example, an algorithm which you would call poorly-crafted)? Please add some details to help us help you." CreationDate="2017-06-13T18:47:27.173" UserId="150" />
  <row Id="868" PostId="622" Score="0" Text="@ItamarGreen I edited" CreationDate="2017-06-13T18:59:42.740" UserId="639" />
  <row Id="869" PostId="622" Score="1" Text="thank you. Now it's much clearer. However I would also add what the algorithm is supposed to do." CreationDate="2017-06-13T19:01:44.683" UserId="150" />
  <row Id="870" PostId="624" Score="0" Text="But the key is that most school code isn't run on big data, so slow solutions won't be detected. The ideal situation would be to find the problem in the phase of designing solution." CreationDate="2017-06-13T19:02:20.303" UserId="639" />
  <row Id="871" PostId="624" Score="2" Text="As I said, I think that's just practice. Also, there isn't anything stopping you from working on &quot;big data,&quot; is there? If you really wanted to estimate the efficiency of an algorithm, that's what big O is for." CreationDate="2017-06-13T19:03:07.553" UserId="58" />
  <row Id="873" PostId="625" Score="1" Text="You meant $n \log{n}$, right?" CreationDate="2017-06-13T19:29:38.490" UserId="639" />
  <row Id="874" PostId="625" Score="0" Text="Yes, I'll fix it. (Oops)" CreationDate="2017-06-13T19:30:10.477" UserId="150" />
  <row Id="19520" PostId="625" Score="0" Text="The quick sort worst case is really misleading. The worst case will happen in two cases: Sorted data with a stupid quick sort implementation (good implementations handle these cases in O(n)), and a DOS attack by a clever attacker knowing your exact algorithm, and for randomised Quicksort, your exact random number generator. Not practical." CreationDate="2022-03-31T13:47:37.430" UserId="4529" />
  <row Id="876" PostId="627" Score="1" Text="The syntax highlighting markup on your first blog post doesn't seem to have rendered—you might want to take a look." CreationDate="2017-06-13T20:00:08.810" UserId="2" />
  <row Id="877" PostId="628" Score="0" Text="Written on paper they can't blame typos or auto-complete for making the errors." CreationDate="2017-06-13T20:23:14.503" UserId="104" />
  <row Id="878" PostId="628" Score="2" Text="@GypsySpellweaver, typos occur all the time if you write your code on paper" CreationDate="2017-06-13T20:44:58.723" UserId="118" />
  <row Id="884" PostId="628" Score="13" Text="Dijkstra never used a computer." CreationDate="2017-06-14T00:52:46.990" UserId="659" />
  <row Id="886" PostId="628" Score="34" Text="&quot;Computer Science is no more about computers than astronomy is about telescopes.&quot; [Dijkstra].  Paper tests are still relevant for CS courses." CreationDate="2017-06-14T02:43:58.877" UserId="664" />
  <row Id="888" PostId="628" Score="1" Text="See a similar discussion here https://cseducators.stackexchange.com/questions/89/should-i-have-written-tests-on-basic-programming-skills" CreationDate="2017-06-14T04:33:24.660" UserId="76" />
  <row Id="913" PostId="628" Score="9" Text="IMO it depends on what you're teaching. Traditional CS is as much about theory as anything, so the knowledge and understanding is what's important. If you're teaching coding and/or for real world usage. (e.g. a 3 month intensive iOS program) then much of what's important is one's ability to use the tools available to them, so a paper test would likely be kind of terrible." CreationDate="2017-06-14T17:02:27.867" UserId="724" />
  <row Id="1062" PostId="628" Score="0" Text="Depends what the test is on." CreationDate="2017-06-15T18:30:05.093" UserId="806" />
  <row Id="1086" PostId="628" Score="3" Text="Why do most answers assume that the only alternative to paper is a fully featured IDE and not a minimalistic plaintext editor like notepad? The biggest advantage of using a text editor over paper is that it supports insertions." CreationDate="2017-06-16T08:41:13.927" UserId="839" />
  <row Id="1089" PostId="628" Score="0" Text="@chrylis Dijkstra programmed on a computer. He just never wrote articles with a computer, he preferred a typewriter or his Montblanc pen" CreationDate="2017-06-16T10:02:03.277" UserId="844" />
  <row Id="1121" PostId="628" Score="0" Text="FWIW I barely used a computer at all in my first 2 years of my CS degree and think I got a good education. In my later two years, I did a lot more programming for classes, but it was never really the focus." CreationDate="2017-06-16T14:35:53.880" UserId="869" />
  <row Id="1150" PostId="628" Score="2" Text="am I the only one who read this question as specific to exam questions where the candidate is expected to answer _in code_? All the answers and comments here about how &quot;computer science != coding&quot; and whatnot seem to be missing the point entirely. Of course it's fine to have to explain in words the intuition behind bubblesort etc. But it's also irrelevant to the question being asked. For me the question is, &quot;if there is a question asking you to write a simple bubblesort implementation _in code_, shouldn't that part of the question be handled / compiled _on a computer_ as opposed to _on paper_?" CreationDate="2017-06-16T19:13:03.423" UserId="885" />
  <row Id="1168" PostId="628" Score="1" Text="You are looking at it the wrong way.  Usually, a test written on paper allows you to not get hung up by a missing semi-colen and get graded how well you expressed the algorithm/idea/ ectera.  If the problem is difficult to the point you'd have trouble doing it correctly on a computer, you will probably score MUCH better on paper." CreationDate="2017-06-17T02:32:37.053" UserId="900" />
  <row Id="1170" PostId="628" Score="0" Text="@apnorton It seems then that Dijkstra's point was that for studying theory of CS/astronomy, no additional tools are necessary; however, for studying practicals of CS/astronomy, yes, you're absolutely going to need a computer/telescope.  Extrapolating that into a brief answer to this question— for CS fundamentals paper is fine; for code you should teach on / test on a computer." CreationDate="2017-06-17T04:31:23.977" UserId="902" />
  <row Id="1219" PostId="628" Score="0" Text="Wow things have changed. Back in 1996 I took the freshman intro CS class at an accredited university in the United States as a requirement for a BS in mathematics. The class was literally all coding in C++ on Solaris SPARC workstations using cxx as the compiler. We took our tests on paper and we had to write at least pseudo code for many answers (there were many purely theoretical questions as well), but we had the option to write answers with actual code in the language of our choice. Obviously we weren't graded harshly on typos or even omitted semicolons or everyone would have failed." CreationDate="2017-06-18T07:03:04.753" UserId="939" />
  <row Id="1244" PostId="628" Score="0" Text="I'm very grateful for all the answers this question has received so far. It really gave me a new perspective in the matter. Since there is really no correct answer in this case, I'll choose as the &quot;correct answer&quot; the most popular one. But, if you have an insight on this problem that was not mentioned here, please post it, it may be very helpfull!" CreationDate="2017-06-18T14:35:48.333" UserId="118" />
  <row Id="1275" PostId="628" Score="2" Text="The problem with computer science (in English) is that the name is misleading. It's not about computers, it's a science related to automatic processing of information. For instance, in Italian (and Polish I've been told) it's called *Informatica* from *informazione* + *automatica*. Tests should be done on paper of course. The only time in 3+2 years I've done an exam with a computer it was a probability and statistics exam where we were *allowed* to use R as a calculator (the test was still on paper)." CreationDate="2017-06-18T21:23:04.220" UserId="963" />
  <row Id="1276" PostId="628" Score="1" Text="Also, if &quot;coding&quot; on paper you are not distracted by typos and costantly trying to compile. There is a reason why we always tell beginners to *not* start coding until they have a clear sketch of their solution on paper (or by heart, if it's a trivial problem). Coding **distracts** algorithmic thinking unless you've built some experience." CreationDate="2017-06-18T21:23:58.923" UserId="963" />
  <row Id="15010" PostId="628" Score="0" Text="It has to be a combination of both. You can ask students to write pseudo code on paper but please do not ask them to write compile-able code in a specific language on paper.&#xA;If you want to test students' coding, use automated solutions https://autogradr.com" CreationDate="2019-05-14T16:34:12.840" UserId="1397" />
  <row Id="879" PostId="629" Score="1" Text="But do you think that this also applies to more advanced programming courses?" CreationDate="2017-06-13T20:53:52.063" UserId="118" />
  <row Id="880" PostId="629" Score="1" Text="@Safirah What's your definition of 'advanced programming course'?" CreationDate="2017-06-13T21:05:55.977" UserId="16" />
  <row Id="881" PostId="629" Score="0" Text="I'm talking about a test that tackles concepts like: OOP, visual programming, etc..." CreationDate="2017-06-13T21:09:37.660" UserId="118" />
  <row Id="882" PostId="629" Score="0" Text="I guess your &quot;yes&quot; is meant to be a &quot;no&quot;?" CreationDate="2017-06-13T22:54:19.950" UserId="653" />
  <row Id="883" PostId="629" Score="2" Text="Will you say the same if the students are given some normal text editors with ability to compile rather than IDEs ?" CreationDate="2017-06-14T00:30:58.807" UserDisplayName="user656" />
  <row Id="887" PostId="629" Score="1" Text="As far as I'm concerned programmers shouldn't worry about things the system is going to deal with.  I don't memorize anything like all the signatures--I know basically what's going to be wanted but let the IDE show me the details for anything I don't use all the time." CreationDate="2017-06-14T04:24:54.627" UserId="668" />
  <row Id="891" PostId="629" Score="0" Text="I'd say this is a little too purist for my experience in the software industry; I think having students being able to reason out a problem in broad strokes and pseudocode on paper is a good thing, but the IDEs and dev-tools are there to help. This would be like saying that a worker in a car factory should be able to hand assemble every part of the car instead of relying on the robots. Technology and tools move on, even with the benefit of an IDE, a bad coder is a bad coder, doesn't matter if it's on a computer or paper." CreationDate="2017-06-14T07:32:33.743" UserId="678" />
  <row Id="892" PostId="629" Score="5" Text="As a uni student and programmer, in my experience the courses have two parts. The first is assignments and/or computerised tests. These are throughout the course, heavy in programming and done on a computer, usually at home or in labs.&#xA;The second is exams. These are the end of semester ones. They almost never expect you to write code and rarely expect you to read code. This is because the course tests your coding ability through other parts of the course. The exam is about verifying that you understand the concepts that they have been teaching in the course, so are typically wordy answers." CreationDate="2017-06-14T07:51:01.873" UserId="681" />
  <row Id="915" PostId="633" Score="2" Text="I had a similar experience. We had some Pascal in the first year and after that professors assumed we are able to code: You have to do some exercises on operating systems? Go get a C book and learn it yourself." CreationDate="2017-06-14T17:22:19.793" UserId="729" />
  <row Id="939" PostId="633" Score="1" Text="On my CS course, programming was a core module (Java) and other modules often included some coding elements (either real code or pseudo-code). In all cases code had to be written out on paper as the OP describes. IMO this answer spends way too long describing your particular CS course and making assumptions that don't necessarily generalize well, and not long enough addressing the actual question (advantages of paper vs computer)." CreationDate="2017-06-14T18:16:57.173" UserId="735" />
  <row Id="1035" PostId="633" Score="0" Text="This is the answer I most agree with, so I will add my own anecdote. I am a fairly recent graduate of both a BS/MS in CS from a mid-level state university and I took three years of CS in high school. In all of these programs, tests were handwritten and focused mostly on answering theoretical questions, drawing diagrams, and only rarely did we debug code or write our own (and handwriting LISP is a massive pain). Quizzes were also handwritten but focused on pseudocode to describe a concept. Assignments were the true coding projects. CS is about theory, not &quot;how to write language X&quot;." CreationDate="2017-06-15T14:55:21.187" UserId="788" />
  <row Id="1090" PostId="633" Score="2" Text="so.... should they do their tests on paper or not?" CreationDate="2017-06-16T10:06:29.417" UserId="844" />
  <row Id="1091" PostId="633" Score="2" Text="@BrianR &quot;handwriting LISP is a massive pain&quot; -- random fact: LISP is the only language currently in widespread use that was originally designed to be handwritten." CreationDate="2017-06-16T10:11:52.843" UserId="848" />
  <row Id="1093" PostId="633" Score="0" Text="@BrianR, Viliami: yes, they should do tests on paper. I thought it were pretty clear with the last paragraph, and have added a small TL;DR at the beginning." CreationDate="2017-06-16T11:30:56.177" UserId="652" />
  <row Id="1215" PostId="633" Score="0" Text="Your title makes as much sense as **“English Writing ≠ writing”**.  Suggestion: To better fit your points, change the title to **“CS &gt; coding”** or **“CS ⊃ coding”** (and reword a few things within)." CreationDate="2017-06-17T22:45:20.070" UserId="902" />
  <row Id="1249" PostId="633" Score="2" Text="Most of my CompSci education was theoretical.  There were assignments; write code, get it working, submit it, etc.  That's not CompSci; that's the APPLICATION OF CompSci.  How does a red / black tree work? How is searching it O(log (n))? If you can't explain it, how can you apply it? My Database class dealt, extensively, with relational model.  Most of it was done using algebraic notation.  Once I had that, SQL was a breeze (2 class periods). Today, I write pretty complex SQL. &quot;An exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer&quot; -- Dijkstra" CreationDate="2017-06-18T15:48:59.067" UserId="948" />
  <row Id="1277" PostId="633" Score="1" Text="I agree with this answer, although my experience is a bit different. Of course CS is not coding, but in my BSc (University of Venice) functional programming, imperative programming and OOP were all mandatory courses. You expect that a computer scientist can turn an algorithm into code. I finished my MSc in 2016, FWIW. But still, programming is just a tool and CS is much more... today many improvised &quot;coders&quot; don't seem to understand this. &quot;Serious&quot; tests shall always be on paper while assignments can be practical." CreationDate="2017-06-18T21:30:36.430" UserId="963" />
  <row Id="1286" PostId="633" Score="2" Text="@Skipp Computer Science is about computers in the same way Astronomy is about Telescopes (misquote of &quot;Edsger W. Dijkstra&quot;).  Would you say &quot;astronomy is a superset of telescope operation&quot;?" CreationDate="2017-06-19T06:04:29.407" UserId="978" />
  <row Id="1297" PostId="633" Score="0" Text="&quot;You can have great coders who have not the faintest idea about CS (and vice versa, I assume)&quot; Vice versa: Alan Turing is considered a great computer scientist, but he died around the time the first programming languages were invented (the 50's).&#xA;&#xA;So you assumption seems correct." CreationDate="2017-06-19T08:43:49.183" UserId="987" />
  <row Id="1300" PostId="633" Score="0" Text="@rubdos: Nice! I've integrated it into the answer." CreationDate="2017-06-19T09:12:14.430" UserId="652" />
  <row Id="1301" PostId="633" Score="0" Text="Hey AnoE, @username won't work in answers; you can however put a link to the comment if you want to (right click the comment's time, copy that link)" CreationDate="2017-06-19T09:13:34.037" UserId="987" />
  <row Id="1302" PostId="633" Score="0" Text="@all: while I see what you mean with the &quot;!=&quot; discussion, it's just a qip to show the gist of the answer on first glance. I believe the stylized &quot;!=&quot; is ubiquitous enough to carry the intended meaning." CreationDate="2017-06-19T09:14:25.633" UserId="652" />
  <row Id="15409" PostId="633" Score="0" Text="It is a misleading gross distortion to say that Alan Turing did not have the faintest idea about CS or that his CS knowledge did not inform his coding." CreationDate="2019-08-07T20:33:52.050" UserId="2485" />
  <row Id="901" PostId="634" Score="7" Text="+1 Great motivational answer. It would almost be funny if that were not what is actually happening in the real world (in businesses) a lot, in practice - programming by trial&amp;error." CreationDate="2017-06-14T13:01:16.310" UserId="652" />
  <row Id="903" PostId="634" Score="2" Text="I'm a career teacher, and your comment just made me sad. *Is that really what goes on?*" CreationDate="2017-06-14T13:12:27.583" UserId="27" />
  <row Id="904" PostId="634" Score="0" Text="Not always, but often..." CreationDate="2017-06-14T13:16:04.520" UserId="652" />
  <row Id="905" PostId="634" Score="16" Text="@BenI.: As a maintenance coder of 17 years' experience digging through other people's code, I can say, this is *exactly* what is going on far too often." CreationDate="2017-06-14T13:16:13.220" UserId="706" />
  <row Id="909" PostId="634" Score="7" Text="As sad as it is, that's very common. Even worse, the offenders are usually &quot;schooled&quot; while the ones _not_ doing this are typically self-educated. The first group learn to pass classes, the latter learned the language and how to use it." CreationDate="2017-06-14T16:35:40.737" UserId="104" />
  <row Id="930" PostId="634" Score="1" Text="I don't agree that CS students should take tests on paper, but I really like this answer." CreationDate="2017-06-14T17:53:38.727" UserId="733" />
  <row Id="932" PostId="634" Score="0" Text="I know what you mean. I similarly upvoted an answer I disagreed with (@Winterborne) because I thought it really contributed to the discussion." CreationDate="2017-06-14T17:55:20.600" UserId="27" />
  <row Id="959" PostId="634" Score="12" Text="I learned to program long ago without an IDE. (Shoot, I did some of my learning on *punched cards* and teletype.) When my co-instructor pointed out that our beginning students seem to just chase the wiggly red lines around the screen, I was horrified. Visual Studio should have a mode that lets you just get something typed in before it starts trying to 'help'. I have seen students take nearly perfect code and turn it in to garbage because they were trying to solve the wiggly lines instead of coding their solution! This is completely aggravating. How did we end up in this place?" CreationDate="2017-06-14T20:17:10.043" UserDisplayName="user737" />
  <row Id="962" PostId="634" Score="1" Text="@nocomprende I think we got here because the IDE helps experienced programmers spot typos. But I do see a cost in comprehension among my students, and I have to fight it vigilantly." CreationDate="2017-06-14T20:21:27.093" UserId="27" />
  <row Id="983" PostId="634" Score="1" Text="@nocomprende This also ends up making it even more difficult to figure out what was wrong in the first place, since by the time you are looking at the code they have no idea what it does and no idea where they veered off the correct path." CreationDate="2017-06-14T22:31:33.547" UserId="753" />
  <row Id="985" PostId="634" Score="0" Text="@IllusiveBrian Right. If you don't know where you are going, any code will get you there." CreationDate="2017-06-14T23:35:27.073" UserDisplayName="user737" />
  <row Id="989" PostId="634" Score="1" Text="@GypsySpellweaver `...the offenders are usually &quot;schooled&quot; while the ones not doing this are typically self-educated.`  I completely agree, having a Computer Engineering degree myself (like Computer Science, but with the fancier parts of software replaced with circuit design).  I learned to take tests as a separate skill in its own right, and graduated with a 3.9 GPA, so I definitely know how this works.  However, I also have a (perhaps rare) personal desire to actually know what's going on, so you might actually call me self-educated with some formal help." CreationDate="2017-06-15T01:00:19.660" UserId="759" />
  <row Id="1008" PostId="634" Score="7" Text="&quot;*Does he necessarily understand the things he is changing, or has he been trained, Pavlovian-like, to change code that has been underlined in red*&quot; -- this is an eye-opener. +1" CreationDate="2017-06-15T08:10:50.473" UserId="768" />
  <row Id="1064" PostId="634" Score="4" Text="I went to school with a guy (who graduated) whose idea of bug-fixing indexing errors was to add `+1` or `-1` to various terms randomly and hope the issue was just an off-by-one error =&gt; `x+1` fail. `x-1` fail. `z+1` fail. `z-1` fail. `y+1` fail. `y-1` pass. Problem solved, and he didn't even have to understand it. He also just googled most of his homework... so I agree with this answer 100%" CreationDate="2017-06-15T18:53:05.870" UserId="807" />
  <row Id="1278" PostId="634" Score="0" Text="@GypsySpellweaver I do not know where you are from, but from my experience it's quite different. Yes, there are not very good CS students, but the software development field is often filled with improvised &quot;coders&quot; who just learnt a language following some tutorial without knowing a bit about algorithms, data structures, complexity, formal languages, ... you name it. Or designers who suddendly are &quot;web developers&quot; because they tried Dreamweaver." CreationDate="2017-06-18T21:35:14.053" UserId="963" />
  <row Id="1279" PostId="634" Score="0" Text="@AaronD please note that science and engineering are different fields. They do overlap on some stuff but differ on other. Even though many CS and CE people become software developers this doesn't mean that they have the same background. An engineer can beat a scientist on some stuff, and viceversa. No-one is better than the other but they differ." CreationDate="2017-06-18T21:37:01.273" UserId="963" />
  <row Id="1434" PostId="634" Score="0" Text="@BenI.: Is this Java? If so, sorry for being pedantic: `length` is actually a property of the array object, instead of a method. For the code to work, you'd have to have `z &lt; array.length` :)" CreationDate="2017-06-21T03:50:34.250" UserId="1112" />
  <row Id="1452" PostId="634" Score="0" Text="LOL exactly the kind of mistake that would never be penalized on an exam :) (Quite literally - among many, many other things, the AP rubric explicitly makes length/size() confusion, dropping extra parens on paramaterless methods, or adding parameterless parens on fields nonpenalized errors)" CreationDate="2017-06-21T10:32:56.880" UserId="27" />
  <row Id="897" PostId="635" Score="4" Text="You have to acknowledge that for some (frequently extremely talented) individuals, this forcing will be stressful and counterproductive - but as a generalisation you make very valid points." CreationDate="2017-06-14T09:18:23.770" UserId="41" />
  <row Id="960" PostId="635" Score="0" Text="The pen is mightier than the MSWord. (the pencil is mightier than the pen: it has an eraser.)" CreationDate="2017-06-14T20:18:46.943" UserDisplayName="user737" />
  <row Id="1010" PostId="635" Score="0" Text="@SeanHoulihane, I agree." CreationDate="2017-06-15T08:38:29.570" UserId="665" />
  <row Id="1073" PostId="635" Score="0" Text="@SeanHoulihane The number of folks who occupy that category are greatly outnumbered by those who *think* they occupy that category." CreationDate="2017-06-15T19:54:06.120" UserId="807" />
  <row Id="889" PostId="636" Score="3" Text="this answer does answer the question, but it's not entirely to the question. The question asks about written tests *about code*, and not about cs in general. You are right that CS is more than just code, but that is not relevant to the question." CreationDate="2017-06-14T06:20:51.033" UserId="150" />
  <row Id="964" PostId="636" Score="0" Text="@ItamarGreen maybe the implication is: &quot;if it is not a coding question, it should be answered on paper&quot;-?" CreationDate="2017-06-14T20:25:06.857" UserDisplayName="user737" />
  <row Id="1139" PostId="636" Score="2" Text="+1 (+2 if possible) for the first paragraph. I suspect this is whymy first language at Uni was gcl, for which there was no compiler." CreationDate="2017-06-16T16:48:26.337" UserId="878" />
  <row Id="890" PostId="637" Score="1" Text="Welcome to CSeducators Stack Exchange! This is a very good answer, and quite to the point. Well done" CreationDate="2017-06-14T06:36:28.570" UserId="150" />
  <row Id="4681" PostId="638" Score="0" Text="your image is very big and makes it difficult not to focus on it. from what I understand, mvc is not the only thing to focus on. so an image so big is making it difficult to understand your question...." CreationDate="2017-07-21T12:43:09.627" UserId="1705" />
  <row Id="17552" PostId="638" Score="0" Text="I think the arrow from &quot;Model -&gt; Updates -&gt; view&quot; is confusing.  It is not the model which update the view. It is the view which listen to changes in the models data. &#xA;The model should not even know that there is a view. Also I don't think the &quot;view sees user&quot; as indicated by that arrow. You really need to think about what exactly the arrows represent." CreationDate="2021-01-18T11:36:55.223" UserId="10003" />
  <row Id="917" PostId="639" Score="4" Text="What is wrong with lots of variables? Can you give an example? It is better to not reuse variables, to never re-assign to a variable. This will make the code easier to understand, for the human, and for the optimiser. Over optimised code is hard to optimise." CreationDate="2017-06-14T17:30:06.557" UserId="204" />
  <row Id="919" PostId="639" Score="0" Text="Memory consumption" CreationDate="2017-06-14T17:30:58.980" UserId="97" />
  <row Id="921" PostId="639" Score="8" Text="If your compiler dose not do variable folding in its optimisation step, then get a better compiler. Optimise for readability, and Big O. Leave the rest to the optimiser (it's its  job). I have spent many a year, as a software engineer, trying to beet bad habits out of people. Mostly premature optimisation “I have to do it that way to make it faster”. Every time there was no need to be faster, and there efforts made it slower (by getting in the way of the optimiser). First make it work, then if you need to make it fast (but measure to check that it does get faster)." CreationDate="2017-06-14T17:33:34.880" UserId="204" />
  <row Id="922" PostId="639" Score="0" Text="Not in coding something brother. While teaching students. Mainly in paper and algorithms" CreationDate="2017-06-14T17:34:57.313" UserId="97" />
  <row Id="924" PostId="639" Score="0" Text="“Not in coding something brother. While teaching students. Mainly in paper and algorithms” — none of this makes sense. Please translate. What is not in coding?  What when teaching? What is mainly in paper and algorithms?" CreationDate="2017-06-14T17:39:07.847" UserId="204" />
  <row Id="925" PostId="639" Score="0" Text="While asking them to write algorithms or write programs on paper. Also I want to teach them how to optimize manually instead of compiler made optimisation" CreationDate="2017-06-14T17:44:27.170" UserId="97" />
  <row Id="1173" PostId="639" Score="1" Text="Teaching really needs to be aligned with modern practices. Ideally using compilers which are being architected now since it will be some time before these students are productive." CreationDate="2017-06-17T12:30:54.623" UserId="41" />
  <row Id="894" PostId="640" Score="1" Text="@SagarV you're welcome. However I would wait with accepting this answer. Someone might have a much better one, and if there's already an accepted answer, they might not give their own answer ;)" CreationDate="2017-06-14T08:35:18.810" UserId="150" />
  <row Id="895" PostId="640" Score="0" Text="Yeah. But since this site is in beta, stats are very important. The number of questions with no accepted answer should be kept minimum.  for that only I accepted. Let's wait." CreationDate="2017-06-14T08:37:27.687" UserId="97" />
  <row Id="896" PostId="640" Score="0" Text="@SagarV as you wish. It is true that we have seen quite a few answers being added after one's accepted." CreationDate="2017-06-14T08:39:08.770" UserId="150" />
  <row Id="977" PostId="640" Score="1" Text="Since the user input is by far the slowest part of this example, doing it in one or two loops won't really be any more or less efficient in terms of computation. On the other hand, I think that entering matrices in this interleaved fashion is less natural than reading in one than another and thus ends with a bad user experience.&#xA;&#xA;I'd say, better to use one loop but factor out the code into an &quot;enter_martrix()&quot; function that prompts the user, gets the input and then returns the matrix." CreationDate="2017-06-14T21:28:31.890" UserId="237" />
  <row Id="1456" PostId="640" Score="1" Text="@ItamarGreen: good answer. Could we get a few links to those sites you would recommend, showing optimized code /vs/ non-optimisez code ?" CreationDate="2017-06-21T11:45:08.110" UserId="1002" />
  <row Id="1649" PostId="640" Score="0" Text="@ItamarGreen bump (or... enjoy your vacation? ^^)" CreationDate="2017-06-23T15:46:27.817" UserId="1002" />
  <row Id="1689" PostId="640" Score="0" Text="@OlivierDulac well, my go-to site for those things is [this](http://www.hanselman.com/blog/CategoryView.aspx?category=Source+Code)... When I find more I'll link them here." CreationDate="2017-06-24T06:02:01.363" UserId="150" />
  <row Id="6042" PostId="640" Score="0" Text="for i from 0 to 3" CreationDate="2017-07-25T12:19:43.320" UserId="2103" />
  <row Id="6044" PostId="640" Score="0" Text="@MichelBillaud I'll test it soon" CreationDate="2017-07-25T12:22:14.147" UserId="150" />
  <row Id="898" PostId="641" Score="1" Text="Welcome to Computer Science Educators Stack Exchange! This answer looks good, but it doesn't explain how one can teach how to write optimized code. If you could edit it so it would better answer that, it would be a lot better." CreationDate="2017-06-14T09:34:37.350" UserId="150" />
  <row Id="908" PostId="641" Score="0" Text="I like the rules of thumb." CreationDate="2017-06-14T16:15:32.670" UserId="104" />
  <row Id="951" PostId="641" Score="0" Text="$n \log{n}$ is undefined.  You mean either $n \log_2{n}$ or $n \lg{n}$ (these last two are [synonymous](https://en.wikipedia.org/wiki/Binary_logarithm#Notation))" CreationDate="2017-06-14T19:26:44.300" UserId="27" />
  <row Id="1365" PostId="641" Score="1" Text="@BenI. $\log{n}$'s better than $\log_2{n}$.  Including the base is mathematically equivalent to including a proportionally constant, which is logically inconsistent as complexity classes explicitly omit the proportionality constant.  For example, both $\log_{2}{n}$ and $\log_{10}{n}$ mean the same thing in this context.  So, writing $O(\log_2{n})$ instead of $O(\log{n})$ is kinda like writing $O(2n^2)$ instead of $O(n^2)$.  In both cases, the extra $2$ is extraneous." CreationDate="2017-06-19T23:36:19.880" UserId="39" />
  <row Id="1366" PostId="641" Score="0" Text="@BenI. Just as a reference demonstrating common usage, [&quot;Computational complexity theory&quot;](https://en.wikipedia.org/wiki/Computational_complexity_theory), Wikipedia, uses $\log{n}$ for this reason.  In general, $\log{n}$ makes more sense whenever we're talking about arbitrary base values, such as in complexity classes, though the base of the log should really be included whenever we're writing in terms of numerical equality." CreationDate="2017-06-19T23:42:51.077" UserId="39" />
  <row Id="5913" PostId="641" Score="0" Text="Well, some compilers (references needed) 1) detect that `string` is not modified by te loop,  2) make the assumption that it is not modified by another thead 3) thus optimize  using a &quot;cache variable&quot; for the length." CreationDate="2017-07-24T14:01:38.857" UserId="2103" />
  <row Id="10154" PostId="642" Score="0" Text="Understanding that C compiles to asm is useful in debugging C programs with undefined behaviour.  e.g. if your program does something that shouldn't be possible, or crashes in a really weird way, then you probably did something wrong with a pointer to a local variable and stepped on something in the call stack.  IDK how far this gets you if you don't actually know asm (just that it exists), and don't have the expertise to backtrack from the symptoms to *what* might have been overwritten, though." CreationDate="2018-02-23T06:13:03.587" UserId="1654" />
  <row Id="965" PostId="643" Score="1" Text="I like to have students draw flowcharts at some points. This is very easy with a pencil. One student was disabled such that he could not use a pencil, but man, was he great at Visio! Of course, I made the exception during the test for this student." CreationDate="2017-06-14T20:26:39.450" UserDisplayName="user737" />
  <row Id="899" PostId="644" Score="0" Text="Those real world examples are very handy. They also fit in well with the lesson plan. Thanks!" CreationDate="2017-06-14T09:56:23.193" UserId="150" />
  <row Id="963" PostId="647" Score="1" Text="My students have a 'theory' exam on paper in my course tomorrow. Cross all 1010 of your fingers..." CreationDate="2017-06-14T20:22:07.023" UserDisplayName="user737" />
  <row Id="906" PostId="650" Score="2" Text="Your link doesn't go to a task prompt" CreationDate="2017-06-14T14:41:53.680" UserId="27" />
  <row Id="907" PostId="650" Score="0" Text="It's the &quot;Specimen NEA Project Brief&quot; on the link in the question. There's also a link to the exam board's pseudocode spec at the bottom of the &quot;Sample Assessment Materials&quot; document" CreationDate="2017-06-14T15:46:30.557" UserId="674" />
  <row Id="923" PostId="650" Score="0" Text="Books like MIT's [Introduction to Algorithms](https://books.google.co.uk/books/about/Introduction_to_Algorithms.html?id=i-bUBQAAQBAJ&amp;printsec=frontcover&amp;source=kp_read_button&amp;redir_esc=y) use pseudo-code so I'd go with that." CreationDate="2017-06-14T17:36:22.937" UserId="727" />
  <row Id="954" PostId="650" Score="2" Text="Because OR allows both the answer is YES! Both! Graph theory would say that the two are interconvertible, and they are. One shows things the other doesn't. Can't get by without both." CreationDate="2017-06-14T19:38:15.173" UserDisplayName="user737" />
  <row Id="1003" PostId="650" Score="0" Text="Shouldn't an answer to this require knowledge of how GCSE UK (whatever that is) is graded?" CreationDate="2017-06-15T03:09:27.393" UserId="283" />
  <row Id="8663" PostId="650" Score="0" Text="@user737 Flow charts are interchangeable with a much lower-lever language than most pupils are programming it. For Pseudo code to be of use, it needs to be a higher level than the one they are programming in." CreationDate="2017-10-06T11:42:32.757" UserId="204" />
  <row Id="953" PostId="652" Score="0" Text="Yes, they need both. I love to show students how if they draw the flowchart correctly, they create pseudocode by simply copy-pasting the text from the flowchart symbols, in order, and it turns out. Add a few End-Ifs where the closing lines are in the flowchart and you are done. If you cannot do the copy-paste, your flowchart is NOT Structured, you cannot write code from that. I like to say that if a flowchart was in another language, you could probably still figure out what was going on, tell a decision from a loop, etc. Good luck on that with pseudocode! Both are interchangeable and needed." CreationDate="2017-06-14T19:37:03.967" UserDisplayName="user737" />
  <row Id="911" PostId="654" Score="4" Text="Upvoted because I believe this contributes to the conversation, though I obviously disagree with your conclusion. How do you get around the problems in my post and in @AnoE?" CreationDate="2017-06-14T16:49:54.343" UserId="27" />
  <row Id="914" PostId="654" Score="0" Text="@ben-i I think AnoE's answer covers more advanced courses where coding is not the primary focus. If so, they may be entirely correct, though I would still argue that typing responses rather than writing could be of some benefit. Your answer has a good point of being able to fake understanding with the help of prompts, but time is often a limiting factor in a test. There is only so many random changes you can try before running out of time. This should not be a common occurrence unless the time given is much greater than the difficulty of the task." CreationDate="2017-06-14T17:20:57.863" UserId="715" />
  <row Id="929" PostId="654" Score="4" Text="I think some of the criticisms you have (it's easy to get syntax wrong/not remembering certain methods can be fatal) can be solved by simply being more lenient with minor syntax issues while grading and by providing students with a cheatsheet listing all the built-in methods they might need to use (and perhaps even providing examples of syntax)." CreationDate="2017-06-14T17:53:21.673" UserId="732" />
  <row Id="933" PostId="654" Score="3" Text="Another potential problem with doing tests on computers is it makes it easier to cheat, unless the instructor has full control over the computers being used, which is often infeasible due to budget constraints or large class sizes. If the school has a competitive majors system and the intro course is an important part of admissions, that only compounds the problem. (And of course, this is always a potential problem in high school, since students want high grades for college admissions)." CreationDate="2017-06-14T17:55:30.787" UserId="732" />
  <row Id="935" PostId="654" Score="5" Text="I'd also like to point out that especially in US colleges/high schools, students are expected to take a variety of other classes in other disciplines unrelated to their primary interest as a part of a 'general education' requirement (literature, history, other liberal arts classes). It's common in such classes to require students to write essays and short answers on papers during exams. As a result, I think it's reasonable that STEM classes can expect students to do a comparable amount of writing on their exams." CreationDate="2017-06-14T18:01:54.840" UserId="732" />
  <row Id="936" PostId="654" Score="1" Text="And finally, about your comment up above -- I don't think all instructors try and add time pressure to their exams. Some instructors deliberately _remove_ time pressure by giving more time then they think is necessary for the benefit of students who don't work as well under pressure/to give students the opportunity to answer all the questions to the best of their ability. (After all, if a student submits an incomplete answer, how do we know whether that's because they didn't understand the material or because they're slow at writing/typing and ran out of time?)" CreationDate="2017-06-14T18:07:14.190" UserId="732" />
  <row Id="945" PostId="654" Score="1" Text="@Michael0x2a My own experience would disagree with most of your points. However, let me address it point by point. Cheatsheets with syntax provided by instructors could solve a part of the problem. I have never seen it done, and I doubt a useful one could be put together easily though. And again, this could as easily be solved by the functionality of an IDE that will tell you that a List has the add method, rather than include, or something like that. Cheating IS a huge issue that would need to be addressed. Disabling/Removing the WiFi adapters is a possibility if computers can be provided." CreationDate="2017-06-14T19:12:38.263" UserId="715" />
  <row Id="947" PostId="654" Score="0" Text="@Michael0x2a I do not think that applying the standard of Gen Ed. classes to CS is either fair or relevant. By that logic all classes should require students to write at least 3 research essays per semester/quarter because English does. And finally, regarding the time issue. Yes, most institutions allow you to request extended time for tests. However, I have never went through the process myself, so I am not sure how well &quot;I'm not used to coding on paper&quot; will fly as reasoning for that. Besides that, I have often seen about 50% of class take all of the allotted time. So it's not that generous." CreationDate="2017-06-14T19:18:09.490" UserId="715" />
  <row Id="961" PostId="654" Score="5" Text="I write on the whiteboard at the front of class, and my writing is poor. Real programmers write on whiteboards in meetings. If they cannot sketch out a solution, they cannot be part of a team." CreationDate="2017-06-14T20:20:48.743" UserDisplayName="user737" />
  <row Id="1012" PostId="654" Score="2" Text="Nice contribution, but I don't agree with your last point. &quot;Writing is not representative of real world experience&quot;. In our daily work, we do many things that does not require pen &amp; paper, like fixing compile error, writing simple script, querying database. We did it hundred of times, so we don't have to resort to paper. But when a new problem comes, for me it's mostly the case of finding an ad-hoc algorithm, I found pen &amp; paper really useful." CreationDate="2017-06-15T09:13:44.570" UserId="665" />
  <row Id="1048" PostId="654" Score="0" Text="@hucancode This could be a difference in approach. I tend to resort to pen and paper when I need to write out a logic chain, or a particularly tangled set of business requirements. This rarely takes the form of code, and is a far cry from a fleshed out solution. It provides a structure for the code that I will write later. This is very different than what is required on pen and paper tests, where you are expected to present a code that will compile with no issues if plugged into a computer in order receive top marks." CreationDate="2017-06-15T17:19:14.143" UserId="715" />
  <row Id="1454" PostId="654" Score="0" Text="Thankyou for this answer.  We also don't write code in an editor the same way that we do on paper.  On paper it needs to be right, or we have to scrap it and start again.  On a computer... well, lets take TDD as an example shall we?  in TDD you begin by taking the simplest requirement, (writing a test) writing the code to match that, and then repeating until the algorithm is correct.  This involves a lot of editing, but none of it is &quot;trial and error&quot;.  The editing is simple on a computer, but on paper?" CreationDate="2017-06-21T11:11:30.683" UserId="993" />
  <row Id="7408" PostId="654" Score="0" Text="I have to conditionally agree with this based on the professor. One exam that I wrote on paper (about 60% code) was judged by whether the code ran when put it into an editor verbatim. Things like a simple variable name typo would cause students to get quite literally a 0 on the question. As expected, that class had approx. 60% failure rate. If a professor is going to be this strict about marking, I definitely believe not even necessarily an IDE but at least a text editor should be considered. The exam when I retook the course was on a text editor and it was significantly less stressful." CreationDate="2017-08-28T14:24:20.487" UserId="2755" />
  <row Id="14688" PostId="654" Score="0" Text="I believe they are measuring both your ability to create syntactically correct code as much as they are testing your ability to create the semantically correct solution. Saying &quot;syntax is secondary&quot; depends on the class; in algorithm theory and pseudocode yes, in &quot;basics of programming&quot; no. Of course, syntax errors aren't as severe as flaws in semantics, but they're still errors. In &quot;basics of programming 1&quot;, we were using `nano` which is basically notepad as our &quot;IDE&quot; for C. I think it helped. And it made just as much sense to get such little help during the tests." CreationDate="2019-04-12T02:03:41.100" UserId="6850" />
  <row Id="912" PostId="655" Score="1" Text="That's a really clear example. Nice!" CreationDate="2017-06-14T17:02:15.013" UserId="27" />
  <row Id="1006" PostId="655" Score="8" Text="I'm Jewish and my daughter just had a bat mitzvah, but her mother is not Jewish. Many if not most Jews don't follow the custom given in this answer. It is a recent custom relative to Torah, which describes many non-Jewish women having Jewish children with a Jew. My daughter wants to be a software engineer and I think this example would make her feel badly. Not to expect political correctness, but I'd avoid this example because it misrepresents Judaism to non-Jews. Then again, the rule is absolutely recognizable to any Jew and anyone like my daughter can let it roll off. Thanks for sharing!" CreationDate="2017-06-15T07:30:44.330" UserId="765" />
  <row Id="1070" PostId="655" Score="4" Text="I believe Dr Burch says somewhere, he overheard it at a dinner party and it's not a canonical method of determining whether someone is Jewish. Just a neat analogy for recursion." CreationDate="2017-06-15T19:42:57.890" UserId="723" />
  <row Id="6731" PostId="655" Score="4" Text="In addition to patrilineal descent (many Reform Jews today, not accepted by Orthodox - and also debatable as to patrilineal vs. matrilineal before the Torah was given to the Jewish people, but I digress) and conversions (which obviously break the algorithm), this leaves open the question of whether Abraham himself was Jewish. As with so many other things in computer science, the edge cases will get you every time!" CreationDate="2017-08-08T04:16:02.803" UserId="2460" />
  <row Id="9619" PostId="655" Score="0" Text="@BennettBrown, I think it's a good analogy, and can be accompanied by a statement that this isn't a *real* definition of Judaism, just a useful analogy for demonstrating recursion." CreationDate="2018-01-13T07:15:54.467" UserId="1103" />
  <row Id="12603" PostId="655" Score="2" Text="It *is* cute.  But aside from the fact that it's not really correct, as already noted, it really describes a recursive data structure.  Now recursive programs are naturally used to process recursive data structures.  But in my experience, recursive definitions of recursive data structures are even more magical and mysterious to students than recursive functions are.  Of course, once you get the idea you realize how natural and powerful this all becomes.  But for undergraduates, from what I've seen, it's extremely sophisticated." CreationDate="2018-05-20T02:10:23.340" UserId="5258" />
  <row Id="916" PostId="659" Score="1" Text="Can you elaborate here on some of those criticisms? It's helpful for us to have answers here rather than on a site linked out to. Thanks!" CreationDate="2017-06-14T17:25:47.483" UserId="76" />
  <row Id="918" PostId="659" Score="0" Text="@Peter it's a large, well-thought-out piece building on especially Papert's constructionism research, with the sections following on each other. It will take away from the impact of everything he says to quote smaller sections. Which is why I only mentioned the _types_ of things he criticizes in Processing (and other systems), such as poor readability, not making computation visible, etc., as I mention in my answer." CreationDate="2017-06-14T17:30:19.683" UserId="646" />
  <row Id="920" PostId="659" Score="1" Text="The criticisms, in my opinion are more applicable to the Khan academy system rather than the tool. It's easy to poke holes in all of those self guided learning environments.&#xA;&#xA;All programming languages / teaching tools have their ups and downs.&#xA;&#xA;You can design wonderful educational experiences with processing and horrible ones as well." CreationDate="2017-06-14T17:32:07.897" UserId="237" />
  <row Id="934" PostId="659" Score="0" Text="@MikeZamansky I don't agree re applicability. Although some of the criticisms could be said to _only_ be applicable to a system with higher levels of liveness (liveness itself being a good thing, which Processing does not have), most are not -- such as the criticism of the [design decisions that were made when creating the] Processing language/environment itself in the Language section of the essay, touching on Identity and Metaphor, Decomposition, Recomposition (global state, modes that alter the meaning / consequence of code), and Readability (context-sensitive, memorisation, ambiguity)." CreationDate="2017-06-14T17:56:43.047" UserId="646" />
  <row Id="940" PostId="659" Score="0" Text="@Peter if you've read the essay, you (and everyone else of course) are very welcome to share suggestions for which criticisms to put in this answer like you asked -- I can't actually think of any that won't reduce the impact of reading the essay in its entirety. If I agree with the suggestions I'm more than happy to edit my answer for the sake of everyone reading it. Thanks!" CreationDate="2017-06-14T18:20:24.087" UserId="646" />
  <row Id="937" PostId="660" Score="0" Text="We're currently talking about your question in [chat](http://chat.stackexchange.com/rooms/59174/computer-science-educators) - sounds like you're in a rough spot! Come by and I will try to help you brainstorm" CreationDate="2017-06-14T18:10:21.670" UserId="27" />
  <row Id="938" PostId="660" Score="1" Text="What aspect of computational thinking are you going to focus on in the first part of the lesson?" CreationDate="2017-06-14T18:15:33.517" UserId="674" />
  <row Id="941" PostId="660" Score="0" Text="What are some things that you're thinking about for the second part?" CreationDate="2017-06-14T18:20:27.910" UserId="58" />
  <row Id="994" PostId="660" Score="0" Text="Do you have any idea what technologies the students will have access to? Scratch? Python/IDLE? A particular IDE? Greenfoot or BlueJ?" CreationDate="2017-06-15T01:49:42.817" UserId="76" />
  <row Id="942" PostId="663" Score="0" Text="This looks like [Church Numerals](https://en.wikipedia.org/wiki/Church_encoding) to me. =/" CreationDate="2017-06-14T18:37:26.533" UserId="27" />
  <row Id="3945" PostId="664" Score="0" Text="I think it is possible to sidestep the bad and good aspect by simply saying: &quot;this is what happened.&quot; You can explain why Oracle has a big product without saying anything about its CEO. We are here to teach what is, not ethics." CreationDate="2017-07-10T14:24:19.703" UserDisplayName="user737" />
  <row Id="946" PostId="665" Score="1" Text="I really like your answer, and I think it's really interesting but it's not really answering the question. If you wanted to, you could post a new question and self-answer it." CreationDate="2017-06-14T19:15:29.003" UserId="58" />
  <row Id="949" PostId="665" Score="0" Text="@thesecretmaster It does answer the question. I said: teach C# (a high-level language) while explaining how it works at a lower level. It is different from the other answers, and it bypasses the &quot;which one first&quot; aspect. The students learn something they will definitely need for the workplace, and they understand how it functions. If there is actually a better answer than this, I would love to have it so that I can improve my curriculum! Perhaps you would like to post an answer?" CreationDate="2017-06-14T19:22:49.187" UserDisplayName="user737" />
  <row Id="950" PostId="665" Score="0" Text="I'm not trying to insult your answer. There's a reason I haven't answered, and that is because I couldn't write an answer as good as yours. I just think that it will get less attention on this question than it would if it was it's own self answered question. Feel free to totally ignore what I'm saying, It's just a suggestion." CreationDate="2017-06-14T19:26:17.417" UserId="58" />
  <row Id="952" PostId="665" Score="0" Text="@thesecretmaster OK. On other SE sites, posting a question so that I can answer it myself is often considered 'bad'. I have had more questions shot down than accepted. I discovered this site and thought that maybe I would fit in better here... Do teachers have a sense of humor? Let's find out." CreationDate="2017-06-14T19:28:14.043" UserDisplayName="user737" />
  <row Id="955" PostId="665" Score="2" Text="Self-answered questions are _supposed_ to be encouraged on SE sites. Older, more established communities sometimes don't follow that guideline however. There's even a button for you to do that. The problem is often that it's hard to ask a _quality_ question when you already know the answer. Not that it can't be done, just hard. Good method is to ask yourself &quot;If I saw this question in the review queue, how would I rate it?&quot; Self-answered questions are a perfectly valid way to share knowledge on SE." CreationDate="2017-06-14T19:46:54.503" UserId="104" />
  <row Id="956" PostId="665" Score="0" Text="Your username is quite accurate, I'm afraid. The first half seems to be about something other than this question entirely, and I can't follow the second half. Not all of us have been around for as long as you have, sir or madam. ;-)" CreationDate="2017-06-14T19:47:27.523" UserId="27" />
  <row Id="957" PostId="665" Score="0" Text="@BenI. What about the *middle* part where I say (in bold) &quot;To answer your question&quot;? The first sentence of the Question ends: &quot;*which prepares students most effectively for a career in technology today*&quot;. I teach programming to adults making a career change due to a physical disability. If our students don't get jobs, I won't have one long." CreationDate="2017-06-14T19:59:26.080" UserDisplayName="user737" />
  <row Id="966" PostId="666" Score="0" Text="Read a touch of class by bertran myers. He covers object first (or a top down approach, starting big and adding detail. And using a very nice, text based, OO language, that avoids most of the issues)." CreationDate="2017-06-14T20:38:13.130" UserId="204" />
  <row Id="1013" PostId="666" Score="0" Text="@nocomprende What is the textbook?" CreationDate="2017-06-15T10:39:15.920" UserId="27" />
  <row Id="9963" PostId="666" Score="0" Text="Here is Bertrand Meyer's home page http://se.ethz.ch/~meyer/  with a list of books." CreationDate="2018-01-31T09:30:38.683" UserId="2103" />
  <row Id="10064" PostId="666" Score="0" Text="You might download a copy of Homeworld - the game was written in the late 1990's and still runs reasonably well on Windows 10 (and I have compiled it for linux in the past as well).  It is written in ANSI C, but it is an awesome example of OO programming in a non-OO programming language, and something the kids might find fun." CreationDate="2018-02-12T04:19:40.633" UserId="1537" />
  <row Id="969" PostId="667" Score="0" Text="This is a good idea, but seems to be a graphical layer over java. I could suggest Eiffel, as it does not have the problems, that this is getting around." CreationDate="2017-06-14T20:43:35.457" UserId="204" />
  <row Id="2097" PostId="667" Score="1" Text="&quot;it allows an approach where teachers truly deal with the important concepts first&quot; Authors' justification relies on the claim that OOP is more important than other concepts. This need to be justified in turn." CreationDate="2017-06-29T12:31:17.273" UserId="160" />
  <row Id="9964" PostId="667" Score="1" Text="Just to add a correction to the comment of @ctrl-alt-delor; BlueJ doesn't actually add a graphical layer over Java. It is an IDE explicitly designed for introducing OO to novices. However, one of its distinctive features is allowing visualisations of objects to help students understand the nature of objects. I am one of the authors of the book, Objects First with Java, mentioned in this particular answer. BlueJ doesn't have to be used with the book; indeed many people use it without adopting an objects-first approach. David" CreationDate="2018-01-31T09:44:53.233" UserId="484" />
  <row Id="974" PostId="669" Score="0" Text="How does the workflow of the grading itself work?" CreationDate="2017-06-14T21:03:33.870" UserId="27" />
  <row Id="1083" PostId="669" Score="0" Text="You'll have a queue, or you can choose to grade by student, by activity, by course. One option is to go problem by problem. You can first see the student has passed the automatic checks. Then you'll be able to review their code and send by any comments before jumping to the next student submission. You can also use &quot;Fast Grade mode&quot; -- which is helpful when you are very familiar with the problems and are commenting mostly on coding style. You'll be able to say a problem passes or send it back to the student as needs work." CreationDate="2017-06-15T23:21:01.097" UserId="745" />
  <row Id="976" PostId="670" Score="1" Text="I appreciate getting a student perspective. Thank you for posting." CreationDate="2017-06-14T21:18:14.487" UserId="283" />
  <row Id="1455" PostId="670" Score="1" Text="I agree, there is a definite difference between concepts and code.  Concepts should definitely be done on paper.  It is far easier  to sketch a diagram etc than it is to answer on a computer.   For programming tests though, doing it on paper is awful." CreationDate="2017-06-21T11:13:03.473" UserId="993" />
  <row Id="975" PostId="671" Score="1" Text="+1 for your bit about the dangers of both paths. I'd never thought about that." CreationDate="2017-06-14T21:06:49.233" UserId="27" />
  <row Id="1204" PostId="671" Score="0" Text="One possible way to avoid the problem is to alternate, right at the beginning, between OOP and procedural coding solutions to similar problems, if your chosen programming language allows." CreationDate="2017-06-17T20:13:22.540" UserId="59" />
  <row Id="16533" PostId="671" Score="0" Text="It is too bad that there are competing paradigms. That is probably not true in many other fields that young people are introduced to. In areas like Economics, where there are so many theories and bases for ideas, and new ones emerging every decade, most people catch on that it is all gobbledegook and marketing. We haven't figured that out about computer science yet." CreationDate="2020-05-29T10:44:18.183" UserId="5349" />
  <row Id="986" PostId="672" Score="0" Text="Very good points made here. I have seen that method of providing &quot;starter code&quot; but I never took the bait. It just felt weird to me." CreationDate="2017-06-14T23:47:46.400" UserDisplayName="user737" />
  <row Id="1153" PostId="672" Score="1" Text="Instead of &quot;comments&quot;, I would consider outright asking for a (non necessarily super formal) proof of correctness. I value those immensely because I remember how I used to program before those were hammered in my head in Programming 101. It was not pretty." CreationDate="2017-06-16T19:51:49.650" UserId="757" />
  <row Id="1015" PostId="675" Score="0" Text="Thanks for posting the links, but links without any context aren't considered *answers* on this site. Take a look at [answer] for the rules around link-only answers—links are great, but we prefer it if the answer can stand on its own. You can [edit] to add some context around the links, so that people searching for their answers don't have to be redirected to another site. Also, as thesecretmaster mentions, links can often break, which would mean that future visitors can't gain anything from the answer, which would be unfortunate, as the ideas seem great." CreationDate="2017-06-15T11:11:59.843" UserId="2" />
  <row Id="1020" PostId="675" Score="0" Text="I appreciate the desire to have inline content but to be honest, I spent a good amount of time writing those posts and don't really have the energy to basically transcribe my content to another site (although I'll add a bit of context to my answer later).&#xA;&#xA;I'd also note that your comment about links is really saying &quot;use my silo instead of your silo&quot; neither of which may be long lasting and while I understand your desire to keep all the knowledge under your roof, I don't know if that's really healthy for the CS Education ecosystem as a whole.." CreationDate="2017-06-15T11:50:40.380" UserId="237" />
  <row Id="1045" PostId="675" Score="1" Text="If both sites thrive, it's not &quot;use my silo instead of your silo&quot; it's &quot;use our silo _and_ your silo&quot; that way, no matter which site the curious goes to, they will find the answer. If either site fails, temporarily or long-term, nothing is lost. Think redundancy. Also, for shorter information a full copy is useful, yes, but for larger content, such as your blog entries, a summary, or encapsulation, is usually good enough. The character limit on answers wouldn't allow you to post all for entries here anyway. Something that will help the answer to remain useful should the links ever fail." CreationDate="2017-06-15T15:49:04.870" UserId="104" />
  <row Id="987" PostId="678" Score="4" Text="One sign I notice when students don't quite have the knowledge to solve a problem is that they really double down on things that they DO know. They become very innovative and churn out code that plays around the edges of the problem, enhancing the I/O and things, when a 10 line program would have demonstrated the concept adequately. I guess there would be less temptation to do this on paper. (Or if you are using a batch system with punched cards and only get to submit it a few times a day. Ahem. Er. Was that me?)" CreationDate="2017-06-14T23:56:20.330" UserDisplayName="user737" />
  <row Id="1047" PostId="678" Score="0" Text="@nocomprende to be honest, I don't know how much you can &quot;play around the edges&quot; if the problem statement is &quot;give a procedure to insert an element into a BST&quot;..." CreationDate="2017-06-15T17:07:56.403" UserId="757" />
  <row Id="993" PostId="679" Score="1" Text="I love your two exercises. It's a very clever illustration of the gains!" CreationDate="2017-06-15T01:25:30.067" UserId="27" />
  <row Id="1167" PostId="679" Score="1" Text="Re: blind people, I met an Amateur Radio operator who had been blind since birth. He had passed a Morse code reception test at 90 wpm. He could listen to 4 Morse code conversations, reply, and carry on a verbal conversation at the same time." CreationDate="2017-06-17T02:03:02.863" UserDisplayName="user737" />
  <row Id="17601" PostId="679" Score="0" Text="Really cool &quot;proofs&quot;! I suppose you could do the second one in an online format by taking an image of code and applying some blurring effects to it." CreationDate="2021-01-27T13:39:48.310" UserId="8696" />
  <row Id="1025" PostId="682" Score="0" Text="I alternate months (roughly) with another programming instructor, but yes, I would like to collaborate more widely also. I have helped in other programs of study by teaching Excel and Accounting basics. Hadn't thought of having someone else in my classroom..." CreationDate="2017-06-15T11:59:39.430" UserDisplayName="user737" />
  <row Id="1029" PostId="683" Score="0" Text="In addition to Gypsy's excellent suggestions, don't forget about history/social studies!  Discussing some of the important developments in computing can benefit both disciplines." CreationDate="2017-06-15T12:20:14.150" UserId="27" />
  <row Id="1028" PostId="684" Score="0" Text="I love the blindfolded sorting lesson - I might borrow this for HS :)" CreationDate="2017-06-15T12:17:08.280" UserId="27" />
  <row Id="1075" PostId="684" Score="0" Text="That's where I use it and it works well, even for those with programming eperience." CreationDate="2017-06-15T20:29:59.047" UserId="661" />
  <row Id="8994" PostId="684" Score="0" Text="Oh, man. I just found this again. I really need to run the first half of this lesson!" CreationDate="2017-11-06T20:04:23.533" UserId="27" />
  <row Id="1007" PostId="685" Score="0" Text="Ben, Java 9 has REPL, so it's a win win." CreationDate="2017-06-15T07:54:24.137" UserId="150" />
  <row Id="1019" PostId="685" Score="2" Text="@Bergi - there's a good reason to teach OOP in an early class - ok, actually it's a lousy reason but so so many people buy into it. It's APCS-A and the college board." CreationDate="2017-06-15T11:46:44.213" UserId="237" />
  <row Id="1024" PostId="685" Score="0" Text="@MikeZamansky Apparently I'm not one of them, I haven't even heard of APCS-A until today :-) (I'm based in Europe). But yeah, if OOP is part of the curriculum and Java is required, one doesn't have much choice." CreationDate="2017-06-15T11:58:26.640" UserId="660" />
  <row Id="1026" PostId="685" Score="3" Text="Here in the US, the College Board (a non profit in name only that a number of us oppose for many many reasons) has an outsized influence on education in the US. Schools have been bamboozled into thinking AP classes (the colloege boards offerings) are  inherently good and in fact they've created cash cows by having municipalities pay for their exams. It's about money, not education but one of their two CS courses requires OOP in Java" CreationDate="2017-06-15T12:01:16.413" UserId="237" />
  <row Id="1039" PostId="689" Score="0" Text="Very nice analogy with the house address.  I already use houses and architectural plans as an analogy for instances and classes, so this fits nicely into my current practice. :)" CreationDate="2017-06-15T15:04:15.483" UserId="27" />
  <row Id="1057" PostId="690" Score="4" Text="I don't see how flow charts help. As for as I can see, they are a legacy from before we worked out how to create compilers (This could also be said for pseudo code, however I think that pseudo code is of use when learning your first programming language). Around the time of the first compiler there was a paper “goto considered harmful”, flowcharts are full of `goto`s, and are harmful." CreationDate="2017-06-15T18:06:49.530" UserId="204" />
  <row Id="1101" PostId="690" Score="1" Text="@richard I start teaching about flowcharts and algorithms and programming in general by saying: &quot;*CPUs can only do 5 things - fetch, store, arithmetic, compare, branch.*&quot; This has always been true, and as far as I can tell, always will (until we emulate neurons or develop quantum computing). So, flowcharts are actually the most accurate translation of a high-level language algorithm in to what will happen when the program is run. Knowledge is power. It makes clear that languages (roughly 400 commonly used ones these days) are only a convenience between the mind and the hardware." CreationDate="2017-06-16T13:42:56.407" UserDisplayName="user737" />
  <row Id="1110" PostId="690" Score="0" Text="Maybe the problem isn't so much the logic and structured flow as I hear from reading your comments, but really the parsing and translation of terms for each statement." CreationDate="2017-06-16T14:12:23.023" UserId="741" />
  <row Id="1134" PostId="690" Score="0" Text="@nocomprende I agree that when teaching low-level programming then flow charts could be useful. I disagree about the 5 things (compare is arithmetic), there for there are 4 thinks (also logic is arithmetic and arithmetic is logic). You could also condense fetch and store into move, now there are only 3 things. This is the von-noumen architecture (harvard as well). There are however other architectures." CreationDate="2017-06-16T16:03:54.820" UserId="204" />
  <row Id="1169" PostId="690" Score="3" Text="Agreed with other users that using common tasks (sandwich, brushing, etc..) is better.  I use shoe tying.  Yours is too broad a scope.&#xA;&#xA;The site interaction you describe does stuff out of scope from the original description (&quot;Devise an algorithm that calculates a user’s paycheque&quot;).  An algorithm is *not* welcome messages and exit messages.  Tying your shoes doesn't include picking shoes to coordinate with your outfit from the closet.  Making a sandwich doesn't mean harvesting the grain to make bread." CreationDate="2017-06-17T03:33:08.770" UserId="901" />
  <row Id="1201" PostId="690" Score="0" Text="P.S. on the subject of messages, your problem statement doesn't mention printing the pay but the pseudocode does." CreationDate="2017-06-17T19:32:32.323" UserId="927" />
  <row Id="1082" PostId="691" Score="3" Text="There was no your zero, therefore the end of a century ends in 00. 2000 was the last year of the 20th century. Most people get this wrong, the rest of us let it pass for a year, then have a 2nd party." CreationDate="2017-06-15T21:42:34.170" UserId="204" />
  <row Id="6240" PostId="691" Score="4" Text="I sometimes say &quot;oneth&quot; to avoid the ambiguity of &quot;first&quot;." CreationDate="2017-07-27T23:00:10.687" UserId="283" />
  <row Id="13381" PostId="691" Score="4" Text="@ctrl-alt-delor actually, it’s the perfect example of what a mess is created when not using index zero. ”Most people get this wrong” by intuitively assuming that a century should start with year zero and end with year 99 and are “wrong”, because there was no year zero. But we still live in the 21st century whose index (year number) starts with a 20 (except for the last one) and the third millennium whose index (year number) starts with a two (except for the last one). And if that one guy was truly born 24.12.1, your 2nd party was wrong as well (otherwise, that number is totally meaningless)." CreationDate="2018-09-06T11:55:33.027" UserId="5814" />
  <row Id="13478" PostId="691" Score="2" Text="@ctrl-alt-delor: You are correct. However, this 0-based system is actually used to express the age of a person, and people are not known to struggle with that. The difference is that when you're at &quot;age 0&quot;, we omit the year count altogether: &quot;He is 3 months old&quot;, not &quot;He is 0 years and 3 months old&quot;. When you 0-index, and you're at index 0, that often entails deferring to a more precise (non-0) measurement." CreationDate="2018-09-18T06:33:10.797" UserId="2164" />
  <row Id="13481" PostId="691" Score="1" Text="@Flater yes you bring up an interesting point. In Europe and US, we measure age, so 3 years old, means that you are between 3 and 4 years old, that is have been alive 3 years, but no more than 4 (Well maybe an extra ¾ day, see leap year). In some parts of the world, they say what year you are in. Therefore a new born is 1, (in 1st year). This is similar to school year, before we added year zero (K in US, R in UK). In any respect the systems are all self consistent. but can result in an out by one error if the 2 people communicating are using a different system." CreationDate="2018-09-18T07:11:34.727" UserId="204" />
  <row Id="14202" PostId="691" Score="0" Text="@ctrl-alt-delor so the year zero was part of the -1th century? Or was the first century 101 years long? That's a cool fact." CreationDate="2019-01-25T13:31:00.500" UserId="799" />
  <row Id="14211" PostId="691" Score="1" Text="@Karnat Good question. No there rely was no year zero, I see my comment was not clear, but not only was the first year year 1, the year before was year -1 (no year zero). The person that invented it, did not know about zero. So we get -3, -2, -1, 1, 2, 3. Dates and time are hard  https://www.youtube.com/watch?v=-O4mYiP2zPQ https://www.youtube.com/watch?v=-5wpm-gesOY" CreationDate="2019-01-26T09:17:58.627" UserId="204" />
  <row Id="4207" PostId="692" Score="0" Text="I use an editor that auto-indents. If it indents wrong, then I first swear at it, then I realise that I made a mistake (missed a bracket or something)." CreationDate="2017-07-13T18:57:36.490" UserId="204" />
  <row Id="1054" PostId="693" Score="0" Text="There is no such thing as a procedure that returns something. Procedures are subroutines that do something. A function is a subroutine that has no side effects and returns something. (except that they do not need to be implemented with subroutines, it is the behaviour that matters.) Though these terms are often mixed up, and I know of no language that 100% enforces the separation (command/query separation)." CreationDate="2017-06-15T18:01:06.743" UserId="204" />
  <row Id="1060" PostId="693" Score="0" Text="@richard A pure function has no side effects. Most (all?) non-functional programming languages don't enforce purity of functions, so you'll find plenty that have side effects (but still return stuff)." CreationDate="2017-06-15T18:17:16.300" UserId="654" />
  <row Id="1078" PostId="693" Score="0" Text="Though Scratch might seem a little juvenile for high school students, if you can overcome the students' initial distaste for something that appears to be tailored towards younger children, Scratch can truly be a powerful tool to teach. I've seen Scratch successfully illustrate complicated concepts in CS principles on multiple occasions." CreationDate="2017-06-15T21:03:53.903" UserId="813" />
  <row Id="1079" PostId="693" Score="0" Text="@jab yes “I know of no language that 100% enforces the separation”" CreationDate="2017-06-15T21:27:36.700" UserId="204" />
  <row Id="1053" PostId="694" Score="3" Text="yes snap. I have heard that it is used to teach first your undergrad. It certainly seems to have all the features needed. Even lambdas. If is a proper functional programming language (like lisp)." CreationDate="2017-06-15T17:57:23.267" UserId="204" />
  <row Id="1058" PostId="694" Score="0" Text="There is also Blockly, but I haven't used it before, so I can't vouch for it." CreationDate="2017-06-15T18:07:15.313" UserId="76" />
  <row Id="1425" PostId="694" Score="0" Text="@Peter Blockly (which I worked on) is really an editor, not a language. Languages can be built on top of it, as App Inventor is." CreationDate="2017-06-20T23:14:58.093" UserId="283" />
  <row Id="1592" PostId="695" Score="0" Text="See also: [Code Golf SE](https://codegolf.stackexchange.com/). While I don't expect students to start golfing their code (&lt;shudder&gt;), the sorts of challenges that come up are the ones that are generally good to present. Particularly the ones tagged [kolmogorov-complexity] which is all about expressing something complex as a series of simpler instructions. Algorithms are for finding short cuts by doing the same operation multiple times instead of copy-pasting and why I don't like most of the other answers." CreationDate="2017-06-22T18:04:31.023" UserId="1244" />
  <row Id="1104" PostId="697" Score="1" Text="I have never understood why we don't let kids make up their own minds about what they want to study. Wouldn't it be great to have a room full of people who *really* want to be there? Why do we force people to learn things that they either are not going to be good at, or have no current interest in? Oops, reaching my question mark limit for the day..." CreationDate="2017-06-16T13:51:32.747" UserDisplayName="user737" />
  <row Id="1106" PostId="697" Score="0" Text="It's the right question, and I agree with you. I try to give free choice in labs when I can, but sometimes kids stick with it past add/drop, and then you are all stuck with each other." CreationDate="2017-06-16T13:55:27.517" UserId="27" />
  <row Id="1152" PostId="701" Score="2" Text="This is the exact approach my first programming teacher used on my class.  Breaking down &quot;How do you make a peanut-butter and jelly sandwich&quot; in to individual steps is permanently associated with programming for me now.  It was immensely helpful." CreationDate="2017-06-16T19:41:21.113" UserId="887" />
  <row Id="1084" PostId="706" Score="0" Text="This question should not be closed; it is asking for how folks think through their copying policy on labs. It certainly falls under [good subjective](https://stackoverflow.blog/2010/09/29/good-subjective-bad-subjective/) in my book." CreationDate="2017-06-16T01:24:47.273" UserId="27" />
  <row Id="1109" PostId="706" Score="1" Text="Professionals should not be copy-pasting random code - this has all sorts of licensing and copyright implications." CreationDate="2017-06-16T14:01:07.253" UserId="41" />
  <row Id="1133" PostId="706" Score="0" Text="Sean, sorry to be unclear here -- all I meant by that is that professionals copy from within their codebase all the time -- for example, when I'm making a new page on our website that's similar to a page we already have, I start off by copy/pasting the other page and making changes--in any case, this is all also part of the fuzziness and clarity that I think needs to be discussed and taught to new programmers." CreationDate="2017-06-16T16:03:51.303" UserId="91" />
  <row Id="1593" PostId="707" Score="0" Text="I'd add the caveat that if the assignment is to &quot;write code that does X&quot; they can't go acquire code that does X for them. E.g. if the assignment is to write a bubble sort function, they shouldn't be hitting up Stack Overflow for &quot;bubble sort [language].&quot; If a section of the assignment can be completed by utilizing code written earlier in the semester, then getting that segment off SO is fine too (I certainly can't write a merge sort algorithm from scratch, but I need one for project Y, so why not grab it from somewhere else?)." CreationDate="2017-06-22T18:15:42.590" UserId="1244" />
  <row Id="1175" PostId="708" Score="0" Text="I have few students, and their styles are very distinct, so when they 'help' each other, usually it is very obvious. But what tends to happen is the one seeking help develops more understanding over time, and the who thought they knew lags behind. It is a long curriculum, so I mostly just let it unfold." CreationDate="2017-06-17T13:02:39.587" UserDisplayName="user737" />
  <row Id="1085" PostId="710" Score="1" Text="Good point. It is a factor, so far overlooked." CreationDate="2017-06-16T02:19:53.450" UserId="104" />
  <row Id="1195" PostId="710" Score="0" Text="I don't know - having the K&amp;R on hand and the previous homework seems borderline acceptable to me, under the assumption that the test is not essentially a rehash of homework but offers instead an entirely new challenge. And, are you telling me disabling USB ports on lab machines isn't the standard already? :)" CreationDate="2017-06-17T17:34:13.547" UserId="757" />
  <row Id="1360" PostId="710" Score="0" Text="@TobiaTesan If you decide it's acceptable, then you're naturally free to allow it.  But so long as there's any amount of reference material that you don't want to allow, there's a benefit to making it harder to smuggle in. As for USB ports being disabled by default, that probably varies from place to place. We certainly don't do it here; we *want* students to be able to backup their work." CreationDate="2017-06-19T22:27:14.430" UserId="827" />
  <row Id="1105" PostId="714" Score="0" Text="Explain by saying: use your smarts to turn a problem in to a series of steps an idiot could do." CreationDate="2017-06-16T13:55:12.427" UserDisplayName="user737" />
  <row Id="1107" PostId="714" Score="0" Text="@nocomprende that's really non constructive for the students" CreationDate="2017-06-16T13:56:30.827" UserId="150" />
  <row Id="1108" PostId="714" Score="0" Text="' '*I was* agreeing *with you.* ' '" CreationDate="2017-06-16T13:58:02.520" UserDisplayName="user737" />
  <row Id="1117" PostId="724" Score="1" Text="Welcome to [cseducators.se]! We're glad you could join us. Would you mind elaborating on this analogy to explain _why_ it works? It may seem obvious to you or me, but the explanation could be useful for someone else." CreationDate="2017-06-16T14:25:15.680" UserId="58" />
  <row Id="1136" PostId="724" Score="0" Text="The point is that 'things' have both a physical form, but also a meta form.  Humans have a body, and a name.  The physical form is the thing itself, in all its nuance and complexity, and is heavyweight and non-trivial to duplicate.  The meta form is a mere reference to physical, and therefore lightweight and easy to reproduce.  I have only one phone, and creating a duplicate of it would be a non-trivial thing to do, but I can give my phone number out to millions of people with little cost." CreationDate="2017-06-16T16:06:57.263" UserId="851" />
  <row Id="1148" PostId="724" Score="1" Text="You could, if you want, edit this explanation into your answer (by using the [&quot;edit&quot; link](https://cseducators.stackexchange.com/posts/724/edit) on the bottom left side) so a new visitor doesn't have to read through the comments but can get everything by reading the answer - this is often considered good practice on Stack Exchange sites." CreationDate="2017-06-16T17:13:49.927" UserId="793" />
  <row Id="7786" PostId="724" Score="0" Text="Your answer suggests that pass by value is more work for the computer than pass by reference, but that may be misleading. I know that in PHP pass by value is implemented using Copy On Write, so the data is not physically copied if it doesn't need to be." CreationDate="2017-09-03T19:23:27.490" UserId="1636" />
  <row Id="16251" PostId="724" Score="0" Text="There's almost nothing in common between the list of things you can do with a phone number, and the things you can do with a phone." CreationDate="2020-03-09T14:01:10.063" UserId="1269" />
  <row Id="1137" PostId="727" Score="0" Text="I can not remember the complexity, but busy beaver is easy to understand, easy to prove a given solution, and really really really hard to solve for more than 4 or 5 nodes. For 1 and 2 nodes it is trivial, for around 3 it get to be an hours lesson. By 5 no one has done it yet." CreationDate="2017-06-16T16:08:20.887" UserId="204" />
  <row Id="1183" PostId="727" Score="0" Text="If x=3 and y=5 then x+y=8. Given 17, what are x and y? The student might be able to grasp the Knapsack problem, with a clear explanation." CreationDate="2017-06-17T16:01:24.180" UserDisplayName="user737" />
  <row Id="12093" PostId="727" Score="0" Text="Knapsack problem: https://imgs.xkcd.com/comics/np_complete.png" CreationDate="2018-04-18T23:50:57.610" UserId="283" />
  <row Id="12111" PostId="727" Score="1" Text="&quot;*NP problems are hard to solve*&quot; is not true, which makes it unclear whether the actual question is about NP, NP-hard, or something else." CreationDate="2018-04-19T21:33:52.983" UserId="1219" />
  <row Id="12143" PostId="727" Score="0" Text="A simplified example of why hashing is one-way: the modulus operator (it's also one-way). There are multiple (infinite) inputs that give the same output. Given `x % 10 == 3`, what is `x`? It could be any number ending in `3`." CreationDate="2018-04-27T13:32:31.467" UserId="4570" />
  <row Id="1131" PostId="728" Score="5" Text="Does it have to be black board, or would you like other unplugged ideas?" CreationDate="2017-06-16T15:57:23.193" UserId="204" />
  <row Id="1140" PostId="728" Score="1" Text="@richard Based on the context of this question (and the presence of other unplugged discussions), I think this question specifically focuses on projector v. board." CreationDate="2017-06-16T16:51:36.977" UserId="76" />
  <row Id="1141" PostId="728" Score="3" Text="Alternatives I've seen are using a tablet pen to write/draw on-screen, and a desk-mounted camera to project writing from a sheet of paper. Both were far more readable than a blackboard in a large lecture theatre where many students can be sitting far back." CreationDate="2017-06-16T17:02:13.590" UserId="879" />
  <row Id="1149" PostId="728" Score="0" Text="I used to like TurboSee, but it is passe these days. I loved Indoctrinator++. Not so sure about Lava (its a wash). Now I use Look#, it improves my image." CreationDate="2017-06-16T17:15:22.660" UserDisplayName="user737" />
  <row Id="1216" PostId="728" Score="0" Text="Just leaving these links here; anyone feel free to turn them into an answer if appropriate: [Psychophysiology of blackboard teaching](https://micromath.wordpress.com/2010/09/24/psychophysiology-of-blackboard-teaching-2/) by Borovik, [Still Like That Old-Time Blackboard Talk](http://sites.math.rutgers.edu/~zeilberg/Opinion60.html) by Zeilberger." CreationDate="2017-06-17T23:22:15.227" UserId="932" />
  <row Id="1112" PostId="729" Score="0" Text="I find this is a good usage of a blackboard, but I think (I'm not at all sure of this) that chrome can show this for a website when you press F-12..." CreationDate="2017-06-16T14:21:34.533" UserId="150" />
  <row Id="1113" PostId="729" Score="1" Text="@ItamarGreen Yeah, most dev tools in your browser will show it, but a) it's small and b) I don't want to just show the picture, the blackboard helps me _explain_ it." CreationDate="2017-06-16T14:22:49.280" UserId="58" />
  <row Id="1114" PostId="729" Score="0" Text="Which is why this is a good answer ;)" CreationDate="2017-06-16T14:23:13.770" UserId="150" />
  <row Id="1115" PostId="730" Score="3" Text="If the end of the board is reached while indenting, you could even explain a stack overflow with this." CreationDate="2017-06-16T14:23:17.033" UserId="793" />
  <row Id="1116" PostId="730" Score="0" Text="@TuringTux good point. Thanks (I'll add it to the answer. Do you want me to give you credit for that?)" CreationDate="2017-06-16T14:23:58.787" UserId="150" />
  <row Id="1118" PostId="730" Score="0" Text="No, you don't need to :) Nice to see I could bring in something valuable." CreationDate="2017-06-16T14:25:20.837" UserId="793" />
  <row Id="1119" PostId="731" Score="1" Text="+1 Improvising is something I often find easier with a blackboard than with computer tools (for example, modifying a presentation)." CreationDate="2017-06-16T14:27:25.577" UserId="793" />
  <row Id="1120" PostId="731" Score="0" Text="I liked the reference at the last sentence in the footnote ;)" CreationDate="2017-06-16T14:27:37.353" UserId="150" />
  <row Id="1130" PostId="731" Score="1" Text="Greenboards and brownboards are nice, too. We also have SmartBoards and someone here experimented with a &quot;SmoothBoard&quot; (touch-sensitive board on any wall)." CreationDate="2017-06-16T15:26:44.577" UserDisplayName="user737" />
  <row Id="1127" PostId="732" Score="0" Text="That's a much more intuitive example. Thanks!" CreationDate="2017-06-16T15:21:13.633" UserId="27" />
  <row Id="2081" PostId="732" Score="2" Text="I'm not sure what this example is supposed to show, but actually [planarity can be tested in linear time](http://www.combinatorialmath.ca/g&amp;g/articles/planarity.pdf), whereas testing whether a graph is 4-colorable is NP-complete." CreationDate="2017-06-29T02:01:52.880" UserId="1536" />
  <row Id="12297" PostId="732" Score="0" Text="@YuvalFilmus The four color theorem was proved in 1976. It was the first major theorem to be proved using a computer. If a graph can be shown to be planar in linear time, then it must also be 4-colorable, no?" CreationDate="2018-05-04T20:30:05.497" UserId="1244" />
  <row Id="12298" PostId="732" Score="1" Text="@Draco18s Hint: $K_{3,3}$ is 2-colorable although it's not planar." CreationDate="2018-05-04T20:32:04.217" UserId="1536" />
  <row Id="12299" PostId="732" Score="0" Text="@YuvalFilmus Ah, I was thinking about it backwards. :)" CreationDate="2018-05-04T20:37:21.690" UserId="1244" />
  <row Id="1129" PostId="733" Score="2" Text="This question is probably a little too broad at the minute—are there any more *specific* constraints that you have to narrow down the answer set? At the minute, there are many languages that *might* help, but it'd be helpful to describe exactly what the &quot;tools for expert programmers&quot; are. Also, 2D games or 3D (or both)? Do you want a general purpose language, or would a game-specific language/framework be useful?" CreationDate="2017-06-16T15:26:20.147" UserId="2" />
  <row Id="1132" PostId="733" Score="1" Text="I have some potential answers for this, but it depends on age and where you want your advanced students to go. A little more information re: background, language, and objectives for how advanced you want the developers to be would help." CreationDate="2017-06-16T15:58:40.760" UserId="76" />
  <row Id="1135" PostId="733" Score="0" Text="Agree that it's pretty broad. Game programming could cover a ton of ground. And a beginner could be a 5 year old in kindergarten or a 35 year old career changer. There's a good discussion in here somewhere, but I think it needs to be a little more focused." CreationDate="2017-06-16T16:04:39.100" UserId="30" />
  <row Id="1142" PostId="733" Score="2" Text="Solid revision - makes this a much more answerable question now." CreationDate="2017-06-16T17:06:25.820" UserId="76" />
  <row Id="9783" PostId="733" Score="1" Text="This Coursera course from Rice University uses building games to teach programming in Python: https://www.coursera.org/learn/interactive-python-1. The course covers some fundamentals of game programming along the way." CreationDate="2018-01-22T23:33:02.257" UserId="3982" />
  <row Id="1124" PostId="734" Score="3" Text="Please do not remove the parenthetical about the date. The remark isn't just a side-note; it shows that the demo had staying power on impressionable young minds." CreationDate="2017-06-16T15:11:54.827" UserId="871" />
  <row Id="1125" PostId="734" Score="0" Text="Quite right, my apologies." CreationDate="2017-06-16T15:16:03.030" UserId="150" />
  <row Id="1126" PostId="734" Score="0" Text="I did almost exactly this lesson for years, but I added a computer program into the mix - I created a PB&amp;J simulator, with a syntax and a set of instructions. They had to open and close drawers with their two hands, take out plates, knives, etc... I pasted their &quot;code&quot; into my simulator, and if the end result was a sandwich, they were allowed to actually make it *only following their own instructions*.  There were some peanut-buttery hands in that classroom ;-)" CreationDate="2017-06-16T15:20:20.077" UserId="27" />
  <row Id="1343" PostId="734" Score="0" Text="I was going to recommend this.  The younger the children the better it works.  However, it's important not to focus too much on funny failures (as is tempting to do) if your doing this to start stressing algorithms in general.  Make sure to try to act like a computer, including simply failing to do anything for some invalid input (rather then doing the wrong thing).  if someone uses poor english syntax give them a syntax error.  if someone tells you something too general tell them you don't now that method/keyword, try to focus on a small set of 'predefined' API calls you understand." CreationDate="2017-06-19T16:24:25.690" UserId="1008" />
  <row Id="1345" PostId="734" Score="0" Text="Oh, also make sure you ask about peanut allergies ahead of time!!  or maybe just be on the safe side and stick with a jelly sandwich." CreationDate="2017-06-19T16:25:20.893" UserId="1008" />
  <row Id="1144" PostId="735" Score="0" Text="Yes! Project *ON* the whiteboard, and write on it. This is my main mode of lecturing. I have a page scan thing that I can project the textbook or other printed material, and I can connect to the computer to project that, and switch back and forth. The whiteboard is always there, so I can even leave notes up when I am not lecturing (projector is off). Why anyone would do anything different is beyond me." CreationDate="2017-06-16T17:09:28.267" UserDisplayName="user737" />
  <row Id="1138" PostId="736" Score="0" Text="Actually, we have already considered Lua and Phyton/Pygame. Probably Phyton is a bit more beneficial as a programming language as it has a greater community." CreationDate="2017-06-16T16:41:44.060" UserId="868" />
  <row Id="1147" PostId="737" Score="0" Text="The whiteboard-top desk is an interesting idea. What is next, the screen-desks from *Ender's Game*? (I wrote a program a long time ago to march letters around the edge of my screen...)" CreationDate="2017-06-16T17:11:47.603" UserDisplayName="user737" />
  <row Id="1205" PostId="737" Score="0" Text="Whiteboard desks are awesome. Mine aren't specifically whiteboard painted but they work with dry erase markers. I have an Expo marker on me all the time and can write on the desk to help." CreationDate="2017-06-17T21:01:12.903" UserId="30" />
  <row Id="1143" PostId="738" Score="0" Text="Definitely, the ability to point, etc is a huge advantage. Getting a bunch of light projected on oneself is not." CreationDate="2017-06-16T17:06:47.900" UserDisplayName="user737" />
  <row Id="1145" PostId="738" Score="0" Text="@nocomprende Fortunately, my projector and my blackboard don't overlap too much. (If you can't use them in parallel it sucks.)" CreationDate="2017-06-16T17:11:08.930" UserId="877" />
  <row Id="7344" PostId="740" Score="0" Text="One reason I like Unity is because its everywhere. students love it when they can see what they build and quickly share it with their friends. Unity should be the go to option for anything to do with game teaching." CreationDate="2017-08-27T07:20:27.667" UserId="2605" />
  <row Id="1151" PostId="743" Score="1" Text="What does Amelia Bedilia have to do with CS?" CreationDate="2017-06-16T19:32:47.350" UserId="27" />
  <row Id="1158" PostId="743" Score="0" Text="I've done that with Dr. Seuss books. Cat &amp; the Hat Returns is good for recursion. Too many Daves is good for arrays or lists." CreationDate="2017-06-16T20:54:48.453" UserId="30" />
  <row Id="1154" PostId="746" Score="1" Text="Welcome to CSE!" CreationDate="2017-06-16T19:59:52.273" UserId="27" />
  <row Id="1159" PostId="748" Score="0" Text="Welcome to CSE!  We're very glad to have you here.  This answer needs a little work, though. How will this help OP's students to think algorithmically?" CreationDate="2017-06-16T20:55:03.210" UserId="27" />
  <row Id="1160" PostId="748" Score="0" Text="In scratch you can visually build loops, conditionals, functions, and return events, it's a whole language that is more approachable to beginners, and maybe might incite more their inquisitive nature. &#xA;It helps by literally making them shape visually an algorithm or program, they could also share it with fellow students and get other &quot;code&quot; from the community, it also has some fun features such as running a loop to play sounds or images." CreationDate="2017-06-16T20:58:02.343" UserId="892" />
  <row Id="1161" PostId="748" Score="0" Text="Good improvements.  Keeping the quality of the questions and answers high here is a really big deal, because it's what makes the whole enterprise worthwhile.  I hope to keep seeing you around the site!" CreationDate="2017-06-16T21:00:56.487" UserId="27" />
  <row Id="1166" PostId="749" Score="0" Text="This is a beautiful answer. Very well thought out. Welcome to CSE! I hope we hear more from you." CreationDate="2017-06-17T01:44:19.310" UserId="27" />
  <row Id="1176" PostId="750" Score="1" Text="I never realized that sudoku-solving is an NP problem. I've assigned this as a (hard) lab before - I will do so again prior to the NP unit. And with the way it links to MT San's example... what a cool setup!" CreationDate="2017-06-17T13:48:52.027" UserId="27" />
  <row Id="1185" PostId="750" Score="1" Text="I am not a sudoku fan, but relating it to map coloring is absolutely stunning! &quot;*This is a good day to die!*&quot;" CreationDate="2017-06-17T16:05:40.273" UserDisplayName="user737" />
  <row Id="1171" PostId="751" Score="0" Text="This is a good answer, but if you can add details about how Turtle Roy teaches you to think algorithmically, it would really make this into a great answer." CreationDate="2017-06-17T08:54:56.150" UserId="150" />
  <row Id="1178" PostId="751" Score="0" Text="Also, welcome to CSE!" CreationDate="2017-06-17T15:19:00.583" UserId="27" />
  <row Id="1174" PostId="753" Score="1" Text="Welcome to Computer Science educators! This answer doesn't exactly answer the question. The question asked about advantages of writing tests on paper, and you answer is addressing disadvantages of doing tests on computers. While that is related, it is not directly answering the question. Could you please edit your answer so that it addresses the advantages, so it fits the question?" CreationDate="2017-06-17T12:39:35.143" UserId="150" />
  <row Id="1180" PostId="754" Score="3" Text="This is quite a deep question.To some degree, your mind is what you're ultimately sharing, so I'm not sure you want to get past it as much as figure out better pathways to sharing it." CreationDate="2017-06-17T15:23:35.857" UserId="27" />
  <row Id="1954" PostId="754" Score="0" Text="I have noticed that a lot of things are thought in the order learnt. That over generations as new teachers inevitably tack things onto the end, they are thought in the order that they were discovered. Why not try teaching it backwards." CreationDate="2017-06-27T17:06:49.777" UserId="204" />
  <row Id="1985" PostId="754" Score="0" Text="I feel I should explain my downvote and close flag. There is nothing CS Educators specific about this question. There isn't even anything professional educator specific since all people teach others in one way or another (e.g. parents and children). Every human is the sum of their experiences, and that drives all their actions, including but not limited to teaching. A slight change to the verb and this could apply to anything. In conclusion, not a bad question but also not a good fit for this site." CreationDate="2017-06-28T06:23:48.733" UserId="1166" />
  <row Id="2004" PostId="754" Score="2" Text="I disagree about the relevance for two reasons. One is that if we don't talk about such things _here_ most of us won't see the discussion. More important, however is that CS is different since many of us learned the subject differently from how a, say, math prof learned it. Many are self taught, many came from other fields." CreationDate="2017-06-28T12:17:11.080" UserId="1293" />
  <row Id="2005" PostId="754" Score="2" Text="It is a disturbing revelation to many newish teachers that their students are not like them. Your students are nothing like you are. Very small number of exceptions. Learn to deal with that." CreationDate="2017-06-28T12:19:19.037" UserId="1293" />
  <row Id="2006" PostId="754" Score="1" Text="Reinforce what @Ben_I said. Your main job is to teach your students how you think, not specific information. How do  you think about problems? How do you think about finding solutions? How do you structure knowing?" CreationDate="2017-06-28T12:21:26.287" UserId="1293" />
  <row Id="2018" PostId="754" Score="0" Text="@Buffy thank you for your points, particularly about &quot;having the discussion *here*&quot;. I am trying to teach the students how I think of problems, algorithms, how I use various tools, etc. My question is simply that I was driven from within to attack and overcome problems, in a nearly pigheaded way that kept me going, and my students are basically driven by the external need to change careers as adults and get a job (this is a vocational program). Very different mindset. I can't expect them to be excited about things *in the same way* that I am. So... what do I do?" CreationDate="2017-06-28T14:05:52.547" UserDisplayName="user737" />
  <row Id="2046" PostId="754" Score="0" Text="Asking a question with that additional information you just provided would be a good move I think. You have a specific background and your students have specific backgrounds and needs as well. The context would be very helpful for answerers. The less general the better. But as it is, it's kinda the CS Educators equivalent of [boat programming](https://meta.stackexchange.com/a/14486/361693). Normally I would suggest editing but this is a bit old and has answers already." CreationDate="2017-06-28T17:04:23.453" UserId="1166" />
  <row Id="7147" PostId="754" Score="0" Text="@PiyushParikh We're kinda different from Stack Overflow in that we permit some questions whose form would not fit on Stack Overflow. They tend to aggregate knowledge that couldn't be collected on a more specific question. A few of our active users are former teachers, and so they don't run into specific issues on a day to day basis, but they have found some of the bigger questions that need to be answered." CreationDate="2017-08-21T12:11:22.077" UserId="58" />
  <row Id="1179" PostId="755" Score="0" Text="Welcome to CSE! You are very articulate young lady. I hope we hear more from you as you continue to learn about computer science. :)" CreationDate="2017-06-17T15:19:52.833" UserId="27" />
  <row Id="1194" PostId="756" Score="1" Text="Is there data and/or research to support this? I don't necessarily disagree (and have some theories of my own), but I'd first like to read more about the fundamental premise to the question." CreationDate="2017-06-17T17:01:11.980" UserId="76" />
  <row Id="1197" PostId="756" Score="1" Text="This question could really benefit from more details or examples of this, in things you saw. Could you add some examples?" CreationDate="2017-06-17T17:42:32.697" UserId="150" />
  <row Id="1212" PostId="756" Score="2" Text="Anecdotally, here is [Berkeley's CS1 final grade distribution](http://i.imgur.com/JhGhWgJ.png), which displays some level of bimodality." CreationDate="2017-06-17T22:17:10.583" UserId="930" />
  <row Id="1237" PostId="756" Score="0" Text="@Peter I suppose I was not so much alluding to research, or actual test results, but instead to the perception that some students grasp the ideas at the beginning much faster and more completely. Others seem to struggle no matter how long they go on. It is not to do with 'intelligence' but more of a predisposition." CreationDate="2017-06-18T13:12:26.987" UserDisplayName="user737" />
  <row Id="1661" PostId="756" Score="0" Text="Linear Algebra was the &quot;reverse binomial&quot; class for me, in college. I failed the class hard and for a while I actually tried to find people who were currently, or had previous, taken the course and asking them how they thought they were doing / did.  I ran into *one person* who had gotten a C.  Mind, my sample size was pretty small (about thirty people), but they all claimed observation of the reverse binomial as well." CreationDate="2017-06-23T17:06:39.427" UserId="1244" />
  <row Id="2067" PostId="756" Score="0" Text="@nocomprende I'm saying that any given person either had an A or an F. There was no middle ground." CreationDate="2017-06-28T19:01:13.140" UserId="1244" />
  <row Id="9239" PostId="756" Score="0" Text="This question is also being discussed somewhat more broadly on https://cogsci.stackexchange.com/questions/1612/what-is-the-distribution-of-performance-in-academic-programming-subjects" CreationDate="2017-12-16T01:43:41.130" UserId="2887" />
  <row Id="1182" PostId="761" Score="1" Text="Someone I know would say, &quot;**Love them enough** to give firm directions.&quot; Gerald M. Weinberg says a similar thing about overcoming lack of self-esteem to directly address the actual problem in a situation." CreationDate="2017-06-17T15:55:47.953" UserDisplayName="user737" />
  <row Id="1184" PostId="761" Score="1" Text="If this is a lab, do you have the ability to control their screens?  If you present with powerpoints, you could project them onto the students' screens as you go, and when you want them to watch you, put up a &quot;Look at instructor&quot; slide" CreationDate="2017-06-17T16:04:08.650" UserId="27" />
  <row Id="1188" PostId="761" Score="0" Text="@BenI. I could actually control their screens. I could see their screens using software also. But I stubbornly keep thinking: A) don't they *want* to learn, and B) am I not interesting enough to watch so that they can learn better, faster, easier? Aren't they *&quot;constructive-selfish&quot;* enough to do that?" CreationDate="2017-06-17T16:12:09.940" UserDisplayName="user737" />
  <row Id="1189" PostId="764" Score="1" Text="Note: [relevant meta post](https://cseducators.meta.stackexchange.com/questions/129/a-student-on-the-educators-site/130#130)" CreationDate="2017-06-17T16:14:04.420" UserId="919" />
  <row Id="1198" PostId="764" Score="1" Text="I feel like this might be leaning on the broad side; I can think of many that *might* fit your criteria (take a look through [this huge list](https://www.class-central.com/courses/recent?subject=cs&amp;sort=rating-up&amp;lang=english) to see what I mean). If you could narrow it down to one or two subjects, and a specific level/objective, it might be easier to give you a concrete recommendation." CreationDate="2017-06-17T17:49:59.683" UserId="2" />
  <row Id="1199" PostId="764" Score="0" Text="By counting towards your transcript, are talking about for college admission? If so, that depends in part on what state you live in. The safest bet in that regard is to look out your local community colleges." CreationDate="2017-06-17T18:10:57.130" UserId="76" />
  <row Id="1200" PostId="764" Score="0" Text="It feels to me that the experts on this site may not be really too familiar with this topic." CreationDate="2017-06-17T19:04:20.230" UserId="41" />
  <row Id="1202" PostId="764" Score="0" Text="I removed what I felt were the truly subjective/impossible-to-answer requirements. Feel free to roll back if necessary, but I think that one question will give you better results." CreationDate="2017-06-17T19:32:55.037" UserId="76" />
  <row Id="1206" PostId="764" Score="0" Text="@Peter I'm sorry but it's rather important that it's cheap, and really preferable that it's likely to count towards my transcript. I didn't roll back, but simply added those two back in." CreationDate="2017-06-17T21:06:43.183" UserId="919" />
  <row Id="1207" PostId="764" Score="0" Text="Fair point on the former. As for the latter, I simply don't know think that that's a question appropriate for SE. You need to talk to your local school district about that issue." CreationDate="2017-06-17T21:11:33.780" UserId="76" />
  <row Id="1209" PostId="764" Score="0" Text="@Peter, good point, I edited to change that aspect to make it more fulfillable." CreationDate="2017-06-17T21:19:24.303" UserId="919" />
  <row Id="1217" PostId="764" Score="0" Text="This question seems to be about learning CS, not teaching it." CreationDate="2017-06-18T04:09:37.513" UserId="58" />
  <row Id="8325" PostId="764" Score="0" Text="Not a course, but this ARM document covers an implementation of architecture from a mainly software perspective. Skim through it, and it may give you a feel for the scope of the problem. http://infocenter.arm.com/help/topic/com.arm.doc.dui0552a/DUI0552A_cortex_m3_dgug.pdf Questions on the details might be on topic on EE.SE." CreationDate="2017-09-25T21:19:35.120" UserId="41" />
  <row Id="1241" PostId="769" Score="0" Text="Showing my projected image on their screens is an idea, but I still want them to look at me because I am pointing at the main screen (which is actually a huge whiteboard), writing on it and putting notes next to the image, etc. They are not able to bring their own computers in, and it is a work training program, so we run it like a workplace. If they can't show workplace-appropriate behavior, they won't be able to keep a job." CreationDate="2017-06-18T13:45:23.583" UserDisplayName="user737" />
  <row Id="1371" PostId="769" Score="0" Text="@nocomprende if my other suggestion is applicable (have the ability to &quot;take over&quot; their screens), then that still solves your problem. You can put a boring screen saver on your screen..." CreationDate="2017-06-20T10:16:03.947" UserId="150" />
  <row Id="1203" PostId="770" Score="1" Text="Please clarify what you mean by a explanation that does not include an example. Otherwise, this may be a dup.&#xA; My answer in https://cseducators.stackexchange.com/questions/299/simple-pointer-examples-in-c contains an explanation of an example." CreationDate="2017-06-17T20:06:21.337" UserId="59" />
  <row Id="1312" PostId="770" Score="0" Text="Does this have to be in C? C is heavily criticized for its design wrt memory management, pointers in particular. If you could avoid using C, there are plenty of languages where some of the problems endemic to it have been avoided, for example, OCaml, Pascal, Go, even Forth to some degree." CreationDate="2017-06-19T11:22:17.420" UserId="1000" />
  <row Id="1242" PostId="771" Score="0" Text="Sometimes the students glare at their screens, ha ha. My co-instructor suggested that I tell the students to turn screens off when I lecture. We have software which would let us disconnect internet access or even lock their computers when we want to. Perhaps having a genie on one's desk is just too great a temptation, but I didn't grow up with that, so I am unsure how to handle it. I expect them to want to learn." CreationDate="2017-06-18T13:51:20.713" UserDisplayName="user737" />
  <row Id="1243" PostId="772" Score="2" Text="I am tempted to say that all programming books are &quot;footnotes to K&amp;R&quot;. Students absolutely have to understand how a computer works in the way you describe, otherwise they would be no better off than a surgeon who does not know about blood circulation." CreationDate="2017-06-18T13:55:34.463" UserDisplayName="user737" />
  <row Id="8324" PostId="773" Score="0" Text="I had a quick scan through the first part. I wouldn't say it's undergrad level, but maybe I missed some detail by not looking at the lab work. It feels to cover too much of the low-level implementation (an add in verilog is '+', not a mess of gates!), none of the interesting parts of an architecture, and really feels quite software orientated. It addresses it's stated aims, but for computer architecture, to the point where you'd understand someone explaining a specific MCU implementation, you need more detail in the middle layer." CreationDate="2017-09-25T20:37:10.687" UserId="41" />
  <row Id="1211" PostId="780" Score="4" Text="Make sure, very sure, that not only is it anonymous, but that it's clear it's anonymous, and that you want to be told the things wrong with your teaching - I know I was once given a survey like that, and it wasn't quite clear whether or not it was anonymous, so I gave the most median responses possible, and didn't say what I actually thought." CreationDate="2017-06-17T22:15:22.640" UserId="919" />
  <row Id="1240" PostId="781" Score="1" Text="I would like to read about that &quot;psychology experiment&quot;. My point was not so much about the actual grades (it is difficult for me to assign scores as low as the students understanding shows in many cases) as the idea that some few students really have difficulty taking on the early concepts. So the finding that bimodality shows more at the 100 level is what I am talking about." CreationDate="2017-06-18T13:28:35.693" UserDisplayName="user737" />
  <row Id="3911" PostId="781" Score="0" Text="I think we should be careful concluding &quot;bimodality is a myth&quot; just because of that one paper. For one thing, it's only at one university. For another, the data is spread over 17 years (how do you know all the bimodal ones don't come from the past couple years, as CS has become more inclusive?). Also, there are clear biases we all know about, e.g. mentioned in Ben I's answer (&quot;let them go with grades of C&quot;). Just because the final grades are not bimodal doesn't mean student preparation levels are not." CreationDate="2017-07-09T05:56:28.273" UserId="294" />
  <row Id="3912" PostId="781" Score="0" Text="I've also got some concerns about the stats in that paper. For example, they say &quot;We used Hartigan's Dip Test, because it was the only one available in GNU R at the time of analysis&quot; - I have no idea if it's the right tool for this type of thing. They also say &quot;we only performed Hartigan's Dip Test on distributions where the kurtosis was less than 3&quot; - because WIKIPEDIA says you can only be bimodal if kurtosis &lt; 3. Seems VERY sketchy to me (and the wikipedia page doesn't link to legitimate, published sources either)." CreationDate="2017-07-09T05:59:38.383" UserId="294" />
  <row Id="3913" PostId="781" Score="2" Text="Finally, just because one test fails to reject the null hypothesis that the distribution is unimodal does not mean you can conclude it's unimodal. It could be bimodal in a way that this one test doesn't detect. Generally, we don't &quot;accept the null&quot; - we only &quot;fail to reject&quot; it. Good statistics should try many ways to reject it, but this paper tries only one. Now, I'm not much of a statistician, so please take my criticisms with a grain of salt, but please also take that paper with a grain of salt!" CreationDate="2017-07-09T06:04:03.193" UserId="294" />
  <row Id="3941" PostId="781" Score="0" Text="@DavidWhite you are a better Statistician than I." CreationDate="2017-07-10T12:27:20.280" UserDisplayName="user737" />
  <row Id="1220" PostId="784" Score="1" Text="In other words, if a code path is not tested then it's broken. I now start to grasp why introducing graduates to do validation (rather than demonstrating correct behaviour is possible) is such a challenge." CreationDate="2017-06-18T10:16:54.247" UserId="41" />
  <row Id="1662" PostId="784" Score="0" Text="*`to be able to pull together many different concepts in order to do almost anything`* For sure. One of the classes I had in college featured a group project, I only vaguely remember the details, involved CGI web...stuff.  Anyway, down to the wire my group couldn't get it to run, said &quot;duck it&quot; and submitted what we had anyway.  We were only one of two groups to *submit anything* and received a C." CreationDate="2017-06-23T17:12:05.293" UserId="1244" />
  <row Id="17923" PostId="784" Score="0" Text="the link at &quot;investigating this bimodality for years&quot; doesn't work for me, access denied. Do you have the paper title so I can google it manually?" CreationDate="2021-04-28T10:00:15.757" UserId="9827" />
  <row Id="17924" PostId="784" Score="0" Text="This was four years ago, unfortunately.  I don't have the link any more, and I no longer remember what it was referring to.  The most important link, though is &quot;Evidence That Computer Science Grades Are Not Bimodal&quot; by Patitsas, Berlin, Craig, and Easterbrook." CreationDate="2021-04-28T12:13:04.620" UserId="27" />
  <row Id="2373" PostId="785" Score="0" Text="Add 4.5. What would _you_ do to improve the course/situation." CreationDate="2017-07-02T14:48:24.027" UserId="1293" />
  <row Id="1253" PostId="786" Score="0" Text="A concrete walkway is open for extension but closed to modification! Think of the time, effort and mess of changing it." CreationDate="2017-06-18T16:07:25.217" UserDisplayName="user737" />
  <row Id="1254" PostId="786" Score="0" Text="what do you mean by &quot;a concrete walkway&quot;?" CreationDate="2017-06-18T16:27:12.787" UserId="150" />
  <row Id="1256" PostId="786" Score="0" Text="Poured cement mixed with rocks, what British people often call 'pavement', I think." CreationDate="2017-06-18T16:36:23.657" UserDisplayName="user737" />
  <row Id="1257" PostId="786" Score="0" Text="oh. Now i get it. I feel sort of *dense* now. (yes, that pun was intended)" CreationDate="2017-06-18T16:43:36.137" UserId="150" />
  <row Id="1262" PostId="787" Score="0" Text="I know someone who will probably have a lot of insight about this issue - I will next see them on Monday the 3rd, so I can ask them about it and post at that point" CreationDate="2017-06-18T17:07:55.643" UserId="27" />
  <row Id="17092" PostId="787" Score="0" Text="By the way, I ended up going with the last option, and have been happy with it." CreationDate="2020-09-26T16:55:45.397" UserId="938" />
  <row Id="1221" PostId="788" Score="2" Text="All of this is why mastering teaching (if that's indeed possible) takes years if not decades." CreationDate="2017-06-18T10:40:25.800" UserId="237" />
  <row Id="1236" PostId="788" Score="0" Text="Thank you for the ideas and perspective. It throws off my awareness of the students' grasp of ideas when they turn in labs that demonstrate something, and in the next lab or two, it appears that they didn't understand at all. We've had to go back and reteach ideas from weeks ago sometimes. This is embarrassing for concepts like assignment, or parameters. I can't recall if those ever gave me trouble or not!" CreationDate="2017-06-18T13:04:25.987" UserDisplayName="user737" />
  <row Id="1238" PostId="788" Score="1" Text="I was also really strong at retention in school, but it turns out many/most kids aren't.  I've definitely also retaught things, or had kids apparently learn things only to apparently forget they were ever taught them weeks or months later.&#xA;&#xA;The key in that case is to reduce the amount of time between repetition of task types/skills practice.  Spaced repetition is a huge concept in learning but getting the actual spacing right, especially when first learning/mastering a skill, is very important." CreationDate="2017-06-18T13:17:34.330" UserId="938" />
  <row Id="1222" PostId="791" Score="0" Text="Could you please add a context? What is the level of the students?" CreationDate="2017-06-18T11:42:56.623" UserId="150" />
  <row Id="1232" PostId="791" Score="0" Text="High school students I'm teaching next year for their בגרות exam. They have only some  basic knowledge in procedural programming and the tip of the iceberg in Object-Oriented stuff." CreationDate="2017-06-18T12:44:00.463" UserId="77" />
  <row Id="1233" PostId="791" Score="0" Text="Again, you need to write these things in the question itself. BTW, בגרות are called matriculation exams (or finals) in english ;)" CreationDate="2017-06-18T12:44:59.343" UserId="150" />
  <row Id="1234" PostId="791" Score="0" Text="I knew about the word &quot;matriculation&quot;, just wasn't sure if those exams are actually known by this name (I have never heard anyone using this word in English so I wasn't confident about using it). Added the info to the question, thank you for the tip." CreationDate="2017-06-18T12:48:06.897" UserId="77" />
  <row Id="1250" PostId="791" Score="0" Text="Does &quot;Pole of rings&quot; mean *Towers of Hanoi*? I was going to suggest that, although it is better as an example of recursion. But they are related, so that seems good!" CreationDate="2017-06-18T16:00:56.823" UserDisplayName="user737" />
  <row Id="1261" PostId="791" Score="0" Text="Note that these analogies [can be very confusing](https://cs.stackexchange.com/q/76871/40243) to some people." CreationDate="2017-06-18T17:06:32.270" UserId="953" />
  <row Id="1271" PostId="791" Score="0" Text="@nocomprende Yes, it's based on the same idea" CreationDate="2017-06-18T18:17:27.197" UserId="77" />
  <row Id="1319" PostId="791" Score="0" Text="Forth language (or derivatives). Maybe it's worth a try to implement a very simple interpreter of a very simple subset of it." CreationDate="2017-06-19T12:38:48.720" UserId="1006" />
  <row Id="1342" PostId="791" Score="0" Text="While it's not an analogy, an interesting real-world use-case is [infix-expression parsing](https://en.wikipedia.org/wiki/Shunting-yard_algorithm) **Edit** whoops, just saw [this answer](https://cseducators.stackexchange.com/a/804/1019). I recommend something like that so as to minify confusion. Fabricated scenarios seem like bad examples to use in my opinion, but you can always incorporate the analogous railroad junction." CreationDate="2017-06-19T16:20:09.267" UserId="1019" />
  <row Id="1369" PostId="791" Score="0" Text="A real life example we used in our CS classes (even let the students implement a sorting algorithm with it) is a siding (rail) for waggons. Unless using cranes you can only push/pop waggons at these. Although you could easily peek the second waggon in line." CreationDate="2017-06-20T08:34:24.923" UserId="1053" />
  <row Id="13973" PostId="791" Score="0" Text="The unwashed clothes on the floor of a teenagers bedroom." CreationDate="2018-11-27T13:31:32.933" UserId="1537" />
  <row Id="1246" PostId="792" Score="8" Text="The spring-loaded stack of trays in a (university) cafeteria was in fact the origin of the name of the data structure, at least according to common legend." CreationDate="2017-06-18T14:41:47.530" UserId="945" />
  <row Id="1299" PostId="792" Score="0" Text="I had an A-Level computing teacher who got so carried away with explaining the mechanism of the stack of plates he forgot that he was supposed to actually be explaining a stack in computing terms." CreationDate="2017-06-19T08:54:11.060" UserId="988" />
  <row Id="1224" PostId="793" Score="0" Text="I treat pancakes as stack, popping the top one off and dunking it in the syrup that's sitting on the side. But that might just be me. :)" CreationDate="2017-06-18T11:47:19.683" UserId="166" />
  <row Id="1225" PostId="793" Score="1" Text="Pancakes as a stack or as a queue -- is there anything they can't do???? :-)" CreationDate="2017-06-18T11:54:42.403" UserId="237" />
  <row Id="1226" PostId="793" Score="1" Text="Stack, or queue, doesn't matter much, they get consumed either way. That's something that's usually left out of stack lessons: that the stack is consumed. As to pancakes and what can't they do: Survive long on my plate. :)" CreationDate="2017-06-18T11:59:25.417" UserId="104" />
  <row Id="1251" PostId="793" Score="0" Text="I was thinking of a messy desk piled with papers, but maybe we don't want to encourage that?" CreationDate="2017-06-18T16:04:28.363" UserDisplayName="user737" />
  <row Id="1230" PostId="796" Score="0" Text="Of course, but that's the *definition* of the stack. I'll definitely explain that as an origin to the name of the stack, but I need some use-cases for programming and life. (I hope I'm clear enough)" CreationDate="2017-06-18T12:41:34.307" UserId="77" />
  <row Id="1231" PostId="796" Score="0" Text="@YotamSalmon then you should write that in your question. I'll edit my answer soon." CreationDate="2017-06-18T12:44:00.420" UserId="150" />
  <row Id="1235" PostId="796" Score="0" Text="@YotamSalmon edited the answer :)" CreationDate="2017-06-18T12:59:12.367" UserId="150" />
  <row Id="1252" PostId="796" Score="2" Text="Tracing links and the Undo operation should be familiar examples." CreationDate="2017-06-18T16:05:36.697" UserDisplayName="user737" />
  <row Id="1266" PostId="796" Score="3" Text="I would definitely mention the browser's back button. It provides a non-metaphorical example, that's easy to understand, and demonstratively proves that stacks are useful in programming." CreationDate="2017-06-18T17:32:41.013" UserId="954" />
  <row Id="4513" PostId="796" Score="0" Text="Since the bullets are identical to each other, this analogy loses me. Although a stack matches the physical mechanism it is more complicated than necessary to model the purpose of the magazine." CreationDate="2017-07-19T11:23:28.353" UserId="949" />
  <row Id="4514" PostId="796" Score="0" Text="@JamesMcLeod bullets are not identical in the sense that calling the java `.equals()` would return `false`. They are *instances* of `Bullet`, but are no more the same than two people." CreationDate="2017-07-19T11:59:29.413" UserId="150" />
  <row Id="13940" PostId="796" Score="0" Text="Some people might find your example triggering." CreationDate="2018-11-17T01:56:28.763" UserId="283" />
  <row Id="13941" PostId="796" Score="0" Text="@EllenSpertus If that's a pun, I like it. If it's unintended, then I'll say this: My answer isn't meant to trigger anyone." CreationDate="2018-11-17T07:36:57.800" UserId="150" />
  <row Id="1248" PostId="797" Score="0" Text="Possible duplicate of [Is it more effective to teach low level languages before high level ones or vice versa?](https://cseducators.stackexchange.com/questions/212/is-it-more-effective-to-teach-low-level-languages-before-high-level-ones-or-vice)" CreationDate="2017-06-18T15:02:43.527" UserId="58" />
  <row Id="1320" PostId="798" Score="1" Text="Welcome to CSE! I hope we hear more from you in the future." CreationDate="2017-06-19T12:41:47.390" UserId="27" />
  <row Id="4142" PostId="801" Score="0" Text="You can, of course, use postfix as well and show the workings of a RPN (Reverse Polish Notation) calculator such as the HP15C, my all time favorite calculator. 3 4 5 * + yields 23." CreationDate="2017-07-12T12:13:16.553" UserId="1293" />
  <row Id="1255" PostId="802" Score="1" Text="Wow, that's a great example! I love it!" CreationDate="2017-06-18T16:27:24.900" UserId="77" />
  <row Id="1263" PostId="803" Score="0" Text="Teacher's desk was at the back, so had to walk past students to get to the front anyway. I understand now. I am thinking about the dynamics of teaching adults though, some of whom are older than I am. I will ponder this." CreationDate="2017-06-18T17:08:53.013" UserDisplayName="user737" />
  <row Id="1264" PostId="803" Score="0" Text="@nocomprende I think if you make the policy clear, no one will be offended." CreationDate="2017-06-18T17:10:37.560" UserId="919" />
  <row Id="1265" PostId="803" Score="0" Text="Yes. It probably has more to do with my personality though. As Gerald M. Weinberg would say, &quot;I am in serious danger of growing.&quot; I need to hit The Self-Esteem Shop (it actually exists)." CreationDate="2017-06-18T17:13:55.283" UserDisplayName="user737" />
  <row Id="1269" PostId="804" Score="0" Text="It's a nice example to be sure, but if you try this with your class, be aware that Shunting Yard can be tricky for kids who are just at the point where they are learning about stacks.  You have to break this one down very carefully for them." CreationDate="2017-06-18T17:56:31.410" UserId="27" />
  <row Id="1344" PostId="804" Score="0" Text="You can always start with the analogous railroad junction and talk about how you have to re-order the cars in a way that's easier to evaluate programmatically." CreationDate="2017-06-19T16:24:46.310" UserId="1019" />
  <row Id="1268" PostId="806" Score="0" Text="I love that quote. Well played." CreationDate="2017-06-18T17:39:15.960" UserId="150" />
  <row Id="1272" PostId="809" Score="4" Text="Nice, with a cute ending :)" CreationDate="2017-06-18T18:32:53.993" UserId="27" />
  <row Id="13101" PostId="809" Score="1" Text="Glad it's a computer scientist and not an anthropologist. Otherwise the hex conversion would be cause for using a counter-curse." CreationDate="2018-07-28T23:36:04.727" UserId="104" />
  <row Id="1293" PostId="812" Score="8" Text="Two words: scripting and communication. Knowing the command line is knowing how to write OS scripts to automate your drudgery. It's also an unambiguous way to tell someone what must be done. Even if you prefer GUIs for some other tasks, the command line is *vastly* superior for these tasks." CreationDate="2017-06-19T07:45:10.073" UserId="981" />
  <row Id="1329" PostId="812" Score="0" Text="Show &quot;useful&quot;, &quot;cool&quot;, &quot;fun&quot; things. Student attention span is not very different from goldfish if topic is deemed boring and/or useless. For example: typical file manipulation from command line have little value if you can do it faster with mouse - that's how normal people think. To be honest, all examples given so far in answers would bore me ;)" CreationDate="2017-06-19T13:21:58.703" UserId="685" />
  <row Id="1335" PostId="812" Score="0" Text="@jpmc26 Is there a good example of said drudgery that might speak to students just getting familiar with a CLI?" CreationDate="2017-06-19T14:50:25.860" UserId="76" />
  <row Id="1336" PostId="812" Score="0" Text="@PTwr Is there something &quot;cool&quot; or &quot;fun&quot; that would be a good demo for students in your opinion? That's the needle in a haystack I'm looking for." CreationDate="2017-06-19T14:51:13.273" UserId="76" />
  <row Id="1341" PostId="812" Score="2" Text="@Peter &quot;hacking&quot; routes to redirect facebook to some stupid page, shell as calculator, starting old game with DosBox, [confusing hard/symbolic links](https://xkcd.com/981/), [command porn](https://gist.github.com/syranez/3981941), toys like cowsay. Avoid things that can be done easily, and sometimes with better results, in gui (tracert, basic file operation, compiling) or you will get labeled as &quot;stuck in the past geek&quot; or worse. Its like [math](https://xkcd.com/1050/), don't teach them trigonometry, show them how to do taxes :)" CreationDate="2017-06-19T16:16:05.460" UserId="685" />
  <row Id="1361" PostId="812" Score="2" Text="Here's an idea: why would I want to watch Star Wars: A New Hope in a video player when [I can do it in ascii?](http://lifehacker.com/373571/watch-star-wars-in-text-via-telnet)  ([Video version here if you can't run telnet](http://www.asciimation.co.nz/))" CreationDate="2017-06-19T22:48:17.683" UserId="1042" />
  <row Id="1421" PostId="812" Score="1" Text="Possibly relevant link: [Why are terminal consoles still used?](https://ux.stackexchange.com/questions/101990/why-are-terminal-consoles-still-used) (Disclaimer: One of the answers there is mine.)" CreationDate="2017-06-20T22:06:50.310" UserId="932" />
  <row Id="1433" PostId="812" Score="1" Text="Not directly on point but closely related, I highly recommend *In the Beginning was the Command Line* by Neal Stephenson, as well as *The Art of Unix Programming* by Eric S. Raymond. Both provide both background information and design principles that make understanding the structure of modern computers much easier." CreationDate="2017-06-21T03:15:50.827" UserId="659" />
  <row Id="1473" PostId="812" Score="1" Text="You could give them a small task that they would have to complete every day. Something like creating a file with their name and current date and then upload it to a FTP server. I think that will motivate them to create a script that does it for them and even setup a cron job to automate the process." CreationDate="2017-06-21T14:19:11.200" UserId="1149" />
  <row Id="4724" PostId="812" Score="0" Text="Less typing, easier to answer questions, on stack exchange, more powerful. See also https://askubuntu.com/questions/106039/so-what-is-the-advantage-of-using-the-terminal" CreationDate="2017-07-21T23:14:05.793" UserId="204" />
  <row Id="9416" PostId="812" Score="0" Text="Blocking access to the command line is one of the &quot;security&quot; methods that our district implements. Kids, and most teachers, accounts can't access it." CreationDate="2017-12-26T15:01:22.490" UserId="30" />
  <row Id="12021" PostId="812" Score="1" Text="in high school ? For people that aren't sure to be working professionally in IT later on I do fail to see any advantage. As a dev, I obvisouly value this tools, but outside of my job, I never use a command line tool as I have no specific usage for it (except for ping when my internet doesn't seem answering ...)." CreationDate="2018-04-11T12:05:46.930" UserId="1375" />
  <row Id="21019" PostId="812" Score="0" Text="@Peter I am facing the same problem and I asked a similar question https://cseducators.stackexchange.com/questions/7081/resource-recommendation-for-teaching-the-command-line-file-system-for-high-scho . From my experience if they never use a linux machines they can hardly appreciate the value of CLI. So I was wondering do you have new insight into this question 5 years later ?" CreationDate="2023-03-16T06:00:36.043" UserId="9884" />
  <row Id="1296" PostId="813" Score="25" Text="I'm sorry for being pedantic but this is important if you are teaching people. Your simple little script is full of bad practices. It will [fail on any slightly non-standard file name](https://unix.stackexchange.com/q/131766/22222). *Please* don't show things like that to your class. You are parsing `ls` in a way that is i) unnecessary (`for i in *gif; do ...`), ii) unsafe (see [here](http://mywiki.wooledge.org/ParsingLs) iii) very fragile (if you *must* parse `ls`, at least use `while -r` and  [quote your variables](https://unix.stackexchange.com/q/171346/22222)." CreationDate="2017-06-19T08:42:28.367" UserId="986" />
  <row Id="1298" PostId="813" Score="1" Text="Aso the `f=\`basename $i .gif\`` would be better expressed as `f=$(basename &quot;$i&quot; .gif)` or, even better, without calling an external command at all: `f=${var%%.gif}`." CreationDate="2017-06-19T08:51:01.963" UserId="986" />
  <row Id="1305" PostId="813" Score="0" Text="@terdon I agree with you, but if my years in academia taught me something is that almost every snippet provided by a teacher includes: i) no error check/recovery, ii) at least two minor/one major bad practices, iii) failure in every slightly edge(ish) case, iv) (optional) it doesn't work at all as written. So... the example is pretty much perfect. Very &quot;academy&quot;." CreationDate="2017-06-19T10:01:27.167" UserId="994" />
  <row Id="1307" PostId="813" Score="0" Text="@terdon - yes, but sometimes, honestly not in the real world and the distinction is worth talking about in class. This is an interactive throwaway and it wouldn't be typed in with just an enter.The line that actually does stuff - convert - would first be done with &quot;echo&quot; to check the command before running. Beyond that I'd leave it as is since it would have been tested on it's specific use and would work and it got the job done.&#xA;&#xA;I did have a couple of mistakes above (which the echo line would have caught had I done this in  a shell) - I fixed those now for &quot;post correctness.&quot;\" CreationDate="2017-06-19T10:12:34.890" UserId="237" />
  <row Id="1308" PostId="813" Score="21" Text="No, it won't work. That's the problem. Try it on a file called `foo bar.gif`, let alone `foo\nbar.gif`. Your throwaway only works for very simple cases and is actually far more complex and daunting than it needs to be: `for f in *gif; do convert &quot;$f&quot; -resize 200x200 smaller-&quot;$f&quot;; done`. The `basename` is pointless since you're not recursing so it only removes the `.gif` which you then add back again. And this simpler version can deal with arbitrary file names. In any case, teaching people the robust, portable and correct way is always better than throwaway hacks that will fail easily." CreationDate="2017-06-19T10:21:48.220" UserId="986" />
  <row Id="1310" PostId="813" Score="0" Text="@terdon - yes, for my purposes it will. I don't put spaces in my filenames - if If that were possibly the case when I used it, I would have quoted.&#xA;&#xA;On the other hand, I've had cases where the for doesn't work as well as the while. &#xA;&#xA;More complex and daunting is also a subjective measure.&#xA;&#xA;I gain tremendously from my use of the command line hence it's worth doing for me. If some other way of going about working is easier for you, that's fine for you but the easiest solution is the one that you come up with." CreationDate="2017-06-19T11:00:09.963" UserId="237" />
  <row Id="1311" PostId="813" Score="5" Text="There are no cases (like this) where the `while` works better than `for`. You might be thinking of `for i in $(ls *gif)` which is indeed even worse that what you suggest here. But I do get your point about the easiest being whatever you come up with. And that would be absolutely fine if you were doing it for yourself. If, however, you use this to teach people, then it is not fine and is actively harmful. Do whatever you like at home, but please don't teach bad practices to your students. It's bad for them and bad for whichever poor schmuck hires them and they screw up their server." CreationDate="2017-06-19T11:11:14.593" UserId="986" />
  <row Id="1316" PostId="813" Score="0" Text="There are contexts where they behave differently - that's  how, many years (decades) ago I learned about the while when my first exposure was a for. &#xA;&#xA;The original question was about command line --throw away by definition - not writing script.&#xA;&#xA;Don't worry about my students, they do fine - actually much more than fine." CreationDate="2017-06-19T11:39:56.497" UserId="237" />
  <row Id="1327" PostId="813" Score="2" Text="@terdon remember this is about teaching someone very new to programming. If you throw in too much in an example, even if it's good practice, you risk scaring or driving away your audience who feel it's too much to process.  This is a good start to show the power of a shell and basic commands.  Once the students have understood that later better practices will be taught.  By my experience tutoring has shown me you *can't* teach it all at once or you overwhelm those your teaching.  This is a good example of the power of a shell, though I'd like to see even simpler one liners also shown." CreationDate="2017-06-19T13:10:11.970" UserId="1008" />
  <row Id="1339" PostId="813" Score="0" Text="@Peilonrayz well, as I said I would prefer a simpler example to get the point across, so I sort of agree there.  To keep with the intent of his answer I probably would start with something like &quot;delete all css files that have FIZZBAR at the start of the file name and have -tmp in the name, so that something as simple as &quot;rm FIZZBAR*-tmp*.css&quot; could be used as a trivially easy example that would still be hard to do a GUI if enough files were present and a simple sorting on name would still mix in different files.  Still the *point* of the answer is good, no need to nit pick his exact example" CreationDate="2017-06-19T16:09:31.110" UserId="1008" />
  <row Id="1347" PostId="813" Score="0" Text="You also can't know the context of a lesson just from my answer and  what any teacher does w/r to &quot;best practices&quot; - There are plenty of &quot;best practices&quot; in teaching which are ignored by many of the best teachers I know and there are plenty of &quot;best practices&quot; in teaching which due to the reality a teacher lives in aren't always indeed best or do-able. Same for programming / CS." CreationDate="2017-06-19T16:53:36.797" UserId="237" />
  <row Id="1348" PostId="813" Score="0" Text="Also to add a bit more context -- when I wrote the answer, I didn't want to repeat any of the material in the blog posts I linked to and that was the first thing that came to mind :-)" CreationDate="2017-06-19T17:06:17.773" UserId="237" />
  <row Id="1351" PostId="813" Score="2" Text="*gets slightly confused as to why this comment thread has turned into Code Review*" CreationDate="2017-06-19T17:44:46.347" UserId="1027" />
  <row Id="1352" PostId="813" Score="17" Text="@dsollen - I think the reason he is being nitpicked is that this is an educator's board and he is describing giving bad code to his students. If I was just learning command line, the worst thing that I could imagine is getting a command from a teacher that didn't work for me. Let's say I was a student, and I wanted to try this example on my own. I go home and try it, but I have spaces in my file names. Now, the code doesn't work. I may not have a good source to find out why. Now I just think CLI is finicky junk and will avoid it more in favor of GUI, the exact opposite of the OP's question." CreationDate="2017-06-19T17:57:18.430" UserId="1028" />
  <row Id="1409" PostId="813" Score="0" Text="You can accomplish your image-resizing example in macOS Automator using just drag-and-drop." CreationDate="2017-06-20T18:16:05.847" UserId="897" />
  <row Id="1490" PostId="813" Score="1" Text="@terdon I'm not much of a Bash expert, but from the experience I do have I'd say it's much better to teach piping to `while` than starting with `for` loops. For one thing, it's actually _easier_ to remember (just one keyword, together with commands that one often uses on their own right from the command-line, whereas `for` with its many pseudo-syntax bracket variants is a rather weird beast). But more importantly, it's a better introduction to the general Unix spirit of using pipes for data flow, whereas for-loops are more of an imperative-programming staple." CreationDate="2017-06-21T15:15:55.397" UserId="1157" />
  <row Id="1492" PostId="813" Score="0" Text="@leftaroundabout it depends on what you are doing. Piping to while is a great way to process things line by line, yes. It is not, however, a good way to iterate over files. I don't know what you mean by &quot;pseudo-syntax bracket variants&quot;, I think you might be confusing `for` with the `test` keyword (which is an alias for `[` in POSIX shells and which, in turn, has been extended by the bash-specific `[[` keyword). In any case, you should always use the right tool for the job and that isn't always `while`. By the way, [unix.se] is a great place for this sort of question &gt;:)" CreationDate="2017-06-21T15:19:33.017" UserId="986" />
  <row Id="1495" PostId="813" Score="0" Text="@terdon well, the best tool may, technically, always be a custom C program that does exactly the task you need in fastest time. But clearly that's not _practical_ for most applications where shell utilities work just fine. And the combination of pipes, simple fundamental commands, and combinators like `while` can get you pretty far without needing to learn a lot of syntax. `for` by itself does _not_ get you very far; together with `test` in its confusing disguise it does get you much further, but this isn't really something you _need_ to know to get good stuff done on the CLI." CreationDate="2017-06-21T15:28:28.643" UserId="1157" />
  <row Id="1497" PostId="813" Score="2" Text="@leftaroundabout I am afraid you are paying `for` a disservice. It is fully as useful as `while` and has no odd syntax whatsoever. No more than `while`. You have probably seen it combined with `$(())` arithmetical stuff and *that* is absolutely weird syntax but has nothing to do with `for`. For example, I spent years using the shell before ever learning that `while` existed and was perfectly happy with `for`. If anything, it is more versatile, not less. In any case, let's take this to [/dev/chat](http://chat.stackexchange.com/rooms/26/dev-chat) so we don't spam this answer." CreationDate="2017-06-21T15:32:29.910" UserId="986" />
  <row Id="21016" PostId="818" Score="0" Text="+2 for the chair advice. -1 for the filters. This will make it easier for students to do the wrong thing, and not be noticed. This is a classroom, not a public computer room." CreationDate="2023-03-11T10:45:09.353" UserId="204" />
  <row Id="1398" PostId="819" Score="1" Text="While this does demonstrate that command line is better than punching cards, it doesn't demonstrate that it's better than GUI." CreationDate="2017-06-20T16:08:37.907" UserId="1076" />
  <row Id="1283" PostId="820" Score="1" Text="Excellent post, and welcome to CSE. *I take as an axiom that lecturing to students who are looking at computer screens is an effectively pure waste of time.* That really drove the point home for me. Next year, [I will require note-taking by hand](https://cseducators.stackexchange.com/questions/327/note-taking-policy-laptops-or-by-hand). I hope we hear more from you!" CreationDate="2017-06-19T02:21:54.630" UserId="27" />
  <row Id="1284" PostId="821" Score="0" Text="Welcome to CSE! Good example about processing interruptions.  But isn't Matthew 20:16 really more of an example of list reversal? ;-)  I hope we'll hear more from you in the future." CreationDate="2017-06-19T03:06:01.750" UserId="27" />
  <row Id="1373" PostId="823" Score="0" Text="This answer could really benefit from some explanation on how this would help with increasing students' attention. Could you add some explanation about that?" CreationDate="2017-06-20T10:20:31.273" UserId="150" />
  <row Id="1285" PostId="824" Score="6" Text="Welcome to CSE!  There are some great ideas in this post, but I must disagree with &quot;easily&quot;.  Have you tried explaining something like your `mv \`grep -Ril 'business\|work' .\` ./work` to kids who have never used a POSIX prompt to so much as `ls`?  Having done it, I promise it ain't so easy to explain ;)" CreationDate="2017-06-19T04:54:37.950" UserId="27" />
  <row Id="1289" PostId="824" Score="0" Text="I think these are good examples, iff the students already know the CLI, OTOH, if they don't, it'll be convincing the other way. In the GUI they can search and sort with fair ease, and accomplish all the given tasks  faster than they can create the given commands." CreationDate="2017-06-19T06:36:49.640" UserId="104" />
  <row Id="1294" PostId="824" Score="4" Text="To be fair, that script doesn't look &quot;easy&quot; to come up with." CreationDate="2017-06-19T07:48:07.333" UserId="981" />
  <row Id="1295" PostId="824" Score="2" Text="Other idea of tasks : Remove all the temporary file with a &quot;~&quot; inside a directory with thousands of files (rm *~ vs clicking). Change the owner of files recursively in a very big directory tree... Doing makefile in order to generate C code, latex code, plantuml diagram..." CreationDate="2017-06-19T08:40:23.983" UserId="985" />
  <row Id="1303" PostId="824" Score="6" Text="`s/easily/efficiently`" CreationDate="2017-06-19T09:59:10.027" UserId="993" />
  <row Id="1304" PostId="824" Score="0" Text="@GypsySpellweaver that's why you (as someone who knows the CLI) would 'race' them to do the same task concurrently (on different machines)" CreationDate="2017-06-19T10:00:13.713" UserId="993" />
  <row Id="1306" PostId="824" Score="0" Text="Addition to the workload - make it nested directories with mixed content, and different rules for each. (e.g. pics in 'business' folder go to the 'work' directory, others go to the images/photo album directory).  Command line only needs a glob, the gui user will have to navigate between them" CreationDate="2017-06-19T10:03:03.780" UserId="993" />
  <row Id="1545" PostId="824" Score="0" Text="_(reposting)_ Some more examples of &quot;fun&quot; tasks: Copy files from a directory to another from a list (see my script [here](https://stackoverflow.com/a/41122601/3258851)), concatenate two mp4 files without re-encoding (see [here](https://stackoverflow.com/q/7333232/3258851)), causing the watchdog timer to reboot the system (see [here](https://unix.stackexchange.com/q/372376/154671)), watching Star Wars IV: A New Hope from Telnet (address: towel.blinkenlights.nl), etc." CreationDate="2017-06-22T06:22:09.417" UserId="1206" />
  <row Id="21017" PostId="824" Score="0" Text="There are two definitions of &quot;easy to use&quot;: Meaning 1 (not the one used in this post), is easy to learn. Meaning 2 is easy to do for someone with experience. We often get stuck in the local minima of meaning 1, and don't put in the effort to achieve meaning 2." CreationDate="2023-03-11T10:54:48.873" UserId="204" />
  <row Id="1287" PostId="825" Score="0" Text="They can always use CLI to create a GUI :)" CreationDate="2017-06-19T06:16:23.907" UserId="104" />
  <row Id="1288" PostId="825" Score="0" Text="@GypsySpellweaver redundant... But true. No GUI tool can create other GUI tools in such a way..." CreationDate="2017-06-19T06:18:38.467" UserId="150" />
  <row Id="1397" PostId="825" Score="0" Text="Never specify the error message? `Failed to copy file XY...Z.png: filename too long`. You can easily get this one (paraphrased) in Windows Explorer." CreationDate="2017-06-20T16:07:31.723" UserId="1076" />
  <row Id="1399" PostId="825" Score="0" Text="@Ruslan thanks for the feedback. You're right. I have edited my answer accordingly (I'll probably add more edits to address that soon `;)`)" CreationDate="2017-06-20T16:09:41.880" UserId="150" />
  <row Id="15177" PostId="825" Score="0" Text="Show example of error messages from Windows RG, it is an exaggeration (but only a little), https://www.youtube.com/watch?v=YbEYOaO9kp4" CreationDate="2019-06-09T18:04:13.280" UserId="204" />
  <row Id="1330" PostId="829" Score="2" Text="Welcome to CSE, gabe3886! This is a great point. I hope we hear more from you in the future." CreationDate="2017-06-19T13:24:14.777" UserId="27" />
  <row Id="1394" PostId="829" Score="1" Text="Actually in the GUI the `cd /var/www/html` amounts to 1. Click the file manager 2. Click into address line 3. type `/var/www/html` 4. press Enter/Return. Wait for loading only once." CreationDate="2017-06-20T16:03:14.870" UserId="1076" />
  <row Id="15179" PostId="829" Score="0" Text="`ssh -X` will let you run GUI programs, to display locally. (You still need to know the command-line to do it.)" CreationDate="2019-06-09T18:31:32.017" UserId="204" />
  <row Id="1438" PostId="830" Score="2" Text="But we always teach to *never* paste text from a browser onto the command prompt directly." CreationDate="2017-06-21T05:57:59.290" UserId="1116" />
  <row Id="1363" PostId="833" Score="0" Text="This is just me, but if they understand the concept of vectors, then you could quickly summarize how matrices are transforming vectors between systems (cartesian coordinates, other coordinate systems) and how multiplying matrices together just gives you a new transformation; from there it's just a formula for multiplying matrices. So given that they know vectors, I'm not sure it's a *huge* jump to that aspect of the math you describe; I don't know what the other math entails. Ben I.'s answer is probably best though =)" CreationDate="2017-06-19T23:23:23.247" UserId="919" />
  <row Id="1443" PostId="834" Score="1" Text="I'd echo this answer - when I was at school and looking at computer graphics (OK it was more years ago than I'd care to remember), being given the mathematical solution for 3D rotation and projection onto a 2D plane was wonderful.  It let me get on with the coding and see the results without having to struggle with the maths.  Later on, I went back and worked out where the maths came from, because I was one of the kids who loved the mathematics!  In a summer workshop it is important to enthuse and inspire rather than focus on the very fine detail." CreationDate="2017-06-21T08:15:05.650" UserId="1122" />
  <row Id="1313" PostId="835" Score="0" Text="Welcome to Computer Science Educators! Could you add some details on how the first two are an example of a stack?" CreationDate="2017-06-19T11:24:52.317" UserId="150" />
  <row Id="1314" PostId="835" Score="0" Text="@ItamarGreen OK." CreationDate="2017-06-19T11:31:41.183" UserId="1000" />
  <row Id="1315" PostId="835" Score="0" Text="The first example really is a **very** good one." CreationDate="2017-06-19T11:37:23.613" UserId="150" />
  <row Id="1332" PostId="836" Score="1" Text="&quot;never use a tool you couldn't write yourself&quot; is not the best advice... &#xA;it's like not allowing yourself to use a hammer because you don't know how the iron is forged.   +1 for the rest of the answer :)" CreationDate="2017-06-19T14:10:30.210" UserId="1009" />
  <row Id="1333" PostId="836" Score="2" Text="Perhaps I should have given more context but the idea is that you should know something about what's going on under the hood which is good advice." CreationDate="2017-06-19T14:25:10.430" UserId="237" />
  <row Id="1368" PostId="836" Score="0" Text="Indeed it is :-)" CreationDate="2017-06-20T07:04:46.763" UserId="1009" />
  <row Id="1318" PostId="837" Score="1" Text="&quot;Ridiculous anachronism&quot;  Is it safe to assume that you believe that paper should be banned in geometry and calculus classes as well?" CreationDate="2017-06-19T12:32:45.010" UserId="27" />
  <row Id="1322" PostId="837" Score="0" Text="@BenI. indeed so. Instead, students could use Geogebra, for example. There are great packages for symbolic math, s.a. Sage, or Maxyma (free ones) or Mathematica, Maple (paid-for). It's hard to imagine something so extravagant in undegrad, or even in graduate studies that wouldn't be covered by those." CreationDate="2017-06-19T12:47:12.800" UserId="1000" />
  <row Id="1323" PostId="837" Score="0" Text="Unfortunately, the kind of mindset which says &quot;use pen and paper&quot; pervades the offices of the ministry of education (at least where I live). Which is partly explained by incompetence, and partly by conservatism. None of which are commendable qualities for educators... nevertheless, instead of investing into improving the schools supplies, the funds are spent elsewhere :(" CreationDate="2017-06-19T12:54:36.483" UserId="1000" />
  <row Id="1324" PostId="837" Score="1" Text="I can't say I agree with you. Computers don't necessarily make a great [cognitive match](https://www.scientificamerican.com/article/a-learning-secret-don-t-take-notes-with-a-laptop/) with human brains, which are persistently analog. Our brains orient around spaces, faces, pleasures, and dangers, and learning is inherently social. I don't think that computers are a panacea, nor that they will ever fully replace analog processes. Use them where they obviously help, but be wary of falling into overly easy technologist thinking." CreationDate="2017-06-19T12:59:24.947" UserId="27" />
  <row Id="1325" PostId="837" Score="0" Text="@BenI. Now you resemble my wife when she claims all sorts of bad things about computer games. :) Are ruler and compass social or antisocial? Why would you even bring the subject of being social into this discussion? It is completely orthogonal to the quality of the tool. Do ruler and compass make a good &quot;cognitive match&quot; with our brain? Modern science knows squat about brain, and that would be an exaggeration. How can anyone make claims about what matches it and what doesn't, keeping a straight face, escapes me." CreationDate="2017-06-19T13:04:26.243" UserId="1000" />
  <row Id="1328" PostId="837" Score="1" Text="Re' the subject of this article: I want to see anyone using Sage or Maxyma at the same speed they can type arbitrary prose... this is not comparing apples to apples. And, surely, the article is not about testing, where different skills are needed..." CreationDate="2017-06-19T13:10:26.777" UserId="1000" />
  <row Id="1317" PostId="838" Score="1" Text="This is a good point. Welcome to CSE! I hope we hear more from you in the future." CreationDate="2017-06-19T12:23:29.933" UserId="27" />
  <row Id="6294" PostId="838" Score="0" Text="If you use the command-line because to are forced to, because the can not use the GUI, then you do not know the value of the command line. This is only one of the smaller advantages." CreationDate="2017-07-29T21:47:30.877" UserId="204" />
  <row Id="1326" PostId="839" Score="0" Text="Welcome to cseducators! This is a very nice use-case. I hope we hear more from you in the future." CreationDate="2017-06-19T13:07:50.237" UserId="27" />
  <row Id="4141" PostId="839" Score="0" Text="I note that postscript is built on a Forth language base. Forth itself is stack oriented." CreationDate="2017-07-12T12:07:58.663" UserId="1293" />
  <row Id="1338" PostId="843" Score="1" Text="Welcome to CSE! OP isn't confused about the material.  He is asking how you might explain this to students so that a classroom full of kids will remember and understand." CreationDate="2017-06-19T15:34:13.760" UserId="27" />
  <row Id="1364" PostId="844" Score="0" Text="This is a great answer! +1 for not just providing ways to force attention, but to encourage attention." CreationDate="2017-06-19T23:28:59.543" UserId="919" />
  <row Id="1831" PostId="844" Score="0" Text="Not sure about Point 1, even back then  I would have felt like a 5 years old child in front of my classmates, not nice, not engaging. That may work with a teacher which is really good at getting along with their students though." CreationDate="2017-06-26T11:09:03.640" UserId="1375" />
  <row Id="1836" PostId="844" Score="0" Text="@Walfrat It does require a classroom with good levels of trust between the teacher and the students. But without a good atmosphere in the room, so many things break down that not being able to get them moving becomes a negligible concern. You need a level of mutual trust with your students, or almost nothing good will be coming out of that classroom." CreationDate="2017-06-26T12:42:35.050" UserId="27" />
  <row Id="1346" PostId="845" Score="0" Text="Nice answer. Welcome to CSE!  I hope we hear more from you :)" CreationDate="2017-06-19T16:37:28.723" UserId="27" />
  <row Id="1349" PostId="847" Score="2" Text="+1 and Thanks for the great answer. I am not a teacher. I am a front end developer. I asked this because some of my relatives in schools are asking doubts in cs. But your answer will be helpful for someone who visit this post." CreationDate="2017-06-19T17:18:16.607" UserId="97" />
  <row Id="1350" PostId="847" Score="1" Text="Excellent answer.  Welcome to CSE!  I hope we hear more from you in the future." CreationDate="2017-06-19T17:27:50.790" UserId="27" />
  <row Id="1353" PostId="848" Score="0" Text="P.S. I know that students could also &quot;run their code&quot; without IDLE. But, no matter how many times I tell them to “pretend to be the computer” and “write out what your code actually computes”, or make them do this in class, experience has shown that most will not do this on the exam. I'm open to suggestions for more conceptual test questions (at the college level), or for ways to really get the weaker students to actually catch their disasterous mistakes when they only have pencil and paper." CreationDate="2017-06-19T18:05:49.963" UserId="294" />
  <row Id="1354" PostId="848" Score="0" Text="P.P.S. we mostly hit our course goals via programming labs where students run large-scale simulations of real-world phenomena (often with some starter code). All credit to my colleagues for that course design. Unfortunately, exams remain 50% of the final course grade, and labs/HW don't really prepare students for them. I spend most of my in-class time on practice problems that are meant to be like exam problems, but students spend most of their time in front of IDLE on HW and labs. That's what got me thinking of changing assessment to most closely match student time expenditure." CreationDate="2017-06-19T18:07:24.000" UserId="294" />
  <row Id="1355" PostId="848" Score="0" Text="You've given me a lot to ponder here. I certainly agree wholeheartedly with the goals you've outlined, but I am not sure I agree with your conclusions - among other things, I don't find it difficult to discount syntactic mistakes entirely except for the occasional (very odd) edge case." CreationDate="2017-06-19T18:08:31.587" UserId="27" />
  <row Id="1362" PostId="849" Score="0" Text="I believe it is possible to merge accounts - [try contacting the stack exchange team](https://cseducators.stackexchange.com/contact). Either way, welcome (back?) to CSE =) Thanks for your answer!" CreationDate="2017-06-19T23:19:43.020" UserId="919" />
  <row Id="1370" PostId="849" Score="0" Text="Very related point: ssh.  If I want to do something on some other computer, I just `ssh machinename command` and done.  GUIs? Err, let me see if I can get VPN to work... And after that is done, if it can be done, you still have to navigate a *very slow* GUI." CreationDate="2017-06-20T09:36:14.947" UserId="1055" />
  <row Id="15178" PostId="849" Score="0" Text="A friend of mine, accidentally took down a bundle cables, from the remote end. The only way to get it back up was to tell the remote end to come back up. He was just putting on his motor-bake leathers (luckily it was to to far), when he saw the apprentice “Did you decommission that 56k modem?”, “No. Sorry, too busy, I will do it next time I am there”. A squeek squalk, and a few key strokes latter, and the connection was back up. As far as I know that modem is still in service." CreationDate="2019-06-09T18:10:14.313" UserId="204" />
  <row Id="1356" PostId="850" Score="0" Text="This is an excellent, intuitive example.  Welcome to CSE!  I hope we hear more from you in the future." CreationDate="2017-06-19T18:51:08.093" UserId="27" />
  <row Id="7899" PostId="850" Score="0" Text="Excellent!! This is only example which is comprehensible to a common man!!" CreationDate="2017-09-08T07:10:14.470" UserId="2537" />
  <row Id="1357" PostId="851" Score="0" Text="I run this lab every year. I can vouch that it's a good lab :)  Welcome to CSE!  I hope we hear more from you in the future!" CreationDate="2017-06-19T19:53:50.620" UserId="27" />
  <row Id="12137" PostId="851" Score="2" Text="It's worth noting that recursive solution is really the same, just using underlying call stack - so it's not explicitly visible." CreationDate="2018-04-27T11:15:08.780" UserId="4884" />
  <row Id="1358" PostId="853" Score="0" Text="Nice, detailed, thoughtful answer. You will do well here. ;-) Welcome to CSE!" CreationDate="2017-06-19T20:52:38.480" UserId="27" />
  <row Id="1359" PostId="853" Score="2" Text="Big + for mentioning the coolness factor." CreationDate="2017-06-19T21:56:15.867" UserId="51" />
  <row Id="1372" PostId="856" Score="0" Text="Okay, I'll bite. Why? With only two values, wouldn't they both be stored in registers? Or would `i` be in the accumulator directly,and thereby somehow get us to the address faster?" CreationDate="2017-06-20T10:16:57.270" UserId="27" />
  <row Id="1403" PostId="856" Score="0" Text="@BenI. I'll add an explanation." CreationDate="2017-06-20T17:17:08.237" UserId="283" />
  <row Id="1406" PostId="856" Score="0" Text="Oh, duh!  *Slaps forehead.*  Thank you, that is a beautiful explanation.  I feel dumb right now for not seeing that :P" CreationDate="2017-06-20T17:32:32.277" UserId="27" />
  <row Id="1408" PostId="856" Score="0" Text="As I tell my students, for every person asking a question, there are several more wondering the same thing, so thanks for encouraging me to be more explicit." CreationDate="2017-06-20T17:58:20.757" UserId="283" />
  <row Id="15180" PostId="857" Score="0" Text="CLI programs, can also be embedded in a GUI program." CreationDate="2019-06-09T18:41:49.413" UserId="204" />
  <row Id="1367" PostId="858" Score="0" Text="This answer could really benefit from more explanation. Could you add some explanation to how those examples are a stack?" CreationDate="2017-06-20T05:39:29.027" UserId="150" />
  <row Id="1374" PostId="859" Score="0" Text="This is brilliant. This really gets to precisely *why* CLIs are worthwhile.  And the only visual alternative right now, then would be [block-based coding](https://cseducators.stackexchange.com/questions/860/how-do-i-convince-my-students-that-visual-programming-is-real-programming)? Welcome to CSE. I hope we hear more from you!" CreationDate="2017-06-20T10:38:31.630" UserId="27" />
  <row Id="1375" PostId="859" Score="0" Text="@BenI. I found an linked the source - has a longer article linked, you might be interested." CreationDate="2017-06-20T11:01:06.057" UserId="1056" />
  <row Id="1423" PostId="859" Score="0" Text="+1 from me :-) Glad to have successfully spread this nice analogy to at least one person." CreationDate="2017-06-20T22:27:16.260" UserId="932" />
  <row Id="1437" PostId="859" Score="2" Text="From the perspective of a student: the advantage of GUI is precisely that I can see what I am doing, that I have context about what I am doing. Which makes it seem safer to use the GUI than command line." CreationDate="2017-06-21T05:31:20.520" UserId="1113" />
  <row Id="1376" PostId="860" Score="40" Text="I'm curious why you think it'll make things more fun or what you plan to do to make things more fun. One of the downsides of DnD languages is that to do something substantial you need some serious screen real estate and in my experience, experienced students have found repeated dragging and dropping tedious over using text editor functionality.&#xA;&#xA;This is not to say that DnD won't be great in your case but I'm looking for more info on how you want to use them" CreationDate="2017-06-20T12:12:58.863" UserId="237" />
  <row Id="1377" PostId="860" Score="0" Text="Well, to make clear: I have not done any of this, so your experience is very relevant information. This is all still very preliminary exploration. My thought is that, for some of my lower students, the graphical environment will make the concepts seem more immediately concrete. And, as goofy as the pre-fabbed graphics are, they are also fun." CreationDate="2017-06-20T12:42:03.403" UserId="27" />
  <row Id="1405" PostId="860" Score="24" Text="If these kids already have that extensive a programming background, what you're proposing isn't likely to be fun." CreationDate="2017-06-20T17:17:46.950" UserId="651" />
  <row Id="1410" PostId="860" Score="5" Text="Put your money where your mouth is. Build something useful/cool in the language and demo it for them while introducing it." CreationDate="2017-06-20T18:27:09.893" UserId="650" />
  <row Id="1415" PostId="860" Score="0" Text="I've worked professionally with a heavy point &amp; click programming tool and many younger coworkers complained &quot;this isn't programming.&quot;  My explanation was that programming was just about giving the computer instructions for what to do &quot;later&quot;.  And that tool was one way of instructing the computer." CreationDate="2017-06-20T19:43:39.817" UserId="1087" />
  <row Id="1417" PostId="860" Score="8" Text="From the sound of it, your students use programming languages to **do** things.  Snap! is going to have to earn its keep in the minds of students like that.  I'm a developer, not a teacher, but my first thought when I looked at the examples on the Snap! page was &quot;this is actually just a text based programming language given goofy colors.&quot;  Contrast that with something like LabView which is a serious language used in serious contexts (and with a serious price tag, of course).  You're going to have to convince them that it's not different for the sake of being different." CreationDate="2017-06-20T20:06:38.103" UserId="812" />
  <row Id="1426" PostId="860" Score="4" Text="What kind of high school students are you lucky enough to work with?! I don't know many high school students with that substantial a background in programming." CreationDate="2017-06-20T23:25:43.240" UserId="813" />
  <row Id="1428" PostId="860" Score="0" Text="I am, indeed, lucky! There is a 4-year CS major at this highly selective HS in northern NJ. (Nothing official, but there are rumors that there may be a (3rd!) new CS opening at said school in a few weeks, too!)" CreationDate="2017-06-20T23:33:55.733" UserId="27" />
  <row Id="1432" PostId="860" Score="0" Text="Aren't flow charts &quot;visual programming&quot;? If you use flow charting as a tool, it shouldn't be too hard to segue into another visual paradigm of your choice." CreationDate="2017-06-21T01:37:53.600" UserId="104" />
  <row Id="1445" PostId="860" Score="0" Text="@CortAmmon I was sure someone would mention LabView.  That's worth taking seriously in the right context. But unless the students go on to study physics/engineering/chemistry at uni (and not every course by a long shot) they're not likely to come across it.  Even educational licenses are expensive. The graphical approach is highly polarising and doesn't lend itself to printable documented code -- we're moving more and more towards PyVisa to access an overlapping set of drivers." CreationDate="2017-06-21T09:08:12.920" UserId="1127" />
  <row Id="1450" PostId="860" Score="0" Text="It might be easy, but methods might need to be different under various circumstances. So... How many students are involved? And how much student-class time can you invest in this?" CreationDate="2017-06-21T10:24:15.567" UserId="1136" />
  <row Id="1464" PostId="860" Score="0" Text="Are you sure that you *are* correct here? Are you sure such learning tools are appropriate for high school kids with substantial programming knowledge? At that age, I know that I would have considered it demeaning and patronising, basically telling me I'm too stupid to use &quot;real&quot; languages, so I should play with blocks." CreationDate="2017-06-21T13:26:01.653" UserId="1145" />
  <row Id="1466" PostId="860" Score="0" Text="@Davor considering the number of comments and answers here that point to visual languages used in specialized professional areas, I'm pretty sure, yeah :) I'm not convinced that I'm going to make this move, however. If I did, I would enjoy some initial benefit of the doubt from my students, since I taught them many of those languages that they know :)" CreationDate="2017-06-21T13:29:37.743" UserId="27" />
  <row Id="1467" PostId="860" Score="1" Text="@BenI. - I fail to see how such languages being used professionally in extreme niches makes them suitable teaching tool at that age. I fail to see ANY relation between those two statements, to be honest." CreationDate="2017-06-21T13:31:40.123" UserId="1145" />
  <row Id="1500" PostId="860" Score="1" Text="Wanna make programming more Fun™? [Here are the programming games you never asked for!](https://blog.codinghorror.com/heres-the-programming-game-you-never-asked-for/) _(Your definition of fun may vary. I am not liable for any damage to the concepts of &quot;fun&quot; or &quot;game&quot; you may suffer due the content of this article. I just think [some of these](http://tomorrowcorporation.com/humanresourcemachine) are pretty fun and accessible)_" CreationDate="2017-06-21T16:17:27.270" UserId="994" />
  <row Id="1507" PostId="860" Score="1" Text="For a practical, real-world example of visual programming, have a look at the [Unreal Game Engine's Blueprint Designer.](https://docs.unrealengine.com/latest/INT/Engine/Blueprints/)" CreationDate="2017-06-21T17:24:29.697" UserId="882" />
  <row Id="1513" PostId="860" Score="0" Text="Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming. If you want them to have fun programming, why not do a short lesson on esoteric languages? This one is based on Arnold Schwarzenegger's one liners, for instance: https://github.com/lhartikk/ArnoldC" CreationDate="2017-06-21T18:03:20.950" UserId="1165" />
  <row Id="1535" PostId="860" Score="0" Text="*Why* do you want to teach it?  If we knew, we could help you explain that to the kids.  But it seems like you’re looking for justification yourself.  After taking a quick look, my quextion is, “why can't I just type that?”  you need a good answer as that’s what the kids will wonder too." CreationDate="2017-06-21T23:48:03.093" UserId="1116" />
  <row Id="1537" PostId="860" Score="0" Text="Why even argue the point? Call your exercises 'puzzles' or 'logic puzzles'. Allow your students to go off-script and use that tool to do things that you didn't ask them to (or that they didn't imagine they could even do themselves with it). If by the end of the course, your students tell you that Snap is not a puzzle-building environment as much as it is a programming language you can actually build stuff with, then I suppose you will have completed at least one of your teaching objectives." CreationDate="2017-06-22T00:36:13.540" UserId="1195" />
  <row Id="1628" PostId="860" Score="0" Text="Other real world examples of DnD are SQL Server Integration Services (SISS) and BizTalk. MS Visual Studio includes DnD to create the user interface." CreationDate="2017-06-23T05:09:21.473" UserId="146" />
  <row Id="1717" PostId="860" Score="0" Text="_Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming_&#xA;&#xA;Agree with this, I think I'd have found it a bit patronising if these sorts of languages were used for anything other than an introductory course." CreationDate="2017-06-24T16:39:53.553" UserId="916" />
  <row Id="7910" PostId="860" Score="0" Text="IMHO the main advantage of visual languages is that beginners fear they have to remember the syntax of soooo maaany constructs and basic actions : they choose among the things they see. Convenient at first sight, a waste of time later as they know the syntax.  The idea falls flat if they already wrote programs, and anyway programming with blocks is not identified, in the popular culture, to &quot;serious programming&quot; (like web development, doh)." CreationDate="2017-09-08T16:46:43.957" UserId="2103" />
  <row Id="9950" PostId="860" Score="0" Text="What HighSchool is this? Robot academy on Mars?" CreationDate="2018-01-30T18:15:23.913" UserId="4082" />
  <row Id="9952" PostId="860" Score="0" Text="@GorchestopherH LOL, essentially. :) My students take part in a pretty unique program." CreationDate="2018-01-30T19:02:39.893" UserId="27" />
  <row Id="9955" PostId="860" Score="0" Text="@BenI. Can you possibly edit/expand your question a little bit to give some more information? For example: What are the other requirements of the course (curriculum)? Is this a course at all in fundamentals? What concepts are you trying to illustrate? Snap! is a very good syntax enforcer, but it seems that your students are likely very familiar with adhering to syntax." CreationDate="2018-01-30T20:13:07.363" UserId="4082" />
  <row Id="9957" PostId="860" Score="0" Text="@GorchestopherH I didn't ultimately take this path, though I am more convinced than ever that visual programming is real, and is only going to become more prominent for the foreseeable future.  There may come a day that I revisit this idea, but for now, any new answers should probably be more about general applicability than about my specific circumstances." CreationDate="2018-01-30T20:47:21.640" UserId="27" />
  <row Id="9958" PostId="860" Score="0" Text="This should be an edit or a new question." CreationDate="2018-01-30T21:30:19.643" UserId="4082" />
  <row Id="9960" PostId="860" Score="0" Text="@GorchestopherH ... a new question?" CreationDate="2018-01-30T23:16:48.703" UserId="27" />
  <row Id="1435" PostId="864" Score="8" Text="so after comparison it turns out that visual blocks are worse in all aspects. then the students won't really understand why the teacher did bring it up at all." CreationDate="2017-06-21T05:06:41.467" UserId="1006" />
  <row Id="1436" PostId="864" Score="3" Text="&quot;This is not so radically different from what Python does when it visually presents code blocks as indented regions rather than as text sandwiched between curly brackets.&quot; Actually, yes, it is quite different. Python is enforcing an arrangement of text; it isn't abandoning text. The rest of your answer might still fly." CreationDate="2017-06-21T05:26:53.863" UserId="981" />
  <row Id="1508" PostId="864" Score="0" Text="@jpmc26 Python is still text, but you don't get to pick the keyword you want to use, e.g., for a `while` loop. Snap! effectively just replaces the fixed scaffolding you would type with a graphical element. Python still gives you more flexibility in what you can do within the fixed elements, but the similarity is still there. (Full disclosure: I've only used Scratch, and that years ago, but Snap! looks fundamentally the same.)" CreationDate="2017-06-21T17:40:17.707" UserId="1111" />
  <row Id="1514" PostId="864" Score="1" Text="@chepner What I see as &quot;radically&quot; different is the departure from typing simple words using standard characters to using custom non-text, graphical/binary items that are more difficult manage because we don't have dedicated tooling for them (like keyboards and find/replace). I do understand that there might be similarities in terms of *structure*, especially after the text is parsed, but I see abandoning text as quite different. I understand that, in some ways, this analysis supports the rest of the answer." CreationDate="2017-06-21T18:13:38.943" UserId="981" />
  <row Id="1522" PostId="864" Score="1" Text="@jpmc26 considering that assembly is a &quot;radical&quot; departure from the underlying machine code (&quot;you can read it now!&quot;), and C is a &quot;radical&quot; departure from the ~1:1 of assembly to machine code, and Haskell is a &quot;radical&quot; departure... etc. I would say this supports Neal's arguments *more* not less. &quot;...are more difficult to manage because we don't have dedicated tooling for them...&quot; is generally what managers say to resist switching to new paradigms. The real question to potentially bring up is &quot;Is this abstraction of programming particularly useful? If so, for what classes of tasks?&quot;" CreationDate="2017-06-21T20:54:17.377" UserId="1177" />
  <row Id="1524" PostId="864" Score="0" Text="@Blackhawk I hope it is clear that I am not objecting to the answer as a whole, merely to the notion that controlling indentation is not merely a small step away from what block programming languages do." CreationDate="2017-06-21T21:22:53.417" UserId="981" />
  <row Id="1382" PostId="866" Score="0" Text="Black and white? *Real* programmers have green text." CreationDate="2017-06-20T14:00:25.193" UserId="166" />
  <row Id="1384" PostId="866" Score="0" Text="Haha for some reason this made me laugh more than it should. My friends tell me the same thing ;) I suppose it is I that do not like green." CreationDate="2017-06-20T14:06:12.333" UserId="747" />
  <row Id="1392" PostId="866" Score="0" Text="Did someone say *green*? (I make these jokes all the time, but this is the first time I do it on SE :P)" CreationDate="2017-06-20T15:53:26.480" UserId="150" />
  <row Id="1501" PostId="866" Score="0" Text="@Scimonster I think I'm an _unreal_ programmer..." CreationDate="2017-06-21T16:35:18.740" UserId="1076" />
  <row Id="6295" PostId="866" Score="0" Text="I love the command-line. I love ssh. I love to type in a command that opens a window on the local machine, but is running on the remote." CreationDate="2017-07-29T21:50:21.173" UserId="204" />
  <row Id="6312" PostId="866" Score="0" Text="I have had several 6th grade Python students who have been drawn to the command-line because of the coolness factor." CreationDate="2017-07-30T17:33:24.540" UserId="2323" />
  <row Id="1381" PostId="867" Score="1" Text="Welcome! Could you please add details on why FBD would be a good idea?" CreationDate="2017-06-20T13:52:09.090" UserId="150" />
  <row Id="1386" PostId="867" Score="2" Text="That's a good example - I'm also entirely unfamiliar with FBD. Can you flesh this answer out a little bit (so that I can use your answer better in the classroom)?" CreationDate="2017-06-20T14:26:15.053" UserId="27" />
  <row Id="1412" PostId="867" Score="0" Text="@BenI. he's not saying to consider it for use in the classroom, but rather consider it as an example of real world usage of a visual programming language. That is, visual programming need not be necessarily &quot;for kids&quot;." CreationDate="2017-06-20T19:11:04.690" UserId="1085" />
  <row Id="1413" PostId="867" Score="0" Text="@DavidLiu I understood that. But if I will even use it as a passing example in class, I would need to give at least *some* more detail about the language, which could totally fit into the answer here to make it more useful." CreationDate="2017-06-20T19:20:15.380" UserId="27" />
  <row Id="1418" PostId="867" Score="0" Text="In real industry, there's a reality that not everyone who uses our software can be versed in C++ and have 4 years of practice with the software.  They need a powerful language to interact with our software which doesn't pack such a training price tag.  FBDs are really popular for solving that problem.  They show that there are many levels with which one can interact with a piece of software.  The C++/Java code at the bottom is only one of those ways." CreationDate="2017-06-20T20:08:34.907" UserId="812" />
  <row Id="1444" PostId="867" Score="0" Text="There's also Labview used for lab instrument automation, but licences are expensive and the learnign curve is surprisingly steep." CreationDate="2017-06-21T09:01:18.797" UserId="1127" />
  <row Id="1550" PostId="867" Score="0" Text="@BenI. i tried to flesh it out some more" CreationDate="2017-06-22T08:46:53.703" UserId="1064" />
  <row Id="1383" PostId="868" Score="1" Text="Do you just need to explain what is coding, or a little more in depth? The answer to the first is easy -- it's giving instructions to a computer, step by step." CreationDate="2017-06-20T14:01:24.723" UserId="166" />
  <row Id="1387" PostId="868" Score="1" Text="This question is being discussed [on meta](https://cseducators.meta.stackexchange.com/questions/138/site-scope-refinement-3)." CreationDate="2017-06-20T14:36:29.300" UserId="2" />
  <row Id="1388" PostId="868" Score="0" Text="@Shashimee - I tried to edit your prompt while leaving the question intact. I removed the bit about Python because it didn't seem related, but I may have misunderstood what you were going for. Feel free to roll back or edit again." CreationDate="2017-06-20T14:36:41.753" UserId="27" />
  <row Id="1407" PostId="868" Score="2" Text="Thanks for the question. Could you provide your parents' background? Not all parents are ignorant of computer science.  http://dilbert.com/strip/1998-07-15" CreationDate="2017-06-20T17:33:33.987" UserId="283" />
  <row Id="1441" PostId="868" Score="1" Text="@EllenSpertus They basically just know how to use a browser to check their mails, read forums and do basic researchs." CreationDate="2017-06-21T06:56:48.250" UserId="1065" />
  <row Id="1449" PostId="868" Score="2" Text="I feel this is too broad. HTML is code, assembler is also code. Code is just that, a formal language that expresses *something*. If I were an average  C++ programmer, I would describe my job to my grandmother as such: *&quot;I write computer programs, that is, I use a specialized formal language - akin, in this respect, to the language of mathematics - to express the behavior I want the machine to exhibit. My understanding of what the correct behaviour should be must be sound in order for this to work.&quot;* It's all kinds of wrong, technically, but I feel it conveys the idea." CreationDate="2017-06-21T10:18:53.750" UserId="757" />
  <row Id="1521" PostId="868" Score="3" Text="*Unfortunately, no one can be told what the Matrix is*, @Aurora0001, is this you?" CreationDate="2017-06-21T20:50:22.463" UserId="1178" />
  <row Id="1529" PostId="868" Score="2" Text="I wonder... The oldest computers I know of might be the player pianos..." CreationDate="2017-06-21T22:03:32.293" UserId="1189" />
  <row Id="1541" PostId="868" Score="3" Text="It's not that hard to explain. *public static void main()*, \*ahem\*. *Lorem ipsum dolor sit amet, consectetur adipiscing elit...*" CreationDate="2017-06-22T03:53:54.390" UserId="823" />
  <row Id="1542" PostId="868" Score="1" Text="&quot;Ones and zeroes&quot;" CreationDate="2017-06-22T04:33:02.423" UserId="730" />
  <row Id="1389" PostId="869" Score="1" Text="I don't think his parents want to learn *how* to code, but rather how to coding and programming languages work." CreationDate="2017-06-20T14:40:46.783" UserId="150" />
  <row Id="1390" PostId="869" Score="0" Text="If they're willing to sit through that first lesson (and if they understand English well enough), they will certainly come out with a pretty good idea of what coding is. David Malan is absolutely electrifying!" CreationDate="2017-06-20T15:01:29.330" UserId="27" />
  <row Id="1431" PostId="869" Score="0" Text="This is close to a link-only answer, which is frowned upon on Stack Exchange sites. Could you summarize what is discussed in the CS50 lecture, and what makes it compelling?" CreationDate="2017-06-21T00:51:03.163" UserId="897" />
  <row Id="6132" PostId="871" Score="0" Text="Landscape Generation =&gt; `define (Create Perspective Hack)` Yep, it's real programming when it's all built on a hack :P" CreationDate="2017-07-26T18:02:33.143" UserId="2025" />
  <row Id="1393" PostId="872" Score="0" Text="Could you tell us what's the age or level of the students?" CreationDate="2017-06-20T16:02:54.597" UserId="150" />
  <row Id="1395" PostId="872" Score="0" Text="@ItamarGreen - this is a class of high schoolers, mostly sophomore but a mix of grades 9-12" CreationDate="2017-06-20T16:04:25.183" UserId="12" />
  <row Id="1396" PostId="872" Score="0" Text="Could you edit your question to include that information? perhaps use the [tag:high-school] tag to make it clear for readers." CreationDate="2017-06-20T16:05:40.017" UserId="150" />
  <row Id="1404" PostId="872" Score="1" Text="@Jackson1442. I have no idea what &quot;grade 9&quot; means. Ideally, give us an age range. Failing that, at least tell us what country you're in, so I can go look up your schooling system and edit that information into the question myself." CreationDate="2017-06-20T17:17:43.057" UserId="1060" />
  <row Id="1411" PostId="872" Score="0" Text="If you can find a way to stress the importance of testing code among a group of developers being paid to develop code, that would be a good start.  Still searching for that one .... =)" CreationDate="2017-06-20T19:04:55.817" UserId="812" />
  <row Id="1439" PostId="872" Score="0" Text="[*How to Design Programs* (aka HtDP)](http://HtDP.Org/) uses both pre-/postconditions and testing extensively, and it is directed explicitly at high schoolers. Even if you are not using it, there may be some inspiration in there. The authors are currently working on a [draft for a second edition](http://WWW.CCS.NEU.Edu/home/matthias/HtDP2e/Draft/), which you might want to read instead. The material about imperative programming has been removed, and is going to be covered in the as-of-yet unwritten second volume *How to Design Components*, but you can get those chapters from the first edition." CreationDate="2017-06-21T06:31:33.610" UserId="945" />
  <row Id="1447" PostId="872" Score="3" Text="Have them contemplate the famous D.E.Knuth quote: &quot;Beware of bugs in the above code; I have only proved it correct, not tried it.&quot;" CreationDate="2017-06-21T09:47:34.307" UserId="1131" />
  <row Id="4210" PostId="872" Score="0" Text="Please translate sophmore." CreationDate="2017-07-13T20:15:05.243" UserId="204" />
  <row Id="1400" PostId="875" Score="3" Text="&quot;testing is part of the project&quot;. Golden. If only the ministry-supplied curriculum thought this way." CreationDate="2017-06-20T16:38:55.077" UserId="150" />
  <row Id="4441" PostId="875" Score="0" Text="Yes, testing needs to be seen as integral, important, and authentically valued. Otherwise, it's just another thing for a student to check off the list---and if you're gonna get a good grade anyway, why bother? &#xA;&#xA;I tried to teach unit testing in extracurricular support activities, but it didn't stick like I'd hoped. Later, students started working at tech companies and told me, &quot;You should really have taught us unit testing. It's so important!&quot; It's got to be in the curriculum to be effective, imo." CreationDate="2017-07-17T19:14:08.853" UserId="2045" />
  <row Id="1402" PostId="876" Score="2" Text="Welcome to Computer Science Educators! This answer could really benefit from some details on how this teaches students the importance of testing. Could you add some explanation to your answer?" CreationDate="2017-06-20T17:03:06.397" UserId="150" />
  <row Id="1440" PostId="877" Score="1" Text="My personal definition (or test) of a &quot;real&quot; programming language is if you can use it to directly call the host system's platform API or not - so C and C++ are, as is C# and Java (through P/Invoke and JNI respectively) but not Flash ActionScript or LOGO. Would you agree with my definition?" CreationDate="2017-06-21T06:43:45.447" UserId="1118" />
  <row Id="1511" PostId="877" Score="2" Text="@Dai That should be a separate question, not a discussion within comments." CreationDate="2017-06-21T17:53:14.167" UserId="283" />
  <row Id="1474" PostId="879" Score="0" Text="i don't agree with: `What is a programming language?`: `it is a set of instructions`. The set of instructions is called a program, and the language is a set of syntactical and grammatical rules to make sure the computer understands these instructions." CreationDate="2017-06-21T14:26:24.957" UserId="1151" />
  <row Id="1481" PostId="879" Score="0" Text="@BrianH I'd agree that a program is a set of instructions. However, I do think the language is also a set of instructions as it defines them - I could only think of moving the instructions to the construct of the &quot;standard library&quot;: &quot;A language is a set of syntactical and grammatical rules combined with a standard library that provides several instructions that can be used following in a program&quot;. Would this be better in your eyes?" CreationDate="2017-06-21T14:53:11.360" UserId="793" />
  <row Id="1482" PostId="879" Score="0" Text="Sounds about right i think." CreationDate="2017-06-21T14:57:52.707" UserId="1151" />
  <row Id="1510" PostId="879" Score="0" Text="@BrianH. I've edited this into my answer as a footnote, I hope you're okay with it :)" CreationDate="2017-06-21T17:51:14.323" UserId="793" />
  <row Id="1420" PostId="881" Score="0" Text="Would this be the beginning of a class discussion? Or just a way to make sure that they are exposed to some good test cases? How do you bring the lesson home? In any case, welcome to CSE!" CreationDate="2017-06-20T21:20:40.553" UserId="27" />
  <row Id="1419" PostId="882" Score="0" Text="This is a nicely conceived lesson." CreationDate="2017-06-20T20:40:35.927" UserId="27" />
  <row Id="1446" PostId="883" Score="4" Text="This is not a good example to showcase testing. That code had been thoroughly tested, but only in an Ariane 4 context. Ariane 5 required extra tests because the conditions in which this code was called had changed, but the change in conditions had not been detected as important. If it had been detected then people would have updated the code. This example showcases formal methods — that crash prompted Ariane to start doing static analysis." CreationDate="2017-06-21T09:12:28.617" UserId="124" />
  <row Id="1422" PostId="890" Score="0" Text="Isn't the question about tests, though? I don't imagine anyone is arguing that CS projects should be on paper." CreationDate="2017-06-20T22:08:41.130" UserId="27" />
  <row Id="9482" PostId="890" Score="0" Text="My tests are lab practicals.  These involve problems of escalating complexity that demonstrate various levels of proficiency from basic to advanced.   I do not expect students to get 90% of this; I am looking for their level of proficiency demonstrated by what they can create." CreationDate="2018-01-06T01:14:06.280" UserId="21" />
  <row Id="1424" PostId="891" Score="3" Text="Very nice analogy.  &quot;The programmers are more like the cookbook&quot; :)" CreationDate="2017-06-20T23:06:53.143" UserId="27" />
  <row Id="1442" PostId="891" Score="0" Text="Nice indeed ! Very simple, yet accurate. Maybe adding a simple real example of code (like do the sum of the first 100 integers as @Cort Ammon suggested) would make them understand better." CreationDate="2017-06-21T07:09:09.487" UserId="1065" />
  <row Id="1460" PostId="891" Score="6" Text="I think it also helps to explain that computers do very simple things, but do them extremely quickly, and very reliably. Kind of like how a production line can build a car in lots of steps." CreationDate="2017-06-21T12:45:16.460" UserId="41" />
  <row Id="1503" PostId="891" Score="0" Text="I think it would be worth explaining that programs differ from recipes in that the result is not always the same.  You expect (hope) a recipe to yield the same thing each time.  The program will react different to different inputs, similar to a math equation." CreationDate="2017-06-21T16:52:19.670" UserId="259" />
  <row Id="1547" PostId="891" Score="0" Text="Knitting recipies may be an even better analogy.  The result is much more well-defined even though you have different sizes.  Also they _resemble_ code." CreationDate="2017-06-22T07:23:49.573" UserId="1213" />
  <row Id="1562" PostId="891" Score="0" Text="I very often use the 'recipe' analogy, so 1+ for that. But for a real-world demo, show them Robo Rally ([board game](https://boardgamegeek.com/boardgame/18/roborally)), or Chip Wits (brilliant ancient Mac game, [modern remake](http://www.chipwits.com/)), or Lego [Mindstorms](https://en.wikipedia.org/wiki/Lego_Mindstorms)." CreationDate="2017-06-22T11:09:29.460" UserId="1220" />
  <row Id="1564" PostId="891" Score="0" Text="The recipe and cookbook analogies are such great ways to deliver the idea of coding to people who don't know much code, that Chef ruby is based around them: https://docs.chef.io/ruby.html These ideas have proven to sell - they're worth a lot in term of business impact (and money, of course)." CreationDate="2017-06-22T12:28:21.990" UserId="1224" />
  <row Id="1565" PostId="891" Score="0" Text="You'll also have to convince your parents that computers are dumb machines which *have* to be told what to do. A lot of people will think of computers in terms of the function they provide." CreationDate="2017-06-22T13:08:05.013" UserId="1164" />
  <row Id="1586" PostId="891" Score="2" Text="I like and use the recipe analogy a lot, but I usually add the caveat that a program is a recipe written for an entity that cannot think for itself.  A standard recipe will just say something like &quot;add 2 cups of flour&quot;.&#xA;&#xA;However, there's a lot of assumed knowledge there that a computer program has to include explicitly.  Where does the flour come from?  What should be used to bring it over to the bowl?  What if there's not enough?  What if it spills?" CreationDate="2017-06-22T16:48:54.553" UserId="1243" />
  <row Id="1631" PostId="891" Score="0" Text="&quot;A computer is just a very fast electronic idiot&quot;" CreationDate="2017-06-23T06:45:44.560" UserId="1275" />
  <row Id="1429" PostId="892" Score="0" Text="I haven't used StarLogo Nova but have extensively used NetLogo (and years ago StarLogo).&#xA;&#xA;The things you liked - were they because they were drag and drop or were they due to the modelling environment which NetLogo provides with a text based language.&#xA;&#xA;Just curious." CreationDate="2017-06-20T23:43:20.497" UserId="237" />
  <row Id="1430" PostId="892" Score="0" Text="@MikeZamansky StarLogo Nova does provide a nice modelling environment with a wide array of things you can do with it, which I enjoyed - I didn't like it for being drag and drop, I liked it for its usefulness. That it was drag and drop didn't seem like such a bad thing because of how much I liked everything else." CreationDate="2017-06-20T23:47:26.470" UserId="919" />
  <row Id="8260" PostId="892" Score="0" Text="Yes, build something useful. Something fun if you can. That would probably work with Scratch as well." CreationDate="2017-09-21T11:48:57.800" UserId="1293" />
  <row Id="16573" PostId="893" Score="0" Text="For deeper example, assume that the babysitter is an alien so has no common sense." CreationDate="2020-06-11T05:42:27.077" UserId="1480" />
  <row Id="7054" PostId="894" Score="1" Text="It won't be _like_ learning an additional programming language, it _is_ a programming language." CreationDate="2017-08-16T17:23:40.593" UserId="1269" />
  <row Id="8230" PostId="898" Score="0" Text="Giovanni is asking about CS1 and CS2 in a post-secondary environment. The typical high-school course articulated to post-sec CS1 is AP CS A, a course using Java, and the syllabi are required to indicate that the course includes teaching waterfall methodology. So College Board thinks we should teach methodology in high school CS.  They name waterfall rather than Agile only because the objectives are stale. In writing a high school CS curriculum, I interviewed industry engineers. Agile and version control were named often as skills that they wanted to see more of in undergraduate programs." CreationDate="2017-09-19T05:02:31.367" UserId="765" />
  <row Id="8231" PostId="898" Score="0" Text="[Information Technology 2017: Curriculum Guidelines for Undergraduate Degree Programs in Information Technology](http://www.acm.org/binaries/content/assets/education/it2017.pdf): Information technology students &quot;need to learn about the mechanics and dynamics of effective team participation&quot;." CreationDate="2017-09-19T05:09:28.850" UserId="765" />
  <row Id="1453" PostId="899" Score="0" Text="Welcome to CSE! I like the way you've described bugs here. I hope we hear more from you in the future!" CreationDate="2017-06-21T10:51:57.100" UserId="27" />
  <row Id="1489" PostId="899" Score="6" Text="Just as an aside. I wouldn't get bored of calculating the sum of 1 to 1 million.  It's 1,000,001*500,000 = 500,000,500,000&#xA;I _would_ get bored if I actually added them up." CreationDate="2017-06-21T15:14:52.720" UserId="1159" />
  <row Id="4258" PostId="899" Score="0" Text="I recently asked my pupils to sum the numbers 1…100, I gave them 30 seconds. We then looked at how we could do it. We ended up with the formula $(n+1)\times{}n/2$ same as what @PhilMJones did." CreationDate="2017-07-14T16:26:52.837" UserId="204" />
  <row Id="1448" PostId="900" Score="0" Text="Welcome to CSE! This is an excellent analogy. I sure hope we will be hearing from you again soon." CreationDate="2017-06-21T09:54:19.543" UserId="150" />
  <row Id="1451" PostId="900" Score="0" Text="And &quot;language lawyer&quot; is a real term! http://wiki.c2.com/?LanguageLawyer" CreationDate="2017-06-21T10:32:55.003" UserId="993" />
  <row Id="1475" PostId="900" Score="2" Text="&quot;A good programmer can write you a program with no bugs&quot; - Maybe, but depending on the complexity it may be impossible to determine that. I find that telling the layperson that it is possible to produce a program with no bugs is giving a flawed impression. Perhaps this would be better: &quot;Good programmers can write you a program with few bugs.&quot; Gives a more nuanced impression about bug-checking and implies teamwork." CreationDate="2017-06-21T14:29:13.047" UserId="7" />
  <row Id="1478" PostId="900" Score="0" Text="Like I said, it can be hard to produce code with no bugs, because computers are complicated, languages are complex, and applications are varied. It *is* possible to produce a program with no bugs, but the difficulty of doing so grows exponentially with program scope and complexity. That's something you can explain alongside the analogy, but I don't think it's necessary to muddy the waters of something that is intended to illustrate the concept to laypeople with details of how difficult this job can be." CreationDate="2017-06-21T14:42:53.763" UserId="1129" />
  <row Id="1483" PostId="900" Score="0" Text="@anaximander Ok, let me nuance that further then. For a *good* programmer in most practical cases, producing a program with no bugs is a practical, if not theoretical, impossibility. An *outstanding* programmer in *some* cases may be able to produce guaranteed bug-free code. No, you shouldn't explain all this to the parents, but saying &quot;Good programmers can write you a program with few bugs&quot; is not complex and will suffice to give them a more accurate impression. See [this answer and associated comments](https://softwareengineering.stackexchange.com/a/195576/253910)." CreationDate="2017-06-21T14:59:39.623" UserId="7" />
  <row Id="1486" PostId="900" Score="1" Text="@called2voyage As a professional software engineer, I'm painfully aware of that. All I'm saying is that, for the purposes of an analogy to answer the question &quot;what is coding?&quot;, I don't think it's necessary to go into that much detail. Having used this analogy to explain my job to non-technical friends and family on several occasions, I do tend to go on to explain that the average computer program is so complex that it's nigh impossible to have zero bugs in anything beyond the truly trivial, but I'd consider that tangential to the actual answer to the question being asked here." CreationDate="2017-06-21T15:08:40.403" UserId="1129" />
  <row Id="1487" PostId="900" Score="0" Text="@anaximander We'll just have to agree to disagree then. From my perspective, saying &quot;A good programmer *can*...&quot; is a matter of possibility, and from the lay perspective it should be seen as simply *impossible*. Any discussion of possible bug-less code should be reserved for academic discourse where terms can be more clearly defined." CreationDate="2017-06-21T15:11:38.397" UserId="7" />
  <row Id="1533" PostId="900" Score="1" Text="@called2voyage A good programmer *can* write a (complex) program with no bugs.  Whether there exist any good programmers remains an open question." CreationDate="2017-06-21T23:25:08.607" UserId="827" />
  <row Id="1534" PostId="900" Score="0" Text="@Ray That's an overly restrictive definition of &quot;good&quot; for my tastes." CreationDate="2017-06-21T23:32:21.817" UserId="7" />
  <row Id="1480" PostId="901" Score="0" Text="P.S. I am not great at computer science, but i am an educator! My answer is a 'lesson one' intended for a layperson." CreationDate="2017-06-21T14:44:40.857" UserId="1011" />
  <row Id="1457" PostId="902" Score="0" Text="Btw, I know in my answer I'm mixing a lot of concepts, but it was on the hope of not overcomplicating my answer" CreationDate="2017-06-21T11:47:29.273" UserId="118" />
  <row Id="1458" PostId="903" Score="0" Text="Welcome to CSE!!" CreationDate="2017-06-21T12:43:58.323" UserId="27" />
  <row Id="1459" PostId="904" Score="0" Text="That's a cute joke. Welcome to CSE!" CreationDate="2017-06-21T12:45:14.100" UserId="27" />
  <row Id="1465" PostId="904" Score="0" Text="@BenI. - Thank you. Expanded it to make it more of a proper answer though (perhaps removing a bit of the punch. Sorry.)" CreationDate="2017-06-21T13:26:13.223" UserId="1139" />
  <row Id="15890" PostId="904" Score="0" Text="Thank you for a hard laugh!" CreationDate="2019-11-29T03:31:52.653" UserId="765" />
  <row Id="1468" PostId="905" Score="0" Text="Welcome to CSE!  For the unfamiliar, could you flesh out a bit of what these are?  I'm unsure about what tools like Retina, TestMyCode, etc are, and I also don't know what &quot;training&quot; worksheets are. They may be known to many, but if I don't know about them, then I'm sure there are also other who are unfamiliar." CreationDate="2017-06-21T13:47:57.737" UserId="27" />
  <row Id="1470" PostId="905" Score="0" Text="Thank you! These tools are used in the context of lab classes to gather &quot;snapshots&quot; from the student's code using one plug-in in the IDE of their choice (in my case, Eclipse and all JetBrains IDEs). The code snapshots are analyzed/processed, and several metrics may be used to determine the performance of the student as well as if s/he is doing plagiarism, and many other things. My big question is that it seems that they are familiar in the Academia, but not so much in the “real world”. Maybe the right term is: “practice assignments” and not “training worksheets&quot;." CreationDate="2017-06-21T14:04:34.283" UserId="1144" />
  <row Id="1471" PostId="905" Score="0" Text="Thanks!  Could you integrate that into the question?  Comments are considered &quot;transient&quot; on SE." CreationDate="2017-06-21T14:08:40.497" UserId="27" />
  <row Id="1477" PostId="905" Score="0" Text="Nice fix. One more thing, though! (Don't feel bad - learning how to write SE questions is tricky for everyone) Are your two questions related? The standard is one query per question.  If one question really just clarifies the other, then that is typically given a pass.  If that's not this, you should get rid of question 2 here and open a second question from the main page for it.  (And if these two *are* super-related, then the question probably needs more clarification anyway ;-)" CreationDate="2017-06-21T14:42:36.663" UserId="27" />
  <row Id="1469" PostId="906" Score="0" Text="I think I'm going to do something very much like this next year, and ask for regular notes to be taken without the computer when appropriate. This seems like a good compromise." CreationDate="2017-06-21T13:49:58.980" UserId="27" />
  <row Id="1476" PostId="907" Score="0" Text="That's a fair point. Though we also teach 6502 assembly at my workplace, and I learned ML, BASIC, and Pascal - they all served a pedagogic purpose at the time.  If it helps to get at an important concept, then that can be reason enough.  (And keeping student engagement high enough to actually learn and explore is part of communicating the concept)" CreationDate="2017-06-21T14:30:03.053" UserId="27" />
  <row Id="1479" PostId="908" Score="3" Text="Welcome to CSEducators.SE! Can you provide a little more context to your CS1 class? Language(s)? Background of students? Demographics? Path for students after that class? The more specific the information, the better the answers will be!" CreationDate="2017-06-21T14:44:01.230" UserId="76" />
  <row Id="1494" PostId="908" Score="1" Text="Possible duplicate of [How to stress the importance of testing code?](https://cseducators.stackexchange.com/questions/872/how-to-stress-the-importance-of-testing-code)" CreationDate="2017-06-21T15:21:33.160" UserId="58" />
  <row Id="1496" PostId="908" Score="0" Text="thesecretmaster, I understand your point, but that target students are different, and I am not asking &quot;what could be done&quot;, but &quot;if this should be done&quot;." CreationDate="2017-06-21T15:32:04.107" UserId="1144" />
  <row Id="1525" PostId="908" Score="1" Text="Not everyone knows that CS1 means the intro course for college majors. You might want to make that explicit." CreationDate="2017-06-21T21:25:08.417" UserId="283" />
  <row Id="1485" PostId="909" Score="0" Text="Kaneki, do you provide one assignment per week? The thing is that in my country it is very common to have worksheets with 10-30 small assignments for the period of one week. So, the performance is  measured as the number of assignments that they were able to solve corretly.  The &quot;big&quot; assignments are obviously assessed differently." CreationDate="2017-06-21T15:07:01.583" UserId="1144" />
  <row Id="1491" PostId="909" Score="0" Text="To clarify, weekly assignments are meant to be completed by first year skills within 2 hours. They are not trivial 1 function assignments, but rather implementing several functions. As stated above, they are purely automarked. We also give bigger assignments spanning 3-5 weeks and these are the ones we sit down with the students and review their code, asking questions." CreationDate="2017-06-21T15:17:08.727" UserId="747" />
  <row Id="1484" PostId="910" Score="0" Text="Nice article. Welcome to CSE! I hope we hear more from you in the future." CreationDate="2017-06-21T15:05:21.050" UserId="27" />
  <row Id="1488" PostId="911" Score="0" Text="Sure, I agree, :) My question was more to understand if educators are teaching/using it or not." CreationDate="2017-06-21T15:14:08.410" UserId="1144" />
  <row Id="1493" PostId="911" Score="0" Text="Updated answer! Thanks for the clarification." CreationDate="2017-06-21T15:20:35.690" UserId="747" />
  <row Id="15084" PostId="911" Score="0" Text="Real programmers don't use debuggers (they use unit tests). Writing bug free software is hard, but it is easier than removing bugs from buggy software." CreationDate="2019-05-26T09:12:11.357" UserId="204" />
  <row Id="1506" PostId="912" Score="0" Text="I really hate this damned machine /&#xA;I wish that they would sell it. /&#xA;It never does quite what I want /&#xA;But only what I tell it." CreationDate="2017-06-21T17:19:42.370" UserId="27" />
  <row Id="1509" PostId="913" Score="1" Text="Some of the commenters at the top should make note of this answer." CreationDate="2017-06-21T17:44:07.340" UserId="27" />
  <row Id="3960" PostId="913" Score="0" Text="Don't believe it, it is not true. We use `sed`." CreationDate="2017-07-10T17:41:58.633" UserId="204" />
  <row Id="3961" PostId="913" Score="1" Text="Snap has a facility to allow you to write a translator, to convert snap code to any other language. And another to make snap look like another language." CreationDate="2017-07-10T17:43:08.120" UserId="204" />
  <row Id="1512" PostId="914" Score="3" Text="I'm writing up my answer right now, but I wanted to take a moment to welcome you to CSE.  This is a great first question!" CreationDate="2017-06-21T17:59:55.950" UserId="27" />
  <row Id="1515" PostId="915" Score="0" Text="Nice answer. Welcome to CSE! I hope we hear more from you in the future." CreationDate="2017-06-21T18:26:05.877" UserId="27" />
  <row Id="1519" PostId="915" Score="0" Text="Piyush Parikh, I deal more frequently with the &quot;traditional curriculum&quot; (I myself, never learned unit testing in the University). But fully understand the advantages of using unit tests. The thing is that even in &quot;zero to job-ready&quot; courses using Java, I don't see the teachers using unit testing. Maybe it is a cultural issue..." CreationDate="2017-06-21T19:19:01.817" UserId="1144" />
  <row Id="1516" PostId="917" Score="0" Text="Welcome to [cseducators.SE]! Just to be clear, you are designing the curriculum for this new class that is being mandated?  Have you received a rationale or any other sort of guidance, or is this just coming from left field somewhere?" CreationDate="2017-06-21T18:46:24.213" UserId="27" />
  <row Id="1544" PostId="917" Score="0" Text="@BenI. It is being mandated and I have been  asked to advise on the curriculum.  I also just find the question interesting.  The rationale is not spelled out very clearly but I think it goes like this. Students will do projects in their degree, many of which will involve testing some hypothesis (e.g. does my computer vision/ML system detect the sharks well, does my new robot control work better than the old one etc) or at the very least evaluation of some user feedback of their software.    In general, many CS jobs are data heavy these days and stats is a core data analysis discipline." CreationDate="2017-06-22T06:18:52.547" UserId="1168" />
  <row Id="1554" PostId="917" Score="1" Text="I can't be much help with course design but I did the 'standard' first year statistics class in the Mathematics department as part of my CS degree and have found it hugely useful over the years since. So I think it's a good idea to mandate, for CS and probably for all science degrees. I don't think it's necessary to tailor the class just for CS; a broad introduction to stats generally will be helpful. The areas of stats that will/won't be useful will depend highly on what field students end up in, and it's hard to foresee that in year 1 of a degree." CreationDate="2017-06-22T09:46:45.913" UserId="57" />
  <row Id="1677" PostId="917" Score="0" Text="What level of statistics?  Often times the basic &quot;intro to stats&quot; class (STA2023 when I took it) is required for a STEM related AA degree or if &quot;skipping&quot; the AA then as a pre-req before entering the college the CompSci department is part of (I know ufl.edu works this way - CISE is part of the College of Engineering and any type of engineering has the basic stats as a pre-req for admittance, along with 2 terms each of chemistry and physics, and math through calc2 w/ diff eq.)." CreationDate="2017-06-24T00:12:50.733" UserId="662" />
  <row Id="1684" PostId="917" Score="0" Text="Can calculus be a prerequisite, or don't you require that?" CreationDate="2017-06-24T01:51:21.853" UserId="283" />
  <row Id="7726" PostId="917" Score="0" Text="&quot;I took Statistics once. It was awful.&quot; (see Grumpy Cat picture)" CreationDate="2017-09-01T13:25:27.513" UserDisplayName="user737" />
  <row Id="1518" PostId="918" Score="0" Text="It's similar in spirit (but different enough to be a different question IMHO) to this question: https://cseducators.stackexchange.com/questions/868/how-to-explain-what-code-is-to-my-parents We used [tag:layperson] there, which would fit here as well. I will add it." CreationDate="2017-06-21T19:00:11.147" UserId="76" />
  <row Id="1539" PostId="918" Score="0" Text="@PiyushParikh Feel free to roll back the title - I'm just trying to massage the question to be more on-topic, but you don't have to accept any changes you disagree with. (To roll back, just click where it says I edited the question, and you will see the edit and have the ability to roll back if you choose)" CreationDate="2017-06-22T01:55:09.517" UserId="27" />
  <row Id="1552" PostId="918" Score="0" Text="Title might be better comparing CS to coding. Maybe 'the science part of CS'." CreationDate="2017-06-22T09:39:39.643" UserId="41" />
  <row Id="2178" PostId="918" Score="1" Text="If you got to complexity and undecidability, you are probably one of the better 'ambassadors' in the world." CreationDate="2017-06-30T00:36:30.243" UserDisplayName="user737" />
  <row Id="2188" PostId="918" Score="1" Text="You're giving me a lot of credit when you should be giving it to my &quot;audience.&quot; He was really sharp, and interested. Guess you'd expect that from a doctor." CreationDate="2017-06-30T04:15:06.903" UserId="1166" />
  <row Id="1553" PostId="919" Score="0" Text="Rather than 'never gets dated', a lot of it becomes more widely relevant as hardware improvements reduce the compute cost (so it's not all abstract)." CreationDate="2017-06-22T09:45:47.713" UserId="41" />
  <row Id="1560" PostId="919" Score="5" Text="One thing I emphasize with my students, once they're up to algorithms, is that faster hardware and bigger hard drives make a lot of things *worse* instead of better. An $n^2$ algorithm on a faster computer is not really faster if the availability of more data tempts you into a larger $n$." CreationDate="2017-06-22T10:38:22.287" UserId="27" />
  <row Id="1520" PostId="920" Score="1" Text="That is a very relevant research paper.  Nice find!  In order to make this the best answer it can be (and in case the link one day goes dead), could you summarize the most important takeaways?" CreationDate="2017-06-21T19:44:56.610" UserId="27" />
  <row Id="1526" PostId="923" Score="0" Text="Mike, you kind of answered the question that I should have done! :) In introductory classes you can provide the tests as part of the assignments. This is one approach that I've seen previously!" CreationDate="2017-06-21T21:33:50.263" UserId="1144" />
  <row Id="1523" PostId="925" Score="0" Text="Regarding the little apology I just ripped out of your answer, no need to apologize. We're glad you found us :)" CreationDate="2017-06-21T21:15:20.397" UserId="27" />
  <row Id="1528" PostId="925" Score="0" Text="@BenI. Cheers. I usually figure the kind of people who care about the apology will be angry about not getting one but the kind of people who don't care won't mind seeing one (or quietly editing it out)." CreationDate="2017-06-21T21:37:59.270" UserId="1166" />
  <row Id="1527" PostId="926" Score="0" Text="Welcome to CSE! I hope we hear more from you in the future." CreationDate="2017-06-21T21:37:55.770" UserId="27" />
  <row Id="1660" PostId="926" Score="0" Text="No no, computers *are* magic. I should know, I'm an actual professional *friggin' wizard.* I got into [illusion magic](https://www.microsoft.com/en-us/hololens) recently, too. (In all seriousness, this comment is being serious)." CreationDate="2017-06-23T16:58:58.297" UserId="1244" />
  <row Id="1530" PostId="927" Score="0" Text="Great question! I edited out [tag:introductory-programming] because we are working to replace it with a more accurate tag. See meta for a full discussion of the effort." CreationDate="2017-06-21T22:03:44.930" UserId="76" />
  <row Id="1532" PostId="927" Score="2" Text="What are &quot;ghost students&quot;? I could recommend an exorcist. :)" CreationDate="2017-06-21T22:56:13.567" UserId="27" />
  <row Id="1566" PostId="927" Score="1" Text="&quot;Ghost students&quot;, are those that you know that exist, but have never actually seen them on classes... :)" CreationDate="2017-06-22T13:26:25.670" UserId="1144" />
  <row Id="15980" PostId="927" Score="0" Text="+1 for the question. Finding this eliminated the need to post the exact same question myself (at a large U.S. community college)." CreationDate="2019-12-23T04:46:18.523" UserId="8137" />
  <row Id="16008" PostId="927" Score="2" Text="Does credit not expire in your setting? Where I'm from, any passing grade from a class is set to expire after 3 years (unless you pass a re-test), which mostly prevents these issues." CreationDate="2019-12-30T10:42:21.213" UserId="2164" />
  <row Id="17091" PostId="927" Score="0" Text="Any solutions? Any answer deserving to be selected?" CreationDate="2020-09-26T15:20:23.523" UserId="5349" />
  <row Id="1531" PostId="929" Score="0" Text="Welcome to CSE? This is an excellent answer, and I hope we hear more from you in the future." CreationDate="2017-06-21T22:43:48.273" UserId="27" />
  <row Id="1567" PostId="931" Score="3" Text="Ben, I understand what you have said. The main problem is that this specific class is not optional. To graduate they will have to pass one day. &#xA;A few minutes ago I had a code review with one of those students (in a server-side dev class using PHP). The student is entirely unable to understand even the smaller concepts. He has just made a couple of Inserts on a few tables, but even that code was provided by me in the classes a few years ago.&#xA;My question is: should you tell a student that s/he is not fitted for this and s/he is just spending money? :(" CreationDate="2017-06-22T13:34:24.720" UserId="1144" />
  <row Id="1582" PostId="931" Score="1" Text="I don't believe there are people who can't get the first couple of CS courses. That being said, some people take longer to get it and some require different ways of having things explained to them." CreationDate="2017-06-22T15:48:27.593" UserId="541" />
  <row Id="1583" PostId="931" Score="1" Text="@NunoGilFonseca I agree with Alfred Thompson. If the course is required, then it falls onto the instructor to create a path that the student can follow in order to be successful. That path does not have to involve relaxing the standards they have to meet, and it can be difficult, but it must *exist*. Give them a *reasonable* list of resources and hoops (ie. not &quot;read these 3 books&quot;), and just make the standards and your recommendations for how to meet them know.  It is our job to help the students get to where they need to be *from where they are*, not from where we wish they were." CreationDate="2017-06-22T15:54:07.333" UserId="27" />
  <row Id="1866" PostId="931" Score="5" Text="@NunoGilFonseca no class is actually mandatory, because your major isn't mandatory.  I have tutored people, even smart people, that were not able to conceptualize comp sci principles and, for all they could squeeze by with barely passing grades in early classes, were simply not suited as programmers.  If someone is graduating a course with so little retention it's possible that they fit in that category of students that will never feel natural in CS no matter how hard they try.  It is better to recognize that now when there is still time to pursue another major then 2 years later." CreationDate="2017-06-26T18:04:22.277" UserId="1008" />
  <row Id="15978" PostId="931" Score="1" Text="I found this because I was about to post a basically identical question myself. I'm in the same situation as the OP (including basically same percentage stats I was going to post), at a U.S. community college. Unfortunately: All of the suggestions given here are things I've tried (for years!) and none of them make any difference at all. Students simply ignore the first-day review, packets, labs, quizzes, requests for one-on-one meetings, recommended cutoffs to withdraw, etc. They just keep coming with defeated looks on their faces, silently, day after day, semester after semester." CreationDate="2019-12-23T04:43:23.037" UserId="8137" />
  <row Id="15979" PostId="931" Score="1" Text="Not downvoting, but my sad takeaway is that there's absolutely no solution to this in really weak environments." CreationDate="2019-12-23T04:44:17.047" UserId="8137" />
  <row Id="17083" PostId="931" Score="1" Text="Ben, when you said &quot;*this should weed out some of the lowest performers*&quot;, yet you also assert that &quot;*it falls onto the instructor to create a path that the student can follow in order to be successful*&quot;, I am not sure how those 2 statements are compatible. I have seen many &quot;weed courses&quot; in all areas of academia, and I think that resources are best spent on those who have interest and show growing ability over time. Not everyone can do everything, much as that seems disappointing." CreationDate="2020-09-25T20:48:53.480" UserId="5349" />
  <row Id="17086" PostId="931" Score="0" Text="@ScottRowe I was proposing the teacher provide a general guide to the students about when they might not have the background (yet) for this particular class.  I'm now sure what the contradiction is.  If a student who has never written a lick of code joins my programming patterns course, my best advise for them to succeed is &quot;take some of the earlier classes first. This is an advanced course and isn't designed for people without background.&quot;  That *is* the guidance they need to be successful." CreationDate="2020-09-25T21:05:34.970" UserId="27" />
  <row Id="17087" PostId="931" Score="0" Text="OK Ben. I guess I was reacting to 'weed' and the instructor creating a path. Suggesting another course wasn't what I was thinking of as creating a path. Perhaps it is really up to the school to handle the path and qualification issues, not instructors of individual courses? In other words, maybe this question belongs under Academia SE or something? Aren't there prerequisite requirements that prevent someone from jumping ahead in the track?" CreationDate="2020-09-25T21:09:16.660" UserId="5349" />
  <row Id="2211" PostId="932" Score="0" Text="This is kind of what my older brother said to me when I was 7 and the only examples we had of computers were on melodramatic TV shows from the 60s: input, processing, output. Of course, I also had no clue what sort of inputs and outputs could possibly be important to anyone, so I focused on the black box in the middle, especially when I got my hands on one 7 years later. Don't type A=sys(-7) into a PDP-11. In other words: some people will be caught by the mystery, and everyone else will be put off by it. Just like every oter field." CreationDate="2017-06-30T12:08:10.963" UserDisplayName="user737" />
  <row Id="1540" PostId="934" Score="0" Text="Welcome to CSE! RF is, indeed, amazing. I hope we hear more from you in the future!" CreationDate="2017-06-22T01:56:58.130" UserId="27" />
  <row Id="1569" PostId="935" Score="0" Text="Welcome to CSE. I just went through your answers thus far, and I hope we hear more from you in the future!" CreationDate="2017-06-22T13:52:20.040" UserId="27" />
  <row Id="1558" PostId="945" Score="0" Text="While this is certainly an interesting take on how to teach OO, it isn't an analogy and so doesn't exactly answer the question. I think that it brings value to the question anyways, so +1." CreationDate="2017-06-22T10:14:11.317" UserId="58" />
  <row Id="1559" PostId="945" Score="0" Text="@thesecretmaster I do consider it an analogy. Just that the analogy is behavior. And how best to encode behavior than with code?" CreationDate="2017-06-22T10:33:14.080" UserId="1214" />
  <row Id="7727" PostId="946" Score="0" Text="Since video is probably the single biggest use of the Internet, let's hear more about Fine Arts in the curriculum." CreationDate="2017-09-01T13:26:41.090" UserDisplayName="user737" />
  <row Id="1556" PostId="948" Score="1" Text="Hi Checkersquares, welcome to CS Educators! I'd just like to warn you that this question might spark some discussion because it's not explicitly about teaching computer science, it's about getting someone interested in learning. I personally like this question because motivating students is certainly a part of teaching." CreationDate="2017-06-22T10:11:03.327" UserId="58" />
  <row Id="1561" PostId="948" Score="0" Text="@thesecretmaster Yeah I can see what you mean. From the SE sites I know it felt like the most appropriate, but it's probably a bit &quot;pre-education&quot;  and focuses more on a single person than a classroom (though I believe there's benefit in a more personalized education). If it gets flagged as off-topic I'll take it down." CreationDate="2017-06-22T10:58:12.503" UserId="1216" />
  <row Id="1760" PostId="948" Score="0" Text="I think this could be on-topic if it's re-written to be less specific, and more about diversity. The 'elite' perception is a valid concern - and although we'd prefer our junior coders to all be high-fliers, that would leave noone to do the implementation work or testing" CreationDate="2017-06-25T12:09:55.240" UserId="41" />
  <row Id="2216" PostId="948" Score="0" Text="I think that 'selling' CS to the right people is eminently on-topic, and there is nothing wrong with starting on a particular case. Flagging to reopen." CreationDate="2017-06-30T12:23:46.287" UserDisplayName="user737" />
  <row Id="1568" PostId="950" Score="0" Text="I just had a *why didn't I think of that???* moment. I love any activity that gets the kids out of their chairs. Wonderful!" CreationDate="2017-06-22T13:51:07.970" UserId="27" />
  <row Id="1570" PostId="952" Score="7" Text="Why not both? Give them group project with full code-review and proper testing." CreationDate="2017-06-22T14:16:36.097" UserId="685" />
  <row Id="1573" PostId="952" Score="3" Text="Introduce them to TDD early.  It's good for both breaking down tasks to develop algorithms, and for producing quality code in the first place.  Not to mention that it's a very good habit to have." CreationDate="2017-06-22T14:55:39.360" UserId="993" />
  <row Id="1575" PostId="952" Score="0" Text="Maybe write code, pass it to your neighbour and have them debug it." CreationDate="2017-06-22T14:58:01.870" UserId="1234" />
  <row Id="1604" PostId="952" Score="0" Text="What age group? In my undergrad work our faculty had all &quot;come from the industry&quot; so our work included large projects that were broke and required fixing before augmenting, creation work, and larger group projects where you had to collaborate, integrate and debug. All I'd say made me a better developer when I graduated." CreationDate="2017-06-22T19:48:04.660" UserId="35" />
  <row Id="1626" PostId="952" Score="0" Text="what makes you believe that any practical application can actually be error free?" CreationDate="2017-06-23T03:36:05.520" UserId="1270" />
  <row Id="1643" PostId="952" Score="2" Text="In my opinion it's not so much about the debugging (they'll do that anyhow on their own applications as well, although certainly it's different) but just the simple act of **reading other people's code**. In my opinion that's taught way too little if at all in university, but it is oh so very, very, very essential." CreationDate="2017-06-23T14:01:58.863" UserId="819" />
  <row Id="1669" PostId="952" Score="1" Text="Incidentally, as someone who's done both CS and French teaching-related work, I think there's an analogy with &quot;Should I have students write their own French or edit and translate others'?&quot; The answer is simply **yes** :) The more methods you can throw at a student for interacting with the material, the better it will stick, and also the more likely they'll discover what they love most. Similarly, in the CS courses I was helping with, there were lectures, guided labs, unguided labs, larger assignments, tiny Q&amp;As , mutual code reviews, puzzles, etc. — every possible tool. I thought it was great." CreationDate="2017-06-23T19:33:38.557" UserId="927" />
  <row Id="1732" PostId="952" Score="0" Text="I am currently experimenting with getting pupils to modify existing code — I have not been teaching long, but believe that this will have a better outcome that having struggle to start from zero." CreationDate="2017-06-24T23:53:01.757" UserId="204" />
  <row Id="1715" PostId="961" Score="4" Text="When I was in industry, by boss said to me: this test driven development thing, [that we introduced recently] is real value is not that it finds bugs, or that we can re-factor with out fear. The real value is that it saves us time, because it makes us think before writing the code." CreationDate="2017-06-24T15:39:16.013" UserId="204" />
  <row Id="20809" PostId="961" Score="0" Text="Anything that forces you to think is good. Pretty sure anyway..." CreationDate="2022-10-04T15:37:12.700" UserId="5349" />
  <row Id="20828" PostId="961" Score="0" Text="Actually in correct use of TDD there shouldn't be &quot;test hooks&quot; in the application code. This implies that the tests can only test visible features, which are actually tests against the requirements, not the implementation." CreationDate="2022-10-13T19:38:22.207" UserId="1293" />
  <row Id="20849" PostId="961" Score="2" Text="You can test your hypothesis by removing setup time: given them a bootstrapped project to clone with all dependencies and configurations in place, as well a a few skeletons. (This is something that has started to pop up in the industry as well: developer portals, golden path, etc. all aim for reducing kickoff time, to the point of full automation.)" CreationDate="2022-10-26T13:17:36.870" UserId="842" />
  <row Id="20850" PostId="961" Score="3" Text="Also, doing TDD is not always _easy_. In the short term, it certainly _feels_ faster to just start coding. In the industry, some technical coaches run people through a series of katas to get comfortable with the technique -- _then_ they apply it to their real problem. You'll find many resources for TDD katas online; the Samman Method may also provide some inspiration." CreationDate="2022-10-26T13:19:53.283" UserId="842" />
  <row Id="20997" PostId="961" Score="0" Text="@Raphael thanks for the hint I'm introducing tdd to student every year, but it's not easy to find exercises before going to the project, I didn't knew they were katas, thanks a lot!" CreationDate="2023-03-02T14:23:18.573" UserId="4900" />
  <row Id="1572" PostId="962" Score="1" Text="Wow, what kind of test could you even write for &quot;Hello, World&quot;? You're probably right but that's not the problem I'm describing. I'm talking about half-semester type projects done for real-world customers. Not exactly paycheck-worthy, but still full-fledged functioning web services deployed to real servers and everything solving a small need for someone in the community." CreationDate="2017-06-22T14:55:20.123" UserId="1166" />
  <row Id="1574" PostId="962" Score="0" Text="`assert &quot;Hello World&quot; == hello_world_method` I didn't realize the size of the projects being done. Would you mind editing that into the question?" CreationDate="2017-06-22T14:56:39.190" UserId="58" />
  <row Id="1576" PostId="962" Score="0" Text="IMO TDD isn't appropriate for bootstrapping a project. It's most useful for bug fixes: create a test that replicates the bug, make sure the test fails as expected, then fix the test." CreationDate="2017-06-22T15:04:11.250" UserId="65" />
  <row Id="1577" PostId="962" Score="0" Text="I made an attempt at editing but I'm not sure what to change. The question really applies regardless of project size, setting aside the fact for the moment that TDD/BDD aren't appropriate for tiny projects. Beyond that, I think the existing &quot;handful of weeks&quot; covers it." CreationDate="2017-06-22T15:07:02.503" UserId="1166" />
  <row Id="1578" PostId="962" Score="0" Text="@G.Ann-SonarSourceTeam TDD is the process of writing failing tests, making the tests pass and repeating until the project is complete." CreationDate="2017-06-22T15:07:20.613" UserId="58" />
  <row Id="1584" PostId="962" Score="0" Text="Yeah, I get that @thesecretmaster." CreationDate="2017-06-22T15:59:45.823" UserId="65" />
  <row Id="1603" PostId="962" Score="0" Text="BDD doesn't required Cucumber, you can do it without a framework as long as you are willing to follow the precepts. Cucumber, SpecFlow, etc. all help you &quot;compile&quot; BDD into code easier. Learning to think in BDD terms helps." CreationDate="2017-06-22T19:44:40.280" UserId="35" />
  <row Id="4499" PostId="962" Score="0" Text="@piyush Parikh This is exactly it.  It is a waste of time if the upfront cost is more than what it would cost to just brute force the logic.  You can't appriciate a testing or development methodology until you work on a project that's too big or complex for you to fit in your head at once." CreationDate="2017-07-18T22:56:26.700" UserId="900" />
  <row Id="1579" PostId="963" Score="0" Text="Hi John! Welcome to CS Educators! As it currently stands I don't really see anything different between your answer and the one given by @BrettBecker. Would you mind elaborating so that the difference becomes clear?" CreationDate="2017-06-22T15:23:23.470" UserId="58" />
  <row Id="1580" PostId="963" Score="1" Text="If you look at it from a perspective of teaching debugging to someone who has zero knowledge on the subject, though, targeted debugging exercises written by an instructor can focus on specific skills and strategies in a far more structured fashion than simply relying on whatever luck-of-the-draw situation comes from student-generated code.  By all means, this shouldn't be an either-or proposition.  Both skills are critical." CreationDate="2017-06-22T15:23:35.653" UserId="1235" />
  <row Id="1581" PostId="965" Score="1" Text="Hi Tom! Welcome to CS Educators! This is a really great first answer, thanks for writing it up!" CreationDate="2017-06-22T15:24:42.830" UserId="58" />
  <row Id="1590" PostId="968" Score="0" Text="Welcome to CSE! This answer is a little short on details, would you mind fleshing it out a little? Otherwise, it's a pretty nice analogy. I hope we hear more from you in the future." CreationDate="2017-06-22T17:30:58.467" UserId="27" />
  <row Id="1595" PostId="969" Score="0" Text="I do an assignment almost exactly like this (and it's a doozy). The only difference is that... this is a better basis for the assignment. Please excuse me while I go convert a lab to rational numbers..." CreationDate="2017-06-22T18:41:04.553" UserId="27" />
  <row Id="1600" PostId="969" Score="0" Text="Use BigIntegers for your state variables." CreationDate="2017-06-22T19:02:51.087" UserId="21" />
  <row Id="1596" PostId="970" Score="1" Text="Welcome to CSE! This is a gorgeous answer, and I hope we hear more from you in the future!" CreationDate="2017-06-22T18:44:28.813" UserId="27" />
  <row Id="1598" PostId="970" Score="0" Text="@BenI. I saw another question on the Hot Network Questions the other day but this one pulled me out of the woodwork. I will probably be more of a lurker, though!" CreationDate="2017-06-22T18:52:18.603" UserId="1244" />
  <row Id="1599" PostId="970" Score="0" Text="More's the pity. Pipe in whenever you get inspired ;-)" CreationDate="2017-06-22T18:57:12.127" UserId="27" />
  <row Id="1601" PostId="970" Score="0" Text="@BenI. I'm no educator, but I'll certainly speak up when I see something that I can talk about. My CS education was so incomplete as to be almost useless." CreationDate="2017-06-22T19:03:19.023" UserId="1244" />
  <row Id="2125" PostId="970" Score="3" Text="Your third-and-second-to-last paragraphs are really important. The &quot;zoo&quot; type introductions to OO are, in my opinion, extremely destructive. They can mess up how people think about OO design in a subtle way for a really long time. Switches, lights, and anything where there's a natural input, output and desired behavior are so much better than &quot;a cat is an animal, so Cat.MakeNoise() should return 'meow'&quot;." CreationDate="2017-06-29T17:23:19.687" UserId="1218" />
  <row Id="2126" PostId="970" Score="3" Text="This can also lead on really nicely to encapsulation and abstraction as concepts. Note that the wiring from a switch to a lightbulb isn't accessible to the user. And that not knowing whether a class member should be public or private is like not knowing whether part of a TV should be on the inside or outside!" CreationDate="2017-06-29T17:23:23.470" UserId="1218" />
  <row Id="2128" PostId="970" Score="0" Text="Exactly @BenAaronson . It's not a *perfect* analogy as the programmer often is the electrician, messing about with the wires, but the general idea holds up pretty well." CreationDate="2017-06-29T17:33:38.917" UserId="1244" />
  <row Id="1597" PostId="971" Score="4" Text="&quot;Computer science is an academic field. It's theoretical. Programming is more practical; it's a tool.&quot; Beautiful and succinct." CreationDate="2017-06-22T18:45:59.140" UserId="27" />
  <row Id="17090" PostId="972" Score="0" Text="Three years later - any solutions? Don't the universities want to address this, or is it a profit center for them?" CreationDate="2020-09-26T15:19:21.497" UserId="5349" />
  <row Id="1602" PostId="973" Score="4" Text="Can you specify your audience? Is this 1st year high school or university? Is the course for Computer Science majors, or everyone?" CreationDate="2017-06-22T19:26:45.810" UserId="747" />
  <row Id="1620" PostId="973" Score="2" Text="There is a big difference between teaching it, mentioning it in passing or using it as an example when teaching hex. You could just as usefully teach hex as having a 4 bit mapping for each digit, and that would be closer to what designers use most of the time." CreationDate="2017-06-22T23:23:42.667" UserId="41" />
  <row Id="1627" PostId="973" Score="5" Text="If you don't understand binary you're going to have a hard time with bitmapped flags--and high level languages do have bitmapped flags." CreationDate="2017-06-23T04:26:53.673" UserId="668" />
  <row Id="1632" PostId="973" Score="9" Text="Wait, you mean they haven't been taught number representations in high school? I'm truly shocked." CreationDate="2017-06-23T06:50:22.940" UserId="945" />
  <row Id="1635" PostId="973" Score="3" Text="@LorenPechtel your comment made me realize I haven't manually built a binary bitmapped flag in **years** (actually, since my 2nd college year). Nowadays, most popular functions use constants that you can OR together, e.g. [PHP's json_encode](http://php.net/manual/es/function.json-encode.php). We are so spoiled!" CreationDate="2017-06-23T09:51:20.440" UserId="994" />
  <row Id="1657" PostId="973" Score="1" Text="I teach high school so was thinking about that. But really the first CS course at any grade level is fairly similar in scope and sequence if you assume not previous knowledge." CreationDate="2017-06-23T16:50:35.887" UserId="541" />
  <row Id="1666" PostId="973" Score="1" Text="If you don't teach them binary how are you going to teach them that 5 * 0.2 != 1.0?" CreationDate="2017-06-23T18:37:26.903" UserId="1301" />
  <row Id="1673" PostId="973" Score="0" Text="What exactly is &quot;learning Binary&quot;? Knowing that computers work with a binary system, or being able to read and maybe calculate with binary numbers?" CreationDate="2017-06-23T22:04:45.757" UserId="653" />
  <row Id="1721" PostId="973" Score="0" Text="@JörgWMittag Oddly, very little emphasis is placed on this is math classes in American public schools in my experience. When I entered my first year of college as a Computer Science major, I was shocked by how many of even the best students had no idea what a number base was. After I transferred into public school during high school, each year I ended up teaching fellow students about number bases before mathematics competitions because they weren't taught in any of the classes. And, again, these were the students who were participating in mathematics contests, not just average students." CreationDate="2017-06-24T18:29:18.927" UserId="1319" />
  <row Id="1725" PostId="973" Score="0" Text="@JörgWMittag In my experience, grade 6 in a private school is roughly equivalent to grade 12 in a public school." CreationDate="2017-06-24T20:48:11.020" UserId="676" />
  <row Id="1780" PostId="973" Score="0" Text="The question is, “is it a pre-requisite to teaching another part of the syllabus”" CreationDate="2017-06-25T18:28:51.940" UserId="204" />
  <row Id="1784" PostId="973" Score="0" Text="There are 10 types of people in the world: those that know binary, and those that don't." CreationDate="2017-06-25T18:30:04.593" UserId="204" />
  <row Id="1814" PostId="973" Score="0" Text="@richard: I can never decide which version of that joke is funnier: the one with 10 or the one with 11." CreationDate="2017-06-26T00:22:39.727" UserId="945" />
  <row Id="1605" PostId="974" Score="1" Text="Very nice answer. Welcome to CSE!" CreationDate="2017-06-22T20:31:52.097" UserId="27" />
  <row Id="1606" PostId="976" Score="0" Text="Nice answer. Welcome to CSE!" CreationDate="2017-06-22T20:33:02.440" UserId="27" />
  <row Id="1630" PostId="976" Score="3" Text="I came to this HNQ to find an answer like that. In the industry, you often have contexts where it is 90% debugging and rewriting existing code, and only 10% writing your own. So from the &quot;real world&quot; perspective, debugging existing code, usually written by others, is much more prevalent than writing from scratch, but being very good at writing from scratch of course provides the knowledge and capability to know how the debugged code should look like, what's wrong with it." CreationDate="2017-06-23T06:39:13.930" UserId="1274" />
  <row Id="1607" PostId="977" Score="0" Text="Nice answer. Welcome to CSE!" CreationDate="2017-06-22T20:33:29.743" UserId="27" />
  <row Id="1608" PostId="977" Score="0" Text="@BenI. Thanks! Please feel free to let me know if my answer could be improved." CreationDate="2017-06-22T20:36:24.890" UserId="1099" />
  <row Id="1625" PostId="977" Score="2" Text="Re, &quot;1 means on, 0 means off.&quot;  If you're using bits as BInary digiTS, then 1 means 1x2^n where n is the bit position, and 0 means 0.  If you're using them for any other purpose in software, then 1 and 0 mean whatever the developer wants them to mean.  If you're using them to control hardware, then 1 and 0 mean whatever was convenient for the hardware designer.  (Back in the days of TTL logic, 0 often meant &quot;on&quot; and 1 &quot;off&quot;.)" CreationDate="2017-06-23T03:31:05.987" UserId="1269" />
  <row Id="1642" PostId="977" Score="0" Text="Ah, sorry, my answer isn't completely clear there. I'll figure out how best to update that. Thanks!" CreationDate="2017-06-23T13:52:08.067" UserId="1099" />
  <row Id="1617" PostId="978" Score="0" Text="Our first real Computer Science Problem: How do you change base representations of numbers. Here is a big fat place to introduce mod (%)." CreationDate="2017-06-22T22:49:23.217" UserId="21" />
  <row Id="1614" PostId="979" Score="0" Text="We don't get a ton of time to cover debugging. Partly because they will *have* to pick this up later, so we try to focus in on the things that will be harder to pick up naturally. Nice answer, welcome to CSE!" CreationDate="2017-06-22T22:05:56.403" UserId="27" />
  <row Id="1613" PostId="980" Score="0" Text="Nice insights from seasoned developer. Welcome to CSE!" CreationDate="2017-06-22T22:04:21.437" UserId="27" />
  <row Id="7900" PostId="980" Score="0" Text="I love these stages and their order, showing students good code before having them write their own is a better way to build a foundation of coding skills necessary to tackle more advanced material." CreationDate="2017-09-08T07:48:12.540" UserId="2927" />
  <row Id="1616" PostId="981" Score="0" Text="Welcome to CSeducators Stack Exchange! `unittest`  it Python specific, and if the class if based on Python this could be a good project. Could the same project concept be developed to apply to any language?" CreationDate="2017-06-22T22:28:43.960" UserId="104" />
  <row Id="1637" PostId="981" Score="0" Text="@GypsySpellweaver I don't see why this should be restricted to any language." CreationDate="2017-06-23T12:18:39.503" UserId="1256" />
  <row Id="20998" PostId="981" Score="0" Text="This is a great idea, but as some of the other it doesn't really works when you don't have days and days..." CreationDate="2023-03-02T14:27:33.443" UserId="4900" />
  <row Id="21005" PostId="981" Score="1" Text="@YCN- You are right, but TDD isn't something you can learn in two hours. TDD is a **skill** that needs to be developed and trained." CreationDate="2023-03-05T13:09:05.070" UserId="1256" />
  <row Id="21007" PostId="981" Score="1" Text="@TimothyTruckle definitively, I've managed to find an alternative, I'm showing them the technique live in class, and asking them afterward to do that on exercises that goes from very dummy stuff around string and then goes up to database insertion, rest api testing, sudoku grid verifying and that kind of stuff. And after that we get into the project where I ask them to use tdd and develop a simple api, for instance this year we made a very stupid copycat of pastebin." CreationDate="2023-03-06T15:28:29.140" UserId="4900" />
  <row Id="1611" PostId="982" Score="8" Text="I always make that joke about 132. :)" CreationDate="2017-06-22T21:58:06.757" UserId="27" />
  <row Id="1659" PostId="982" Score="1" Text="I'm very careful about that in the HS classroom." CreationDate="2017-06-23T16:51:21.497" UserId="541" />
  <row Id="1664" PostId="982" Score="1" Text="Good point, @AlfredThompson. I teach at a women's college, where the students are more mature than high schoolers." CreationDate="2017-06-23T17:54:33.690" UserId="283" />
  <row Id="1678" PostId="982" Score="1" Text="This is unwise.  Ironically, the more high-level the language, the more likely the bite of the unanticipated sign bit will be severe.  Good luck to the binary-ignorant Java programmer who needs to place multi-byte values in a stream of data." CreationDate="2017-06-24T00:46:13.577" UserId="1308" />
  <row Id="1682" PostId="982" Score="3" Text="@ChrisStratton Whether programmers should know binary is a different question than whether they should learn it freshman year. Big-O notation is important, but students typically don't learn that until their second year of college CS." CreationDate="2017-06-24T00:57:53.743" UserId="283" />
  <row Id="1683" PostId="982" Score="3" Text="Big-O notation is far less important.  First, the notation itself does nothing; it's the concepts it expresses - you can have perfectly fine conversations about efficient computation without involving it at all.  But even then, ignorance of algorithmic efficiency may get you *slow* code; but ignorance of numeric formats yields *broken* code." CreationDate="2017-06-24T01:03:51.513" UserId="1308" />
  <row Id="1719" PostId="982" Score="0" Text="@BenI.the important question is when you sign 132 is that right endian or left endian?" CreationDate="2017-06-24T17:01:53.837" UserId="990" />
  <row Id="1736" PostId="982" Score="0" Text="The idea that binary &quot;is not needed when programming in high-level languages&quot; is not just utterly wrong but dangerous. It leads to ideas like thinking floating point numbers are real numbers." CreationDate="2017-06-25T03:01:50.740" UserId="1327" />
  <row Id="1767" PostId="982" Score="1" Text="@R.. Good point. If you read my full answer, you'll see that I mention learning it later in the curriculum, just not in the first year. I'll qualify my second sentence." CreationDate="2017-06-25T14:04:10.233" UserId="283" />
  <row Id="1612" PostId="984" Score="0" Text="This is a nice lab idea. Welcome to CSE!" CreationDate="2017-06-22T22:00:22.190" UserId="27" />
  <row Id="1675" PostId="984" Score="1" Text="Thanks! This happened to me as a student in a CS 2020 class, probably this is most effective at a specific level of complexity." CreationDate="2017-06-23T23:31:49.843" UserId="1172" />
  <row Id="17199" PostId="984" Score="1" Text="As a professional software developer, in my experience this is how a lot of real-world coding tests are given to applicants. The applicant is also encouraged to add their own tests, which often gives them a competitive advantage over applicants who don't do this." CreationDate="2020-11-11T14:57:51.337" UserId="9684" />
  <row Id="1619" PostId="985" Score="4" Text="Strongly disagree. Digital logic is designed at a higher level of abstraction than this. Yes, eventually the mapping to bits is relevant, but datapath is mostly '+' and '-' functions. Logic, yes. Binary not so much." CreationDate="2017-06-22T23:16:37.340" UserId="41" />
  <row Id="1633" PostId="985" Score="2" Text="@SeanHoulihane - boolean logic is literally about binary states." CreationDate="2017-06-23T08:44:25.497" UserId="1145" />
  <row Id="1634" PostId="985" Score="4" Text="@Davor yes, as in 2 state logic (or sometimes 4). Nothing to do with power of 2 number systems." CreationDate="2017-06-23T09:03:03.377" UserId="41" />
  <row Id="1639" PostId="989" Score="7" Text="I feel like the tone here says students will be completely lost without understanding binary, which is hyperbole. It's a pretty easy thing to learn at any point. But I do agree that it's much easier to understand later CS concepts with a good grasp on binary. I recall several projects in C that would have been much easier if I understood bits and bitwise operators and how to use them." CreationDate="2017-06-23T13:14:19.907" UserId="1286" />
  <row Id="1640" PostId="989" Score="2" Text="@ChrisSchneider I'm trying to think of a single CS concept that isn't rooted in or directly related to discrete elements, Boolean logic or binary.  What would you *teach* of CS to students who didn't know these things?  I'm really wondering." CreationDate="2017-06-23T13:24:47.347" UserId="1103" />
  <row Id="1641" PostId="989" Score="8" Text="Boolean can be understood quite easily without understanding binary or even knowing it exists. True and false are real world concepts not exclusive to CS and kids learn about `&gt;` `&lt;` `==` in 2nd or 3rd grade. I mean, that _is_ still binary, just not taught as a CS concept." CreationDate="2017-06-23T13:36:03.063" UserId="1286" />
  <row Id="1656" PostId="989" Score="1" Text="how do you know OP is teaching computer scientists? It could just be an introductory programming course, in which case I would *not* expect binary to be taught. It's absolutely not required." CreationDate="2017-06-23T16:47:57.020" UserId="869" />
  <row Id="1718" PostId="989" Score="1" Text="Most students taking a computer science degree have zero intention of being a computer scientist. 95+% of them are going to be maintaining poorly written internal apps for some big company." CreationDate="2017-06-24T17:00:03.833" UserId="990" />
  <row Id="1724" PostId="989" Score="1" Text="You didn't stress this enough: Learning binary is the most important thing a first-year can learn! Living in a mostly decimal world working with binary numbers is the best way to learn about models, transformation and data representation as such. Even though it's never explicitly communicated this way." CreationDate="2017-06-24T20:28:59.243" UserId="1320" />
  <row Id="6004" PostId="989" Score="0" Text="@corsiKa, does that mean we should pander to that lowest common denominator in our teaching and not even *attempt* to relay any deep understanding?  Interesting view.  Doesn't seem to belong on CS **Educators** SE, though.  It reminds me of the fantasy novel *The Year of the Griffin* by Diana Wynne Jones, which examines the aftereffects of such an approach to teaching magic.  (A great read, BTW.)  :)" CreationDate="2017-07-24T22:21:39.247" UserId="1103" />
  <row Id="1815" PostId="991" Score="0" Text="Changing base representations of numbers is an excellent early example of a non-trivial algorithm." CreationDate="2017-06-26T00:26:10.303" UserId="21" />
  <row Id="1645" PostId="992" Score="2" Text="Hi Ramon! Welcome to CSE! This is a great first question." CreationDate="2017-06-23T15:07:00.043" UserId="58" />
  <row Id="1772" PostId="992" Score="0" Text="@thesecretmaster Thanks! I must confess I've committed just so I could discuss this question, it's been haunting me for quite a while." CreationDate="2017-06-25T17:27:30.863" UserId="78" />
  <row Id="2595" PostId="992" Score="0" Text="Physics and Calculus have been around a lot longer and probably change more slowly (at the introductory level) than computer-related subjects. It is little wonder that we struggle to know how to teach it, and that culturally, few people have mental models that allow them to learn easily. But maybe programming is just *more abstract* than expressing a particular problem in physics or calculus? Since it can absorb any problem from those two fields and more, I am betting so." CreationDate="2017-07-04T19:31:45.423" UserDisplayName="user737" />
  <row Id="1647" PostId="993" Score="0" Text="Thanks for the answer, it's been a very insightful read. I got sad at the &quot;please don't accept a 30% failure rate as the norm, or even as acceptable&quot; part, though, because that was the absolutely very best we've managed to do. College is free here and students often leave our program in the middle of the term to prospect other fields." CreationDate="2017-06-23T15:18:24.193" UserId="78" />
  <row Id="1652" PostId="993" Score="0" Text="Take what I say with a grain of salt, then, because I am in such a different context. If the consequences of failure are not catastrophic, then perhaps that 30% is much more reasonable. Do kids leaving mid-range to prospect elsewhere count as failures?" CreationDate="2017-06-23T16:30:43.410" UserId="27" />
  <row Id="1775" PostId="993" Score="0" Text="Yes, they do, but failing and leaving are often correlated. Students who pass CS101 and CS201 will hardly leave, and, when they do, they'll pick a major where their credits can be used, such as math or stats. Reading the 2006 article had sort of brought me a bit of peace of mind (after all, _not everyone could learn, so it was out of our reach anyway_), but the retraction made me worry our mindset might be a lot more pernicious than I had previously expected." CreationDate="2017-06-25T17:41:22.863" UserId="78" />
  <row Id="1655" PostId="998" Score="0" Text="Welcome to CSEducators.SE! Thanks for the thorough response. Looking forward to hearing more from you!" CreationDate="2017-06-23T16:47:50.353" UserId="76" />
  <row Id="7728" PostId="1000" Score="0" Text="Yes these concepts should be taught, but I don't think that an entire course is necessary. Just tack it on after covering Aggregates in SQL, along with some Analysis basics." CreationDate="2017-09-01T13:28:20.043" UserDisplayName="user737" />
  <row Id="21397" PostId="1001" Score="0" Text="The first paragraph is the key. TDD is driven by requirements. You test *requirements* not code. In fact, you start with a single requirement and write one test. Then make the test pass. Add another test for another requirement and get that to pass. Repeat until all requirements are passing. And then I wish I could up-vote this answer again for *changing* the requirements — the second key point to understand!" CreationDate="2023-08-20T03:19:39.107" UserId="5110" />
  <row Id="1987" PostId="1002" Score="0" Text="Thank you for this. Do you know if there is a plan for an  update on CS2013?" CreationDate="2017-06-28T08:30:32.493" UserId="1168" />
  <row Id="4323" PostId="1002" Score="1" Text="These documents from ACM and IEEE tend to be updated about every 10 years." CreationDate="2017-07-15T18:23:52.007" UserId="541" />
  <row Id="1663" PostId="1003" Score="0" Text="Hi Geoff! Welcome to [cseducators.se]!  Thanks for choosing to contribute your knowledge here. Would you mind fleshing out your answer a bit more? It's already good as is, but that might make it a bit better." CreationDate="2017-06-23T17:23:07.130" UserId="58" />
  <row Id="1722" PostId="1005" Score="1" Text="That's an interesting article. Welcome to [cseducators.SE]. I hope we hear more from you in the future!" CreationDate="2017-06-24T18:31:19.973" UserId="27" />
  <row Id="1686" PostId="1006" Score="0" Text="@Aurora0001 I think I did. Please point out if I missed something." CreationDate="2017-06-24T05:50:50.460" UserId="97" />
  <row Id="1702" PostId="1006" Score="1" Text="This is a fantastic answer now, thanks. Great edit!" CreationDate="2017-06-24T08:49:34.390" UserId="2" />
  <row Id="7800" PostId="1006" Score="0" Text="Values should be a noun, except booleans that should be an adjective. `get` is a verb. (Would you ever ask someone “What is your get height?”?)" CreationDate="2017-09-04T10:10:21.717" UserId="204" />
  <row Id="1671" PostId="1010" Score="1" Text="Hi Luizfzs! Welcome to [cseducators.se]! Don't worry about not being a salaried teacher -- I'm not either. Anyone who had experience or is interested in CS Education is welcome here, and I'm sure you've taught someone else some CS at some point. This is an interesting take on the question, and I hope to hear more from you!" CreationDate="2017-06-23T20:53:27.260" UserId="58" />
  <row Id="1670" PostId="1013" Score="1" Text="Hi Jeffery! Welcome to [cseducators.se]! This is a good answer, and we hope to hear more from you in the future. I like your use of an example conversation." CreationDate="2017-06-23T20:42:50.633" UserId="58" />
  <row Id="1674" PostId="1015" Score="1" Text="Welcome to [cseducators.se]. Glad to have you here, and I hope we will be seeing more of you around the site." CreationDate="2017-06-23T22:34:56.400" UserId="104" />
  <row Id="7729" PostId="1017" Score="0" Text="For business programming, you could probably get by with a little algebra. My students often look surprised when I show three ways to do a percentage discount calculation. Gosh." CreationDate="2017-09-01T13:30:02.090" UserDisplayName="user737" />
  <row Id="17085" PostId="1019" Score="0" Text="It's definitely worth knowing, I think the students themselves ought to want to know." CreationDate="2020-09-25T20:55:20.317" UserId="5349" />
  <row Id="1777" PostId="1020" Score="0" Text="Thanks for the answer. So, do you have some collaborative material you could share with us? Also, I didn't understand your instance on sharing past grades with new students, could you please clarify?" CreationDate="2017-06-25T17:57:32.660" UserId="78" />
  <row Id="2219" PostId="1021" Score="0" Text="My supervisor (at a teaching institution) emphasizes these same points about the joy of seeing it run." CreationDate="2017-06-30T12:28:02.953" UserDisplayName="user737" />
  <row Id="1685" PostId="1022" Score="2" Text="Welcome to Computer Science Educators Stack Exchange! This is a great answer! I hope We'll be seeing more answers from you." CreationDate="2017-06-24T05:48:36.780" UserId="150" />
  <row Id="1687" PostId="1022" Score="1" Text="Thank you for the warm welcome! :) I am admittedly not an educator (past helping some of the kids from the class below me in my programming course during high school) and am in fact enrolled in a CS program starting this fall. However I have been coding for a few years and found this post through the sister site Stack Overflow." CreationDate="2017-06-24T05:57:12.997" UserId="1309" />
  <row Id="1688" PostId="1022" Score="2" Text="Welcome to CSE @cMcNerlin. Don't feel anything coz of not being an educator. Me too not a professional educator. I usally teach coding for my friends and relatives. I am a Developerby profession. and Please note Stackoverflow is actually the father. First they started Stackoverflow and later moved to SE." CreationDate="2017-06-24T06:00:13.920" UserId="97" />
  <row Id="1690" PostId="1022" Score="1" Text="@cMcNerlin It's quite alright. Most are not professional educators here, but they do have insight. I am not a professional teacher, but I have my fair share of teaching, mentoring (see [my question](https://cseducators.stackexchange.com/questions/396/teaching-coding-paradigms-and-concepts-with-specific-context) in that context) and tutoring." CreationDate="2017-06-24T06:04:20.617" UserId="150" />
  <row Id="1691" PostId="1022" Score="0" Text="@Sagar V Thank you for the encouraging words and fun fact! It seems that SE (or at least the CS educators section) is very welcoming and happy to have new contributors. Also, I have found that every developer or even a novice coder has something to offer for somebody." CreationDate="2017-06-24T06:07:06.980" UserId="1309" />
  <row Id="1692" PostId="1023" Score="0" Text="To whom are you giving an introduction?" CreationDate="2017-06-24T06:27:08.023" UserId="150" />
  <row Id="1693" PostId="1023" Score="0" Text="aged less than 15" CreationDate="2017-06-24T06:28:12.353" UserId="97" />
  <row Id="1695" PostId="1023" Score="0" Text="I am not a teacher by profession. This is to teach about internet and give a rough idea on CS to some of my relatives" CreationDate="2017-06-24T06:31:12.673" UserId="97" />
  <row Id="1707" PostId="1023" Score="1" Text="I'd love if this was in the site's scope, but based on meta discussions, it is not. https://cseducators.meta.stackexchange.com/questions/93/site-scope-refinement-internet-safety @ItamarGreen you were one of the most verbose opponents of topics like this on this site. I'm glad to see you have changed your mind." CreationDate="2017-06-24T13:08:59.677" UserId="51" />
  <row Id="1709" PostId="1023" Score="0" Text="@vacip &quot;This is to teach about internet and give a rough idea on CS&quot; OP's quote. This is for teaching and giving a rough idea on computer science. But this is bordering the &quot;on-topic&quot; territory. I'm not entirely sure it is on-topic, but we'll just wait and see what happens." CreationDate="2017-06-24T13:17:10.990" UserId="150" />
  <row Id="1714" PostId="1023" Score="1" Text="This question [was discussed in chat](https://chat.stackexchange.com/rooms/59174/conversation/is-internet-safety-off-topic). Specifically, we discussed if it was on topic or not, given that it is currently gaining close votes." CreationDate="2017-06-24T15:12:53.873" UserId="58" />
  <row Id="1698" PostId="1026" Score="1" Text="+1. That was a detailed answer" CreationDate="2017-06-24T06:57:36.293" UserId="97" />
  <row Id="1720" PostId="1026" Score="2" Text="@SagarV To show your support for an answer, you can just use an up-vote. We want to keep comments for further clarification or additional information. As the prompt says, &quot;Avoid comments like '+1' or 'thanks'&quot;." CreationDate="2017-06-24T17:14:47.183" UserId="76" />
  <row Id="1700" PostId="1030" Score="5" Text="&quot;Compiled&quot; and &quot;interpreted&quot; are properties of implementations. CPython inteprets Python, but it first compiles Python to bytecode before actually interpreting it. PyPy compiles Python using JIT. Jython compiles Python to JVM bytecode, as does javac. As for Java, the Java bytecode needs to be eventually intetpreted, but there are implementations like gcj which compile Java to native code. Conclusion: don't complicate things; the bigger difference is that Python is dynamically typed while Java is statically typed." CreationDate="2017-06-24T08:44:20.213" UserId="130" />
  <row Id="1701" PostId="1030" Score="0" Text="@xuq01 fair point, I edited the question. Thanks!" CreationDate="2017-06-24T08:47:00.087" UserId="150" />
  <row Id="1828" PostId="1030" Score="0" Text="You might be interested in reading this paper (http://dl.acm.org/citation.cfm?id=2831459) on why one educator switched back to Java after switching to Python." CreationDate="2017-06-26T08:40:10.883" UserId="466" />
  <row Id="1699" PostId="1035" Score="0" Text="I wasn't familiar with `dis`. Thanks!" CreationDate="2017-06-24T08:16:15.873" UserId="150" />
  <row Id="1771" PostId="1035" Score="1" Text="I wish I'd been exposed to the mechanics of programming languages earlier - I think I'd have really benefitted from something like this. It's only when I started looking at reverse engineering that I began to look at how the JVM worked, how I could disassemble code etc." CreationDate="2017-06-25T17:02:54.460" UserId="916" />
  <row Id="1739" PostId="1037" Score="3" Text="Are you sure they're between 17 and 19? In our college(VNIT), those courses are taught at the UG level to third year CS students, which means the students learning those are between 20 and 22." CreationDate="2017-06-25T03:55:58.610" UserId="1328" />
  <row Id="1838" PostId="1037" Score="3" Text="What is the educational context of this?" CreationDate="2017-06-26T13:05:22.230" UserId="1213" />
  <row Id="7472" PostId="1037" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64710/discussion-on-question-by-i-how-to-handle-students-who-excel-at-coding-but-are)." CreationDate="2017-08-29T11:12:51.960" UserId="58" />
  <row Id="1747" PostId="1038" Score="6" Text="#2 definitely. I'm a practical coder and will only learn theory once I've given it a stab myself and failed. I also remember it better because I understand why my method failed and theirs worked." CreationDate="2017-06-25T07:57:44.610" UserDisplayName="user1331" />
  <row Id="1748" PostId="1038" Score="11" Text="#2. Tasking them to &quot;code&quot; a tiny (programming language) tokenizer/parser or an evaluator for expressions encoded in strings (&quot;-1+2/3&quot;) is a nice problem with quite simple solution when knowing the tools of the trade (a.k.a &quot;theory&quot;)... but excruciating and bug-prone when skipping it. &quot;There's nothing more practical than a good theory&quot; ;)" CreationDate="2017-06-25T08:13:50.860" UserId="1332" />
  <row Id="1877" PostId="1038" Score="1" Text="Depending on their level of skill, other good exercises might be Tower of Hanoi, playing a game (nim, tic-tac-toe, checkers, wumpus world...), solving/pathfinding through a maze, a (basic) regular expression evaluator, verifying a CFG, and perhaps as a &quot;fun challenge&quot; write some code that detects infinite loops (first to complete the assignment gets a prize!)." CreationDate="2017-06-26T19:15:09.743" UserId="1406" />
  <row Id="1706" PostId="1039" Score="1" Text="Hi Buffy! Welcome to [cseducators.se]! This is a great first answer, and we're glad to have you on board. I hope that you continue to contribute good content here!" CreationDate="2017-06-24T13:01:02.857" UserId="58" />
  <row Id="1723" PostId="1040" Score="0" Text="I just looked up that book. That was quite a fun little rabbit hole! Welcome to [cseducators.SE]. I hope we hear more from you in the future!" CreationDate="2017-06-24T18:34:03.983" UserId="27" />
  <row Id="1712" PostId="1043" Score="0" Text="Hi Derek! Welcome to [cseducators.se]! I hope I see you around more, asking and answering." CreationDate="2017-06-24T14:36:54.137" UserId="58" />
  <row Id="1729" PostId="1044" Score="3" Text="I wouldn't say Master's degree level. Though some variation between schools can be expected, I got a decent introduction to CS theory (NFA, DFA, regular languages, Turing completeness, and I forget what else) at the third-year undergraduate level. And that was at a school that's known for agriculture, not computer science. Likewise with AI - you can often find at least introductory courses on the subject at the undergrad level." CreationDate="2017-06-24T22:19:33.313" UserId="1248" />
  <row Id="1740" PostId="1044" Score="0" Text="In my BS CS, I needed 1 year (two classes) of discrete math.  Regular languahes, grammars, etc. had one semester.  The textbook had pumping lemmings on the cover.  At the time, Computer Science meant *science* — theory. There was only a little programming." CreationDate="2017-06-25T04:29:25.713" UserId="1116" />
  <row Id="1840" PostId="1044" Score="0" Text="Automata and theory of computation were first-year courses at my university, so it's certainly not universally agreed that they need years of background." CreationDate="2017-06-26T13:36:12.650" UserId="1219" />
  <row Id="14461" PostId="1044" Score="0" Text="I like the idea of introducing regular expression first, before nfa/dfa. But i feel sad reading your last sentence." CreationDate="2019-03-07T04:57:15.613" UserId="6701" />
  <row Id="1713" PostId="1046" Score="0" Text="They have trouble adapting to how you program things in python. They write programs as though it's java. I'm trying to explain that the languages are different, and so programming in each of them in the same way isn't a good thing to do." CreationDate="2017-06-24T14:38:05.533" UserId="150" />
  <row Id="1730" PostId="1046" Score="0" Text="What do they have difficulty with? Is it the syntax? Things like comprehensions?  Maybe certain toolkits?  Can you provide more details or examples of things they have problems with?" CreationDate="2017-06-24T22:22:04.443" UserId="1292" />
  <row Id="1726" PostId="1050" Score="1" Text="Your mileage with this technique may vary depending on your student population. I recall a blog post by a professor who had switched universities, and lamented that his ratemyprofessor comments completely changed in nature. He ran some language analytics across the entirety of both universities on that site, eventually coming to the conclusion that the feedback given at an institution says as much about the students themselves as it does about the teachers." CreationDate="2017-06-24T21:37:08.963" UserId="27" />
  <row Id="1728" PostId="1074" Score="3" Text="This is an excellent answer. Thorough, and we'll thought-out. Welcome to [cseducators.se]. I hope we get to hear more from you!" CreationDate="2017-06-24T21:52:51.730" UserId="27" />
  <row Id="1763" PostId="1074" Score="2" Text="I like having concurrency spread over the whole curriculum as a concept, I think that makes a lot of sense and that's how we do it in high school level CS, too. I love the &quot;leverage impatience&quot; approach, too. But I'm not so sure about the first paragraph as a general statement (&quot;introduce concurrency early to not lock students into a sequential mindset&quot;), because getting concurrency right is hard - much harder than sequential thinking - and I don't think getting used to sequential solutions first actually makes later introduction of concurrency more difficult." CreationDate="2017-06-25T12:34:48.277" UserId="1336" />
  <row Id="1733" PostId="1077" Score="3" Text="Welcome to [cseducators.se]! We're glad to have you here. Could you give an example of such a project in your answer?" CreationDate="2017-06-25T02:10:22.510" UserId="27" />
  <row Id="7474" PostId="1077" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64714/discussion-on-answer-by-adnan-y-how-to-handle-students-who-excel-at-coding-but-a)." CreationDate="2017-08-29T11:17:29.313" UserId="58" />
  <row Id="14462" PostId="1077" Score="1" Text="I cannot find the chat though.." CreationDate="2019-03-07T04:58:30.567" UserId="6701" />
  <row Id="1755" PostId="1079" Score="0" Text="The door analogy is very nice, but a bit flawed. It might be good to talk about the difference between security and privacy. I'd also make clear that some security is enforced via technology (those are the ones the course is about), but there are other ways to bring you security, such as laws. So even if a specific measure turns out not to be technically effective, it might still be illegal to disregard it. So apart from ethics, which are hard to teach, you could also focus on what is lawful." CreationDate="2017-06-25T09:39:45.070" UserId="1336" />
  <row Id="1758" PostId="1079" Score="0" Text="Why not expand on justice and rigorous / formulaic approach to the subject? After all, it is not unique to hacking. Many programs that work with humans must incorporate the concept of justice, s.a. bandwidth distribution to the networking entities, elevators transporting people, traffic lights and so on. I also don't believe in ultimate statements like the one implying that breaking into other computers is always morally reprehensible. Trivial examples are good to motivate thinking, but, ultimately, students should make their own decisions." CreationDate="2017-06-25T11:24:08.847" UserId="1000" />
  <row Id="1762" PostId="1079" Score="0" Text="Realistically, the legal aspects are just as important as the ethical ones. Locks are also different - almost all all vunerable, whilst secure software may be fairly secure." CreationDate="2017-06-25T12:30:57.557" UserId="41" />
  <row Id="1766" PostId="1079" Score="3" Text="I'd suggest you teach how black hat hackers are punished, but Robert T Morris turned out pretty well off." CreationDate="2017-06-25T13:55:57.573" UserId="283" />
  <row Id="1768" PostId="1079" Score="1" Text="Please compare [cracker](http://catb.org/jargon/html/C/cracker.html) and [hacker](http://catb.org/jargon/html/H/hacker.html)." CreationDate="2017-06-25T16:01:16.683" UserId="1344" />
  <row Id="1774" PostId="1079" Score="0" Text="I would just keep the focus on “we learn how to break in, so that we know how to keep others out.”" CreationDate="2017-06-25T17:37:36.327" UserId="204" />
  <row Id="2360" PostId="1079" Score="0" Text="&quot;is this a sufficient message to impart?&quot; Sufficient for _what_? What is it that you hope to achieve with this lecture?" CreationDate="2017-07-02T11:26:06.937" UserId="154" />
  <row Id="4107" PostId="1079" Score="0" Text="What age range, and what kind of personalities are part of the class?  In my experience, ethics is not a course where the professor gives their 20 minute speech to the class.  It's a discussion where the professor tries to help the students understand something deeper about how humans work." CreationDate="2017-07-11T20:53:16.963" UserId="812" />
  <row Id="1749" PostId="1080" Score="1" Text="Personally, I don't believe in fear as an adequate motivator... you will always meet persons who (a) think they are smarter, and (b) some that actually are. There are more components than those two. May I remind we as a society have both got laws and punishment, but nevertheless we *still* have need for good door locks!" CreationDate="2017-06-25T08:24:58.287" UserId="1332" />
  <row Id="1754" PostId="1080" Score="1" Text="Anonymity has nothing to do with ethics. This is legal stuff: you get caught, you go to prison: ethics are irrelevant. However, when talking about ethics, you act ethically or unethically independently of the fact of being caught and sent to prison. If I'm 100% sure that hacking your PC won't get me to prison, I still won't do it, because this is against *my* ethics." CreationDate="2017-06-25T09:13:14.543" UserId="1334" />
  <row Id="1750" PostId="1083" Score="0" Text="Isn't this a perfect example, though? The door itself is a security feature.  Left unlocked it is poorly implemented, and yet it is still unethical to intrude upon the system." CreationDate="2017-06-25T08:27:25.200" UserId="27" />
  <row Id="1752" PostId="1083" Score="0" Text="I wouldn't say it's a security feature, not even a poorly implemented one. Think of a camping site, with tents... *privacy* as part of a hopefully binding social contract is the limit to our actions, not the &quot;poorly implemented security&quot; of the tent flap. There is no security in a tent flap at all :)" CreationDate="2017-06-25T08:32:51.140" UserId="1332" />
  <row Id="1776" PostId="1083" Score="0" Text="I am not 100% sure in what situations it is unethical to intrude, but it seems always unethical to take a copy of private information, or to destroy or damage anything. (I have avoided the work theft as this applies to physical goods, where when you take it, it is no longer where it was. This has two very different affects: they no longer have it. You have it. With information, then only one way apply, and they are very different concepts.)" CreationDate="2017-06-25T17:44:26.787" UserId="204" />
  <row Id="1818" PostId="1083" Score="0" Text="@BenI. well, the unlocked door was merely the first step in the thought experiment chain leading to the idea of no security at all. I admit this answer is not my best work; I meant to come back and edit a second half in today, but Ted already basically made the second major point that I wanted to cover. See [my comment under his answer](https://cseducators.stackexchange.com/questions/1079/how-do-i-teach-ethics-in-hacking#comment1817_1088) for more." CreationDate="2017-06-26T02:31:07.950" UserId="1166" />
  <row Id="1753" PostId="1085" Score="1" Text="Welcome to Computer Science Educators! This is a very clever distinction. I sure hope we'll be hearing more from you." CreationDate="2017-06-25T09:10:27.460" UserId="150" />
  <row Id="1756" PostId="1085" Score="1" Text="Welcome to [cseducators.se] Arseni! I know @ItamarGreen already welcomed you, but I wanted to add that your answer is excellent, very well thought out, and was interesting to read. I hope that I'll see you around the site writing more excellent Q&amp;A!" CreationDate="2017-06-25T09:56:52.953" UserId="58" />
  <row Id="1769" PostId="1085" Score="1" Text="This is an interesting one. Whilst I do agree with you that trying an SQLi isn't ethically wrong (and I think you did the right thing), it's probably *not lawful* and this could do with being mentioned in the context of a class on security." CreationDate="2017-06-25T16:39:57.263" UserId="916" />
  <row Id="2344" PostId="1085" Score="0" Text="Isn't disclosure to the controlling institution of a vulnerability required by ethics?" CreationDate="2017-07-02T03:25:38.060" UserId="765" />
  <row Id="1759" PostId="1086" Score="0" Text="Hi Pascal! Welcome to [cseducators.se]! This is a really useful answer, well fleshed out and informative. I hope to see you around the site more!" CreationDate="2017-06-25T11:43:43.697" UserId="58" />
  <row Id="1764" PostId="1087" Score="0" Text="I can't say I agree with you here, but your comment is well written and thoughtful. Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-06-25T13:35:07.757" UserId="27" />
  <row Id="1817" PostId="1088" Score="0" Text="When I wrote my answer, I thought of two points: a superficial one, which I covered, and a deeper but more important one, which I didn't. The second paragraph of this answer covers #2 perfectly, and in many fewer words than I would have. Kudos, Ted, +1. Some of the other answers here seem to think that these hypothetical students have simply never spent two seconds thinking about the implications of security violations, or that a few minutes of &quot;don't be bad, it's not worth it&quot; will change someone's mindset; those scenarios strain credulity and seem like the the height of naivete to me." CreationDate="2017-06-26T02:26:12.717" UserId="1166" />
  <row Id="1820" PostId="1088" Score="1" Text="I never believed that I could cause people to act or not to act in any way. What I can do is try to draw the line of what good actions are; my students possess free will, and will ultimately do as they choose. I am not in control of others. However, our behavior *is* influenced by context. It is not the &quot;height of naivete&quot; to suggest that moral outcomes are influenced by contextual understandings, nor that a teacher can play some part in setting that context into place. I may not control my students, but I am not without influence." CreationDate="2017-06-26T03:51:11.243" UserId="27" />
  <row Id="2105" PostId="1090" Score="1" Text="IMHO, the struggle exists because students start from an imperative PL. This order is incorrect from a theoretical viewpoint: imperative programming is a special case of functional programming, as you know from learning Haskell. This is the reason for the suggestion that “students should start with a functional language”." CreationDate="2017-06-29T14:07:14.657" UserId="160" />
  <row Id="2106" PostId="1090" Score="0" Text="The paradigm of functional programming, as it is commonly understood, is a bunch of concepts. You mentioned some of them. For example, sum types belong there too. Every concept require its own approach. Considering them together as one monolithic thing is not useful. The “paradigm” concept is doing a disservice here." CreationDate="2017-06-29T14:07:28.157" UserId="160" />
  <row Id="2268" PostId="1090" Score="1" Text="After seeing students struggle with ideas as simple as variables, assignment and indirection, I have only two thoughts to offer: 1) *every* kind of abstract learning is a struggle 2) if you want someone to excel at something, start them as early as possible. Great skaters start as soon as they can walk, great pianists as soon as they can reach the keyboard." CreationDate="2017-07-01T14:43:53.420" UserDisplayName="user737" />
  <row Id="20844" PostId="1090" Score="0" Text="@beroal your comment especially 2nd deserves a bounty! Both &quot;paradigm&quot; and &quot;functional&quot; are disservices. If &quot;functional P&quot; were *anything* to do with functions C would be the most functional lang out there -- and by order of billions ). The older term &quot;applicative&quot; is slightly more accurate signifying usage rather than definition" CreationDate="2022-10-23T09:06:53.870" UserId="8837" />
  <row Id="1773" PostId="1092" Score="4" Text="Depends if you are grading programming ability, or ability to guess what you are thinking." CreationDate="2017-06-25T17:31:51.993" UserId="204" />
  <row Id="1786" PostId="1092" Score="3" Text="In introductory courses at the U of Toronto, they generally incorporate a few key cases as examples in the assignment spec, and warn students that these aren't exhaustive — and then none are added that test behaviour not explicitly described in the spec. And, as @EllenSpertus says below, from the first course up there are assignments requiring test-*writing* too." CreationDate="2017-06-25T19:06:57.900" UserId="927" />
  <row Id="1787" PostId="1092" Score="0" Text="But I will certainly say that not all the tests in the suites I've written were given to students. As long as they're still learning their motivation is often a grade rather than a good product, so it becomes too tempting to code to the tests, including hard-coding input→output, irresponsible as it might seem. An example is a Sudoku fast-fail algorithm they needed to write. Seeing all our test cases would have resulted in uncommonly fast fails..." CreationDate="2017-06-25T19:09:38.163" UserId="927" />
  <row Id="1788" PostId="1092" Score="2" Text="Isn't the problem of writing a test case map eliminated when instructors actually glance at the code? I'm not sure this justifies not releasing test cases, nor would I appreciate it if my grade was entirely determined by automated tests." CreationDate="2017-06-25T19:10:53.820" UserId="916" />
  <row Id="1795" PostId="1092" Score="1" Text="Releasing some *simple* test cases is a very good way for the students to check they understand what they are required to do. On the other hand, not releasing *all* the test cases used until after grading seems almost essential, otherwise the smart students will just &quot;code to the test&quot; rather than actually solve the problem assigned. That may get them good marks for the course, but it won't make them good real-world programmers!" CreationDate="2017-06-25T21:13:00.400" UserId="1352" />
  <row Id="1874" PostId="1092" Score="1" Text="In my experience some professors would make these tests available to students, some would describe them in technical detail in class the next day, and some would go through them individually during office hours.  I don't think I ever had a professor keep the tests a secret.  Have you tried going to the office of those who held out and asking?  Certainly as an educator I'd probably follow all three approaches simultaneously, but they are by no means obligated to do so as finding the problem creates a very difficult, but optional, exercise for the student." CreationDate="2017-06-26T18:53:59.713" UserId="1089" />
  <row Id="11797" PostId="1092" Score="0" Text="This question also relates to the discussion on providing solutions [https://cseducators.stackexchange.com/questions/4503/should-i-provide-answers-to-exercises]." CreationDate="2018-03-26T16:22:35.110" UserId="4301" />
  <row Id="16963" PostId="1092" Score="1" Text="Is the assignment for them to produce programs that they can reasonably expect to &amp; claim to work? Then you need to first teach them how to produce such programs. So that means teaching (some form of) specification, verification (in the sense of giving justification that a program meets its specification) &amp; testing first. Yeah, no one does this. Instead they model (I won't say &quot;teach&quot;) hacking." CreationDate="2020-09-02T20:02:37.690" UserId="2485" />
  <row Id="12311" PostId="1094" Score="1" Text="Same for polynomials: p(x) = a₀ x⁰ + a₁ x¹ + a₂ x² + … + aₙ xⁿ." CreationDate="2018-05-06T06:30:07.273" UserId="216" />
  <row Id="20805" PostId="1094" Score="0" Text="I think this is my favorite example, and moreso because it's likely to come up in an intro computing course before any other use-cases (arrays, etc.). It connects to basic knowledge students should already possess, so I've come to highlight it and foreshadow that we'll be using that a lot in later topics." CreationDate="2022-09-30T16:06:43.633" UserId="8137" />
  <row Id="1778" PostId="1095" Score="0" Text="&quot;That seems plum crazy to me&quot;: It's one of a few things that has frustrated me with my department.." CreationDate="2017-06-25T18:25:49.010" UserId="916" />
  <row Id="1782" PostId="1096" Score="0" Text="Not sure how I feel about the secret time complexity testing. I'd be okay with it if the spec explicitly asked for the most time-efficient algorithm to be implemented, but there's often a trade-off between space-complexity, time-complexity and hell .. readability. Should students be penalised for prioritising the &quot;wrong&quot; thing there?" CreationDate="2017-06-25T18:29:27.547" UserId="916" />
  <row Id="1785" PostId="1096" Score="0" Text="@AdamWilliams yes specify big-O in the question. Unless it in implicit e.g. implement quick sort. And while I would always say optimise for readability, I would also say that minimising complexity is making it more readable. Having a loop within a loop when one loop will do is not cool, but having a loop follow a loop is ok. Having more code that me in the loop is also ok. Though we could ask, could that be moved out of the loop, it would not fail a big-O test." CreationDate="2017-06-25T18:38:47.837" UserId="204" />
  <row Id="1794" PostId="1096" Score="1" Text="&quot;You should not be testing to see if they can guess the test cases.&quot; But you **should** be testing to see if they can write correct programs. &quot;Not penalizing them for not deriving their own test cases&quot; amounts to &quot;not penalizing them for not dong the work properly&quot; - unless the objective of the course is to produce graduates who can't manage &quot;fizzbuzz&quot; type questions in job interviews!" CreationDate="2017-06-25T21:09:20.430" UserId="1352" />
  <row Id="1854" PostId="1096" Score="0" Text="@alephzero you are infinity confusing, please cite all of your quotations. If we do not have a link to them how can we know what your point is." CreationDate="2017-06-26T17:19:10.730" UserId="204" />
  <row Id="1779" PostId="1097" Score="6" Text="I really like this solution, seems like a great way to encourage students to think outside the box and write tests for situations that you may not have thought of initially." CreationDate="2017-06-25T18:26:20.693" UserId="916" />
  <row Id="1821" PostId="1097" Score="9" Text="But make sure the student-provided test cases *should* pass first." CreationDate="2017-06-26T05:32:55.083" UserId="1275" />
  <row Id="1835" PostId="1097" Score="0" Text="A course at my Uni did this! There were two stages: At first we had to upload code that would be automatically tested against testcases and in the second stage we would upload testcases to run against the other students solutions. It was very fun to work against the testcases, but the second stage was to easy as most students had not beat many testcases from the first stage and also the objective wasn't clear (do we have to pass our own cases?). Also as @immibis said you should make sure that the test cases are correct by running them against a reference solution." CreationDate="2017-06-26T12:28:29.970" UserId="1381" />
  <row Id="1857" PostId="1097" Score="1" Text="I feel like you would get too many badly written test cases that fail when they shouldn't.  At the least have what you consider to be a very well written sample version of the code that you run the test cases against.  I'd probably ignore every test case that fails a valid sample code.  Sure someone may have written a test case that actually caught a bug in your sample 'working' implementation, but most of the time they won't and it's not worth the effort of identifying which tests are valid and which aren't." CreationDate="2017-06-26T17:47:09.980" UserId="1008" />
  <row Id="1898" PostId="1097" Score="1" Text="@KarlKastor Are bad tests flushed out by testing them against a canonical implementation of the program?" CreationDate="2017-06-26T21:51:42.177" UserId="990" />
  <row Id="1899" PostId="1097" Score="0" Text="@corsiKa In the Uni course I was talking about bad tests weren't 'flushed out', but you were limited to two tests and your implementation had to pass at least one of these. You were encouraged  to write cases that your own program would pass, so that your program would pass more cases. But I think it would have been better to check the cases against a reference implementation and flushing them out." CreationDate="2017-06-26T22:15:50.503" UserId="1381" />
  <row Id="1904" PostId="1097" Score="0" Text="@KarlKastor Makes sense. It also is a good lesson in that you need to have good tests before you have good testing. Sometimes people forget that tests are not always right and not always good forever - sometimes you &quot;break a test&quot; and the functionality has actually changed. Quality is a goal, &quot;making tests pass&quot; never should be!" CreationDate="2017-06-27T00:44:08.760" UserId="990" />
  <row Id="2302" PostId="1097" Score="0" Text="When I have tried having students submit their own tests, they have been of very low quality in my experience. Often they are testing tiny corner cases which where there was some issue in the original spec.&#xA;&#xA;It's VERY hard to write specs where you cover every possible corner case, particular when it comes to things like what happens when integers overflow, or code runs out of memory." CreationDate="2017-07-01T19:53:08.857" UserId="1611" />
  <row Id="1813" PostId="1099" Score="2" Text="Here are some fun SMBC cartoons on the topic. http://www.smbc-comics.com/comic/2008-03-16 http://www.smbc-comics.com/?id=2999" CreationDate="2017-06-26T00:17:47.157" UserId="283" />
  <row Id="1850" PostId="1099" Score="1" Text="Here is a YouTube video that gives an incredible explanation of floats: https://www.youtube.com/watch?v=9hdFG2GcNuA It's a speedrunner playing Super Mario 64 in an emulator, going into detail about how floating point numbers give rise to some unusual glitches in the game. The video is both educational and genuinely fascinating." CreationDate="2017-06-26T15:39:17.217" UserId="1360" />
  <row Id="1861" PostId="1099" Score="0" Text="I realize that this doesn't change the fact that you need to explain float behavior to students but you should also consider the way BigDecimal works--it shouldn't have the same type of binary rounding problems because it bypasses the whole thing by using Integers for all decimal calculations." CreationDate="2017-06-26T17:56:07.450" UserId="1399" />
  <row Id="1875" PostId="1099" Score="0" Text="@BillK the example in the question won't be better with BigDecimal. (Depending on how the division is done, you might get an exception there. But 1/3 is not representable exactly as a decimal number either.)" CreationDate="2017-06-26T19:09:06.237" UserId="653" />
  <row Id="1880" PostId="1099" Score="1" Text="How do you teach them the analogous **integer** problem (here, in C): `int i = 1/3; i = 3 * i; printf(&quot;%d\n&quot;, i);` -- surprise, the result is 0." CreationDate="2017-06-26T19:36:19.480" UserId="1410" />
  <row Id="1886" PostId="1099" Score="0" Text="Actually I believe it will be better since it would be very obvious and predictable if the code fiddled with the precision (currently it casts it to float and double).  BigDecimal can't represent 1/3 exactly, but if you set it to, say 10 decimal places then every version of 1/3-1/3 should equal 0.  If you set one to 3 decimal places and the other to 4, you should always get a very predictable and sensible .0003.  The best part is you won't ever get rounding problems on numbers that shouldn't have rounding problems like .1" CreationDate="2017-06-26T19:43:05.487" UserId="1399" />
  <row Id="1910" PostId="1099" Score="0" Text="A useful model that keeps most of the floating point problems is a computer that works with two decimal places. So, you can exactly represent 75 and 0.12, but 114 is rounded to 110. Then you can go through practical examples, like finding the middle point between 92 and 94, that in the naive implementation is 95." CreationDate="2017-06-27T08:39:14.297" UserId="1433" />
  <row Id="14707" PostId="1099" Score="0" Text="What &quot;inaccuracies?&quot; You mean, results from erroneously deisgned chips? No? There are no &quot;inaccuracies&quot;. So lesson number one is to not rely on thoughtless presumptions but read the specification for what you're using &amp; lesson number 2 is there are two different abstractions involved in programming with floating point." CreationDate="2019-04-18T11:06:15.347" UserId="2485" />
  <row Id="14715" PostId="1099" Score="0" Text="PS Show (better, have them graph/plot) an actual (normalized) float number line with its idiosyncratic spacing: `..._|______________|______________|______|_______|________|_______|_______|_______|_______|___|___|___|___|___|___|___|_|_|_|_|_|_|_||||||||________0________|||||||||_|_|_|_|_|_|_|___|___|___|___|___|___|___|______|_______|________|_______|_______|_______|_______|______________|______________|_...` [(1st figure in section 3_2 here)](http://www.toves.org/books/float/) What more need one say?" CreationDate="2019-04-18T12:22:09.767" UserId="2485" />
  <row Id="1790" PostId="1101" Score="1" Text="I love this practice. It does require a fair amount of organization. I will try this on a unit in the fall and see how it goes." CreationDate="2017-06-25T20:56:51.273" UserId="27" />
  <row Id="1789" PostId="1102" Score="2" Text="“If your students can understand why $1/3 = 0.\dot 3$” — that's actually a difficult one. I expect that most students don't really understand it." CreationDate="2017-06-25T20:34:35.650" UserId="124" />
  <row Id="1824" PostId="1102" Score="4" Text="@Giles It's a very long time since I first met recurring decimals, but I don't recall too many fellow students not getting it." CreationDate="2017-06-26T08:15:17.260" UserId="1372" />
  <row Id="1825" PostId="1102" Score="8" Text="Once you've shown the problem with 1/3, it might be better to show 1/10 in binary. Although, as noted above, I could &quot;get&quot; recurring decimals, there's a danger of people thinking it's something peculiar about _one third_. Seeing the same problem happening with a &quot;safe&quot; number like _one tenth_ drove the point home for binary representations." CreationDate="2017-06-26T08:19:19.420" UserId="1372" />
  <row Id="1837" PostId="1102" Score="3" Text="+1, comment by @TripeHound about the dangers of &quot;safe&quot;/not-periodic numbers like 1/10 should be added to the answer. Also, [the problem with subtraction](https://stackoverflow.com/a/27539234/4209853)" CreationDate="2017-06-26T12:52:53.247" UserId="994" />
  <row Id="1845" PostId="1102" Score="1" Text="I would respectfully suggest that **this is a very misleading** example to illustrate the **computer science problem** of floating point precision. By using a repeating decimal as your example, you are (incorrectly) turning this into the math problem of representing fractions as decimals rather than a computer science problem that 1.0f + 1.0f =! 2.0f. This will leave students with a lot of bugs and head scratching trying to figure out why this doesn't work (i.e. not understanding how floating point numbers are represented)." CreationDate="2017-06-26T14:26:34.007" UserId="23" />
  <row Id="1851" PostId="1102" Score="0" Text="@RobertCartaino You have an excellent point that using a number that is not finite in base-10 could lead to some false assumptions. I used the example from the question ($\frac{1}{3}$) when writing this, but I can see how it might be confusing. I think you cannot escape the fact that some numbers cannot be represented in binary, leading to these errors, which is **inherently a mathematical issue**, but I've added some more explicit information on how to solve this problem. Is there anything specifically that you feel ought to be mentioned here that I missed?" CreationDate="2017-06-26T15:53:05.093" UserId="2" />
  <row Id="1876" PostId="1102" Score="5" Text="&quot;a finite decimal may be a repeating binary fraction **and vice versa**&quot; – Actually, a finite binary fraction will always convert to a finite decimal fraction (with at most the same number of digits)." CreationDate="2017-06-26T19:11:42.070" UserId="653" />
  <row Id="1878" PostId="1102" Score="0" Text="@PaŭloEbermann You're right. Thanks for pointing that out. I've amended that (and found a proof on Math.SE for anyone interested)." CreationDate="2017-06-26T19:15:29.440" UserId="2" />
  <row Id="1882" PostId="1102" Score="2" Text="Something I'd suggest adding as an exercise with a regular calculator is that you can see the extra digits it hides and then uses in rounding to make everything seem to work out as expected.  Ex if after entering `1/7` your calculator displays `0.14285714&quot;, you can hit subtract and type in `0.142857141` hit enter and it'll show something like `2.8571E-9`.  With the exact amount depending on the calculators internal representation." CreationDate="2017-06-26T19:39:40.630" UserId="1411" />
  <row Id="1883" PostId="1102" Score="4" Text="@RobertCartaino I do not understand your objection here. 1.0 + 1.0 _does_ equal 2.0 in common floating-point systems. The problem is instead with 1.0 / 10.0 * 10.0, which rounds well in decimal but not in binary, and this answer explains why. Were you commenting on an earlier edit?" CreationDate="2017-06-26T19:41:08.450" UserId="1408" />
  <row Id="1918" PostId="1102" Score="0" Text="@Gilles - where in the world is this true? I'm in europe and that is literally a grade school material. The only way someone might not understand that is if they have a mental handicap." CreationDate="2017-06-27T11:09:06.217" UserId="1145" />
  <row Id="1919" PostId="1102" Score="1" Text="@Davor There's a huge gap between vaguely understanding that $1/3$ is not equal to $0.33$ and understanding infinitary decimal representation. Understanding that $0.\bar 9 = 1$ (as opposed to $0.\bar 9 \approx 1$) is a very difficult milestone. Having heard it in school is not the same thing as understanding it." CreationDate="2017-06-27T11:17:17.113" UserId="124" />
  <row Id="18627" PostId="1102" Score="0" Text="Have you tried lately whether `3 * (1/3) -1` was zero? Current processors all have FMA units, which make this expression come out to zero! You need to do `3*3*(1/3)*(1/3)-1` to get a nonzero result." CreationDate="2021-12-27T17:42:55.000" UserId="6346" />
  <row Id="2267" PostId="1104" Score="0" Text="Reminds me of the Star Trek episode quote: &quot;*Brain and brain! What is brain!?*&quot;" CreationDate="2017-07-01T14:33:59.037" UserDisplayName="user737" />
  <row Id="1791" PostId="1105" Score="0" Text="I'm not sure how this question will fare, given that resource requests are usually frowned up on Stack Exchange." CreationDate="2017-06-25T20:57:03.837" UserId="58" />
  <row Id="1792" PostId="1105" Score="1" Text="@thesecretmaster not really - on Physics.SE for example they are welcomed - it varies on the site. I thought [this meta thread's consensus](https://cseducators.meta.stackexchange.com/questions/112/are-resource-requests-on-topic) was in favor of allowing resource recommendations." CreationDate="2017-06-25T20:59:03.500" UserId="919" />
  <row Id="1793" PostId="1105" Score="0" Text="As a note, [self-teaching](https://cseducators.meta.stackexchange.com/q/23/166) is on-topic here, so it's probably fine to frame the question in that regard." CreationDate="2017-06-25T21:02:31.390" UserId="166" />
  <row Id="1797" PostId="1105" Score="1" Text="By &quot;starting writing code in it,&quot; what sort of code do you mean? Back-end Ruby using a framework like Rails? By &quot;familiar with Python,&quot; do you mean familiar with OOP or just general syntax/logic? I have a couple resources in mind, one of which is a) at a university level, and b) part of a more theoretical study of programming languages. What is the intent of learning Ruby? Fun? Web development? Clarify this information, and you will get better resources." CreationDate="2017-06-25T21:15:32.453" UserId="76" />
  <row Id="1801" PostId="1105" Score="1" Text="@Peter I edited to try to answer some of your questions." CreationDate="2017-06-25T21:40:53.377" UserId="919" />
  <row Id="1807" PostId="1105" Score="0" Text="&quot;web applications and back end applications using Rails&quot; is redundant." CreationDate="2017-06-25T23:19:50.353" UserId="58" />
  <row Id="1855" PostId="1105" Score="0" Text="I just want to thank you for bringing your enthusiasm for learning here. Your future is bright. Shine on." CreationDate="2017-06-26T17:19:16.890" UserId="1293" />
  <row Id="1798" PostId="1106" Score="6" Text="Just use self-teaching and phrase it for yourself, then. There's no need to word around that :)" CreationDate="2017-06-25T21:24:16.467" UserId="27" />
  <row Id="1799" PostId="1106" Score="2" Text="The question is very opinion based. This is simply a matter of which open source project you like best, with &quot;welcoming&quot; as the only criterion. This question invites discussion because there is no real answer.  As stated in the close reason: &quot;Answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.&quot;" CreationDate="2017-06-25T21:30:43.620" UserId="58" />
  <row Id="1802" PostId="1106" Score="1" Text="We also may have an expertise issue: CS educators are not _de facto_ experts in open source. As such, we might not be the best community for providing quality answers for this topic." CreationDate="2017-06-25T21:45:25.787" UserId="76" />
  <row Id="1803" PostId="1106" Score="0" Text="@Peter not defacto, no, but I think it's relevant to the community." CreationDate="2017-06-25T21:47:59.533" UserId="919" />
  <row Id="1808" PostId="1106" Score="0" Text="Our sites community is teachers. Often, teachers are not experts in open source and often are not even involved in open source. I'd say that we don't have experts because many teachers don't participate in open source and it's not relevant to the community because teachers are not normally required to discuss open source projects." CreationDate="2017-06-25T23:30:44.323" UserId="58" />
  <row Id="1810" PostId="1106" Score="2" Text="I originally thought this wasn't a good question for the site, but I changed my mind when I saw Scimonster's answer." CreationDate="2017-06-25T23:52:14.363" UserId="283" />
  <row Id="1812" PostId="1106" Score="0" Text="@heather That was fast. Another suggestion: Add high school to the subject line (or remove it from the body)." CreationDate="2017-06-25T23:53:27.927" UserId="283" />
  <row Id="1819" PostId="1106" Score="1" Text="Years and years ago, before Software Engineering SE figured out its scope, a very similar question was asked there. It's locked now, and there's a lot to read through, but there's still some good info there: [How can I find a good open source project to join?](https://softwareengineering.stackexchange.com/questions/294/how-can-i-find-a-good-open-source-project-to-join)" CreationDate="2017-06-26T03:00:09.707" UserId="1166" />
  <row Id="1853" PostId="1106" Score="1" Text="I am not sure what you are asking. Are you wanting to contribute to an open-sources/free-software project; create a project; or something else? Also note that the phase Free Software is much less confusing than Open Source. If you think not then write down the definition of both, then check their definitions [ https://opensource.org/osd-annotated https://www.gnu.org/philosophy/free-sw.en.html ] to see how you did. Then wait a day and try again. In short they are both software that gives the user (whoever they are) freedoms: to use (for any use), modify, distribute (for any fee)." CreationDate="2017-06-26T17:13:23.040" UserId="204" />
  <row Id="12739" PostId="1106" Score="0" Text="Sadly @thesecretmaster may be correct. We are teaching pupils to be consumers (one of the most damaging words in modern life). Or worse in most cases to be the product. Better to be free and teach others to be free." CreationDate="2018-06-02T10:55:50.483" UserId="204" />
  <row Id="1826" PostId="1107" Score="0" Text="I just visited the Code-In site and it looks great. Does anyone know of something similar for university students?" CreationDate="2017-06-26T08:31:13.570" UserId="466" />
  <row Id="1827" PostId="1107" Score="0" Text="@BrettBecker Google Summer Of Code. Added a bit of info to the post." CreationDate="2017-06-26T08:40:05.143" UserId="166" />
  <row Id="1823" PostId="1109" Score="1" Text="I like this. :)" CreationDate="2017-06-26T07:56:53.660" UserId="793" />
  <row Id="2074" PostId="1109" Score="1" Text="Don't forget about his cryptography work.  He played a big role in breaking Enigma." CreationDate="2017-06-28T21:52:49.820" UserId="827" />
  <row Id="1829" PostId="1115" Score="1" Text="Firstly, I'd like to welcome you to Computer Science Educators! Secondly, this answer is superb, I do hope we will be hearing more from you." CreationDate="2017-06-26T09:31:48.580" UserId="150" />
  <row Id="1841" PostId="1115" Score="3" Text="I joined CSE just to up-vote this..." CreationDate="2017-06-26T13:49:09.177" UserId="1384" />
  <row Id="1912" PostId="1115" Score="0" Text="If you need accuracy beyond the float standard, use integer math or a data type like [Decimal](https://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server)." CreationDate="2017-06-27T09:47:04.117" UserId="1437" />
  <row Id="18632" PostId="1115" Score="0" Text="Nice answer, but have you actually tried whether `.1+.2 ?=? .3`? With clang11, putting the expression literally in a program the compiler probably optimizes it away, and yes, it is equal. I had to write `pointone + .2f -.3f` where `pointone` is read from `cin` to get a nonzero result. And even then, you only get nonzero with 2 out of the 4 rounding modes. And not the default one. So: Test Every Assertion You Make. This Crap Is Subtle! (My latest learning experience: `a * 1/a - 1` is zero on modern processors because this is an FMA instruction, which has single rounding.)" CreationDate="2021-12-28T15:57:05.940" UserId="6346" />
  <row Id="1937" PostId="1118" Score="0" Text="Do you mean a single server handling different requests from multiple clients concurrently or a single server broadcasting the same response to multiple clients?" CreationDate="2017-06-27T15:46:13.210" UserId="674" />
  <row Id="1938" PostId="1118" Score="0" Text="@pddring a bit of both. A server responding to separate clients, but broadcasting the response to all clients." CreationDate="2017-06-27T15:52:01.947" UserId="150" />
  <row Id="2605" PostId="1121" Score="0" Text="There are pedagogical patterns on this here:http://hillside.net/eduplop/patterns-publications/" CreationDate="2017-07-05T09:55:11.307" UserId="1293" />
  <row Id="17084" PostId="1122" Score="0" Text="I agree. It would be good if people could learn that they &quot;do not like&quot; programming before investing years of their lives to go through school and then land a job. Perhaps we need some targeted vocational assessment and counselling in High School? It wasn't so long ago that only 5% of people went to college, and then it was often simply because their parents wanted them to and had the money. Being *able* to go doesn't mean people *should*, for their own well-being and that of the community." CreationDate="2020-09-25T20:53:11.887" UserId="5349" />
  <row Id="17089" PostId="1122" Score="0" Text="After seeing your edit, I am again prompted to wonder what many young people *do* want to do? This seems to be a frequent issue in this century. Long view: Freud said that life is made worthwhile by 2 things: Work, Love. So, if someone does not find work they want to do, their life is likely to be &quot;a hiding to nothing&quot;. Do they not realize this? Perhaps it is connected to the recent news that 25% of people in the US age 18-25 have considered suicide this summer. Ennui might be a bigger problem than we can solve in Computer Science Educators, I think." CreationDate="2020-09-25T22:00:00.553" UserId="5349" />
  <row Id="17115" PostId="1122" Score="0" Text="I guess all I can say is that there are a lot of choices besides coding and suicide." CreationDate="2020-09-28T18:05:14.967" UserId="1292" />
  <row Id="17130" PostId="1122" Score="0" Text="(for your son) There is a (outlook to) programing that is much closer to math than is the norm [See this](https://cseducators.stackexchange.com/a/6568/8837) And that ppl (like your wife) &quot;glaze over&quot; may well be because we tend to delight in accidental needless complexity, not authentic difficulty See [this](https://cseducators.stackexchange.com/a/6567/8837)" CreationDate="2020-10-02T04:21:48.283" UserId="8837" />
  <row Id="1848" PostId="1124" Score="1" Text="FWIW the research (rather perversely) showed a pattern of computerized notes resulting in better *self-rating* of understanding, but worse outcomes on simple recall tests.  So it is possible that you are falling victim to an illusion here. Also, FWIW I also usually personally take notes on a computer because it's so darned convenient. So, I am just as much a hypocrite as the next guy :)" CreationDate="2017-06-26T15:01:57.177" UserId="27" />
  <row Id="2107" PostId="1125" Score="0" Text="@ItamarG3: I edited my answer to try to better answer your question -- see if that helps any..." CreationDate="2017-06-29T14:29:17.207" UserId="1321" />
  <row Id="1887" PostId="1126" Score="23" Text="This question isn't specific to CS in any way and really belongs on https://academia.stackexchange.com." CreationDate="2017-06-26T19:43:16.773" UserId="1103" />
  <row Id="1889" PostId="1126" Score="6" Text="@Wildcard You raise an important issue. There's been so much attention lately on the environment in tech that I've been thinking of it as a CS education issue, but you're right that people face bias in many fields. Some of the answers mention CS-specific resources, while others are more general." CreationDate="2017-06-26T19:48:17.227" UserId="283" />
  <row Id="1968" PostId="1126" Score="3" Text="A small suggestion: edit the title to make it explicit that you're referring to social, rather than technical, bias? Given the topic of the site, the first time I saw this question, I assumed it was going to be about, like, people who were biased in favor of using one programming language over another. Normally I'd change it myself, but I don't want to &quot;steamroll&quot; the post as an outsider. I have chars left, so: I 100% agree this is on-topic here. While it's true that many types of biases exist in many different places, there are definitely challenges that are unique to CS and CS education." CreationDate="2017-06-27T20:11:21.507" UserId="202" />
  <row Id="1969" PostId="1126" Score="1" Text="@Pops Thanks for the suggestion. I've also been considering changing &quot;bias&quot; to &quot;mistreatment&quot;, since that's more general (and less controversial)." CreationDate="2017-06-27T20:13:45.523" UserId="283" />
  <row Id="1970" PostId="1126" Score="1" Text="I don't think that would achieve your goal; regarding generality, you can be biased against someone (consciously or otherwise) without taking any action against them, and as for controversy, &quot;mistreatment&quot; sounds more contentious than &quot;bias&quot; to me." CreationDate="2017-06-27T20:17:46.567" UserId="202" />
  <row Id="1971" PostId="1126" Score="0" Text="@Pops The reason I say that &quot;mistreatment&quot; is less controversial is that some people deny the existence of bias (or think that it is over-emphasized), while I don't think anyone disputes that people sometimes get mistreated in the workplace." CreationDate="2017-06-27T20:28:51.250" UserId="283" />
  <row Id="1972" PostId="1126" Score="0" Text="That's true, but this post is still (I'm assuming; please correct me if I'm wrong) going to be referring to mistreatment stemming from or having to do with bias, so I don't foresee the distinction helping. This is getting pretty speculative now though. Good question, in any case!" CreationDate="2017-06-27T20:37:37.387" UserId="202" />
  <row Id="2123" PostId="1126" Score="1" Text="@EllenSpertus What concerns me about this approach is creating a situation in which people feel the need to assess issues in the wrong light. Person A and person B are likely to experience many of the same issues, but person B may be inclined to process these issues in such a way that it leads them to inaccurate or detrimental conclusions. I feel as though people are quite intuitively aware that 'there are some jerks out there'. I simply fear that people who insist commonplace issues are related to their sex/race/etc. are not always confronting issues in a meaningful way." CreationDate="2017-06-29T17:16:41.533" UserId="1448" />
  <row Id="2270" PostId="1126" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/61420/discussion-on-question-by-ellen-spertus-how-to-prepare-students-for-bias-in-indu)." CreationDate="2017-07-01T15:33:31.530" UserId="58" />
  <row Id="2436" PostId="1126" Score="2" Text="Frieze and Quesenberry argue in *Kicking Butt in CS* (2015) that the key reforms at Carnegie Mellon (which is achieving even M/F ratios in CS major and in career persistence) were abandoning difference theories (backing off the belief that different ideas appeal to men vs. women) in favor of valuing diverse people and people with diverse interests and raising awareness of bias." CreationDate="2017-07-03T04:21:48.653" UserId="765" />
  <row Id="2118" PostId="1130" Score="0" Text="I think that Hidden Figures was made and became popular because people can relate to it. Quest For Fire didn't do as well." CreationDate="2017-06-29T15:49:44.203" UserDisplayName="user737" />
  <row Id="1860" PostId="1131" Score="2" Text="I wasn't the downvoter but can guess why someone might not have liked your answer: You suggest that bias is rare and that it can be overcome through hard work. Many people consider that point of view to be backwards. I encourage you to read the articles linked to in my question (or answer), if you haven't already." CreationDate="2017-06-26T17:54:54.763" UserId="283" />
  <row Id="1862" PostId="1131" Score="2" Text="On what basis do you claim that mistreatment will be rare but that &quot;supervisors won't care about their background [if] they get the job done&quot;? That's not what I hear from people who have spent significant time in industry." CreationDate="2017-06-26T17:57:08.310" UserId="283" />
  <row Id="1863" PostId="1131" Score="0" Text="@EllenSpertus I am literally reading them now. I do believe that hard work can often do the trick. But I might be backwards in this. I'll finish reading the articles." CreationDate="2017-06-26T17:58:51.593" UserId="150" />
  <row Id="1871" PostId="1131" Score="2" Text="The problem (active, rather than the more normal subconscious bias) seems most likely to occur when the management group comes from a narrow social group. Science and Medicine claim to suffer significantly too. I've not observed first hand, but even in 'good' companies, you can find examples of discrimination." CreationDate="2017-06-26T18:38:01.060" UserId="41" />
  <row Id="1872" PostId="1131" Score="0" Text="@SeanHoulihane That may be, but could you tell me how it relates to my answer (I mean no disrespect, I simply didn't understand `:)`)." CreationDate="2017-06-26T18:41:14.330" UserId="150" />
  <row Id="1873" PostId="1131" Score="1" Text="Hard work doesn't help when results are not the cause of the problem. Problem is (crudely) insecurity from the clique. In some environments this might be the norm, but it's not something I regard as acceptable. Perception of this topic might vary depending on your context though, the Q seems rather US biased, UK may be better (but I have no evidence to justify that)." CreationDate="2017-06-26T18:47:42.353" UserId="41" />
  <row Id="1884" PostId="1131" Score="6" Text="This is easily the best answer.  **Yes, some people are biased.**  The best solution is to *excel so well* that biased people only hurt themselves by settling for second best (i.e. they don't get service from the best—you—they do business with someone else not as good).  Having the mindset that the deck is stacked against you and if you don't make it it's someone else's fault is a 100% certain route to failure *regardless of your race or sex.*  This is the best advice you can give anyone inclined to be a victim—but victim-minded people will undoubtedly label it as &quot;insensitive.&quot;" CreationDate="2017-06-26T19:42:12.193" UserId="1103" />
  <row Id="1888" PostId="1131" Score="1" Text="@Wildcard Thanks you. The general idea should work if done correctly (by students) but it is still rather backwards. If applied more widely, it can bring some change of perspective. But there are more effective ways." CreationDate="2017-06-26T19:48:05.100" UserId="150" />
  <row Id="1890" PostId="1131" Score="6" Text="@Wildcard I agree that every student should try to excel, and our students do. I think you misrepresent the view you disagree with by saying it attributes all failure to someone else's fault. Being aware of the possibility of discrimination can cause someone to avoid internalizing disrespect shown to them and to consider moving to a more hospitable environment." CreationDate="2017-06-26T19:56:05.077" UserId="283" />
  <row Id="1892" PostId="1131" Score="4" Text="@ItamarGreen, that's a good distinction to draw: yes, I definitely meant the most effective approach from an *individual student* perspective, certainly not that no one should combat discrimination!  Discrimination against minorities (religious, ethnic, whatever) is [sadly very mainstream](https://www.standleague.org/news/media-watch/20170612-religious-discrimination-in-2017-sanctioned-by-disney-it-just-doesnt-add-up.html) and  I fully support eradicating bigotry and prejudice.  I just meant that using it at an individual level as a reason why you didn't succeed is a way to...not succeed.  :)" CreationDate="2017-06-26T20:20:15.797" UserId="1103" />
  <row Id="1893" PostId="1131" Score="5" Text="@Wildcard Bias puts people in really tough situations. It's pretty important to learn how to deal as well as possible with those situations (it's not as simple as just &quot;excel!&quot;), and how to cope with the fact that sometimes despite one's best efforts, things may not go as well as they would've for someone else. That's really not the same thing as deciding that all failures are someone else's fault." CreationDate="2017-06-26T20:30:42.737" UserId="1416" />
  <row Id="1894" PostId="1131" Score="3" Text="FWIW, I've seen white males mistreated and their confidence battered, even when they should have been secure (had a CS PhD, hired and promoted at a top company, etc.) Knowing that some people are just jerks (whether or not due to bias) can help anyone." CreationDate="2017-06-26T20:35:04.133" UserId="283" />
  <row Id="1896" PostId="1131" Score="2" Text="ob. xkcd: https://xkcd.com/385/" CreationDate="2017-06-26T20:42:36.163" UserId="283" />
  <row Id="1905" PostId="1131" Score="1" Text="If I read this correctly, your suggestion is to let the market forces work against biased employers. If an employer does not retain the best, they can only harm themselves in the long run and help competitors that hire purely on merit. There is an uncomfortable side to this though: this has the possibility of also eventually revealing statistics that show correlations between ability and race/gender/ethnicity/etc. We’re not afraid to find out, right?" CreationDate="2017-06-27T01:13:16.520" UserId="1424" />
  <row Id="2160" PostId="1131" Score="1" Text="This is incorrect. Employers will very often turn a blind eye to blatant harassment. Susan Fowler's account at Uber is a prime example of this. She is a talented engineer yet when she was faced by blatant harassment that was well documented by her and other women at Uber, HR and management (all the way up to the CTO) completely rebuffed her. Inherent bias doesn't go away when you're good at your job and women shouldn't have to change jobs in order to be free of harassment." CreationDate="2017-06-29T20:59:58.463" UserId="1553" />
  <row Id="1856" PostId="1133" Score="2" Text="Very nice answer - I like the emphasis on clarity of the assignment itself. Welcome to [cseducators.se]! I hope we hear more from you in the future :)" CreationDate="2017-06-26T17:42:10.083" UserId="27" />
  <row Id="1859" PostId="1134" Score="2" Text="Alumnae (I thought it was spelled alumni o.o) Are often a good source of experience." CreationDate="2017-06-26T17:53:58.710" UserId="150" />
  <row Id="1864" PostId="1134" Score="10" Text="Female graduates are alumnae. &quot;Alumni&quot; is for groups that include men. http://grammarist.com/usage/alumna-alumnae-alumni-alumnus/" CreationDate="2017-06-26T17:59:20.777" UserId="283" />
  <row Id="1865" PostId="1134" Score="2" Text="I did not know that. Thanks!" CreationDate="2017-06-26T18:00:16.587" UserId="150" />
  <row Id="1903" PostId="1134" Score="0" Text="While it's used correctly, &quot;alumnae&quot; is a bit esoteric (and arguably archaic).  &quot;Female alumni&quot; would probably be more accessible." CreationDate="2017-06-26T23:58:12.813" UserId="39" />
  <row Id="1911" PostId="1134" Score="9" Text="I'm a white man and I have been in the computing industry since I finished my doctorate in 1991, but I still feel like an impostor. +1 for teaching your students about Impostor Syndrome" CreationDate="2017-06-27T09:16:15.693" UserId="1436" />
  <row Id="1939" PostId="1134" Score="5" Text="@Nat &quot;alumna/alumnae&quot; is the commonly accepted term used by most women's colleges today - not archaic at all." CreationDate="2017-06-27T16:14:59.127" UserId="92" />
  <row Id="1982" PostId="1134" Score="1" Text="&quot;If their families lack connections (which is overwhelmingly the case for my students), they should take advantage of other ways to get a foot in the door, paying it forward later&quot; really spoke to me. So many people get their first job through some connection (networking, family, fellow alumni), so if you don't have that network, it makes perfect sense to use a different method (outreach program etc.) to substitute for the same leg up many people get." CreationDate="2017-06-27T23:35:36.633" UserId="1473" />
  <row Id="2117" PostId="1134" Score="1" Text="Funny that in a language where there actually is a neuter form, we still cling to gendered forms." CreationDate="2017-06-29T15:48:07.797" UserDisplayName="user737" />
  <row Id="2173" PostId="1134" Score="1" Text="@nocomprende: &quot;alumnus&quot; and &quot;alumni&quot; are both gendered male (http://www.dictionary.com/browse/alumni), so I don't see what's odd about using the female alumna/alumnae when referring to all-female graduates. Are you suggesting using the neutral alumnum/alumna for all graduates? That seems reasonable to me, but your comment is rather vague." CreationDate="2017-06-30T00:05:01.977" UserId="1473" />
  <row Id="2176" PostId="1134" Score="1" Text="@AlannaRose What is odd is that we find it necessary to distinguish male and female when it basically only matters in one very limited circumstance. I sincerely hope that this is an error that will just quietly go away and die. Maybe if people stop resurrecting it, it would." CreationDate="2017-06-30T00:17:00.860" UserDisplayName="user737" />
  <row Id="2438" PostId="1134" Score="1" Text="In addition to using your network to find out a company's reputation, I think it important to pass each student **individually** from you as a mentor to their next mentor in the field. Bill Massey describes Black mentor networks as playing a key role in Bell Lab's success producing so many highly successful Black STEM professors. https://www.youtube.com/watch?v=GS3gFg3AMFA . HS teachers need to identify post-secondary mentors for their top students from under-represented groups. Donna Brazile: Fight your way into a place at the table and then elbow to make room for others." CreationDate="2017-07-03T04:57:16.233" UserId="765" />
  <row Id="2604" PostId="1134" Score="1" Text="I am reading the articles. Strange stuff. In college, 30 years ago, half of my peers were female. I got a job with a software company of about 100 people, the great majority were women. I now work in a department of a US state, all of my superiors up to the very top (until just recently) are female. I have never seen the kind of bias described in the articles, perhaps many people have not, which is why it might be hard to garner support to change it. I definitely agree that unconscious bias exists (and is unavoidable) but the only solution is self-awareness. That is not likely to happen." CreationDate="2017-07-05T01:51:02.783" UserDisplayName="user737" />
  <row Id="1908" PostId="1136" Score="0" Text="I like how you stress the difference between rounding and conversion. However, your use of terminology is slightly incorrect compared to IEEE754. Conversion is the process of switching between decimal and float. In some cases, switching back and forth will not lose information. However, there is usually still rounding taking place in those conversions, possibly even if after converting back you end up with the same result (the two roundings simply cancelled out in that case). I would be hesitant to oversimplify things here, as that might do more harm than good in the long run." CreationDate="2017-06-27T07:24:30.050" UserId="1370" />
  <row Id="1909" PostId="1136" Score="2" Text="@ComicSansMS I'm trying to get away from the myth that the discrepancies in floats are just rounding errors.  I've seen to many students turn in code that attempts to correct the problem with their own rounding code. That's the oversimplification to avoid." CreationDate="2017-06-27T08:24:59.203" UserId="1401" />
  <row Id="1924" PostId="1136" Score="1" Text="The decimal inch ruler is perfect here." CreationDate="2017-06-27T13:45:11.420" UserId="41" />
  <row Id="1895" PostId="1138" Score="0" Text="Thanks, Mike. I definitely plan to go through the material myself well in advance. My lack of knowledge of modern AI should be a plus, as I stumble over material in advance of my students." CreationDate="2017-06-26T20:37:33.480" UserId="283" />
  <row Id="1897" PostId="1138" Score="0" Text="It sounds like you took AI around when I took AI (prior to the MOOC) - even with it's limitations I really liked it. I also really liked Andrew Ng's ML course which was more project based." CreationDate="2017-06-26T21:09:38.893" UserId="237" />
  <row Id="1900" PostId="1142" Score="0" Text="What students do when they are having trouble completely depends on their personality. I think that the rise of services like Khan Academy have shown us that students like to make mistakes and get explanations without feeling judged (even though they are not)." CreationDate="2017-06-26T22:22:35.127" UserId="1397" />
  <row Id="1901" PostId="1142" Score="0" Text="@tusharsoni Good point. I hadn't thought of ways a computer TA could be perceived as superior to a human TA." CreationDate="2017-06-26T22:31:20.930" UserId="283" />
  <row Id="1915" PostId="1143" Score="6" Text="It could simply be that the students want a grade and so don't see the point if you don't take off points for it." CreationDate="2017-06-27T10:59:13.227" UserId="58" />
  <row Id="1916" PostId="1143" Score="1" Text="@thesecretmaster But that's not what I'm asking. I'm asking how I can demonstrate it." CreationDate="2017-06-27T11:00:28.797" UserId="150" />
  <row Id="1925" PostId="1143" Score="1" Text="This feels like a semi-hidden self-learning question.  If it is truly a self-learning question, then that's okay (encouraged, even), but then post it as such, and you don't need to couch the learning in terms of what other people need (i.e. &quot;the *students* simply don't see...&quot;).  If it's not a self-learning question, then the answer is very simple: just perform a SQL injection attack on one of their sites in front of them, and watch their jaws drop." CreationDate="2017-06-27T14:04:51.737" UserId="27" />
  <row Id="1931" PostId="1143" Score="11" Text="What if you were to do a two part assignment? Give them a library through which to route their sql queries and make this library vulnerable to sql injection. Have them come in and show you their project using that library, and then in the middle of the demo, wipe their database using the libraries vulnerability. Tell them not to worry about it, you will address it in the next lecture and in the next lecture, tell the class about injection. In the second part, give them the source to the library, and have them fix the injection. This also teaches them to be concerned about libraries they use." CreationDate="2017-06-27T14:53:35.023" UserId="1456" />
  <row Id="1943" PostId="1143" Score="0" Text="Show the problem, and show the alternative (the solution). I have been stuck in the past knowing that I am doing it wrong, but saw no alternative. I was therefore stuck doing the wrong behaviour (and having deep knowing that it was wrong)" CreationDate="2017-06-27T16:35:11.120" UserId="204" />
  <row Id="1975" PostId="1143" Score="6" Text="Pictures do a great job, especially when you the teacher aren't the source.  https://xkcd.com/327/        There used to be a site where you could practice these types of things, trying to trigger specific errors, which would give you a username/password to get to the next step of the game... unfortunately, the domain went bye-bye and is now owned by some squatter... haven't found a replacement resource..." CreationDate="2017-06-27T21:35:24.640" UserId="662" />
  <row Id="2003" PostId="1143" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/61210/discussion-on-question-by-itamar-green-demonstrating-the-possible-dangers-of-sql)." CreationDate="2017-06-28T11:36:03.740" UserId="58" />
  <row Id="2159" PostId="1143" Score="1" Text="I have a response that doesn't answer the question.  Ditch MySQL in favor of the equally free postgres, not because my flavor of RDBMS is better than yours, but because postgres supports prepared statements which the typical MySQL installation does not. Teach them to do everything through prepared statements, in which the SQL is passed to the RDBMS for precompile, and after that only the reference to the compiled access path plus paramaters are passed, so SQL injection is not possible.  Fringe benefit: eliminate 50 to 80% of the overhead of every SQL call." CreationDate="2017-06-29T20:56:21.870" UserId="1537" />
  <row Id="2189" PostId="1143" Score="0" Text="Teach ethics prior to having students do anything like this. Obtain written acknowledgement from students that accessing computing resources without written permission from the owner, including manipulating a database, can be felony under the CFAA." CreationDate="2017-06-30T07:08:00.900" UserId="765" />
  <row Id="2190" PostId="1143" Score="0" Text="Assign students to groups and have each group member provide other group members written permission to attack their site. Or provide a classroom site and have students add their name to a table `Successful_hackers`. The classroom will suffer -- providing a teachable moment -- if any student vandalizes the site by dropping the table." CreationDate="2017-06-30T07:08:21.683" UserId="765" />
  <row Id="2274" PostId="1143" Score="0" Text="Is there a reason you're still teaching JSP, when it's really been hugely declining in popularity and relevance over the last ten years? Why aren't you teaching something similar to what would be used on a new project in industry - MVC is *not* that hard a concept to understand? I'd also echo the comments suggesting teaching prepared statements from the start." CreationDate="2017-07-01T16:12:27.630" UserId="916" />
  <row Id="2275" PostId="1143" Score="1" Text="@AdamWilliams Unfortunately, It's the school curriculum. It might be changing this year (finally!)..." CreationDate="2017-07-01T16:16:31.437" UserId="150" />
  <row Id="14055" PostId="1143" Score="0" Text="Correct implementations are not subject to injection attacks. So why worry about injection when you seem not to be interested in correct answers--and probably, clear specifications? (Rhetorical.)" CreationDate="2018-12-13T05:47:27.907" UserId="2485" />
  <row Id="1936" PostId="1144" Score="1" Text="I did a project like this when teaching about trust within the client / server model. As a class we designed a simple online banking web app with a single table database allowing you to log in and check your balance. As the class learnt more about SQL we explored different attack vectors and looked at how to stop them from working." CreationDate="2017-06-27T15:21:39.030" UserId="674" />
  <row Id="1973" PostId="1144" Score="7" Text="Just make sure all the students have offline backsups first.  It's all fun and games until the pen testers destroy a production system afterall." CreationDate="2017-06-27T20:42:53.493" UserId="1411" />
  <row Id="1999" PostId="1144" Score="0" Text="On the other hand, as soon as they start using prepared statements, which should be from the get-go, they will no longer be vulnerable. Better to attack, say, WebGoat - and to know that a lot of old-school sites are still vulnerable." CreationDate="2017-06-28T11:05:05.407" UserId="913" />
  <row Id="2007" PostId="1144" Score="2" Text="@tucuxi I think that's the point the OP is trying to make to his students.  &quot;Don't do it the stupid way and you close off a huge vulnerability.&quot;" CreationDate="2017-06-28T12:24:55.203" UserId="1411" />
  <row Id="2092" PostId="1144" Score="0" Text="@tucuxi &quot;As soon as they start using prepared statements&quot; - well, this sounds like something you'd only do a few times, and stop doing once the students start really thinking about security." CreationDate="2017-06-29T09:24:31.217" UserId="1275" />
  <row Id="2099" PostId="1144" Score="0" Text="@DanNeely my point is that the students may feel cheated if they are requested to invest too much time writing insecure code and then breaking it (by using vulnerable string-concatenation queries) instead of being shown how to avoid this much earlier (by using prepared statements). Burned fingers teach, but they may resent you for setting them up." CreationDate="2017-06-29T12:53:31.313" UserId="913" />
  <row Id="1930" PostId="1147" Score="1" Text="Thanks! Could you specify in the answer what's the example? (Not being lazy, I will watch the video, but it's preferable if you added the example to your answer)" CreationDate="2017-06-27T14:46:07.270" UserId="150" />
  <row Id="1932" PostId="1147" Score="1" Text="Hi, ecarl, and welcome to [cseducators.se]!  This is a nice answer, and I hope we hear more from you in the future :)" CreationDate="2017-06-27T14:54:22.593" UserId="27" />
  <row Id="1961" PostId="1149" Score="0" Text="The XKCD example doesn't work with most database APIs, because they don't allow multiple statements. It's a good comic, but if you try to use it as a demonstration you won't get the problem across." CreationDate="2017-06-27T18:37:13.127" UserId="1471" />
  <row Id="2001" PostId="1149" Score="2" Text="Hacking into bad password validation using `' OR 1=1; --` is a good, short demonstration" CreationDate="2017-06-28T11:06:44.853" UserId="913" />
  <row Id="2073" PostId="1149" Score="0" Text="@tucuxi Assuming they're comparing passwords in the clear instead of hashing them first.  Of course, if they *aren't* hashing, that's another thing they need to learn about." CreationDate="2017-06-28T21:43:51.190" UserId="827" />
  <row Id="1944" PostId="1150" Score="1" Text="Just for clarification...you asking for university courses that use computer science (or computational thinking?) that are NOT listed as formal computer science courses?" CreationDate="2017-06-27T16:37:58.380" UserId="76" />
  <row Id="1946" PostId="1150" Score="3" Text="What is &quot;high school computer science???&quot;" CreationDate="2017-06-27T16:45:34.307" UserId="21" />
  <row Id="1947" PostId="1150" Score="0" Text="not CS, though any unexpected computer science courses could be of interest. (trouble is what is unexpected)" CreationDate="2017-06-27T16:46:33.197" UserId="204" />
  <row Id="1948" PostId="1150" Score="0" Text="Exactly...you should probably define &quot;unexpected&quot; here (at least how you see it for this question). This should probably be narrowed in scope; as is this question seems too broad/vague." CreationDate="2017-06-27T16:48:13.587" UserId="76" />
  <row Id="1949" PostId="1150" Score="0" Text="I don't think we need to be exhaustive to answer this, but 4 or 5 **different** example would do it." CreationDate="2017-06-27T16:55:15.983" UserId="204" />
  <row Id="1950" PostId="1150" Score="3" Text="I don't understand the question here." CreationDate="2017-06-27T16:58:15.273" UserId="27" />
  <row Id="1967" PostId="1150" Score="1" Text="There is a large difference between computer science and programming. What are you teaching the high school students exactly?" CreationDate="2017-06-27T20:01:34.230" UserId="1476" />
  <row Id="2064" PostId="1150" Score="0" Text="@RemcoGerlich sadly both GCSE (14-16 years old) and A-Level (16-18 years old), do not have enough programming, but they do have some. A controlled assessment for GCSE, and a project for A-Level. Plus the exam can ask questions on programming." CreationDate="2017-06-28T18:50:10.863" UserId="204" />
  <row Id="2052" PostId="1152" Score="3" Text="You could call it, &quot;Weapons of Math Deduction&quot;" CreationDate="2017-06-28T17:23:52.553" UserDisplayName="user737" />
  <row Id="1951" PostId="1154" Score="3" Text="Hi itsjtwright! Welcome to [cseducators.se]! I hope to see you around the community more!" CreationDate="2017-06-27T16:59:09.853" UserId="58" />
  <row Id="1952" PostId="1154" Score="2" Text="This is a nice answer. Welcome to [cseducators.se], itsjtwright. Ditto what @thesecretmaster said :)" CreationDate="2017-06-27T16:59:51.463" UserId="27" />
  <row Id="1953" PostId="1154" Score="1" Text="I decided to drop by (and would like to stay) due to  being a student teacher of APCSP next year, and this seemed to be a solid community to bounce ideas with, so thank you for the warm welcome, I have to say a tad strange this being my second SE group, last being overflow, not particularly the nicest people." CreationDate="2017-06-27T17:06:29.870" UserId="1463" />
  <row Id="1966" PostId="1154" Score="0" Text="We are not nearly as large as SO. We try to greet new posters, both as a way to humanize the community here, and as a way to check in with initial post quality.  I think (hope?) it helps set the stage for a warm, welcoming, and on-topic community :)" CreationDate="2017-06-27T19:37:08.783" UserId="27" />
  <row Id="2013" PostId="1156" Score="0" Text="I like this answer very much. Also, welcome to [cseducators.se]!" CreationDate="2017-06-28T13:16:40.113" UserId="27" />
  <row Id="2093" PostId="1156" Score="0" Text="I don't like the idea of giving them a vulnerable library. If I was the student, I would understand better if I was shown the vulnerability in my own code. If you have a predetermined library vulnerability it looks no different to a backdoor - all it demonstrates is that the professor's libraries can't be trusted. The point of a security demonstration should be to show people that **their own code** can't be trusted!" CreationDate="2017-06-29T09:28:52.453" UserId="1275" />
  <row Id="2094" PostId="1156" Score="0" Text="@immibis I had considered that, but doing the same thing with an individual's code for each student would require the instructor to fig l find a SQL injection risk in each application. This is why I suggested having the students fix the injection risk provided by the instructor." CreationDate="2017-06-29T11:08:09.303" UserId="1456" />
  <row Id="2170" PostId="1156" Score="0" Text="@Sidney Then I suggest picking one student's code and demonstrating that to the whole class - the point is that you didn't write the code so you didn't plant the vulnerability there. Hopefully most students will see how their own code has the same bug, but any student who doesn't understand the demonstration can come to you individually, like with any other problem." CreationDate="2017-06-29T22:42:17.567" UserId="1275" />
  <row Id="1959" PostId="1157" Score="2" Text="Quick clarification: what are the backgrounds of your students coming in? This particularly seems relevant given the way you've framed the question." CreationDate="2017-06-27T17:39:53.220" UserId="27" />
  <row Id="1960" PostId="1157" Score="0" Text="The pre rec for the class is an intro to programming class that teaches the basics of python, but many students have done work outside of class and picked up skills. So students come from backgrounds ranging from basic python to advanced web development or game making, it is a very broad range of students, this is where the issue lies." CreationDate="2017-06-27T17:42:51.290" UserId="1463" />
  <row Id="2090" PostId="1158" Score="0" Text="Your first quote suggests it's the use of CS end products that are the new literacy. I think you need to make the connection between basic CS, and future applications. Specifically to emphasise learning CS over a 'digital litteracy' course which teaches 'how to learn a new app once it is released'" CreationDate="2017-06-29T07:59:27.163" UserId="41" />
  <row Id="2582" PostId="1160" Score="1" Text="CS50 AP is what I wish A Level Computing was when I took it - it's a class I wish I had the chance to take, and the attitude towards learning and growth is a really healthy mindset to encourage." CreationDate="2017-07-04T18:43:16.627" UserId="916" />
  <row Id="1993" PostId="1161" Score="0" Text="Note that it is the last in the list of recommended courses for most of the engineering ones, which tallies with the advice I had many years ago ( to study engineering at Cambridge, do art or music O-level rather than CS as the relevant bits of O-level CS would be covered in a couple of lectures, do further maths rather than CS at A )." CreationDate="2017-06-28T09:21:11.950" UserId="1498" />
  <row Id="2010" PostId="1161" Score="0" Text="The actual CS parts of a 1990s CS A-level are still useful to me as a physics postdoc (the turbo pascal I learnt for the coding parts less so).  They've also been beneficial when working in engineering.  In general *any* exposure to CS concepts will help when students first encounter programming in something like a physics degree because there's no time to cover it. Some examples: Pseudocode; RAM vs. storage; data types; flow of control." CreationDate="2017-06-28T12:56:08.783" UserId="1127" />
  <row Id="2011" PostId="1161" Score="0" Text="@PeteKirkham I'm not sure you can read much into the sort order." CreationDate="2017-06-28T12:57:57.850" UserId="1127" />
  <row Id="1964" PostId="1162" Score="0" Text="There is some truth to this." CreationDate="2017-06-27T19:23:51.057" UserId="283" />
  <row Id="1974" PostId="1162" Score="3" Text="Unfortunately. I'd like more commentary here that doesn't in some way imply that the victim is responsible for the problem, or for &quot;solving&quot; the problem. Racism isn't caused by POC. Nor is sexism caused by women." CreationDate="2017-06-27T20:51:14.253" UserId="1293" />
  <row Id="1965" PostId="1163" Score="1" Text="Nice, thoughtful answer. Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-06-27T19:35:14.360" UserId="27" />
  <row Id="1981" PostId="1166" Score="1" Text="I really like the psychological point about breaking down stressful problems. I find I do the same thing in my own life. This is a nice answer. Welcome to [cseducators.se]. I hope we hear more from you!" CreationDate="2017-06-27T23:31:20.217" UserId="27" />
  <row Id="1983" PostId="1168" Score="4" Text="This is one of my favorite things I have ever read on this site. It practically guarantees deep cognitive engagement. I know we try to avoid &quot;thank you&quot; messages on SE sites, but an upvote really does not suffice here. Holy cow... !  Thank you!" CreationDate="2017-06-27T23:47:17.670" UserId="27" />
  <row Id="2014" PostId="1171" Score="0" Text="I like this method: being able to see their individual commits would help." CreationDate="2017-06-28T13:25:20.910" UserId="7" />
  <row Id="9462" PostId="1171" Score="0" Text="@called2voyage all seeing the commit log tells you is who was at the keyboard when the code was committed. You can't see the teamwork process or relative effort from commit logs." CreationDate="2018-01-01T15:07:21.450" UserId="1537" />
  <row Id="2017" PostId="1173" Score="0" Text="Thank you, I will look this over in detail. Touching on the Learning Styles point (I am about to ask a question relevant to that), it is my belief that one cannot program successfully without a visual impression of what is going on. So, regardless of someone';s preferred style, they must learn to draw diagrams, flowcharts, etc or they will not be able learn, to organize their own thinking, or to communicate with anyone else. To this extent, I think that there are some 'universals' with regard to knowing about programming. A picture is worth 1kb. Whatever." CreationDate="2017-06-28T14:00:01.193" UserDisplayName="user737" />
  <row Id="1986" PostId="1176" Score="1" Text="Welcome to Computer Stack Educators! Could you please describe in your answer what in the youtube video is good? what's the example there? It would be very good to add the example from the video to your answer." CreationDate="2017-06-28T07:41:02.453" UserId="150" />
  <row Id="19007" PostId="1177" Score="0" Text="I disagree with your singleton example. Why is the Empire State Building a class, rather than an object? Or conversely, why isn't *every* building a singeton? Why isn't every object of every class a singleton?" CreationDate="2022-01-14T19:53:33.770" UserId="6346" />
  <row Id="2002" PostId="1178" Score="3" Text="Welcome to Computer Science Educators! Wow. This is a very amusing suggestion. I'll add it to the end of the lesson plan. Thanks!" CreationDate="2017-06-28T11:16:57.643" UserId="150" />
  <row Id="16600" PostId="1178" Score="0" Text="Extreme funny example - how not to do ;-) Thx." CreationDate="2020-06-18T13:32:22.663" UserId="1492" />
  <row Id="2012" PostId="1179" Score="0" Text="This is a thoughtful answer. Welcome to [cseducators.se]!" CreationDate="2017-06-28T13:12:54.347" UserId="27" />
  <row Id="2053" PostId="1179" Score="0" Text="Every field considers its own knowledge to be fundamental and important, so I think that a good question to ask periodically is something like: &quot;should we now drop Latin in favor of programming, because there are only so many hours in the day?&quot; Simply adding more 'literacys' to the curriculum will not work, so we need to be sure of what is the real literacy, *today*. I imagine that at some point, computers will be powerful enough that the ability to read and write will not be necessary for everyone." CreationDate="2017-06-28T17:31:13.620" UserDisplayName="user737" />
  <row Id="2055" PostId="1179" Score="0" Text="I took Latin in high school for required foreign language credit and because I thought it may help improve my vocabulary for ACT/SAT tests later.  I also took my first formal programming course (had been programming for several years before) in high school because it was my first chance to get onto a &quot;real&quot; computer instead of my TRS-80 and 8088 (VAX via green screen terminals, doign Fortran and Cobol)." CreationDate="2017-06-28T17:38:41.307" UserId="662" />
  <row Id="2015" PostId="1180" Score="0" Text="This question is quite broad. You're asking for advice so general that you even mentioned it's applications in other fields. In addition, there is plenty of advice out there on this topic which you could research." CreationDate="2017-06-28T13:50:59.813" UserId="58" />
  <row Id="2022" PostId="1180" Score="0" Text="I mentioned martial arts in the original only to suggest it is different, but possible, in other fields. But, I agree that it is broad. That is why I pose it. I think the community as a whole can suggest ways to work toward it." CreationDate="2017-06-28T14:38:29.900" UserId="1293" />
  <row Id="2023" PostId="1180" Score="1" Text="Stack Exchange is for Q&amp;A, not discussion. Normally discussion questions are too broad for our scope and belong in a different venue." CreationDate="2017-06-28T14:39:29.790" UserId="58" />
  <row Id="2037" PostId="1180" Score="1" Text="This is really too broad. You may want to consider asking a new question about differentiation within (for instance) labs, or lecture, or code-alongs. I could write a book about differentiation within the CS classroom overall. (And I'm actually considering doing so!)" CreationDate="2017-06-28T16:27:12.540" UserId="27" />
  <row Id="2041" PostId="1180" Score="1" Text="Actually @Ellen Spertus, I'm trying to _avoid_ differentiation, not promote it. Tracking would never be my solution, though I would look at answers that suggest it. How can help everyone learn, everyone contribute?" CreationDate="2017-06-28T16:45:45.623" UserId="1293" />
  <row Id="2043" PostId="1180" Score="0" Text="I'm a little confused here. You are _avoiding_ differentiation? Differentiation != tracking. As written, I'm not sure I understand what you're asking. I thought I had a beat on it as a question about differentiation, but if it's not that, I'm not sure what you're trying to get at. What you're looking for is a more student-centered approach, which is at the heart of differentiated instruction. Please clarify otherwise this is too broad/vague." CreationDate="2017-06-28T16:59:24.803" UserId="76" />
  <row Id="2058" PostId="1180" Score="0" Text="Too broad, I think. If you focus on some specific scenarios, you're likely to get more good answers. It also makes it easier for people to disagree with a broad-brush approach in specific subject areas." CreationDate="2017-06-28T18:00:02.643" UserId="41" />
  <row Id="2061" PostId="1180" Score="2" Text="@Buffy Based on the DVs and CVs, I am going to close this question. What you are asking is an important issue to address, but as worded this is too broad (and to be fair, the tag confusion did not help; this is absolutely a question about differentiation). I get the sense that the community also feels this way. I do encourage you to re-ask this with a more narrow scope and shorter background, so the focus is more on the question itself." CreationDate="2017-06-28T18:22:54.673" UserId="76" />
  <row Id="2062" PostId="1180" Score="0" Text="No objection. I'm sorry that it didn't find acceptance, of course, but I don't know how I can &quot;improve&quot; it and reach the goal of collecting techniques." CreationDate="2017-06-28T18:43:41.290" UserId="1293" />
  <row Id="2065" PostId="1180" Score="2" Text="@Buffy Be short, sweet, and to the point. &quot;What are techniques for differentiation in a CS classroom with a wide range of student abilities?&quot; or &quot;How do I actively engage all students in the learning process when there are great discrepancies in student ability?&quot; Also, try to narrow it to a particular aspect - maybe lecture or first instruction or labs. Pick one aspect to focus on." CreationDate="2017-06-28T18:54:47.190" UserId="76" />
  <row Id="2071" PostId="1180" Score="1" Text="Please don't be discouraged. I hope to see more questions from you." CreationDate="2017-06-28T21:19:58.767" UserId="283" />
  <row Id="2075" PostId="1180" Score="0" Text="Hard to take a risk here. Sorry." CreationDate="2017-06-28T22:03:10.233" UserId="1293" />
  <row Id="2136" PostId="1180" Score="0" Text="I guess my simple answer is, &quot;come and work here where I teach.&quot;" CreationDate="2017-06-29T17:51:19.383" UserDisplayName="user737" />
  <row Id="2144" PostId="1180" Score="0" Text="Hmmm. Been there, done that, but at 73 I think I'll pass. Thanks for the sentiment though." CreationDate="2017-06-29T18:03:34.660" UserId="1293" />
  <row Id="2164" PostId="1180" Score="0" Text="How do you know (or how could you even prove) that this goal is scientifically realistic?  If not, your directive will fail, and that has a cost/benefit ratio." CreationDate="2017-06-29T21:23:47.987" UserId="59" />
  <row Id="2165" PostId="1180" Score="0" Text="Still important to me and my students that I try, and seek to find ways toward the goal even if, Zeno, like it is out of reach." CreationDate="2017-06-29T21:36:46.630" UserId="1293" />
  <row Id="2054" PostId="1181" Score="0" Text="As a former programmer now teaching / training, I concur." CreationDate="2017-06-28T17:35:23.437" UserDisplayName="user737" />
  <row Id="2021" PostId="1183" Score="0" Text="A question, definitely. _How_ to do it if it is a goal, not whether to attempt it." CreationDate="2017-06-28T14:36:51.147" UserId="1293" />
  <row Id="11814" PostId="1183" Score="0" Text="I think nearly anyone can learn at least a bit of programming.  This question isn't asking how to turn every student into someone who could be a career programmer.  I agree that's clearly impossible.  You have to like the logic of thinking like a computer to do it successfully and for the long term.  I agree it's a mistake to think that everyone could be a coder, or even some any IT position." CreationDate="2018-03-27T03:45:50.783" UserId="1654" />
  <row Id="11815" PostId="1183" Score="0" Text="I *think* almost everyone could eventually learn something about the most simple of programming, even if it didn't really sink in or fit with how they think.  The question for me is whether that's compatible with teaching other students who &quot;get it&quot; an interesting amount of material in the same class.  Maybe yes if you set your &quot;learned *something*&quot; threshold low enough for the students who don't get it quickly or easily." CreationDate="2018-03-27T03:48:14.620" UserId="1654" />
  <row Id="2039" PostId="1186" Score="6" Text="Is this a theory or practice course?  Memorizing all of Sipser's theory textbook and (trying to) memorize all of Stroustrup's _The C++ Programming Language_ are different problems." CreationDate="2017-06-28T16:32:40.030" UserId="1102" />
  <row Id="2060" PostId="1186" Score="4" Text="Are you sure they really understand what they are underlining, highlights and so on. Propably they are just memorize everything without proper understanding." CreationDate="2017-06-28T18:20:24.830" UserId="1522" />
  <row Id="2095" PostId="1186" Score="3" Text="This is how I started CS as well. The world seemed small enough for me to learn everything about every language. After 3 or 4 months, I hit a wall, the classic, *&quot;the more you know, the less you know, you know&quot;*. I never complained about my self-induced workload though, and never did it to pass a test. I am sure that if I hadn't realized what I couldn't learn everything, I would've burned out. Unfortunately, I cannot remember what triggered that wall in me, to start focusing on what's important." CreationDate="2017-06-29T11:56:38.833" UserId="1543" />
  <row Id="2025" PostId="1187" Score="0" Text="Interesting answer. Breaking the project into separate, independent components is what I ended up doing as a student when I was a member of a group assignment. I still ended up doing a majority of the work. However, using version control, as you and others have pointed out, would have shown who performed what, at least in my case." CreationDate="2017-06-28T15:02:51.780" UserId="7" />
  <row Id="2026" PostId="1187" Score="0" Text="Even commit logs would not prevent the software equivalent of plagiarism but in the real world it often happens that different individuals or teams are given separate assignments and the system is architected in such a way that they can all work independently without blocking each other until integration time." CreationDate="2017-06-28T15:14:41.647" UserId="1292" />
  <row Id="2027" PostId="1187" Score="0" Text="In my case it wasn't plagiarism because the others weren't passing my work off as their own, but you could certainly structure an assignment that way (where others helping complete a component that is not theirs is plagiarism). I'm not sure how useful that structure would be, and as you say you can't really get around that with just version control anyway. In any case, version control is not a fix-all for sure, but it would have solved my team's problem when I was a student." CreationDate="2017-06-28T15:17:29.637" UserId="7" />
  <row Id="2038" PostId="1188" Score="3" Text="I agree very much that taking stock of students' mental health is paramount here, and should ultimately be the guiding principle of how to respond.  They may be extremely interested, or they may be breaking down. This is the most important idea here so far." CreationDate="2017-06-28T16:31:28.040" UserId="27" />
  <row Id="17088" PostId="1188" Score="0" Text="Perhaps the students were very concerned to be able to get jobs?" CreationDate="2020-09-25T21:23:57.713" UserId="5349" />
  <row Id="2044" PostId="1189" Score="3" Text="@nocomprende: This is, to my understanding, somewhat typical of the US educational system as a whole - at the high school level and below, rote memorization is the underlying valuable skill, meaning that ambitious students will try to swallow the textbook whole in order to do better on (standardized) tests and exams. In order to break this habit, you might consider assigning additional project work vs. readings - they'll be forced to understand by a rather different path." CreationDate="2017-06-28T17:01:30.923" UserId="1248" />
  <row Id="2028" PostId="1190" Score="0" Text="Hi Chris! Welcome to [cseducators.se]! It's great that you suggested an actual project and grading criteria." CreationDate="2017-06-28T15:27:11.530" UserId="58" />
  <row Id="2029" PostId="1190" Score="0" Text="I don't understand, they are high school students, how do you suggest they manage to crack hashed passwords?" CreationDate="2017-06-28T15:29:57.353" UserId="150" />
  <row Id="2034" PostId="1190" Score="0" Text="The OP/teacher does that whilst marking their hardened projects in semester 2. I'm in the UK so don't know what age these student are, but if they are being taught this stuff it seems reasonable they should be able to prevent it occurring. Note I have edited my answer to clarify that the students are given the task of hardening their semester one projects prior to them being marked in semester two. That bit was in my head but didn't manage to make it into the answer first time ;-)" CreationDate="2017-06-28T16:00:47.183" UserId="1513" />
  <row Id="2042" PostId="1190" Score="2" Text="@Chris the students are 16 years old. I'm sorry to say, but they are nowhere near the level of cracking a hash. Some *might* manage to do it. Regardless, I think it's much better to *award* points for successfully preventing the listed attacks, rather than dock points off from students who did not manage to do something that is far beyond their level." CreationDate="2017-06-28T16:50:58.347" UserId="150" />
  <row Id="2091" PostId="1190" Score="0" Text="Okay, maybe a marking system that promotes positive reinforcement rather than marking them down would be more appropriate for 16 year olds. However, what they have to be taught is that you don't need to be a genius to do something like crack a hash. All you need is to download a tool with a decent dictionary and away you go. If you have a modern GPU you can crack tens of thousands in a minute" CreationDate="2017-06-29T07:59:51.227" UserId="1513" />
  <row Id="4194" PostId="1191" Score="0" Text="We always appreciate the student perspective here.  Welcome to [cseducators.se], Keltie!" CreationDate="2017-07-13T16:08:18.710" UserId="27" />
  <row Id="2031" PostId="1192" Score="0" Text="@nocomprende it might be nice (though extra work for you) to have notes created for them, with blanks to fill in so that you know they're paying attention - something like &#xA;&lt;date&gt; &lt;lecture title&gt;&#xA;Python is a ____ language. Python is awesome because ____. etc." CreationDate="2017-06-28T15:43:44.603" UserId="919" />
  <row Id="2161" PostId="1192" Score="1" Text="Daily handouts can be nice for highlighting the concepts, but if you put too much emphasis on them, your students will just ignore everything not on the handouts." CreationDate="2017-06-29T21:04:55.843" UserId="1013" />
  <row Id="2032" PostId="1193" Score="2" Text="This question is really broad. There are so many frontiers that could be discussed. A book could be written on this topic." CreationDate="2017-06-28T15:43:45.283" UserId="58" />
  <row Id="2035" PostId="1193" Score="1" Text="Was immediately reminded of [the SMBC about quantum computing](http://www.smbc-comics.com/comic/the-talk-3) (not to be confused with [the SMBC about quantum computers](http://www.smbc-comics.com/index.php?id=4057))." CreationDate="2017-06-28T16:04:59.147" UserId="1166" />
  <row Id="2047" PostId="1193" Score="1" Text="@thesecretmaster, you seem to be favoring only questions that can be definitively answered with &quot;the one true answer.&quot; I think that is too narrow. There are questions that different people will answer quite differently without it being just _opinion_ or _discussion_. If the criteria are applied _too_ strictly it will get in the way and discourage people. This question can have many answers, all different, all correct, and more important, all thought-provoking." CreationDate="2017-06-28T17:05:46.350" UserId="1293" />
  <row Id="2049" PostId="1193" Score="1" Text="@Buffy I have my personal views on which questions are too broad and which are not. I will not abuse my moderator power by closing questions based on that evaluation, but I can express my opinion. In this case, I believe that multiple books could be (and have been) written on each frontier of CS, and that is far too broad to be covered in one answer. If you'd like to discuss this further (which I'd be happy to do), please [start a new room with me](https://chat.stackexchange.com/users/162795) to avoid taking up comment space." CreationDate="2017-06-28T17:08:41.753" UserId="58" />
  <row Id="2068" PostId="1193" Score="1" Text="A good teaching technique is to introduce a topic and some of its features and terminology before it is necessary to address it in detail. It need not be a frontier topic. It can be one (compilers, AI, ...) that will be studied in due course. So, you are asking for ideas to &quot;prime the pump.&quot; I am applauding." CreationDate="2017-06-28T19:17:34.327" UserId="1293" />
  <row Id="2051" PostId="1194" Score="1" Text="A very current frontier, with the ransomware going about." CreationDate="2017-06-28T17:12:22.133" UserId="150" />
  <row Id="2069" PostId="1195" Score="1" Text="@nocomprende It's certainly not unique to CS. It is well known in math (at undergraduate level) where the people who aced their way through the pre-university education system suddenly hit the wall in their second or third year." CreationDate="2017-06-28T19:52:12.663" UserId="1352" />
  <row Id="2070" PostId="1195" Score="2" Text="@nocomprende Having been programming in industry since the late 1960s, IMO the amount of *abstraction* in CS certainly hasn't increased by 20 orders of magnitude, even if the performance of the hardware might have done that. When people started to teach my team &quot;object oriented programming and design&quot; in the 1980s, we soon realized we had been doing it 15 years already - and in Fortran (!!!). It was so obvious it was a good idea that we hadn't even given it a special name. &quot;More abstraction&quot; in CS often seems more like &quot;cargo cult programming using as many different tools as possible.&quot; to me!" CreationDate="2017-06-28T19:55:18.493" UserId="1352" />
  <row Id="2083" PostId="1195" Score="0" Text="I don't know about surgeons, but part of the reason for the small number of pilots is because it's an expensive hobby. Flying a plane (or a helicopter) is arguably easier than driving a car, and it doesn't take much longer to learn - the minimum amount of practical experience to get a basic pilot's licence is about 50 hours. (I work for an aviation company that runs its own flying club, with one of the company's pilots as a flying instructor, so that takes the much of the cost issues out of the picture.)" CreationDate="2017-06-29T02:48:17.517" UserId="1352" />
  <row Id="2085" PostId="1195" Score="0" Text="... Without any subsidy, the minimum cost of getting a PPL is likely to be around £10,000 for aircraft hire and tuition. And if you actually want to use your new licence, you are probably looking at about £200 per hour of flying time. Not many people have that sort of money to spend on a hobby. My employer is happy to subsidize it because having employees with flying experience benefits the business." CreationDate="2017-06-29T03:03:59.377" UserId="1352" />
  <row Id="2056" PostId="1196" Score="0" Text="I don't disagree with the value of pair programming or your take on it, but I'm still unsure as to the question to which this is an appropriate answer. Is it merely how to get every student involved in every class meeting? I also don't see how this is _not_ differentiation..." CreationDate="2017-06-28T17:41:58.810" UserId="76" />
  <row Id="2057" PostId="1196" Score="0" Text="Perhaps I'm interpreting the tag too narrowly, in which case I apologize. I based it on the description on the Tags page only." CreationDate="2017-06-28T17:47:45.970" UserId="1293" />
  <row Id="2059" PostId="1196" Score="0" Text="Fair enough. That tag description is inaccurate. You _are_ asking about differentiation. I will improve the tag." CreationDate="2017-06-28T18:01:59.153" UserId="76" />
  <row Id="2072" PostId="1204" Score="1" Text="Welcome to Computer Science Educators!" CreationDate="2017-06-28T21:20:44.130" UserId="283" />
  <row Id="2076" PostId="1205" Score="2" Text="Shouldn't you never have to debug your students work? If it doesn't compile, it seems like that is non working code, and an incomplete assignment." CreationDate="2017-06-28T23:33:53.650" UserId="58" />
  <row Id="2078" PostId="1205" Score="1" Text="If you take C++ code that runs on Windows, it may not necessarily run on MacOS if it has platform dependent code. Introductory students make these mistakes all the time." CreationDate="2017-06-28T23:39:02.177" UserId="1397" />
  <row Id="2080" PostId="1205" Score="0" Text="I probably wouldn't worry about 5 or 6. I'd leave it with &quot;it doesn't work, come see me if you want to talk.&quot; On labs I don't worry about partial credit. It either works or it doesn't." CreationDate="2017-06-29T01:51:22.890" UserId="30" />
  <row Id="2163" PostId="1205" Score="1" Text="My university program had linux servers available for use in labs and remotely via SSH. All of our code had to compile on a specific server (which  we could not install packages on) and were submitted into a directory on said server. It made the acquiring of code and execution environment very simple to manage." CreationDate="2017-06-29T21:11:28.423" UserId="788" />
  <row Id="2206" PostId="1205" Score="0" Text="just an fyi: https://www.hackerrank.com/ is another online tool which also bridge the gap between academics and industry. Some employers use as first technical round when looking for new hires." CreationDate="2017-06-30T11:59:28.300" UserId="179" />
  <row Id="2252" PostId="1205" Score="4" Text="Generally, it's best not to put a summary of the answers in a question. If you think a summary answer would add value, feel free to answer your own question instead to allow others to vote on it and edit it separately to your question." CreationDate="2017-06-30T17:10:29.337" UserId="2" />
  <row Id="14754" PostId="1205" Score="0" Text="@tusharsoni did you find a solution? I have a similar case" CreationDate="2019-04-22T01:31:01.430" UserId="6827" />
  <row Id="15009" PostId="1205" Score="0" Text="@aksakal Try [AutoGradr.com](https://autogradr.com)" CreationDate="2019-05-14T16:00:41.620" UserId="1397" />
  <row Id="5965" PostId="1207" Score="0" Text="This fits more as a comment than an answer. Please edit and add this is a comment above (it's too long for a standard comment otherwise a mod would handle it)." CreationDate="2017-07-24T19:47:40.557" UserId="76" />
  <row Id="2135" PostId="1208" Score="0" Text="I really like that you are using Online AutoGrader as an option. When we tried similar options, the issue was that students worked in a 'fake' environment i.e. their browser. We wanted to make sure they were learning to use the right tools such as their IDEs, learn debugging in them etc." CreationDate="2017-06-29T17:46:01.227" UserId="1397" />
  <row Id="2137" PostId="1208" Score="0" Text="Indeed. It works better for small-ish lab type assignments, not as much for projects. On some projects though I'll break them into pieces and have them submit each piece online for testing. By the time they turn in their full project I've already got a decent idea of how their code is going to work.  That said, I've found the opposite of the fake environment problem. Being a primitive IDE without any help makes the focus on the problem and helps learn the methods." CreationDate="2017-06-29T17:53:02.087" UserId="30" />
  <row Id="8780" PostId="1208" Score="1" Text="Which Canvas LTI tool do you use for the kids to write and test in Chrome?" CreationDate="2017-10-20T14:06:04.603" UserId="1743" />
  <row Id="8781" PostId="1208" Score="1" Text="It's one I wrote because I couldn't find something that I liked. There's a link in my profile." CreationDate="2017-10-20T14:25:07.827" UserId="30" />
  <row Id="2086" PostId="1212" Score="1" Text="Hi Pojo-guy! Welcome to [cseducators.se]! This is a really great idea! Thank you very much for sharing your experience with this topic." CreationDate="2017-06-29T03:54:22.457" UserId="58" />
  <row Id="2357" PostId="1214" Score="0" Text="A note about the blog. Your definition of open-source is inaccurate. Please read the open-source definition, then note that the set of Open Source software is almost identical to the set of Free Software, then read the Free Software definition, then read the Open Source definition again. ( The name Open Source is misleading,  I just remember Open Source ≈ Free Software. And Free Software is software with the 4 freedoms. Open Source also has these freedoms, but it is not obvious from the name. Not all software with source available is Open Source.)" CreationDate="2017-07-02T09:50:09.617" UserId="204" />
  <row Id="2098" PostId="1217" Score="0" Text="This is a point I had not considered, which is strange when I remember that I myself started off in Logo before graduating to BASIC. Thanks for bringing this up. This is an important point." CreationDate="2017-06-29T12:35:07.110" UserId="27" />
  <row Id="2119" PostId="1217" Score="0" Text="Uh? I don't mention primitive data types anywhere in my question, and I don't see what this has to do with imperative programming. I guess your point is to teach imperative programming without introducing explicit mutable state, only external actions? That's an interesting idea, but it's rather hard to extract from the irrelevant digression into data types. And your answer doesn't actually say anything about whether this makes it easier to learn assignments." CreationDate="2017-06-29T15:51:11.610" UserId="124" />
  <row Id="2130" PostId="1217" Score="0" Text="I have a funny feeling that this is reminiscent of the &quot;New Math&quot; idea that adults used to roll their eyes about when I was a child. I never found out what New Math was, but I knew that it was bad, very bad. I have trouble imagining what I would teach if I started with a complete abstraction. It would be sort of like a drawing class that teaches you that pencils don't exist. If this can succeed, I surely would like to see that, except that I would have to leave the field, because I don't think I am capable of understanding it." CreationDate="2017-06-29T17:37:29.150" UserDisplayName="user737" />
  <row Id="2109" PostId="1218" Score="0" Text="I opened this post expecting to dislike it (why would it be a CS professor's job to prepare students for jobs in theatre or marine biology?) but this is a great, underconsidered question!" CreationDate="2017-06-29T14:50:26.157" UserId="1166" />
  <row Id="2114" PostId="1218" Score="8" Text="You may disagree, but IMO &quot;CS&quot; and &quot;programming&quot; are very different things. CS is (or aspires to be) &quot;science&quot; (or perhaps &quot;mathematics&quot;) On the other hand &quot;programming&quot; is very much a *skilled craft,* and more like (advanced) carpentry than pure science. If some CS majors become strong programmers and can easily find work as such, that is probably more by accident than design. The others might have been better served by a course in computer engineering rather than computer science." CreationDate="2017-06-29T15:33:29.607" UserId="1352" />
  <row Id="2116" PostId="1218" Score="5" Text="@alephzero Do you mean software engineering? Computer engineering programs involve more hardware than CS or SE programs. (My undergraduate degree was in Computer Science &amp; Engineering.) In any case, small schools tend to just have CS, which includes both programming and theory, with various electives. We prepare students for both industry and grad school." CreationDate="2017-06-29T15:44:48.633" UserId="283" />
  <row Id="2122" PostId="1218" Score="0" Text="Don't sell your students short. A person who can think and write will probably be the boss of those with &quot;only&quot; technical skills. A person who can ask the _right_ question is as valuable as the person who can provide an answer. As for specifics, the other answers here, especially @( Piyush Parikh) are quite good. But a good liberal arts college focuses on the big picture, which add value to any organization." CreationDate="2017-06-29T17:06:17.677" UserId="1293" />
  <row Id="2131" PostId="1219" Score="0" Text="Thanks for your answer! Specifying a version for JDK definitely works for Java across platforms but other languages such as C++, C are platform dependent. Students write platform dependent code that works on their computer and doesn't on a different platform." CreationDate="2017-06-29T17:43:19.573" UserId="1397" />
  <row Id="2133" PostId="1219" Score="1" Text="Your grading setup seems organized but still has a lot of manual work. We eventually ended up investing the time to automate all of that. Saved TAs and instructors a bunch of time" CreationDate="2017-06-29T17:44:40.347" UserId="1397" />
  <row Id="17177" PostId="1219" Score="0" Text="Yes, I think your process is good except that the .zip format should be handled by the submission tool." CreationDate="2020-10-17T15:23:50.283" UserId="2192" />
  <row Id="17179" PostId="1219" Score="0" Text="@JosiahYoder I fully agree - at the time of writing the answer, however, the submission tool for our (mandatory) LMS had no option to specify file type. Even now, some students think that changing the file's extension also changes its format (&quot;hey, my .rar file is not accepted, let me rename it to .zip so I can turn it in&quot;)" CreationDate="2020-10-17T16:44:41.843" UserId="913" />
  <row Id="2111" PostId="1220" Score="0" Text="This is a great, well thought out answer. +1!" CreationDate="2017-06-29T15:05:40.067" UserId="919" />
  <row Id="2121" PostId="1220" Score="0" Text="Requirements engineer would be a great opportunity for those students. Depending on the team, they may have the chance to do some light development work as well, furthering their technical skills and possibly leading into a full programming job later in their career." CreationDate="2017-06-29T16:40:59.347" UserId="1013" />
  <row Id="2124" PostId="1220" Score="0" Text="Great ideas! How can I prepare the students for entry level jobs?" CreationDate="2017-06-29T17:20:59.780" UserId="283" />
  <row Id="2132" PostId="1220" Score="0" Text="@EllenSpertus I'd like to help more, and I tried to touch on skills to work on at the ends of my sections, but I guess I'm not sure quite what you're looking for. Things you can teach directly in your classes? Other classes to recommend? Internships to suggest? Connections to try to make? Something else?" CreationDate="2017-06-29T17:44:27.447" UserId="1166" />
  <row Id="2152" PostId="1220" Score="0" Text="I would also add quality assurance (software testing) to this list. It does require a few additional skills depending on which kind of testing they end up doing. Like hands on vs integration testing. But most of the skills acquired as a CS major should make them more appealing as a tester." CreationDate="2017-06-29T18:26:54.933" UserId="1530" />
  <row Id="2155" PostId="1220" Score="0" Text="@jmathew I actually kept that off the list intentionally. If the student doesn't enjoy coding or their coding skills are weak, I don't think they'd enjoy testing code or do a good job looking through code to find out why tests failed." CreationDate="2017-06-29T18:35:46.900" UserId="1166" />
  <row Id="2112" PostId="1221" Score="5" Text="I give you +1 for the first bit, the &quot;* admin&quot; jobs, although I have some suspicion that the students who aren't loving programming may not enjoy writing queries or firewall rulesets either. I don't know, so much, about the others... helpdesk tech doesn't require a degree (CS or otherwise) and I can see CS being helpful for a PM but their _primary_ training should be in management, not tech." CreationDate="2017-06-29T15:24:35.767" UserId="1166" />
  <row Id="2127" PostId="1222" Score="0" Text="If I follow you, your example about &quot;x:=x+1&quot; would mean that instead of thinking that you are creating an instruction which increments the value of x, you are creating a small function or lambda expression. This might be natural for someone who learned Lisp as their first introduction to programming. It might work for someone used to thinking in a way that is beyond algebra, manipulating expressions as calculus does. For someone who only knows arithmetic, it would be just &quot;poof!&quot;, as a former student used to say. If we entirely leave the homeland of programming origins I can't be of much help." CreationDate="2017-06-29T17:32:08.257" UserDisplayName="user737" />
  <row Id="4209" PostId="1222" Score="0" Text="It just occurred to me: what do you call a Lambda function?" CreationDate="2017-07-13T20:09:46.017" UserDisplayName="user737" />
  <row Id="4213" PostId="1222" Score="0" Text="Lambda expression = anonymous function. e.g. (x)-&gt;{System.out.println(&quot;hello &quot; + x);}  This one is an example of something called a Consumer in Java 8. It could be an instance of Consumer&lt;String&gt; or Consumer&lt;Integer&gt; or ... Lots of things need not be specified." CreationDate="2017-07-13T20:22:25.200" UserId="1293" />
  <row Id="6894" PostId="1222" Score="0" Text="The problem with the box idea is that an assignement x=y  doesn't move the object to the other box, but makes a copy.  So the analogy is limited. Except if you're talking about unique_ptr in C++ :-)" CreationDate="2017-08-11T10:54:45.387" UserId="2103" />
  <row Id="2129" PostId="1224" Score="0" Text="Do you have a list of classes your school offers?" CreationDate="2017-06-29T17:35:03.083" UserId="1463" />
  <row Id="2141" PostId="1224" Score="0" Text="None of our current classes would be appropriate. The only CS1 class we have is Java 1. The CS0 class isn't considered rigorous enough for the BS degree, which I agree with." CreationDate="2017-06-29T18:01:23.473" UserId="283" />
  <row Id="2183" PostId="1226" Score="0" Text="You need examples of why you would use one access level over another to engage their intuition." CreationDate="2017-06-30T02:34:13.447" UserId="1567" />
  <row Id="2196" PostId="1226" Score="0" Text="@DominicCerisano yes." CreationDate="2017-06-30T09:04:44.663" UserId="150" />
  <row Id="2597" PostId="1226" Score="0" Text="By that I mean actual programming examples, rather than merely mansplaining the difference between words which your students already know." CreationDate="2017-07-04T23:45:12.833" UserId="1567" />
  <row Id="2175" PostId="1227" Score="0" Text="Depending on who says it, your tenure may vary. &quot;*Is this the time for a colorful metaphor?*&quot; (Spock)" CreationDate="2017-06-30T00:09:12.630" UserDisplayName="user737" />
  <row Id="2138" PostId="1228" Score="0" Text="I'm not sure I see how the last to sentences are related... Could you expand on that?" CreationDate="2017-06-29T17:55:58.983" UserId="150" />
  <row Id="2139" PostId="1228" Score="0" Text="Does that help?" CreationDate="2017-06-29T17:58:52.987" UserId="1463" />
  <row Id="2140" PostId="1228" Score="0" Text="But how is it related to oop?" CreationDate="2017-06-29T17:59:53.840" UserId="150" />
  <row Id="2142" PostId="1228" Score="0" Text="This fits for JS OOP so I don't know if the idea gets across to other languages or not" CreationDate="2017-06-29T18:02:28.277" UserId="1463" />
  <row Id="2145" PostId="1228" Score="0" Text="Oh. ok... Sorry, I'll make my question clearer." CreationDate="2017-06-29T18:08:57.767" UserId="150" />
  <row Id="2153" PostId="1228" Score="1" Text="I'm not sure I understand your example, but find it confusing. visibility is about, well, visibility. Laws are about applicability. A private method can have a global effect on a computation, though it can't be referenced globally." CreationDate="2017-06-29T18:29:35.847" UserId="1293" />
  <row Id="2156" PostId="1228" Score="0" Text="I understand where you are coming from, the analogy seemed to make sense in my head but I guess it didn't come across, would it be smart just to take it down so no one in the future gets tripped up?" CreationDate="2017-06-29T18:38:52.687" UserId="1463" />
  <row Id="2172" PostId="1228" Score="0" Text="Maybe rework it to an example like identifying info (name and birth date), protected info (social security num), and private medical details." CreationDate="2017-06-30T00:03:04.910" UserDisplayName="user737" />
  <row Id="2148" PostId="1229" Score="0" Text="`private` is **not often implemented*? Urrrm, I don't think so..." CreationDate="2017-06-29T18:19:07.137" UserId="150" />
  <row Id="2149" PostId="1229" Score="2" Text="Object level private is not often built in to languages, class level private is common; a distinction. It is a language function, not a program choice. Clarified in the answer, I hope." CreationDate="2017-06-29T18:21:17.603" UserId="1293" />
  <row Id="2150" PostId="1229" Score="0" Text="They are not complete novices. .. but the bookshelf analogy is very nice." CreationDate="2017-06-29T18:24:49.430" UserId="150" />
  <row Id="2171" PostId="1229" Score="0" Text="Yeah, forehead-slap moment when I first thought through the distinction of class-private vs object-private. Obvious, once I saw it. Yes, not usually talked about." CreationDate="2017-06-29T23:56:05.700" UserDisplayName="user737" />
  <row Id="2179" PostId="1229" Score="0" Text="I emphasized class v object private since students often get it wrong. I once built a language that had object-private (for my compiler course) and learned that it has issues/problems/grief. But note that such a feature protects _code_ from other _code_, rather than _code_ from other _programmers_. One object can't, in such a system, step on the state of another, even in the same class. But one programmer programmed both objects by building their class so is able to prevent inconsistent state. Theoretically. Though bugs happen." CreationDate="2017-06-30T00:39:23.730" UserId="1293" />
  <row Id="2191" PostId="1229" Score="0" Text="Just for completeness' sake: in Smalltalk, there are no access levels, however instance variables are always object-private and methods are always public, so the concept of &quot;object-private&quot; is as old as OO itself. In Ruby, instance variables are always object-private, and the `private` access level for methods also means object-private. In Scala, `private` can be accompanied with a scope specifier, and a scope specifier of `this` (i.e. `private[this]`) means object-private. Note that the fact that only an object itself can know about its own representation is a fundamental feature of OO, so …" CreationDate="2017-06-30T07:13:54.080" UserId="945" />
  <row Id="2192" PostId="1229" Score="0" Text="… if you don't have object-private, you cannot to OO! That's why, e.g. in Java, only instances of interfaces are objects (because interfaces don't specify representation, only behavior, and thus representation is necessarily hidden), instances of classes aren't (because you *cannot* make representation object-private with classes)." CreationDate="2017-06-30T07:15:24.690" UserId="945" />
  <row Id="2202" PostId="1229" Score="0" Text="Yes, @JörgWMittag, thanks and (blush). I was too focused on Java. I've spent some time this morning wondering why I didn't pick up on the Ruby distinction. Looking back over my old code structure, I realize I just don't write code in which the &quot;need to know&quot; is important. One object directly modifying another is bad practice whether or not the language permits it. If memory serves (not always) my first OOP language was (Apple) Object Pascal in which things were public, so you had to develop a safe style. Thanks for putting me straight. I'm not sure I entirely understand your second note." CreationDate="2017-06-30T11:32:25.770" UserId="1293" />
  <row Id="2207" PostId="1229" Score="0" Text="The significance of what is sometimes called *Autognosis* is well explained in [*On Understanding Data Abstraction, Revisited*](http://CS.UTexas.Edu/~wcook/Drafts/2009/essay.pdf) by [William R. Cook](http://WCook.BlogSpot.Com/). The basic idea is that objects are hidden behind a behavioral interface and only an object itself knows about its own representation. That's different from Abstract Data Types, where representation is only hidden from instances of different *types* but accessible to other instances of the same type. In Java classes, there is no way to express this constraint …" CreationDate="2017-06-30T12:00:29.137" UserId="945" />
  <row Id="2208" PostId="1229" Score="0" Text="… (even `private` is still accessible to other objects of the same class), but interfaces cannot specify representation (no fields, no private methods), so when you only use interfaces as types (no primitives and no classes), then you can guarantee object-oriented encapsulation." CreationDate="2017-06-30T12:02:15.270" UserId="945" />
  <row Id="2218" PostId="1229" Score="0" Text="That point is important, but difficult to capture on this site, I fear, since it disfavors discussions like this one. Every type named in a declaration &quot;should&quot; be an interface type, not an implementation type. So, use List foo, not ArrayList foo. A further implication that inheritance &quot;should&quot; not extend the public (informal) interface of a class. If you need to add a new public method in a subclass, extend a formal interface instead and implement that.  Sadly most &quot;simple&quot; examples of inheritance given to novices break this rule completely." CreationDate="2017-06-30T12:27:58.777" UserId="1293" />
  <row Id="7218" PostId="1231" Score="0" Text="Python is widely considered as a best first language. Also, XKCD has much more relevant cartoons, with explanations, like https://www.explainxkcd.com/wiki/index.php/1425:_Tasks and https://www.explainxkcd.com/wiki/index.php/936:_Password_Strength" CreationDate="2017-08-23T16:37:20.103" UserId="1480" />
  <row Id="2475" PostId="1233" Score="0" Text="The existence of this website might change the answer. As a non-computer scientist who nevertheless teaches CS, I think the only reason I would join SIGCSE would be for the community to bounce teaching ideas off (whereas, I am a member of the math versions because I feel like I should support them, as a professional mathematician). Now, I have that community." CreationDate="2017-07-03T14:06:24.453" UserId="294" />
  <row Id="9620" PostId="1240" Score="0" Text="Good, but that's not really an *analogy.*" CreationDate="2018-01-13T07:17:27.673" UserId="1103" />
  <row Id="15185" PostId="1240" Score="0" Text="is there an end state?" CreationDate="2019-06-10T21:26:23.467" UserId="48" />
  <row Id="16900" PostId="1240" Score="0" Text="A Sierpinski Carpet certainly looks cool and helps explain the concept, but it's unlikely that students are going to be able to code it (or understand code you give them) as their very first recursion project. There are too many recursive calls and computing the locations is likely non-intuitive for a beginner. It might be suitable as part of a graphics-focused CS basics course in Scratch or P5, but even here, it's probably a third or fourth project rather than the first. I remember struggling with a simplified version of this project quite a bit in my second CS course." CreationDate="2020-08-26T17:47:42.400" UserId="9426" />
  <row Id="18246" PostId="1240" Score="1" Text="@pluke: Mathematically, there is no end state. However, you can introduce one computationally, whereby your image generating algorithm stops once the squares are smaller than a pixel and therefore make no visual difference anymore anyway." CreationDate="2021-09-03T10:36:45.463" UserId="2164" />
  <row Id="2193" PostId="1244" Score="0" Text="That's a good analogy for how `private` works in Ruby, for example, but in Java, `private`s *are* visible to other objects." CreationDate="2017-06-30T07:17:22.573" UserId="945" />
  <row Id="2200" PostId="1244" Score="0" Text="@JörgWMittag urm. not they're not. maybe with Getters and Setters, but not directly." CreationDate="2017-06-30T11:21:02.280" UserId="150" />
  <row Id="2201" PostId="1244" Score="0" Text="That's backwards of how I learned and understand it.  Private in Java is not accessible for outside classes." CreationDate="2017-06-30T11:22:16.640" UserId="30" />
  <row Id="2204" PostId="1244" Score="0" Text="@ItamarG3: Here's a demo: http://ideone.com/nQtdh6#sthash.5nNWwgZY.dpuf" CreationDate="2017-06-30T11:54:02.630" UserId="945" />
  <row Id="2205" PostId="1244" Score="0" Text="@RyanNutt: Here's a demo: http://ideone.com/nQtdh6#sthash.5nNWwgZY.dpuf" CreationDate="2017-06-30T11:54:43.290" UserId="945" />
  <row Id="2212" PostId="1244" Score="0" Text="No wonder students find it tough. We're confusing each other :)  My understanding is that private is private to the class, not the object. So your linked code only works because it's a Demo object referencing another Demo object. Look at http://bit.ly/2txr3Kd . The Other class would not work because they're different classes. Fortunately it's rare for early coders to have an object deal with another instance of the same class, so it doesn't come up often. Only place I usually see this oddity is when they're writing compareTo methods." CreationDate="2017-06-30T12:14:14.033" UserId="30" />
  <row Id="2365" PostId="1244" Score="0" Text="@RyanNutt: I said &quot;in Java, `private`s *are* visible to other objects&quot;, and my example demonstrates that. I never said anything about classes. The fact that objects cannot access the private representation of *any* other objects is one of the fundamental differences between objects and abstract data types (where instances of the same ADT *can* inspect each other's private representation). In your example, both objects are instances of the type `Human`, so they *should* be able to read each other's minds, according to the rules of ADTs (e.g. like in Java), but not according to the rules of …" CreationDate="2017-07-02T13:20:16.690" UserId="945" />
  <row Id="2366" PostId="1244" Score="0" Text="… of objects (e.g. like in Ruby). So, your example is a good example of object-oriented encapsulation as employed in Ruby, but it is not a good example of ADT-oriented encapsulation as employed in Java, since in your example, the objects cannot inspect each other's representation even though they would be able to in Java." CreationDate="2017-07-02T13:23:21.087" UserId="945" />
  <row Id="2168" PostId="1246" Score="4" Text="I like this analogy very much.  Short, to the point, and mimics the relationships well.  Welcome to [cseducators.se].  I hope we hear more from you in the future!" CreationDate="2017-06-29T22:00:52.937" UserId="27" />
  <row Id="2260" PostId="1246" Score="0" Text="I cannot express enough how useful this is. Thanks. (I will probably accept this soon)" CreationDate="2017-07-01T08:52:26.460" UserId="150" />
  <row Id="2271" PostId="1246" Score="0" Text="Ultimately it's all about security.  All the examples above has to do with security, and the consequences of such can use the same framework.  If your VISA card is made public, I don't think it takes a lot of imagination to know how bad that really is, so likewise, something like a &quot;bank_balance&quot; variable must definitely be extremely limited.  You cannot just have any random objects modify it outside of specific withdraw() and deposit() methods.  Likewise, a bank teller and an ATM are under the &quot;authorized_entity&quot; environment, and will probably have similar checks for withdraw() and deposit()." CreationDate="2017-07-01T15:45:22.280" UserId="1285" />
  <row Id="2602" PostId="1246" Score="0" Text="This answer explains (mansplains) *what* the difference is between words that students already know. It does not intuit *why* a particular OOP access level would be used over another. For that, actual programming examples would be required. Would that programming could be taught without programming, and instead by ESL. A popular but wishful fantasy." CreationDate="2017-07-05T00:11:42.757" UserId="1567" />
  <row Id="5738" PostId="1246" Score="0" Text="I like it. It shows how it Java (and all C++ based languages) model access for you, your children, and the public. It also shows how they think you hate your wife and friends. (Ok I forgot `friends`, you can give your friends access to your play-station, by using `interface`s and `friend`s). Eiffel solves this by allowing you simply to declare with classes can access which features of the class" CreationDate="2017-07-22T08:10:42.787" UserId="204" />
  <row Id="2174" PostId="1247" Score="1" Text="Encapsulation is probably the most universal feature of OOPS, and the most necessary, so it is a great place to start." CreationDate="2017-06-30T00:06:02.903" UserDisplayName="user737" />
  <row Id="2169" PostId="1248" Score="1" Text="This answer is a little shorter than good answers typically are, but I must say it contains surprisingly high-quality content for its length.  Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-06-29T22:02:37.600" UserId="27" />
  <row Id="2177" PostId="1248" Score="0" Text="Thank you. Could you elaborate on the information available on the list?" CreationDate="2017-06-30T00:30:04.533" UserId="283" />
  <row Id="2203" PostId="1248" Score="0" Text="The SIGCSE mailing list is just that. A mailing list to all members in which members can pose issues and others comment. It is similar to this site, but for issues that come and go, rather than for archiving solutions. Sometimes it is quite noisy, other times quiet. It values &quot;discussion&quot; where this site does not. Since you have joined @EllenSpertus, you will have plenty of examples soon." CreationDate="2017-06-30T11:41:09.060" UserId="1293" />
  <row Id="2603" PostId="1249" Score="1" Text="Excellent - there is nothing like a few code snippets to explain a coding concept. Thanks for not giving an ESL lesson on the difference between the words *public, private, etc.*" CreationDate="2017-07-05T00:12:42.963" UserId="1567" />
  <row Id="2167" PostId="1250" Score="0" Text="Nice ideas here.  Welcome to [cseducators.se].  I hope we hear more from you in the future!" CreationDate="2017-06-29T21:59:32.123" UserId="27" />
  <row Id="21807" PostId="1252" Score="0" Text="I've used CodeCheck myself for some years now, and it was particularly useful during the covid-19 pandemic.  A particular feature is worth mentioning: it does not need users (students or instructors) to register!  Everything works with randomly generated URLs.  Nevertheless, you can also integrate it with an LMS through LTI.  I've used it in Moodle and OpenEdX." CreationDate="2024-03-15T17:42:01.167" UserId="5348" />
  <row Id="2181" PostId="1254" Score="2" Text="Hi Chris!  This is something of a stub answer.  Would you mind editing it?  Don't worry, the norms of answering on SE sites are not always obvious, and you're definitely not the first one to have a problem like this :) What can you tell us about Web-CAT?  What are its strong points and its weaker points?" CreationDate="2017-06-30T01:31:21.763" UserId="27" />
  <row Id="2225" PostId="1254" Score="0" Text="Thanks for the note.  I'll get the hang of this.  :)  1) I remember having difficulty determining exactly where my unit tests were supposed to be uploaded; there's a user folder and an assignment folder, and one something's in the wrong place it's hard to just move it.  2) In three years, I still haven't found how to get it to accept &quot;Type arrayname[]&quot; as opposed to &quot;Type[] arrayname&quot;; students hate losing those two points.  3) Students sometimes have to click around a little to find report details, and the UI doesn't always make clear what's clickable." CreationDate="2017-06-30T12:54:15.450" UserId="1564" />
  <row Id="2226" PostId="1254" Score="0" Text="Oh, I meant in the answer itself :) Comments are considered temporary content, even if in practice they rarely get deleted." CreationDate="2017-06-30T12:55:40.613" UserId="27" />
  <row Id="2227" PostId="1254" Score="0" Text="I only just now realized I can edit my answer!  Thanks!" CreationDate="2017-06-30T13:05:10.350" UserId="1564" />
  <row Id="2180" PostId="1255" Score="0" Text="Remember to tell prospective students that programming can be very frustrating. It takes a lot of patience and persistence: &quot;1% inspiration, 99% perspiration&quot;, as Thomas Edison said." CreationDate="2017-06-30T00:43:43.920" UserDisplayName="user737" />
  <row Id="2187" PostId="1255" Score="1" Text="It's like you were listening to the original conversation I had at the party! I was an EMT too, and made the exact same analogy! Well, maybe not _exact_ same, but incredibly similar. EMTs follow a pre-written set of protocols, almost &quot;cookbook&quot;-style, whereas doctors are expected to do more thinking. Analysis, synthesis, and creation. In summary, it's the clinician/technician difference. Your answer makes me really happy. I don't know if the _average_ person knows enough about medical infrastructure to really get it though. What responses have you gotten when you've used it?" CreationDate="2017-06-30T04:04:53.263" UserId="1166" />
  <row Id="2224" PostId="1255" Score="0" Text="Well, I am still a volunteer firefighter; I just let my cert lapse when I had a kid and didn't have time to refresh.  I'm in an engine company, so it has never been a big deal.  Also, I teach at a community college, where we probably have a higher concentration of FFs and EMTs than at other schools, and the firefighters always seem to find me, so I probably tend to have this conversation with people who understand EMS at a higher rate than others would." CreationDate="2017-06-30T12:47:38.127" UserId="1564" />
  <row Id="2182" PostId="1256" Score="0" Text="Hi, Paula.  Thanks for sharing your experiences, and welcome to [cseducators.se]! I hope we hear more from you in the future :)" CreationDate="2017-06-30T01:32:55.420" UserId="27" />
  <row Id="2199" PostId="1260" Score="3" Text="You may want first to fix what kind of problems do you want them to solve ? Raw Algorithm ? Software design ? Low level problem ? (Performance problems, IO Management, Cache, Memory, Floating precision limits, ...). To be honest, unless you're with very beginners, I disapprouve the fact to have your students write the first solution to the problem they think about, because it often miss edges cases, low level related problems, code written badly and not maintenable,... everything we hate to see as professionals even if &quot;it works&quot;" CreationDate="2017-06-30T11:04:23.803" UserId="1375" />
  <row Id="2237" PostId="1260" Score="0" Text="@Walfrat: The type of problems used in competitive programming are mostly about algorithm (pick a solution with the time/space complexity that can pass the size of the test case), and some knowledge of the library offered by the language is sometimes needed (time complexity of the built-in data structure). The problems are also usually designed with edge cases or two, so it's a nice way to train them to think through them before coding. On the other hand, competitive programming places less emphasis on writing maintainable/portable code - which should be taught in a different class." CreationDate="2017-06-30T14:48:34.587" UserId="1584" />
  <row Id="2239" PostId="1260" Score="0" Text="@nhahtdh Then our author should add that : Training students to resolve problems in a Time Frame with the best time/space complexity compromise. Note that sometimes, just translate a given algorithm to C++ solution is not so obvious (dijikstra, handle nodes already visited for instances)" CreationDate="2017-06-30T15:01:11.437" UserId="1375" />
  <row Id="2269" PostId="1260" Score="0" Text="Please feel free to continue your discussion of competitive programming skills [in chat](http://chat.stackexchange.com/rooms/61419/discussion-on-question-by-yashas-how-to-teach-competitive-programming)." CreationDate="2017-07-01T14:55:37.937" UserId="58" />
  <row Id="2233" PostId="1262" Score="0" Text="A more useful distinction on the age ranges (please correct me) might be for this question, they're at or maybe in the first year of elective subjects. So here you're exposed to a class taking maybe 15 different subjects, the older group will be more narrowly focused towards STEM, or about to make that transition. I think the questions would benefit from elaboration of each specific target." CreationDate="2017-06-30T14:02:42.147" UserId="41" />
  <row Id="2254" PostId="1262" Score="0" Text="The activities below are *actually* being used in middle schools today? I might as well have been educated in a one room schoolhouse. I would think of these things being part of a Master's degree." CreationDate="2017-07-01T00:54:48.453" UserDisplayName="user737" />
  <row Id="2282" PostId="1262" Score="0" Text="@nocomprende, The NCBI activity is in a CS Principles curriculum implemented in ~1000 US high schools." CreationDate="2017-07-01T17:10:03.553" UserId="765" />
  <row Id="2342" PostId="1262" Score="0" Text="So, is this curriculum successful?" CreationDate="2017-07-02T03:19:47.233" UserDisplayName="user737" />
  <row Id="4353" PostId="1262" Score="0" Text="I think this question, as of the current edit (2017-07-15 15:44Z) is still too broad. In essence it asks for a lesson on DNA/RNA, and a lesson on a computer science concept that could be useful with that type of data, _and_ a lesson that creates a integrates the two to demonstrate how computers can be used in other fields. How about narrowing it to a single lesson based around a specific set of life science needs and a targeted CS concept. CS educators may, or may not, know the material from the other discipline, so it needs to be provided prior to the lesson." CreationDate="2017-07-16T08:42:03.693" UserId="104" />
  <row Id="4355" PostId="1262" Score="0" Text="You mention the NCBI activity being implemented in ~1000 US high schools. Is that public or private? Are the specialized schools (sometimes called &quot;magnet&quot; schools). Counting only the estimated 22,000 public high schools in the US, that's a mere 4½%. What are the statistics on the success of that activity, and the programs it has been implemented in?" CreationDate="2017-07-16T08:52:40.837" UserId="104" />
  <row Id="2222" PostId="1263" Score="0" Text="It is some and some. We want ALL the right students to sign up, and None of the wrong ones. Unfortunately, we are not omniscient, so we have to err towards overselling." CreationDate="2017-06-30T12:34:33.460" UserDisplayName="user737" />
  <row Id="2235" PostId="1263" Score="0" Text="That's fair. Extending my logic above to put kindergarteners into AP English Literature or Calculus-in-3D would clearly be ridiculous. But I have to think that introductory CS isn't beyond most high schoolers. Do I have such a rose-colored memory?" CreationDate="2017-06-30T14:21:09.650" UserId="1166" />
  <row Id="2246" PostId="1263" Score="0" Text="Agree. Students cannot succeed if they don't try. You said: &quot;*the article points out that even when supposedly unprepared students are given access to advanced courses, they have overall better outcomes.*&quot; So, I think that this means we must accept that to get more success, we have to tolerate more 'failure' as well. But as I understand the current attitude in Education, all failure is *intolerable*. Good luck with that!" CreationDate="2017-06-30T15:19:15.437" UserDisplayName="user737" />
  <row Id="14877" PostId="1263" Score="0" Text="&quot;In many high schools, computer science is still seen as an advanced elective&quot; Maybe in America. Down here in Australia, it's a mandatory course until Grade 8." CreationDate="2019-04-30T04:04:30.917" UserId="7971" />
  <row Id="4354" PostId="1264" Score="0" Text="Possibly a good AP bio lesson. It uses a computer as a tool, and you _explanation_ during the run show how the same tool (alignment) can be used in other areas as well. What is the __computer science_ concept that is supposed to be taught by this example?" CreationDate="2017-07-16T08:49:09.180" UserId="104" />
  <row Id="2195" PostId="1265" Score="0" Text="I was hoping answers would form a collection of activities that teachers could draw on. Perhaps clarify the answer (or split into multiple answers) to describe the key activities of the unit? Is the jist of the GUTS life science activities to have students adjust parameters of a predator-prey model? Do students explore &quot;increases and decreases of specific traits in populations over time&quot; to address NGSS middle school Life Science 4-6? https://www.nextgenscience.org/pe/ms-ls4-6-biological-evolution-unity-and-diversity" CreationDate="2017-06-30T07:56:51.563" UserId="765" />
  <row Id="2236" PostId="1265" Score="0" Text="Yes, the Project GUTS life sciences module centers around building a predator-prey population dynamics model, then designing and running their own experiment. It doesn't address that NGSS standard (population traits) specifically, but it could be incorporated as an extension of that module. Example: have multiple types of prey with different susceptibilities to predation, and see which wins out over time." CreationDate="2017-06-30T14:32:25.727" UserId="1583" />
  <row Id="2244" PostId="1265" Score="0" Text="I actually did a summer camp for this - it was quite fun. Let me dig up the links to the projects I created..." CreationDate="2017-06-30T15:12:03.780" UserId="919" />
  <row Id="2245" PostId="1265" Score="0" Text="We did three big projects: an [epidemic simulator](http://www.slnova.org/heatheryoung/projects/75279/), an [ecosystem simulator](http://www.slnova.org/heatheryoung/projects/76761/), and a [carbon emissions simulator](http://www.slnova.org/heatheryoung/projects/77179/). I must admit, I still work on them occasionally; I enjoy StarLogo Nova." CreationDate="2017-06-30T15:16:27.267" UserId="919" />
  <row Id="2532" PostId="1265" Score="0" Text="Moderators merged my MS and HS versions of this question and wanted the merged question to be edited from &quot;life science&quot; to something more specific. They proposed &quot;DNA&quot; and I went with basic molecular biology taught ages ~11-15. Maybe this answer now belongs to another question specific to ecology or epidemiology or simulation and modeling in the life science." CreationDate="2017-07-03T19:23:16.060" UserId="765" />
  <row Id="2217" PostId="1267" Score="0" Text="I don't entirely understand the problem. Do we have some way of determining what D.W. will earn? I'm any case, welcome to [cseducators.se]!" CreationDate="2017-06-30T12:25:56.390" UserId="27" />
  <row Id="2304" PostId="1267" Score="0" Text="It's just the payout minus the commission: so 900 for the first day." CreationDate="2017-07-01T21:23:35.510" UserId="1571" />
  <row Id="2305" PostId="1267" Score="0" Text="So, on the second day, he would earn \$1,800, but have to pay \$200?" CreationDate="2017-07-01T21:25:11.270" UserId="27" />
  <row Id="2422" PostId="1267" Score="0" Text="Exactly. Have them turn it into a pair of formulas for each day with subscripted variables.&#xA;&#xA;Then we start writing code, and see that we'd end up with 60-odd variables. Introduce lists as a way of having variables with subscripts. &#xA;&#xA;Then build up lists manually a few times, and introduce them to for loops. &#xA;&#xA;Then at the end you can use an if, outside the loop, to check the final values. &#xA;&#xA;Lists, for loops, and if statements. For my non-majors class it takes three 70-minute classes to get through, but it presents a coherent (if fanciful) problem to motivate them." CreationDate="2017-07-02T22:06:45.897" UserId="1571" />
  <row Id="2197" PostId="1270" Score="3" Text="I'm not a big fan of Project Euler. A lot of the problems are maths problems, not algorithm problems, they both require and provide little insight into computer science. (Unless the insight you want to convey is that domain knowledge often beats programming knowledge.)" CreationDate="2017-06-30T10:17:10.793" UserId="945" />
  <row Id="2198" PostId="1270" Score="0" Text="@JörgWMittag The idea is giving them problem solving skills." CreationDate="2017-06-30T10:24:47.577" UserId="150" />
  <row Id="2215" PostId="1270" Score="1" Text="@JörgWMittag I very much disagree with you about Project Euler. I once had (but now can't find) a list of p.e. problems broken down by CS principle. They really are fairly brilliant problems. However, if you want something less math *focused*, you may enjoy [Programming Praxis](https://programmingpraxis.com)." CreationDate="2017-06-30T12:21:01.737" UserId="27" />
  <row Id="2231" PostId="1272" Score="2" Text="Adding an abridged table-of-contents of Skiena's book to your answer would make it better. As it is, only those that already know the book or follow the link to browse its contents will understand what it is all about: providing a basic set of tools and discussing the main problem types found in ICPC-lilke programming contests" CreationDate="2017-06-30T13:47:40.760" UserId="913" />
  <row Id="2238" PostId="1272" Score="0" Text="Thank you!  I'm still learning what makes answers valuable." CreationDate="2017-06-30T14:56:32.317" UserId="1564" />
  <row Id="2240" PostId="1272" Score="0" Text="Please also summarize the content of those chapters. The goal is for this answer to be useful even without the link." CreationDate="2017-06-30T15:01:44.810" UserId="58" />
  <row Id="2228" PostId="1273" Score="1" Text="Oh. Wow. This is incredible. Welcome to [cseducators.se], I hope we'll be seeing more from you." CreationDate="2017-06-30T13:20:43.800" UserId="150" />
  <row Id="2250" PostId="1273" Score="0" Text="One of the most important things I've found for teaching this concept is the idea that you could *want* to restrict access to data or functions.  When we learn coding, &quot;public&quot; is kinda the default way most of us think.  You have to realize there's value in constraining your options before you can understand why you want private.  I think this series of examples using a wallet is an excellent argument for why sometimes you want constraints." CreationDate="2017-06-30T16:42:34.430" UserId="812" />
  <row Id="2280" PostId="1277" Score="0" Text="Those three are very different to each other. Robocode is great for AI-like courses, Code Jam is much more algorithms oriented, and as for KoTH - I assume that whoever writes a tight insert-loop soonest wins?" CreationDate="2017-07-01T17:07:36.403" UserId="913" />
  <row Id="2234" PostId="1279" Score="1" Text="Nice, thoughtful answer. Welcome to [cseducators.se]. I hope we year more from you!" CreationDate="2017-06-30T14:20:11.017" UserId="27" />
  <row Id="2272" PostId="1279" Score="0" Text="Yes, sadly, _tenure is all_ for young faculty. Some things that are very interesting, but not highly valued by your colleagues, should probably be avoided (or minimized) until you grasp the Holy Grail. I've had to push students away from one of my main interests for this reason. Learn to play Goalie before you try to become the Star Forward." CreationDate="2017-07-01T16:00:01.517" UserId="1293" />
  <row Id="2249" PostId="1281" Score="0" Text="I appreciate the perspective of an actual HS teacher here. Thanks for the thorough answer, and welcome to [cseducators.se]!" CreationDate="2017-06-30T16:28:30.437" UserId="27" />
  <row Id="2251" PostId="1282" Score="0" Text="Welcome to [cseducators.se]! What a great question. I hope we'll see more posts from you." CreationDate="2017-06-30T17:01:21.693" UserId="150" />
  <row Id="17178" PostId="1286" Score="0" Text="Even if you do not use unit tests, having specified method names can make it easier to focus on part of the assignment. The downside is that this restricts the design so students get less practice doing design work." CreationDate="2020-10-17T15:25:55.307" UserId="2192" />
  <row Id="2416" PostId="1289" Score="0" Text="Thank you for the explanation. When I make a game in Java, I find myself unwinding the event mechanism, so all my handlers end up setting boolean variables. Then the code looks like this: `mousePressed { mouseDown = true;} mouseReleased {mouseDown = false;}` and in the game loop I have an if statement that does something based on the variable. Am I doing it wrong? This is for a simulation-style game like a jumping game." CreationDate="2017-07-02T20:08:22.557" UserId="587" />
  <row Id="2430" PostId="1289" Score="0" Text="As with so much in computer programming,  it depends.  A lot of simulations depend on a &quot;heartbeat&quot;. It is perfectly fine for the event to set the stage for the next heartbeat.  Another pattern you may see is when an event submits another event back to the queue - the mouse release event may get rebroadcast as a menu event,  such as File Save." CreationDate="2017-07-03T01:56:11.530" UserId="1537" />
  <row Id="2259" PostId="1290" Score="1" Text="My focus where would be on a required courses, but it would be intersting to see what should be done in each case" CreationDate="2017-07-01T08:49:43.393" UserId="118" />
  <row Id="2261" PostId="1290" Score="0" Text="I've be told a case of a college student whose parents forced her to study CS (they thouh she would become rich this way), she pretty much hated the course and had a very low performance, but no teacher interviwed in this situaton" CreationDate="2017-07-01T09:06:13.273" UserId="118" />
  <row Id="2262" PostId="1290" Score="2" Text="@Safirah I would turn this into only one of the two questions, and also ask the second question.  (required classes vs unrequired classes). This will give the site the value of two focused questions, and will also help you to get better answers." CreationDate="2017-07-01T10:57:04.593" UserId="27" />
  <row Id="2309" PostId="1290" Score="0" Text="[This](https://blog.codinghorror.com/separating-programming-sheep-from-non-programming-goats/) and [this](http://peripateticaxiom.blogspot.be/2007/02/fizzbuzz.html) might be of interest." CreationDate="2017-07-01T22:14:50.443" UserId="1613" />
  <row Id="2347" PostId="1290" Score="0" Text="Is CS an elective course in Portugal, or is it required? If it's elective, why is this kid in the class?" CreationDate="2017-07-02T04:31:02.787" UserId="961" />
  <row Id="2361" PostId="1290" Score="0" Text="@BobJarvis, I'm talking about a highschool course, not just a subject, this is, the student (or his parents) enrolled him in it." CreationDate="2017-07-02T11:55:27.530" UserId="118" />
  <row Id="2263" PostId="1291" Score="2" Text="Hi, Dave. Thanks for contributing and welcome to [cseducators.se]! Right now, this is a bit of an *answer stub*. Would you mind editing your answer here and including just a little bit more information about those two links?" CreationDate="2017-07-01T11:37:43.800" UserId="27" />
  <row Id="2264" PostId="1291" Score="2" Text="Link answers are very useful, but they can be far more useful if you include  *in your answer* what, precisely, those links have which answers the question." CreationDate="2017-07-01T11:45:41.517" UserId="150" />
  <row Id="13063" PostId="1291" Score="0" Text="It's also nice to have a description of what is at the link in case a 404 pops up in the future. That way, even if the link doesn't work, other users can look for something similar based on the description." CreationDate="2018-07-06T12:17:40.073" UserId="5476" />
  <row Id="2310" PostId="1292" Score="1" Text="At my university, a lot of unrelated majors had &quot;CS 1&quot; as a required class (instead of the more useful CS for Sciences). So the class was a huge lecture with about 75% CS majors and 25% other but was taught strictly as a foundation for the CS students. There were a lot of people who were great at their actual field, but spent all their time studying to get a C in CS, in a class that really isn't all that useful as a standalone." CreationDate="2017-07-01T22:15:40.483" UserId="1407" />
  <row Id="7342" PostId="1294" Score="1" Text="I think, this is probably the case. I had to deal with a high performer but uncooperative individual a while ago. The problem is usually outside the campus. If the student is agreeable (and in my case he was) I was able to discuss and figure out what happened and provide him some much needed life advice. Eventually he got better but there is only so much we can do." CreationDate="2017-08-27T07:02:03.577" UserId="2605" />
  <row Id="7394" PostId="1294" Score="1" Text="Yes, @Jay, this is exactly right. Keep communication open at your end. You might not be able to do anything, but you can remain available, unjudging, and if this person ever needs someone they know they can talk with you. Life is complex,and we need to let go of preconceptions of &quot;how everything should be.&quot; It is not. Those struggling have to use their own wits to deal with it not being that way, and we can help, or at least not add to the burdens." CreationDate="2017-08-28T12:17:25.857" UserDisplayName="user737" />
  <row Id="2840" PostId="1295" Score="4" Text="These days if you want to do anything interesting in computing, you must work with others.  Even if you could do it on your own, your employer may dislike having a bus factor of one." CreationDate="2017-07-08T03:56:02.123" UserId="1213" />
  <row Id="2852" PostId="1295" Score="0" Text="To explain: &quot;Bus Factor&quot; is the minimum number of team members that, if they left the project (went over the cliff in a bus crash) the project becomes unviable. Pair Programming and similar practices are partly intended to increase this number as knowledge is spread through the team. Sometimes called &quot;Bus Number&quot;. Thanks @ThorbjørnRavnAndersen, an important point. Only the extremely rare &quot;prima donna&quot; is allowed to work alone and then only when there are no alternatives. If &quot;Thug The Troll&quot; has a unique skill then you may need to let him work alone. But you must _really_ need that skill." CreationDate="2017-07-08T12:14:25.833" UserId="1293" />
  <row Id="3858" PostId="1295" Score="0" Text="I think more than documentation is necessary. For all of the  usual reasons/caveats about docs. Experienced folks &gt; docs any day. I've been the bus number one person a few times and the fact that I drove a VW Bug with a gas leak terrified by boss." CreationDate="2017-07-08T15:07:32.583" UserId="1293" />
  <row Id="2299" PostId="1296" Score="1" Text="This reminds me of my college days, learning PASCAL. Or my years of programming in BASIC. :P" CreationDate="2017-07-01T19:34:07.383" UserId="27" />
  <row Id="2437" PostId="1296" Score="3" Text="Don't teach them the language, framework, or shiny new gizmo. Also don't teach them any development model or workflow process. Rather, teach them to explore and learn the language, framework, or other tool. If they can learn how to learn, their skills will never be _out of date_ even when AI and quantum computing blend to produce SkyNet. The last time I learned a new language it took me 5 days to be &quot;job ready&quot; including passing the hiring exam with the best code they'd seen. Teach skills, not facts." CreationDate="2017-07-03T04:25:15.740" UserId="104" />
  <row Id="2289" PostId="1297" Score="2" Text="I've always been surprised that students don't call me a goofy zealot on course evaluations." CreationDate="2017-07-01T18:10:29.563" UserId="283" />
  <row Id="2300" PostId="1297" Score="0" Text="`What else would you call it when putting together words and symbols enables you to control powerful entities`  [&quot;quaternary sector&quot;](https://en.wikipedia.org/wiki/Quaternary_sector_of_the_economy)? ;)" CreationDate="2017-07-01T19:43:07.747" UserId="757" />
  <row Id="2279" PostId="1299" Score="3" Text="Presumably you're not interested in discussing the the interpretation of functions in functional programming, where functions generally **don't** have side effects and act like functions in mathematics? Or would this be something you'd be interested in discussing in an answer?" CreationDate="2017-07-01T17:05:11.393" UserId="2" />
  <row Id="2281" PostId="1299" Score="1" Text="@Aurora0001, I think the example I give demonstrates a difference between math and CS functions even in a functional paradigm. My question is about teaching programming to novices, some of whom do learn CS in a primarily functional paradigm, especially CS newcomers in an undergraduate Matlab-based course." CreationDate="2017-07-01T17:08:24.713" UserId="765" />
  <row Id="2288" PostId="1299" Score="0" Text="The floor function f has f(3.1)=f(3.2)=3, but each argument has one result. In contrast, the random number generator rand(3.1) is sometimes 0.1 and other time 0.2. It is not a mathematical function. There are other differences. Math functions specify a mapping without an inherent procedure, so you cannot talk about the time complexity of a math function. A CS function is a procedure to be executed without necessarily producing a mapping because some arguments may result in an infinite loop." CreationDate="2017-07-01T18:02:58.270" UserId="765" />
  <row Id="2290" PostId="1299" Score="0" Text="my apologies, I read `round` instead of `rand`." CreationDate="2017-07-01T18:22:51.190" UserId="150" />
  <row Id="2397" PostId="1299" Score="2" Text="&quot;but it is not a mathematical function because it has multiple possible return values for a given argument.&quot; Has it? if you take the whole state of the computer and recreate it exactly the same way, it would again give the exact same result. The state of the computer is an implicit input to this function, one that is often forgotten." CreationDate="2017-07-02T16:52:53.903" UserId="1086" />
  <row Id="4447" PostId="1299" Score="0" Text="I never really even think about the difference.  I look at it like this:  f(x) = 2x could be called a mathematical function.  But the function as it exists purely has nothing to do with what I just wrote.  A computer program like (lambda (x) (* 2 x)) actually embodies something of that purity.  But (lambda (x) (* 2 x)) is no more a function than &quot;f(x) = 2x&quot; is.  They are both notations, abstractions with shortcomings as well as applications to the genuine mathematical concept." CreationDate="2017-07-17T20:17:54.243" UserId="1089" />
  <row Id="12516" PostId="1299" Score="0" Text="@Polygnome Adding the state of the computer adds another level of indirection. Adding a level of indirection solves all engineering problems, but it has a huge cognitive impact." CreationDate="2018-05-17T12:28:59.233" UserId="124" />
  <row Id="12539" PostId="1299" Score="1" Text="@Gilles This indirection is there whether you like it or not. Functional languages like Haskell only formalize it. And in Haskell there is no rand function like in imperative languages. If you want a random number, you really need to feed the world state (or PRNG state) into the function, and you get back the new state. Formal semantics are just the same as of mathematical function." CreationDate="2018-05-17T23:18:41.903" UserId="4884" />
  <row Id="12729" PostId="1299" Score="2" Text="Finally realizing that &quot;f of x&quot; *was* a function - just like I was used to in programming - got me through algebra.  This is what happens when you learn to program long before you get past long division using paper and pencil. I've come to think that math is a rather poor programming language with nondescriptive variables, no logic, confusing syntax for loops, and no `man` pages. :)" CreationDate="2018-06-01T01:30:15.643" UserId="662" />
  <row Id="2330" PostId="1300" Score="31" Text="They aren't three meanings of &quot;equality&quot;.  They are three meanings of the _symbol_ `=`.  Many symbols are used for different meanings, especially in different contexts; this is one of them.  For example, `joe@yahoo.com` and `12 @ $1.25` mean different things though both use the symbol `@`.  The only problem I can see is if an instructor _started_ the misinterpretation by saying that something like `R = A + B` is an _equation_ or maybe &quot;this means R _is equal to_  A + B&quot; and then later corrected that to explain about variables and assignment." CreationDate="2017-07-02T01:14:47.897" UserId="1301" />
  <row Id="2362" PostId="1300" Score="0" Text="It doesn't directly answer your question so I'm putting this as a comment. Read the assignment operator as &quot;becomes equal to&quot;. In some programming languages, the := operator is used to disambiguate the symbolism." CreationDate="2017-07-02T12:26:28.983" UserId="1537" />
  <row Id="2419" PostId="1300" Score="2" Text="By the way the *&quot;The math statement is a constraining assertion restricting x to the set {0,1}&quot;* is not accurate. It is correct if we know that x belongs to the set of Integers or the Reals or the Complex numbers. But there are other sets (with a definition of multiplication) where the equation `x=x*x` has different (less or more) solutions." CreationDate="2017-07-02T21:17:46.310" UserId="1640" />
  <row Id="2421" PostId="1300" Score="0" Text="In the R statistical programming language, it's typical to use `x &lt;- 5` for assignment, rather than `y = 5`; and to use `x == y` for testing equality." CreationDate="2017-07-02T22:01:59.930" UserId="1367" />
  <row Id="2425" PostId="1300" Score="2" Text="In mathematics, $x=x^2$ is a statement which can be true or false, depending on $x$, quite similarly to your second Python example." CreationDate="2017-07-02T22:51:20.493" UserId="1645" />
  <row Id="2440" PostId="1300" Score="0" Text="There is also the `=` of Prolog for unification, for even more confusion!" CreationDate="2017-07-03T06:56:47.720" UserId="268" />
  <row Id="2477" PostId="1300" Score="0" Text="@Fatalize prolog ... /shudder" CreationDate="2017-07-03T14:19:15.607" UserId="1537" />
  <row Id="2527" PostId="1300" Score="2" Text="From the point of view of a mathematics teacher, let me say that the equal sign in mathematics has several, context-dependent meanings. Some students do not appreciate the distinctions. Often they only get them only vaguely, somewhat like the way you know the idiom of your native language.  But this may be a side issue to teaching programming, but it's not like students are equipped by their mathematical backgrounds with a clear understanding of the equal sign. They're inclined to think it's always the same, which might be a source of the problem here." CreationDate="2017-07-03T18:53:23.347" UserId="1665" />
  <row Id="2529" PostId="1300" Score="0" Text="@Michael E2 https://scholar.google.com/scholar?q=math+ed+equal+sign wow." CreationDate="2017-07-03T19:03:21.360" UserId="765" />
  <row Id="2537" PostId="1300" Score="1" Text="Here is another one: the equal sign used in a Join clause in SQL." CreationDate="2017-07-03T20:37:55.103" UserDisplayName="user737" />
  <row Id="2586" PostId="1300" Score="0" Text="Note that maths has 2 uses: `x^2 = y` and also `let y = 3, then there are 2 solutions` / `but setting x = 2 we get y = 4`" CreationDate="2017-07-04T18:58:48.610" UserId="1629" />
  <row Id="2284" PostId="1301" Score="0" Text="could you please specify in which languages `3.` is an integer?" CreationDate="2017-07-01T17:32:53.463" UserId="150" />
  <row Id="2285" PostId="1301" Score="0" Text="In Python for example, `3.` is `float` but is mathematically an integer" CreationDate="2017-07-01T17:33:53.793" UserId="765" />
  <row Id="2297" PostId="1301" Score="0" Text="In math Integer and Real are infinite sets. `int` and `float` are vanishingly small (i.e. finite) subsets of those infinite sets. The language designer makes a choice about which values are most useful to the programmer." CreationDate="2017-07-01T19:26:06.503" UserId="1293" />
  <row Id="2335" PostId="1301" Score="3" Text="Robert M. Pirsig said, &quot;One geometry cannot be more true than another; it can only be more convenient. Geometry is not true, it is advantageous.&quot;" CreationDate="2017-07-02T02:38:59.117" UserDisplayName="user737" />
  <row Id="2295" PostId="1302" Score="2" Text="If you have enough bandwidth for a voice channel, you might also be able to do distributed (not face to face) pairing. I struggled with that for years. While it isn't your specific need, some here may have suggestions. It would enable home schoolers as well as those students out for illness or otherwise." CreationDate="2017-07-01T19:19:13.723" UserId="1293" />
  <row Id="15279" PostId="1303" Score="0" Text="I get what you are trying to say in each sentence but the use of language in this post is so sloppy/fuzzy that it is the sort of writing/presentation that is why students get confused." CreationDate="2019-07-03T21:51:48.907" UserId="2485" />
  <row Id="2543" PostId="1304" Score="1" Text="@nocomprende, actually, the effects of words and meanings can be far more subtle than that.  The words &quot;YOU FLUNK THE COURSE,&quot; written on the board (even by a non-faculty prankster before class), *would* have a definite effect on the students.  Practically everyone has *some* degree of irrational identification between the symbols for things and the things themselves.  The first few paragraphs of [this article](http://education.lronhubbard.org/page49.htm) come to mind." CreationDate="2017-07-03T22:19:04.770" UserId="1103" />
  <row Id="2291" PostId="1305" Score="1" Text="uniqueness of result is not implied. In fact, just plot $x = 16y^2$ and you'll see multi-valued results." CreationDate="2017-07-01T18:24:23.660" UserId="150" />
  <row Id="2303" PostId="1305" Score="1" Text="I was writing about functions. Your example is an equation (a relation). $f(y) = 16y^2$ is single valued. But yes, the equation has multiple solutions. That isn't the same thing. And of course, the unique result (range value) of a function could be a set. But still unique. Am I missing something? (deleted and re-entered, since I can't edit my earlier error.)" CreationDate="2017-07-01T20:00:55.660" UserId="1293" />
  <row Id="2354" PostId="1305" Score="2" Text="@nocomprende, I think that is a good thing. In fact, I think that early CS education puts far too much stress on mathematical examples. That seems to be a consequence of trying to teach the primitives (int, float, ...) earlier than they need to be taught. There are exceptions, of course." CreationDate="2017-07-02T09:21:24.180" UserId="1293" />
  <row Id="2292" PostId="1306" Score="0" Text="That's a clever little example.  :)  Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-01T18:40:15.167" UserId="27" />
  <row Id="9621" PostId="1306" Score="1" Text="Good one!  And if you get a stack overflow, it's time to get a simpler dictionary and start over!" CreationDate="2018-01-13T07:18:38.930" UserId="1103" />
  <row Id="7179" PostId="1307" Score="1" Text="Maybe it would be good to have some kind of exposure to and testing of aptitude for the majors *before* the students lock in the next four years of their lives? Is there some reason this is not happening?" CreationDate="2017-08-22T16:36:48.107" UserDisplayName="user737" />
  <row Id="2296" PostId="1309" Score="0" Text="&quot;Java ain't Algebra&quot; is the key point. A computer program (at least in the procedural languages you are likely to teach first in CS) is a description of an algorithm, not a collection of mathematical equations. You won't find a cookery recipe that tells you how to make a pizza just by saying &quot;pizza = dough + toppings.&quot; Of course an algorithm (or a recipe) may contain *logical tests* - for example &quot;if (dough == black and smoking) then pizza is overcooked&quot; (!!)" CreationDate="2017-07-01T19:23:57.500" UserId="1352" />
  <row Id="2349" PostId="1309" Score="0" Text="Selecting as the &quot;answer&quot; because the link to Roger's lesson is helpful, mutating/constraining are nice terms to introduce, and because I think the claim of &quot;early and repeatedly&quot; is correct and backed by your anecdotal data. I do think it should be studied and submitted to a peer reviewed journal, as more systematically collected results might violate our shared intuition and anecdotal observations. Without real data, it feels odd to pick an &quot;answer,&quot; but I wager yours is correct, including the insightful observation that confusion is delayed, seeping, and hard for students to pinpoint." CreationDate="2017-07-02T05:01:19.470" UserId="765" />
  <row Id="2441" PostId="1309" Score="0" Text="@BennettBrown While teaching it early is essential this is certainly not  a CS problem. The inability to grasp the different uses of &quot;=&quot; even just within mathematics is a huge problem that students struggle with. There are actually quite a few papers written on this (https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3374577/ https://www.jstor.org/stable/30034852 )" CreationDate="2017-07-03T08:36:26.447" UserId="1393" />
  <row Id="2617" PostId="1309" Score="0" Text="Are you really using &quot;mutating equals&quot; when speaking about &quot;assignment&quot; (or binding in less state loving languages)?? Please don't. I don't have much teaching experience, but I can draw conclusions from the mass of homework questions that get posted on SO: a good amount of them are only due to students not knowing (and thus not searching) for the correct terms." CreationDate="2017-07-05T14:40:30.990" UserId="1430" />
  <row Id="2618" PostId="1309" Score="0" Text="That's a good point. :) You may be glad to hear that no, I don't use that term regularly. I might use it (or something similar) one time to draw the distinction we are discussing here, but I do go on to then explain the proper term. :)" CreationDate="2017-07-05T14:43:30.763" UserId="27" />
  <row Id="9731" PostId="1309" Score="0" Text="That is why BASIC used the LET operator, and PASCAL used := (read becomes equal) for assignment.  In some ways it's too bad that brevity has won out over clarity in modern languages." CreationDate="2018-01-22T06:03:25.410" UserId="1537" />
  <row Id="2306" PostId="1310" Score="1" Text="Re &quot;a variable is a representative for some value&quot; - so is a constant, which is the opposite of a variable." CreationDate="2017-07-01T21:40:16.000" UserId="1612" />
  <row Id="2307" PostId="1310" Score="0" Text="Yes, of course, @alancalvitti, but as the discussion was about variables, I didn't give a fuller exposition. In some ways a constant is more like a math variable than a variable is, though that might just confuse the situation for students rather than clarify it." CreationDate="2017-07-01T21:43:22.927" UserId="1293" />
  <row Id="2348" PostId="1310" Score="0" Text="I think the difference between a variable in algebra and a variable in CS deserves its own question and crows sourcing of ideas about how to clarify the difference for students." CreationDate="2017-07-02T04:52:08.927" UserId="765" />
  <row Id="2351" PostId="1310" Score="0" Text="I actually can't think of any common languages where `3 == 3.0` would evaluate to false. Not that I know every common language, but it can't be all _that_ common, can it?." CreationDate="2017-07-02T07:04:18.943" UserId="1357" />
  <row Id="2353" PostId="1310" Score="0" Text="Hmmm. @DavidZ. Sorry, just me being too literal minded. I changed the example. Hopefully correct now." CreationDate="2017-07-02T08:12:10.927" UserId="1293" />
  <row Id="2355" PostId="1310" Score="0" Text="@Buffy Sure, I'll take your word for this one. :-) (The point is clearer now anyway)" CreationDate="2017-07-02T09:28:34.307" UserId="1357" />
  <row Id="2363" PostId="1310" Score="1" Text="Mistaking rounding error for an issue with the intent of the equivalence operator could cause more confusion.  The == means the same as the algebraic =, but the unequaled being reported is a function of rounding error inherent in representing decimal fractions in a binary forum. Like fractions of 9 in base 10, many fractions of 10 are infinitely repeating series in base 2" CreationDate="2017-07-02T12:32:45.223" UserId="1537" />
  <row Id="2298" PostId="1311" Score="4" Text="Always glad to see more teachers here. Welcome to [cseducators.se]! I hope we hear more from you in the future." CreationDate="2017-07-01T19:32:55.583" UserId="27" />
  <row Id="2316" PostId="1311" Score="3" Text="I mean, what is wrong with `:=` ?????" CreationDate="2017-07-01T23:08:12.347" UserId="856" />
  <row Id="2396" PostId="1311" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/61444/discussion-on-answer-by-chris-jefferson-teaching-math-equality-vs-cs-assignm)." CreationDate="2017-07-02T16:27:25.367" UserId="58" />
  <row Id="2468" PostId="1311" Score="2" Text="I think `x=5` as assignment could be read as &quot;_`x` equals `5` from now on_&quot;. Thus it's actually _equals_, but the demanding version of it, not constraining one as in math.." CreationDate="2017-07-03T12:57:16.353" UserId="1076" />
  <row Id="2549" PostId="1311" Score="2" Text="&quot;It's unfortunate that someone decided to re-use `=` for assignment in programming, but now we are stuck with it.&quot; – Not really. `=` is only used for assignment in *some* languages, not all of them. In fact, I wouldn't be surprised to find that these languages are a minority. Most Lisps use an alphanumeric identifier for assignment (e.g. `def` or `set`), Smalltalk originally used `←` and then switched to `:=` only because `←` was not available in the character sets of the early 1980s, Algol, Jovial, Simula, Pascal, Modula, Oberon, and many others, Beta uses `-&gt;` and puts the target at the …" CreationDate="2017-07-04T08:07:57.287" UserId="945" />
  <row Id="2550" PostId="1311" Score="0" Text="… right, gBeta uses `|` and puts the target at the right, Prolog and Erlang don't *have* assignment in that sense (they use `=` for pattern unification, which is actually somewhat similar to one of the usages in maths), purely functional languages like Haskell, Clean, Frege, Idris, Epigram, Coq, Guru, etc don't have this notion of assignment. If you don't like the use of `=` for assignment, then just don't use a language that does that. Especially in a CSE setting where the language doesn't matter anyhow, and it's all about the concepts." CreationDate="2017-07-04T08:11:16.793" UserId="945" />
  <row Id="2692" PostId="1311" Score="0" Text="While many languages don't use = for assignment, almost every popular language does, if you look at any table of most popular languages." CreationDate="2017-07-06T12:47:47.063" UserId="1611" />
  <row Id="2301" PostId="1312" Score="3" Text="Nonsense. Teachers are not idiots. You don't need to be actively involved to keep up with an evolving topic." CreationDate="2017-07-01T19:48:36.183" UserId="124" />
  <row Id="2308" PostId="1312" Score="0" Text="I think you're over-generalizing -- while I don't doubt that some schools are out-of-date, it seems a stretch to claim they're all that way. It might even be the other way around sometimes: if teachers are doing cutting-edge research on various topics (databases, 3d printing, data visualization, machine learning...), it's entirely possible they'd be more prepared to predict and teach future trends vs teachers from industry. For example, functional programming used to be purely academic but is practically mainstream now; FRP is starting to become influential (see react &amp; related frameworks)..." CreationDate="2017-07-01T21:55:12.533" UserId="732" />
  <row Id="2399" PostId="1312" Score="0" Text="Most teaching organisations (in the UK, I don't know about anywhere else) are forced to operate within the pace of continuous change. There's no reason why some academics, teachers or even students can't be at least as up to date (if not more so) than some working in industry." CreationDate="2017-07-02T17:16:53.913" UserId="674" />
  <row Id="2356" PostId="1317" Score="3" Text="+1 for &quot;There is no particular reason to assume that any given symbol used in a programming language needs to have any specific semantics.&quot; Just point them to some of the languages used on the codegolf stackexchage." CreationDate="2017-07-02T09:41:22.760" UserId="1623" />
  <row Id="12514" PostId="1326" Score="1" Text="What you're calling a “function in computer science”, I would call a “function in programming”. Functions in computer _science_ can get a lot more subtle, but that's something you'd teach only in a semantics course, not in a programming course." CreationDate="2018-05-17T12:20:39.153" UserId="124" />
  <row Id="12515" PostId="1326" Score="0" Text="While you may start by saying that the word “function” means unrelated things in math and programming, that's only the start. There are both mathematical and cognitive associations between the two concepts. It would depend on the level and the interests of the students, but I think the relationship does need to be discussed at some point." CreationDate="2018-05-17T12:25:59.923" UserId="124" />
  <row Id="12523" PostId="1326" Score="0" Text="Don't forget the (not at all) subtle difference in what &quot;variable&quot; means, either..." CreationDate="2018-05-17T19:43:32.967" UserId="5219" />
  <row Id="2315" PostId="1327" Score="0" Text="Is a simple port scan with no further action illegal?" CreationDate="2017-07-01T23:06:47.803" UserId="58" />
  <row Id="2323" PostId="1327" Score="1" Text="@thesecretmaster. Yes in some places, no in others, but it can depend, I'm pretty sure, on how much of a pain a prosecutor wants to inflict on your poor self." CreationDate="2017-07-02T00:40:35.207" UserId="1293" />
  <row Id="2311" PostId="1328" Score="0" Text="Usually my lab specifications put plenty of cs &quot;meat&quot; into the core assignment itself.  Is this for free-choice or unguided projects?" CreationDate="2017-07-01T22:56:37.087" UserId="27" />
  <row Id="2312" PostId="1328" Score="0" Text="I've observed the problem in projects and problems that have small and large opportunity for student-direction. Even when the student deliverable is well-constrained, I've seen high- and low-achieving students express anxiety around leaving a sprite costume unfinished or less than perfect." CreationDate="2017-07-01T23:03:33.043" UserId="765" />
  <row Id="2429" PostId="1328" Score="0" Text="I find that when students get good at some aspect, they spend a lot of time at it because it is known. Also, when there are new areas they don't know, they elaborate on aspects that they do know." CreationDate="2017-07-03T01:09:04.937" UserDisplayName="user737" />
  <row Id="2313" PostId="1329" Score="3" Text="Be aware that adding features not asked for can get you fired in the real world. If the assignment is to &quot;be creative&quot; then it isn't an issue, but note that extra code is code that (a) needs to be maintained in perpetuity (almost) and (b) may introduce bugs into the features that are required. So, if you are asked to do X, then do X as well as you can and seek guidance before you decide to do Y also." CreationDate="2017-07-01T23:03:41.363" UserId="1293" />
  <row Id="2314" PostId="1329" Score="0" Text="@Buffy, sure. I guess I meant it as in the classroom, when you are still learning, putting extra effort in is by no means a bad thing." CreationDate="2017-07-01T23:06:15.270" UserId="919" />
  <row Id="2317" PostId="1329" Score="1" Text="Also, be careful what you encourage in your golf game. Shortest code isn't necessarily the best. Most readable code, best variable and method names, etc would be encouraged pretty much universally, but shortness at the expense of maintainability is a problem, not a feature. &quot;Most comments&quot; is bad, code that doesn't need any comments is good. Most tests could be good or bad, depending, but just the count is less valuable than the coverage. Best coverage in tests - good." CreationDate="2017-07-01T23:09:21.193" UserId="1293" />
  <row Id="2318" PostId="1329" Score="0" Text="If I generalize your answer a bit it is definitely a positive thing. But the teacher needs to be clear on what is valued and what is problematic. So your &quot;golf game&quot; wins with the right rules. Extra effort good. Maintain balance, better. Rabbit holes, bad. When you are doing programming for another (a teacher or boss) you work to their standard. When you write for  yourself, be as creative as balance and constraint will allow." CreationDate="2017-07-01T23:12:56.877" UserId="1293" />
  <row Id="2319" PostId="1329" Score="0" Text="@Buffy, I assume that the teacher has enough discretion to properly carry out these challenges/leaderboards. Of course there is too much of a good thing." CreationDate="2017-07-01T23:16:46.997" UserId="919" />
  <row Id="2320" PostId="1329" Score="0" Text="Oh, if every student were like you, teaching would be so good. But so hard. We (teachers) would never get any sleep just keeping up." CreationDate="2017-07-01T23:19:34.190" UserId="1293" />
  <row Id="2321" PostId="1329" Score="0" Text="@Buffy, thank you, but not quite true, I think =) There's tons of things I still have to learn. I hope my edit properly conveys what you were trying to say." CreationDate="2017-07-01T23:27:05.170" UserId="919" />
  <row Id="2322" PostId="1329" Score="0" Text="Lots of things we _all_ need to learn, but the discussion is getting too long. Keep on keepin' on." CreationDate="2017-07-01T23:41:26.243" UserId="1293" />
  <row Id="2340" PostId="1331" Score="11" Text="I don't know how many times I've seen the IP address compared to a phone number, with the DNS being the phone book. To add ports to that, just add extensions to the phone number. Extensions that are standardized so you always know which extension to connect to for some department. The web department is normally extension 80, the email department uses extension 25. If you have an encrypted phone then you used different extensions." CreationDate="2017-07-02T03:13:55.247" UserId="104" />
  <row Id="2358" PostId="1331" Score="7" Text="Analogies are like shoes ... they do not always fit perfectly." CreationDate="2017-07-02T10:43:58.000" UserId="1131" />
  <row Id="2413" PostId="1331" Score="0" Text="The apartment street address vs. apartment number is the analogy I use, and it seems to work. Anything could work though - buildings and room numbers, classrooms and seats, pbx and extensions (this may add confusion) - as long as it references one destination with service dependent on who is contacted at that destination" CreationDate="2017-07-02T19:41:15.113" UserId="662" />
  <row Id="2802" PostId="1331" Score="0" Text="Phone numbers also have the name&lt;-&gt;number mapping in form of telephone books (which may be a thing of the past though)." CreationDate="2017-07-07T18:13:19.273" UserId="1213" />
  <row Id="2836" PostId="1331" Score="1" Text="why use an analogy? I would maybe use an analogy to explain it to someone not interested in computers to give them a quick idea of what it's for, but if you're actually teaching someone about IP addresses and ports, I don't see how an analogy helps, just tell them how it works. An analogy might actually be counter-productive, in fact." CreationDate="2017-07-08T03:08:33.607" UserId="1756" />
  <row Id="2345" PostId="1340" Score="1" Text="Seats! Love it. The person in the seat is like the program registered with the OS to listen at that port. The analogy gets at the idea that programs at a port may or may not be the port's usual ilstener (students sit in the wrong seat), might not be running (absent student), and that programs might have assumptions they make about incoming packets. If a love note for Barb at 121:2 is sent to Alice at 121:1, who knows what Alice will do with it? Ignore it? Return receipt reporting incorrect delivery? Respond in a way that noone who knows Alice would have expected?" CreationDate="2017-07-02T04:13:07.660" UserId="765" />
  <row Id="2372" PostId="1340" Score="0" Text="@BennettBrown That's even better. Bob and Sue switched seats because there's a substitute and now Bob doesn't get his message." CreationDate="2017-07-02T14:33:45.777" UserId="30" />
  <row Id="2346" PostId="1341" Score="0" Text="Concurring: port is the apartment number, not the apartment. The apartment dweller has to do something with the delivered mail, akin to the program listening at that port. My success with the apartment building:number::IP:port analogy increased when I started showing pictures of a bank of mailboxes: https://sep.yimg.com/ay/yhst-14044557065217/16-door-cluster-mailbox-sandstone-182.jpg" CreationDate="2017-07-02T04:17:46.863" UserId="765" />
  <row Id="2359" PostId="1341" Score="0" Text="Why can we ping only houses, not appartments? In other words, a good metaphor would need good counterparts for TCP vs. UDP vs. IP. To begin with, there is in principle no relation between UDP port x and TCP port x (even if, e.g., DNS uses both UDP port 53 and TCP 53); even the fact that their number ranges are the same is not a principal necessity. My point is: Why try to use a metaphor at all to cover every aspect and detail, when pairs of numbers are a simple concept?" CreationDate="2017-07-02T10:51:04.363" UserId="1131" />
  <row Id="2326" PostId="1343" Score="2" Text="That's a very good point (and a nice first post in our community). Welcome to [cseducators.se]!" CreationDate="2017-07-02T00:46:44.190" UserId="27" />
  <row Id="2459" PostId="1345" Score="0" Text="I assume that you are not in favor of teaching Haskell early, then." CreationDate="2017-07-03T12:40:52.113" UserId="1645" />
  <row Id="2464" PostId="1345" Score="1" Text="I was only saying that because Haskell has no assignments and you do not specify the execution order." CreationDate="2017-07-03T12:51:39.360" UserId="1645" />
  <row Id="15278" PostId="1345" Score="0" Text="This is like saying that all a person can do is vibrate their molecules." CreationDate="2019-07-03T21:47:34.470" UserId="2485" />
  <row Id="2350" PostId="1346" Score="3" Text="Very interesting ideas. Welcome to [cseducators.se], and I hope we hear more from you!" CreationDate="2017-07-02T05:43:16.200" UserId="27" />
  <row Id="2536" PostId="1347" Score="1" Text="A *very* worthy goal!  I thoroughly agree!  The most guaranteed way to accomplish this is to skip the standard classroom lecture model and allow each student to proceed at his or her own pace through the materials, *with effective handling of the **barriers to study** in each individual student.*  I think you would be very interested in [Applied Scholastics](http://www.appliedscholastics.org/results/testimonials.html)." CreationDate="2017-07-03T20:37:29.820" UserId="1103" />
  <row Id="2538" PostId="1347" Score="0" Text="It would be great @Wildcard if you could expand that to a full answer." CreationDate="2017-07-03T20:39:28.597" UserId="1293" />
  <row Id="2541" PostId="1347" Score="0" Text="@Buffy, thanks; I think I will.  It will have to be tonight when I'll have more time, though.  :)  In the meantime I'll just say that I think Applied Scholastics is *exactly* what you've been looking for.  I'll include some of my personal experience in my answer." CreationDate="2017-07-03T20:44:07.837" UserId="1103" />
  <row Id="2547" PostId="1347" Score="0" Text="You say you tried this in the latter part of your career. Would you have been ready to accept this message during the early part of your career? Probably not, I assume. You shouldn't place the initial bar too high for new unskilled CS teachers." CreationDate="2017-07-04T07:56:43.630" UserId="1195" />
  <row Id="2552" PostId="1347" Score="0" Text="I'd have been ready to accept it, I think, but there wasn't much around in the way of enlightenment for new teachers. In the US, at least, no one taught new math (there was little CS ed then) teachers how to teach, so all we had to go on was what we saw from our own professors. I was also quite isolated in much of my early career, teaching in a place off the beaten track with a too-small faculty. There was little opportunity to share experience. It was others who helped me change, so I'm trying to give back, not be a hard a**." CreationDate="2017-07-04T08:49:34.053" UserId="1293" />
  <row Id="2554" PostId="1347" Score="0" Text="@StephanBranczyk, I was also too naive, then, to realize that my students weren't all like me. It takes a certain kind of person to get a doctorate, maybe smart (enough) but certainly tenacious. In grad school you mostly see similar types. Then you go teach undergrads who aren't all like that. Most of our &quot;best&quot; professors in grad school were good lecturers, so we, who _could_ learn, learned to value that over most other things. We had good models and the system worked _for us_, so we emulated it." CreationDate="2017-07-04T10:14:02.473" UserId="1293" />
  <row Id="2367" PostId="1348" Score="1" Text="That's a nice point. Welcome to [cseducators.se] - I hope we hear more from you in the future!" CreationDate="2017-07-02T13:32:12.240" UserId="27" />
  <row Id="2368" PostId="1348" Score="0" Text="I've just noticed @Gypsy-Spellweaver 's comment to the original question, and realised that my answer is much the same." CreationDate="2017-07-02T13:45:02.503" UserId="1628" />
  <row Id="2379" PostId="1349" Score="1" Text="Interest alone isn't enough. I once got a C in a graduate math course (essentially a failing grade) though I had interest and skill. The prof just never got through to me in any way at any time. I don't recall, over all these years, whether that was a general opinion of my classmates." CreationDate="2017-07-02T15:02:05.560" UserId="1293" />
  <row Id="2382" PostId="1349" Score="0" Text="@Buffy What I was trying to state is that in my opinion, interest alone is enough reason (for a student) to try to get taught by somebody (e.g. by taking a course on that topic)." CreationDate="2017-07-02T15:06:32.823" UserId="793" />
  <row Id="2385" PostId="1349" Score="0" Text="Yes, I agree, but something is still missing. I'm more focused on what the instructor can do, however, so that I can nurture that interest into learning.  The student can try, but I have to deliver. Hmmm. Remember the movie Stand And Deliver? Jaime Escalante did his part." CreationDate="2017-07-02T15:11:09.500" UserId="1293" />
  <row Id="2411" PostId="1349" Score="0" Text="@Buffy I see... I think the other answers cover your requirements way better than my answer does. Not my best one, apparently." CreationDate="2017-07-02T19:31:08.077" UserId="793" />
  <row Id="2369" PostId="1350" Score="0" Text="Hi Stilez! Welcome to [cseducators.se]! This is an interesting take on the problem, thanks for sharing it." CreationDate="2017-07-02T13:46:46.530" UserId="58" />
  <row Id="2371" PostId="1351" Score="0" Text="Not only could you write a pretty good one yourself, but you'd also not have to grade it. The purpose of the teacher in the classroom is to teach. If they can accept that then their on the road to learning." CreationDate="2017-07-02T13:56:16.443" UserId="104" />
  <row Id="2389" PostId="1351" Score="1" Text="*The purpose of programming exercises isn't to produce a program, but to produce learning.*  I need to tell my students this more often." CreationDate="2017-07-02T15:31:43.627" UserId="1635" />
  <row Id="2445" PostId="1352" Score="4" Text="It's also important not to assume that a student won't know the answer to supposedly easy question they won't know the answer to a supposedly hard question. Taking your example, I can never remember which of the many O(n^2) algorithms happens to be called bubble sort, but I know about when quicksort will become slow and different mitigation strategies. Personally I'm always weak with memorizing definitions but find reasoning easy once given the definitions easy, while many teachers seem to assume that somebody who doesn't even know the definition by heart won't be able to apply it either." CreationDate="2017-07-03T10:17:54.060" UserId="839" />
  <row Id="2470" PostId="1352" Score="1" Text="*when and why an insertion sort algorithm might be more suitable than a bubble sort.*  Isn't that kind of backwards?  insertion-sort performs better than bubble-sort for almost everything, so the interesting / challenging question is when you'd ever choose bubble-sort.  (Probably never, unless your choices are limited to insert vs. bubble).  Personally, I find insertion-sort really easy and sensible to think about, so it wins lot on ease of implementation, if you're considering that." CreationDate="2017-07-03T13:10:46.297" UserId="1654" />
  <row Id="2559" PostId="1352" Score="0" Text="So, @CodesInChaos, to reach every student we need to (at least) be careful about making assumptions. Better, testing assumptions. I think that Owen Astrachan of Duke has written a piece (not here) that using bubble sort is an anti-pattern. Therefore it is useful to study _only_ in that context. On the main topic here, teachers can seek to help students improve memory or they can help students to &lt;something...&gt;, perhaps focus more on the most important things." CreationDate="2017-07-04T11:21:36.033" UserId="1293" />
  <row Id="2573" PostId="1352" Score="0" Text="@PeterCordes Absolutely. In order to come to that conclusion you've demonstrated a deeper understanding than just being able to name or follow both algorithms.  It'd be no fun if the lesson objective at the start of a lesson gave away the deduction the students were supposed to be able to make.by the end." CreationDate="2017-07-04T15:12:41.477" UserId="674" />
  <row Id="2577" PostId="1352" Score="0" Text="@pddring: I just don't get why Bubble-sort is even taught, since it's usually one of the worst-performing O(n^2) algos on real hardware.  Insertion vs. Selection sort would make more sense to me.  Or is the point of teaching Bubble that it shows how a less-obvious localized building block can be used in an algo to produce a global property (i.e. sortedness)?  IDK, it's been many years since I was taking CS classes, so it's hard to remember what it was like *not* just knowing this stuff, plus a lot of stuff about tuning for cache, etc." CreationDate="2017-07-04T16:34:28.050" UserId="1654" />
  <row Id="2579" PostId="1352" Score="2" Text="@petercordes it's just a really simple one to demonstrate with bits of paper and the fact that it's so inefficient make it easier to highlight the advantages of other algorithms" CreationDate="2017-07-04T17:18:04.573" UserId="674" />
  <row Id="2392" PostId="1353" Score="1" Text="This seems confusing. If a sea port like Liverpool is analogous to anything in networking I would expect it to be an interface, rather than a port." CreationDate="2017-07-02T15:43:22.247" UserId="1636" />
  <row Id="2450" PostId="1353" Score="1" Text="I could see this going badly in parts of the US, where some students may be only dimly aware that there are such things as oceans (or other countries)" CreationDate="2017-07-03T11:36:59.917" UserId="1357" />
  <row Id="2374" PostId="1354" Score="0" Text="Is there too much emphasis, generally on &quot;Deliver the Material&quot;? Is there another way? Wikipedia generally has all the content." CreationDate="2017-07-02T14:55:16.983" UserId="1293" />
  <row Id="2378" PostId="1354" Score="0" Text="@Buffy I don't know about your experiences, but I would **not** recommend learning from a Wikipedia article; they never seem to be pitched at the right level for learning a topic, more an encyclopaedic reference. I honestly can't say whether covering all the material should be a requirement, but it's often challenging to find a resource that teaches the topic you want to learn without assuming you know something that you don't." CreationDate="2017-07-02T15:00:11.657" UserId="2" />
  <row Id="2381" PostId="1354" Score="0" Text="Agreed. So perhaps we agree that it isn't really about &quot;content&quot; but about something at a higher level. I've found wikipedia to be pretty good if I'm willing to click a lot. But I'm not a young learner. Still, I don't think content is king no matter where it comes from. (But don't let me put words in your mouth.) When I was a new teacher I know I emphasized content too much." CreationDate="2017-07-02T15:04:29.567" UserId="1293" />
  <row Id="2384" PostId="1354" Score="0" Text="@Buffy Whether content is king is an interesting question in its own right (and I'd encourage you to ask that as a question!), but I would say that if you haven't taught it, a lot of students won't know what you expect them to, unless you provide specific resources showing them what they need to know. I think that it's probably unrealistic to not teach all the content in the course and expect them to know it, although that might be a little cynical—but introducing everything that they should know would seem wise to me." CreationDate="2017-07-02T15:07:30.600" UserId="2" />
  <row Id="2387" PostId="1354" Score="0" Text="Exactly, but how do I teach it? I gave up on lecture as my main vehicle more and more as I grew older (I hope better). Ref &quot;if you haven't taught it&quot; in your note." CreationDate="2017-07-02T15:14:39.080" UserId="1293" />
  <row Id="2530" PostId="1355" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/61509/discussion-on-answer-by-heather-how-can-i-convince-my-fellow-cs-teachers-that-re)." CreationDate="2017-07-03T19:10:14.927" UserId="27" />
  <row Id="10074" PostId="1355" Score="0" Text="+1 A well thought out answer. Joined this community just to upvote and favorite this." CreationDate="2018-02-12T18:35:02.050" UserId="4298" />
  <row Id="2443" PostId="1356" Score="0" Text="It does depend at what level you're teaching. A good proportion of the workforce (even in developed countries) are applying technology (they call them trades) in a static framework. Even in technical subjects, this is true - do you want your lab tech. running consistent and repeatable tests, or do you want them making tweaks to the machine calibration every weekend?" CreationDate="2017-07-03T09:11:46.743" UserId="41" />
  <row Id="2400" PostId="1357" Score="0" Text="Maybe you could expand that to a full answer. Maybe you are saying it is just an (absolute?) constraint. Or not?" CreationDate="2017-07-02T17:38:22.703" UserId="1293" />
  <row Id="2403" PostId="1357" Score="0" Text="I'm more interested in _your_ goals and how you think they balance." CreationDate="2017-07-02T18:27:22.963" UserId="1293" />
  <row Id="2458" PostId="1358" Score="0" Text="@nocomprende Do you and your colleagues find their input helpful?" CreationDate="2017-07-03T12:35:43.800" UserId="283" />
  <row Id="2401" PostId="1359" Score="0" Text="But is it efficient at the cost of effectiveness? Socrates didn't need efficiency. How much does that need overpower all else, possibly to the detriment of the learner." CreationDate="2017-07-02T18:26:09.493" UserId="1293" />
  <row Id="2404" PostId="1359" Score="1" Text="@Buffy Efficiency in that you could spend years working through slowly, discovering each result one by one, but it's inefficient in terms of cost, and time (as much as learning is a great thing, some people don't want to dedicate a life to academia). Whether the priority of efficiency is a good thing in society is a question I cannot answer, particularly not on a CS Education site... It's a far more complex philosophical idea that I don't really know the answer to." CreationDate="2017-07-02T18:30:53.863" UserId="2" />
  <row Id="2405" PostId="1359" Score="2" Text="To twist the question a bit, what is it that you want for your students, primarily; that they _know_, or that they _can do_. Not quite the same and content aids one more than the other. If I know 3 data structures in Java, can I grok the others on a need to know basis? So is it better to &quot;see more&quot; or better to &quot;work with what I have seen?&quot;  And I'm pretty sure the answer is different in CS than in other fields. And possibly not the same if the person is headed to grad school vs a job" CreationDate="2017-07-02T18:34:43.980" UserId="1293" />
  <row Id="2420" PostId="1359" Score="0" Text="@Buffy Doesn't that depend on the course? The primary goal for some courses might be to teach applied skills (&quot;by the end of this course, you should know how to work as a team and use source control to write software to control robots that open doors&quot;), while other courses might focus on practical knowledge (&quot;you'll learn about eight different data structures and how they work&quot;), foundational knowledge (&quot;you'll learn about these types of mathematics and proofs&quot;), or even to give students an overview of topics in a particular subfield so they know what's out there. There's no one answer." CreationDate="2017-07-02T21:40:29.290" UserId="1642" />
  <row Id="2408" PostId="1360" Score="0" Text="In the middle you say &quot;Instill in your students the desire to help other...&quot;, have you ideas about how I can scale that, even if only a bit. Your examples were mostly one to one. Can you think of ways to scale it, say to 3 or five. This is the kind of thing I think can be a lego block to build a solution. Do you have thoughts about making groups work for student X and Y above? And, deep, even if &quot;off the cuff&quot;" CreationDate="2017-07-02T19:16:30.090" UserId="1293" />
  <row Id="2412" PostId="1360" Score="1" Text="@Buffy All I can offer is ideas. You have to build it yourself ultimately and develop something that works(which means trying things out, there is no short term solution/quick fix). I'll add something about what I think will help students work in groups more effectively than what I have experienced in my own education, but ultimately it is all anecdotal, you will have to develop a living breathing solution that evolves and works for you(there are no cookie cutter solutions. This problem is fundamental to humans, if not life itself)." CreationDate="2017-07-02T19:36:23.757" UserId="1638" />
  <row Id="2414" PostId="1360" Score="0" Text="The general can emerge from the specific, I think. But the struggle takes a lot of work - and minds." CreationDate="2017-07-02T19:50:03.027" UserId="1293" />
  <row Id="2546" PostId="1360" Score="0" Text="@nocomprende lol, well, I'd probably make a better president than what we have but so would you and many other human beings.  It's unfortunately we are generally led by mediocre people." CreationDate="2017-07-04T02:31:56.613" UserId="1638" />
  <row Id="8707" PostId="1360" Score="0" Text="Ironically, the society in which the most people are the most happy is the one in which each person is responsible for his own happiness. The billionaires are billionaires because they have helped others to pursue and realize their happiness. The Walton family is a success by your standard,  They  received roughly 3% return on their total investment in Walmart,  with the bulk of the financial benefit going millions of customers and employees in the extended supply and manufacturing chain." CreationDate="2017-10-09T01:10:41.660" UserId="1537" />
  <row Id="8718" PostId="1360" Score="0" Text="pojo-guy: That is ignorance. Happiness is not measured by wealth. That is a western concept that is used to enslave the stupid. The most people happy != responsible for own happiness. If that were the case, everyone would be doing anything they want, which would be anarchy and wouldn't be very happy for most people. We live in social structures and it is the responsibility of everyone in that social structure to support and help everyone else, not leech off the ignorant and force them in to some type of slavery(which is what Walmart does, as almost every corporation, including the government)." CreationDate="2017-10-09T17:48:31.180" UserId="1638" />
  <row Id="2409" PostId="1361" Score="0" Text="If I interpret &quot;presentation&quot; as content delivery (yes, not your words), would you value presentation over practice, or the other way round?" CreationDate="2017-07-02T19:22:54.640" UserId="1293" />
  <row Id="2410" PostId="1361" Score="1" Text="@Buffy, yes, I think presentation would be content delivery, that makes sense. And I think I would value presentation over practice, though only just. It is hard to practice what you do not know, but once you know it, you must practice it." CreationDate="2017-07-02T19:28:18.693" UserId="919" />
  <row Id="2415" PostId="1361" Score="1" Text="I might switch them. I usually learn a new language by working in it, not reading (very much) about it. Can the knowledge emerge from the practice? Preference is important, of course, but I'm going to take a wild stab and guess you aren't a &quot;typical&quot; student in your age cohort. I can't imagine my grandson writing like you do - only a bit younger. Your feedback here is as real as it gets." CreationDate="2017-07-02T19:54:50.090" UserId="1293" />
  <row Id="6326" PostId="1361" Score="0" Text="@Buffy well...see, I think it depends on what you are teaching. If it's, say, 'program this', then yeah, practice is more important. And like you say with a language, practice is more important. But in math, for example, you can't expect a student to derive all of math for themselves - you have to teach the formulas, and *then* let them practice." CreationDate="2017-07-30T23:37:36.427" UserId="919" />
  <row Id="6327" PostId="1361" Score="0" Text="you would be especially interested in the teaching methods of https://en.wikipedia.org/wiki/Robert_Lee_Moore. While he was not an exemplary human being in all respects, his teaching methods were unique. In fact, his students, many of whom rose to the very height of the profession, did, indeed derive everything for themselves." CreationDate="2017-07-30T23:44:49.480" UserId="1293" />
  <row Id="6328" PostId="1361" Score="0" Text="@Buffy an interesting method that I'd kind of enjoy - in fact, it sounds a lot like critical reading as a self-teaching student, where you try to pick holes in and prove every theorem you come across. However, I'm not sure that's a great method for a large(r) class of widely ranging abilities, especially not a graduate/higher level class of more motivated students." CreationDate="2017-07-30T23:54:39.277" UserId="919" />
  <row Id="2417" PostId="1362" Score="0" Text="lots of hooks sounds like a good idea. can you expand it?" CreationDate="2017-07-02T20:50:08.017" UserId="1293" />
  <row Id="2423" PostId="1363" Score="0" Text="My guess is that it depends on how the instructor/text describes negative indexing. If students understand that it's just syntactic sugar, I wouldn't expect it to affect their model." CreationDate="2017-07-02T22:30:39.870" UserId="283" />
  <row Id="2439" PostId="1363" Score="0" Text="[this question](https://cseducators.stackexchange.com/questions/1030/transition-from-java-to-python) might be of interest to you" CreationDate="2017-07-03T05:23:42.363" UserId="150" />
  <row Id="2476" PostId="1363" Score="0" Text="I don't know how in-depth the class is going into memory - but I can say I never really thought about it (I started with Python) until I started reading the gigantic &quot;Learning Python&quot; by Mark Lutz (and put words to ideas I'd figured out via messing around, like strings being &quot;immutable&quot;). Great was my dismay when on chapter 3 (like a hundred pages in) the book says, to paraphrase &quot;now we get into python in-depth&quot;. But anyway, maybe that's just me." CreationDate="2017-07-03T14:07:30.317" UserId="919" />
  <row Id="9647" PostId="1363" Score="0" Text="I learned BASIC first (the one directly descended from FORTRAN, not later flavors like GWBASIC or VB). Later I learned Pascal, and I had to relearn memory, but my model was still wrong. Later I learned C on a VAX 11/780, for which C is structured assembly language, and developed yet another model that was closer to correct but still wrong. Finally I leaned assembly on 6502, x80, x86 and 68xxx processors, built some computer s by hand soldering the parts together, and then I understood memory." CreationDate="2018-01-14T23:08:07.873" UserId="1537" />
  <row Id="15130" PostId="1363" Score="0" Text="&quot;Python does not actually store lists in a sequence of equally sized memory blocks&quot; or rather it does, but those fixed-sized memory blocks don't store the items directly, they merely store references to the objects representing the items." CreationDate="2019-05-31T15:56:22.663" UserId="1287" />
  <row Id="17950" PostId="1363" Score="0" Text="@heather Great was my dismay when 300 pages in to SICP they said that the idea of the evaluator we had been studying thus far could never work in practice and it had to be abandoned.  Simplify, but never teach something that can't work. After that I basically discarded any Lisp-like thing as pointless and idiotic, enticing as it might be." CreationDate="2021-05-02T01:30:02.223" UserId="5349" />
  <row Id="2426" PostId="1364" Score="0" Text="How do you and others react to the statement that &quot;the most important part of education is the relationship between a student and a professor.&quot; What are the consequences of accepting or rejecting that view for society?" CreationDate="2017-07-03T00:01:51.773" UserId="1293" />
  <row Id="2427" PostId="1365" Score="2" Text="I think your instinct to give students a &quot;high level model&quot; for how data are stored in memory is in line with my assertion that most teachers of entry CS do not teach low-level ideas with much breadth or depth. I am saying that students nevertheless construct a model for howe a computer works, at some low level, and that their model has implications later on in their education." CreationDate="2017-07-03T00:51:55.947" UserId="765" />
  <row Id="2451" PostId="1365" Score="1" Text="@BennettBrown, I'm wondering if you think that it is important for the students to have an accurate, or any particular, model. Is it important to you that beginners learn low-level ideas early on?" CreationDate="2017-07-03T11:45:31.013" UserId="1293" />
  <row Id="2583" PostId="1365" Score="0" Text="In a pure functional model the boxes model isn't very useful, I think. Trying to map everything to it mentally while programming is a waste of effort &lt;opinion/&gt;. A dictionary takes you pretty far. I note that the Oxford English Dictionary, when under development originally, was literally a set of cubby boxes for definitions submitted by contributors. &quot;memory&quot; is a mapping from names (tokens) to values. Just extend something like the OOP reference-to-object model universally. No one thinks of the OED as a set of cubbies anymore, I suspect. &quot;names&quot; reference &quot;things&quot;. Compiler writers need more." CreationDate="2017-07-04T18:46:53.793" UserId="1293" />
  <row Id="2584" PostId="1365" Score="0" Text="For the record @nocomprende I did, in fact, build such a thing once to teach with. It even used &quot;magic slates&quot; (plastic sheet over black waxy background) for volatile memory. I finally threw it out &amp; don't likely even have a photo of it anymore. You took me back a bit with your note. I never taught 8th grade, though, so you can't blame me. =), nor personally, anyway." CreationDate="2017-07-04T18:50:33.037" UserId="1293" />
  <row Id="2587" PostId="1365" Score="0" Text="@nocomprende. Like in The Matrix??? And are you stealing my jokes now (&quot;just after Chicxulub&quot;) or are you older than dirt too, like myself? A pretty famous CS guy gave me the shirt to assure me that I am, anyway." CreationDate="2017-07-04T18:59:31.347" UserId="1293" />
  <row Id="2589" PostId="1365" Score="1" Text="My archeological layer is a bit lower than yours, but I guess the mods will be on us for a conversation here. Be well. Or come to the Classroom chat." CreationDate="2017-07-04T19:03:59.603" UserId="1293" />
  <row Id="17949" PostId="1365" Score="0" Text="It is interesting your idea that it is a problem when students have to map to a low level idea then back to a different high level idea to get to an answer or solution. But... if they do this a few times, it becomes a concept and they understand the whole route and can take it in one step. But if they never have to make the trip, then they never will understand. Do we want people who don't understand to be programming? Seems reckless." CreationDate="2021-05-02T01:26:52.680" UserId="5349" />
  <row Id="2735" PostId="1366" Score="0" Text="I desperately love this information, (and just purchased a book about active learning because of this post), but if it is an answer to OPs question, I'm having trouble seeing how. Are you suggesting that active learning is specifically more important than course content?  I wonder if there is somewhere else this information fits into the site, because it is so darned important" CreationDate="2017-07-07T01:22:32.437" UserId="27" />
  <row Id="2739" PostId="1366" Score="1" Text="@BenI The usual defense of traditional teaching is that the teacher can &quot;get through&quot; more content or include more ancillary information. My answer is intended to say that these reasons are misguided and that if covering content trades off against student involvement, go with student involvement." CreationDate="2017-07-07T03:01:18.813" UserId="765" />
  <row Id="2748" PostId="1366" Score="0" Text="Okay, I see where you're going with that, though it's not really made explicit.  Rather than fixing it here. though, do you think that this answer might be a better fit [here](https://cseducators.stackexchange.com/questions/1444/how-do-you-make-your-cs-lectures-more-interesting)?" CreationDate="2017-07-07T09:17:26.250" UserId="27" />
  <row Id="2434" PostId="1371" Score="1" Text="Students never just absrob new material. They always incorporate new ideas into models they already have constructed. Students do not abandon models they have already adopted, even if they are told the model is wrong. This is &quot;constructivism.&quot; See National Research Council. (2000). &quot;How People Learn&quot;. If negative indexing makes people start out by envisioning a circular/modulus structure, it is presumed to affect later learning." CreationDate="2017-07-03T04:02:41.677" UserId="765" />
  <row Id="2435" PostId="1371" Score="2" Text="Thank you for speculating @BenI ! We do have some evidence to go on; mental models of intro CS students have been studied, including arrays and lists in particular. See Sodol et al. (2009). http://www.cs.cmu.edu/~lsudol/lsudol_p28.pdf" CreationDate="2017-07-03T04:03:02.790" UserId="765" />
  <row Id="2471" PostId="1371" Score="0" Text="@BennettBrown And yet, we all eventually come to conceive of arrays as lines. Your description of constructivism is overstated, or it would make this impossible. You actually brought up one of my very favorite books! See How People Learn, page 11, first full paragraph :)" CreationDate="2017-07-03T13:38:13.903" UserId="27" />
  <row Id="2493" PostId="1371" Score="1" Text="Upon reflection, I actually think that constructivism itself may not be quite right. We know that the brain utilizes prior patterns when it encodes new patterns, but constructivism is simply an observation that, even though the student engages in code-switching, this does not intrinsically mean that they have migrated to a *better* representation. They are able to re-encoding their flat representation into a pancake, a sphere, a tube, a dome, etc; they simply chose the wrong new representation. Thus, we must take care in presenting new patterns to try to maximize the utility of re-encodings." CreationDate="2017-07-03T15:11:48.763" UserId="27" />
  <row Id="2494" PostId="1372" Score="0" Text="My teachers used to say &quot;zero-th&quot;, &quot;one-th&quot; and so on to make it clear. Might not translate well out of English." CreationDate="2017-07-03T15:13:30.653" UserDisplayName="user737" />
  <row Id="2503" PostId="1372" Score="0" Text="@nocomprende then four-th and fourth would refer to a[4] and a[3]. Ditto for 6, 7, 8, ..." CreationDate="2017-07-03T15:52:50.587" UserId="765" />
  <row Id="6672" PostId="1372" Score="0" Text="@BennettBrown My [most recent question](https://cseducators.stackexchange.com/questions/3152/books-about-pedagogical-research-within-our-field) might interest you.  (And I'd be highly interested in your response)" CreationDate="2017-08-07T01:24:32.913" UserId="27" />
  <row Id="2462" PostId="1373" Score="0" Text="Lambda expressions is a big topic and many features were added that interact with each other (functional interfaces, for example) Are you focused on just the narrow question, as stated, or the whole shebang? Your samples are from a pretty narrow subset - lisp-like lists." CreationDate="2017-07-03T12:50:50.797" UserId="1293" />
  <row Id="2465" PostId="1373" Score="0" Text="@Buffy whoops. I forgot to mention that it's high school level. And I am mainly looking to give them hands on experience with functional interfaces already in java. Does my edit answer your question?" CreationDate="2017-07-03T12:53:07.843" UserId="150" />
  <row Id="2447" PostId="1376" Score="0" Text="That's not how pair programming works. It does have a confusing name, but you can read the tag wiki or go to the wikipedia page." CreationDate="2017-07-03T11:24:36.507" UserId="150" />
  <row Id="2448" PostId="1376" Score="0" Text="Agreed, but the question was about how to adapt pair programming to get students to collaborate side by side effectively. For pair programming to work you need two motivated, well behaved individuals who are competent and confident in programming. That's not always the case in a classroom." CreationDate="2017-07-03T11:29:43.123" UserId="674" />
  <row Id="2449" PostId="1376" Score="2" Text="But pair programming is not about 2 people writing code on a computer at the same time. That's why I said that comment." CreationDate="2017-07-03T11:33:45.193" UserId="150" />
  <row Id="2452" PostId="1376" Score="0" Text="Hmmm. @ItamarG3. Pairing IS about 2 people on one computer even if distributed. Here is a pretty fair description, from [the source](https://www.agilealliance.org/glossary/pairing). Wikipedia has an article also. I don't avoid it, I embrace it, at any level." CreationDate="2017-07-03T12:08:23.143" UserId="1293" />
  <row Id="2489" PostId="1376" Score="0" Text="I tend to think of pair programming as Rally Car: you have one person doing the driving, while the other is handling navigation. Which actually is what you have for the first bulletpoint of the second series." CreationDate="2017-07-03T15:04:15.467" UserId="1477" />
  <row Id="2455" PostId="1377" Score="0" Text="Might work. Might fail. Depends on how much experience the students have." CreationDate="2017-07-03T12:24:36.263" UserId="150" />
  <row Id="2463" PostId="1378" Score="0" Text="YMMV? what does that mean?" CreationDate="2017-07-03T12:50:57.047" UserId="150" />
  <row Id="2474" PostId="1378" Score="1" Text="Welcome to [cseducators.se]!" CreationDate="2017-07-03T14:01:02.263" UserId="27" />
  <row Id="19566" PostId="1378" Score="0" Text="@ItamarG3 Your Mileage May Vary, meant as an acknowledgement that my experience may differ from someone else applying this technique." CreationDate="2022-04-05T21:00:10.190" UserId="1123" />
  <row Id="16114" PostId="1379" Score="0" Text="To simplify the library code provided to students (and give the inquisitive students who poke around the library code some exposure to a useful standard library class), you could use `Runnable` here instead of defining a new interface." CreationDate="2020-01-23T16:05:40.573" UserId="8562" />
  <row Id="2479" PostId="1380" Score="0" Text="Recursion is not a language specific concept. Recursion in java is like recursion in any other procedural language. Have them write a method to compute factorials, as a classical first example. For kicks, have him write a recursive tree walker to display a directory structure, and then componentize it by separating the generic tree walker code from the visitor that operates on the directory structure" CreationDate="2017-07-03T14:24:50.767" UserId="1537" />
  <row Id="2480" PostId="1380" Score="0" Text="I understand it's not language dependent, but it's easier to learn something in a familiar language and programming environment if possible." CreationDate="2017-07-03T14:43:38.303" UserId="283" />
  <row Id="2544" PostId="1380" Score="3" Text="See this question: https://cseducators.stackexchange.com/questions/1380/where-can-a-student-independently-learn-recursion-preferably-in-java" CreationDate="2017-07-03T22:54:08.500" UserId="283" />
  <row Id="2553" PostId="1380" Score="0" Text="Base case @EllenSpertus, base case. That should be if(you aren't here) {see the question https://cseducators.stackexchange.com/questions/1380/where-can-a-student-independently-learn-recursion-preferably-in-java}" CreationDate="2017-07-04T08:55:56.297" UserId="1293" />
  <row Id="2578" PostId="1380" Score="0" Text="Java does not fully support recursion (same for a lot of other languages), as it does not have tail call optimisation. It will not struggle with algorithms where the call depth is O(log n). However infinite recursion is impossible. Check to see if it is possible in scalla. I have heard that the problem is in the JVM, however scalla may get around this by using trampolinning (A technique to simulate tail call recursion)." CreationDate="2017-07-04T16:38:36.917" UserId="204" />
  <row Id="2683" PostId="1380" Score="0" Text="Expose her to functional programming. Not only will she be *forced* to use recursion, she'll also widen her horizon considerably." CreationDate="2017-07-06T09:37:15.527" UserId="842" />
  <row Id="2695" PostId="1380" Score="0" Text="@Raphael Thanks, but I teach functional programming in depth later in the curriculum. My question is not how to provide a deep understanding of recursion but how to quickly get her up to speed so she can understand a recursive factorial or fibonacci for a sophomore-level course." CreationDate="2017-07-06T14:09:59.940" UserId="283" />
  <row Id="2699" PostId="1380" Score="0" Text="@EllenSpertus I don't see how these are different things, but then I don't have experience teaching on that level." CreationDate="2017-07-06T14:12:04.660" UserId="842" />
  <row Id="2700" PostId="1380" Score="0" Text="@Raphael In the advanced course, they'd learn about tail recursion, the Y-combinator, etc. For computer architecture, I just need them to understand the simplest examples. Knowing tail call optimization (raised by @richard) would be premature, since my purpose of using recursion in computer architecture is for them to see the stack behavior of ordinary recursion in an imperative language." CreationDate="2017-07-06T14:20:18.710" UserId="283" />
  <row Id="2703" PostId="1380" Score="0" Text="@EllenSpertus You can learn about functional programming without mentioning these more involved concepts. My point is that by taking away state and loops, you *force* students to think recursively. They can stay with the basic features of, say, Haskell for this lesson. [Try Haskell](https://www.tryhaskell.org/) is a nice enough intro, for instance." CreationDate="2017-07-06T15:04:12.190" UserId="842" />
  <row Id="2719" PostId="1380" Score="0" Text="@Raphael I have edited the question to make it clearer that I am asking about work a beginning student can do on their own in order to learn the minimum necessary amount of recursion for a sophomore-level course. I encourage you to ask and answer a more general question about learning recursion [in greater depth], as you have some good suggestions." CreationDate="2017-07-06T20:36:40.473" UserId="283" />
  <row Id="4205" PostId="1381" Score="0" Text="A simple example is adding a listener to, for example, a Button. It is a bit cleaner then anonymous inner classes and doesn't break the mental flow quite as much. The method needs no name and isn't referred to in any case from user code. Therefore, a good match of technique to need." CreationDate="2017-07-13T18:46:49.610" UserId="1293" />
  <row Id="16130" PostId="1381" Score="0" Text="Actually, lambdas are syntactic sugar + type inference on top of anonymous classes with only one non-default method (functional interfaces)" CreationDate="2020-01-27T06:49:03.433" UserId="2103" />
  <row Id="2478" PostId="1382" Score="0" Text="I hadn't known about that book, and I'm an Eric Roberts fan. Thanks!" CreationDate="2017-07-03T14:23:01.847" UserId="283" />
  <row Id="2508" PostId="1382" Score="0" Text="Note, for the record, that the first (classic) version of the book uses Pascal for the examples." CreationDate="2017-07-03T16:23:57.583" UserId="1293" />
  <row Id="2523" PostId="1382" Score="0" Text="Ooh! It's on Safari Books, where I have a subscription." CreationDate="2017-07-03T18:37:38.623" UserId="283" />
  <row Id="2525" PostId="1383" Score="0" Text="Ob Dilbert: http://dilbert.com/strip/2003-01-11" CreationDate="2017-07-03T18:46:23.800" UserId="283" />
  <row Id="2531" PostId="1383" Score="0" Text="@EllenSpertus Hmmm. Would that be one of the advantages or disadvantages? =)" CreationDate="2017-07-03T19:11:39.540" UserId="1293" />
  <row Id="2539" PostId="1383" Score="2" Text="Your link should point to the review of literature on pair programming (http://www.tandfonline.com/doi/abs/10.1080/08993408.2011.579808) concluding pair programming is best practice. I posted that in https://cseducators.stackexchange.com/questions/1302/how-to-adapt-pair-programming-to-a-shared-terminal-environment-like-cloud9 . Your link in the current question is for a National Academies literature review of active learning I posted in chat." CreationDate="2017-07-03T20:40:58.693" UserId="765" />
  <row Id="2540" PostId="1383" Score="0" Text="That came from an edit by another. I'll update it. Thanks. I hope you want to put in an answer here somewhere." CreationDate="2017-07-03T20:43:23.343" UserId="1293" />
  <row Id="2481" PostId="1384" Score="1" Text="I liked this, especially: &quot;but also don't assume that the end goals are the same across your classroom&quot;, but your last paragraph is harder to follow." CreationDate="2017-07-03T14:48:49.210" UserId="1293" />
  <row Id="2482" PostId="1384" Score="0" Text="the last paragraph was excessive. Was just trying to emphasize teachers at the undergrad level who displayed personality and engagement with the material and how it can take a course you're kind of iffy on to something you'll engage in, sorry." CreationDate="2017-07-03T14:50:30.130" UserId="1477" />
  <row Id="2484" PostId="1384" Score="1" Text="You can edit, of course, and say more, or less. Showboating might be a useful technique occasionally (at least). I've done it but not as a general strategy." CreationDate="2017-07-03T14:55:03.707" UserId="1293" />
  <row Id="2486" PostId="1384" Score="0" Text="I think I'll strip it out. Since most of the answer was an anecdote the last  paragraph while supplemental to the theme, was also pretty superfluous in relation to the anecdote. Thanks for the feedback" CreationDate="2017-07-03T14:59:49.223" UserId="1477" />
  <row Id="2487" PostId="1384" Score="0" Text="Maybe an overreaction. i think the anecdote was good, and applicable to cs also." CreationDate="2017-07-03T15:00:50.287" UserId="1293" />
  <row Id="2483" PostId="1385" Score="0" Text="I might do a questionnaire at the end of the course, asking: Who was your &quot;best&quot; partner this term, and why&quot;. I do similar things with other teamwork, being careful to ask for positive things only." CreationDate="2017-07-03T14:53:18.080" UserId="1293" />
  <row Id="2485" PostId="1385" Score="0" Text="That's an interesting idea.  I would really like this information from students who don't stick around until the end of the semester, too. if I could figure out a way to get it." CreationDate="2017-07-03T14:55:59.377" UserId="1564" />
  <row Id="2488" PostId="1385" Score="0" Text="You could ask on one or several assignment: What was your partner's best contribution and what was your own. You learn a lot from this sort of question. I once had a student that I thought was slacking, but his teammates rated him very highly. His grade got a big bounce." CreationDate="2017-07-03T15:03:23.517" UserId="1293" />
  <row Id="2490" PostId="1385" Score="0" Text="That's a great idea!  I hope I remember it when I teach CS 1 again in the spring.  :)" CreationDate="2017-07-03T15:08:26.067" UserId="1564" />
  <row Id="2498" PostId="1385" Score="1" Text="One question that might be worth asking in your initial survey is what times the student thinks they'll be generally available to work on their homework (since students have different obligations and may be unavailable at a particular day/time). Pair programming goes much more smoothly if the pair can actually meet in person, so it might help to explicitly try and facilitate that." CreationDate="2017-07-03T15:19:04.337" UserId="732" />
  <row Id="2501" PostId="1385" Score="0" Text="@ChrisM. Put a card in your Hipster PDA." CreationDate="2017-07-03T15:22:34.740" UserId="1293" />
  <row Id="2572" PostId="1385" Score="0" Text="+1 to not forcing students to work together. Some students live off-campus or have quirks or outside responsibilities that make it hard for them to collaborate, although I still encourage them to make an attempt if they think they can manage it. I constantly remind students that programming is a team sport." CreationDate="2017-07-04T13:48:49.587" UserId="283" />
  <row Id="2574" PostId="1385" Score="0" Text="All of my students live off-campus - we're a community college - so I plan their pair programming so that most of it can be done during class time." CreationDate="2017-07-04T15:18:05.937" UserId="1564" />
  <row Id="2495" PostId="1386" Score="0" Text="I don't understand. What are POTS? I mean, other than stovetop items." CreationDate="2017-07-03T15:14:43.307" UserId="27" />
  <row Id="2496" PostId="1386" Score="0" Text="Is it clear enough with that edit?" CreationDate="2017-07-03T15:16:44.297" UserId="41" />
  <row Id="2497" PostId="1386" Score="0" Text="Yes, thank you :) I grew up with one (still have one, actually), but never knew it was called that." CreationDate="2017-07-03T15:18:01.460" UserId="27" />
  <row Id="2502" PostId="1387" Score="1" Text="Welcome to [cseducators.se]!  I'm not so sure I agree with you, though, that *&quot;The programmer's `x == x**2` is the exact same statement as the mathematics $x=x^2$&quot;*.  The first is a test, and the second is an axiomatic constraint." CreationDate="2017-07-03T15:46:26.203" UserId="27" />
  <row Id="2507" PostId="1387" Score="0" Text="It's not an axiomatic constraint.  I can very well stipulate in a mathematics context that $x=x^2$ is False." CreationDate="2017-07-03T16:19:12.777" UserId="1661" />
  <row Id="2509" PostId="1387" Score="0" Text="For instance, suppose one wants to prove that &quot;If $x \in \{0,1\}$ then $x=x^2$&quot;, one could set out to prove the contrapositive:  &quot;Suppose that it is not the case that $x=x^2$, then $x^2-x=0$ is False, so $x(x-1)=0$ is False, so $x-1=0$, $x=0$ are False, therefore, $x \in \{0,1\}$ is False.&quot;" CreationDate="2017-07-03T16:24:06.867" UserId="1661" />
  <row Id="2510" PostId="1387" Score="0" Text="Disclaimer:  I am a mathematics educator, and when I use the statement $x=x^2$, I very much mean that that is a statement that can either be True or it can be False, depending on the value of $x$." CreationDate="2017-07-03T16:25:57.467" UserId="1661" />
  <row Id="2504" PostId="1388" Score="0" Text="It sounds like your students don't sit at one screen with one &quot;driving&quot; and the other &quot;navigating&quot; (the classic version), but something different. Can you spell out the scenario a bit? Thanks in advance." CreationDate="2017-07-03T15:58:06.900" UserId="1293" />
  <row Id="2505" PostId="1388" Score="0" Text="@Buffy what students do is like this: One writes code, the other sits next to the first one, and reviews it **as it's being written**. With that in mind, I hope my answer makes more sense." CreationDate="2017-07-03T16:03:07.820" UserId="150" />
  <row Id="2506" PostId="1388" Score="1" Text="Closer to the standard, then. But if I'm &quot;navigating&quot; I constantly make comments, about variable names, maybe, or structure, or needed tests. Sometimes just to remind the &quot;driver&quot; of past decisions. The advantage of two is, partly, that the driver takes a microscopic view of the problem, but the navigator, with less responsibility takes a wider, overall view. This has been observed to emerge in practice and doesn't need to be taught. But there should be a continuing conversation, so that the navigator doesn't take the narrow view also. If the driver gets stuck they should switch roles." CreationDate="2017-07-03T16:11:20.760" UserId="1293" />
  <row Id="2689" PostId="1389" Score="0" Text="@nocomprende well the exit statement is a simple check: `student.getLearntSubjects().contains(&quot;Recursion&quot;);`" CreationDate="2017-07-06T11:36:24.790" UserId="150" />
  <row Id="2511" PostId="1390" Score="0" Text="One post in the community of practice for NSF-funded CS10k projects https://csforallteachers.org/event/webinar-preparing-students-for-the-ap-csp-exam links to a one-hour recording on this topic presented by Dan Garcia. It will be interesting to see how the Stack Exchange Q&amp;A gamified format compares with the traffic and quality in other community of practice fora." CreationDate="2017-07-03T16:39:33.457" UserId="765" />
  <row Id="2528" PostId="1390" Score="0" Text="Could you let people in related fora know about this one, if appropriate and you haven't already?" CreationDate="2017-07-03T18:54:59.830" UserId="283" />
  <row Id="2534" PostId="1390" Score="1" Text="By preparing for the AP Exam, do you mean just the multiple choice exam? Are you including Explore and Create in this question in terms of exam prep? If the latter, each of those tasks probably necessitates its own question. If the former, I'd clarify that this is MC-only exam prep." CreationDate="2017-07-03T20:01:33.973" UserId="76" />
  <row Id="2698" PostId="1391" Score="0" Text="This is an excellent answer to a question that I did not ask. Why don't you ask that question and use this answer? (It's okay to answer your own question.)" CreationDate="2017-07-06T14:11:41.383" UserId="283" />
  <row Id="2521" PostId="1392" Score="0" Text="like LINQ? I like the idea," CreationDate="2017-07-03T18:07:58.037" UserId="150" />
  <row Id="2522" PostId="1392" Score="0" Text="@ItamarG3 -- I'm a big fan of LINQ, yeah, though I admit I wasn't thinking about it at first when I came up with the SQL exercises idea." CreationDate="2017-07-03T18:30:51.830" UserId="732" />
  <row Id="2524" PostId="1392" Score="1" Text="What I wouldn't do to change the school curriculum to C#..." CreationDate="2017-07-03T18:44:08.933" UserId="150" />
  <row Id="4208" PostId="1392" Score="0" Text="Creating a Domain Specific Language is one of my favorite solutions to some types of problems." CreationDate="2017-07-13T19:44:27.753" UserDisplayName="user737" />
  <row Id="2612" PostId="1397" Score="0" Text="If you could collect that information, that would make a great publication/resource." CreationDate="2017-07-05T12:40:11.547" UserId="283" />
  <row Id="10054" PostId="1397" Score="0" Text="That is probably best asked at the [AP Computer Science](https://apcommunity.collegeboard.org/group/apcompsci) site, where you need to create an account. They have a regular message board that is divided up into interest groups and you can be part of as many as you like." CreationDate="2017-07-03T23:57:43.833" UserId="1293" />
  <row Id="2565" PostId="1398" Score="1" Text="Let me suggest (a) that the purpose of the exercise was to produce learning, not a program, and (b) I hope that the instructor was wise enough to see the picture you describe and act appropriately. Perhaps you both missed point (a). When I PP with a novice I realize that I have a different job then when doing it with a pro. But, even in a workplace situation, bringing the novice up to speed benefits everyone in the long run - but it is problematic if the manager (or teacher) doesn't agree." CreationDate="2017-07-04T12:45:13.817" UserId="1293" />
  <row Id="2571" PostId="1398" Score="1" Text="@nocomprende Hmmm. maybe you, Bennett Brown, and I should start a new school. =)" CreationDate="2017-07-04T13:29:18.750" UserId="1293" />
  <row Id="2567" PostId="1399" Score="0" Text="Interesting. My experience is quite different. I find that I don't work especially effectively with someone I'm emotionally attached to in some situations (teaching/learning situations). I don't know whether that is just my problem or is common. I can program with close friends, though, especially if we have a sort of mind-meld on goals and strategies. That was more your situation, I think. But the industry experience doesn't say that the mind-meld is essential to PP." CreationDate="2017-07-04T12:51:24.853" UserId="1293" />
  <row Id="2557" PostId="1402" Score="0" Text="If I can paraphrase part of your answer, I think you suggest that reaching every student requires a multi-dimensional approach, both the techniques used and the personal dimension. Is that fair?" CreationDate="2017-07-04T11:09:48.617" UserId="1293" />
  <row Id="2561" PostId="1402" Score="0" Text="Hi Peter! Welcome to [cseducators.se]! Thank you so much for choosing to contribute your expertise. I hope to see you around the site more!" CreationDate="2017-07-04T12:18:31.203" UserId="58" />
  <row Id="2563" PostId="1402" Score="0" Text="@Buffy I think techniques are less important; love of the subject and some (limited, unspecified) people skills are. (That resembles what I suppose makes a good psychologist: the specific methodology is almost irrelevant; what counts are integrity, authenticity, empathy and personality.)-- That said, I thought your question was about convincing your colleagues? ;-)" CreationDate="2017-07-04T12:29:17.537" UserId="1675" />
  <row Id="2564" PostId="1403" Score="0" Text="Hi TOOGAM! Welcome to [cseducators.se]! Thank you for this useful addition to the existing answers!" CreationDate="2017-07-04T12:36:56.097" UserId="58" />
  <row Id="2555" PostId="1404" Score="0" Text="Are you saying that it _should not_ be a goal?" CreationDate="2017-07-04T11:04:25.700" UserId="1293" />
  <row Id="2566" PostId="1404" Score="1" Text="I feel this is rather unclear whether or not it answers the question." CreationDate="2017-07-04T12:49:47.060" UserId="150" />
  <row Id="2591" PostId="1404" Score="0" Text="@Buffy, No, it should be your goal (until you find a better one), but it shouldn't necessarily be your colleagues' goal. They may think slightly differently than you do." CreationDate="2017-07-04T19:16:13.350" UserId="1195" />
  <row Id="2592" PostId="1404" Score="1" Text="@StephanBranczyk Let me rephrase the question here, then. What would it take to convince you that it should be _your_ goal. I'll accept any (kind) answer." CreationDate="2017-07-04T19:18:32.340" UserId="1293" />
  <row Id="2594" PostId="1404" Score="0" Text="Usually, I become a better champion for an idea if I believe I'm the one who came up with it myself. That's why I think it's important to find out what are the current goals and current values of your colleagues first and foremost. Once you know what those are, then you can help shape those goals of theirs to become more like yours. But ultimately, their goals may never be truly identical to yours, even if you help shape them." CreationDate="2017-07-04T19:28:06.503" UserId="1195" />
  <row Id="2560" PostId="1405" Score="0" Text="I, personally, would never suggest abandoning the best students. Nor do I seek darling awards, etc. I seek effectiveness and ways to achieve it. In fact, I was generally perceived as being more effective with the superstars and helped many of them to shine brightly. So, my personal problem was to find ways to include the others in the game. I think I (mostly) agree that lack of application in a student is the most difficult to work with and likely requires outside intervention. But students can find themselves behind and some methods leave them there. Avoidable? I'm seeking the _how_" CreationDate="2017-07-04T11:49:17.727" UserId="1293" />
  <row Id="2562" PostId="1405" Score="0" Text="Hi Richie! Welcome to [cseducators.se]! Thank you for contibuting your expertise, even when people may not agree with you." CreationDate="2017-07-04T12:24:30.800" UserId="58" />
  <row Id="2657" PostId="1406" Score="1" Text="Pupils do not improve when given summative feedback (it even cancels out the effect of any formative feedback), but they do when given formative feedback — I think I read this is evidence based teaching, G. Petty. Therefore give formative feedback: tell them what went well, and even better if, **but do not give them a grade**. Give them nothing that allows them to compare with each other. But give them info so they know which areas to study. I have an idea for a pie chart, where biggest area is proportional to study effort (not tried it yet)." CreationDate="2017-07-05T20:54:21.560" UserId="204" />
  <row Id="2596" PostId="1407" Score="0" Text="I'm not so much in agreement with your first paragraph, but have successfully used a variation on your technique for years. It provides encouragement for the willing and a path past a brief brain-freeze. Total Approval overall." CreationDate="2017-07-04T19:55:02.483" UserId="1293" />
  <row Id="2609" PostId="1408" Score="3" Text="BTW, it's not unusual; starting out is rough for virtually everybody. I think you'll find that you've arrived at a good place to get help, though. (Plus, we're glad to have you.) Welcome to [cseducators.se]!" CreationDate="2017-07-05T11:18:19.583" UserId="27" />
  <row Id="2634" PostId="1408" Score="0" Text="I am a newly qualified teacher, today I tought 3 classes yr7 (11-12years old), and yr8(23-13 years old). We did a code combat hour of code. There are a few bugs, the the first 5 minutes getting started was a pain. One of the buttons on the web page needs clicking 5 to 10 times. But with clear instruction, and help they did it. After that it was a good lesson. Almost all made good progress. One in each class, was refusing to enguage (zero resilience, and one hiccup and they gave up). Everyone else did it (some with help)." CreationDate="2017-07-05T16:51:18.287" UserId="204" />
  <row Id="13586" PostId="1408" Score="0" Text="Hi. Good luck. 12 year olds are just at the early stages of being able to abstract concepts to the level required for programming (at all), so some will struggle seriously while others will take to it like a duck to water. Take it in small steps, choose problems that they can relate to (my 8 yo son is doing Minecraft mods in Java). One day you'll be thinking you're wasting time and resources and they aren't learning anything, then you'll overhear them having an intelligent conversation about programming with someone else" CreationDate="2018-09-30T23:55:09.060" UserId="1537" />
  <row Id="2606" PostId="1410" Score="3" Text="Find something that requires that criticism to be taken on-board to show them the positives that come from improving their code - e.g. if your students are having problems with correct indentation: _&quot;This week class, we are going to introduce ourselves to python&quot;._" CreationDate="2017-07-05T11:05:06.887" UserId="993" />
  <row Id="2614" PostId="1410" Score="0" Text="I think that Baldrickk has right, if students aren't really into it aniway they won't really listen feedbacks, but if the feedback become a class, they don't have the choice. And it avoid any form of criticism" CreationDate="2017-07-05T13:44:23.547" UserId="1375" />
  <row Id="2621" PostId="1410" Score="5" Text="I always try to explain to my interns what they are doing wrong, with a calm, patient and encouraging tone. Like _&quot;You see? Here you are reversing the array twice... :)&quot;_ or _&quot;It's not a huge deal, but here you are not validating this input, so you risk throwing an undocumented exception..._&quot; but they always took it personal. Stumped, for weeks, I tried many tones and formulations. In the end, what did the trick for me was to stop finishing each sentence with _&quot;...like an idiot.&quot;_" CreationDate="2017-07-05T14:49:22.917" UserId="994" />
  <row Id="2627" PostId="1410" Score="1" Text="Can you give an example of an interaction that results in a defensive or discouraged response from a student? I would love to add something helpful, but I am having trouble working in the abstract." CreationDate="2017-07-05T15:37:01.247" UserId="27" />
  <row Id="2659" PostId="1410" Score="2" Text="I think the general advice for code reviews in the industry is applicable here. Criticize the code, not the coder. &quot;A function call would be cleaner here&quot; instead of &quot;You should have used a function&quot;... I'm guessing most of these people are on the way to becoming junior software engineers, so using industry advice here would be really useful." CreationDate="2017-07-05T22:05:49.660" UserId="1715" />
  <row Id="2669" PostId="1410" Score="0" Text="Don't waste time judging indentation. Unless you're teaching python,  the editor will do the formatting for you. At one place I worked we had a tool called SONAR, which did automated code reviews,  it was derisively referred to as &quot;some other nerds aesthetic requirements&quot; . However,  using tools like find bugs (java) to guide you towards common bugs is a useful exercise." CreationDate="2017-07-06T04:13:48.183" UserId="1537" />
  <row Id="2691" PostId="1410" Score="0" Text="I think you can use your own code as example. You can get an old code and new code and compare the improvement with the class.&#xA;&#xA;This shows that you code will be better with knowledge and how it's importante to be critical with your own code." CreationDate="2017-07-06T12:09:36.930" UserId="1727" />
  <row Id="2723" PostId="1410" Score="1" Text="I like to tell people who are not listening when I do code reviews: Michael Jordan had a coach." CreationDate="2017-07-06T21:21:06.140" UserId="1742" />
  <row Id="2761" PostId="1410" Score="0" Text="Don't expect this to be easy; lots of professionals have trouble with this. A few have trouble *giving* code criticism constructively." CreationDate="2017-07-07T14:13:48.643" UserId="1139" />
  <row Id="2800" PostId="1410" Score="0" Text="You _must_ be able to actually demonstrate that the code review is worth the effort to them." CreationDate="2017-07-07T18:09:53.853" UserId="1213" />
  <row Id="2825" PostId="1410" Score="1" Text="Pointing out that if their test data had 2M datum rather than 1k, their solution would take 100 years to finish, sometimes helps. On the next assignment, give them a test set with 2M datum." CreationDate="2017-07-07T21:43:34.087" UserId="1777" />
  <row Id="2827" PostId="1410" Score="0" Text="Also, I offered 5 bonus points on the next test to any student that found a bug in my code, or a way to make it more efficient. You might be surprised how eager some students are to find issues with the professor's code. I happily gave out lots of bonus points." CreationDate="2017-07-07T21:50:35.567" UserId="1777" />
  <row Id="2624" PostId="1412" Score="0" Text="Gosh, I used to make shapes on the terminal with asterisks. Halcyon days." CreationDate="2017-07-05T15:08:23.290" UserDisplayName="user737" />
  <row Id="7706" PostId="1412" Score="0" Text="@ZachGalant, you may want to check out this question: https://cseducators.stackexchange.com/questions/3441/teaching-a-blind-high-school-student" CreationDate="2017-08-31T20:30:50.920" UserId="27" />
  <row Id="2607" PostId="1414" Score="17" Text="I agree, but you can go further. Instead of &quot;Your program has unclear variable names here&quot;, try &quot;_The program_ has unclear variable names here&quot;. Make it all about the program. Reward Revision is brilliant and should be a pedagogical pattern. But I'd dispute your &quot;restriction&quot; to secondary level. You can do it with doctoral students (imo) in their preparatory work. And &quot;reward&quot; can be more general than points." CreationDate="2017-07-05T11:05:32.347" UserId="1293" />
  <row Id="2608" PostId="1414" Score="1" Text="The Embrace Correction Pedagogical Pattern is very similar to Reward Revision: &quot;Give the student the chance to improve their artifacts.&quot;" CreationDate="2017-07-05T11:10:36.830" UserId="1293" />
  <row Id="2613" PostId="1414" Score="0" Text="I was also thinking that &quot;our program&quot; and what &quot;we&quot; might want to do might work" CreationDate="2017-07-05T13:23:31.860" UserId="967" />
  <row Id="2615" PostId="1414" Score="10" Text="@Buffy I'm amused that in the comment here, instead of saying &quot;I agree, but this answer can go further&quot; it says &quot;I agree, but __you__ can go further.&quot; It shows how difficult it actually is to provide this sort of criticism!" CreationDate="2017-07-05T14:10:28.077" UserId="177" />
  <row Id="2630" PostId="1414" Score="0" Text="@enderland I'm amused by _your_ comment here. I think &lt; opinion &gt; that when you give positive advice and encouragement _you_ can use _you_ just fine. But I take your meaning, and thanks." CreationDate="2017-07-05T16:19:05.677" UserId="1293" />
  <row Id="2653" PostId="1414" Score="6" Text="I might go one step further than **Avoid &quot;you&quot; statements**.  I think would I could recommend is to **use &quot;I&quot; statements**.  Say things like, &quot;I am confused by this variable name&quot;.  This shows that the feedback is somewhat subjective." CreationDate="2017-07-05T18:40:08.247" UserId="1710" />
  <row Id="2661" PostId="1414" Score="0" Text="Another reason to avoid *you* is in real world they wll be modifying existing code. “hey, it wasn’t **my** variable name! It was like that already and I followed consistently.”" CreationDate="2017-07-06T00:34:05.243" UserId="1116" />
  <row Id="2670" PostId="1414" Score="0" Text="Unless you're coding python,  don't bother judging indentation. Modern editors take care of that for you.   Ctrl+a ctrl+shift+f will strictly style code to language preferred spec in most languages in my preferred (free) editor." CreationDate="2017-07-06T04:17:50.547" UserId="1537" />
  <row Id="2671" PostId="1414" Score="0" Text="@pojo-guy But it should be the *author* pressing the keys to do the formatting (before submitting!), not the *reviewer.* If the code is badly indented by review time, it certainly merits pointing out." CreationDate="2017-07-06T06:26:46.303" UserId="992" />
  <row Id="2690" PostId="1414" Score="0" Text="Since code reviews are typically done in the editor on a projector,  it's not unusual to do that at the code review if it is needed (or at all). Spacing is just something that doesn't get talked about in a real code reviews in languages where spacing has no semantic meaning. Python and COBOL are different because spaces change the logic of the program." CreationDate="2017-07-06T11:45:27.883" UserId="1537" />
  <row Id="3864" PostId="1414" Score="2" Text="@sixtyfootersdude - I want to add a caveat to your comment. For me, as a tall white male, if I say &quot;I am confused by...&quot; then students will take that to mean they should probably revise their code (as you suggested). But if one of my female colleagues said that, students might take it as her actually being confused, and it might feed into their biases against her. In the end, it could cause more student resistance against her. I like Buffy's wording best." CreationDate="2017-07-08T15:41:57.717" UserId="294" />
  <row Id="2697" PostId="1417" Score="0" Text="This is an excellent answer to a question that I did not ask. Why don't you ask that question and use this answer? (It's okay to answer your own question.)" CreationDate="2017-07-06T14:11:21.683" UserId="283" />
  <row Id="2610" PostId="1418" Score="1" Text="I'm definitely the goofy, informal sort of professor, although I have a background that gives me credibility." CreationDate="2017-07-05T12:38:07.623" UserId="283" />
  <row Id="2611" PostId="1418" Score="0" Text="yes, of course. Goofy and Credible aren't inconsistent. But you need to build your myth carefully and slowly if you are new to the game. I took Mike Clancy as a role-model" CreationDate="2017-07-05T12:39:33.303" UserId="1293" />
  <row Id="2662" PostId="1418" Score="0" Text="What is “one true method”?" CreationDate="2017-07-06T00:36:23.220" UserId="1116" />
  <row Id="2663" PostId="1418" Score="0" Text="Reading code with poor structure doesn't seem to teach real-world coders to do better, or to even see the problem in my experience.  Why would it help for students?  It just teaches them that it’s normal for code to need decyphering to figure out, before working on it." CreationDate="2017-07-06T00:39:31.090" UserId="1116" />
  <row Id="2681" PostId="1418" Score="0" Text="@JDługosz Sorry, I was a bit cryptic. I was referring to a complex task that implements it in one class with one method. Actually, I've had some success with discussing such poor structure code, but also showing a better way." CreationDate="2017-07-06T09:22:14.793" UserId="1293" />
  <row Id="2620" PostId="1419" Score="1" Text="What is the post office box model? I have never encountered that. My very first first lesson involves a stack." CreationDate="2017-07-05T14:47:12.267" UserId="27" />
  <row Id="2629" PostId="1419" Score="1" Text="I use the &quot;post office&quot; model to explain a lot of CS concepts; from DNS &amp; IPs to memory. You need a (even if imperfect) model that people can relate too. These days, students may relate better to mobile phones; each one has a unique address, you can set up linked lists (call forwarding) etc." CreationDate="2017-07-05T16:13:45.287" UserId="35" />
  <row Id="2645" PostId="1419" Score="0" Text="For a growing list of analogies, try [tag:teaching-analogy]." CreationDate="2017-07-05T18:03:21.397" UserId="104" />
  <row Id="2738" PostId="1419" Score="1" Text="When my daughter was 6 I introduced her to Ruby and Postgresql because she wanted to know what i did at work. She soon lost interest, but the analogy I used for her was &quot;cubbies&quot; like she stored her stuff in at kindergarten. Cubbies come in blocks, which are assembled into larger installations. A database is just a very large wall of cubbies, and the DML side of SQL is about getting stuff into or out of the cubbies. DDL side of SQL is making the rules about what is allowed to be put into the cubbies." CreationDate="2017-07-07T02:59:21.160" UserId="1537" />
  <row Id="2796" PostId="1419" Score="1" Text="Instead of using abstract words to describe what it is, instead describe what it solves.  &quot;You want to save information from one invocation of your program to the next&quot;.  &quot;You don't have memory enough for all your data.&quot;  &quot;You need to do extract and generate data without writing a new program for it every time&quot;.  The list is endless." CreationDate="2017-07-07T17:49:51.120" UserId="1213" />
  <row Id="3886" PostId="1419" Score="0" Text="@ThorbjørnRavnAndersen right, that is a more direct route, but I am trying to give the students something similar that they can relate to, but also build more ideas on. I am looking at the concept of a &quot;notional machine&quot; as very much like what I want to convey." CreationDate="2017-07-08T18:48:03.103" UserDisplayName="user737" />
  <row Id="3899" PostId="1419" Score="0" Text="My experience is that you need something to relate to. Abstract notions are not good for that." CreationDate="2017-07-08T23:16:21.957" UserId="1213" />
  <row Id="3904" PostId="1419" Score="0" Text="@ThorbjørnRavnAndersen how do you relate to databases and SQL?" CreationDate="2017-07-08T23:58:06.330" UserDisplayName="user737" />
  <row Id="3909" PostId="1419" Score="0" Text="@nocomprende  &quot;What problems can I use this technology to solve?&quot; &quot;How do I talk to this technology so I can solve the problems I have?&quot;    Then when you have understood the usefulness, you can start generalizing." CreationDate="2017-07-09T00:37:06.230" UserId="1213" />
  <row Id="3939" PostId="1419" Score="0" Text="@ThorbjørnRavnAndersen I am guessing that few people really *require* databases in their personal lives, but they need to learn about them because they are trying to get jobs (where I work) and everyone already knows that they are useful. I just want them to relate to the essential qualities of databases. Maybe I am looking for something very different from a 'metaphor' here, but I don't know what else to call it. Do you?" CreationDate="2017-07-10T12:20:21.157" UserDisplayName="user737" />
  <row Id="3949" PostId="1419" Score="0" Text="@nocomprende I would expect Computer Science educators to educate people who program.  If I didn't yet know what a database is, and program, I would like to learn which of my problems it can solve." CreationDate="2017-07-10T16:12:51.577" UserId="1213" />
  <row Id="3950" PostId="1419" Score="0" Text="@ThorbjørnRavnAndersen but before you know anything (about a subject), the first step is to take it on faith that there is something worthwhile to be learned, or else you would never have come in the door. My students don't know, they don't even know what they don't know, they have no problems, and nothing to relate to. That is why I put the [tag:introductory-lesson] tag on this. How do you introduce something to a clueless newbie? It is like pouring the foundation of a building: it is not fancy, or pretty or interesting, it just gets you off the ground." CreationDate="2017-07-10T16:26:04.657" UserDisplayName="user737" />
  <row Id="4385" PostId="1419" Score="0" Text="@pojo-guy would you consider making your comment into an answer?" CreationDate="2017-07-16T16:45:00.053" UserId="919" />
  <row Id="4386" PostId="1419" Score="0" Text="@AIG would you consider making your comment into an answer?" CreationDate="2017-07-16T16:45:15.520" UserId="919" />
  <row Id="4402" PostId="1419" Score="0" Text="I put the [tag:adult-education] tag in because I teach adults, and one of the first answers uses a childs game. Now we have an answer for first graders. Someone saw fit to remove the tag. What do I tell people who are older than I am and know what a spreadsheet is?" CreationDate="2017-07-16T22:06:31.290" UserDisplayName="user737" />
  <row Id="2625" PostId="1420" Score="1" Text="I have a test question which asks students to flowchart a number guessing game." CreationDate="2017-07-05T15:09:51.693" UserDisplayName="user737" />
  <row Id="2679" PostId="1420" Score="2" Text="I eventually went with creating a little text adventure to start with, with each kid creating their own. Thanks for the idea!" CreationDate="2017-07-06T09:04:57.927" UserId="1688" />
  <row Id="2693" PostId="1420" Score="1" Text="@kosciCZ, you're bringing me back to my days of Zork! :-)" CreationDate="2017-07-06T13:11:59.450" UserId="1529" />
  <row Id="2626" PostId="1422" Score="0" Text="It seems as though this doesn't actually address the question asked: *&quot;Can anyone recommend a free online source where she can pick up, and ideally practice, recursion?&quot;*. Could you add some resource from which a student can learn recursion, as the question states?" CreationDate="2017-07-05T15:31:12.323" UserId="150" />
  <row Id="2628" PostId="1423" Score="8" Text="We're always glad to have thoughtful responses from the student perspective. Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-05T16:05:28.553" UserId="27" />
  <row Id="2826" PostId="1423" Score="0" Text="This is a great response. I wish I had more feedback like this - constructive, from the student's point of view. Teaching is hard - most of us *want* to be better." CreationDate="2017-07-07T21:46:31.190" UserId="1777" />
  <row Id="2743" PostId="1425" Score="1" Text="your examples at the link here https://cseducators.stackexchange.com/questions/130/how-to-teach-why-indentation-is-important/132#132 are informative!" CreationDate="2017-07-07T08:05:33.087" UserId="1759" />
  <row Id="2654" PostId="1427" Score="0" Text="Do you have a projector at the moment, or just a whiteboard? If the choice is whiteboard vs SMART board, it's different to projector vs SMART board, of course." CreationDate="2017-07-05T18:49:19.493" UserId="2" />
  <row Id="2656" PostId="1427" Score="0" Text="A similar question about when a blackboard should be used instead of a projector is [here](https://cseducators.stackexchange.com/q/728/58)." CreationDate="2017-07-05T20:46:40.643" UserId="58" />
  <row Id="2680" PostId="1427" Score="0" Text="I currently have a whiteboard and a projector which projects onto another whiteboard." CreationDate="2017-07-06T09:10:51.170" UserId="938" />
  <row Id="2682" PostId="1430" Score="1" Text="If your CS curriculum depends on the specific version of a specific programming language, it is broken. Or not a CS curriculum at all. IMHO." CreationDate="2017-07-06T09:34:27.660" UserId="842" />
  <row Id="2684" PostId="1430" Score="0" Text="@Raphael it most certainly doesn't depend on a specific version, but I'm wondering what are the benefits of upgrading to java 9, specifically because of the changes in comparison to previous versions." CreationDate="2017-07-06T10:28:43.120" UserId="150" />
  <row Id="2685" PostId="1430" Score="1" Text="For me, leading by example would be enough. You don't use outdated stuff. (I remember a prof explaining concurrency with Java 1.4 -- in 2008.) Maybe not hot-off-the-press stuff, either, (why?) so there's a trade-off here. (What *would* be interesting is to compare the versions together with the students. Why were certain changes made, which problems are being solved? That's bound to lead to insight.)" CreationDate="2017-07-06T11:06:38.870" UserId="842" />
  <row Id="2737" PostId="1430" Score="0" Text="As much as i am in favor of using the latest and greatest, another reality is that much of computer programming is maintenance of old code. I recently upgraded a system that was still running java 2, and have maintained and written new COBOL code in the past 5 years. Figuring out how to work without lambda's might be good for an advanced exercise." CreationDate="2017-07-07T02:53:15.930" UserId="1537" />
  <row Id="6760" PostId="1430" Score="0" Text="Leading edge is often bleeding edge. As an educator I hesitate to update to the &quot;latest/greatest&quot; at the start of the academic year (for us). I'd rather wait and see that things are working before committing to it. Updates rarely have justified that risk for us, and I don't think our students are missing out on anything working on v. n-1 (where n is the latest version) for a bit longer. YMMV." CreationDate="2017-08-08T16:51:05.813" UserId="433" />
  <row Id="6761" PostId="1430" Score="0" Text="@Levon Interesting point." CreationDate="2017-08-08T16:51:45.613" UserId="150" />
  <row Id="11734" PostId="1430" Score="0" Text="@ItamarG3 -- do you mind if I update your post so it focuses on Java 9, 10, and (eventually) 11? Java 10 came out today + support for Java 9 just ended, so I figured rather then having a new &quot;should I switch to Java x&quot; post for each new release, we have just one, at least up until the next long-term support release (which is apparently Java 11)." CreationDate="2018-03-21T19:41:08.303" UserId="732" />
  <row Id="11735" PostId="1430" Score="0" Text="@Michael0x2a all right. Just be sure to change your answer to fit." CreationDate="2018-03-21T19:47:16.860" UserId="150" />
  <row Id="2677" PostId="1431" Score="0" Text="If you use these practices in industry, you're making bad software. My experience is in security, where we take quality seriously — your industry may be more ok with bugs. There are many, many cases where useful review feedback is “I can't see a bug, but the way you're writing it is dodgy, you should write clearer code” (with specifics as to how it's dodgy and how to make it clear of course). This comes from experience, not from pointing out a specific defect. It should be up to the coder to prove their code correct, not up to the reviewer to prove it wrong." CreationDate="2017-07-06T08:35:10.310" UserId="124" />
  <row Id="2713" PostId="1431" Score="0" Text="So your diverging experience makes mine &quot;bad software&quot;? While I appreciate your input on the matter, you're making generalizations from an admitted point of specialty. If you have to ask if other parts of the industry care about bugs less than security, I don't know what to tell you other than yes, the industry in-general is going to care less about bugs than the security layers, _naturally_, with few but notable exceptions. Lastly, it's the coder's _unit tests_ that proves their code works. CR is _not_ the place to prove your code works, but proves it passes muster." CreationDate="2017-07-06T17:56:08.990" UserId="1193" />
  <row Id="2717" PostId="1431" Score="1" Text="+1 for &quot;showing them how you can make their code even better&quot;" CreationDate="2017-07-06T19:24:27.910" UserId="283" />
  <row Id="2728" PostId="1431" Score="0" Text="@kayleeFrye_onDeck Unit tests prove that the code works *in some cases*, which is a far cry from the code working. I'm aware that some parts of the industry don't care about quality. I don't want to train the next generation of programmers in that spirit." CreationDate="2017-07-06T22:32:24.940" UserId="124" />
  <row Id="2729" PostId="1431" Score="0" Text="While apathy can lead to bugs, the existence of bugs is not proof of apathy. I said they care _less_, not that they don't care, and yes, code reviews are _not_ where you prove your code works. Unit tests, integration tests, functional tests/sample apps, you name it; that's where you verify code _works_. If you're deep-diving the code for bug and security analysis, you're describing a _code audit_, not a code review. They're quite different in their scope of responsibility and depth of analysis." CreationDate="2017-07-06T23:09:29.813" UserId="1193" />
  <row Id="2730" PostId="1431" Score="0" Text="Btw, I'm not trying to brow-beat you on the objective importance of quality in code. It's _very_ important, but it's not everything _all the time_. You work in security, so of course you'd be biased about it, and you can't help that easily. I wouldn't expect it otherwise. Medical equipment, security layers, aviation systems, weapons systems, automated vehicle solutions -- those things are life &amp; death code, and that stuff gets its own umbrella of quality requirements well outside the normal bounds of responsibility of code quality. I would never discourage quality code." CreationDate="2017-07-06T23:19:52.297" UserId="1193" />
  <row Id="2731" PostId="1431" Score="0" Text="And lastly, I usually take off kid-gloves for code-audits. There's no point in not pointing out flaws and vulnerabilities when someone requests in-depth analysis of your code. How I interact with someone during an audit is not the same as a review, so if I were to take your feedback and put in the scope of an audit, I believe we would be in agreement on the level of coverage and type of feedback returned." CreationDate="2017-07-06T23:22:41.240" UserId="1193" />
  <row Id="2673" PostId="1433" Score="0" Text="Now that's one benefit I had forgotten about the SMART board, and perhaps it's only benefit over a whiteboard &amp; projector combination. The annotations _can_ be saved as an image, or series of images, on the computer that controls the board. The resultant image(s) can be edited in Paint, etc., later." CreationDate="2017-07-06T06:43:25.840" UserId="104" />
  <row Id="2667" PostId="1434" Score="0" Text="Applets depend on the NSAPI interface,  which is considered a security risk, and is no longer supported by major browsers.  (Since IE11 is going to be the last of its lineage,  supplanted by Edge,  we can consider it dead for practical purposes.) The Java Webstart mechanism is less convenient to the user, but much more secure." CreationDate="2017-07-06T03:58:05.367" UserId="1537" />
  <row Id="2672" PostId="1434" Score="3" Text="Excellent details and great information. Very informative and helpful." CreationDate="2017-07-06T06:38:15.233" UserId="104" />
  <row Id="2674" PostId="1434" Score="0" Text="What you wrote in the API section (as well as JShell and module system, but that's a different comment) is very correct. I had not thought of using the  Process API for tooling, but now I can see all sorts of interesting things the school can do. And as for Stream, well, it's planned all along, and now I have a clearer image of how it can be done properly." CreationDate="2017-07-06T06:45:34.223" UserId="150" />
  <row Id="2664" PostId="1435" Score="1" Text="I feel like you're drawing a distinction without a difference here, unless you define what you mean by these terms. Nevertheless, we are always glad to have a new voice join us here. Welcome to [cseducators.se]!" CreationDate="2017-07-06T01:34:58.110" UserId="27" />
  <row Id="2665" PostId="1435" Score="1" Text="I simply feel that the best way to learn is by 'learning' rather than being taught to. Exposing flaws and alternatives stimulates critical thinking and would hardly be considered offensive by anyone" CreationDate="2017-07-06T01:50:44.773" UserId="63" />
  <row Id="2676" PostId="1436" Score="2" Text="You mean, start every review by “… we understand and truly believe that everyone did the best job they could …”? If I was at the receiving end of this, I'd feel like you were saying “you did a bad job, but it's ok, it's just because you're an idiot”. It doesn't get the team past blame, quite the contrary." CreationDate="2017-07-06T08:32:31.883" UserId="124" />
  <row Id="2727" PostId="1436" Score="0" Text="@Gilles yes, it is very possible for the same words to mean different things to different people and groups. Culture makes the difference." CreationDate="2017-07-06T22:30:05.647" UserDisplayName="user737" />
  <row Id="3898" PostId="1436" Score="0" Text="&gt; We see things not as they are, but as we are - Anaïs Nin, various" CreationDate="2017-07-08T22:07:22.490" UserId="1720" />
  <row Id="2678" PostId="1437" Score="2" Text="This is an interesting view. Welcome to [cseducators.se], I hope we'll be hearing more from you." CreationDate="2017-07-06T08:39:42.977" UserId="150" />
  <row Id="2704" PostId="1444" Score="4" Text="One word: interaction" CreationDate="2017-07-06T15:23:54.817" UserId="283" />
  <row Id="2705" PostId="1444" Score="1" Text="I totally agree. It's great when there's more interaction. Learning all their names helps. But I find some students are just not comfortable participating." CreationDate="2017-07-06T15:37:51.883" UserId="1529" />
  <row Id="2747" PostId="1444" Score="1" Text="Great talk on the topic: https://www.youtube.com/watch?v=5jmN_tBS0t4" CreationDate="2017-07-07T09:12:21.693" UserId="1762" />
  <row Id="2702" PostId="1445" Score="2" Text="Or better: give up on powerpoint altogether. Or pass out the slides on paper before the lecture so your students don't have to copy them and can write directly on them. Otherwise good advice. Make the students active participants, not passive &quot;consumers&quot;" CreationDate="2017-07-06T14:53:20.013" UserId="1293" />
  <row Id="2714" PostId="1445" Score="1" Text="I project pages from the textbook and write on the screen (which is a whiteboard) or actually underline things in the book (highlighting doesn't always project or copy well). So they can then look at their book and underline or make notes, too. Maybe this is old school, but they all have the book." CreationDate="2017-07-06T18:30:18.017" UserDisplayName="user737" />
  <row Id="2701" PostId="1446" Score="0" Text="Thanks. I will look into that. I've seen hardware devices that use this technique. The fact that you can bring your own mobile device (or classroom computer) makes it more usable. This would be helpful for my earlier lectures that discuss concepts and terms." CreationDate="2017-07-06T14:26:33.983" UserId="1529" />
  <row Id="2706" PostId="1446" Score="0" Text="My personal experience has been less than positive with this. Some of us don't have phones capable of participating (and some even turn their phones off in lectures!); it never runs smoothly enough (perhaps PINGO is less terrible); and has rarely been used to test anything worthwhile (i.e. represents an annoying stall for students who can keep pace). Use of such systems suggests to me a lecturer who substitutes real interaction and running enthusiasm for intermittent opportunities to become distracted. Just my experience, but I think it is easy to run badly (I'm sure Sirko does a good job!)" CreationDate="2017-07-06T16:11:41.337" UserId="1333" />
  <row Id="2707" PostId="1449" Score="4" Text="I would very much like to see your 2d array stuff flying in and out, to get a sense of what you think a student's misconceptions are.  One of my courses is C for Java programmers, so there are some habits to break, but I'm curious what you've seen students get wrong from the start." CreationDate="2017-07-06T17:16:09.947" UserId="1564" />
  <row Id="2708" PostId="1449" Score="0" Text="They start off by thinking of it as a 2D grid instead of a single stack reference pointing to a single array of references to other arrays." CreationDate="2017-07-06T17:18:10.247" UserId="27" />
  <row Id="2709" PostId="1449" Score="0" Text="Ok, I now understand why that model doesn't work in Java.  Sometimes my reptilian brain goes back to C without me wanting it to." CreationDate="2017-07-06T17:19:44.450" UserId="1564" />
  <row Id="2710" PostId="1449" Score="0" Text="I mean, the chessboard-style mental model *works* in a 2d array until you start doing things like `my2DArray[3] = new int[10]`, and then it starts breaking down really fast. At some point, you need to know how it really works." CreationDate="2017-07-06T17:22:40.400" UserId="27" />
  <row Id="2711" PostId="1449" Score="1" Text="This is an area that I can definitely improve. Your response reminds me of how Steve Jobs meticulously prepared for his presentations. Every word was perfectly place perfectly. He practiced his presentations over and over until he was satisfied. I need to put more effort into the content and delivery of my presentations." CreationDate="2017-07-06T17:36:15.203" UserId="1529" />
  <row Id="2720" PostId="1449" Score="1" Text="@BenI. It's funny to see the miscommunication between you and Chris given the class he mentioned. What you describe is how arrays work in *Java*, but that is not how they work *in general*, though there are some other languages which approach it similarly to Java. You need to be careful when teaching, or your students will think that is *The* way. You will find in other languages that a 2D array is really just a 1D array big enough to hold N by M elements all in 1 continuous block. In fact, that is what I thought you were going to bring up in response to common misconceptions." CreationDate="2017-07-06T21:03:17.433" UserId="1740" />
  <row Id="2721" PostId="1449" Score="0" Text="@Aaron That is news to me. In C (at least with my compiler) it works as it does in Java.  How in the world would you implement a ragged array without an array of references?" CreationDate="2017-07-06T21:12:13.647" UserId="27" />
  <row Id="2722" PostId="1449" Score="0" Text="*I... spoke too soon.*  I was wrong. My version of C does not do as I thought... that seems positively awful to me. This tradeoff is just to avoid following an extra pointer???" CreationDate="2017-07-06T21:18:14.700" UserId="27" />
  <row Id="2724" PostId="1449" Score="1" Text="Ragged arrays have language support in C# but I had not seriously thought about them before I learned that. Some of these great ideas really seem more like fringe concepts to me. I tend to skirt around them when teaching and stick to the middle of the road. Of course, over time, the fringe comes to seem mainstream to younger people... &quot;*Improvement makes straight roads, but the crooked roads, without improvements, are roads of genius.*&quot; - Blake" CreationDate="2017-07-06T22:03:44.713" UserDisplayName="user737" />
  <row Id="2726" PostId="1449" Score="0" Text="Honestly, learning about the Java implementation is fine. I'm stuck with Java on account of APCS A, and this provides a great chance to mix working with both stored references and calculated addresses, which are translatable fundamental skills in any environment.  In this instance, I can mention and explain the C way (and its trade-offs) in about 20 seconds if they understand the Java approach well." CreationDate="2017-07-06T22:09:25.300" UserId="27" />
  <row Id="2744" PostId="1449" Score="0" Text="@BenI. Pointer dereferencing is actually pretty expensive. Traditionally in C (less so nowadays I think) arrays needed to be a constant size known at compile-time anyway, since the compiler wasn't clever enough to dynamically allocate more or less stack. Remember the heap is off-limits in terms of C **language** features; only in the standard library can you use it (and many embedded systems have a more minimal subset of C with no heap). So you would have to put an array of pointers on the stack (thereby taking up more memory), and all the actual arrays (fixed-length) on the stack too." CreationDate="2017-07-07T08:48:56.077" UserId="988" />
  <row Id="2745" PostId="1449" Score="0" Text="@BenI. So if you want ragged arrays you can create an array of pointers and allocate them manually with malloc/free. But if you want known-size 2D arrays, C's way is perfectly adequate and much more efficient efficient." CreationDate="2017-07-07T08:49:50.637" UserId="988" />
  <row Id="2749" PostId="1449" Score="0" Text="@Muzer I understood everything except the bit about off-limits. I would love it if you [came by in chat](https://chat.stackexchange.com/rooms/59174/the-classroom) to help me break that down. Also, I guess I rarely work on problems large/long enough to be getting cache misses, but I do see why the C approach is cheaper for a standard uniform 2D array. Sometimes you really are [better off](https://projecteuler.net/problem=67) with a ragged array, of course." CreationDate="2017-07-07T09:55:04.447" UserId="27" />
  <row Id="2755" PostId="1449" Score="0" Text="@FedericoPoloni I surely did :) Thanks for the correction!" CreationDate="2017-07-07T12:59:35.297" UserId="27" />
  <row Id="2789" PostId="1449" Score="0" Text="@BenI. wrote &quot;How in the world would you implement a ragged array&quot; Two points here: 1) You can still have an array of pointers which point to arrays which is practically the same thing 2) In all my years I have seen non-square arrays needed so seldom that I don't think it would be an issue even if it were not possible; on the rare occasion you needed one you could use a square large enough to fit your longest raggedy sub-array and ignore the extra, unused locations - intuitively I think that would improve speed in most cases, but could hit memory use depending on how non-uniform the raggedness" CreationDate="2017-07-07T16:33:23.823" UserId="1740" />
  <row Id="2712" PostId="1450" Score="1" Text="I am guilty of teaching in a way that I would understand. Sometimes I forget that these students of &lt; 1 year of programming and I have &gt; 20. I like your suggestion to have a short lesson + an individual or team activity. That'll take some effort, but I have time." CreationDate="2017-07-06T17:40:25.450" UserId="1529" />
  <row Id="2760" PostId="1450" Score="1" Text="@EdwinTorres Your point is well-made and too-frequently misunderstood. If you already understand a concept, you can probably find a way to explain it very clearly and cogently.  If I don't already understand it, that clear, cogent explanation is, all too often, meaningless. Being able to explain it based on what context the STUDENT has ... that is priceless.  Best &quot;recovery&quot; I've seen from this was to present the answer, then &quot;break it down&quot;, exploring parts of the breakdown based on feedback from the student(s).  Give them a &quot;goal&quot; (the initial explanation) then guide them to the goal." CreationDate="2017-07-07T14:08:39.127" UserId="948" />
  <row Id="2718" PostId="1451" Score="2" Text="Oh, it is always wonderful when a veteran educator joins the community. Welcome to [cseducators.se]! I hope we hear more from you in the future." CreationDate="2017-07-06T19:55:49.283" UserId="27" />
  <row Id="16092" PostId="1451" Score="0" Text="Question: How is it that you find time in the semester for 75 assignments? I think that would be on the order of two per hour of class?" CreationDate="2020-01-20T20:37:44.810" UserId="8137" />
  <row Id="2742" PostId="1454" Score="0" Text="I thought so at first but then I took a closer look at the Modular System" CreationDate="2017-07-07T06:42:24.760" UserId="150" />
  <row Id="2725" PostId="1455" Score="0" Text="Those are great resources. It's always a pleasure to welcome a teacher to our little community.  Welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-07-06T22:03:55.770" UserId="27" />
  <row Id="2798" PostId="1456" Score="7" Text="Teach the students to use the formatter in the IDE they are using.  Eclipse has format as a save action so it happens all the time.  Then you can teach more important stuff." CreationDate="2017-07-07T18:04:53.703" UserId="1213" />
  <row Id="2822" PostId="1456" Score="4" Text="Start with Python. The problem almost solves itself." CreationDate="2017-07-07T21:12:55.677" UserId="1777" />
  <row Id="2844" PostId="1456" Score="2" Text="@DavidLively Would you suggest Tabs, 4 spaces, or 2 spaces for indentation on Python?" CreationDate="2017-07-08T05:50:19.757" UserId="1785" />
  <row Id="2850" PostId="1456" Score="3" Text="@phihag There is an [official style guide](https://www.python.org/dev/peps/pep-0008/) (PEP8) for Python." CreationDate="2017-07-08T09:35:47.433" UserId="1658" />
  <row Id="2857" PostId="1456" Score="0" Text="@phihag anything as long as they're consistent. My point was that Python is inherently less forgiving than other languages, not that it is a perfect, self-contained solution." CreationDate="2017-07-08T14:25:37.667" UserId="1777" />
  <row Id="3931" PostId="1456" Score="0" Text="I have mentioned this question in meta as an example in a discussion on site scope, and specifically to what extent teaching programming falls within it. People will strong opinions either way may wish to visit https://cseducators.meta.stackexchange.com/q/172/1219" CreationDate="2017-07-09T21:30:52.543" UserId="1219" />
  <row Id="2805" PostId="1457" Score="5" Text="Having been a software architect for years, enforcing coding standards has been part of my responsibilities. Nevertheless, I fully agree with your assessment that this topic does not deserve significant classroom time, and I would wish more educators would take your stance. A consistent coding style is particularly valuable in long-running projects with big teams, but a typical student assignment is neither. Also, I find your emphasis on readability over formatting details spot on, because formatting can be established by automated tools, while naming and design still require human judgment." CreationDate="2017-07-07T18:55:10.230" UserId="1775" />
  <row Id="2746" PostId="1458" Score="6" Text="+1 for the comments on consistency. That was my first thought. Let them choose their own style, because it's a fun personal preference to get irrationally angry about (so you'd get plenty of push-back from people who already learnt how to code and decided on their favourite brace style, if you did try to enforce one). But penalise them if they aren't consistent within their own code, or with other code written as part of a group project." CreationDate="2017-07-07T09:09:14.623" UserId="988" />
  <row Id="2759" PostId="1458" Score="1" Text="On the other hand, is it not important to teach students that, out in the real world, you can't always use your preferred style? Getting them used to using tools for formatting (whether it be IDE-based or a script they use, etc.) provides a benefit; I've found that once students get in the habit of using whatever style they want, even when they're in college it's hard to get them to stick to a style guide even when tools are available to easily modify the style." CreationDate="2017-07-07T13:59:11.337" UserId="654" />
  <row Id="2806" PostId="1458" Score="2" Text="I disagree strongly. Attention to detail is best reinforced where it actually matters and through natural consequences. For instance, having to track down one's off-by-one errors communicates the need for caring about details far more effectively than being asked to adhere to arbitrary rules &quot;because the teacher said so&quot; ever could. Also, while I fully agree that craftsmanship is important, code formatting is a very small part of that -  and one of the least important ones, because it can be (and often is) fully automated." CreationDate="2017-07-07T19:08:04.923" UserId="1775" />
  <row Id="2807" PostId="1458" Score="3" Text="That is, if you want to be close to the industry, give your students development environments that automate code formatting. For many languages, even open source development environments can do this :-)" CreationDate="2017-07-07T19:11:25.933" UserId="1775" />
  <row Id="2732" PostId="1459" Score="1" Text="I just recently heard the second style described as &quot;Egyptian brackets&quot; which totally cracked me up (also the style I use)" CreationDate="2017-07-06T23:29:14.950" UserId="237" />
  <row Id="2734" PostId="1459" Score="6" Text="Yes, both are fine, but we all know the second method is better...=P" CreationDate="2017-07-07T00:12:48.933" UserId="919" />
  <row Id="2740" PostId="1459" Score="17" Text="warning: missing space before opening brace" CreationDate="2017-07-07T03:10:35.300" UserId="1750" />
  <row Id="2741" PostId="1459" Score="1" Text="Ctrl + A, Ctrl + Shift + F." CreationDate="2017-07-07T04:51:43.067" UserId="1537" />
  <row Id="2823" PostId="1459" Score="1" Text="If you accidentally comment out the `for` line, the first will still (unfortunately) compile, and the second will give you an error. :/" CreationDate="2017-07-07T21:23:29.423" UserId="1777" />
  <row Id="2834" PostId="1459" Score="0" Text="My habit: comment out the body of the loop.  Not a problem." CreationDate="2017-07-08T01:43:55.977" UserId="21" />
  <row Id="3881" PostId="1459" Score="0" Text="@pojo-guy you don't need to Ctrl + A" CreationDate="2017-07-08T17:48:05.250" UserId="734" />
  <row Id="3935" PostId="1459" Score="0" Text="@DavidLively Uh... not really. That would have to be one weird for loop - are you in the habit of declaring the indexing variable outside of the loop? Unless you're doing pointer arithmetic, you're most likely going to get an undefined/undeclared variable error. The only case where you could reasonably expect commenting out the for line to compile would be the equivalent of `for (;;)` or `while (true)`. That can certainly lead to interesting errors, but they're also the kinds of loops that need a lot of scrutiny regardless :)" CreationDate="2017-07-10T09:12:05.390" UserId="1816" />
  <row Id="3947" PostId="1459" Score="0" Text="I declare the loop variable in the loop's initializer.  On second thought, most of the time I just comment out the whole thing, esp if it's a while loop." CreationDate="2017-07-10T15:50:11.543" UserId="21" />
  <row Id="2736" PostId="1462" Score="0" Text="Buffy and I must be from the same timeline! +1 for &quot;let the IDE do it&quot;." CreationDate="2017-07-07T02:48:47.003" UserId="1537" />
  <row Id="2837" PostId="1462" Score="0" Text="Lisp, IIRC, has the advantage (for that kind of thing) that its predominant indentation styles depend somewhat on the length of the function/special name on the previous line. Imagine if for loops were indented one space further than if blocks." CreationDate="2017-07-08T03:09:08.210" UserId="1782" />
  <row Id="3879" PostId="1462" Score="0" Text="I do a lot of my programming in terminal at the command line and am a power vi user." CreationDate="2017-07-08T17:28:06.463" UserId="21" />
  <row Id="3921" PostId="1463" Score="0" Text="A couple of &quot;interesting&quot; resources are https://en.wikipedia.org/wiki/Fluidics and http://www.hydraulicspneumatics.com/other-technologies/book-2-chapter-2-air-logic-circuits. Logic circuits can be realized different ways. You might even be able to work up a role-play with the fluidics example." CreationDate="2017-07-09T13:53:57.727" UserId="1293" />
  <row Id="2816" PostId="1464" Score="0" Text="Your second and third paragraphs seem to contradict each other. If the IDE can do it automatically, what good does asking for a different style in every assignment do?" CreationDate="2017-07-07T19:55:10.140" UserId="1775" />
  <row Id="2824" PostId="1464" Score="0" Text="@meriton that way, they learn to adapt to different styles. I'm not sure that doing it every assignment is a good idea - in fact, that sounds horrible - but learning how to work using uncomfortable conventions is valuable. Take a look at Unreal 3 code sometime. Every Thing Is Capitalized, And The Code Is So Long That Intellesense Does Not Work. It's impossible to look at an identifier and tell what it is." CreationDate="2017-07-07T21:28:10.420" UserId="1777" />
  <row Id="2832" PostId="1464" Score="0" Text="@meriton - gets the student used to working in different styles. let the student learn how to configure their editor/IDE to support that style.  Expose the student to different, well-known styles (google's style guide, the linux kernel style guide, etc)." CreationDate="2017-07-07T23:54:39.670" UserId="662" />
  <row Id="3936" PostId="1465" Score="0" Text="Well, looking at your text... you chose your own punctuation in writing. The punctuation you're using is *not* proper English (and what style of English are you using anyway? There's many to choose from in the first place). Not a good way of reinforcing your opinion of &quot;standardised formatting is so important&quot; :) Now, I think we can all agree that there's plenty of things that are important - your text would be a lot harder to read if it didn't use periods or spaces. I assume your indentation is intentionally silly. But commas, periods, ellipsis... there's so many valid styles out there :)" CreationDate="2017-07-10T09:17:59.660" UserId="1816" />
  <row Id="3944" PostId="1465" Score="0" Text="I understand the point of view you're coming from, however I do disagree with it.  &#xA;&#xA;&#xA;Perhaps the following two versions of the same S.M.A.R.T Reporting Script I use for FreeNAS would demonstrate my point a bit better.  [S.M.A.R.T Report w/ formatting](https://pastebin.com/raw/rAUyXsMq) &amp; [S.M.A.R.T Report w/o formatting](https://pastebin.com/raw/S7gYthgq)... which do you find easier to read and edit?  &#xA;&#xA;Granted, in an [editor](https://1drv.ms/i/s!Aqp3KD9IuSlugrBVrxKf5QI73TcJyQ) it's a bit better, but not much" CreationDate="2017-07-10T14:24:07.597" UserId="1751" />
  <row Id="3946" PostId="1465" Score="0" Text="The first. But it's still *your* style of formatting. I'm all for readability, but where's the standardisation you speak so highly of? Is this a common bash formatting standard you're following, or just something that looks good and readable to you? The question is all about the conflicts among standards (&quot;indent with four spaces!&quot;), not the things people tend to agree on (&quot;indent!&quot;). You might be answering a different question. Would a script that uses four spaces (or a tab) to indent instead of your two be any worse (assuming all the other scripts in the context use the same style)?" CreationDate="2017-07-10T14:41:42.660" UserId="1816" />
  <row Id="3963" PostId="1465" Score="0" Text="No, the OP asked specifically _&quot;Should I require students to follow a standard for assignments and team projects (perhaps conventions of their own choosing), or should I ignore these as trivialities?&quot;_  Perhaps you misread that?  If the script with formatting applied is easier for one to read, then it would also, by default, be easier to grade than a script w/o formatting." CreationDate="2017-07-10T18:08:10.423" UserId="1751" />
  <row Id="2750" PostId="1467" Score="3" Text="This is an important answer.  See [here](https://cseducators.stackexchange.com/a/1366/27) for some research to back you up :)  Welcome to [cseducators.se]. We appreciate a thoughtful student perspective.  I hope we hear more from you!" CreationDate="2017-07-07T09:57:31.420" UserId="27" />
  <row Id="2843" PostId="1467" Score="0" Text="Very true, and I will add that this is how I have interested high school and even middle school students in advanced CS concepts.  Look into games and puzzles you can *play* to start exploring key concepts.  Combinatorics and graph theory are particularly ripe for a puzzle approach; some recommended googles include: Spot It, Set card game, Lazors, One Touch Draw...." CreationDate="2017-07-08T05:40:17.907" UserId="1103" />
  <row Id="2754" PostId="1469" Score="2" Text="Hi Edwin! Could you please expand on this further? There really isn't much in this answer." CreationDate="2017-07-07T12:52:02.553" UserId="58" />
  <row Id="2758" PostId="1470" Score="0" Text="Wikipedia has a very nice page showing all of the boolean operations. Then there is my personal favorite page of colorful... analogies: [Allen's Interval Algebra](https://www.ics.uci.edu/~alspaugh/cls/shr/allen.html). *It's beautiful*" CreationDate="2017-07-07T13:43:15.650" UserDisplayName="user737" />
  <row Id="2764" PostId="1470" Score="0" Text="Thank you! With regards to the other laws, I cover those in my next mini-unit (CNF and DNF), so they're basically the next thing. Should I mention that in my question?" CreationDate="2017-07-07T14:52:19.783" UserId="27" />
  <row Id="2767" PostId="1470" Score="0" Text="@BenI. I don't think you need to mention it in your question, I was just being thorough. I think it's not too relevant with respect to the question asked :)" CreationDate="2017-07-07T14:57:45.250" UserId="747" />
  <row Id="2763" PostId="1471" Score="0" Text="My favorite example of a static class member is an object counter which gets incremented in constructors. Maybe with one clear example of what 'static' is good for they will be less lost? This goes with my 'hook' concept: an example gives people something to relate to and remember, and then add on to later. But you have to start with one particular." CreationDate="2017-07-07T14:36:55.413" UserDisplayName="user737" />
  <row Id="2792" PostId="1471" Score="0" Text="Perhaps a better place to get an answer for this is the [APCS community board](https://apcommunity.collegeboard.org/group/apcompsci). There are lots of knowledgeable people there." CreationDate="2017-07-07T17:03:46.987" UserId="1293" />
  <row Id="2797" PostId="1471" Score="0" Text="Why would topics for AP-A be a gray area? The [course description](https://secure-media.collegeboard.org/digitalServices/pdf/ap/ap-computer-science-a-course-description.pdf) pretty clearly lays out what topics to cover?" CreationDate="2017-07-07T18:02:28.533" UserId="30" />
  <row Id="2804" PostId="1471" Score="0" Text="@RyanNutt Like i've said in the disclaimer, your reference is American and in Canada, Colleges are different from Universities. I'm just trying to gauge what other high school teachers are doing, instead of following an American description in a Canadian school." CreationDate="2017-07-07T18:27:18.120" UserId="747" />
  <row Id="2845" PostId="1471" Score="0" Text="Please do not apologise (Disclaimer) for not being American; Just state where you are from. This is not Computer Science Educators USA. Everyone else please recognise that the internet is global, there will be people form all over the world her. So say “in the USA the …. says …”" CreationDate="2017-07-08T07:13:47.943" UserId="204" />
  <row Id="2847" PostId="1471" Score="0" Text="The most important thing to know about static is that there is **almost** no use for it. Except: profiling (see Ben's slide) and creating a factory of global state. There is also Main, this is just a shame, and hard to explain in the first lesson, but needed. Note that this model (use of static), is not the only one. It is only used in the C++ family of languages (C++, Java, C♯, …). Eiffel offers a very different one that is worth looking at." CreationDate="2017-07-08T07:29:02.590" UserId="204" />
  <row Id="2768" PostId="1473" Score="0" Text="The final report should reflect all the work that the student has done during the internship. Someone that didn´t follow his/her work should be able to understand it simply by reading the report. What you are suggesting is also what I think is right. Some of my colleagues think that there should be some kind of a centralized list of requirements... :(" CreationDate="2017-07-07T14:59:09.267" UserId="1144" />
  <row Id="2770" PostId="1473" Score="0" Text="Ah I see. Even in the industry today, it is hard to convince some old timers of the new age of Agile :P If your colleagues don't want to add a new list for students in an Agile environment, then perhaps just add these new requirements and word it as &quot;answer all that apply&quot;? Judging Agile with Waterfall is like judging a tutle for his ability to climb a tree." CreationDate="2017-07-07T15:03:24.247" UserId="747" />
  <row Id="2769" PostId="1474" Score="0" Text="I agree. The thing is the final report should reflect all the work that the student has done during the internship. Someone that didn´t follow his/her work should also be able to understand it simply by reading the report." CreationDate="2017-07-07T15:02:48.627" UserId="1144" />
  <row Id="2771" PostId="1474" Score="0" Text="@NunoGilFonseca I think with the user stories, planning and retrospectives, you should cover practically everything of interest. Is it a strict requirement that **absolutely everything** is covered, or could you just encourage your students to update their retrospective document at the end of every sprint reflecting on their work personally, along with the usual Agile processes?" CreationDate="2017-07-07T15:07:32.737" UserId="2" />
  <row Id="2774" PostId="1474" Score="0" Text="Our main problem is that right now there is not a formal clarification of what must be covered... :(" CreationDate="2017-07-07T15:21:09.120" UserId="1144" />
  <row Id="2772" PostId="1475" Score="0" Text="I am aware of that! And they do all of that during the development. My question was more focused on what and how should that info be integrated into one &quot;thesis-like&quot; report." CreationDate="2017-07-07T15:13:34.193" UserId="1144" />
  <row Id="2776" PostId="1475" Score="0" Text="It depends on the target audience. System architecture diagrams work well as figures in an overview section, for all audiences. Developers might want to see UML class diagrams or excerpts from generated documentation in a software design section. I would also include a requirements section, to convey the capabilities of the software. A requirements traceability matrix (RTM) works well." CreationDate="2017-07-07T15:22:22.803" UserId="1529" />
  <row Id="2778" PostId="1479" Score="1" Text="Hello Arwyn, and welcome to Computer Science Educators! Glad to see you here =) This question might not be on-topic - try coming over to our [question chatroom](https://chat.stackexchange.com/rooms/60468/the-guidance-office) for help. You can't technically enter because you don't have enough rep, but a mod can invite you in, and I believe one is." CreationDate="2017-07-07T15:24:22.463" UserId="919" />
  <row Id="2779" PostId="1479" Score="2" Text="How in-depth does the explanation need to be? Do you need to teach TCP/IP in detail, or would it be satisfactory to give a brief overview of the web?" CreationDate="2017-07-07T15:24:28.027" UserId="2" />
  <row Id="2793" PostId="1479" Score="0" Text="I've invited you to the Guidance Office (our question help room) and given you access because some users would like to discuss the quality of the question with you." CreationDate="2017-07-07T17:24:19.830" UserId="58" />
  <row Id="2782" PostId="1480" Score="1" Text="They didn't call it &quot;The Internet Superhighway&quot; for nothing, eh?" CreationDate="2017-07-07T15:34:03.467" UserDisplayName="user737" />
  <row Id="2787" PostId="1480" Score="3" Text="Yes but the Web is not the only thing that travels on these roads." CreationDate="2017-07-07T16:27:22.283" UserId="204" />
  <row Id="2783" PostId="1482" Score="2" Text="We always need more good people in this field.  I'm glad you made the switch :)" CreationDate="2017-07-07T16:09:28.650" UserId="27" />
  <row Id="17519" PostId="1482" Score="0" Text="Looking back at this, I don't see why I ✓ed the answer I did. It is not bad, however it is not compelling. It seems to me that ½ of uses of selection both in industry and in education are switching on state that is known at the time the program was written. And most educational examples are contrived: Yes they are simple. Yes they explain selection simply. However they don't explain why, or when to use it. My thoughts are that it is needed for checking inputs. This year, that is what I have been teaching: select on input (not validation, just decide what to do)." CreationDate="2021-01-12T07:53:27.403" UserId="204" />
  <row Id="2784" PostId="1483" Score="0" Text="What would you do if you are about to pass a negative number to a square root function? Do you call it with a positive and assign the result to the imaginary part of the tuple, I think this will be beyond most of my pupils." CreationDate="2017-07-07T16:12:35.443" UserId="204" />
  <row Id="2791" PostId="1483" Score="0" Text="@richard For Year 7 students, you tell them &quot;no solutions&quot;. They probably won't be familiar with complex numbers at that stage, unless they're way ahead of their class (they're usually taught in Year 12/13 Further Maths, not to a Year 7 class)" CreationDate="2017-07-07T16:59:02.213" UserId="2" />
  <row Id="2786" PostId="1484" Score="0" Text="`choices=(&quot;Balance Inquiry.&quot;,&quot;Transfer&quot;,&quot;Withdrawal&quot;,&quot;Deposit&quot;,&quot;Quit&quot;); print(choices[choice])` [I would not expect my year 7s do do this, but it pains me to give them bad examples], but +1 for the first example, with the `if`s." CreationDate="2017-07-07T16:19:23.317" UserId="204" />
  <row Id="2790" PostId="1484" Score="0" Text="You can easily modify that example: String[] iceCreamChoices = new String[]{&quot;chocolate&quot;, &quot;vanilla&quot;, &quot;strawberry&quot;, &quot;tutti frutti&quot;};" CreationDate="2017-07-07T16:45:36.457" UserId="1529" />
  <row Id="2801" PostId="1484" Score="5" Text="Please use brackets in if-statements.  For learners the distinction between statements and blocks can be difficult and is a source for subtle bugs even for experienced programmers." CreationDate="2017-07-07T18:12:09.193" UserId="1213" />
  <row Id="3955" PostId="1485" Score="0" Text="I would do it all in liner maths, just adding, subtraction, multiplying, dividing, and rounding. No need for selection. You complicate the problem, when you start thinking that a year has an end. Time is continues." CreationDate="2017-07-10T17:21:34.477" UserId="204" />
  <row Id="4060" PostId="1485" Score="0" Text="@richard Do you mean something like&#xA;`int(((10000*y2 + 100*m2 + d2) - (10000*y1 + 100*m1 + d1)) / 10000)`?&#xA;That's a hack.&#xA;Even though it avoids the conditional, I don't think that this is easier&#xA;to understand for an 11 year old." CreationDate="2017-07-11T11:44:03.673" UserId="877" />
  <row Id="2813" PostId="1492" Score="1" Text="It makes me itch to define the &quot;God Algorithm&quot; that would sort an array in one forward pass. &quot;If we had an array of indexes...&quot;" CreationDate="2017-07-07T19:39:29.250" UserDisplayName="user737" />
  <row Id="2814" PostId="1492" Score="1" Text="@nocomprende. See my final note. It is possible as long as the values are from a finite set. Which is nearly always the case when we sort with a (finite) computer. It is hard to realize infinity, but Buddhism teaches something about that, I think." CreationDate="2017-07-07T19:43:51.283" UserId="1293" />
  <row Id="3922" PostId="1493" Score="1" Text="Let them fail, hard. Many places I know have hard (no go-around) filters in place after two years or so (in a 4 or 6 year course): An exam which you may be allowed to re-take once or twice, but not more often; if you fail the final try, you are out for good. If no such formal communication of failure exists, create one for your course, if it is in your power." CreationDate="2017-07-09T13:59:39.030" UserId="1675" />
  <row Id="7616" PostId="1493" Score="0" Text="It's very unfortunate the number of students on my classrooms that are studying CS because &quot;it gives money&quot; or &quot;my parents told me to&quot;. And from my experience (limited to Portuguese some highschools and colleges) this happens with higher frequency on CS courses that anyother one" CreationDate="2017-08-30T18:50:40.847" UserId="118" />
  <row Id="2808" PostId="1495" Score="0" Text="This fits with my 'hooks' idea in teaching: present important concepts so that students have an easily-recalled hook to hang more things on as they go along. I want to know why CS is *more* this way than other fields. Because it is entirely made-up, unlike subjects grounded in the natural world? Because one needs a correct and useful &quot;notional machine&quot; to write programs? Because it is built up of a very narrow set of concepts? Because it requires a particular personality tendency? Studies just go back and forth, asserting and denying the problem." CreationDate="2017-07-07T19:13:41.457" UserDisplayName="user737" />
  <row Id="2810" PostId="1495" Score="0" Text="Fom the paper conclusions: &quot;The LEM hypothesis suggests that the CS1 distribution arises not because our students are different, but because our subject material is different.  In pedagogical terms this account highlights the crucial significance of the early stages of learning, where progress in acquiring initial concepts begins to&#xA;establish momentum towards successful or unsuccessful final outcomes.&quot; ... Well... I guess this could also be valid for other subjects, as you said ... :(" CreationDate="2017-07-07T19:24:05.560" UserId="1144" />
  <row Id="2809" PostId="1496" Score="0" Text=":) I never told that to any of them (and i know its not my job to do it). The thing is that it really makes me sad. I know that some of them are capable, but simply do not care about the course and spend their nights playing games. But some other students, should really be doing something else (studying another subject, working, ...). But as you said I am not 100% sure (I guess I am 98%).. :)" CreationDate="2017-07-07T19:14:51.147" UserId="1144" />
  <row Id="3872" PostId="1496" Score="1" Text="+0: I flip-floped about equally whether to up-vote or downvote. +1 for 3rd paragraph! I've read numerous accounts of people traumatized by this, who succeeded anyway but were driven by intense anger. Causing this is not the approach I'd recommend. -1: 4th paragraph. You understand that such drinking is likely illegal for most college students in many areas.  And you suggest they be alcohol-influenced when trying to make serious life decisions? I like 2nd paragraph but not your 5th's 3rd sentence (being friends is succeeding as a human, so intervention is desirable; don't shy from such burdens)" CreationDate="2017-07-08T16:25:22.757" UserId="1676" />
  <row Id="2817" PostId="1497" Score="1" Text=":) That is a nice way of dealing with it. But that will only work for the students that want to change majors, right?" CreationDate="2017-07-07T19:56:06.160" UserId="1144" />
  <row Id="2833" PostId="1497" Score="2" Text="You make more money as a plumber? Didn't know this... any source on this? Would love to change what I do... just kidding ;) but data would still be nice." CreationDate="2017-07-08T01:04:00.723" UserId="823" />
  <row Id="2835" PostId="1497" Score="5" Text="You don't. Even assuming you just end up with a (relatively low-paying on the average for CS) sysadmin job, it's going to typically pay more than most plumbing jobs: http://www.payscale.com/research/US/Job=Systems_Administrator/Salary http://www.payscale.com/research/US/Job=Plumber/Hourly_Rate (See &quot;Total Pay&quot; for both)." CreationDate="2017-07-08T01:55:24.643" UserId="1780" />
  <row Id="2848" PostId="1497" Score="0" Text="Joined just to +1 this" CreationDate="2017-07-08T09:19:37.567" UserId="1786" />
  <row Id="3910" PostId="1497" Score="2" Text="You can certainly make more money as a plumber if you're not suited to CS/programming/IT." CreationDate="2017-07-09T01:05:03.843" UserId="224" />
  <row Id="4181" PostId="1497" Score="1" Text="@Mehrdad I think Wayne hits the nail on the head -- I've seen plenty of students who would make more money as a plumber than as a software dev, simply because I don't think they could land a job as a software dev at all." CreationDate="2017-07-13T04:01:46.217" UserId="664" />
  <row Id="4201" PostId="1497" Score="0" Text="&quot;You'll make more money as a plumber.&quot; It's a white lie. ☺" CreationDate="2017-07-13T18:38:20.930" UserId="160" />
  <row Id="7610" PostId="1497" Score="0" Text="I think the assertion that they may make more money as a plumber is based on the basis that they may not have the aptitude and motivation to make it successfully as a software engineer/developer.  I know of several students that achieved a H.Dip in S/W and have not been able to get a job in the area, or if they have, have been unable to keep it." CreationDate="2017-08-30T18:33:30.847" UserId="2706" />
  <row Id="2849" PostId="1500" Score="0" Text="Ben, I am Portuguese... The educational system here in Portugal is totally different from the US.... Nonetheless, all the advises are valuable and can be adapted to our reality. I will have to look further, to see if there is indeed anyone that could talk with this students... All my colleagues acknowledge the problem, but the truth is that no one does a thing to change it... and the situation just keeps on repeating." CreationDate="2017-07-08T09:25:13.643" UserId="1144" />
  <row Id="3868" PostId="1500" Score="1" Text="Advice from a teacher may be more valued than advice from a career guidance counselor, because the student must interact with the teacher and therefore knows the teacher better than some counselor that the student's never met." CreationDate="2017-07-08T15:56:05.883" UserId="1676" />
  <row Id="7178" PostId="1500" Score="1" Text="I think, as educators, we have a certain duty (because we can almost predict where someone is going with what they are doing) to tell that they might be unfit with this. guidance counsellors simply cannot make a case like educators (who have more interaction time with students) do." CreationDate="2017-08-22T16:01:38.270" UserId="2605" />
  <row Id="2828" PostId="1501" Score="0" Text="Hi David! Welcome to [cseducators.se]! Glad to have you on board, and thanks for your candor. I hope to see you around the site more, or maybe in chat." CreationDate="2017-07-07T21:57:38.540" UserId="58" />
  <row Id="2830" PostId="1501" Score="0" Text="@thesecretmaster there's a chat room? Sweet!" CreationDate="2017-07-07T22:07:28.347" UserId="1777" />
  <row Id="2831" PostId="1501" Score="0" Text="Yup, [right here](https://chat.stackexchange.com/rooms/59174/the-classroom). It's called The Classroom." CreationDate="2017-07-07T22:09:52.097" UserId="58" />
  <row Id="3926" PostId="1501" Score="0" Text="@nocomprende Excellent points." CreationDate="2017-07-09T15:42:37.827" UserId="1777" />
  <row Id="2829" PostId="1502" Score="0" Text="Hi meriton! Welcome to [cseducators.se]! Glad to have your input here. I hope to see you around more!" CreationDate="2017-07-07T21:58:42.773" UserId="58" />
  <row Id="2846" PostId="1503" Score="0" Text="I like the slide and questions. If used together." CreationDate="2017-07-08T07:25:42.123" UserId="204" />
  <row Id="2851" PostId="1506" Score="1" Text="Ellen, this is a good idea! Unfortunately, this will not work in my country (Portugal). Here, once the student enrolls in a program, the school cannot tell him/her that he cannot proceed... :( Our data indeed show that students that were unable to pass (or had very low grades) in the first year programming classes, will have serious problems in all the remaining classes that involve programming. The only thing we have are &quot;soft pre-requisites&quot; (you should know this to do that)." CreationDate="2017-07-08T09:36:11.847" UserId="1144" />
  <row Id="3928" PostId="1506" Score="0" Text="@NunoGilFonseca Can you state in the catalog that students who earn less than X in classes A, B, and C are unlikely to succeed in the major? That way, at least they're warned." CreationDate="2017-07-09T17:29:45.210" UserId="283" />
  <row Id="3860" PostId="1509" Score="0" Text="What level of class is this? I have students just learning the earliest ideas in programming, who 'help' each other a lot. Occasionally I do see nearly identical solutions handed in. I ignore it if it happens once, but if there is a pattern, I talk with the whole class, reminding that they should not be teaching each other, and need to come to me when they are having trouble. In this case it is less about *taking* the work of others and more about *not doing the work themselves* so that they can learn. The word 'plagiarism' is unfortunately used to mean both cases. What is a better word?" CreationDate="2017-07-08T15:23:24.450" UserDisplayName="user737" />
  <row Id="3861" PostId="1509" Score="2" Text="@nocomprende IMO, not teaching is a bit too much. I usually tell them &quot;give help, not code&quot;. Teaching is one of the most efficient ways of learning." CreationDate="2017-07-08T15:36:20.127" UserId="313" />
  <row Id="3863" PostId="1509" Score="1" Text="@nocomprende, I wish you wouldn't ignore it even once. I worry that when students get away with something it only cements the habit. First impressions matter, and the first impression of cheating should not be a good one!" CreationDate="2017-07-08T15:38:19.257" UserId="294" />
  <row Id="3870" PostId="1509" Score="0" Text="nocomprede it happens in several different classes of an higher education degree. I also have some students that &quot;work&quot; along with their collegues. One is working, while the rest are looking at the screen. In the end, all feel that they've participated and so can submit the same solution. rcpinto Exactly! The problem is even worse when the students that give the code, know even less that the ones that asked for it. DavidWhite I agree! In the past some collegues were a bit permissive, so when I say, that no one is allowed to do plagiarism they kind of ignore it." CreationDate="2017-07-08T16:14:16.113" UserId="1144" />
  <row Id="3880" PostId="1509" Score="0" Text="Looks like a solution in search of a problem. In an on-premise test you'd rather use supervision to prevent plagiarism, rather than detect it from program similarity. In a take-home test, you'd need to engage in highly unethical behaviour, like mandating the use of spyware on the student's computer to obtain the code as it's written." CreationDate="2017-07-08T17:42:38.300" UserId="839" />
  <row Id="3882" PostId="1509" Score="0" Text="@CodesInChaos There are a lot of tools that collect snapshots from the student’s code as they write it. The students just need to install one plugin in their IDE (Eclipse for instance). In the case of the tool that we are developing (and as I said has a different main focus rather than plagiarism) the students are fully aware that the system is collecting data and are also aware of how it is being used. So far no student has complained or felt violated. In our case, a new snapshot of the code is taken when the student runs the code." CreationDate="2017-07-08T18:11:45.697" UserId="1144" />
  <row Id="3883" PostId="1509" Score="0" Text="As someone who was falsely accused of plagarism in CS, please always consider the possibility that students handed in similar or identical assignments by sheer chance. This is particularly true if the problem being solved is simple, the language being used tends to steer students into similar patterns (e.g. python), the variable names are obvious given the problem domain, etc. Especially if the assignment is &lt; 100 LoC." CreationDate="2017-07-08T18:24:18.307" UserId="1790" />
  <row Id="3884" PostId="1509" Score="0" Text="@JaredSmith, of course! Right now the system is only &quot;triggered&quot; if there is a high probability of plagiarism. Anyway, the system only notifies the teacher of the possibility of plagiarism and presents to the teacher both source codes side and using a Diff tool highlights the similarities. It is totally up to the teacher to decide if it is indeed plagiarism or not. Anyway, my question was to related to understand if the teacher should do something or not." CreationDate="2017-07-08T18:39:57.793" UserId="1144" />
  <row Id="2853" PostId="1510" Score="0" Text="All the students are aware of what we consider as plagiarism, however, they just keep on doing it... :( As you said, if the tool warns the students about plagiarism, they may try to change the code till the tools says the code is fine. The &quot;gotcha&quot; thing alone was also something that we wanted to avoid, as it may be totally ineffective. So my question is: I have early knowledge about plagiarism from a student, shall I do something or just wait to punish that student?" CreationDate="2017-07-08T13:19:23.233" UserId="1144" />
  <row Id="2854" PostId="1510" Score="0" Text="I was once thought to be slacking by my most respected professor. Not plagiarizing, but also a problem. He and I met, by chance, in an elevator for a few moments and in a few sentences, he made me re-think my priorities. A friendly word can be stronger than a shout. It is also possible that he arranged the &quot;elevator talk&quot; without my noticing." CreationDate="2017-07-08T13:33:16.553" UserId="1293" />
  <row Id="2855" PostId="1510" Score="0" Text="I suppose that is the way to go! Keep things &quot;informal&quot;!" CreationDate="2017-07-08T13:38:10.383" UserId="1144" />
  <row Id="3862" PostId="2511" Score="0" Text="Also, it's my first question here, and I didn't know what tags were popular. Feel free to retag. I think I just created a new one called &quot;advising&quot; but I also think there would be value to such a tag. Advising is an important part of the job for college professors, and I'm sure HS teachers also do a fair bit of it." CreationDate="2017-07-08T15:36:40.637" UserId="294" />
  <row Id="3866" PostId="2511" Score="1" Text="It might also be relevant to look around [Academia](https://academia.stackexchange.com/) Stack Exchange for non-subject specific answers; in particular, [How long should letters of recommendation for students be?](https://academia.stackexchange.com/questions/5061/how-long-should-letters-of-recommendation-for-students-be) I would imagine this question is on-topic here too, though." CreationDate="2017-07-08T15:48:29.713" UserId="2" />
  <row Id="3874" PostId="2511" Score="2" Text="I'll second looking at Academia rather than here. They are focused on that sort of thing. Unless you think that there is a special CS aspect. I can't think of one myself." CreationDate="2017-07-08T16:35:14.133" UserId="1293" />
  <row Id="3876" PostId="2511" Score="0" Text="Also, you might like to visit the [site chatroom](https://chat.stackexchange.com/rooms/59174/the-classroom) if you want to discuss your question over there and help you figure out whether it'd be better to ask on Academia or here." CreationDate="2017-07-08T17:13:51.647" UserId="2" />
  <row Id="3869" PostId="2512" Score="0" Text="I'd be extremely reluctant to tell them not to go in the field, primarily because of what is described by the third paragraph of vacip's answer. Case in point: I once taught (in college) an ex-truck driver. He struggled to get Ds. This old guy was in no way suited to excel in this field. The career center was obligated to be involved for each student, and summoned me to discuss this problematic instance.  I talked to him to make sure saw/expected realistically. He was striving to better understand the field that his son was to join. He had a sensible reason.  Satisfied, I let him decide" CreationDate="2017-07-08T16:08:53.293" UserId="1676" />
  <row Id="3871" PostId="2512" Score="0" Text="TOOGAN, I currently, have a father and son in the same class... :) The father is the 2nd year of a 3 years degree for some 10 years, His son, is doing well... :) I understand that it is not my right/dutty to tell someone what to do. The thing is that they are totaly stuck..." CreationDate="2017-07-08T16:20:21.677" UserId="1144" />
  <row Id="3875" PostId="2512" Score="0" Text="If he's been at it for 10 years, he's certainly not achieving typical market expectations of performance.  So, if he isn't needing to achieve such typical accomplishment, then does he even need a degree? Maybe he has no need to graduate soon. So, if he hasn't dropped out, then what motivation is he pursuing? Presumably he has one, as he keeps signing up for an expensive activity that costs both money (from somewhere) and time. Do keep doing your job (trying to get them unstuck), but don't feel like you're immoral because they make the choice to keep staying in the program.  It is their choice" CreationDate="2017-07-08T16:50:55.150" UserId="1676" />
  <row Id="7177" PostId="2512" Score="0" Text="I have also seen some faculties actually giving advice about personal life decisions. That's perhaps the most non-smart thing to do ever." CreationDate="2017-08-22T16:00:16.660" UserId="2605" />
  <row Id="3877" PostId="2515" Score="0" Text="&quot;As for teaching being a way to learn...&quot; I was not the person who said that! :) I honestly prefer when a student ask me whatever rather than his colleagues." CreationDate="2017-07-08T17:14:16.843" UserId="1144" />
  <row Id="3878" PostId="2515" Score="0" Text="Yes, I know, I got comments from several people, and yours agree with my views. I just thought that if there are other views, I should write a complete answer." CreationDate="2017-07-08T17:16:28.787" UserDisplayName="user737" />
  <row Id="3885" PostId="2516" Score="0" Text="Hadn't seen that game before, I just looked it up. Seems related to database, but I am not sure if my students would be familiar with it either." CreationDate="2017-07-08T18:45:30.327" UserDisplayName="user737" />
  <row Id="3888" PostId="2516" Score="0" Text="It was very popular game when I was a kid... The idea is: you have a group of persons with different facial features and have to make questions to try to  eliminate the ones that are not relevant, like what you do in the WHERE part of the SELECT.... :) E.g. SELECT all faces WHERE hair = white AND Has glasses AND..." CreationDate="2017-07-08T18:56:39.463" UserId="1144" />
  <row Id="3889" PostId="2516" Score="0" Text="Yeah, it looks like a very realistic application of something like a Where clause. Might work for boolean logic in other ways also." CreationDate="2017-07-08T19:17:28.700" UserDisplayName="user737" />
  <row Id="4425" PostId="2516" Score="1" Text="@nocomprende, I think it has applications in teaching basic information theory to children. My (then eight-year-old) niece wanted to play this game with me the last time she visited. After beating her a couple of times I explained how I was maximising the information gain by looking for the question which would get closest to a 50/50 split." CreationDate="2017-07-17T15:07:02.073" UserId="1219" />
  <row Id="4430" PostId="2516" Score="0" Text="@PeterTaylor this is a good point about information theory - extracting useful info from data so as to make decisions, perhaps. If something is very likely, or very unlikely, then the info does not have as much value. Easy to decide whether to take your umbrella, if it is already raining, or you live in the Sahara. Not so easy in Florida, typically (closer to 50% chance). So then, on to deciding how to design a database, right? Try not to have columns with only a few distinct values, etc..." CreationDate="2017-07-17T15:44:35.680" UserDisplayName="user737" />
  <row Id="3890" PostId="2517" Score="0" Text="Thanks, that's very helpful. Any distinction between your process for letters for grad school vs. industry vs. students seeking scholarships?" CreationDate="2017-07-08T19:27:41.783" UserId="294" />
  <row Id="3894" PostId="2517" Score="0" Text="I am writing for a magnet HS (NCSSM).  I think a similar letter would work well for grad school or for an employer. Generally, if I communicate with an employer, it's on the phone." CreationDate="2017-07-08T20:00:39.023" UserId="21" />
  <row Id="3893" PostId="2518" Score="0" Text="I live in Portugal... Here, this is the meaning of the lights... and we do not have red and yellow at the same time... The braquets mean that what is inside is optional. In the last else you could have an else if (...) or simply the else since there are no aditional options" CreationDate="2017-07-08T19:51:26.690" UserId="1144" />
  <row Id="3957" PostId="2518" Score="0" Text="The website I checked said that Portugal has a red and yellow state. Red, red and yellow, green, yellow, back to red. Is this not the case. Note that my pupils said that this was not true [here in england], but I showed them a video, then set them home work to stare at traffic lights. They said that they were surprised." CreationDate="2017-07-10T17:25:01.260" UserId="204" />
  <row Id="3964" PostId="2518" Score="0" Text="@richard :) Never saw that &quot;red and yellow&quot; scenario... These are the commom traffic lights around here: http://codigo.pt/sinais-de-transito/sinais-luminosos/ (Sorry but it is in portuguese)." CreationDate="2017-07-10T18:08:12.920" UserId="1144" />
  <row Id="3891" PostId="2519" Score="0" Text="Hmm, I'm not sure if I agree with this. When I was finishing my PhD, one of the professors I'd asked for a letter asked me to write something to help him and I really had no idea where to start (knowing nothing about letters). I'm not convinced my students would either. Also, it seems like a lot of work to ask all of my students to do this, even if only 1 per class will ever ask me for a letter. Plus, if I do it at the start of term, how could they answer the questions you pose?" CreationDate="2017-07-08T19:31:13.520" UserId="294" />
  <row Id="3892" PostId="2519" Score="0" Text="Not trying to be disagreeable, just don't see how to implement this, from the POV of making letter writing easier. From the POV of improving their performance in my class, this does seem like a good idea." CreationDate="2017-07-08T19:31:17.980" UserId="294" />
  <row Id="3896" PostId="2519" Score="1" Text="@DavidWhite I was unclear. I do not really suggest that students draft their own letters of recommendation." CreationDate="2017-07-08T20:34:36.540" UserId="283" />
  <row Id="3897" PostId="2519" Score="1" Text="@DavidWhite You're right. It doesn't really make letter writing easier. I was answering the question I'd wished someone asked, not the one that was asked. I'll delete the irrelevant part." CreationDate="2017-07-08T20:36:12.660" UserId="283" />
  <row Id="3914" PostId="2520" Score="1" Text="Everything is a construction, even mathematics (angles of a square do not necessarily add up to 360°) and physics (f=ma is not always true). They are all constructed in a culture and environment. Also there are few new ideas in computer science: I used to think it was all invented in the 1960s, but then I read [a summary of] the letters of Ada of Lovelace (the first computer programmer)." CreationDate="2017-07-09T09:45:21.823" UserId="204" />
  <row Id="3915" PostId="2520" Score="0" Text="@richard I'm sorry but $\sum \vec{F}\, = \,m \vec{a}$ is always true, if you make relativistic fixes to $\vec{F}$." CreationDate="2017-07-09T10:48:42.027" UserId="150" />
  <row Id="3927" PostId="2520" Score="1" Text="I'm voting to close (more as the fifth vote than as a mod with binding-ness). I see at least four questions here, all of which I find worth asking but in separate questions. There's the issue of analogies, the difference in cultural reference points, the lamentation over older references not being understood, the accelerated pace of cultural change (a debate in and of itself possibly). All of these have their place on here in some way, just not in the same question. I suggest narrowing/rephrasing to make Ellen's answer on-topic then asking the others separately." CreationDate="2017-07-09T17:01:42.860" UserId="76" />
  <row Id="3929" PostId="2520" Score="0" Text="Ellen's and Buffy's answers are both about metaphor, so that's a logical direction to take this question" CreationDate="2017-07-09T17:38:52.420" UserId="27" />
  <row Id="4025" PostId="2520" Score="0" Text="@nocomprende Focus just on the very last sentence, which gets at the crux of the issue: the generational gap between teacher and students. I might tweak it as follows: &quot;What do you do to work around different frames of cultural reference?&quot; Less is more. The commentary that leads to this point might in fact point more to answer than to the actual question." CreationDate="2017-07-11T04:56:03.557" UserId="76" />
  <row Id="3902" PostId="2521" Score="0" Text="Wow, a list of Pedagogical Patterns! Who knew? Thanks!" CreationDate="2017-07-08T23:53:54.810" UserDisplayName="user737" />
  <row Id="3905" PostId="2521" Score="0" Text="Actually a community of maybe 40 people from all over the world. Some more active currently than others." CreationDate="2017-07-09T00:10:21.250" UserId="1293" />
  <row Id="4212" PostId="2522" Score="1" Text="@nocomprende See this classic paper. https://cs107e.github.io/readings/holywars.pdf" CreationDate="2017-07-13T20:18:03.827" UserId="283" />
  <row Id="6254" PostId="2522" Score="0" Text="@nocomprende it was an argument (war) about eggs, and how to eat them. The whole story is about how it is totally irrelevant. Just the same as it is in computing. It only make a difference, when you start writing bad code: that accesses large objects (bigger than a byte), one byte at a time. Instead of looking at the lower/upper byte, we should look at the lest significant byte. When we send it over the wire, we need to agree, lsb first or last. (as I write this I wonder if memory mapped files could be a problem.)" CreationDate="2017-07-28T09:34:44.593" UserId="204" />
  <row Id="6255" PostId="2522" Score="0" Text="@nocomprende I saw one computer system that had what I called weird endian. It had 16bit ints in one endian. Then combined these to make 32bits in the other endian. If people did that irl, we would think them mad. — richard 07-28-2017 = 28-07-2017, we need to come to an agreement no this, we need a standard (2017-07-28)." CreationDate="2017-07-28T09:44:14.950" UserId="204" />
  <row Id="3917" PostId="2523" Score="0" Text="It is probably worth trying to factor out &quot;growth mindset&quot; into a separate thread. Can you pose a question? &quot;How can we transform students...&quot; I don't know enough to take the lead on this." CreationDate="2017-07-09T10:58:18.020" UserId="1293" />
  <row Id="3920" PostId="2523" Score="0" Text="Thanks for the suggestion. Let me think about it a bit and see if I come up with a good question." CreationDate="2017-07-09T13:18:59.297" UserId="294" />
  <row Id="3923" PostId="2523" Score="0" Text="You might want to visit [the classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) to help formulate it." CreationDate="2017-07-09T14:13:27.850" UserId="1293" />
  <row Id="3924" PostId="2523" Score="0" Text="I think the answer should be left here. It's a great one." CreationDate="2017-07-09T14:21:43.270" UserId="283" />
  <row Id="3925" PostId="2524" Score="0" Text="Just came across this video no stereotype threat, in case you prefer watching to reading: https://www.youtube.com/watch?v=1oVs3Uxv7SM&amp;list=WL&amp;index=4" CreationDate="2017-07-09T15:32:46.307" UserId="294" />
  <row Id="3918" PostId="2526" Score="0" Text="I think different loads between departments is not feasible (both for real and political reasons), but a department _can_ give new faculty a lighter load so that they can get established both with research and teaching. We senior faculty can take up the slack, but it takes a very cooperative environment to achieve. Some places have done this. I think Dartmouth is (or was, at least) pretty good about this." CreationDate="2017-07-09T12:43:14.873" UserId="1293" />
  <row Id="3919" PostId="2526" Score="0" Text="Denison has a lower load for faculty in CS. I think that Richmond and Davidson do too. At one point I made a list of liberal arts colleges that did. One way to sell it is to give credit for &quot;labs&quot;, since it's very common for faculty in, say, biology to get teaching credit for their labs. Plus, keeping a course up to date with modern advances will often happen in the lab part of the class!" CreationDate="2017-07-09T13:18:00.453" UserId="294" />
  <row Id="3930" PostId="2528" Score="0" Text="Always glad to have a new teacher here! Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-09T17:56:22.087" UserId="27" />
  <row Id="3932" PostId="2529" Score="1" Text="Hey, welcome to [cseducators.se]! This answer is a bit of a *stub answer* right now. *(Don't worry; SE is insanely complex, and there is a real learning curve. You are not the first first-time poster to have this problem, I promise)* What you should do is edit your answer and flesh it out with a little more detail. Some possibilities: what in particular is good and useful about the videos? What are their downsides (if any)? Where do they fit into a larger context of learning about the material?" CreationDate="2017-07-09T23:09:03.090" UserId="27" />
  <row Id="3934" PostId="2529" Score="0" Text="To add to what @BenI. said, Stack Exchange tends to frown upon &quot;link only answers&quot; (answers that would be useless without the link). Please try and give enough summary and details from the video that someone could gain from this answer without clicking the link." CreationDate="2017-07-10T02:13:01.713" UserId="58" />
  <row Id="4343" PostId="2529" Score="0" Text="I love those videos and use them all the time. I like how they have diverse presenters who have real and interesting industry jobs. And the explanations are very well done." CreationDate="2017-07-15T22:50:02.370" UserId="541" />
  <row Id="3948" PostId="2530" Score="0" Text="Wow, your brain must weigh more than mine! You chose a very audacious goal and a quite severe self-selection method. I salute your attempt. In my course I describe &quot;the 12 balls problem&quot; and the well-known solution as an introduction to algorithmic thinking. But I don't expect students to *solve* it, I expect them to ponder and see what could make it easier to solve. The most important thing is to come up with a way of representing the weighings and results - a *notation*. My solution, which I show them, is an Excel spreadsheet. I use it at the beginning to show why programming might be hard." CreationDate="2017-07-10T15:54:08.703" UserDisplayName="user737" />
  <row Id="3933" PostId="2531" Score="0" Text="There is a lot for me to think about in this comment. Scheme is pretty much fixed in place (as functional programming is one of the core goals of the course), but I think many of the rest of the changes you propose are extremely sensible. And I know on SE we are usually avoid &quot;thank you&quot;, but it really feels merited here. This gave me a lot to think about." CreationDate="2017-07-10T00:44:20.963" UserId="27" />
  <row Id="4027" PostId="2532" Score="0" Text="I feel like several words are being used interchangeably here: field, skill, understanding, and level. To me, it's dangerous to conflate these terms. A student's skills != a student's content knowledge. I also would avoid framing students as &quot;bad to ... clever.&quot; There's also implicitly learning modality being assumed here, e.g. the student with musical talent. I think this idea of &quot;secondary skill&quot; needs to be narrowed; to the student it might be their primary skill. A question just on musical learners or visual artists would more appropriate and precise." CreationDate="2017-07-11T05:14:09.947" UserId="76" />
  <row Id="3937" PostId="2533" Score="0" Text="I particularly like the idea of releasing the lab in timed releases, and I could possibly make the first &quot;timed release&quot; before the unit even begins, with some helper functions (even if they don't understand the entire scope of the problem yet).  I still try to experiment regularly, because that's how I come to new forms, but this one clearly didn't work :)" CreationDate="2017-07-10T11:21:46.387" UserId="27" />
  <row Id="4026" PostId="2537" Score="0" Text="I think there is both a question _and_ an answer here. Your personal experience is probably better served as an answer since the question is buried in the text here. Consider bolding it to make it stand out amidst everything else. Also, I have a feeling this _might_ be better asked on Academia.SE since the focus sounds university-specific. If you are looking for models of CS programs, then you might find there a model to emulate from a non-CS program." CreationDate="2017-07-11T05:09:28.590" UserId="76" />
  <row Id="4067" PostId="2537" Score="0" Text="@Peter On questions like this I like to prime the pump a bit to get people thinking. Especially when I don't think there is &quot;one true answer&quot;. Institutional context matters in this stuff, but people with interest can get good ideas from a variety of answers." CreationDate="2017-07-11T13:29:41.887" UserId="1293" />
  <row Id="4082" PostId="2537" Score="0" Text="I'm not sure what you mean when you say &quot;questions like this.&quot; Can you clarify this statement? It's helpful for there to be a clear difference between a question and an answer; a self-answered question can serve the same purpose of inspiring thought for further answers. That might be the better approach to take in this circumstance." CreationDate="2017-07-11T14:56:51.637" UserId="76" />
  <row Id="4108" PostId="2537" Score="0" Text="For an UP program in CS, a common component is an internship with a allied organization, governmental, for-profit or non-profit, just outside academia for the &quot;real world&quot; exposure." CreationDate="2017-07-11T20:56:53.990" UserId="104" />
  <row Id="8239" PostId="2537" Score="1" Text="This question might benefit from a [tag:united-states] tag. It could as well be written in Greek for (non-Greek-speaking) people from other academic cultures." CreationDate="2017-09-19T14:50:31.833" UserId="1219" />
  <row Id="3953" PostId="2540" Score="1" Text="Welcome to [cseducators.se].  This is a nice first question.  Given the nature of the question, you may want to put in a little bit more about their background to get more targeted answers.  Also, check out the [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom) if you have any questions. Glad to have you aboard, and I hope we hear more from you in the future!" CreationDate="2017-07-10T17:20:05.387" UserId="27" />
  <row Id="3956" PostId="2540" Score="0" Text="Sadly I cannot say any more about their background, since I don't know yet who my students will be, or even how many. :)  But I'll fill in more detail as it is revealed to me!" CreationDate="2017-07-10T17:22:45.773" UserId="1015" />
  <row Id="3959" PostId="2540" Score="0" Text="What is the purpose of these meetings? When you say introduction to AI, do you want to show AI at work or behind the scenes of AI? The former is for everyone, while the latter requires University level linear algebra, calculus and statistics." CreationDate="2017-07-10T17:31:51.440" UserId="747" />
  <row Id="3965" PostId="2540" Score="0" Text="Maybe you could ask them to &quot;train&quot; a team of &quot;Robocup 2D Soccer&quot;..." CreationDate="2017-07-10T18:42:21.413" UserId="1144" />
  <row Id="4001" PostId="2540" Score="1" Text="I was only a year older when I developed an AI for connect 4 on my own. Never was able to beat it either. It was just a simple look ahead and rank possible branches AI algorithm. Not sure if it has a real name." CreationDate="2017-07-10T23:11:59.683" UserDisplayName="user1830" />
  <row Id="4090" PostId="2540" Score="0" Text="@Kaneki as this is for middle schoolers, it would have to be mostly the former, with possible simple implementation projects of very simple concepts.  For example, a Markov chain would be something these kids would only understand with difficulty." CreationDate="2017-07-11T16:27:09.473" UserId="1015" />
  <row Id="4392" PostId="2540" Score="0" Text="Numerical optimization, in particular Newton's method, should be taught before ANN and AI.  By 7th grade, most students should have enough development to understand 1-D Newton's method (even if it terms of a line's slope, $m$, rather than the point-value of the derivative, $x'{\equiv}{\left.\frac{\text{d}f\left(x\right)}{\text{d}x}\right|}_{x_0}$), so that seems like a great time to teach it!" CreationDate="2017-07-16T20:33:31.663" UserId="39" />
  <row Id="3954" PostId="2541" Score="1" Text="Is [this](http://www.huffmancoding.com/code/fmg/) the game to which you are referring?" CreationDate="2017-07-10T17:21:30.883" UserId="27" />
  <row Id="3958" PostId="2541" Score="0" Text="Yes. Thanks. I hadn't seen that reference. Source (Java) can be found at the Greenroom." CreationDate="2017-07-10T17:26:54.467" UserId="1293" />
  <row Id="3968" PostId="2541" Score="0" Text="I can't upvote yet, it appears, but I would if I could!  Looking into that now..." CreationDate="2017-07-10T18:57:42.570" UserId="1015" />
  <row Id="3969" PostId="2541" Score="0" Text="@DaveI you need a bit more rep to vote." CreationDate="2017-07-10T19:00:50.673" UserId="1293" />
  <row Id="3976" PostId="2547" Score="0" Text="Something else to consider are what resources are available to share their stories, such as freely-available videos." CreationDate="2017-07-10T19:35:39.880" UserId="283" />
  <row Id="4028" PostId="2547" Score="19" Text="This is a list question and would be closed on most other sites in the network." CreationDate="2017-07-11T06:06:48.703" UserId="1382" />
  <row Id="4055" PostId="2547" Score="3" Text="@curiousdannii https://cs.meta.stackexchange.com/a/137/23002" CreationDate="2017-07-11T11:16:37.253" UserId="27" />
  <row Id="4061" PostId="2547" Score="7" Text="@BenI. &quot;avoid asking subjective questions where … every answer is equally valid&quot; Exactly what this is. This is not only an unbounded list question, but a list question based on the very subjective &quot;What you think is substantial&quot;!" CreationDate="2017-07-11T11:54:55.807" UserId="1382" />
  <row Id="4071" PostId="2547" Score="3" Text="&quot;Every answer is equally valid&quot; would be fair if there were no judging criteria, but there are strong criteria here. Certainconcepts get covered early on in a CS degree with more or less perfect regularity, some get covered sometimes, and many concepts *never* get covered. I am not enumerating those sets in this question, but they nevertheless exist. The stronger the tie-in to early CS concepts, the better the match. This could theoretically be enumerated and statistically matched to find a statistical &quot;best answer&quot;." CreationDate="2017-07-11T13:40:09.783" UserId="27" />
  <row Id="4234" PostId="2547" Score="1" Text="Please don't use the comments to answer the question. I will be deleting attempts to answer the question from comments." CreationDate="2017-07-14T11:11:28.790" UserId="58" />
  <row Id="4287" PostId="2547" Score="0" Text="Further discussion is welcome in [the dedicated room for this question in chat](http://chat.stackexchange.com/rooms/62259/discussion-on-question-by-ben-i-advances-in-cs-appropriate-for-cs1-and-cs2-made), a format much more conducive to discussion." CreationDate="2017-07-15T04:29:58.977" UserId="58" />
  <row Id="4290" PostId="2548" Score="0" Text="Comments are not for extended discussion; please move this conversation to the more open format of [the dedicated room in chat](http://chat.stackexchange.com/rooms/62261/discussion-on-answer-by-nuno-gil-fonseca-advances-in-cs-appropriate-for-cs1-and)." CreationDate="2017-07-15T04:40:14.310" UserId="58" />
  <row Id="4377" PostId="2548" Score="0" Text="Moved other women to CW answer." CreationDate="2017-07-16T15:01:08.937" UserId="919" />
  <row Id="4390" PostId="2550" Score="0" Text="I removed the mention of the second computer to make your answer more focused; feel free to rollback if you disagree with the edit." CreationDate="2017-07-16T20:10:08.043" UserId="919" />
  <row Id="3980" PostId="2551" Score="28" Text="Do you know that the author voluntarily shared the work and it wasn't taken from them unwittingly?" CreationDate="2017-07-10T20:05:57.297" UserId="283" />
  <row Id="3981" PostId="2551" Score="2" Text="I suppose that most of the times they share the work voluntarily, although they don't admit." CreationDate="2017-07-10T20:17:14.737" UserId="1144" />
  <row Id="4029" PostId="2551" Score="19" Text="Why did you ask on CS Educators instead of [Academia.SE]? There doesn't seem to be anything specific to computer science here." CreationDate="2017-07-11T06:30:00.973" UserId="981" />
  <row Id="4050" PostId="2551" Score="1" Text="@jpmc26 I understand what you say, and probably my question should be more clear in that aspect, but in fact I am especially interested in programming assignments (copy of source code)." CreationDate="2017-07-11T10:32:03.920" UserId="1144" />
  <row Id="4099" PostId="2551" Score="6" Text="@jpmc26 Whether a question is on-topic at another site shouldn't matter—as long as the question is **on-topic here**, it should **stay here** (and from the reception, the answer appears to be that it is firmly on-topic here). Overlap between sites is absolutely fine if you want an answer from a specific group (like CS Educators, for example, rather than general Academians)." CreationDate="2017-07-11T19:19:02.117" UserId="2" />
  <row Id="4188" PostId="2551" Score="0" Text="Please use comments as they were intended, as methods of asking for clarification; if you want to continue this conversation, it has been [moved to chat](http://chat.stackexchange.com/rooms/62130/discussion-on-question-by-nuno-gil-fonseca-when-a-student-submits-a-work-that-is); if you want to answer the question, write an answer." CreationDate="2017-07-13T10:31:06.753" UserId="58" />
  <row Id="4289" PostId="2552" Score="0" Text="Comments are not for extended discussion; please move this conversation to the more open format of [the dedicated room in chat](http://chat.stackexchange.com/rooms/62260/discussion-on-answer-by-ray-advances-in-cs-appropriate-for-cs1-and-cs2-made-by-f)." CreationDate="2017-07-15T04:38:36.767" UserId="58" />
  <row Id="3988" PostId="2553" Score="21" Text="I think it worth mentioning that the pricing scheme for some git hosting sites makes it likely that some students will use public repositories for their projects, even if working solo. I and several of my peers did this - and I am quite confident that this was done because of money, not in order to facilitate academic dishonesty." CreationDate="2017-07-10T21:13:41.920" UserId="650" />
  <row Id="4016" PostId="2553" Score="8" Text="What do you mean by facilitating cheating? When I was a student, I published a lot of assignment solutions. I was the author after all, I can do whatever I want with what I've created." CreationDate="2017-07-11T00:36:33.983" UserId="1834" />
  <row Id="4036" PostId="2553" Score="1" Text="Also -- sure, let's encourage people to keep their stuff behind 100 locks. Hell, maybe even ban the use of VCSes altogether. Why not approach this like an actual CS professional? Encourage everyone to use Git or Mercurial for their homework -- if there are any suspicions, a simple look at the commit history will reveal who's to blame (for plagiarism *et al*)." CreationDate="2017-07-11T08:45:40.890" UserId="1856" />
  <row Id="4079" PostId="2553" Score="1" Text="@Džuris That would depend on your school's policy. If you are free to do what you want after your project is complete, and you publish it, of course it's not cheating. It's all about the intent—did you *willingly* help someone else in full knowledge that this is inappropriate, or did they, in effect, copy from your work without your knowledge and without crediting you?" CreationDate="2017-07-11T14:42:09.243" UserId="2" />
  <row Id="4080" PostId="2553" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/62005/discussion-on-answer-by-aurora0001-when-a-student-submits-a-work-that-is-a-copy)." CreationDate="2017-07-11T14:44:10.407" UserId="58" />
  <row Id="4177" PostId="2553" Score="1" Text="Please move the conversation to chat. I will copy over the existant comments if you havn't done so yourselves in about 24  hours, and any further comments attempting to continue this conversation will be deleted. Of couse, additional requests for clarification will be kept." CreationDate="2017-07-12T22:32:01.920" UserId="58" />
  <row Id="4032" PostId="2555" Score="10" Text="&quot;there are enough artifacts in the digital file...to be confident of copying.&quot; but not to be confident that the copying is not the result of a code theft (supplier was not consenting to this copy). Would'nt this approach punish the victim of a theft along with the thief ?" CreationDate="2017-07-11T08:25:31.980" UserId="1855" />
  <row Id="4094" PostId="2555" Score="1" Text="Says the guy who's never seen code stolen outright. I started booby-trapping mine after a few times." CreationDate="2017-07-11T17:17:02.867" UserId="1888" />
  <row Id="4117" PostId="2555" Score="0" Text="@Joshua your homework code wouldn't be stolen if you weren't doing something unethical with either it or your pc. Other students aren't going to hack your pc. If they are, they probably don't need to see your answer." CreationDate="2017-07-12T01:46:52.767" UserId="1906" />
  <row Id="4118" PostId="2555" Score="0" Text="@Quentin depends on how it was stolen. Leaving your pc unattended in a computer lab for 2 hours is a pretty easy way to have code stolen." CreationDate="2017-07-12T01:47:31.150" UserId="1906" />
  <row Id="4119" PostId="2555" Score="1" Text="@Typhon: It was stolen off the department server not my computer. My home computer had too weak a distro for advanced computer labs and I couldn't suck down a modern one over floppy disks." CreationDate="2017-07-12T01:48:32.647" UserId="1888" />
  <row Id="4120" PostId="2555" Score="1" Text="@Joshua in that situation the department is at fault, period. The security shouldn't be like that and you cannot be punished for illegal access like that." CreationDate="2017-07-12T01:53:06.170" UserId="1906" />
  <row Id="4159" PostId="2555" Score="0" Text="@Typhon At the university, we were using Linux computers, so we were instructed to limit permissions of the files we save in out home directory. The reason was that with default permissions any user could read our home directory and plagiarize our work." CreationDate="2017-07-12T16:55:10.343" UserDisplayName="user1934" />
  <row Id="4173" PostId="2555" Score="0" Text="@Ville-ValtteriTiittanen the computers at my institution delete all files on the hard drive when restarting and while there is a shared network drive, it has been set up by the IT department so that people cannot see other peoples files... even professors use that drive." CreationDate="2017-07-12T20:02:10.530" UserId="1906" />
  <row Id="3992" PostId="2559" Score="1" Text="I love #1. Could you expand a bit (or give a link) for #s 2 and 3? I am having trouble following." CreationDate="2017-07-10T21:40:21.793" UserId="27" />
  <row Id="4109" PostId="2559" Score="0" Text="These activities look very intriguing but I think I'd need a little more detail to understand how it would work in the classroom.  I'll check around google but any details you could provide about your learning agent in number 2 or the actual ant colony simulator you are referring to, that would be very helpful." CreationDate="2017-07-11T21:30:28.637" UserId="1015" />
  <row Id="3987" PostId="2560" Score="0" Text="Ben, my school has a code of conduct, but it does not say anything about this particular issue. Your idea about the debate is a very good one, but I teach in a higher education school where several of my &quot;kids&quot; are older than I am :) and I suppose I won't have time for that! But I will for sure start doing a debate about this issue on the first class of the semester." CreationDate="2017-07-10T20:59:02.553" UserId="1144" />
  <row Id="4018" PostId="2561" Score="1" Text="Yes, looking at an Eliza-type program's source could be very informative.  Get one in the right language and have the students extend it and add new behavior/responses/triggers" CreationDate="2017-07-11T01:04:51.197" UserId="662" />
  <row Id="3990" PostId="2563" Score="3" Text="She has quite an interesting story! Nice first post, and welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-10T21:35:01.793" UserId="27" />
  <row Id="3997" PostId="2563" Score="5" Text="+1 Wow... Hollywood film star who also &quot;developed a radio guidance system for Allied torpedoes&quot;... I'm just gonna crawl back in my hole now. Though sadly (for the purposes of this question) it seems like she was more of a female electrical engineer rather than computer scientist? I wouldn't really call frequency hopping and spread-spectrum technology a CS thing, especially not something you'd talk about in an undergrad class. How I wish there was a way to talk about her though." CreationDate="2017-07-10T22:36:35.937" UserId="823" />
  <row Id="4172" PostId="2563" Score="2" Text="This is a controversial case, as Lamarr's contribution was simply application of a known technique to a specific task (torpedo control). She neither invented nor extended frequency-hopping itself." CreationDate="2017-07-12T19:57:07.417" UserId="659" />
  <row Id="4004" PostId="2565" Score="1" Text="Hi Shannon! Welcome to [cseducators.se]! Thanks for the well sourced and useful answer! I hope to see you around the site more!" CreationDate="2017-07-10T23:14:30.040" UserId="58" />
  <row Id="4136" PostId="2565" Score="4" Text="IMHO, both the investigation on the Therac-25 and Feynman's &quot;Personal observations on the reliability of the Shuttle&quot; should be read by every engineer." CreationDate="2017-07-12T11:04:01.850" UserId="1920" />
  <row Id="3999" PostId="2567" Score="2" Text="Hi Or! Welcome to [cseducators.se]. This is a very interesting answer, and I hope to see you around the site more, contributing your knowledge." CreationDate="2017-07-10T23:09:59.163" UserId="58" />
  <row Id="4015" PostId="2568" Score="0" Text="Bob is the author of his solutions. How can you forbid him to publish his own work? Plagiarism is the fault of the plagiazer not the original author." CreationDate="2017-07-11T00:31:14.603" UserId="1834" />
  <row Id="4017" PostId="2568" Score="0" Text="@Džuris Published? I'm talking about students copying code written for class projects; nothing's published anywhere (or *worth* publishing, for that matter).  But if Bob had previously published code that he reused for the assignment, then the publication's timestamp would establish Bob as the original author, and I'd require Alice to cite that source just like anything else she found online.  And if Bob only wrote the code for the assignment, he should hold off on publishing it until all the submissions are in." CreationDate="2017-07-11T00:42:57.127" UserId="827" />
  <row Id="4049" PostId="2568" Score="1" Text="Ray, I agree with all your scenarios, and so far I have never punished the original author, but as you mentioned, that is giving them a sense that they can share what they want. In some way, it is kind of holding an exam solution and walk in the classroom showing the solution to the colleagues. The student is just showing the solutions… the colleagues may or may not copy them." CreationDate="2017-07-11T10:29:18.397" UserId="1144" />
  <row Id="4012" PostId="2569" Score="2" Text="Hmmm. Doesn't that put more work on an innocent party?" CreationDate="2017-07-11T00:23:38.537" UserId="1293" />
  <row Id="4150" PostId="2570" Score="2" Text="You can mention Adele Goldberg and Barbara Liskov in the same lecture, the history of object-oriented programming languages." CreationDate="2017-07-12T15:28:21.037" UserId="283" />
  <row Id="4144" PostId="2571" Score="1" Text="I love the last line, and the overall sentiment of this answer." CreationDate="2017-07-12T12:57:22.570" UserId="1925" />
  <row Id="4167" PostId="2571" Score="1" Text="Agreed that, for example, expulsion for a first offense, particularly for a freshman, might be excessively harsh, but I'd also say that the best way for most people to learn the lesson is for the punishment to be at least enough to sting, especially in case of blatant academic dishonesty where any reasonable person should have known better. Getting a zero on the particular assignment, for example, seems appropriate. I also had at least one professor who, upon discovering students shared an assignment, would grade the assignment and then divide by the number of students who shared. Seemed fair." CreationDate="2017-07-12T18:30:44.440" UserId="1319" />
  <row Id="4171" PostId="2571" Score="0" Text="@reirab Your professor made my day!" CreationDate="2017-07-12T19:18:29.657" UserId="1328" />
  <row Id="4023" PostId="2573" Score="2" Text="Hi Scott! Welcome to [cseducators.se]! Thank you for this very interesting take on this question! I hope to hear more from you around the site." CreationDate="2017-07-11T03:25:10.103" UserId="58" />
  <row Id="4044" PostId="2573" Score="1" Text="Hi Scott! To me it is OK, if one student help other. Even if a part of the code is similar, no problem. To me, a huge problem happens when several different files are 90-100% equal..." CreationDate="2017-07-11T10:14:16.270" UserId="1144" />
  <row Id="4047" PostId="2575" Score="0" Text="Joel, I understand what you said, and I agree with you. I always have interviews and code reviews with the students. So there goes my question: I  am 100% sure about who really made the work. Should I punish that student? In other answers people are saying that it might have happened involuntarily (GIT, ...)... although that might be the case, I guess that in most cases, the students simply exchange the code between themselves (via Facebook groups, Whatsapp, ...)" CreationDate="2017-07-11T10:21:47.497" UserId="1144" />
  <row Id="4039" PostId="2577" Score="0" Text="Could this be better asked as how to evaluate a puzzle for use as a CS teaching tool, than as a request for a list of puzzles?" CreationDate="2017-07-11T09:20:19.737" UserId="104" />
  <row Id="4057" PostId="2577" Score="0" Text="David Ginat has done a lot of work with this and has a wealth of exercises. Some has appeared in ACM publications and at SIGCSE conferences. See, for example: http://dl.acm.org/author_page.cfm?id=81100382337&amp;coll=DL&amp;dl=ACM&amp;trk=0" CreationDate="2017-07-11T11:23:37.080" UserId="1293" />
  <row Id="4058" PostId="2578" Score="0" Text="Buffy, first of all thank you for such and interesting answer. I also believe that pair/group work are very important, especially in CS. The problem is that in the past I've done that, but when it came to that part when I asked them: Well, who made what? Was it 50-50? Who contributed the most?... Even when I was sure that it was like 80-20 (100-0 in some cases) they would say it was 50-50. :)" CreationDate="2017-07-11T11:34:01.450" UserId="1144" />
  <row Id="4059" PostId="2578" Score="1" Text="That is why I ask the sort of questions that let them avoid such answers. Not, &quot;did your partner do his/her share&quot;, but &quot;what did he/she contribute&quot;." CreationDate="2017-07-11T11:42:49.330" UserId="1293" />
  <row Id="4062" PostId="2578" Score="0" Text=":) Sure, with me that question would also arise immediately after the first one.  But they would have their lesson well study and in the end would still seem like (50-50). Even know I receive pieces of code with almost one comment per line :)" CreationDate="2017-07-11T11:56:15.557" UserId="1144" />
  <row Id="4063" PostId="2578" Score="0" Text="Hmmm. Excessive comments are a &quot;Code Smell&quot; of course." CreationDate="2017-07-11T12:01:06.083" UserId="1293" />
  <row Id="4065" PostId="2580" Score="0" Text="Welcome to CSEducators Stack Exchange! This is Avery interesting answer. I hope we'll be hearing more from you." CreationDate="2017-07-11T13:12:33.803" UserId="150" />
  <row Id="4066" PostId="2581" Score="0" Text="Hello and welcome to CSEducators Stack Exchange! What a wonderful answer. I hope we'll be hearing more from you." CreationDate="2017-07-11T13:28:04.003" UserId="150" />
  <row Id="4068" PostId="2582" Score="0" Text="I think the answer is useful and shows an alternate model." CreationDate="2017-07-11T13:30:08.390" UserId="1293" />
  <row Id="4070" PostId="2583" Score="0" Text="We have several such courses focusing on different aspects of development. Distributing work and coordinating as a team a part of the course (sometimes even the main goal)." CreationDate="2017-07-11T13:34:47.577" UserId="1062" />
  <row Id="4073" PostId="2584" Score="0" Text="Do you think I can introduce them to pair programming at this stage?" CreationDate="2017-07-11T14:22:30.137" UserId="1871" />
  <row Id="4075" PostId="2584" Score="0" Text="How much experience do they have with computer science?" CreationDate="2017-07-11T14:26:04.110" UserId="1511" />
  <row Id="4076" PostId="2584" Score="0" Text="1 year or less, they might have done some programming in school and know the basics." CreationDate="2017-07-11T14:29:02.443" UserId="1871" />
  <row Id="4078" PostId="2584" Score="0" Text="Welcome to Computer Science Educators! This answer is great, and if you added parts that address more points which are relevant (more examples, explanations etc.) it would be much, much better." CreationDate="2017-07-11T14:41:54.060" UserId="150" />
  <row Id="4074" PostId="2585" Score="0" Text="No, there is no goal to work in a team. It's about them being able to use the tool." CreationDate="2017-07-11T14:23:18.480" UserId="1871" />
  <row Id="6517" PostId="2585" Score="0" Text="I think this is a really good answer, I'd only add to it that if you choose team work, you should create clear and distinguished responsibilities for each individual in the team. This way you can prevent &quot;one person doing everything, the rest doing nothing&quot; kind of teams." CreationDate="2017-08-03T12:29:36.297" UserId="1681" />
  <row Id="4083" PostId="2586" Score="2" Text="You should explain what the goals of your course are, what topics you cover, and in which order, etc. Off the top of my head, I'd think of having students implement a game or something, but it seems that's not exactly what you're looking for." CreationDate="2017-07-11T14:57:35.970" UserId="732" />
  <row Id="4084" PostId="2586" Score="0" Text="Thanks, @Michael0x2a, I have refined the question, I hope this is better." CreationDate="2017-07-11T15:20:39.277" UserId="1871" />
  <row Id="4096" PostId="2586" Score="0" Text="This question is still simply asking for a list of app ideas and provides no useful way to compare the answers to find a &quot;best&quot; answer. For that reason, I've voted to close it as too broad." CreationDate="2017-07-11T18:13:01.583" UserId="58" />
  <row Id="4097" PostId="2586" Score="0" Text="Can you convert it into wiki? If there are more app ideas, I thought it could be a good resource for this portal." CreationDate="2017-07-11T18:14:28.883" UserId="1871" />
  <row Id="4098" PostId="2586" Score="1" Text="If you could provide ideas how to rephrase / modify the question, i would appreciate." CreationDate="2017-07-11T18:15:01.070" UserId="1871" />
  <row Id="4092" PostId="2591" Score="1" Text="Very nice first answer.  We always appreciate the thoughtful student perspective. Welcome to [cseducators.se], I hope we hear more from you in the future." CreationDate="2017-07-11T16:47:09.683" UserId="27" />
  <row Id="4102" PostId="2594" Score="2" Text="Excellent, well stated, and focused question." CreationDate="2017-07-11T19:55:28.600" UserId="104" />
  <row Id="4128" PostId="2601" Score="0" Text="Additional details: High school, none of us have been taught programming before except basic HTML. I have been programming for years, and the teachers are aware of the fact that students ask me for help, sometimes they're even sent to me by them..." CreationDate="2017-07-12T06:16:15.457" UserId="1912" />
  <row Id="4133" PostId="2601" Score="0" Text="Hi, Rahul2001! First off, thoughtful student responses are certainly welcome in this community, so welcome to [cseducators.se]! This answer has a few problems, however. First, it violates the [Be Nice](https://cseducators.stackexchange.com/help/be-nice) policy. Second, it isn't really an answer to OP's question. I have edited for the first problem, but the second one only you can fix. *(BTW, don't worry, we still like you. I promise that you aren't the first person to have trouble with an initial post, and you won't be the last!)*" CreationDate="2017-07-12T10:17:07.933" UserId="27" />
  <row Id="4134" PostId="2601" Score="0" Text="@Rahul2001 I understand what you are saying. The teachers can't cover every single student at the same time, so to me it is OK if you have a student looking at someone's code to have a board idea about the solution or to overcome a specific difficulty. On the other side, I feel that it is not so correct when a student simply grabs the colleagues code and submit the code as being written by themselves. My initial question was about this last scenario. ;)" CreationDate="2017-07-12T10:18:04.813" UserId="1144" />
  <row Id="4138" PostId="2602" Score="10" Text="Look up your institutions policy. The code is either the universities (if the policy says so) or the students (if the policy doesn't say anything), but never the professor and can certainly not be used by a 3rd party without consent of the student or university (depending on whom the code belongs)." CreationDate="2017-07-12T11:33:46.260" UserId="1086" />
  <row Id="4152" PostId="2602" Score="0" Text="@Polygnome Or potentially both the student and the university, as sometimes they co-own the code." CreationDate="2017-07-12T15:53:21.093" UserId="1319" />
  <row Id="4153" PostId="2602" Score="2" Text="Not a lawyer, but I would say I don't care what your policy is, it is my work and I do not have a contract with you, to assign the copyright to you. If there is no reciprocal clause (what I get out of assigning copyright to you), then it is an unfair contract, and therefore invalid. (policy is not statute, as I often remind companies)" CreationDate="2017-07-12T16:00:13.163" UserId="204" />
  <row Id="4157" PostId="2602" Score="1" Text="&quot; it is my work and I do not have a contract with you, to assign the copyright to you.&quot; Actually, when enrolling, you have to sign lots of papers stating lots of things. One of those is usual the university policy... So yes, if the university didn't sleep you had to sign exactly such a contract." CreationDate="2017-07-12T16:27:59.393" UserId="1086" />
  <row Id="4162" PostId="2602" Score="1" Text="You asked _is this ethical?_, while the hidden, and answered, question is _is this legal?_ For many centuries it has been known that `ethical ≠ legal`. If the student has legal representation at the same level as the school and the business, that's not obligated to either for payment, then an &quot;ethical&quot; situation _might_ be achieved, otherwise it cannot." CreationDate="2017-07-12T17:08:40.823" UserId="104" />
  <row Id="4199" PostId="2602" Score="0" Text="@pallygnome even if I signed something, then it would still be an unfair contract, as there is no reciprocation (unless they claim that writing code for them is the price for the education, in the UK the current maximum price is £9000 + 0). There for the student would not be bound by it." CreationDate="2017-07-13T18:30:27.980" UserId="204" />
  <row Id="4148" PostId="2603" Score="3" Text="GPL would require the company consuming the code to release the code base leveraging it as GPL, right? This may be a case where MIT would be a good fit." CreationDate="2017-07-12T14:38:52.350" UserId="1477" />
  <row Id="4163" PostId="2603" Score="1" Text="I will never sign an NDA which exceeds the time of my association with the other party. I will _consider_ an NDA, with proper review, that does terminate at the end of any other relationship with the other party." CreationDate="2017-07-12T17:11:31.353" UserId="104" />
  <row Id="4145" PostId="2604" Score="0" Text="In &quot;My advice&quot; I think you mean &quot;to the professor&quot;. I think that is good advice, as are your reasons for it. You might clarify the post a bit with edit." CreationDate="2017-07-12T13:55:41.217" UserId="1293" />
  <row Id="4143" PostId="2605" Score="1" Text="I think &quot;open source&quot; and &quot;owned by a group&quot; mean different things. To open source something means formally yielding your normal rights to the world. It implies, of course, that you have those rights to yield in the first place, as you surely do in the case you cite." CreationDate="2017-07-12T12:43:23.693" UserId="1293" />
  <row Id="4147" PostId="2605" Score="1" Text="I think you mean that all contributors have individual rights to copy and re-licence the code (maybe along the lines of Apache-2.0?) but it would be useful if you could provide more detail of this standard license." CreationDate="2017-07-12T14:30:19.350" UserId="41" />
  <row Id="4154" PostId="2605" Score="0" Text="You have yet to see that happen, because there is an imbalanced relationship (Where one party takes advantage of another). In a lot of jurisdictions this would make the contract invalid." CreationDate="2017-07-12T16:05:53.120" UserId="204" />
  <row Id="4158" PostId="2605" Score="1" Text="@Buffy Open Source does not involve yielding rights, it involves giving rights. Unless you count the right to deprive rights." CreationDate="2017-07-12T16:49:02.950" UserId="204" />
  <row Id="6335" PostId="2607" Score="0" Text="Hey @SeanHoulihane.  You often have very keen insights. I miss seeing you around the site!" CreationDate="2017-07-31T02:57:41.403" UserId="27" />
  <row Id="6344" PostId="2607" Score="0" Text="@BenI. Still here - but SW is not my field (more cpu HW), so IP questions are easier..." CreationDate="2017-07-31T09:04:51.443" UserId="41" />
  <row Id="6347" PostId="2607" Score="0" Text="What's the acronym SW?" CreationDate="2017-07-31T11:48:06.513" UserId="27" />
  <row Id="6348" PostId="2607" Score="0" Text="Software... Which is what most people talk about when the think of computer science." CreationDate="2017-07-31T11:49:39.650" UserId="41" />
  <row Id="4156" PostId="2608" Score="0" Text="Welcome to [Computer Science Educators](https://cseducators.stackexchange.com). This is a very interesting answer, and I hope to see you around the site more" CreationDate="2017-07-12T16:25:38.413" UserId="104" />
  <row Id="4381" PostId="2608" Score="0" Text="I removed the women who I didn't think were relevant to the question (relevant to topics in introductory CS classes). Feel free to rollback if you disagree!" CreationDate="2017-07-16T15:54:18.350" UserId="919" />
  <row Id="4502" PostId="2609" Score="1" Text="I was not the DV, but you say that the MIT license is *&quot;abusing the power that the school has over the students&quot;*. How so? If I require a student to use GPL, they are not free to fork their own code and use it to seed their own proprietary software; that is theft.  MIT allows them to do literally anything they want with it, (particularly if they never publish it publically)." CreationDate="2017-07-19T00:36:31.897" UserId="27" />
  <row Id="4527" PostId="2609" Score="1" Text="@BenI This is not so. The thing that would stop the student from creating a proprietary fork, would be if the school took the copyright from the student. The GPL licence will not do it. If a software is licences under GPL then any copyright holder is free to re-licence under any licence that they wish. Including proprietary." CreationDate="2017-07-19T15:51:39.873" UserId="204" />
  <row Id="4528" PostId="2609" Score="0" Text="&quot;The GPL is a copyleft license, which means that derivative work **can only be distributed under the same license terms**. This is in distinction to permissive free software licenses, of which the BSD licenses and the MIT License are widely used examples.&quot; (Emphasis mine) ([Link](https://en.m.wikipedia.org/wiki/GNU_General_Public_License))" CreationDate="2017-07-19T16:01:17.107" UserId="27" />
  <row Id="4529" PostId="2609" Score="1" Text="@BenI. A licence is a contract between 2 parties. In this case the copyright holder, and anyone that need to be to avoid being in copyright infringement. As you can not be in breach of contract with yourself, and the student is the copyright holder. Then the student is free from the contract, and thus may re-licence any way they like. See https://www.fsf.org/blogs/rms/selling-exceptions for the Free Software Foundations thoughts on this practice." CreationDate="2017-07-19T16:05:31.047" UserId="204" />
  <row Id="4184" PostId="2611" Score="0" Text="The 2012 SAUS (Oct 2011) can be downloaded from https://www2.census.gov/library/publications/2011/compendia/statab/131ed/2012-statab.pdf" CreationDate="2017-07-13T05:16:25.170" UserId="104" />
  <row Id="4197" PostId="2611" Score="0" Text="Thank you. The Data USA website held the most recent statistics in a convenient format. https://datausa.io/profile/cip/110701/#grads_ethnicity_gender" CreationDate="2017-07-13T18:15:01.533" UserId="283" />
  <row Id="4474" PostId="2612" Score="0" Text="Would you be interested in non-physical games too? I have a few activities + materials from a week-long summer orientation for college freshmen, but mostly in a seated group work format with Peer Instruction style discussion." CreationDate="2017-07-18T15:31:56.620" UserId="2045" />
  <row Id="20705" PostId="2612" Score="0" Text="The SIGCSE mailing list has a current (Aug '22) thread on just this topic and there are a lot of examples there." CreationDate="2022-08-22T19:34:10.527" UserId="1293" />
  <row Id="4196" PostId="2613" Score="0" Text="Thank you. FWIW, I tried going to IPEDS to get more recent data myself and couldn't figure out how to." CreationDate="2017-07-13T18:13:06.643" UserId="283" />
  <row Id="4223" PostId="2613" Score="0" Text="@EllenSpertus Yes, it's not very intuitive. I added some info on how I used their system.  Alternatively, you could contact their help desk by phone or email as described at https://nces.ed.gov/ipeds/Home/Questions" CreationDate="2017-07-14T02:12:46.430" UserId="16" />
  <row Id="4176" PostId="2615" Score="0" Text="Great ideas. The first one also helps the teacher learn the names." CreationDate="2017-07-12T22:09:54.943" UserId="1293" />
  <row Id="4214" PostId="2615" Score="0" Text="Also birthdays and home cities.  If you have enough students in the class (roughly 25) two of them will likely have the same the same birthday which leads to one kind of interesting conversation, and then sorting by distance gets into another." CreationDate="2017-07-13T20:35:56.337" UserId="1961" />
  <row Id="4254" PostId="2615" Score="0" Text="@DaveKaye With 25 pupils you only have a 58% probability of two sharing a birthday. $1-\prod_{i=0}^{25} (1-i/365)$ or `1 - reduce(lambda x, y: x * y, [(1-i/356.0) for i in range(25)])`" CreationDate="2017-07-14T16:20:25.977" UserId="204" />
  <row Id="4261" PostId="2615" Score="0" Text="Sounds to me like a great opportunity to discuss the Birthday Problem, no?  That's much more my point." CreationDate="2017-07-14T16:38:42.513" UserId="1961" />
  <row Id="20708" PostId="2615" Score="0" Text="I sense an opportunity to talk about _parallel_ sorting algorithms here." CreationDate="2022-08-25T21:28:28.237" UserId="1269" />
  <row Id="4180" PostId="2617" Score="1" Text="Nice perspective.  Welcome to [cseducators.se]!  I hope we hear more from you in the future. :)" CreationDate="2017-07-13T02:29:41.920" UserId="27" />
  <row Id="4189" PostId="2618" Score="0" Text="Hi Dennis! Welcome to [cseducators.se]! I'm glad you were able to add a new perspective here." CreationDate="2017-07-13T10:41:52.120" UserId="58" />
  <row Id="4191" PostId="2618" Score="0" Text="I think that &quot;guilty until proven innocent&quot; isn't best practice in any field. There can be social pressure among students that push an innocent person to not speak up to defend themselves. Surely the system should be more fair." CreationDate="2017-07-13T11:13:45.763" UserId="1293" />
  <row Id="4500" PostId="2622" Score="1" Text="+1000 for the pbj game. Google &quot;peanut butter jelly instructions challenge&quot; or &quot;exact instructions challenge&quot; for a ton of fun results and videos. Honestly this process of breaking things down into smaller steps is probably the most important skill in programming, so introducing it as early as possible (in a fun way) is a great idea." CreationDate="2017-07-18T23:18:34.297" UserId="2068" />
  <row Id="4211" PostId="2628" Score="2" Text="I agree. Thanks for joining CSE. I hope we see more posts from you." CreationDate="2017-07-13T20:16:00.117" UserId="283" />
  <row Id="17948" PostId="2631" Score="0" Text="&quot;Actually understanding&quot; really seems like the way to go, no matter the difficulty or cost. Win or fail, but don't emerge with wrong ideas." CreationDate="2021-05-02T01:22:12.767" UserId="5349" />
  <row Id="4217" PostId="2632" Score="0" Text="In the C-style languages is it allowed to let step be a default? I.e., is `for (int i = 0; i &lt; 100; ) {` legal and intrepreted as increment `i` by one each step?" CreationDate="2017-07-13T22:48:50.177" UserId="104" />
  <row Id="4218" PostId="2632" Score="8" Text="Actually that is legal, but is an infinite loop, with i always 1. Also: defaults of all kinds are frequent sources of error. Make your programs explicit." CreationDate="2017-07-13T23:15:16.013" UserId="1293" />
  <row Id="4219" PostId="2632" Score="0" Text="I asked, because frequently parameters are often set up so that they can be dropped (defaulted) in reverse order (right-to-left). In the case of `for`, if that's part of the logic in creating the syntax, it can be given as `for (int i = 0; i &lt; 100; ){`, or `for (int i = 0 ; ; ){`  but not `for (int i = 0 ; ; i++) {` because the center term is empty, while some term to the right is not empty." CreationDate="2017-07-14T00:12:00.007" UserId="104" />
  <row Id="4227" PostId="2632" Score="6" Text="@GypsySpellweaver any or all of them can be empty, in any combination, but they all default to nothing (respectively: no initialization, no termination except by explicit `break`, and no post-loop-body expression)." CreationDate="2017-07-14T05:01:37.400" UserId="1970" />
  <row Id="4230" PostId="2632" Score="0" Text="@hobbs I was suspecting that they were independently &quot;empty-legal&quot; since they are, in essence commands (with the `;` separator), but the habit of what makes sense to the language creators for a parameter list probably had its influence. Having started with a different language, with explicit syntax would help the students. Something like `FOR int x = 1 TO 100 STEP 1` leaves no doubt, while being less adaptable." CreationDate="2017-07-14T05:10:51.197" UserId="104" />
  <row Id="4241" PostId="2632" Score="2" Text="Can you add some specific problems your students seem to have with learning the for loop?" CreationDate="2017-07-14T13:43:33.463" UserId="652" />
  <row Id="4267" PostId="2632" Score="2" Text="@GypsySpellweaver - No, there is no default behavior to a C-style for loop.  The three parts are valid C expressions that don't necessarily have anything to do with indexing a variable.  The expression could read another line of input from a file and the exit test could be checking for &lt;EOF&gt;.  It is very flexible and powerful, but you must tell it exactly what you want it to do." CreationDate="2017-07-14T18:58:11.047" UserId="1995" />
  <row Id="4271" PostId="2632" Score="2" Text="I got a much deeper understanding of `for-loop`s when my teacher started leaving `1`, `2`, or `3` blank, switched the variables in `1`, `2`, and `3` from `ints` to `booleans` (or even `Strings` in Java), or made loops that required logic in `4` to make `2` true (and `3` was obsolete). I started to understand what each part meant and how to use it, instead of assuming `for-loop`s were always &quot;increment an int until it hits a certain value&quot;." CreationDate="2017-07-14T21:32:39.470" UserId="1578" />
  <row Id="4296" PostId="2632" Score="3" Text="A for loop in c style syntax is a shortcut for a while loop with post operation (increment being a common case).  Show the expanded while form, then show the for form." CreationDate="2017-07-15T12:41:47.477" UserId="1537" />
  <row Id="4420" PostId="2632" Score="6" Text="This is why you shouldn't teach basic programming using C. It makes it extra hard to grasp the concept itself..." CreationDate="2017-07-17T11:00:27.593" UserId="51" />
  <row Id="10175" PostId="2632" Score="1" Text="Teach them to learn what things mean instead of guessing from how they look." CreationDate="2018-02-23T23:16:29.260" UserId="2485" />
  <row Id="11887" PostId="2633" Score="2" Text="Had one student that tried the &quot;all on one line of text&quot;.  I reformatted it in Netbeans, graded it by inserting /* comments like this */ and re-reformatted it back all onto one line and returned it." CreationDate="2018-04-02T02:54:18.383" UserId="662" />
  <row Id="16090" PostId="2633" Score="0" Text="Agreed that in the context where I teach, massively non-indented code is usually a sign of code copied from another source." CreationDate="2020-01-20T19:23:41.950" UserId="8137" />
  <row Id="17602" PostId="2633" Score="0" Text="We shouldn't underestimate the amount of heavy lifting IDEs do for us. But powerful IDEs can be intimidating and maybe we should do more to encourage students to adopt them." CreationDate="2021-01-27T13:50:37.930" UserId="8696" />
  <row Id="4220" PostId="2634" Score="9" Text="…and be prepared for the question &quot;*Why should we use `for` loops instead of `while` loops when they're doing equivalent things, what's their **advantage**?*&quot;" CreationDate="2017-07-14T01:34:49.990" UserId="660" />
  <row Id="4221" PostId="2634" Score="3" Text="@Bergi You're telling the compiler what you want more clearly, allowing more optimization, and they simply take up less space and look neater." CreationDate="2017-07-14T01:35:51.150" UserId="58" />
  <row Id="4222" PostId="2634" Score="20" Text="@thesecretmaster &quot;Required to tell the compiler…&quot; has never been a good reason. And I can only hope that the syntax choice does not affect the optimiser at all. The point is that they are easier to understand *for the programmer(s)* that have to read them. The iteration variable is (supposed to be) initialised and modified only in that single line, which makes for a an easily recognisable pattern and correct code where the update step is not forgotten. It also works with `continue;`" CreationDate="2017-07-14T01:45:11.063" UserId="660" />
  <row Id="4244" PostId="2634" Score="6" Text="@Bergi Keeping the loop control variable in the `for` scope is a practical advantage as well.  The more correct &quot;expansion&quot; of a `for` loop would be: `{int i = 0; while(i &lt; 100){++i;}}`." CreationDate="2017-07-14T13:51:26.083" UserId="753" />
  <row Id="4253" PostId="2634" Score="0" Text="In C# and C the declaration of the iteration variable ('i' in this case) can be inside or outside the opening parenthesis of the *for* statement, which means the scope can be only within the loop, or outside as well. This is a feature, not a bug: if you need the scope to extend beyond the loop, you can, and if you don't you don't need it to. I introduce *while* loops first, then explain *for* as an easier to read syntax." CreationDate="2017-07-14T16:18:59.213" UserDisplayName="user737" />
  <row Id="4300" PostId="2634" Score="0" Text="@IllusiveBrian creation of the loop variable inside the `for(` statement wasn't possible until C99 allowed it." CreationDate="2017-07-15T14:24:35.310" UserId="1076" />
  <row Id="4320" PostId="2634" Score="2" Text="For loops do not optimise better than while loops (at least in gcc, clang and visual studio in C and C++). Arguments about easier to read code are sensible." CreationDate="2017-07-15T17:50:15.630" UserId="1611" />
  <row Id="4325" PostId="2634" Score="0" Text="Won't this lead to teaching the Duff's device? That's not a path I'd recommend with students this fresh." CreationDate="2017-07-15T19:28:50.913" UserId="1504" />
  <row Id="4398" PostId="2634" Score="0" Text="I would like to add that, even though the while and for loops may be the same, in practical terms I would favor new programmers using the for loop, as it makes it much less likely to accidentally produce an infinite loop." CreationDate="2017-07-16T21:07:17.817" UserId="2044" />
  <row Id="10021" PostId="2634" Score="0" Text="About the cliché &quot;for loop are syntactical sugar around while&quot;, it must be noted that the C for-loop was present already present in  B https://www.thinkage.ca/english/gcos/expl/b/manu/manu.html#Section5_7_4 together with a `forever` loop which is leaved by break or goto. So the while loop is a shortcut for   `forever {  if (! condition) break; .... }` if you are sugar addicted." CreationDate="2018-02-07T10:33:21.997" UserId="2103" />
  <row Id="10056" PostId="2634" Score="0" Text="And, actually, `while(cond) instr` is syntactic sugar around the special case `for(;cond;) instr;` as it preserves the meaning of a `continue` statement, not the other way. The fact is, our opinions about which is more fundamental may be biased when we prevously taught Pascal where there is no equivalent to the C-like for loop." CreationDate="2018-02-09T07:56:52.617" UserId="2103" />
  <row Id="17175" PostId="2634" Score="0" Text="@Bergi: &quot;When you've dealt with iterative code for years, no matter which iteration is used, you [no longer see all of the code](https://78.media.tumblr.com/f8b9a8f9209c1220b0876a9ead23f353/tumblr_oylvu4FbMc1weu5xbo1_500.gif), you're only going to be looking at the important bits: initialization, evalutation to loop again, and how to change the evaluation with every loop that  is executed. The `while` syntax separates these bits and keeps them far away (unless the `while` body is trivially small, which it won't be in the real world), but the `for` keeps those things together, visually.&quot;" CreationDate="2020-10-14T10:13:58.763" UserId="2164" />
  <row Id="20073" PostId="2634" Score="0" Text="There is a difference in this while loop: the loop variable has scope beyond the end of the loop." CreationDate="2022-05-23T21:57:03.287" UserId="21" />
  <row Id="4366" PostId="2635" Score="0" Text="I edited to remove one of the women you mentioned because I didn't think she was relevant to the question. Feel free to rollback if you'd like!" CreationDate="2017-07-16T13:44:49.647" UserId="919" />
  <row Id="4255" PostId="2638" Score="0" Text="Boundary conditions are very helpful in explaining loops." CreationDate="2017-07-14T16:21:04.407" UserDisplayName="user737" />
  <row Id="4226" PostId="2639" Score="0" Text="Is the order of evaluation in your &quot;step&quot; even defined?" CreationDate="2017-07-14T03:14:02.213" UserId="1834" />
  <row Id="4228" PostId="2639" Score="1" Text="@Džuris yes. There is a sequence point between the evaluation of the left and right hand sides of the comma operator." CreationDate="2017-07-14T05:06:13.967" UserId="1970" />
  <row Id="4229" PostId="2639" Score="1" Text="(but calling it &quot;multiple statements&quot; isn't accurate. It's a single expression. And the `int i = 0, int j = 100` part actually isn't valid because that's not how declarations work, though it would be without the second `int`)." CreationDate="2017-07-14T05:08:49.587" UserId="1970" />
  <row Id="4232" PostId="2639" Score="0" Text="@hobbs oops and Thanks. Corrected to remove the declaration from the loop." CreationDate="2017-07-14T09:08:49.690" UserId="1293" />
  <row Id="4256" PostId="2639" Score="0" Text="Yay for the comma operator! I have used it to achieve some significant and very necessary functionality in the past, which I could not do otherwise (trying to fit a macro in place of a function, what is called 'inlining' these days)." CreationDate="2017-07-14T16:23:35.680" UserDisplayName="user737" />
  <row Id="19961" PostId="2639" Score="0" Text="The question explicitly asks about the scenario where the &quot;for&quot; loop is being taught to the students for the first time. It is quite clear that even the simplest version of the &quot;for&quot; loop causes enough confusion as it is. Having considered that, the approach of teaching all the potential use cases of the &quot;for&quot; loop would serve no other purpose than to confuse the students even more, rather than to solve the problem. Good education is about filtering the material in order to teach the simplest, yet the most powerful concepts within the student's current knowledge level. {continues}" CreationDate="2022-05-16T20:13:55.300" UserId="12078" />
  <row Id="19962" PostId="2639" Score="0" Text="Indiscriminately regurgitating all the loosely-related pieces of information regarding the &quot;for&quot; loop that you happen to know, and supplementing that with examples displaying absolutely atrocious coding practices, is just going to flood the students, quickly result in mental fatigue, and that is bad teaching. There is no need to confuse them by introducing the loosely-related concepts of comma operator, sequence points, and the deep details of expression evaluation in this stage. If they are struggling with the simple for loop, learning about comma operator &amp; co. won't help with that." CreationDate="2022-05-16T20:15:14.350" UserId="12078" />
  <row Id="19964" PostId="2639" Score="0" Text="Hmmm. Thank you for the &quot;Indiscriminately regurgitating&quot; slam. But I have to disagree for a lot of reasons. First, students will often need to read programs that they haven't written themselves and so will see such constructs in many algorithmic programs. Second. There are certainly simple cases in which the initialization is more than one statement. If they haven't seen the &quot;comma&quot; syntax, then they will probably put some of that outside the loop, breaking the principle that things that belong together should _be_ together, leading to the potential for future errors when programs evolve. more" CreationDate="2022-05-16T20:38:12.437" UserId="1293" />
  <row Id="19965" PostId="2639" Score="0" Text="Likewise, the update between iterations is a single statement in only the simplest of cases, and in anything more sophisticated, the student will be tempted to but that in the body of the loop (or part of it), possibly breaking abstraction as well as leading to future errors as well. If you teach them so little of C that they can only program awkwardly in what they have, you aren't doing them any favors." CreationDate="2022-05-16T20:40:56.847" UserId="1293" />
  <row Id="4249" PostId="2642" Score="1" Text="That's a clear way to explain loops. I use a similar approach." CreationDate="2017-07-14T15:31:54.893" UserId="1529" />
  <row Id="4338" PostId="2642" Score="1" Text="The do while and while loops stated aren't exactly equivalent. If after initialization, condition is false, then you never execute statement+update in the while loop, but in the do-while loop, you  always execute statement+update at least once. This could easily lead to confusion." CreationDate="2017-07-15T21:58:46.353" UserId="2026" />
  <row Id="4340" PostId="2642" Score="0" Text="@Batman Absolutely. That would be part of a broader instruction on the differences between and among these three loop constructs. Nevertheless, the general pseudocode holds true." CreationDate="2017-07-15T22:05:44.260" UserId="76" />
  <row Id="4412" PostId="2642" Score="1" Text="This is pretty much how I do it but I'm a little more explicit in each section: `pre-loop-initialisations`, `condition-for-doing-iteration`, `post-iteration-actions` and `iteration-actions`. Once they understand that the `iteration` is a single execution of the body and the `loop` is the entire thing, this seems to be easy to pick up (even for teens)." CreationDate="2017-07-17T01:49:20.447" UserDisplayName="user2049" />
  <row Id="16192" PostId="2642" Score="0" Text="My treatment of this differs only in that I call the third part &quot;between' instead of update. This is the right approach.  Also, it's' good to draw a diagram depicting the loop and pointing out the cycle in the graph. Hence &quot;loop.&quot;" CreationDate="2020-02-23T23:08:04.663" UserId="21" />
  <row Id="4257" PostId="2643" Score="0" Text="Great set of variations. And, it is not good to argue with Visual Studio about how to format the code either!" CreationDate="2017-07-14T16:26:21.040" UserDisplayName="user737" />
  <row Id="4233" PostId="2644" Score="0" Text="Hi ninjalj! Welcome to [cseducators.se]! This is an interesting first answer, thanks for contributing your knowledge here. I hope to see you around the site more." CreationDate="2017-07-14T10:28:14.870" UserId="58" />
  <row Id="4246" PostId="2647" Score="1" Text="You have a good point about the scope issue, though that's less a difference and more an issue of an incomplete translation.&#xA;  As noted in [@IllusiveBrian's comment](https://cseducators.stackexchange.com/questions/2632/teaching-the-humble-for-loop#comment4244_2634), `{}` need to be included to control for scope - which may look unusual since most people don't care enough about scope, but it's needed to maintain equivalence." CreationDate="2017-07-14T15:08:50.790" UserId="39" />
  <row Id="4247" PostId="2647" Score="1" Text="For example, the `int i = 0; while (i&lt; 100) { /* do something */ i++; }` above should be `{ int i = 0; while (i&lt; 100) { /* do something */ i++; } }`." CreationDate="2017-07-14T15:11:03.040" UserId="39" />
  <row Id="4259" PostId="2647" Score="0" Text="Sometimes you *want* to be able to see the final state of the loop control variable outside the body of the loop. I teach that also. &quot;Students do the darndest things.&quot;" CreationDate="2017-07-14T16:28:35.380" UserDisplayName="user737" />
  <row Id="4557" PostId="2647" Score="0" Text="scope and pollution can be limited by a pair of curly brackets around declaration + loop." CreationDate="2017-07-19T20:14:56.190" UserId="2103" />
  <row Id="10058" PostId="2647" Score="0" Text="anyway, a `continue` statement in the body breaks the equivalence of the 2 pieces of code." CreationDate="2018-02-10T16:59:54.967" UserId="2103" />
  <row Id="17288" PostId="2647" Score="0" Text="@user737 when you're searching an array, a cleaner way (IMHO) is to use separate variables for iteration and result.&#xA;`&#xA;int index = -1 ; /* not found yet */&#xA;for (int i = 0; i &lt; size; i ++) {&#xA;     if (I found it) {&#xA;           result = i;&#xA;           break; &#xA;}}&#xA;` as it avoids leaking a temporary iteration variable outside the loop." CreationDate="2020-11-20T07:33:07.357" UserId="2103" />
  <row Id="4556" PostId="2650" Score="0" Text="Not only syntactical sugar around a `while` loop, as the `continue` statement of the `while` loop skips the &quot;poststatement&quot;." CreationDate="2017-07-19T19:48:38.823" UserId="2103" />
  <row Id="17283" PostId="2650" Score="0" Text="@MichelBillaud: Good point, I should clarify the issue with `continue`.  Don't get me wrong, it's still just syntactic sugar, but probably ought to clarify that `continue` targets the spot after `//  loop body` in the translation." CreationDate="2020-11-20T02:34:02.870" UserId="39" />
  <row Id="17287" PostId="2650" Score="0" Text="In C, control structures are mostly macros trying to hide some gotos under the carpet. But don't tell that to students." CreationDate="2020-11-20T07:09:33.670" UserId="2103" />
  <row Id="4288" PostId="2651" Score="4" Text="You learned in the procedural era, didn't you?" CreationDate="2017-07-15T04:37:06.217" UserId="668" />
  <row Id="4297" PostId="2651" Score="0" Text="Remember, some languages have arrays with indexes that are not numeric - the associative array in PHP is like this, so database query results and json data.  To loop through an array of this type, using a for each style loop is required.  `foreach($array as $key=&gt;$value)` - but then, you did specify for Java, so these reasons don't exist in your particular use case...." CreationDate="2017-07-15T13:33:27.673" UserId="662" />
  <row Id="4328" PostId="2651" Score="1" Text="I'd just like to say that for the past couple years I've been using languages that don't have a c-style for loop. I never missed it." CreationDate="2017-07-15T20:16:10.340" UserId="2025" />
  <row Id="4352" PostId="2651" Score="9" Text="Can you share your reasons *why* you dislike it?" CreationDate="2017-07-16T07:07:07.290" UserId="660" />
  <row Id="4476" PostId="2651" Score="5" Text="Yikes, I hope you're not suggesting you wouldn't teach students about the `foreach` loop if you weren't forced to by your curriculum!" CreationDate="2017-07-18T16:11:16.887" UserId="1218" />
  <row Id="10007" PostId="2651" Score="1" Text="@ivanian java has many constructs that you cannot iterate through with an index counter, including Maps, which are functionally the same as arrays indexed by objects. The foreach construct is very convenient for avoiding hard to track but simple words in looping." CreationDate="2018-02-04T04:38:38.063" UserId="1537" />
  <row Id="4286" PostId="2654" Score="6" Text="Speaking as a Java programmer, not a teacher, I only use the old style loops when there is a clear benefit. The foreach loop can compile more efficiently, and as Buffy says they prevent common errors that beginners are prone to make, but also plague more experienced programmers who get a little lax." CreationDate="2017-07-15T03:57:26.930" UserId="1537" />
  <row Id="4292" PostId="2655" Score="0" Text="I think if you are going to talk about the limits, an interesting point to make is that Java's limited support for things like tuples make it harder to implement good solutions inside iterators. Python, for example, makes part 1 rather easy (`any(first &lt; second) for (first, second) in zip(items[1:], items))`). Likewise, `C#`'s `ref` returns could be used to solve the second case (although they aren't, as far as I know). I think it's valuable to note that the iterator provides a lot of value but in some cases is too limited (by it's design in that language) to solve some problems." CreationDate="2017-07-15T10:45:51.703" UserId="2013" />
  <row Id="4293" PostId="2655" Score="2" Text="Most importantly, it's increasingly common for programmers to have to deal with large amounts of data, and storing all of your data in memory isn't always possible. Traditional indexing `for` loops are generally useless when dealing with lazy data, and so understanding how to do things with iterators rather than indexing means your code can scale far more effectively." CreationDate="2017-07-15T10:50:49.810" UserId="2013" />
  <row Id="4313" PostId="2655" Score="0" Text="&quot;When the last one turns out to be impossible&quot;... `Optional&lt;Double&gt; last = Optional.empty(); for (Double d2 : myDoubles) { if (last.map(d1 -&gt; d2 &lt; d1).orElse(false)) return false; last = Optional.of(d2); }`. Ok, it's a *little* harder to understand at first grasp than yours, but has the advantage that it's O(n) for all standard collection classes, whereas your version is O(n^2) for linked lists, and is also thread safe if `myDoubles` is a concurrent collection. And it promotes a way of thinking about the problem that is more generally useful and less fragile than working directly with indices." CreationDate="2017-07-15T16:55:31.043" UserId="848" />
  <row Id="4319" PostId="2655" Score="0" Text="(and yes, I do think these concepts are fundamental enough that they should be taught early enough that students looking at the `foreach` loop should already know about them: the &quot;optional&quot; container type, lambda functions, &quot;map&quot; functions on containers -- we think of them as advanced topics because they were introduced late to most of our popular languages, but the different way of thinking about problems they enable can make for much better code in many situations, and they should therefore probably be our first choice for tackling most problems, so why not teach them first?)" CreationDate="2017-07-15T17:35:44.570" UserId="848" />
  <row Id="4429" PostId="2655" Score="0" Text="Oh. When I saw you talking about the limitations in the question the first one which came to mind is that you can't call `remove()` on the `Iterator`, but that doesn't seem to enter into your considerations at all. I see `for (Foo foo : foos) {` as sugar for `for (Iterator&lt;Foo&gt; it = foos.iterator(); it.hasNext(); ) { Foo foo = it.next();`, but all of the answers seem to be about iterating over arrays rather than collections." CreationDate="2017-07-17T15:33:17.857" UserId="1219" />
  <row Id="4307" PostId="2658" Score="0" Text="Richard Feynman said that he could learn something new even from a lecture on basic Physics. It is usually fruitful to occasionally re-explore the origins and fundamentals of a field. The original framework you had might just expand and become more clear after learning lots of new stuff. I call this an *&quot;Organizing Impulse&quot;*, similar to what happened to Blaise Pascal and other famous people at crucial points." CreationDate="2017-07-15T15:20:03.690" UserDisplayName="user737" />
  <row Id="4275" PostId="2659" Score="0" Text="I stand by the pedagogic usefulness of my example, though I will add yours into my future discussions of the  tradeoffs. If you add an extra int, then there are no limits on power, because you could also just add back in the missing sentinel value. But the complexity of the code rises, and the fact that you're not given a sentinel in the first place is still a limit of the form itself that you must work around. And without the additional variable, the sequential comparison is not possible." CreationDate="2017-07-14T23:26:26.773" UserId="27" />
  <row Id="4280" PostId="2659" Score="1" Text="@BenI: a third alternative you could bring up is implementing a helper function that transforms an iterable into an iterable of pairs and foreach over that. The syntax is still a bit clunky because Java had no built-in syntax for manipulating/destructuring types, but it would make the foreach approach clean again/visually similar to the for loop solution. It's perhaps cheating in the context of your exercise since we're not sticking with just foreach loops, but this would be a good opportunity to help students start thinking about iteration on a higher level." CreationDate="2017-07-14T23:59:42.000" UserId="732" />
  <row Id="4315" PostId="2659" Score="0" Text="See my comment on @BenI.'s answer: Using `java.util.Optional` makes this *much* simpler, because you don't need to have a special case to handle the first iteration (the different behaviour of `Optional.empty()` vs `Optional.as(value)` handles it for you). And this is, perhaps, an important point here: working in the `foreach` style requires a slightly different approach, and the tools to make that approach convenient have taken a while to get here (at least in Java... Optional types have been around for years in functional languages), but now they are it is critical to learn how to use them." CreationDate="2017-07-15T17:10:46.800" UserId="848" />
  <row Id="4276" PostId="2660" Score="0" Text="Hah, by the time your learning happens primarily through reading papers, you're already getting into the grad school mentality!  For quantum computing in specific, you're probably going to need to learn quantum physics." CreationDate="2017-07-14T23:27:18.147" UserId="39" />
  <row Id="4278" PostId="2660" Score="0" Text="@Nat heh, yeah, I need to learn more quantum physics, but in my rant about papers, I neglected to mention - it's kind of fun to feel like you're on the forefront of research, though that's just me. And I have to google practically every fifth word. But still, it's kind of cool." CreationDate="2017-07-14T23:48:37.680" UserId="919" />
  <row Id="4282" PostId="2660" Score="1" Text="Given your aptitude and attitude, it seems like you're going to have a bright future ahead!  Wrote an answer below, but short-form, reading papers and such is likely a pretty good idea as you develop your core education.  Plus it'll keep your eyes on the prize; the modern school system's meant for people who lead average lives, and if you're going at this rate, then the standards that it lays out clearly aren't for you." CreationDate="2017-07-15T00:13:44.060" UserId="39" />
  <row Id="4314" PostId="2663" Score="1" Text="It should be noted that Python isn't the only language where the use of iterated loops is much more common than any other type, which is perhaps an important point: you can learn to work with indices rather than iterators in some environments, but if you never learn to work effectively with iterators, you'll be stumped the moment you try to work in an environment where indexing isn't realistic (e.g. if you try to work in a functional langage, where linked lists are the de-facto standard collection and therefore indexing is too slow to be useful for most applications)." CreationDate="2017-07-15T17:08:54.960" UserId="848" />
  <row Id="4322" PostId="2663" Score="3" Text="`i` and `x` are the exact opposite of what I'd expect for element and index variabes." CreationDate="2017-07-15T18:13:07.950" UserId="2021" />
  <row Id="4324" PostId="2663" Score="3" Text="Comparing a foreach to a while loop rather than to a regular for loop is not particularly a fair comparison." CreationDate="2017-07-15T18:29:50.450" UserId="541" />
  <row Id="4285" PostId="2664" Score="2" Text="Yea, &quot;never just trust it.&quot; Like Thomas Jefferson advised a nephew preparing for his education: _Fix reason firmly in her seat, and call to her tribunal every fact, every opinion. Question with boldness even the existence of a God_." CreationDate="2017-07-15T01:46:12.090" UserId="104" />
  <row Id="16532" PostId="2665" Score="0" Text="Concrete thinking is easier, so *how* is more straightforward than *what*. Thinking *what* includes the idea that there might be an infinite variety of *how*s, as Pascal said. Few people are ready for that." CreationDate="2020-05-29T10:39:12.063" UserId="5349" />
  <row Id="4294" PostId="2667" Score="0" Text="Agreed, I just posted a comment myself about the ability of iterators to represent unindexable data and agree it's a really important point - iterators are a simpler interface that requires less of your data source, meaning they generally scale better. Likewise, the things iterators can't do are mostly language limits of Java (no tuples, no returning references to items in a list) rather than strict limitations of the concept themselves." CreationDate="2017-07-15T10:55:25.220" UserId="2013" />
  <row Id="4295" PostId="2667" Score="0" Text="I note that I am _especially_ careful when I write code only for myself. Indentation, brace all, intention revealing names, ... All of it. I know that if it is just for me, I'll return to it later and don't want to have to de-obfuscate my own code. And I especially don't want to have to add braces to code that omitted it on an update. Get it right. Get it done." CreationDate="2017-07-15T11:08:05.237" UserId="1293" />
  <row Id="4321" PostId="2686" Score="0" Text="Welcome to CS Educators Stack Exchange! I hope we see more answers and questions from you." CreationDate="2017-07-15T18:11:16.623" UserId="283" />
  <row Id="4332" PostId="2687" Score="1" Text="This may sound like an odd question, but what is your goal?  Is the purpose of the note-taking to have a reference for later, or is it to get the most information into your mind as you read? Following the cognitive research, the latter goal can lead to a very different process than the first." CreationDate="2017-07-15T21:40:00.740" UserId="27" />
  <row Id="4342" PostId="2687" Score="0" Text="@BenI. to be honest, both are useful to me. I went back and forth on this, and in general, I can figure out what's going on, but not necessarily remember it. I find writing notes helps solidify the information in my mind (along with problems/programs/practice, of course) and also is handy for a later reference. I can't tell you how many times I've had to check my linear algebra notes (for example) for the definition of an eigenvector or whatever, just because I don't use linear algebra often enough." CreationDate="2017-07-15T22:23:49.597" UserId="919" />
  <row Id="4333" PostId="2688" Score="1" Text="**&quot;_In fifty years you will still be able to use those notes whereas the computer notes are likely inaccessible._&quot;**  Really have to disagree there.  While there's a need to avoid proprietary formats, electronic notes have far more endurance through time than paper.  You can back 'em up, search through them, transfer them, share them, parse them, translate them (via Google Translate-like services), etc..  By contrast, 50-year-old paper notes are a pain to recover; they take forever to navigate, they're often faded and the paper's wrinkly, they're usually in a box somewhere, etc.." CreationDate="2017-07-15T21:43:39.937" UserId="39" />
  <row Id="4334" PostId="2688" Score="0" Text="As a researcher, I've kept all of my notes - paper and electronic - but honestly the paper notes are in a box in the basement.  I mean, seriously, even if you know exactly what you're looking for, it takes forever to dig through them all to find that exact thing.  But on the computer, I just do a directory search through all of my documents for keywords, and I have all of my related notes in seconds!  It's so much easier." CreationDate="2017-07-15T21:45:58.120" UserId="39" />
  <row Id="4336" PostId="2688" Score="0" Text="My experience is just the opposite. I've lost electronic goods, but been able to retrieve work from the early 60's that was on paper. But yes, it takes forever. Papyrus and stone tablets are still readable after millennia. But you can have the cake and eat it too. Work electronically but back up by printing to good paper. Keep it dry and away from mice, of course. Though I don't know the expected lifetime of laser printed work. I'd guess not permanent." CreationDate="2017-07-15T21:52:58.803" UserId="1293" />
  <row Id="4337" PostId="2688" Score="0" Text="Why backup to paper, or use it at all, though?  Just backup on other devices, the cloud, etc..  Nothing short of the world ending will destroy remotely distributed copies, but any sort of paper can go up in a fire or simply be lost.  Plus it's just not very usable and whatnot." CreationDate="2017-07-15T21:56:30.800" UserId="39" />
  <row Id="4356" PostId="2688" Score="1" Text="My  friend the archivist was discussing this a few years ago. She told me that the most crappy acid ridden paper, would last 50 years, and archivist paper could last a few hundred. If you write it on velum then longer. Where as she was struggling to get digital information past 10 years. Things become obsolete. You need to actively manage it, transferring it from one medium to another, and then be lucky enough to to suddenly loose it." CreationDate="2017-07-16T10:21:41.280" UserId="204" />
  <row Id="4360" PostId="2688" Score="0" Text="@richard Weird; I've still got all of my notes, personal information, etc., from throughout my life.  It's never been a struggle." CreationDate="2017-07-16T11:10:33.913" UserId="39" />
  <row Id="4329" PostId="2689" Score="1" Text="I wonder if you've had to retrieve notes from fifty years ago. Your prescription for safekeeping is good, but only if you follow it faithfully. Libraries have a lot of trouble with electronic records. So yes, do all this, but never fail. Attend to it, say monthly. The cloud won't save you either. Companies fail, taking your stuff into the aether." CreationDate="2017-07-15T21:01:36.427" UserId="1293" />
  <row Id="4341" PostId="2689" Score="2" Text="You may wish to add comments about LaTeX to your answer - it's a very nice, non-proprietary, math-friendly editor. Otherwise, this is a *fabulous* answer - I should start doing this! Currently, I just have a heck of a lot of messy paper notebooks." CreationDate="2017-07-15T22:20:57.460" UserId="919" />
  <row Id="4358" PostId="2689" Score="0" Text="While I share the enthusiasm for legible typed notes, it's worth to issue a warning against solely relying on typing.There's some evidence from psychological studies suggesting handwritten notes are better for actual learning opposed to conserving content because you are forced to summarize what's said. Also, e.g. in lectures, computers are highly distracting, not only for yourself but for your peers as well. Personally, if I'm not in a programming class, I prefer to take handwritten notes and type or scan them later. Takes a bit more time, but is usually worth the effort (at least for me)." CreationDate="2017-07-16T10:36:15.180" UserDisplayName="user2031" />
  <row Id="4362" PostId="2689" Score="0" Text="The interesting discussion which was occuring here should be continued  [in chat](http://chat.stackexchange.com/rooms/62312/discussion-on-answer-by-nat-note-taking-for-self-studying)." CreationDate="2017-07-16T11:33:21.757" UserId="58" />
  <row Id="4364" PostId="2689" Score="0" Text="1330300800 is 2012-02-27 (not 2013-02-27)" CreationDate="2017-07-16T13:12:28.197" UserId="204" />
  <row Id="5741" PostId="2689" Score="0" Text="This is a very Microsoft Office Word-heavy answer. I myself like text formats because they are diffable/mergeable in git, they're future-proof, and open source software can use them. Examples are Markdown, LaTeX and HTML (depending on the purpose I may use either -- e.g. markdown or just plain text for quick notes; LaTeX for a document; or HTML for a document with interaction or an informative webpage; and of course I can convert Markdown to HTML etc.)." CreationDate="2017-07-22T11:42:39.957" UserId="2128" />
  <row Id="4370" PostId="2691" Score="3" Text="I guess it begs the question: why was Java deliberately made different from C in this way? What was the goal of that design decision? Then I would ask: how is that working out?" CreationDate="2017-07-16T14:05:30.147" UserDisplayName="user737" />
  <row Id="4372" PostId="2691" Score="1" Text="Java and the other similar languages have garbage collectors. Leaving it undefined lets a reference cooperate with the garbage collector, depending on implementation. The &quot;pointer&quot; in the reference may not point directly to the object's storage but to something managed by GC. C has no need to do this." CreationDate="2017-07-16T14:14:04.763" UserId="1293" />
  <row Id="4410" PostId="2691" Score="24" Text="Learning pointers is already quite hard ... but if you feel the need for an extra challenge, try learning what pointers are in a language which does not have pointers ..." CreationDate="2017-07-17T00:40:57.617" UserId="2048" />
  <row Id="4411" PostId="2691" Score="19" Text="Whatever you do, don't talk about pointers in Java. Java does not have pointers. You can teach references, that's fine and necessary. Especially don't try to teach about memory addresses or pointer arithmetic because *those are not things in Java*." CreationDate="2017-07-17T01:04:50.287" UserId="1275" />
  <row Id="4413" PostId="2691" Score="28" Text="If there are no pointers in Java, how do you get a NullPointerException? :)" CreationDate="2017-07-17T02:34:56.250" UserId="2045" />
  <row Id="4419" PostId="2691" Score="10" Text="@nova - that's my go-to example for how the whole &quot;no pointers&quot; thing in Java is a poorly thought out whitewash." CreationDate="2017-07-17T05:08:01.243" UserId="1301" />
  <row Id="4443" PostId="2691" Score="2" Text="@nova NullPointerException (which I mention to my students too as proof that there are pointers deep down) is a leaky abstraction." CreationDate="2017-07-17T19:57:12.603" UserId="283" />
  <row Id="4444" PostId="2691" Score="3" Text="On the other hand, it is conceivable that the exception was badly named. I don't disagree with the comments here, but had it been named otherwise (invalid reference exception) would you still worry. But yes, Java made compromises in its model." CreationDate="2017-07-17T19:59:41.123" UserId="1293" />
  <row Id="4464" PostId="2691" Score="3" Text="That's why C# calls the exact same thing a `NullReferenceException`." CreationDate="2017-07-18T08:49:55.997" UserId="1577" />
  <row Id="4468" PostId="2691" Score="1" Text="I think it is important to use the Java terminology even when it doesn't match the rest of the industry.  So call it a &quot;reference&quot;, not a &quot;pointer&quot; (even though it is much more like a C++ pointer than reference), it is important to teach the concept early, otherwise, comparing strings versus comparing int's makes no sense." CreationDate="2017-07-18T12:55:44.457" UserId="2084" />
  <row Id="4473" PostId="2691" Score="6" Text="[JLS Section 4.3.1](https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.3.1) &quot;The reference values (often just *references*) are **pointers** to these objects, and a special null reference, which refers to no object&quot;. Any assertion that Java doesn't have pointers is wrong. Maybe you want to just stick to the terminology of references but don't confuse the students with all the garbage about how Java passes objects by reference and primitives by value.  Everything is passed by value. The value of the references is a pointer." CreationDate="2017-07-18T15:16:10.823" UserId="2087" />
  <row Id="4481" PostId="2691" Score="2" Text="This is why I start off teaching by saying: &quot;The computer can only do five things: load from memory, store in to memory, arithmetic, compare and branch.&quot; Indirect reference is the very next thing that was designed in to CPUs. It is unavoidable, inarguable, fundamental, essential. This is how computers *actually work*. If you want to teach students pleasant illusions, fine, but I will have to straighten them out when they come to me. Building on these very concrete realities, you can create abstractions that do anything that it is possible to do with electrons moving near the speed of light." CreationDate="2017-07-18T16:43:59.027" UserDisplayName="user737" />
  <row Id="4482" PostId="2691" Score="2" Text="Kill the mystery. Kill it right away. No ghosts and phantoms allowed." CreationDate="2017-07-18T16:46:33.383" UserDisplayName="user737" />
  <row Id="4483" PostId="2691" Score="2" Text="I think my experience is quite different from yours. Also my conclusions. Everything is a Turing Machine, but I don't need to wind the tape." CreationDate="2017-07-18T16:49:36.187" UserId="1293" />
  <row Id="4496" PostId="2691" Score="0" Text="@Buffy &quot;The Java language definition is careful not to discuss the implementation of references, explicitly disassociating them from the C-like notion of pointer.&quot; I've provided the relevant section of the JLS that would seem to contradict this.  I'm curious as to why you aren't addressing that." CreationDate="2017-07-18T21:21:59.507" UserId="2087" />
  <row Id="4497" PostId="2691" Score="1" Text="It is a question seeking answers such as yours. It isn't a treatise." CreationDate="2017-07-18T22:17:17.870" UserId="1293" />
  <row Id="4511" PostId="2691" Score="0" Text="@nova That was named very, very early in Java's history, and Java has a tradition of not breaking API's." CreationDate="2017-07-19T09:10:24.113" UserId="1213" />
  <row Id="4565" PostId="2691" Score="1" Text="@nocomprende I agree entirely that they need to learn these concepts (and preferably early on), but Java isn't the language to do it in.  Students have a hard enough time understanding pointers in languages that *have* them (in a form other than implicit references).  If you *must* use Java to teach intro programming, it's more practical to hold off on teaching pointers until they switch to C." CreationDate="2017-07-20T01:53:07.243" UserId="827" />
  <row Id="4375" PostId="2692" Score="9" Text="This doesn't require knowledge of pointers.  It's rather easy to explain to students that you can have two different objects that are identical, but are just copies of each other.  That way, `Object.new` creates a new, identical function reference.  (Which, incidentally, is basically how Java does it)" CreationDate="2017-07-16T14:49:16.453" UserId="2034" />
  <row Id="4387" PostId="2692" Score="1" Text="@NathanMerrill deep copy or shallow copy? I would say: teach a simpler language first. We can save the holy war inducing philosophical concepts until later." CreationDate="2017-07-16T17:26:21.543" UserDisplayName="user737" />
  <row Id="4401" PostId="2692" Score="1" Text="I wasn't saying that we are copying function references.  Rather that they are &quot;copies&quot; (meaning that they look identical).  That said, &quot;duplicates&quot; is likely a better word." CreationDate="2017-07-16T21:54:48.047" UserId="2034" />
  <row Id="4409" PostId="2692" Score="0" Text="How would the explanation be harder to understand if we said &quot;*this can be understood because `a` and `c` both **reference** the same Object in memory, while `b` **references** a different object*&quot;?" CreationDate="2017-07-16T23:02:36.957" UserId="660" />
  <row Id="4449" PostId="2692" Score="0" Text="While I love Ruby and hence any mention of it in an answer, it has no pointers, only references. So not the right answer for the question at hand." CreationDate="2017-07-17T20:50:42.007" UserId="652" />
  <row Id="4450" PostId="2692" Score="1" Text="There's nothing &quot;under the hood&quot; in your example.  You merely are illustrating the difference between Ruby objects and Ruby variables." CreationDate="2017-07-17T22:04:06.923" UserId="1269" />
  <row Id="4451" PostId="2692" Score="1" Text="Re, &quot;Why are 2 empty Objects the same, but the other 2 are not?&quot;  There's no &quot;other 2&quot; in your example:  It only creates two objects.  `a`, `b`, and `c` are _not_ objects.  They are _variables_.  They _refer to_ objects, and in particular, `a` and `c` refer to the same object, while `b` refers to a different object." CreationDate="2017-07-17T22:06:44.543" UserId="1269" />
  <row Id="4367" PostId="2693" Score="8" Text="Yes. Build the ground floor before the next floor up gets built. It is very hard to put the ground floor in later." CreationDate="2017-07-16T13:56:50.593" UserDisplayName="user737" />
  <row Id="4427" PostId="2693" Score="2" Text="+1 I agree that pointers are sufficiently abstracted in reference based languages like Java, C#, and many others that they do not need to be covered in an introductory programming course.  However, one potential pitfall many institutions fall into is the next instructor (for intermediate courses) tends to assume they have already been covered in earlier courses." CreationDate="2017-07-17T15:22:26.540" UserId="2067" />
  <row Id="4457" PostId="2693" Score="3" Text="Irrespective of the importance, I can't say I shared your experience. Even having never programmed in assembly or seriously in C/C++ (just a couple college projects well after I had learned Java used pointers), I had no trouble grasping the idea that Java has your object's data in a separate block (over on the heap) and that the variable I'm using at the moment actually just corresponds to an address pointing to that block. Granted, that's a bit simplistic, but I didn't find the basic concept of pointers that hard, and even that limited understanding made Java's behavior more sensible." CreationDate="2017-07-18T00:36:14.020" UserId="981" />
  <row Id="4471" PostId="2693" Score="1" Text="@LeeHiles C# also has pointers, so that's not quite as good an example. Not quite as raw as C's, but then again C's aren't quite as raw as assembly's. E.g. there's no null pointer in assembly, that's a C construct; a pointer in assembly isn't necessarily a single integer; two pointers can point to the same memory despite having different values (*and vice versa*); I've got more where those came from :P In contrast, I've seen plenty of programs in C or Pascal that avoided pointers almost entirely (not counting &quot;indexing a statically allocated array&quot; as &quot;using pointers&quot;)." CreationDate="2017-07-18T13:13:36.700" UserId="1816" />
  <row Id="5762" PostId="2693" Score="2" Text="@jpm26 java was invented about 20 years after I learned about pointers. I came through BASIC that was still close enough to its Fortran roots to be recognizable as such (no scope, so no distinction between references and values),  into pascal and C. We have had different experiences for sure." CreationDate="2017-07-22T17:54:18.717" UserId="1537" />
  <row Id="4376" PostId="2694" Score="1" Text="Thanks for the interesting new angle. As we know, [COBOL will always be with us](http://abstrusegoose.com/323)." CreationDate="2017-07-16T14:55:45.390" UserId="51" />
  <row Id="4363" PostId="2695" Score="1" Text="Hi Sie! Welcome to [cseducators.se]. I hope to see you contributing your knowledge elsewhere as well." CreationDate="2017-07-16T11:56:42.143" UserId="58" />
  <row Id="4369" PostId="2698" Score="5" Text="@nocomprende while I agree with what you are saying, we must be interpreting the results wrong. For how do we explain young children programming in scratch without first learning how a transistor works? I think the foundation that we build on can be, how it works (how in this language it is implemented). Or it could be based on, what it does. It is a reference, so it is like a URL, or an index entry in a book." CreationDate="2017-07-16T14:04:25.980" UserId="204" />
  <row Id="4405" PostId="2698" Score="0" Text="@alephzero (BenI. and richard and anyone else who wants to discuss) Feel free to continue this interesting conversation in [this new room in chat](http://chat.stackexchange.com/rooms/62334/discussion-on-answer-by-richard-is-it-important-to-teach-pointers-in-a-first-cou)." CreationDate="2017-07-16T22:32:43.800" UserId="58" />
  <row Id="4472" PostId="2698" Score="2" Text="@nocomprende Surely learning abstractions first then delving into into the detail behind them is how we learn almost everything?" CreationDate="2017-07-18T13:54:45.970" UserId="1218" />
  <row Id="4479" PostId="2698" Score="0" Text="@nocomprende Ah I see, I think we're talking about slightly different things here. There's &quot;abstracting&quot; as in &quot;discarding an irrelevant to detail to get a more general result&quot;. Like starting by adding apples, then moving to addition as a concept that works for anything. But there's also &quot;abstracting&quot; as in &quot;hiding the inner workings&quot;. Like how if you know how to operate a VCR player, you also know how to operate a DVD player- the differences are abstracted behind a common interface. Natural sciences have a lot of examples of learning from more abstract -&gt; more detailed in this second meaning" CreationDate="2017-07-18T16:39:32.513" UserId="1218" />
  <row Id="4480" PostId="2698" Score="1" Text="e.g. period table -&gt; molecules and atoms -&gt; quantum field theory. You certainly wouldn't want to do that in the reverse order, in large part because, as you say, it's better to start with concrete, accessible examples. And I'd suggest that learning about the workings of a computer is similar. Scratch exists because creating simple programs is accessible and concrete. Building understanding all the way up from transistors would be the opposite." CreationDate="2017-07-18T16:40:49.413" UserId="1218" />
  <row Id="4486" PostId="2698" Score="1" Text="@nocomprende I made a similar comment in the chat link above, but you shouldn't conflate *what* you teach somebody with *which order* you teach it. I wouldn't hire a software developer who knew about transistors but had no conception of writing code, either, but that's not a position anyone's promoting." CreationDate="2017-07-18T17:39:41.827" UserId="1218" />
  <row Id="4488" PostId="2698" Score="0" Text="@nocomprende BenAarenson is discussing the order of teaching, not what to teach. Also can you use the chat room http://chat.stackexchange.com/rooms/62334/discussion-on-answer-by-richard-is-it-important-to-teach-pointers-in-a-first-cou . I will ask a question on order of teaching in a few days. And invite (via chat room) you all to contribute." CreationDate="2017-07-18T17:42:57.640" UserId="204" />
  <row Id="4382" PostId="2699" Score="0" Text="I watched the videos. At ½ way they had covered everything I know, including object orientation, but had not yet introduced variable mutation. It made me go “Wow”, and realise how little of the time we need to mutate a variable." CreationDate="2017-07-16T15:58:38.697" UserId="204" />
  <row Id="4418" PostId="2699" Score="0" Text="It also may be that they would not list high schools that use the book. Those lists are a marketing decision, and high schools are not the primary audience that they market to. A top university may potentially be dissuaded by seeing high schools on a list for a book they are considering adopting." CreationDate="2017-07-17T05:04:03.667" UserId="27" />
  <row Id="4383" PostId="2700" Score="4" Text="Really wonderful answer. *&quot;But my college also lacks a Software Engineering track, and I would argue most people pursuing a CS education actually want that instead of the science.&quot;* is exactly right. Come by the [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom) to say hi, and welcome to [cseducators.se]!" CreationDate="2017-07-16T16:33:55.207" UserId="27" />
  <row Id="4434" PostId="2700" Score="2" Text="I think using the phrase *Java uses pass by reference* is dangerous at best, especially when talking about an introductory class. Keep it high level, but if any students ask about the nitty-gritty, make sure they know that Java is pass by value, even for references." CreationDate="2017-07-17T17:06:20.427" UserId="2068" />
  <row Id="4435" PostId="2700" Score="3" Text="I never did grok pointers and constantly had trouble with them when working in languages like C++ (I never could remember if I needed to `*` the variable or `&amp;` and on which *side* that operator needed to go, because seriously, would it have *killed* someone to make that syntax consistent?). I *hated* pointers. Object references in languages like Java and C#? So easy to understand and use effectively." CreationDate="2017-07-17T18:22:24.217" UserId="1244" />
  <row Id="4437" PostId="2700" Score="0" Text="@KevinWorkman As I said, it's a matter of definitions. When you have a Java binding, it _is_ the thing it's bound to; you don't have to `*` it to dereference the pointer. The way Java is implemented is by passing the pointer by value, but because the binding _is_ the bound value, you're passing the bound value by reference. C's pass-by-reference is a completely different thing to Java's, and it's a conflation of definitions. By C's definitions, Java is pass-reference-by-value, and I will never object to that, because it is correct. Just confusing if you don't know pointers inside out." CreationDate="2017-07-17T18:28:17.590" UserId="2025" />
  <row Id="4438" PostId="2700" Score="4" Text="*&quot;Just confusing if you don't know pointers inside out.&quot;* That's exactly my point. This is for an introductory class. The students do not know pointers inside out." CreationDate="2017-07-17T18:30:38.120" UserId="2068" />
  <row Id="4453" PostId="2700" Score="6" Text="Did you mean &quot;grok&quot; when you typed &quot;grep&quot;?  That's a funny typo.  :)" CreationDate="2017-07-17T22:58:24.240" UserId="1103" />
  <row Id="4454" PostId="2700" Score="1" Text="This answer is misleading at best, and potentially dangerously wrong. Java most definitely does **not** have call-by-reference semantics. (Compare [this question on Stack Overflow](https://stackoverflow.com/questions/40480), and also the large amount of confusion in [this other Stack Overflow question](https://stackoverflow.com/questions/373419).) Too many people try to conflate &quot;call-by-reference&quot; with &quot;reference types&quot;, so it's important to distinguish those concepts early, before a wrong mental model sets in." CreationDate="2017-07-18T00:22:20.457" UserId="2074" />
  <row Id="4455" PostId="2700" Score="2" Text="@DanielPryden Did you read that paragraph? I've read that answer. I acknowledge immediately that Java is _pass reference by value_. The difference is that I (and Java, by my reading) consider a binding _to be indistinguishable from_ the bound value, so passing a reference is passing a reference to that bound value, not the binding itself, thus, passing the reference by value. It's not comparable to C/++ where a pointer/reference and the value itself are different things. EDIT: your grace period edit makes clearer what you mean. I don't disagree." CreationDate="2017-07-18T00:27:18.260" UserId="2025" />
  <row Id="4456" PostId="2700" Score="1" Text="@CAD97: I've edited my comment while you were responding. I think that that's exactly the crux of my point: I believe it's essential to distinguish between a binding and a bound value. The Java language makes this non-obvious, but that just serves to confuse students later when they discover values being mutated through multiple references. I think it's much better to address this source of confusion head-on." CreationDate="2017-07-18T00:30:32.290" UserId="2074" />
  <row Id="4458" PostId="2700" Score="1" Text="@DanielPryden If the binding _is_ the value, and you pass the reference _to that value (by value)_ (`func(&amp;*ptr)`), you get what Java does and what we're both describing. Coming from a pointer understanding, the question in question describes the exact behavior. Coming from Java's angle, though, my argument is that _binding is its value_ plus _pass by reference to that value_ plus _value lives somewhere in memory_ is the better way to explain it without leaking the abstraction away from pointers. But I'm not going to argue the point; we're in agreement with different terminology definitions." CreationDate="2017-07-18T00:37:00.210" UserId="2025" />
  <row Id="4568" PostId="2700" Score="0" Text="If we're being properly pedantic, *C* does not have pass by reference.  `f(&amp;x)` is explicitly passing the address of `x` by value.  It isn't passing `x` at all." CreationDate="2017-07-20T02:02:42.110" UserId="827" />
  <row Id="4571" PostId="2700" Score="0" Text="@Ray I changed the wording of my Post Script slightly. Hopefully it doesn't imply anything incorrect anymore; it's supposed to drive away the pedants ;) (&lt;joking tone marker&gt;)" CreationDate="2017-07-20T02:08:43.423" UserId="2025" />
  <row Id="4578" PostId="2700" Score="3" Text="[Pass by reference](https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference) means that a called method can reassign *the caller's* variables to a distinct value. A good litmus test is whether you can write a function that swaps the caller's variables. Java doesn't enable this style of programming. Yes, it shoves the object on the heap, and the object can be mutated. But that isn't what &quot;pass by reference&quot; means; it means that full access to the caller's local variable is given. At this point, though, the matter is so widely confused that I'm not sure the terms have value anymore." CreationDate="2017-07-20T11:55:22.703" UserId="981" />
  <row Id="4579" PostId="2700" Score="1" Text="In other words, contrary to your post script, the binding **is very much** separate from the value. And what's worse, understanding that the binding is a separate thing from the value is fundamental to understanding how Java works.  I can assign a list to `x`, add some elements, and then assign it `y`. Reassigning `x` to a new list and adding elements to that doesn't change the list bound to `y`. Also, how else could you make sense of the fact that two variables can be assigned the same value simultaneously?" CreationDate="2017-07-20T12:02:16.930" UserId="981" />
  <row Id="5735" PostId="2700" Score="1" Text="CAD97, of course the essence of your answer about pointers is more important then terminology you used and I agree with your answer but anyways I am curious about the terminology you use because it is not standard and it can confuse a lot of people. In C# you can pass by reference with ref keyword so you can make a swap function that is impossible to make in Java: `static void SwapStrings(ref string s1, ref string s2)` . If you omit keyword ref then you get the same behavior like in Java. If you call that default behavior pass by reference then how you call it when you use ref keyword in C#?" CreationDate="2017-07-22T02:50:25.470" UserId="2054" />
  <row Id="5736" PostId="2700" Score="0" Text="@CodesInTheDark Terminology is hard. The way I'd explain C#'s `ref` keyword is &lt;del&gt;by pretending it doesn't exist&lt;/del&gt; probably saying that while `string s` is a binding to a string, `ref string s` is a binding to a binding to a string. So instead of passing the reference to the string, you're passing the reference to your binding to the string. (That's starting to sound like pointers... and `ref` (plus naming) is the one thing I don't like about C#.)" CreationDate="2017-07-22T03:13:40.627" UserId="2025" />
  <row Id="4389" PostId="2701" Score="0" Text="Hi FluxIX! Welcome to [cseducators.se]! I hope to see you around, asking and answering." CreationDate="2017-07-16T19:02:51.407" UserId="58" />
  <row Id="4460" PostId="2702" Score="1" Text="Although we like to expose our students at NCSSM to more than one language, so they see the commonalities.   B''sides it is not languages that are important, it is the problem-solving process. Languages are tools.  Architectures vary according to purpose." CreationDate="2017-07-18T01:44:56.670" UserId="21" />
  <row Id="13652" PostId="2702" Score="0" Text="I think there is nothing wrong with being exposed to lots of different languages and environments, including non-programming things like Matlab, a home-brew digital design simulator created by a prof, a robot arm system created by another prof, and so on. My first resume out of college had a list of languages in alphabetical order, beginning with APL, about 14 in total. Nothing shameful about that. I did earn money with C and eventually mastered it. But lex and yacc came in handy a few times. My solution was almost always &quot;develop a DSL for this problem&quot; and I didn't work much overtime, ever." CreationDate="2018-10-14T21:58:35.347" UserId="5349" />
  <row Id="4431" PostId="2703" Score="0" Text="Many are the times I have thought about the cubbies in kindergarten. Adults have the Post Office Box thing. I also recall staring at the greenbar paper my friend's father brought home from work. First I learn to read - make black marks into a stream of words in my head - then *this*. What are these words? What the heck does FORMAT mean and why is everything shouting at me?" CreationDate="2017-07-17T15:48:34.133" UserDisplayName="user737" />
  <row Id="4393" PostId="2704" Score="1" Text="Nice answer. Welcome to [cseducators.se]!" CreationDate="2017-07-16T20:40:59.437" UserId="27" />
  <row Id="4560" PostId="2704" Score="0" Text="I came here to recommend The Nature of Code myself. +1" CreationDate="2017-07-19T21:45:00.663" UserId="2068" />
  <row Id="4395" PostId="2705" Score="0" Text="Hi Jerry! Welcome to [cseducators.se]! Thanks for this very interesting answer! I hope to see you around, doing more asking or answering!" CreationDate="2017-07-16T20:51:25.667" UserId="58" />
  <row Id="4436" PostId="2705" Score="1" Text="IMO a null reference exception is pretty easy to understand &quot;You tried to use an object that didn't exist.&quot; That is, you *declared* it but you didn't *define* it. Pointers let you do god awful things like `int val = *somoeObj; val++; Object foo = &amp;val` No really. Why would you do that. Why would you EVER BE ALLOWED TO DO THAT." CreationDate="2017-07-17T18:27:52.853" UserId="1244" />
  <row Id="4462" PostId="2705" Score="0" Text="@Draco18s, I wonder if you saw [my answer](https://cseducators.stackexchange.com/a/2737/1103)?  :)  I would enjoy listening to a conversation between you and Mel." CreationDate="2017-07-18T03:15:22.713" UserId="1103" />
  <row Id="4469" PostId="2705" Score="0" Text="@Wildcard I have now, and I can respect that opinion. Not sure how much I agree (at least half?)" CreationDate="2017-07-18T13:04:49.430" UserId="1244" />
  <row Id="17013" PostId="2706" Score="0" Text="This. A computer is a machine. We don't need metaphors or math concepts, we need to know how the machine actually works. It is not rocket science, a 13 year old could (did, in my case) get it. Venn diagrams and stories would have put me off from computer *science* entirely. Just explain the facts. With the facts, as you say, we can understand many other things about computers immediately, that metaphors and concepts from math would have been no help whatsoever. People really over-think things." CreationDate="2020-09-12T12:18:45.320" UserId="5349" />
  <row Id="17014" PostId="2706" Score="0" Text="Maybe the real problem is that computer science instructors do not know as much about *electronics* as I did by the time I was 13, from perusing outdated books about vacuum tubes in the library. It had only 3 books that mentioned transistors, 40 years ago. But I understood how transistors could build a flip-flop, and flip-flops could build a latch, and how latches could implement registers, an ALU and main memory. I didn't have to have encyclopedic knowledge of those things, just an idea. So, instructors: stop diverting to math and teach from the implementation, which is what is real." CreationDate="2020-09-12T12:23:07.917" UserId="5349" />
  <row Id="4403" PostId="2708" Score="0" Text="Hyper-clarity *is* teaching well. This is an excellent exercise. Welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-16T22:14:24.233" UserId="27" />
  <row Id="4406" PostId="2708" Score="1" Text="This isn't _just_ an answer; it also has useful material in it that'd be of general value to educators.  At current, SE.CSEducators doesn't really have a good mechanism for promoting this content, though there might be an argument for cloning StackOverflow's recent Documentation feature here - just, instead of being documentation on programming, it'd be a repository of teaching material." CreationDate="2017-07-16T22:53:18.007" UserId="39" />
  <row Id="4407" PostId="2708" Score="1" Text="@Nat That actually sounds like a fantastic idea! If you want to, create a meta question requesting it. It's certainly unprecedented, but it's worth asking :)" CreationDate="2017-07-16T22:59:36.487" UserId="58" />
  <row Id="4408" PostId="2708" Score="0" Text="@Nat (and nova) I forgot to mention, come by the [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom). We'd love to meet you!" CreationDate="2017-07-16T23:00:43.923" UserId="27" />
  <row Id="4439" PostId="2712" Score="1" Text="The introduction to medical study is largely vocabulary and anatomy. I don't see why CS should be any different. The distinction between 'defining' and 'declaring' brings out many issues, like when something is being used as a parameter or argument. These issues cannot be ignored, they matter." CreationDate="2017-07-17T18:37:23.523" UserDisplayName="user737" />
  <row Id="4536" PostId="2717" Score="0" Text="@nocomprende Awesome! Learning Science is pretty great :)" CreationDate="2017-07-19T16:18:06.060" UserId="2045" />
  <row Id="4414" PostId="2718" Score="0" Text="If you read my answer you'll see I disagree with that answer about Java and pass-by-value (for object types). It's not worth arguing though because it's just saying the same thing two different ways." CreationDate="2017-07-17T04:49:18.727" UserId="2025" />
  <row Id="4415" PostId="2718" Score="0" Text="Oh, and welcome to [Computer Science Educators](https://cseducators.stackexchange.com)! (I'm almost as new, am I qualified to say that?)" CreationDate="2017-07-17T04:50:47.700" UserId="2025" />
  <row Id="4416" PostId="2718" Score="1" Text="@CAD97 You certainly are :)  I hope we see more of both of you." CreationDate="2017-07-17T04:53:17.060" UserId="27" />
  <row Id="4417" PostId="2718" Score="0" Text="Hi CAD97, thank you for your comment. I posted my answer to add additional things to your answer because I don't have enough reputation points to post a comments on other people's answers. Anyways you could copy from my answer a link to Java Language Specification where it says that references are pointers to objects. All the best." CreationDate="2017-07-17T05:01:57.270" UserId="2054" />
  <row Id="4421" PostId="2718" Score="1" Text="CAD97, in C# you can pass by reference with `ref` keyword so you can make a swap function that you cannot make in Java `static void SwapStrings(ref string s1, ref string s2)` . If you omit keyword ref then you get the same behavior like in Java and that is pass by value. If you think that it is pass by reference then how you call it when you use `ref` keyword in C#?" CreationDate="2017-07-17T14:15:36.440" UserId="2054" />
  <row Id="15108" PostId="2718" Score="0" Text="&quot;you will get `NullPointerException` because that **pointer** points to null.&quot; You mean, because that pointer does not point to anything. (Hence asking for a thing that it points to raises an exception.) As confirmed by the quote you put after that statement--&quot;a special null reference, which refers to no object&quot;." CreationDate="2019-05-30T05:08:26.697" UserId="2485" />
  <row Id="15118" PostId="2718" Score="0" Text="The value of pointer is usually zero (meaning null) in most implementations. That represents null value that indicates that the pointer does not refer to a valid object. That pointer is called Null pointer/reference or some people call it null object pointer.&#xA;Function pointer is a pounter that points to a function. Data pointer is a pointer that points to some data. In a similar manner Null pointer is a pointer that points to null value. Maybe you don't use the same syntax/wording, but semantic is the same and we think about the same thing." CreationDate="2019-05-31T00:31:13.537" UserId="2054" />
  <row Id="15119" PostId="2718" Score="0" Text="&quot;Does not point to anything&quot; for you is the same as &quot;points to null value&quot; for me. I am not a native English speaker so I guess that formally you are correct. But it is important that people understand what I mean. I guess that I failed in that regard :(" CreationDate="2019-05-31T00:32:37.477" UserId="2054" />
  <row Id="4422" PostId="2720" Score="0" Text="Yes, I was asking about the first course only. And agree with your comments. +1" CreationDate="2017-07-17T14:21:07.353" UserId="1293" />
  <row Id="4423" PostId="2721" Score="1" Text="While all this is true, is any of it relevant? The question is about computer scientists, not computer operators, however skilful one may have needed to be to operate an early computer." CreationDate="2017-07-17T14:32:58.360" UserId="1219" />
  <row Id="4424" PostId="2721" Score="1" Text="@PeterTaylor - The lines between the two were a lot blurrier back then. But I think I justified this approach in my first paragraph. If you don't buy that argument, then I guess your point is quite relevant." CreationDate="2017-07-17T14:42:53.270" UserId="1139" />
  <row Id="4432" PostId="2729" Score="2" Text="I love those stories! I can imagine bringing various Starbucks cups into class for a physical demonstration.... welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-17T16:30:30.890" UserId="27" />
  <row Id="7847" PostId="2730" Score="0" Text="It does not directly answer your question, but I highly recommend the introduction of Hughes' *Why functional programming matters* on differences in programming paradigms. https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf" CreationDate="2017-09-05T15:15:56.863" UserDisplayName="user24" />
  <row Id="4452" PostId="2736" Score="3" Text="Nice point, and welcome to [cseducators.se]. I hope we hear more from you in the future!" CreationDate="2017-07-17T22:48:16.077" UserId="27" />
  <row Id="4495" PostId="2736" Score="1" Text="[Stack Overflow it is](http://stackoverflow.com/legal/trademark-guidance), not StackOverflow (see the last section)." CreationDate="2017-07-18T21:12:43.537" UserId="1314" />
  <row Id="4470" PostId="2737" Score="2" Text="Oh yes, I remember that story of Mel. Is a cute story but code like that is fundamentally unmaintainable, which the story also shows. Real software can't work like that because (unethical or not) change requests come in and you can't just add a new feature to golf'ed code." CreationDate="2017-07-18T13:12:31.933" UserId="1244" />
  <row Id="4466" PostId="2740" Score="0" Text="Welcome to [cseducators.se]! Nice insights here." CreationDate="2017-07-18T11:46:03.423" UserId="27" />
  <row Id="4465" PostId="2742" Score="1" Text="Oh, fun!  Welcome to [cseducators.se]. I hope we hear more from you going forward!" CreationDate="2017-07-18T11:43:54.497" UserId="27" />
  <row Id="4478" PostId="2743" Score="0" Text="This is what I say to my students, &quot;somewhere in memory this object exists, and this 'reference' points to it, like a piece of paper with a street address written on it points to my house. I can duplicate the piece of paper and give it to someone else, but I still only have one house. If I destroy the copy of the paper, the house doesn't go away. But if I destroy my only copy, I won't know how to get there anymore.&quot; This doesn't have to be so complicated. If a reference is not *effectively* a location in memory (like a street address is a location in space) then what the heck actually *is* it?" CreationDate="2017-07-18T16:31:20.803" UserDisplayName="user737" />
  <row Id="4484" PostId="2743" Score="1" Text="Also, welcome to [cseducators.se]!" CreationDate="2017-07-18T17:23:01.550" UserId="27" />
  <row Id="4512" PostId="2748" Score="0" Text="Thanks for the insight, and especially for the articles!" CreationDate="2017-07-19T10:54:31.973" UserId="51" />
  <row Id="4554" PostId="2748" Score="0" Text="Another point is you definitely _need_ break with range-based for loops (aka foreach), which are the simplest (and cleanest) way to visit a collection." CreationDate="2017-07-19T19:25:39.137" UserId="2103" />
  <row Id="4555" PostId="2748" Score="0" Text="The paper forgets an aspect : assertions (Hoare et al.).  With   &quot;while(i&lt;n) { ....}&quot;, you can infer that  i&gt;=n holds after the loop, only if the body doesn't contain any break statement. If it does, it is more difficult to formally state what is going on there (but do students really care ?)" CreationDate="2017-07-19T19:38:31.250" UserId="2103" />
  <row Id="4509" PostId="2751" Score="1" Text="Perhaps useful to know: Matt's Dominoes For Education system is still running. His 10.000 dominoes are free for schools to use as long as they pay shipping from the last school." CreationDate="2017-07-19T07:04:50.967" UserId="2096" />
  <row Id="4647" PostId="2751" Score="1" Text="The `nand`, `not`, and `nor` gates are impossible with dominoes. How would you have a gate that starts toppling its output if there is no input? Where would it get power? How would it know when to do this? (it is late in the circuit, so topples the output, but then as the logic ripples through has to un-topple it. I like the rest of the answer though." CreationDate="2017-07-20T21:48:59.033" UserId="204" />
  <row Id="8401" PostId="2751" Score="0" Text="After reading the comments, I was thinking that if you have XOR, you can make not, because (a XOR 1) = (NOT a). But after watching the video, I see the problem. For the domino XOR gate to work, you have to knock down the two inputs simultaneously. So for a NOT gate to work, someone would have to be standing over the machine knocking down a domino every time the NOT gate was about to be hit in the circuit. This defeats the purpose of an automatic computer." CreationDate="2017-09-28T15:01:32.640" UserId="587" />
  <row Id="4503" PostId="2753" Score="1" Text="I have also used Nim as a get-to-know-you activity to good effect. Students were randomly split into groups of 4. Within that group of 4, each possible pair played each other 3 times. I used the version where you draw out tick marks, but the subtraction version seems great too. After everyone played all their rounds, I led a discussion about what students thought was an optimal strategy for the game." CreationDate="2017-07-19T02:01:46.777" UserId="2045" />
  <row Id="4508" PostId="2754" Score="2" Text="Funny, I never thought of these puzzles like this, programmatically. I Always thought of them in terms of compound arrays. Or reference functions. More Ada.eliminateHat(Green) and Boat.secureHat(Blue)." CreationDate="2017-07-19T07:01:23.267" UserId="2096" />
  <row Id="4507" PostId="2756" Score="1" Text="Thank you for these examples! That latter point about Scheme is something the professor in the programming languages MOOC I'm taking brings up as well. Part of why I want to show macros is because of how awesome they have been to learn in Racket with hygiene being a key concept thereof. I may just be full of wishful thinking when it comes to C's macros..." CreationDate="2017-07-19T06:14:16.753" UserId="76" />
  <row Id="4510" PostId="2757" Score="0" Text="This question has been entered into [the -review question contest](https://cseducators.meta.stackexchange.com/questions/210/topic-challenge-01-the-review-spew)." CreationDate="2017-07-19T07:19:45.327" UserId="150" />
  <row Id="4524" PostId="2757" Score="0" Text="Swing?  Why not JavaFX?  It is a far better framework." CreationDate="2017-07-19T15:47:15.417" UserId="21" />
  <row Id="4525" PostId="2757" Score="0" Text="@ncmathsadist don't blame me :P. That's the school's curriculum and I am fighting teeth and nail to have it changed to JavaFX. I have posted [some](https://cseducators.stackexchange.com/questions/1430/the-impact-of-switching-to-java-9) [questions](https://cseducators.stackexchange.com/questions/638/introducing-the-mvc-pattern-along-with-javafx) [meant](https://cseducators.stackexchange.com/questions/1373/lambda-expressions-exercises-and-practice) [to prepare](https://cseducators.stackexchange.com/questions/612/how-to-explain-lambda-expressions) for this change. (each word is a different link)" CreationDate="2017-07-19T15:49:45.283" UserId="150" />
  <row Id="4569" PostId="2757" Score="0" Text="They are foolish. Here is an opportunity to see why CSS and XML are very cool. It is also what phone dev looks like these days.  You do layout in XML with Android." CreationDate="2017-07-20T02:04:51.240" UserId="21" />
  <row Id="4570" PostId="2757" Score="0" Text="We went FX at NCSSM a while ago.  Message me for access to some materials." CreationDate="2017-07-20T02:05:21.723" UserId="21" />
  <row Id="4671" PostId="2757" Score="0" Text="@ncmathsadist I too would be curious to see what you have for JavaFX. I was just shown Swing at a conference and found it simple and accessible, so I am getting ready to teach it to myself. However, if there's something better to show students, I'm all for it. I'd love any/all resources you'd be willing to share." CreationDate="2017-07-21T04:53:21.103" UserId="76" />
  <row Id="4550" PostId="2758" Score="0" Text="I forgot to say thanks! This already helped me a bit (both parts of the answer)." CreationDate="2017-07-19T16:47:18.883" UserId="150" />
  <row Id="4516" PostId="2762" Score="0" Text="For MVC I might as well introduce JavaFX (which I intend to, but that's a different question)." CreationDate="2017-07-19T12:24:36.867" UserId="150" />
  <row Id="4517" PostId="2762" Score="0" Text="Yes, I didn't want to suggest JavaFX since you seemed to already have focused on Swing. But my comments apply there as well, I think." CreationDate="2017-07-19T12:32:30.963" UserId="1293" />
  <row Id="4519" PostId="2764" Score="1" Text="We're always glad to get more teachers here. This is a very thorough description of the lesson. Nicely done, and welcome to [cseducators.se]!" CreationDate="2017-07-19T14:31:11.893" UserId="27" />
  <row Id="4531" PostId="2764" Score="1" Text="This is much better than my example. :-) Welcome to CSE!" CreationDate="2017-07-19T16:08:20.040" UserId="283" />
  <row Id="17200" PostId="2766" Score="0" Text="Putting words in quotes does not make clear the idiosyncratic meaning you intend but do not give." CreationDate="2020-11-12T06:42:18.953" UserId="2485" />
  <row Id="17201" PostId="2766" Score="0" Text="@philipxy: Are you talking about &quot;owned&quot;?  The idea there is that in cases where references to a mutable object are shared, only one entity--the &quot;owner&quot;--will hold a reference that it would be expected to use in any way it sees fit, and all other entities that hold references would be expected to use them only to perform actions on behalf of that &quot;owner&quot;.  For example, if a GUI object that displays a list subscribes to an update event from an &quot;observable list&quot; object, that list object will need to hold a reference to a delegate which will in turn hold a reference to the GUI object." CreationDate="2020-11-12T15:45:30.867" UserId="2073" />
  <row Id="17202" PostId="2766" Score="0" Text="The sole purpose of the delegate will be to invoke a method which was designated by the GUI object, on the GUI object, when it's necessary to notify it that the contents of the list have changed.  Calling that method will likely modify the GUI object, but the GUI object wouldn't be &quot;owned&quot; by the observable list object but instead by the GUI window/form object in which it appears." CreationDate="2020-11-12T15:48:36.723" UserId="2073" />
  <row Id="17203" PostId="2766" Score="0" Text="@philipxy: I didn't want to fall into the rabbit hole of trying to describe why entities might hold references to objects whose state they don't regard as their own, perhaps you might offer some idea how to convey that concept in more detail than just the term &quot;own&quot;, but without getting bogged down?" CreationDate="2020-11-12T16:29:41.387" UserId="2073" />
  <row Id="4526" PostId="2769" Score="0" Text="Yes, although they need to have enough conceptual understanding to be able to make sense of the documentation." CreationDate="2017-07-19T15:50:14.053" UserId="2045" />
  <row Id="4559" PostId="2769" Score="0" Text="When we introduce Java strings, we open the docs and start learning how to use the method descriptions. We do a similar thing in a Python or JavaScript class." CreationDate="2017-07-19T21:05:42.080" UserId="21" />
  <row Id="4551" PostId="2773" Score="0" Text="Nice answer, and welcome to [cseducators.se]!" CreationDate="2017-07-19T17:34:46.297" UserId="27" />
  <row Id="4592" PostId="2773" Score="1" Text="I have been in private beta but was not happy about it. :(&#xA;Now, it seems to getting better." CreationDate="2017-07-20T14:58:00.913" UserId="38" />
  <row Id="4593" PostId="2773" Score="0" Text="Then welcome back! :)" CreationDate="2017-07-20T15:01:57.033" UserId="27" />
  <row Id="4668" PostId="2773" Score="1" Text="Could you also address why you think high school teachers/students are able to manage the material, not just whether the material is worthwhile?" CreationDate="2017-07-21T02:58:24.413" UserId="283" />
  <row Id="6257" PostId="2773" Score="1" Text="Sure. Sorry I delayed answering this. @EllenSpertus&#xA;Thanks :)" CreationDate="2017-07-28T10:18:30.837" UserId="38" />
  <row Id="4561" PostId="2777" Score="1" Text="In what way did it blow your mind? FYI, the O'Reilly books is available online for free. http://www.appinventor.org/book2" CreationDate="2017-07-19T23:56:25.053" UserId="283" />
  <row Id="4564" PostId="2777" Score="0" Text="@EllenSpertus To put it simply, I was amazed by how natural it felt to build a meaningful and sophisticated app. My frame of reference is some Xcode tutorials for iOS dev, so App Inventor looks incredibly more accessible. Plus, I love low-floor/high-ceiling software for learning programming, and this really has that quality. Plus, I loved the UI; it all just looked and felt clean and user- (and both beginner- and advanced-) friendly. That's not easy to do." CreationDate="2017-07-20T00:43:16.377" UserId="76" />
  <row Id="4572" PostId="2780" Score="1" Text="I think the DV has more to do with the fact that the question specifically adds the qualifier that this is for those who do indeed *want* a career teaching CS. Regardless of cultural attitudes, which I don't think we can paint with a broad brush and which comprise another issue altogether, this answer simply doesn't address the question. Plus, in order to have anyone sufficiently trained in CS, we do need quality teachers to educate the next generations of programmers and computer scientists." CreationDate="2017-07-20T02:15:37.967" UserId="76" />
  <row Id="4573" PostId="2780" Score="0" Text="I know you're not alone in your thoughts (I was told the same thing in the past when I said I was considering being a HS CS teacher). Do you have any alternative career suggestions for people interested in education and CS if traditional K-12 teaching is off the table? Community college? Non-profits?" CreationDate="2017-07-20T02:17:47.797" UserId="2045" />
  <row Id="4574" PostId="2780" Score="0" Text="I am just letting you know &quot;what is out there.&quot; People don't like it and I don't care.  Proceed with caution." CreationDate="2017-07-20T02:18:16.907" UserId="21" />
  <row Id="4575" PostId="2780" Score="0" Text="Community colleges hire a lot of adjuncts and pay them McDonald's wages.  Some don't.  Exercise care. A niche can exist here but don't allow yourself to be abused." CreationDate="2017-07-20T02:21:18.003" UserId="21" />
  <row Id="4596" PostId="2780" Score="1" Text="@nocomprende Sounds like _driven_ applies. Good on you." CreationDate="2017-07-20T17:06:17.327" UserId="1293" />
  <row Id="4576" PostId="2783" Score="0" Text="Welcome to [CSEducators.se]! Wow! This is a wonderful answer. I hope we'll be hearing more from you." CreationDate="2017-07-20T10:49:29.107" UserId="150" />
  <row Id="4583" PostId="2784" Score="0" Text="Yes. Good point about experience. I've been able to provide real-world examples and best practices to my students. They typically appreciate that." CreationDate="2017-07-20T13:33:30.933" UserId="1529" />
  <row Id="4586" PostId="2787" Score="5" Text="To quote the [help/dont-ask]: 'avoid asking subjective questions where … every answer is equally valid: “What’s your favorite ______?”' In addition, if you would like to suggest a book, that belongs in a self answer, not in the question." CreationDate="2017-07-20T14:18:25.367" UserId="58" />
  <row Id="4591" PostId="2787" Score="1" Text="This is analogous to asking &quot;What's the best movie? Which one best conveys a love of movies to someone who doesn't watch movies?&quot; on [movies.se]. Yes, it asks for the best thing, and best is a criteria, but it's not a strong enough one nor an objective enough one. If you could add some more concrete criteria, this could be a much better question." CreationDate="2017-07-20T14:56:33.077" UserId="58" />
  <row Id="4594" PostId="2787" Score="2" Text="What's the &quot;CS mindset&quot;?" CreationDate="2017-07-20T15:29:40.413" UserId="2045" />
  <row Id="4614" PostId="2787" Score="0" Text="There is no objectively &quot;correct&quot; book to introduce &quot;the CS mindset&quot; because there isn't just one objectively correct CS mindset." CreationDate="2017-07-20T18:31:05.013" UserId="2068" />
  <row Id="4619" PostId="2787" Score="1" Text="@nocomprende There is no single &quot;most correct&quot; book. Different people are motivated by different things in CS. If anything, one of the more important lessons you could teach is that there **isn't** just one way of thinking about things." CreationDate="2017-07-20T18:36:42.860" UserId="2068" />
  <row Id="4625" PostId="2787" Score="2" Text="@nocomprende The problem is that we can all agree to many good books. There isn't a single best or most correct book. That's why this question is a &quot;list question&quot; which is generally off-topic on Stack Exchange sites." CreationDate="2017-07-20T18:43:42.830" UserId="2068" />
  <row Id="4646" PostId="2787" Score="1" Text="At this moment, the top answer has +2 and the bottom answer has -2, but I absolutely cannot tell why one answer is better than another.  This question desperately needs criteria in order to get away from being a pure list question." CreationDate="2017-07-20T21:43:51.913" UserId="27" />
  <row Id="4653" PostId="2787" Score="1" Text="Okay, I say *Winnie the Pooh*. Does that deserve an up-vote or a down-vote?" CreationDate="2017-07-21T00:12:02.650" UserId="27" />
  <row Id="4659" PostId="2787" Score="3" Text="*But I'm very popular, achingly handsome, and very charming. Who will downvote me, even if they don't* ***quite*** *understand my answer?* Without explicit criteria, we are left to guess at what the votes might ultimately represent, and we have little expectation that better answers will float to the top." CreationDate="2017-07-21T01:30:46.780" UserId="27" />
  <row Id="4667" PostId="2787" Score="3" Text="I'm voting to close this question as off-topic because it is a list question with no objective answer. I find the question interesting, but it doesn't fit the Stack Exchange model." CreationDate="2017-07-21T02:55:48.013" UserId="283" />
  <row Id="4729" PostId="2787" Score="0" Text="I think the truth is that there *is* no clear-cut single answer.  It's not to say that there *couldn't* be one, but there simply isn't.  The perfect book for this description hasn't been written." CreationDate="2017-07-21T23:28:25.030" UserId="1103" />
  <row Id="6646" PostId="2787" Score="0" Text="I hate to say this, because there are good answers here, but I voted to delete. I think this is far enough off-topic that its very presence is detrimental to the site. That we allowed the question long enough for it to receive 6 answers means it looks like this sort of question is in fact encouraged, which it isn't." CreationDate="2017-08-06T18:07:44.853" UserId="919" />
  <row Id="6655" PostId="2787" Score="0" Text="Well, I think part of being a good programmer is being able to solve puzzles / riddles. So I think good riddles / puzzles books are the way to go. Here you have a nice list: https://www.quora.com/What-is-a-good-book-with-difficult-riddles" CreationDate="2017-07-20T17:51:05.997" UserId="14" />
  <row Id="13141" PostId="2787" Score="0" Text="I have VTC since it is now being considered for re-opening. Way outside the guidelines for the site, and most others as well." CreationDate="2018-08-06T06:54:27.727" UserId="104" />
  <row Id="13759" PostId="2787" Score="0" Text="Related archived copy of a deleted ancient question from the early days of Stack Overflow: [**What non-programming books should programmers read?**](https://stackoverflow.hewgill.com/questions/382/10.html)" CreationDate="2018-11-02T19:27:03.873" UserId="1103" />
  <row Id="19170" PostId="2788" Score="0" Text="This answer is worth more than my +1!&#xA;Would be worth a bounty if the author had not jumped ship &#xA;ie For the *developer* to write his C# or C++ or whatever more functionally is one thing&#xA;For the *teacher* the break should be really decisive not piecemeal" CreationDate="2022-01-31T16:56:56.210" UserId="8837" />
  <row Id="4601" PostId="2791" Score="1" Text="Actually, it is a bit more subtle. I tell (told) my students that it isn't my job to teach you what I know (much of which is obsolete anyway), but (a) to teach you what _you need  to know_ and (b) teach you how I think. That was normally how I stated it, but I'd have improved (b) to &quot;teach you how to think.&quot; Less personal. In particular, I didn't need to recapitulate my history in CS that got me to the current point of knowledge." CreationDate="2017-07-20T17:58:02.800" UserId="1293" />
  <row Id="4606" PostId="2791" Score="1" Text="Yes. Experts often make poor teachers as they don't understand learning, finding some things too easy. The best Tai Chi teacher for a beginning student is probably not the Master of the legacy, rather someone who understands the struggle. Eventually, though, go to the Master. Actually that is wisdom from one of the Masters, himself." CreationDate="2017-07-20T18:07:31.360" UserId="1293" />
  <row Id="4608" PostId="2791" Score="0" Text="Tai Chi is a life long process. The best time to plant a tree is 20 years ago. The next best time is _right now._  I started at about 60 years old." CreationDate="2017-07-20T18:13:49.730" UserId="1293" />
  <row Id="4598" PostId="2793" Score="7" Text="What about functions and procedures." CreationDate="2017-07-20T17:43:36.450" UserId="204" />
  <row Id="4600" PostId="2793" Score="0" Text="You also need to consider separately mutating variables, and non-mutating variables. The later should be taught first." CreationDate="2017-07-20T17:57:54.693" UserId="204" />
  <row Id="4602" PostId="2793" Score="2" Text="Also consider using Objects as easier (to be done before) creating objects." CreationDate="2017-07-20T17:58:45.477" UserId="204" />
  <row Id="4638" PostId="2793" Score="2" Text="@richard : In real computer hardware, functions, and non-mutating variables as computation results don't exist.  The program counter jumps, and state bits mutate.  Why jump to an abstraction so early?" CreationDate="2017-07-20T19:51:04.130" UserId="59" />
  <row Id="4645" PostId="2793" Score="0" Text="@hotpaw2 that is just one way to make the hardware. **As for why: mutation is one of the hardest concepts to grasp.** And even after you get/grok it there are a lot of mistakes to be made, even by experienced experts." CreationDate="2017-07-20T21:31:42.950" UserId="204" />
  <row Id="4648" PostId="2793" Score="1" Text="Regardless of the other answers, I want to highlight *refactoring* (including the IDE's refactoring tools) and *source organization* (packages/namespaces) as two things to at least touch on early. I didn't get either throughout my entire acedemic career and had to discover it later on...After ***five years working professionally.***" CreationDate="2017-07-20T21:51:20.170" UserId="1244" />
  <row Id="4649" PostId="2793" Score="0" Text="Related: [When to introduce OOP in teaching programming](https://cseducators.stackexchange.com/q/666/660)" CreationDate="2017-07-20T22:35:53.697" UserId="660" />
  <row Id="4687" PostId="2793" Score="1" Text="It is language dependent.  When teaching my daughter JavaScript on a webpage, events and functions have to happen very early, and using objects soon thereafter, but making your own objects is in the advanced class (after closures)." CreationDate="2017-07-21T14:52:08.300" UserId="2084" />
  <row Id="5737" PostId="2793" Score="2" Text="I thought it was interesting that the CodeHS curriculum for AP CS A started with Karel language, commanding a dog character to navigate various obstacles. There's a trend in K-12 CS education to develop computational thinking skills, independent of programming languages. Computational thinking skill can be developed without the use of computers. On that note, http://csunplugged.org/ is a great supplemental resource that can add some variety to class and make it more interesting for everyone." CreationDate="2017-07-22T04:17:27.513" UserId="2122" />
  <row Id="5956" PostId="2793" Score="2" Text="Related: [The order of subjects in beginner's curriculum](https://cseducators.stackexchange.com/questions/2903/the-order-of-subjects-in-beginners-curriculum)" CreationDate="2017-07-24T18:39:23.673" UserId="793" />
  <row Id="6024" PostId="2793" Score="0" Text="@richard Other than the _real computer hardware_ referenced by hotpaw2, how else have you seen _real computer hardware_ made?" CreationDate="2017-07-25T08:50:32.860" UserId="104" />
  <row Id="6025" PostId="2793" Score="0" Text="@GypsySpellweaver as well as Von-Neumann/Harvard Architecture (where Harvard is just a type of Von Neumann) there are many others. The ALU is a functional component, however it is wrapped in mutation `add r0, r1 →r3`. There are stack based, where there is no data addresses, all data is on a stack `add` this takes to values from stack, adds them, and puts result onto stack. (This is a pure functional language implemented in hardware). I know there is a forth cpu out there. However ever if no one has made one, it would not disprove that there are not alternatives." CreationDate="2017-07-25T09:19:52.487" UserId="204" />
  <row Id="6027" PostId="2793" Score="0" Text="@GypsySpellweaver Single instruction machines have no program counter, so no instruction addresses, and possibly no data addresses. One of my peers an university made a massively parallel single instruction computer. It used a counter as data input (Von Neumann uses a counted for Program counter input). On each clock tick it would test the input. If test succeeded, then the input data was captured into a small ram. Apart from this result capture, the rest was functional. It ran at only 0.1Mz because of complex instruction. It ran over night &amp; did what fastest supercomputer would take 20 years." CreationDate="2017-07-25T09:29:31.133" UserId="204" />
  <row Id="4626" PostId="2795" Score="0" Text="Yes, I understand and agree. But we would likely still disagree." CreationDate="2017-07-20T18:44:30.767" UserId="1293" />
  <row Id="4630" PostId="2795" Score="0" Text="@nocomprende top down or bottom up: what we are trying to do first, or how it is done first: human first or machine first." CreationDate="2017-07-20T18:56:24.463" UserId="204" />
  <row Id="4644" PostId="2795" Score="0" Text="@nocomprende I hardly use the memory register of my calculator. You don't need it if the calculator does BODMAS, or is stack based (reverse polish). I guess to understand functional, you have to understand functional. But I agree that starting at both ends seems like the way to go." CreationDate="2017-07-20T21:27:19.977" UserId="204" />
  <row Id="4672" PostId="2795" Score="2" Text="@Richard You are missing the point. *The number that is shown on the calculator display is stored in a variable.* And if you insist that calculators should have a reverse polish interface because that satisfies your prejudices about the one and only way to design software properly, IMO your whole philosophy is bass ackwards so far as real world computer system design is concerned." CreationDate="2017-07-21T05:40:22.563" UserId="1352" />
  <row Id="4675" PostId="2795" Score="0" Text="@alephzero no I have the point, I know where you are coming from, I just don't think it is the **best** place. And reverse polish is just one option, the other as stated is BODMAS. If you have ether of these, then you need no explicit registers. However you may reuse an answer from the display, not because you have to, but because it is easier. Usually to avoid typing the formula in again. But if you can recall the formula, it is usually easier, in the long run, to fix the formula (that way there is no implicit program, than making it easier to fix, and reason with)." CreationDate="2017-07-21T10:08:57.153" UserId="204" />
  <row Id="4722" PostId="2795" Score="1" Text="@Richard : If a calculator seems to do either RPN or BODMAS, it is just an illusion.  There are registers connected to an ALU actually doing the real grunt work.  Kids have built simple calculators out of Lego's.  That's a real (and realizable) foundation." CreationDate="2017-07-21T23:09:37.567" UserId="59" />
  <row Id="4725" PostId="2795" Score="0" Text="@hotpaw2 see my first comment to this answer, What or how: the how is probably as you say ( and I mean probably). But the what is as I say. The user only cares about the interface. They do not think about it in terms of this particular implementation." CreationDate="2017-07-21T23:19:48.370" UserId="204" />
  <row Id="4730" PostId="2795" Score="2" Text="Is the goal of Intro to CS to create users of interfaces?  Or start kids on the path to becoming competent computer scientists, programmers, and software engineers who really understand how to make stuff that works?" CreationDate="2017-07-21T23:31:30.170" UserId="59" />
  <row Id="4735" PostId="2795" Score="0" Text="@hotpaw2, Are those inconsistent goals? Or is one just a part of the other. Of course, I think students should be writing interfaces and extending them as part of a larger goal." CreationDate="2017-07-22T00:07:04.083" UserId="1293" />
  <row Id="5774" PostId="2795" Score="0" Text="(1) why - I don't believe that students need to recapitulate the history of computing to learn how to program. A modern language provides a complete, consistent, model in which to think and program without needing to map to lower level abstractions. The mapping is, in fact, extra work." CreationDate="2017-07-22T21:15:33.570" UserId="1293" />
  <row Id="5775" PostId="2795" Score="0" Text="(2) how - I don't start with a bare machine and a sort of &quot;math-y&quot; problem. I start with a simulation of some type that already has objects in it (I use Java, mostly) that can be (a) composed and (b) extended. Look at http://greenfoot.org or better http://greenroom.greenfoot.org for many examples that you can utilize and adapt. It is also a good beginner user environment that shows both program structure and graphic simulations. Start high. Move higher. When they get some experience with the &quot;complete consistent language environment&quot; then (only then) show the map to the netherworld of bits." CreationDate="2017-07-22T21:18:54.967" UserId="1293" />
  <row Id="4604" PostId="2796" Score="1" Text="I think that in SICP they would much rather not have included explicit state (variables) at all, but then decided that Functional Programming wasn't the _entire_ world. Sadly. An somewhere, optimization of programs would, perhaps, need to be done. ;-)" CreationDate="2017-07-20T18:05:23.127" UserId="1293" />
  <row Id="4613" PostId="2796" Score="0" Text="@Buffy they had to do mutation, because without it a random-number function is a complete mess. A random number function is not a function, it has internal state (if you have mutation). With out mutation, you end up with a pure function, now the only place for the state is in the stack, this breaks modularity as now the user of the function is keeping the state and it is well ugly. In most other cases it is best to avoid mutation; It is more elegant without it. Secondly a functional language with lambdas, can just go and implement mutation, and banning lambdas would be a big mistake." CreationDate="2017-07-20T18:30:08.097" UserId="204" />
  <row Id="4618" PostId="2796" Score="1" Text="@nocomprende variables are not a problem, mutation is a problem (mostly see comment to buffy). If you avoid ever reusing a variable then your code will be more elegant, easier to read, easier to optimise, less buggy … The only place where this is impossible is in loop counters. This is why scheme uses recursion. However sometimes it is better to use mutation (but not much). Programs should be 80% to 90% functional, and mutation should be encapsulated." CreationDate="2017-07-20T18:35:17.690" UserId="204" />
  <row Id="4627" PostId="2796" Score="0" Text="@nocomprende I can't remember when they covered domain specific languages in SICP, probably before mutation. They use scheme (the language that they are teaching in), to define the language, all but the lexer. Then they wrote the lexer in scheme. All functional. — the real power of functional is that it will make you program better in other languages." CreationDate="2017-07-20T18:46:15.330" UserId="204" />
  <row Id="4628" PostId="2796" Score="1" Text="@richard, actually I would say that variables (explicit capture of state for later testing especially) **is** a problem. But this isn't the place for such a discussion. Why &quot;remember&quot; something for later action, if you can capture the action itself (either in an object (OOP) or an expression (Functional). Your background leads you to a different conclusion than mine, of course." CreationDate="2017-07-20T18:48:36.293" UserId="1293" />
  <row Id="4631" PostId="2797" Score="1" Text="To support &quot;using objects before creating them&quot; start with an already built framework that the students work within, so that the most &quot;primitive&quot; thing they see is an object with behavior and that can interact with others. You build this, or find one, and the students extend it. Karel J Robot is an example of this way of thinking. Unfortunately it overuses inheritance a bit so needs to be used with some care and thought." CreationDate="2017-07-20T18:58:14.183" UserId="1293" />
  <row Id="5760" PostId="2797" Score="1" Text="To explain houses from bricks, I like using a historical approach.  Show them an abacus, human computers with mechanical adders, Baggage engine, core memory big enough to see each bit.  Throw in some stories about Ada, Turing, Shannon, and Hopper (the recent movie &quot;Hidden Figures&quot;) to keep them interested.  Humans made lots of bricks way before learning to make beautiful cathedrals.  Teaching engineering and science is a bit different from teaching Art appreciation." CreationDate="2017-07-22T17:25:19.943" UserId="59" />
  <row Id="4622" PostId="2798" Score="0" Text="setup and draw are procedures not functions (though C and its derivative incorrectly call them functions)." CreationDate="2017-07-20T18:39:15.933" UserId="204" />
  <row Id="4624" PostId="2798" Score="2" Text="@richard In an introductory course, the distinction does not matter. (I would go a step further and say the distinction doesn't matter in real life either, but I digress.) Processing calls these functions, so they're functions in Processing. In more advanced courses you can make a distinction between procedures and functions, but at an introductory level &quot;functions tell the computer to do stuff&quot; is about all you should be saying." CreationDate="2017-07-20T18:42:01.257" UserId="2068" />
  <row Id="4629" PostId="2798" Score="1" Text="The importance of the distinction between function and procedures is that if we make the distinction, then they have the same meaning as in real life: functions as in maths, procedures as in follow the correct procedure. The other importance is in which one we teach first." CreationDate="2017-07-20T18:51:44.230" UserId="204" />
  <row Id="4632" PostId="2798" Score="3" Text="@richard I guess I'll respectfully disagree with you here. At no point in my career have I needed to stop and remember whether I was writing a function or a procedure. So I wouldn't recommend spending any time making the distinction in an intro course, where students are already going to be inundated with new information. Maybe you just teach a different kind of course than I would. :p" CreationDate="2017-07-20T19:00:28.323" UserId="2068" />
  <row Id="4639" PostId="2798" Score="0" Text="@nocomprende What is your comment replying to?" CreationDate="2017-07-20T19:53:51.560" UserId="2068" />
  <row Id="4641" PostId="2798" Score="0" Text="@nocomprende You aren't being a bother, I just didn't understand whether you were replying to me or Richard." CreationDate="2017-07-20T20:28:12.460" UserId="2068" />
  <row Id="4736" PostId="2798" Score="2" Text="+1 to its depending on the programming language. The rest of your answer is good too. :-)" CreationDate="2017-07-22T00:15:02.033" UserId="283" />
  <row Id="6023" PostId="2798" Score="0" Text="Depending on the programming language is 100% correct. Some languages make a distinction between functions and procedures, to varying degrees, others do not. @richard Using the mathematical concept of a function is misguided. It may or may not apply to the situation and can be harmful to student comprehension. Some languages even allow a given subroutine to be called with and without a return value in the same program. The importance of making a distinction between them in any course is dictated _only_ by the language used. The language handles the rest will determine the order of the topics." CreationDate="2017-07-25T08:35:49.633" UserId="104" />
  <row Id="6708" PostId="2798" Score="0" Text="This year I'll try something similar with processing, but with a difference at the beginning : first settings/draw with some &quot;actions&quot; like ellipse (), rect (), fill ().... Then definition and execution of their own functions (void, without parameters)." CreationDate="2017-08-07T18:23:22.713" UserId="2103" />
  <row Id="6710" PostId="2798" Score="0" Text="@MichelBillaud Note that you don't need to have `setup()` or `draw()` functions in a Processing sketch. You can have a &quot;static&quot; sketch that just calls functions directly. I'd recommend starting out with that, as it's even less overheard to learn." CreationDate="2017-08-07T18:39:40.030" UserId="2068" />
  <row Id="6711" PostId="2798" Score="0" Text="Yes, but my objective is to introduce problem decomposition as quickly as possible. Afaik, as soon as there are user defined functions, setup or draw is needed to call them." CreationDate="2017-08-07T19:36:52.677" UserId="2103" />
  <row Id="6715" PostId="2798" Score="0" Text="@MichelBillaud That last part is true. I just think you should spend some time on basic &quot;here's how to call a function&quot; before &quot;here's how to write your own functions&quot; (even if it's just setup and draw). But of course, it's up to you!" CreationDate="2017-08-07T20:35:50.153" UserId="2068" />
  <row Id="6718" PostId="2798" Score="0" Text="@KevinWorkman in the first exercises they'll draw pictures with lots of function calls (ellipse etc). Then they'll learn to decompose the work into more manageable code units : void draw() {  draw_background ();  draw_forest ();  draw_farm (); ... } later use several calls to draw_tree (x,y) etc." CreationDate="2017-08-07T21:22:25.253" UserId="2103" />
  <row Id="6719" PostId="2798" Score="0" Text="@MichelBillaud Sounds good to me. I'm just saying for that first exercise, you don't need `draw()` or `setup()` at all." CreationDate="2017-08-07T21:34:23.570" UserId="2068" />
  <row Id="4633" PostId="2800" Score="0" Text="Can you tell us, are you someone that knows and want a good way to explain it?, or are you needing and explanation for yourself also." CreationDate="2017-07-20T19:36:50.140" UserId="204" />
  <row Id="4634" PostId="2800" Score="0" Text="Apologies. Yes, I am someone that knows and want a good way to explain it." CreationDate="2017-07-20T19:38:46.173" UserId="38" />
  <row Id="4660" PostId="2801" Score="0" Text="Please add some more details on the books and their applicability to the question. Simply a list of what is on your shelf isn't an answer. As the notice states, &quot;Answers that don't include explanations may be removed.&quot;" CreationDate="2017-07-21T01:51:57.510" UserId="58" />
  <row Id="4697" PostId="2802" Score="0" Text="Thanks but this doesn't explain the decentralisation aspect of verifying block-chain. :(" CreationDate="2017-07-21T18:59:18.097" UserId="38" />
  <row Id="4700" PostId="2802" Score="0" Text="@TKSourabh added something about decentralisation." CreationDate="2017-07-21T20:15:58.463" UserId="204" />
  <row Id="4713" PostId="2803" Score="3" Text="The omission of this approach is why [Schlemiel the Painter](https://www.joelonsoftware.com/2001/12/11/back-to-basics/) is so common.  +1." CreationDate="2017-07-21T22:20:07.990" UserId="1103" />
  <row Id="4642" PostId="2804" Score="0" Text="I would endorse any book by Vic; I was taught by him. A great teacher and a wonderful person." CreationDate="2017-07-20T21:08:38.680" UserId="694" />
  <row Id="4643" PostId="2804" Score="0" Text="@BrianTompsett-汤莱恩 You were very lucky if he teaches anything like he writes." CreationDate="2017-07-20T21:16:02.213" UserId="1293" />
  <row Id="4650" PostId="2808" Score="0" Text="What types of answers are you hoping to get? Asking *&quot;How could these kids do so if variable mutation was a difficult concept?&quot;* is a bit like asking how kids learned about XYZ before approach ABC. It's not a yes-or-no thing." CreationDate="2017-07-20T22:56:03.830" UserId="2068" />
  <row Id="4652" PostId="2808" Score="1" Text="Are you asking about mutable v immutable &quot;objects&quot; (i.e. Lists v Strings in Java) or just the fact that a variable can refer to different values at different times (i.e. var v val in Scala, say)?" CreationDate="2017-07-21T00:05:53.233" UserId="1293" />
  <row Id="17061" PostId="2808" Score="0" Text="A rust-y look may help : https://medium.com/@vikram.fugro/mutable-reference-in-rust-995320366e22 (not so much in answering the question but in saying that some language (designers) take this question v seriously)" CreationDate="2020-09-23T07:39:21.313" UserId="8837" />
  <row Id="4692" PostId="2811" Score="3" Text="Why `while` before `for`? A `for` loop (the Python-like version with `in`, not the C-like version) seems simpler to me: you know in advance how many iterations there are, and it can be introduced simply as a shortcut to write many similar lines. `While` loops usually rely on complex, mutating state." CreationDate="2017-07-21T17:03:14.407" UserId="1658" />
  <row Id="4696" PostId="2811" Score="0" Text="This is basically what I was taught in my first college course. For loops before while loops though. Python was a great learning tool, and we used turtles to draw for the &quot;Whoa, cool&quot; moment." CreationDate="2017-07-21T18:57:20.720" UserId="1028" />
  <row Id="4702" PostId="2811" Score="0" Text="@FedericoPoloni I find `for` loops a condensed version of `while` loops - see for example [this answer](https://cseducators.stackexchange.com/a/2634/919) and the others to that question. The Python version of a while loop, the for each loop, is nice, but it's better to know what that syntax really means, and the for each is basically a condensed while loop." CreationDate="2017-07-21T20:22:34.970" UserId="919" />
  <row Id="5755" PostId="2811" Score="0" Text="My self-teaching experience in 9th grade was the same, I came up with more and more ambitious ways to make shapes on the terminal screen with asterisks, using BASIC." CreationDate="2017-07-22T16:42:17.553" UserDisplayName="user737" />
  <row Id="4656" PostId="2812" Score="2" Text="I don't think that Turing completeness argument is valid. The [Single Instruction Computer](https://en.wikipedia.org/wiki/One_instruction_set_computer) is also Turing complete, but you don't really want to use it as a programming model." CreationDate="2017-07-21T00:35:04.147" UserId="182" />
  <row Id="4657" PostId="2812" Score="0" Text="Nor would you use a TM itself for programming. It was a theoretical point. You don't need to push the idea to its end point for it to be useful." CreationDate="2017-07-21T00:38:19.820" UserId="1293" />
  <row Id="4674" PostId="2812" Score="1" Text="Lambdas are the single most powerful feature, add the ability to add your own words (methods), a few primitives, and a bit of lexing, and you can build the rest of the language (any language)." CreationDate="2017-07-21T09:08:23.653" UserId="204" />
  <row Id="4733" PostId="2812" Score="1" Text="I agree with @user58697; this isn't really a valid premise at all.  A program in assembly language with 1024 modifiable registers and 3 GB of read-only memory would have a &quot;high percentage of immutable values&quot; and would *not* be easy to reason about *or* modify." CreationDate="2017-07-21T23:34:51.890" UserId="1103" />
  <row Id="4734" PostId="2812" Score="2" Text="To quote Harry Potter: Riddikulus. Why take such an extreme example to try to make a point?" CreationDate="2017-07-22T00:02:34.573" UserId="1293" />
  <row Id="18223" PostId="2812" Score="0" Text="@Wildcard your argument is the same as &quot;LED lights don't help you save electricity, because you can leave the electric toaster on all day.&quot;" CreationDate="2021-08-31T07:49:27.420" UserId="204" />
  <row Id="4695" PostId="2813" Score="0" Text="This an excellent way to explain the basic concept behind block-chain. I am gonna wait for sometime and see if anyone can top this before accepting. Thank you :)" CreationDate="2017-07-21T18:55:58.043" UserId="38" />
  <row Id="4727" PostId="2814" Score="2" Text="That's outrageous, but I really can't argue.  The book is *wonderful* anyway.  Read it to your kids if/when you have them.  :)" CreationDate="2017-07-21T23:25:26.303" UserId="1103" />
  <row Id="13140" PostId="2814" Score="0" Text="_Winnie the Pooh_ is also available in many translations, even in Latin, as _[Winnie Ille Pu](https://www.amazon.com/Winnie-Ille-Pu-Latin-Milne/dp/014015339X)_" CreationDate="2018-08-06T06:52:26.750" UserId="104" />
  <row Id="18231" PostId="2816" Score="0" Text="A lot of the ASP.Net web apps I have created lately don't have *any* loops in them. Most of the mutation is to update a database with SQL. So I have not seen a reason to use functional or OO approaches. Am I misunderstanding something?" CreationDate="2021-09-02T01:34:38.063" UserId="5349" />
  <row Id="18265" PostId="2816" Score="0" Text="@ScottRowe Your programming language is SQL; its used purely functionally when you write only `SELECT`; its mutable side goes under the `UPDATE` s. Loops are everywhere and nowhere! Nowhere because you dont see them (like pointers in Java/Python). Everywhere because everything is by default at the relation level. Programming analogies would be broadcasting in numpy or LINQ in .NET.The thing you think of as your programming language — I guess C# — is more like a glue like shell in traditional *nix usage. So what is the question?  Heck a + in C or ADD in assembly is a 32/64 bit hardware loop!" CreationDate="2021-09-14T06:22:43.660" UserId="8837" />
  <row Id="18267" PostId="2816" Score="0" Text="@Rusi If we think of SQL as a Domain Specific Language, and C# as basically a DSL also (you described it as being like a shell script, which I agree with) then it's already about as optimized as possible in terms of simple, direct code. So I don't see how making it more cryptic or how re-casting it as Functional or OO would add anything useful. It is already good. There is too little there to 'improve' it. What would you do with such a program to convert it to OO or Functional that wouldn't just add more boilerplate or render it incomprehensible? That's what I am asking. Isn't it good as is?" CreationDate="2021-09-14T10:24:28.583" UserId="5349" />
  <row Id="18268" PostId="2816" Score="0" Text="@ScottRowe Oh *I* did not wish to improve this configuration -- others may that's another matter. For me SQL is a damn neat functional language. And all the ORM malarkey comes from a misunderstanding viz. that OO is higher level than SQL.  In a sane world OO would be taken as lower-level than SQL! Perhaps the broader framing error in your question is the assumption : *Doing FP means using an FPL.* I suggest an alternative view: FP as a thinking-strategy not a technology -- like flowcharts were decades ago.  See http://blog.languager.org/2012/10/functional-programming-lost-booty.html for more" CreationDate="2021-09-14T12:02:00.610" UserId="8837" />
  <row Id="18269" PostId="2816" Score="0" Text="Analogous to my «SQL is a neat FPL» here is Simon Peyton Jones -- one of the biggest names in FP today -- saying Excel is the worlds most widely used FPL https://www.slideshare.net/kfrdbs/peyton-jones" CreationDate="2021-09-14T12:13:46.680" UserId="8837" />
  <row Id="18270" PostId="2816" Score="0" Text="@Rusi Ok, well as long as I have been thinking about it the right way, I don't much care what marketing term people use. Teach the thought process and forget about the bandwagon. It would sure cut down on all the discussion." CreationDate="2021-09-14T15:31:22.543" UserId="5349" />
  <row Id="4670" PostId="2817" Score="3" Text="I read your comment as that mutability itself isn't as much a conceptual difficulty, as that the common aliased notation for mutating a variable can be a source of confusion." CreationDate="2017-07-21T04:49:34.973" UserId="59" />
  <row Id="6077" PostId="2817" Score="0" Text="the  `var = expr` notation for assignment was used before Basic. It was explained in the preliminary report of Fortran &lt;&lt; [J.W. Backus, H. Herrick and I. Ziller.] Preliminary Report : Specifications for the IBM Mathematical FORmula TRANSlating System, FORTRAN. Programming Research Group, Applied Science Division, International Business Machines Corporation, November 10, 1954, 29 pages. &gt;&gt; http://archive.computerhistory.org/resources/text/Fortran/102679231.05.01.acc.pdf" CreationDate="2017-07-25T20:42:13.023" UserId="2103" />
  <row Id="6079" PostId="2817" Score="0" Text="Agreed. Basic implemented the LET operator to alleviate the confusion generated by the overloaded use of the = operator." CreationDate="2017-07-25T20:51:22.267" UserId="1537" />
  <row Id="18222" PostId="2817" Score="2" Text="Some good ideas. However, your dismissal for immutable as it leads to one small problem, is a common fallacy when facing change. Yes, it will not fix all problems. Yes, it can introduce new problems (but fewer). My preference is immutable by default (Give me a `mutable` keyword, and I am happy. However, don't over use it)." CreationDate="2021-08-31T07:45:42.170" UserId="204" />
  <row Id="4676" PostId="2818" Score="3" Text="It may be relevant that Swing is [no longer undergoing active development](http://www.oracle.com/technetwork/java/javafx/overview/faq-1446554.html#6), and JavaFX is considered to be its replacement." CreationDate="2017-07-21T10:46:57.883" UserId="27" />
  <row Id="4679" PostId="2818" Score="1" Text="@BenI. I'll add: you are right. JX is literally meant to be a replacement. [as per Oracle](http://www.oracle.com/technetwork/java/javafx/overview/faq-1446554.html#6)" CreationDate="2017-07-21T12:22:40.663" UserId="150" />
  <row Id="4680" PostId="2818" Score="0" Text="what kind of school do you work in? is it a highschool?" CreationDate="2017-07-21T12:41:12.277" UserId="1705" />
  <row Id="5810" PostId="2818" Score="1" Text="I noticed this is the first question with an ap-cs-a tag.  Perhaps you could re-tag your question with the more used ap-computer-science-a tag?" CreationDate="2017-07-23T18:15:03.193" UserId="2145" />
  <row Id="5845" PostId="2818" Score="0" Text="@CSCheerleader Good catch. I'll fix that now. Oversight on my part." CreationDate="2017-07-23T20:58:03.777" UserId="76" />
  <row Id="5794" PostId="2819" Score="0" Text="+1 Also, if you teach your students JavaFX instead of Swing, they've already made experiences with the framework which will probably be used in the future." CreationDate="2017-07-23T14:36:38.703" UserId="793" />
  <row Id="5795" PostId="2819" Score="0" Text="@TuringTux that's a good point." CreationDate="2017-07-23T14:39:23.940" UserId="150" />
  <row Id="18230" PostId="2820" Score="0" Text="Few languages have full multiple inheritance. Would you please provide a reference that shows the technique you describe? It sounds like something I learned in a Lisp class over 35 years ago, and if I have overlooked it all this time I would like to improve." CreationDate="2021-09-02T01:27:59.307" UserId="5349" />
  <row Id="18235" PostId="2820" Score="1" Text="@ScottRowe Yes. Many languages are defective. You can do 90% without multiple inheritance. In a language where everything is first-class (e.g. lisp). You can implement foreach. foreach is a bounded loop, but its implementation uses an unbounded loop. The other loop is the super-loop (while user_has_not_chosen_to_exit:)" CreationDate="2021-09-02T05:55:00.390" UserId="204" />
  <row Id="18236" PostId="2820" Score="1" Text="I added some alternatives (to the answer) to full-inheritance" CreationDate="2021-09-02T05:55:42.583" UserId="204" />
  <row Id="18237" PostId="2820" Score="0" Text="I inherited a well-designed system about 30 years ago that is basically your 90% solution. It was written entirely in C, no OO. So, to me, languages are just a convenience, not essential. I decide what I want, and I build it, even if it's difficult. But making it easy doesn't change the design process. If teaching is about teaching design, then languages and approaches matter much less, because they will change, but objectives will not." CreationDate="2021-09-02T09:58:34.373" UserId="5349" />
  <row Id="18242" PostId="2820" Score="1" Text="@ScottRowe I agree. Unix is written in `C` and it is an OO design, with (reference-counted) garbage collection. And languages do only make it easier. We should make it easy to do the right thing, but not make it impossible to do the wrong thing: sometimes mutation is the best solution (e.g. implementing a random-number-generator). I think choice of language is important, but also agree that you can write good or bad code in any language." CreationDate="2021-09-02T15:54:33.110" UserId="204" />
  <row Id="4686" PostId="2821" Score="0" Text="@nocomprende The nature of order was made after the timeless way, it is the elements that you are looking for." CreationDate="2017-07-21T14:42:41.383" UserId="204" />
  <row Id="4689" PostId="2821" Score="0" Text="@nocomprende these elements/properties are different, to those 5, or to chemical, physical elements. I have added them to the answer, and will add some programming examples." CreationDate="2017-07-21T15:11:16.100" UserId="204" />
  <row Id="13135" PostId="2821" Score="0" Text="@nocomprende's account was deleted, so the comments are no longer here. Hope my comments make some sense without them." CreationDate="2018-08-05T16:58:11.870" UserId="204" />
  <row Id="4712" PostId="2828" Score="2" Text="For what it's worth, professionals don't think about the normal forms when normalizing a database.  I worked successfully with relational databases for many years before I even knew that there was such a thing as first-normal form and second-normal form." CreationDate="2017-07-21T21:58:40.793" UserId="882" />
  <row Id="5746" PostId="2828" Score="0" Text="Modifying a database structure without understanding the data does *not* seem like a very good idea to me." CreationDate="2017-07-22T15:37:43.033" UserId="882" />
  <row Id="5749" PostId="2828" Score="0" Text="It's the difference between theory and actual, real-world practice, that's all." CreationDate="2017-07-22T15:45:39.853" UserId="882" />
  <row Id="4704" PostId="2831" Score="0" Text="To quote [Oracle](https://docs.oracle.com/javase/tutorial/java/concepts/interface.html) on Interfaces: &quot;Interfaces form a contract between the class and the outside world, and this contract is enforced at build time by the compiler.&quot; So, it is a contract, in the sense of I'm talking about, which is what I'm asking about. Which is not exactly what you answered. Nevertheless, your comment on my example is useful." CreationDate="2017-07-21T20:26:48.870" UserId="150" />
  <row Id="4707" PostId="2831" Score="0" Text="I think oracle (or was it sun micro-systems), read that interfaces form a contract, and then noted that they had something that they called an interface, and then wrongly concluded that they were constructing contracts. This is an easy mistake if they did not know what the original author meant by interface. “an interface is defined in terms of the obligations of the sender and the receiver involved in an interaction. … Typically these are set forth in preconditions and postconditions … invariant conditions.” — B.Meyers (1994)" CreationDate="2017-07-21T20:41:55.750" UserId="204" />
  <row Id="4708" PostId="2831" Score="0" Text="that may be. But do you agree that *it* ***can*** *be thought of* as a contract?" CreationDate="2017-07-21T20:43:16.433" UserId="150" />
  <row Id="4715" PostId="2831" Score="0" Text="@ItamarG3 If a Java interface is a contract, then. What do the two sides in the contract promise? I have around 25 years programming experience, and I can not see it. I would not expect my pupils to see it. Can you explain how Java interfaces are contracts to me." CreationDate="2017-07-21T22:25:56.117" UserId="204" />
  <row Id="5787" PostId="2831" Score="0" Text="@richard, perhaps &quot;intended contract&quot; is a better term. It certainly can't be enforced in Java. But the software is generally better if everyone agrees to behave as if it were." CreationDate="2017-07-23T11:05:35.467" UserId="1293" />
  <row Id="5789" PostId="2831" Score="0" Text="@Buffy but where is the behaviour agreed? I can see that you can use good-names, and you could but the contracts into comments. I could agree that this is an implicit contract, if the names are good, e.g. draw_line(start: point, end: point), we would expect this to draw a line, between two points." CreationDate="2017-07-23T11:59:58.890" UserId="204" />
  <row Id="5791" PostId="2831" Score="0" Text="@richard and anything implementing that interface **must** implement `draw_line` method (which means write a method body). Btw, I'm sorry for the confusion. I mistagged the question. Now I see that tagging with [tag:java] is needed." CreationDate="2017-07-23T12:14:41.213" UserId="150" />
  <row Id="5742" PostId="2836" Score="0" Text="Yeah, OO is a loose metaphor, which suffers when we try to be too rigid about it. I like the idea of &quot;acting out&quot; what a program needs to do." CreationDate="2017-07-22T13:23:35.010" UserDisplayName="user737" />
  <row Id="5782" PostId="2847" Score="1" Text="Hello, and welcome to Computer Science Educators! Thanks for your answer; I hope to continue seeing you around the site." CreationDate="2017-07-22T22:47:25.340" UserId="919" />
  <row Id="5784" PostId="2850" Score="0" Text="Thank you for sharing your insight as an AP CS exam reader. I'll look for more of your answers." CreationDate="2017-07-23T03:13:15.363" UserId="283" />
  <row Id="5785" PostId="2850" Score="0" Text="Good points!  I'd also be extremely interested in your insights on [this](https://cseducators.stackexchange.com/questions/143/designing-rubrics-for-ap-computer-science-style-free-response-questions) question as well." CreationDate="2017-07-23T04:14:10.457" UserId="27" />
  <row Id="5833" PostId="2853" Score="0" Text="It is blurry how you answer what is being asked in the question. I dont see how it deals with motivating." CreationDate="2017-07-23T19:56:08.580" UserId="1705" />
  <row Id="5843" PostId="2853" Score="0" Text="I dont understand how all the quotes are related and what they add." CreationDate="2017-07-23T20:38:53.970" UserId="1705" />
  <row Id="5786" PostId="2854" Score="0" Text="Wow! This is a very good answer. Welcome to [cseducators.se], I hope we'll be hearing more from you." CreationDate="2017-07-23T04:54:58.233" UserId="150" />
  <row Id="5788" PostId="2856" Score="0" Text="java enforces that an implementing class actually ***`implements`*** the method signatures defined in the interface. Anything that implements a specific interface is promising that you can work and use ***only*** the parts that are from the interface (`Interface objectName = new ImplementingClass()`). At compile time, you can use anything that `Interface` says, but not what `ImplementingClass()` can do which isn't related to the interface. My point is that I'm not sure I understand why you say that `intent` is the only thing enforced." CreationDate="2017-07-23T11:35:58.307" UserId="150" />
  <row Id="5790" PostId="2856" Score="0" Text="Declaring variables with the interface type is good style but, unfortunately only style, and that isn't enforced." CreationDate="2017-07-23T12:11:34.337" UserId="1293" />
  <row Id="13672" PostId="2856" Score="0" Text="Domain Specific Languages have a lot of advantages and have existed since long before OOP came about. The biggest advantage, from my point of view, is that I can hand over a lot of 'programming' work to non-programmer domain experts, including ordinary folks. My first goal as a programmer is to make my services no longer required. I used to be quite successful at that." CreationDate="2018-10-17T21:06:21.683" UserId="5349" />
  <row Id="6758" PostId="2864" Score="0" Text="This sounds promising, I'll have to check it out, I'm looking for something super-simple just to engage students. Preferably something that can be used without having to have administrative rights to install since our IT department is very (very) restrictive in what we can do :-/" CreationDate="2017-08-08T16:23:51.570" UserId="433" />
  <row Id="6763" PostId="2864" Score="0" Text="Does this package also support basic GUI functionality such as text boxes, buttons, etc - my initial scan shows only graphical functionality for drawing etc. Thanks. I would like to be able to have some non-console IO for my students to use." CreationDate="2017-08-08T17:12:53.363" UserId="433" />
  <row Id="6970" PostId="2864" Score="1" Text="It doesn't support buttons and text fields like you see with JavaFX or Swing. However, it does support interactivity with the keyboard and mouse so you can get creative with students providing input. Although it isn't a extensive as Swing or JavaFX, the tradeoff is that you get a lightweight and easy-to-use framework for integrating graphics and user input. I'd be more than happy to chat offline about how I used this for my AP CS kids and to bounce around ideas for accomplishing what you want." CreationDate="2017-08-13T19:05:22.827" UserId="1743" />
  <row Id="5796" PostId="2867" Score="0" Text="Welcome to [cseducators.se]. This might be a very good answer, but it could really benefit from some explanations and details. Could you add some details and explanations or examples on how to integrate your suggestion into the ap cs a curriculum?" CreationDate="2017-07-23T15:10:50.820" UserId="150" />
  <row Id="6309" PostId="2869" Score="0" Text="Yes, thanks, fantastic for middle school! Also reminds me of earthquakes. I've noted anecdotally that kids with extreme interest in weather and earthquakes are disproportionately boys. A book about CS at CMU (Kicking Butt in CS) claims that CMU's success in getting gender balance was orthogonqal to such gender difference observations, but it makes me wonder what the result would be of greater engagement with weather measurements for K-2 girls." CreationDate="2017-07-30T15:18:27.463" UserId="765" />
  <row Id="5811" PostId="2871" Score="0" Text="I could not recommend using an sql db, in an application. SQL is great for ad-hoc queries, but not for creating applications. There are much better choices, such as the ones you mentioned. Having said that, I would definitely read up on 1st, 2nd, 3rd normal form. It is essential, and also transferable to non-relational DBs." CreationDate="2017-07-23T18:59:10.857" UserId="204" />
  <row Id="6242" PostId="2871" Score="1" Text="SQLite rocks. It's free and on billions of devices." CreationDate="2017-07-28T01:26:17.403" UserId="283" />
  <row Id="6258" PostId="2871" Score="0" Text="Why won't you use sql DB for applications? @richard" CreationDate="2017-07-28T10:28:51.983" UserId="38" />
  <row Id="6259" PostId="2871" Score="0" Text="@TKSourabh it is probably not what you want, Don't just eat oranges. See http://nosql-database.org/" CreationDate="2017-07-28T10:39:11.603" UserId="204" />
  <row Id="6260" PostId="2871" Score="1" Text="I know there are two sides to everything. But I need a reason to why not? The webpage you shared doesn't seem to have anything other than listing No-SQL DBs" CreationDate="2017-07-28T10:43:18.293" UserId="38" />
  <row Id="5817" PostId="2874" Score="0" Text="I think it's typical when teaching abbreviations to show the non abbreviated version too." CreationDate="2017-07-23T19:07:23.947" UserId="283" />
  <row Id="5818" PostId="2874" Score="0" Text="@EllenSpertus so I should show both?" CreationDate="2017-07-23T19:07:58.373" UserId="150" />
  <row Id="5823" PostId="2874" Score="0" Text="For the 2nd example I would go with a `for` loop." CreationDate="2017-07-23T19:14:17.353" UserId="204" />
  <row Id="5824" PostId="2874" Score="0" Text="@richard fair point." CreationDate="2017-07-23T19:14:46.477" UserId="150" />
  <row Id="5828" PostId="2874" Score="1" Text="Yes, show both at first." CreationDate="2017-07-23T19:22:45.447" UserId="283" />
  <row Id="5941" PostId="2874" Score="2" Text="As an &quot;old timer&quot; I cannot let any mention of &quot;syntactic sugar&quot; in Java/C++ pass without quoting Alan Perlis: &quot;Syntactic sugar causes cancer of the semicolon.&quot; To see all his wonderful epigrams, follow http://www.leptonica.com/cachedpages/perlis-epigrams.html" CreationDate="2017-07-24T15:41:20.857" UserId="401" />
  <row Id="6478" PostId="2874" Score="0" Text="@RichardPattis I see you have quite a collection of epigrams at your website, as well as being a CS luminary. (I recognized your name but had to Google you to recall your claims to fame, such as being the creator of the Karel programming language.)" CreationDate="2017-08-02T15:50:09.383" UserId="283" />
  <row Id="6273" PostId="2875" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/62992/discussion-on-question-by-ellen-spertus-why-did-the-percentage-of-cs-bachelors)." CreationDate="2017-07-28T17:05:17.377" UserId="58" />
  <row Id="11888" PostId="2875" Score="0" Text="I read an article that said it had to do with teaching capacity, and the need professors felt to make the field more competitive. This is detailed in Nat's answer to the OP's other question, but this explanation hadn't come up in the current thread, so I wanted to share: https://cseducators.stackexchange.com/a/2972/294" CreationDate="2018-04-02T08:56:32.860" UserId="294" />
  <row Id="6272" PostId="2876" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/62991/discussion-on-answer-by-ben-i-why-did-the-percentage-of-cs-bachelors-degrees-g)." CreationDate="2017-07-28T17:04:44.387" UserId="58" />
  <row Id="6330" PostId="2876" Score="1" Text="My cousin got her CS degree in '79. I got mine 6 years later in '85. My family got an Apple II in '77 while my cousin was in college. I was in high school and I thought the Apple II was the coolest thing in the world. I was surprised that my cousin wasn't really interested in the Apple because at that time it couldn't do much that would apply to her school work or her professional future. In other words, our interest in CS was of a different sort. She seemed to be more interested in the profession, but I was interested in the gadgets." CreationDate="2017-07-31T00:37:34.737" UserId="2323" />
  <row Id="6331" PostId="2876" Score="1" Text="Hey, @GregGraham! Thanks for the comment. I hope we hear more from you around the site. Being active on here has really been the best PD I've ever had." CreationDate="2017-07-31T00:39:33.820" UserId="27" />
  <row Id="6387" PostId="2876" Score="0" Text="I will try to get involved. I just found out about the site, and it looks like it will be very helpful." CreationDate="2017-08-01T13:17:17.463" UserId="2323" />
  <row Id="5819" PostId="2877" Score="0" Text="No obligation, but since you seem to be posting a lot lately, you might want to consider stopping by and saying hi in [the Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom), our site chat :)" CreationDate="2017-07-23T19:09:06.730" UserId="27" />
  <row Id="5830" PostId="2878" Score="1" Text="My take on this is that one should not only try to teach high-practical-low level computational concepts, but how all these concept levels connect and build upon one another." CreationDate="2017-07-23T19:54:26.213" UserId="59" />
  <row Id="5923" PostId="2879" Score="0" Text="Was there computer advertising in the early 1970s when these people were children? At an age when they were forming ideas about their gender roles? This seems doubtful to me." CreationDate="2017-07-24T14:56:19.937" UserId="2173" />
  <row Id="5925" PostId="2879" Score="1" Text="@axsvl77 The advertising was for personal computers, which came about in the 80s... Those who were children **then** were affected (boys &quot;promoted&quot; and girls &quot;rejected&quot;). From there, the narrative I describe took over." CreationDate="2017-07-24T14:58:35.353" UserId="150" />
  <row Id="5926" PostId="2879" Score="1" Text="@ItamarG3 Yes true. But the question is about people **graduating** in 1984, not those who were children in the 1980s. Your answer is certainly relevant for those graduating in the 90's." CreationDate="2017-07-24T15:08:31.813" UserId="2173" />
  <row Id="5928" PostId="2879" Score="1" Text="@axsvl77 the question asks why the numbers in CS are so different. All other fields don't see such a radical decrease. This drop happens more towards 1990. Also, I'll correct myself: PCs started spreading and being advertised around 1977." CreationDate="2017-07-24T15:21:43.397" UserId="150" />
  <row Id="5929" PostId="2879" Score="0" Text="@ItamarG3 The title is &quot;Why did it peak in 1984&quot;" CreationDate="2017-07-24T15:23:55.853" UserId="2173" />
  <row Id="5934" PostId="2879" Score="2" Text="@axsvl77 I edited my answer to address that. Also, a peak is only a peak if there is a drop after it." CreationDate="2017-07-24T15:36:17.937" UserId="150" />
  <row Id="6065" PostId="2879" Score="0" Text="I find this answer very interesting, though a bit sad. This would mean that back then people *already* had the wrong impression that CS is about computers. Probably the bad wording in the English term &quot;computer science&quot; doesn't really help, either. Although the same phenomenon happens for instance in my country (Italy) where the word is not a direct translation of &quot;computer science&quot;." CreationDate="2017-07-25T17:01:29.713" UserId="963" />
  <row Id="6066" PostId="2879" Score="0" Text="you're right, but It's not too late. As long as people are educated to destroy that unfair narrative, and build a new one where prejudice and the thought that women don't  belong in CS are nowhere to be seen. Education is the key, IMO" CreationDate="2017-07-25T17:05:45.633" UserId="150" />
  <row Id="6208" PostId="2879" Score="0" Text="@ItamarG3 The problem is that even if everyone is completely fair-minded, the fact that there's such a big gap is itself a potential reason that may put women off. So you end up in a vicious cycle, or at least a trap, that's hard to escape from" CreationDate="2017-07-27T17:00:24.823" UserId="1218" />
  <row Id="5821" PostId="2880" Score="0" Text="@richard As I understand, there is no such guarantee, at least in Java: `x = truefalse() ? badSideEffectMethod1() : badSideEffectMethod2();`" CreationDate="2017-07-23T19:12:46.117" UserId="27" />
  <row Id="5822" PostId="2880" Score="0" Text="Actually, evaluating the predicate or subepressions may have side effects. The difference is whether statements can go in the arms, for languages where statements and expressions differ." CreationDate="2017-07-23T19:14:05.123" UserId="283" />
  <row Id="5825" PostId="2880" Score="0" Text="@BenI. What do you mean by &quot;no guarantee&quot;? I didn't fully understand." CreationDate="2017-07-23T19:15:59.897" UserId="150" />
  <row Id="5826" PostId="2880" Score="0" Text="I thought I understood until @EllenSpertus said what she just said.  Let's move this conversation to [chat](https://chat.stackexchange.com/rooms/59174/the-classroom)?" CreationDate="2017-07-23T19:17:27.700" UserId="27" />
  <row Id="5827" PostId="2880" Score="0" Text="The compiler (java, C#, C++ etc) does not check that each of the terms are pure functions (have no side effect)." CreationDate="2017-07-23T19:17:27.910" UserId="204" />
  <row Id="5852" PostId="2883" Score="0" Text="It is domain specific only if the &quot;domain&quot; in question is student minds. It is not a language for actual robot programming." CreationDate="2017-07-23T23:04:28.723" UserId="1293" />
  <row Id="5854" PostId="2883" Score="0" Text="+1 .  Nitpicky historical point: C was released in 1972." CreationDate="2017-07-24T00:29:00.030" UserId="1537" />
  <row Id="5855" PostId="2883" Score="0" Text="I guess I used the date of the book _The C Programming Language_, not the language itself. Thanks." CreationDate="2017-07-24T00:31:38.973" UserId="1293" />
  <row Id="5857" PostId="2894" Score="4" Text="So, in essence, you're saying the same as I am, but without marketing decisions influencing the market. I certainly have no data to show that games would have targeted girls in a parallel universe, so I can't really argue with you. No way to tell." CreationDate="2017-07-24T01:32:27.833" UserId="27" />
  <row Id="5858" PostId="2894" Score="2" Text="@BenI. Sure, I have no problem with your answer. I was annoyed that nobody suggested mine as a possibility. Before we can solve a problem we need to know if it is solvable." CreationDate="2017-07-24T01:58:48.487" UserId="2149" />
  <row Id="5862" PostId="2894" Score="2" Text="Having done a BTEC in game design, a HND in computing and an AS level in Psychology, I'm quite convinced that interest is one of the driving forces. My BTEC class had one female who was more interested in the stories than the technology. My HND class had 3 females, 2 were there because they already had IT jobs at the college (odd considering they weren't very IT literate), 1 sat quietly in the corner and ended up leaving for reasons we don't know, got replaced by another woman (~27)  who ended up leaving because she decided IT wasn't really for her..." CreationDate="2017-07-24T02:12:37.633" UserId="1538" />
  <row Id="5863" PostId="2894" Score="2" Text="... In my psychology course, there were 2-3 males (including me), everyone else was female. I ended up leaving because I found it was too much work on top of the demanding game design course and game design was more important to me. I could be wrong, but I think, advertising aside, a good chunk of it is down to actual interest. (Disclaimer: my childhood also began in the 90s.)" CreationDate="2017-07-24T02:18:31.463" UserId="1538" />
  <row Id="5883" PostId="2894" Score="4" Text="+1 for Occams Razor, and for matching my experience (in the business world) - I do work with plenty of women, but even those of them that can and do program as part of their daily work, do it more matter-of-factly &quot;because they can&quot; and want to get something *done*. The colleagues who do the more driving stuff (trying out new programming paradigms, hardcore debugging of 3rd party modules, going the DevOps rouet etc. etc.) are 99% men. Purely based on interest, as there is no perceptible discrimination here in my company (there are precious few of the &quot;needed&quot; profiles anyways...)." CreationDate="2017-07-24T10:32:50.943" UserId="652" />
  <row Id="5907" PostId="2894" Score="1" Text="@Oleg Was this in the USA? It sounds like a different culture. Certainly not China though" CreationDate="2017-07-24T13:36:35.807" UserId="2173" />
  <row Id="5914" PostId="2894" Score="2" Text="@axsvl77 This was in Israel. There was a huge immigration from the Soviet Union in the early 90's and there were lots of people who couldn't find jobs adequate to their expertise and they were also dissatisfied with Israeli education, so they created a network of evening schools for ex Soviet Union kids (All the teachings were done in Russian, they even tried to teach Russian grammar but we weren't interested). Those kind of evening schools were specific to Israel in the early to mid 90's, they don't exist anymore. Also if I remember correctly it was 2 times a week for 3-4 hours each time." CreationDate="2017-07-24T14:02:45.463" UserId="2149" />
  <row Id="5917" PostId="2894" Score="0" Text="@axsvl77 I just checked and apparently they do still exist. It became much more organized and serious and it's not only for Russian speakers anymore . You can find some info in English [here](http://www.reshetmofet.org/en/)  if it interests you." CreationDate="2017-07-24T14:16:59.903" UserId="2149" />
  <row Id="5918" PostId="2894" Score="26" Text="Computer Science departments in the Middle East are heavily female. I don't think a purely biological answer is satisfactory." CreationDate="2017-07-24T14:17:16.303" UserId="2045" />
  <row Id="5919" PostId="2894" Score="20" Text="@nova I very much agree with you; likewise with Chinese women in CS. It cannot be biological. However, cultural gender roles are certainly important. I wish I knew enough about the US feminist movement and its impact on child rearing 1966-1984 to comment why in the US males would be more inclined to like CS, and why US females did not." CreationDate="2017-07-24T14:22:41.570" UserId="2173" />
  <row Id="5922" PostId="2894" Score="1" Text="If advertisers cannot &quot;create reality&quot; then why does advertising exist?  The entire purpose of advertising is to change people's behavior." CreationDate="2017-07-24T14:49:01.443" UserId="2175" />
  <row Id="5927" PostId="2894" Score="2" Text="I am not sure that the theory that millions of years of evolution have lead the women to be less interested in CS than men is &quot;simple&quot;. I think that explaining the under-representation of women in CS with a societal point of view instead of a biological one is much more simple." CreationDate="2017-07-24T15:10:09.787" UserId="2177" />
  <row Id="5930" PostId="2894" Score="2" Text="@nova and axsvl77 Please support your claims with data from reality. In Israel 27% of CS students are female and according to the [source](http://glz.co.il/1189-101233-HE/Galatz.aspx) many of them don't work in programming after graduation. In China only 20% of programmers are female [source](http://www.chinadaily.com.cn/china/2017-01/13/content_27943492.htm) , and from my personal experience working with a 10 person Chinese development team they were all male." CreationDate="2017-07-24T15:24:23.660" UserId="2149" />
  <row Id="5931" PostId="2894" Score="1" Text="@Oleg you mention that it happened in Israel, and I just asked a family member (who has been around to see what you describe) and they said almost exactly what you say." CreationDate="2017-07-24T15:31:33.060" UserId="150" />
  <row Id="5933" PostId="2894" Score="1" Text="@Casey Advertisers want to sell as much of their product as possible, they do market research, find out what demographic is interested in their product and target their ads toward that demographic. The processes are of course very complex and they can be wrong during their research and somewhat augment reality. Market Forces still apply and ads will adapt to reality even if they were somewhat responsible for creating it." CreationDate="2017-07-24T15:36:06.503" UserId="2149" />
  <row Id="5935" PostId="2894" Score="0" Text="@TomCornebize If X and Y are different in A then assuming the difference is caused by X != Y is the most simple and natural explanation." CreationDate="2017-07-24T15:43:17.577" UserId="2149" />
  <row Id="5938" PostId="2894" Score="15" Text="[50% female at CMU Qatar, 70% female at U Qatar](https://computinged.wordpress.com/2010/05/03/women-in-cs-in-qatar-its-complicated/). Not Middle East but SE Asia: [Mayalsia is 52% female in CS](https://cacm.acm.org/blogs/blog-cacm/26342-only-the-developed-world-lacks-women-in-computing/fulltext). Perhaps I should have said the Muslim world rather than the Middle East. My Iranian friends maintain that women are naturally predisposed to Computer Science. But Physics, that's a man's field." CreationDate="2017-07-24T15:56:34.413" UserId="2045" />
  <row Id="5943" PostId="2894" Score="0" Text="@TomCornebize First you have to define white and differences between white and not white in a meaningful way, if you can do that then yes you should start with that assumption, falsify it and only then proceed looking for other more complicated explanations." CreationDate="2017-07-24T16:38:52.890" UserId="2149" />
  <row Id="5951" PostId="2894" Score="4" Text="@nova Thank you, that was very interesting and informative. A couple quotes from the Qatar article: *computer science is considered a lesser degree here*, *part of the attraction of computer science for women is that it can be done from home* and Malaysia: *three primary influences on students going into CS were their personal enthusiasm, parental interests and wishes, and job prospects,* ***the last two were much more important than the first one***. This aligns perfectly with my hypotheses, in those countries personal interests are less important. When women can choose most don't choose CS." CreationDate="2017-07-24T18:11:04.637" UserId="2149" />
  <row Id="5959" PostId="2894" Score="2" Text="Thanks for your reply. My concern about your explanation is that it does not explain why so many women graduated in CS in 1984 and the years preceding but not afterwards. If women are much less likely to enjoy programming (which is a fine hypothesis), why didn't they drop out of the CS major after taking freshman programming classes in 1980?" CreationDate="2017-07-24T18:45:55.163" UserId="283" />
  <row Id="5961" PostId="2894" Score="1" Text="@Oleg Parental pressure and job prospects are issues in the US, Europe, and Israel as well. It could be that they just point the other way. My parents didn't want me to pursue CS because they felt I'd be around a lot of guys who didn't respect women. Also consider India (~30% female) as [a case study](https://cacm.acm.org/magazines/2015/5/186026-decoding-femininity-in-computer-science-in-india/abstract)." CreationDate="2017-07-24T18:56:23.010" UserId="2045" />
  <row Id="5977" PostId="2894" Score="0" Text="@axsvl77 It's worth noting that in China maths is considered to be much more important than in the west and children are pressured into learning it. I suspect there may be some pressure into learning CS stemming from the same pattern of thought given how much overlap there is between the two subjects." CreationDate="2017-07-24T20:55:27.653" UserId="1538" />
  <row Id="5978" PostId="2894" Score="4" Text="@Oleg Please support your claims with data from reality. Please explain why &quot;girls simply don't like CS&quot; is a valid statement." CreationDate="2017-07-24T21:05:23.457" UserId="2068" />
  <row Id="6008" PostId="2894" Score="0" Text="@EllenSpertus The question was more general before your clarification, I have no idea what happened in the early 80's that caused this phenomena and I don't find any of the other answers convincing. Thank you for acknowledging the possibility of a biological explanation this is really all I wanted." CreationDate="2017-07-24T23:36:25.450" UserId="2149" />
  <row Id="6010" PostId="2894" Score="0" Text="@nova Not in the same way that they are in the west, western culture is much more about individualism. And 30% in India is still quite low." CreationDate="2017-07-24T23:46:23.010" UserId="2149" />
  <row Id="6011" PostId="2894" Score="0" Text="@KevinWorkman LOL, nice try but that wasn't a factual claim, it was a proposition based on the **fact** that there are differences between men and women. Now this is something I can provide data for but if you believe otherwise you won't find it convincing so I'm not going to bother." CreationDate="2017-07-25T00:00:47.173" UserId="2149" />
  <row Id="6046" PostId="2894" Score="2" Text="@KevinWorkman to rephrase Oleg's response to your comment, he seems to be working from a falsificationist perspective where one formulates a bold conjecture and looks for disconfirmation. So there is no need to &quot;support (the conjecture) with data from reality&quot; the way one would have to support a statement of fact. My only beef with this conjecture is that, as Ellen Spertus points out, it doesn't answer the question." CreationDate="2017-07-25T13:04:51.460" UserId="1790" />
  <row Id="6145" PostId="2894" Score="2" Text="This answer even if (trivially) correct, is useless. The poster wanted to know why things got this way. This &quot;answer&quot; merely takes one obvious baby step down the road without fundamentally answering the &quot;why&quot; question. This is like answering &quot;Why are there more home runs this year?&quot; with &quot;Because batters are hitting the ball better.&quot;" CreationDate="2017-07-26T21:39:35.497" UserId="1139" />
  <row Id="6252" PostId="2894" Score="1" Text="Would down-vote if I could. This is a non-answer, mere speculation with little to back it up and is contradicted by evidence posted in the comments." CreationDate="2017-07-28T07:52:46.023" UserDisplayName="user2310" />
  <row Id="5869" PostId="2895" Score="0" Text="I think the theory here is that the early part of the graph shows an accelerated take-up 1970-1980, encouraged by the prevailing gender assumptions (these were the pre mini-computer children), and after that the boys started to realise they could do this. Would need to compare male and female degree counts to investigate further." CreationDate="2017-07-24T09:12:02.683" UserId="41" />
  <row Id="5871" PostId="2895" Score="2" Text="Well, I don't have exact survey numbers on what people thought about computers and gender in the 70s and 80s, so I can't tie specific data points together. But the shift in people thinking of work with computers as a &quot;job for women&quot; to a &quot;career for men&quot; happened, and the timeframe looks like it would match up, so I think it bears considering as an explanation for the direction reversal in proportions of women that didn't seem to happen in other fields." CreationDate="2017-07-24T09:19:17.637" UserId="2157" />
  <row Id="5944" PostId="2895" Score="0" Text="@ItamarG3 - I might be able to partially answer that: When I graduated with a CS degree in 1989, I discovered most of my new co-workers did not actually have a CS degree. CS degrees were still a pretty new thing, and I think there just weren't that many of us around until recently. Reference the blue bar-graphs in Nat's answer." CreationDate="2017-07-24T16:43:39.853" UserId="1139" />
  <row Id="6124" PostId="2895" Score="0" Text="I think you do an important job of setting up the context of how computer science was viewed in the 80s. I would not even be surprised if at that time people wanting to do what we now consider to be &quot;computer science&quot; would rather choose to start a degree in electronics." CreationDate="2017-07-26T14:00:59.743" UserId="2279" />
  <row Id="6253" PostId="2895" Score="0" Text="This does not actually answer the question, and the closest it comes is just speculation." CreationDate="2017-07-28T07:57:06.390" UserDisplayName="user2310" />
  <row Id="5898" PostId="2896" Score="0" Text="@nocomprende Biology?" CreationDate="2017-07-24T12:49:38.130" UserId="2170" />
  <row Id="5983" PostId="2896" Score="0" Text="The original 'computers' were humans who were paid to 'compute' things with mental arithmetic. The most abstract description of a computer is &quot;something with inputs, processing, and outputs&quot;, which arguably classifies a logic gate as a computer." CreationDate="2017-07-24T21:15:53.570" UserId="1538" />
  <row Id="5986" PostId="2896" Score="0" Text="@Oleg Personally I wouldn't conflate phones (e.g. Android) with 'computers' (e.g. Ubuntu). One is intended for texting, social media and being tracked by Google, the other is intended for `sudo apt-get install emacs24 emacs24-el emacs24-common-non-dfsg`. Granted Linux is at the core of Android, but we all know that a good 90% of the people who own an Android phone don't even know how to access the terminal, let alone what `sudo` is." CreationDate="2017-07-24T21:19:40.383" UserId="1538" />
  <row Id="5995" PostId="2896" Score="0" Text="@Pharap I was thinking of voip. But yes mobile phones are computer as well, and your point is exactly right. A mobile phone is not thought of as a computer. Our point of view of a computer changes, sometimes we don't even call it a computer. Sometimes we call the typewritter++ a computer." CreationDate="2017-07-24T21:40:33.200" UserId="204" />
  <row Id="6059" PostId="2896" Score="0" Text="This is interesting but does not answering the question I asked." CreationDate="2017-07-25T15:35:43.220" UserId="283" />
  <row Id="5921" PostId="2897" Score="23" Text="What specifically do you want to do with Git? A large majority of users probably just [know the basics and reset their repo if things go wrong](https://imgs.xkcd.com/comics/git.png), unless you specifically need some of the advanced features (e.g. `git bisect`), so having a specific goal might be helpful here for others to guide you more accurately." CreationDate="2017-07-24T14:44:09.887" UserId="2" />
  <row Id="5947" PostId="2897" Score="0" Text="I'm not sure this is a question about CS. Probably should be moved to SuperUser?" CreationDate="2017-07-24T16:50:08.180" UserId="757" />
  <row Id="5949" PostId="2897" Score="3" Text="@TobiaTesan Learning material recommendations are [not on-topic for Super User](https://superuser.com/help/on-topic), unfortunately, so migration would not be appropriate here." CreationDate="2017-07-24T17:29:00.767" UserId="2" />
  <row Id="5950" PostId="2897" Score="3" Text="@TobiaTesan I want my CS students and I to use git for their CS programming project." CreationDate="2017-07-24T17:54:13.257" UserId="204" />
  <row Id="6168" PostId="2897" Score="2" Text="@gbr You could've said that a little more nicely, I have feelings too :) But, if you wanted to reach me it would have been much easier to simply raise a mod atten flag. Keep in mind, that [&quot;Comments are temporary &quot;Post-It&quot; notes left on a question or answer. You should not expect them to be around forever&quot;](https://meta.stackexchange.com/a/19757/303538) (from the faq). I've [moved the conversation to chat, if you'd like to continue it](http://chat.stackexchange.com/rooms/62918/discussion-on-question-by-richard-how-to-make-git-easy-to-learn)." CreationDate="2017-07-27T12:24:26.350" UserId="58" />
  <row Id="8142" PostId="2897" Score="0" Text="see video [Git For Ages 4 And Up](https://www.youtube.com/watch?v=1ffBJ4sVUb4) for a good explanation of how git works (the model). [extracted from a deleted answer: answer to short.] It does not explain how to use git. But knowing the internal model may be a prerequisite." CreationDate="2017-09-14T07:49:03.080" UserId="204" />
  <row Id="9078" PostId="2897" Score="0" Text="My opinion plus 50 cents will get you a bad cup of coffee. The best way to use git, IMHO,  is to not use it (polite version). I have only twice executed a successful pull from git, and can't figure out for the life of me how I did it.  I'll take obfuscated C over git any day." CreationDate="2017-11-21T01:44:56.960" UserId="1537" />
  <row Id="9717" PostId="2897" Score="0" Text="The many links to tutorials, have confirmed my belief that `git` is the assembler-language of revision control: A thin layer over the machine-code, that is explained in the tutorials. One day a spiritual descendent of Grace Hopper (and also has some time) will come along and write a decent interface for it. In the meantime there is mercurial (`hg`)." CreationDate="2018-01-20T10:40:15.827" UserId="204" />
  <row Id="9999" PostId="2897" Score="0" Text="`To never think, that live would be easier without it` Historically, people have had the same idea about having a HDD, or having a network share, or having a _backupped_ network share. Expectations change as the technology evolves. It's possible that in the near future, Git will become the outdated approach compared to the newly developed tool which makes life so much easier, and you'll be saying `To never think, that live would be easier without [new tool]`. _This, too, will pass._" CreationDate="2018-02-02T14:53:50.057" UserId="2164" />
  <row Id="10002" PostId="2897" Score="0" Text="@Flater that is normal. If you have only used one revision-control-system/operating-system. You can not imagine using anything else or not using it. Even if it is the hardest of its type to use." CreationDate="2018-02-02T15:36:18.827" UserId="204" />
  <row Id="10274" PostId="2897" Score="1" Text="Good luck my friend. I personally would not attempt to teach Git at that level. It's more of a &quot;workplace training&quot; type of thing. Of all the people I've introduced to Git, I don't think any of them &quot;git&quot; it, (pun hahahaha). Even myself, I'd rather just kill a repo when it goes sideways than fix it as intended. I mostly use Git as a punchcard..." CreationDate="2018-03-08T12:41:43.967" UserId="4082" />
  <row Id="10366" PostId="2897" Score="0" Text="[My own presentation on Git](https://youtu.be/j6Se3jH60dA) has gotten rave reviews from beginners and veteran users alike." CreationDate="2018-03-10T17:43:11.863" UserId="1103" />
  <row Id="10369" PostId="2897" Score="0" Text="@wildcard nice presentation. I am still looking for how to learn HOW. However I learnt some new stuff about the internals, my view of it is now simpler/cleaner. If people are needing 5 days training, then it must be too complex. I will stick with mercurial." CreationDate="2018-03-10T20:44:26.760" UserId="204" />
  <row Id="10374" PostId="2897" Score="0" Text="@ctrl-alt-delor, actually, no one has needed 5 day training so far.  I think you would do your students a great service to get them a clean insight into its structure—they'll find it very handy for their future careers." CreationDate="2018-03-10T22:02:06.620" UserId="1103" />
  <row Id="10405" PostId="2897" Score="0" Text="@Wildcard I am currently using Mercurial (very similar to git, but easy to use), as it is easier to use and teach. When I teach theory, such as directed graphs, I use git as a case study. Your video helped me to better understand then internals. The problem I am having is not on understanding the internals, but on the UI. Both graphical and command line seem unintuitive. However both the command line and tortoise are very intuitive for both mercurial and subversion. Do you have any tips on getting my head around the UI?" CreationDate="2018-03-11T19:16:39.740" UserId="204" />
  <row Id="10406" PostId="2897" Score="0" Text="@ctrl-alt-delor I never use the UI locally.  But you might try GitLab—unlike GitHub, you can install it on your own server for free.  It has a very clean UI, very conductive to collaboration.  I use Git (a) via command line and (b) via GitLab." CreationDate="2018-03-11T19:20:15.233" UserId="1103" />
  <row Id="10410" PostId="2897" Score="0" Text="@Wildcard How do I checking a working copy directory, if I only use the UI on the server? Is this possible. I am struggling to see what the work flow would be." CreationDate="2018-03-11T19:39:17.313" UserId="204" />
  <row Id="10411" PostId="2897" Score="0" Text="@ctrl-alt-delor you can make edits and commit them directly through the UI—but I prefer using the command line, and my editor of choice, for all but the most trivial changes." CreationDate="2018-03-11T19:41:13.870" UserId="1103" />
  <row Id="10412" PostId="2897" Score="0" Text="@Wildcard Sorry my confusion, I was using UI to mean User Interface, including Graphical User Interface, command line, and what ever else you may think of. I prefer the command line for most tasks, but I don't get git. It always seems to surprise me." CreationDate="2018-03-11T19:44:35.420" UserId="204" />
  <row Id="10416" PostId="2897" Score="0" Text="@ctrl-alt-delor, tell you what, this is growing far beyond comments on this question.  Can you shoot me an email?  (Address is in the presentation you watched, right near the end.)" CreationDate="2018-03-11T22:15:01.470" UserId="1103" />
  <row Id="10577" PostId="2897" Score="1" Text="Beginners can use it mostly like svn. ``git commit -a``, ``git push``, ``git pull``, ``git merge``. And the complicated (and powerful) features are not even used by most professionals." CreationDate="2018-03-15T10:06:09.123" UserId="4631" />
  <row Id="10579" PostId="2897" Score="0" Text="@allo, but I like `push` and `pull`. And I think that is my point “the powerful features are not even used by most professionals,” [because they are so complicated]." CreationDate="2018-03-15T10:50:05.387" UserId="204" />
  <row Id="5899" PostId="2899" Score="0" Text="&quot;The first peak, around 1985&quot;  that looks like people who got access to home computers (ZX81, Apple II, BBC B etc) while &quot;normal children&quot; where out playing with their friends.   The only fun thing you could do on most computers at that time was learn how to program them." CreationDate="2017-07-24T13:02:53.497" UserId="2171" />
  <row Id="5960" PostId="2899" Score="1" Text="I agree that people should be free to choose their own majors. My question was not meant to imply that any number was ideal, just that the delta seems mysterious." CreationDate="2017-07-24T18:46:58.793" UserId="283" />
  <row Id="5982" PostId="2899" Score="7" Text="At the risk of sounding cliché, &quot;Health Professions; Social Work; Education; Psychology;&quot; all have one element in common: the desire to help/nurture people. I admit I (a male) choose to do psychology at AS level (alongside a BTEC in video game design) but I chose to do it because I wanted to understand people's psychology/behaviour, not because I wanted to help people. Ultimately that &quot;wanting to solve mysteries&quot; is what attracted me to programming instead (and it was a darn sight easier than understanding people). (Plus I kept disagreeing with the established theories of psychology.)" CreationDate="2017-07-24T21:12:07.957" UserId="1538" />
  <row Id="5997" PostId="2899" Score="7" Text="**&quot; For whatever reason...&quot;** This question is asking what that reason is. I think at best it's incomplete to say &quot;women just prefer certain fields.&quot; That's already a pretty dubious statement, but in this context it's missing the entire point of the question." CreationDate="2017-07-24T21:44:03.240" UserId="2068" />
  <row Id="6014" PostId="2899" Score="1" Text="@KevinWorkman The point of &quot;_For whatever reason_&quot; in that line was to separate referenced numbers from my own answer.  This answer does discuss multiple factors; they just weren't provided in that line." CreationDate="2017-07-25T01:21:24.640" UserId="39" />
  <row Id="6015" PostId="2899" Score="6" Text="@Pharap That also align with how even [juvenile monkeys have gender-separated interest on toys](https://www.newscientist.com/article/dn13596-male-monkeys-prefer-boys-toys/). The males prefer toys with wheels from dolls, while females have no strong preference. So even without advertising or peer pressure, there's a measurable difference." CreationDate="2017-07-25T02:25:28.553" UserId="1649" />
  <row Id="6251" PostId="2899" Score="0" Text="Would down-vote if I could. It's just a nonsense, non-answer to say that &quot;women just don't like CS as much as men&quot;." CreationDate="2017-07-28T07:51:29.127" UserDisplayName="user2310" />
  <row Id="5948" PostId="2901" Score="0" Text="gitkraken is a great cross platform graphical git GUI which I can recommend." CreationDate="2017-07-24T17:23:56.170" UserId="2189" />
  <row Id="5953" PostId="2901" Score="0" Text="@DanielVestøl Nice idea! Why don't you write an answer suggesting GitKraken as client? It's not Open Source, so it doesn't fullfill OP's requirements in this point but neither does mine here - I'd love to hear from you ;)" CreationDate="2017-07-24T18:22:30.877" UserId="793" />
  <row Id="5962" PostId="2901" Score="4" Text="Does a GUI make git easy to learn, or just easier to use?  Most of the developers I've worked with who used a GUI for git still didn't really understand git.  They just knew where to click to make something happen, and if anything went wrong, they were lost." CreationDate="2017-07-24T19:06:32.247" UserId="224" />
  <row Id="5963" PostId="2901" Score="1" Text="@WayneConrad Depends on the GUI, I think. For GitHub Desktop, I'd say it probably just makes it easier to use, however, it at least helps against forgetting commands. Other answers here provide GUIs that are better for learning, I think." CreationDate="2017-07-24T19:08:57.930" UserId="793" />
  <row Id="5973" PostId="2901" Score="4" Text="I'm hesitant to recommend GitHub Desktop to a new user trying to learn Git. Similar to using BlueJ for Java, it can be very difficult to transition to a different client after getting used to GitHub Desktop. It obfuscates many important parts of the traditional Git workflow." CreationDate="2017-07-24T20:31:02.110" UserId="1091" />
  <row Id="6018" PostId="2901" Score="1" Text="@StevenVascellaro Good point - you pointed out something I'd had partially in mind when writing the answer but couldn't really express well. If you want to, you could edit in a paragraph with the contents of your comment." CreationDate="2017-07-25T05:51:46.813" UserId="793" />
  <row Id="6029" PostId="2901" Score="0" Text="@TuringTux I'm not entirely sure where I'd fit it in." CreationDate="2017-07-25T10:21:03.203" UserId="1091" />
  <row Id="6030" PostId="2901" Score="0" Text="@StevenVascellaro Probably below &quot;[...] but appear strange to Git users who know e.g. the command line interface.&quot;. I think it would fit there nicely." CreationDate="2017-07-25T10:41:32.010" UserId="793" />
  <row Id="6032" PostId="2901" Score="0" Text="@TuringTux Feel free to add it in how you see fit. If you want to, just hyperlink back to the comment" CreationDate="2017-07-25T10:56:18.397" UserId="1091" />
  <row Id="20680" PostId="2901" Score="0" Text="If the goal is to be able to use most basic features of Git e.g. branches, commits, etc., then using a GUI is great precisely because you don't have to learn git and it's intuitive. As many points out, although the question asks about *learning Git*, we all know that at the end of the day, most of us just mindlessly copy-paste the commands, often without knowing the deeper details. In such cases, it doesn't make sense to avoid using a GUI like GitHub Desktop. Personally, I would suggest teaching basic Git and then showing how to do the same with GitHub Desktop or another GUI for comparison." CreationDate="2022-08-09T07:44:04.293" UserId="12023" />
  <row Id="5940" PostId="2902" Score="2" Text="The only thing I'd add to this is would be that command line is almost imperative for most things above basic usage. For example, `git stash [pop]` and `git reset HEAD~[n]` (*Note: these can be very dangerous if not used properly. Beware*) are things that I've found extremely useful, but have yet to find in any plugin/IDE. Whether that's my inability to find the functionality, or the plugin not having it, I don't know, but the OP seemed to express interest in more comprehensive functionality." CreationDate="2017-07-24T16:17:27.253" UserId="2186" />
  <row Id="5945" PostId="2902" Score="1" Text="@Daevin This is a good point. I know that at least the JetBrains IDEs usually provide access to a terminal, so you could type those commands there. -- As a sidenote: I think EGit even has the commands you're talking about as a built-in: Stashing should be possible with &quot;Team &gt; Stashes &gt; ...&quot;, resetting using &quot;Replace with &gt; ...&quot;. But I nevertheless get your point ;)" CreationDate="2017-07-24T16:47:56.410" UserId="793" />
  <row Id="5957" PostId="2902" Score="1" Text="ah, gotcha. Most of my experience comes from the Visual Studio plugin for Git, Visual Studio's Team Explorer, and the GitHub desktop client, which are quite limited in their implementation of commands.  I've used JetBrains' and Android Studio's git integration, though it was a couple years ago, and I found it to be lacking as well. But, as you said, most of these have the ability to open the command line to your local repo, so I guess the point is moot, as long as you know the commands :P" CreationDate="2017-07-24T18:41:14.547" UserId="2186" />
  <row Id="6005" PostId="2902" Score="1" Text="Visual Studio 2017 also has Git integration called the &quot;Team Explorer&quot; and is very easy to use, particularly with hard resets (which I have used incorrectly far too many times x_x)." CreationDate="2017-07-24T22:28:38.067" UserId="1512" />
  <row Id="6019" PostId="2902" Score="0" Text="I don't like the Visual Studio plugin. Things like &quot;sync&quot; give me the impression they're trying to make git fit the old tfs-sc model. I write C# for a living, but I use git extensions. Their &quot;it's okay, you can act like it's still tfs&quot; model is not good for anyone imho, but especially for someone trying to learn git." CreationDate="2017-07-25T07:17:10.887" UserId="1438" />
  <row Id="6022" PostId="2902" Score="1" Text="@Daevin Just so you know, IntelliJ IDEs support `stash [pop]`, `reset HEAD~[n]` (via selecting it in the log), and even interactive rebase as part of their in-IDE Git integration. The only time I go to the command line anymore is for less-well-written build tools that need to be run in a subdirectory of my project." CreationDate="2017-07-25T08:19:43.517" UserId="2025" />
  <row Id="6033" PostId="2902" Score="0" Text="@NathanCooper It's a matter of taste. I find it quite clean, simple and easy to use, while keeping the CLI and GitExtensions for the things you really shouldn't be doing as part of normal work. I certainly prefer right clicking a commit in history to do my hard resets, rather than blindly deleting the last ten commits (or was it nine? Dammit...). The only thing that is a strong part of the &quot;TFS-but-on-Git&quot; IMO is that it's optimised for a single central Git repository - which scarcely seems like a bad choice for a typical corporate customer. Not every software project is a Linux kernel :P" CreationDate="2017-07-25T10:58:06.393" UserId="1816" />
  <row Id="6050" PostId="2902" Score="0" Text="@CAD97 good to know! I haven't used IntelliJ IDEs too much lately, just in my free time playing around, since I work at a Microsoft-shop. So I haven't needed to delve into the IDE's git capabilities too much. I'll keep that in mind, though. Cheers!" CreationDate="2017-07-25T13:43:10.070" UserId="2186" />
  <row Id="6051" PostId="2902" Score="0" Text="@NathanCooper I actually do like the &quot;sync&quot; capability, it's just a single command for fetch-pull-push. Especially since I've had to 'teach' git to some coworkers and so many can't be bothered to to multiple commands, the &quot;Commit and Sync&quot; button is a life(repo)-saver lol." CreationDate="2017-07-25T13:49:43.667" UserId="2186" />
  <row Id="5885" PostId="2903" Score="3" Text="A good start for a course in C. Java, not so much." CreationDate="2017-07-24T11:32:17.063" UserId="1293" />
  <row Id="5886" PostId="2903" Score="0" Text="@Buffy that, I can't change. But I also don't quite agree with you. I think both are quite ok for introductory classes." CreationDate="2017-07-24T11:36:22.510" UserId="150" />
  <row Id="5908" PostId="2903" Score="0" Text="First language I learned was Visual Basic, and we learned it by dragging stuff onto a form, then changing their properties in the IDE, then double clicking them (to auto-generate their event handlers), and changing the properties in code. After that we learned variables. It really helped when it came time to learn OOP, because we had already worked with the visual classes." CreationDate="2017-07-24T13:44:36.813" UserId="1595" />
  <row Id="5910" PostId="2903" Score="0" Text="@StephenS So what do you suggest I do with the curriculum? How should I reorder the subjects (or add\remove subjects)?" CreationDate="2017-07-24T13:46:03.233" UserId="150" />
  <row Id="5966" PostId="2903" Score="5" Text="Possible duplicate of [Order to Teach Topics in an Intro Programming Class](https://cseducators.stackexchange.com/questions/2793/order-to-teach-topics-in-an-intro-programming-class)" CreationDate="2017-07-24T20:03:46.570" UserId="2068" />
  <row Id="6000" PostId="2903" Score="1" Text="We teach a camp for iOS development in the summers, which is thankfully more graphical but my suggestions would be:&#xA;- keep it visual is possible, interactivity builds interest&#xA;- dispel the programming magic as much as possible, if you have a debugger show them how to step through line by line and watch variables&#xA;- avoid duplication of concepts where possible (unless it is a real programming class). You have if/else, you don't need switches. Take a second day on if/else, it will pay off more.&#xA;- nested loops are trivial, unless you are also covering variable scope" CreationDate="2017-07-24T22:04:14.423" UserId="2205" />
  <row Id="6020" PostId="2903" Score="3" Text="I'm voting to keep this open. The suggested duplicate is asking for curriculum design, this one is asking for curriculum review, a natural next step _after_ design, and therefore not the same thing. The coincidence of title does not make it a duplicate." CreationDate="2017-07-25T07:37:32.247" UserId="104" />
  <row Id="6021" PostId="2903" Score="0" Text="@GypsySpellweaver Thank you Gypsy. I think I said that in my edit, but you put it more nicely..." CreationDate="2017-07-25T07:38:26.983" UserId="150" />
  <row Id="6026" PostId="2903" Score="0" Text="@Christophe You should post your answer below, rather than in a comment; you'll be able to expand further on your viewpoint and others can then vote on your post, too. Comments aren't really suited to posting answers (they're for asking clarification/giving critique, etc)" CreationDate="2017-07-25T09:27:14.257" UserId="2" />
  <row Id="6003" PostId="2904" Score="3" Text="+1 for getting comments in there early. People need to know that code is not just for the compiler/interpreter; it's also for all of the other programmers who will need to maintain the code.&#xA;&#xA;This includes future-you, who will wonder what idiot wrote this crap before seeing your own initials in the comments, and realizing that now-you was in fact an idiot by future-you's standards. (If future-you doesn't think now-you was an idiot, it's because you didn't learn enough between when you wrote and re-wrote the code.)" CreationDate="2017-07-24T22:16:46.127" UserId="2208" />
  <row Id="5891" PostId="2905" Score="0" Text="with 9th graders? They don't even know mathematical power rules (useful for binary). They don't have algorithmic thinking and the regular curriculum isn't the place to fix that. Maybe a summer workshop..." CreationDate="2017-07-24T12:02:42.907" UserId="150" />
  <row Id="5893" PostId="2905" Score="0" Text="Fine if one of the goals is to extend their math knowledge, but early problems don't need to be math-y. They would rather be creating games anyway, I'd guess. Tradition dies hard, though." CreationDate="2017-07-24T12:13:43.127" UserId="1293" />
  <row Id="5894" PostId="2905" Score="0" Text="That's one of the reasons I have doubts about that curriculum, which is why I asked for a review. I am simply unsure if the order seems good, and whether arrays should be included. I'm also asking about the functions part. It's overall about the curriculum, but also specific parts in it..." CreationDate="2017-07-24T12:17:56.760" UserId="150" />
  <row Id="5896" PostId="2905" Score="0" Text="By functions, I assume you mean static methods. I'd (much) prefer non-static methods and polymorphism, of course, but without at least functions students can only write monolithic code. Not even C-like. A disaster for them in my view. FORTRAN. COBOL. ;-)" CreationDate="2017-07-24T12:23:50.923" UserId="1293" />
  <row Id="5895" PostId="2906" Score="0" Text="and that fits into 1 year? Wow..." CreationDate="2017-07-24T12:19:46.077" UserId="150" />
  <row Id="5900" PostId="2906" Score="1" Text="it is a lot, but that's the dictated AP curriculum. IMO, I would ditch the higher-level OOP of inheritance and dive deeper into the collections and algorithms or work with GUIs in an intro course, but our hands are tied." CreationDate="2017-07-24T13:09:05.413" UserId="1743" />
  <row Id="5902" PostId="2906" Score="0" Text="but is that for 1 year?" CreationDate="2017-07-24T13:11:47.513" UserId="150" />
  <row Id="5903" PostId="2906" Score="0" Text="Yes. Here I am saying that one year is composed of a fall and spring semester." CreationDate="2017-07-24T13:24:16.643" UserId="1743" />
  <row Id="5905" PostId="2906" Score="3" Text="+1 You must absolutely teach data structures. By all means ditch inheritance, but keep interfaces. Generics should probably be in there somewhere, but in Java/C# they are so intuitive that they just slide in naturally when teaching lists (no need to teach co/contravariance just yet, though explicit type constraints are straightforward enough)." CreationDate="2017-07-24T13:32:12.720" UserId="1333" />
  <row Id="6016" PostId="2906" Score="0" Text="iFrame, you're answer is great, but what TuringTux wrote fits what options i have in a better way. (Partly because you address things which I can't change). On the bright side, you can get the populist badge, because you might get a score 2x more than the accepted. ok?" CreationDate="2017-07-25T05:11:35.337" UserId="150" />
  <row Id="5920" PostId="2907" Score="1" Text="Welcome to [cseducators.se]! I hope we hear more from you :)" CreationDate="2017-07-24T14:28:52.353" UserId="27" />
  <row Id="5916" PostId="2909" Score="1" Text="Awesome :) In my experience, using this approach (especially the Analysis step) has helped students start tackling problems that they were initially overwhelmed by." CreationDate="2017-07-24T14:12:59.067" UserId="2045" />
  <row Id="7128" PostId="2910" Score="0" Text="Can you expand on _why_ this tutorial is better than any other? Without any explanation, this is a link only answer, which would be useless if the link dies." CreationDate="2017-08-20T20:09:59.123" UserId="58" />
  <row Id="5932" PostId="2911" Score="0" Text="As a related concept, [Mothers working as computers](https://cseducators.stackexchange.com/questions/2547/advances-in-cs-appropriate-for-cs1-and-cs2-made-by-female-computer-scientists/2721#2721) would be inclined to encourage their daughters to enter the same field." CreationDate="2017-07-24T15:32:02.703" UserId="2173" />
  <row Id="6060" PostId="2911" Score="0" Text="I wouldn't expect a generational difference to be sharp but gradual." CreationDate="2017-07-25T15:36:17.547" UserId="283" />
  <row Id="5946" PostId="2912" Score="3" Text="Nice answer. OP, notice that a &quot;git server&quot; is just another remote to `git`. This means, for example, that you can use remotes also for local backups, et cetera." CreationDate="2017-07-24T16:49:18.977" UserId="757" />
  <row Id="6002" PostId="2912" Score="2" Text="I like this answer a lot too. I spent a -long- time just doing git commit/push on my own private repositories. It was just nice to have backup files. Eventually you say &quot;oh, wouldn't it be nice if Git did that&quot; and you will probably 1) find how on stackoverflow and 2) see how many others viewed or upvoted canonical questions." CreationDate="2017-07-24T22:11:01.880" UserDisplayName="user2206" />
  <row Id="6289" PostId="2915" Score="0" Text="Thanks for joining CS Educators. It's good to see you here." CreationDate="2017-07-29T19:11:04.380" UserId="283" />
  <row Id="6068" PostId="2916" Score="0" Text="I think I literally learned x=x+1 in programming before I had Algebra, or at least around the same time. I had no interest in math either, so for whatever reason, this problem never hit me, until a kid said that x can't be equal to x + 1. Huh? What? Oh... So, there is a trap there, and some miss it for various reasons and others fall in. Yes, spread the word to beware!" CreationDate="2017-07-25T17:47:59.117" UserDisplayName="user737" />
  <row Id="6069" PostId="2916" Score="0" Text="It caught me unawares as well. It took me well into my 3rd year of teaching CS and scratching my head at the code students submitted on written exams before a conversation with a kid finally made the lightbulb go on for me." CreationDate="2017-07-25T17:50:10.183" UserId="27" />
  <row Id="5989" PostId="2918" Score="0" Text="While I won't argue that git isn't unintuitive at times, `cherry-pick branchname` isn't really one of them IMO. This is actually something I discovered neither by accident nor search, but by reasoning: “so I want to CP the last commit from branch `B`. Hm, I could parse out the commit ID, wait, how do you do that again? Oh never mind, I'll just `git log B` and copy&amp;paste that commit ID... but wait, what if I simply write `git cherry-pick B` in one command?”" CreationDate="2017-07-24T21:24:23.783" UserId="1157" />
  <row Id="5991" PostId="2918" Score="0" Text="I would say that the interface to git isn't unintuitive sometimes, but I want it to not be unintuitive all of the time." CreationDate="2017-07-24T21:29:19.537" UserId="204" />
  <row Id="6053" PostId="2918" Score="3" Text="When I was first learning it seemed like everything was DAG-this and DAG-that and I thought &quot;Yes, I get it it's using a directed acyclic graph for storage; now TELL ME HOW TO USE GIT.&quot;. The some day it clicked and I thought: &quot;Oh, it's a directed acyclic graph! Everything is so simple now.&quot;" CreationDate="2017-07-25T14:17:47.207" UserId="2245" />
  <row Id="6055" PostId="2918" Score="0" Text="...which is again why you should start with Git GUI, which gives you a nice graphical picture of the DAG." CreationDate="2017-07-25T14:38:14.803" UserId="1139" />
  <row Id="6049" PostId="2919" Score="2" Text="Seconding Git GUI and in particular gitk (under repository-&gt;visualize all branch history) for visualizing the current state of affairs." CreationDate="2017-07-25T13:30:57.930" UserId="1623" />
  <row Id="6054" PostId="2919" Score="0" Text="Upvoted. Even if you generally prefer command-line once you know what you are doing (as all True Developers should), the GUI is great for learning the capabilities and expected workflow of the system. **This is precisely how I learned**, with the exception that instead of #2 I used it on a small project of my own to get my feet under me. That also meant I wasn't screwing up anybody else when I made the first few inevitable noob mistakes. Of course using someone else's IDE (as suggested in another answer) is not as helpful because those weren't designed around Git like Git GUI was." CreationDate="2017-07-25T14:34:37.090" UserId="1139" />
  <row Id="5952" PostId="2921" Score="12" Text="I second this resource. I think it's miles above in quality compared to any other git tutorial. Other tutorials take a cookbook-like approach and teach git commands as a series of things to be memorized, or talk about git model in a fairly abstract and hard-to-grasp way. This tutorial _does_ focus on git's underlying model, and does a great job of helping you see what's inherently possible and not possible with git (even if you might not remember the exact commands to do something)." CreationDate="2017-07-24T18:17:41.647" UserId="732" />
  <row Id="5958" PostId="2921" Score="0" Text="I will check out this tutorial. Thanks! Also, welcome to [cseducators.se]! I hope we hear more from you in the future." CreationDate="2017-07-24T18:45:40.143" UserId="27" />
  <row Id="6031" PostId="2921" Score="0" Text="I fortunately stumpled upon this Q on the hot network questions tab. I was looking for an easy to understand Tutorial the other day, and just clicked trough it. I Went from being hopelessly confused to actually understanding most of the stuff behind the scenes over the course of two hours. And it was even fun! *Absolutely brilliant!*" CreationDate="2017-07-25T10:44:53.687" UserId="2225" />
  <row Id="6043" PostId="2921" Score="2" Text="+1, I found that tutorial to be helpful. But it makes you operate on artificial commits. Ungit[1] displays a similar graph of commits, but is a regular Git frontend. Your students can use it for their assignments. If you insist on teaching them CLI first, they can use Ungit to visualize the results of their CLI commands.&#xA;&#xA;[1] https://github.com/FredrikNoren/ungit" CreationDate="2017-07-25T12:20:46.250" UserId="2235" />
  <row Id="14535" PostId="2921" Score="0" Text="I understand the internal state. It is the UI that I struggle with." CreationDate="2019-03-19T00:20:02.623" UserId="204" />
  <row Id="14536" PostId="2921" Score="0" Text="If you're looking for a git UI there are many to choose from. I recommend [GitKraken](https://www.gitkraken.com/git-client). &#xA;&#xA;A full list can be found at [https://git-scm.com/download/gui/windows](https://git-scm.com/download/gui/windows)." CreationDate="2019-03-20T03:46:23.570" UserId="1485" />
  <row Id="16113" PostId="2921" Score="0" Text="Relatedly, http://git-school.github.io/visualizing-git/ has a great visualizer playground. There are a few pre-set examples too." CreationDate="2020-01-23T14:10:53.623" UserId="5614" />
  <row Id="5964" PostId="2923" Score="0" Text="Welcome to [cseducators.se]! This is a very good answer. I hope we'll be hearing more from you." CreationDate="2017-07-24T19:23:57.270" UserId="150" />
  <row Id="5967" PostId="2923" Score="1" Text="Not only strong math students, but also students who are mechanically oriented (kit building, etc.), or students who like puzzles of various sorts might like to see how a practical-level code solution works (or doesn't) at a lower level." CreationDate="2017-07-24T20:05:37.937" UserId="59" />
  <row Id="5968" PostId="2924" Score="0" Text="Teaching java is something I can't change. Which is why the question is lagged with Java." CreationDate="2017-07-24T20:09:38.203" UserId="150" />
  <row Id="5969" PostId="2924" Score="0" Text="@ItamarG3 Fair enough. I posted this mostly for the order, which wouldn't necessarily be much different for a &quot;pure Java&quot; course. And for what it's worth, Processing is built on top of Java and can be used as a Java library. See also: https://cseducators.stackexchange.com/questions/19/using-processing-as-an-entry-point-in-an-introductory-course" CreationDate="2017-07-24T20:13:21.580" UserId="2068" />
  <row Id="6071" PostId="2925" Score="1" Text="When I saw what was going on with Visual Studio, I was horrified. My students were focusing on the red underline as they typed, thinking it is bad. So they would contort their code in all sorts of bizarre ways because they could not even finish typing a line without VS 'shouting' at them. Until I saw it happen, I did not realize that this is a feature for experts, and we would be better off teaching DOS command line scripts than having this happen. I literally saw students with good code change it beyond all recognition and remove all the points I was making in my lectures because of this." CreationDate="2017-07-25T17:56:15.130" UserDisplayName="user737" />
  <row Id="5972" PostId="2926" Score="6" Text="Hello caitlin, and welcome to Computer Science Educators! Unfortunately, this answer doesn't really address the question - why the percentage of bachelor's degrees specifically peaked in 1984. If you edit to address that, that would be great! I hope to keep seeing you around the site. =)" CreationDate="2017-07-24T20:25:31.460" UserId="919" />
  <row Id="5984" PostId="2926" Score="0" Text="Yay nerds! If you send a mailing address to my email (which is easy to find), I'll send you a genuine MIT Nerd Pride pocket protector. (You might want to use a parent's work address, rather than give your home address to a stranger, even if she is a professor.)" CreationDate="2017-07-24T21:18:32.453" UserId="283" />
  <row Id="5988" PostId="2926" Score="1" Text="@EllenSpertus I think the majority of people here are actually in work and no longer live with their parents." CreationDate="2017-07-24T21:23:12.847" UserId="1538" />
  <row Id="5992" PostId="2926" Score="0" Text="@Pharap Yes, I may have been wrong to assume caitlin lopez lived at home. I'm happy to mail to her workplace if I misguessed. I should know better than to make assumptions." CreationDate="2017-07-24T21:34:27.527" UserId="283" />
  <row Id="6142" PostId="2926" Score="0" Text="Good point. That may be part of the reason, however not very simple to prove and the peak at 1984 is still rather special somehow." CreationDate="2017-07-26T21:09:41.300" UserId="2062" />
  <row Id="6276" PostId="2926" Score="2" Text="I gotta say there were at least 3 other answers in here that barely addressed the question, and then only on the way to completely unsupported anecdotal (and arguably insulting) speculation. Yet this one arguably *does* address the question, provides an answer roughly equivalent to the one in the second-highest rated answer, and attempts to provide a **first hand perspective** to what is going on. Yet **this** is the answer that gets voted down into oblivion. If you want to see where the problem comes from, what happened to this post illustrates it perfectly." CreationDate="2017-07-28T18:42:39.293" UserId="1139" />
  <row Id="6009" PostId="2928" Score="0" Text="Which hypothesis was downvoted?" CreationDate="2017-07-24T23:42:49.150" UserId="59" />
  <row Id="6048" PostId="2928" Score="0" Text="Not a DV but this answer would be greatly improved by sources." CreationDate="2017-07-25T13:12:12.287" UserId="1790" />
  <row Id="5979" PostId="2929" Score="0" Text="Welcome to [cseducators.se]! This is a very nice answer. I hope we'll be getting more answers and questions from you :)" CreationDate="2017-07-24T21:08:46.207" UserId="150" />
  <row Id="6013" PostId="2929" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/62755/discussion-on-answer-by-harrichael-how-to-make-git-easy-to-learn)." CreationDate="2017-07-25T00:47:59.207" UserId="58" />
  <row Id="6056" PostId="2934" Score="0" Text="What kind of feedback do you think would be appropriate to give? I could certainly give feedback on things like the quality of their code, but it's not clear to me how I can effectively give feedback on a mindset or way of thought." CreationDate="2017-07-25T15:30:00.730" UserId="732" />
  <row Id="6057" PostId="2934" Score="0" Text="@Michael0x2a I'll edit my answer, shall I? (:D)" CreationDate="2017-07-25T15:30:56.320" UserId="150" />
  <row Id="6064" PostId="2934" Score="0" Text="@Michael0x2a better?" CreationDate="2017-07-25T16:49:33.837" UserId="150" />
  <row Id="6039" PostId="2935" Score="2" Text="This is a good way of illustrating &quot;Separation of Concerns&quot;, which goes back to Dijkstra, I think. But it is good to at least once take apart and reassemble one of those old in-hub bike gear sets. I did that when I was about 13. Pulling apart old TV sets was good. It is easier to compartmentalize and ignore detail when you know what some of that detail is." CreationDate="2017-07-25T11:41:45.080" UserDisplayName="user737" />
  <row Id="6085" PostId="2935" Score="0" Text="@nocomprende, I agree.  I'd like to see your answer to this.  :)  And in general, I'd like to see more professionals who really *do* try to understand the entire system.  It's not necessary to be paralyzed until you do, but when *no one* even tries the result is [nasty complexity](http://www.codesimplicity.com/post/how-to-handle-code-complexity/)." CreationDate="2017-07-25T22:19:34.790" UserId="1103" />
  <row Id="6089" PostId="2935" Score="0" Text="@nocomprende, yep.  There are many great articles on there; I had a co-worker completely change his mind about a code &quot;fix&quot; he had proposed after he read [&quot;Make It Never Come Back.&quot;](http://www.codesimplicity.com/post/make-it-never-come-back/)" CreationDate="2017-07-25T23:34:04.400" UserId="1103" />
  <row Id="6028" PostId="2936" Score="4" Text="Welcome to Computer Science Educators! Your answer doesn't seem to answer what was specifically asked in the question. Could you edit your answer to address the specific question?" CreationDate="2017-07-25T10:06:54.727" UserId="150" />
  <row Id="6110" PostId="2939" Score="0" Text="I just watched the video. I realised that it is not just me. The internals are easy, the interface is not. I also learnt that git now gives useful help messages (it would be better if it was easier to use, but this is a start). I will probably stick with mercurial for now (though mercurial does not handle renames, efficiently)." CreationDate="2017-07-26T12:21:50.053" UserId="204" />
  <row Id="6125" PostId="2939" Score="0" Text="@richard, yeah the git interface can be difficult from time to time, but it's worth learning. Having used mercurial for the past few years, and having spent the last year or so getting deeply familiar with git, I'm finally beginning to understand all the hubub. Mercurial is a fine tool and I still use it, it gives almost all the benefits of using git while being a simpler model to understand and there's enough plugins I bet it can replicate 98% of the git feature set. But once I got the git model, it started to feel much more natural as a developer, and I've started moving to git exclusively" CreationDate="2017-07-26T14:46:42.567" UserId="2238" />
  <row Id="6052" PostId="2940" Score="0" Text="Welcome to [cseducators.se]! This is a good answer. I hope we'll be seeing more answers and questions from you." CreationDate="2017-07-25T14:06:41.953" UserId="150" />
  <row Id="6091" PostId="2940" Score="0" Text="I worked with much more than 20 women (number of women in this &quot;research&quot;) and never saw them face any kind of discrimination, nobody treated them differently, they had no problems participating in meetings and many were team leads. Nevertheless it is peer reviewed and published in a real journal so it's certainly valid to reference it in an answer. It's not even needed, saying &quot;because it became more like engineering&quot; is enough. This is the first answer that makes sense to me(even the lines converge), if you can also show it actually happened in the 80's it will answer the question." CreationDate="2017-07-26T01:33:39.780" UserId="2149" />
  <row Id="6146" PostId="2940" Score="1" Text="@Oleg - I suspect if we were to ask them, rather than take the word of a guy who was merely &quot;female adjacent&quot; at the time, we might get a different story. (Or not. We don't know. That's why I really am sick of discussions amongst men about this subject. We literally don't know what we are talking about)." CreationDate="2017-07-26T21:43:18.330" UserId="1139" />
  <row Id="6150" PostId="2940" Score="0" Text="@T.E.D. That's a fair point, but I also think we should stop treating some crap based on 40 diaries as science (many people already don't). You also can't base your research only on peoples feelings, imagine a research about sexual harassment based on [Zarna Joshi's](https://www.youtube.com/watch?v=Hml2d6aY5v4) diary. Hugh: *My name is Hugh Mungus* Zarna: *This man just sexually harassed me!!!*" CreationDate="2017-07-26T22:48:58.630" UserId="2149" />
  <row Id="6063" PostId="2941" Score="0" Text="Welcome to [cseducators.se]. This is a very interesting answer!" CreationDate="2017-07-25T16:34:04.923" UserId="150" />
  <row Id="6067" PostId="2941" Score="1" Text="Interesting point, but do you have data that such changes were widespread just after the class of 1984 entered college?" CreationDate="2017-07-25T17:18:42.073" UserId="283" />
  <row Id="6148" PostId="2941" Score="0" Text="I graduated with a CS BE in 1989. At the time pretty much all CS degrees were given out of either the Math department or the Engineering, and that did somewhat stilt what was taught. However if your degree was **accredited**, then there was a base standardized curriculum that had to be taken. If your degree wasn't accredited, of course all bets are off, but that's still true today." CreationDate="2017-07-26T21:50:23.183" UserId="1139" />
  <row Id="6235" PostId="2942" Score="1" Text="Let me first say that we love a great conversation here. However, that's what we have chat for. :) As a result, since comments are not for extended discussion, this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/62945/discussion-on-question-by-ellen-spertus-why-did-interest-in-cs-majors-plummet-in). We encourage you to continue discussing this topic there!" CreationDate="2017-07-27T20:35:49.023" UserId="76" />
  <row Id="15982" PostId="2942" Score="0" Text="It's too bad the chart isn't shifted 4 years to the left (emphasizing the interest of entering freshman), because the logic in all of the answers seems to focus around context and decisions made at that time." CreationDate="2019-12-23T05:14:13.967" UserId="8137" />
  <row Id="6099" PostId="2943" Score="1" Text="No, the question is specifically about women. Adding an answer to pose another question is not the way SE works. You can read the [answer] page to get more tips. Other than that, Welcome to [cseducators.se]!" CreationDate="2017-07-26T08:21:11.493" UserId="150" />
  <row Id="6122" PostId="2943" Score="2" Text="No, this is actually great insight. Just dawned on me, so I went back to this question, just to see the answer already here. The question specifically refers to the **proportion**, so men **are** part of that equation. Example: if CS was unpopular universally, but then men become more interested, but women remained uninterested, then we could see the proportion of women drop dramatically even though the change was caused by men('s changed interest), and not caused by women (or anything different they did). Such a change **would** affect the proportion. +1 for 2nd and 4th paragraphs." CreationDate="2017-07-26T13:39:34.410" UserId="1676" />
  <row Id="6269" PostId="2944" Score="0" Text="I think that is interesting, but it is harder to maintain the levels of abstraction and easier to build the big ball 'o mud. So it takes discipline if is is really the levels of abstraction that you want to teach. However, much real software is built just that way if done entirely within a small team." CreationDate="2017-07-28T13:49:18.223" UserId="1293" />
  <row Id="6092" PostId="2946" Score="1" Text="I love this question, and I am very curious about what others suggest as well." CreationDate="2017-07-26T03:23:14.340" UserId="27" />
  <row Id="6130" PostId="2946" Score="0" Text="The great Josh Bloch teaches serious points about Java in an entertaining way with his Java Puzzlers book and talks.  http://www.javapuzzlers.com/" CreationDate="2017-07-26T17:16:10.713" UserId="283" />
  <row Id="6246" PostId="2946" Score="1" Text="If you haven't seen the [&quot;Wat&quot; lightning talk](https://www.destroyallsoftware.com/talks/wat) (from CodeMash 2012), you'll enjoy it.  Very relevant.  :)" CreationDate="2017-07-28T03:15:33.377" UserId="1103" />
  <row Id="6093" PostId="2947" Score="0" Text="_Lions and Tigers and Bears! Oh my!_ but, please, let's not talk about the elephant! Say, what's that over there? Is that Kelly Pickler? No? Oh, sorry about that. Now where were we. Oh, yea, that ostrich over there. It seems to have a good idea. Now, can any one tell me how a while loop is made?" CreationDate="2017-07-26T04:06:10.007" UserId="104" />
  <row Id="6123" PostId="2951" Score="1" Text="I usually think about those as tradeoffs rather than mistakes.  *This language values ____, and that implies certain tradeoffs, such as this one.*" CreationDate="2017-07-26T13:54:52.937" UserId="27" />
  <row Id="6101" PostId="2953" Score="0" Text="What language is your example in?" CreationDate="2017-07-26T09:17:31.960" UserId="204" />
  <row Id="6102" PostId="2953" Score="0" Text="@richard java... but that's not what the question is about." CreationDate="2017-07-26T09:18:16.427" UserId="150" />
  <row Id="6104" PostId="2953" Score="0" Text="I don't know how to react to this. It seems like obfuscated code to me. There is no indication of the intent of the method, so I can _only_ try to understand it one way - the most detailed possible, non-abstract, way. Is the code given in the test this complex? Give an example from a previous iteration of the test. If you replace the method name with &quot;blah&quot; and it is no harder IMO. Are you trying to teach students to infer intent from code, or trying to teach students to code to implement intent." CreationDate="2017-07-26T11:03:51.880" UserId="1293" />
  <row Id="6105" PostId="2953" Score="0" Text="@Buffy I'm sorry, I don't quite understand the difficulty. The example is just one for them to trace." CreationDate="2017-07-26T11:24:04.230" UserId="150" />
  <row Id="6108" PostId="2953" Score="0" Text="Hmmm. Recursion within a loop with no hint about intent other than the method name. I'd rather go to the dentist. Not even a specific invocation on which to hang my hat." CreationDate="2017-07-26T11:55:44.977" UserId="1293" />
  <row Id="6109" PostId="2953" Score="0" Text="@Buffy that's the point. The students supposedly trace the execution of the function, and from that they understand what it does." CreationDate="2017-07-26T12:07:12.230" UserId="150" />
  <row Id="6111" PostId="2953" Score="0" Text="Hmmm. Why not [ackermann](https://en.wikipedia.org/wiki/Ackermann_function)(3, 2)?" CreationDate="2017-07-26T12:21:57.880" UserId="1293" />
  <row Id="6114" PostId="2953" Score="0" Text="@Buffy better? The question isn't about that specific example, but rather about the effectiveness of testing recursion knowledge like this." CreationDate="2017-07-26T12:27:04.280" UserId="150" />
  <row Id="6127" PostId="2953" Score="0" Text="Why not have them identify the base case(s) and/or explain why a function will (or won't) always reach the base case? Tracing the stack only shows they understand function calls. Understanding recursion requires understanding that every function call always works towards some base case, so test them on that instead." CreationDate="2017-07-26T16:29:55.530" UserId="2285" />
  <row Id="6128" PostId="2953" Score="0" Text="@KyleGullion the question isn't about teaching recursion. It's about whether the described test method (on an exam) would actually be able to test the students' knowledge about recursion." CreationDate="2017-07-26T16:45:30.763" UserId="150" />
  <row Id="20620" PostId="2953" Score="0" Text="That seems like a really strange function to me. You're computing an int, and printing the permutation. Given the name I'd expect it to return a permutation string or set or something. Bad code! Bad code!" CreationDate="2022-07-22T16:52:47.247" UserId="6346" />
  <row Id="6126" PostId="2954" Score="0" Text="Isn't this just deferring the problem though? I'd argue that *all* programming languages have quirks of some kind. You can avoid having to teach as many quirk by starting with a better-designed language, true, but it doesn't seem like you can avoid the problem entirely. (For example, here's one example of an Eiffel quirk: methods are covariant in their argument types, rather then being contravariant)" CreationDate="2017-07-26T16:02:21.103" UserId="732" />
  <row Id="6103" PostId="2955" Score="0" Text="Recursion in OOP languages is a bit harder to recognize for a compiler. What &quot;looks like&quot; recursion may not be since the receiving object may be different from the sending object and so may have a different implementation of the method. Final methods can be recognized, of course. The problem is made harder by the fact that when a class is compiled it doesn't know which subclasses will exist in the future, nor the &quot;precise&quot; class of the invoking object, as it can be from a subclass." CreationDate="2017-07-26T10:58:19.427" UserId="1293" />
  <row Id="6113" PostId="2955" Score="0" Text="@Buffy that is an implementation detail of the language/compiler. C++, Eiffel and some others can do tail-call optimisation." CreationDate="2017-07-26T12:24:11.527" UserId="204" />
  <row Id="6115" PostId="2955" Score="0" Text="I'm pretty sure that it is possible only in certain cases. In the face of polymorphism the compiler doesn't know the code that will be executed and so can't optimize it. Look at what happens in a recursive call from a subclass of the class that defined the method initially. The compiler can't roll the tail recursion into a loop if it the body of the loop doesn't even yet exist. That said, some languages try harder to look for the relevant cases, and some require more of the program to be available at compile time. But dynamic linking makes it a hard problem." CreationDate="2017-07-26T12:27:07.770" UserId="1293" />
  <row Id="6117" PostId="2955" Score="0" Text="`As when we design we need to abstract`. They are not designing. Sure, they might be designing next year, but now they just learnt the subject, and they need to be tested (ministry decision...)" CreationDate="2017-07-26T12:37:03.003" UserId="150" />
  <row Id="6118" PostId="2955" Score="0" Text="@Buffy Eiffel optimises out polymorphic calls, if not need. C++ allows you to choose (but not at the correct part of the design, yuck). However it does not seem as hard as it may seem: If I am called polymorphicly, then call my self, then I am referring to my self, not a different version of my self (the type of `this` can not change. Once I am called the type of this is determined, therefore all calls to ones own methods could be done staticly )." CreationDate="2017-07-26T12:37:45.503" UserId="204" />
  <row Id="6120" PostId="2955" Score="0" Text="@ItamarG3 If we are not setting them up to design, then what are we doing? (If we just test some abstract thing, for no reason, then we have people that know something well, but have no use for it.)" CreationDate="2017-07-26T12:40:20.460" UserId="204" />
  <row Id="6121" PostId="2955" Score="1" Text="Probably better discussed in the classroom. However, if &quot;this&quot; is in a subclass and the (superclass) code containing the &quot;this&quot; ref is compiled before the subclass is written, the effect of the call can't be determined at compile time. That is to say, &quot;this&quot; is not an object whose most specific class is the class being compiled. But, as you say, some languages look harder for the possible cases. That is what I said, I think. I haven't looked at the internals of Eiffel. Does it require enough source to build a linkable image? Java does not." CreationDate="2017-07-26T12:41:23.000" UserId="1293" />
  <row Id="6245" PostId="2956" Score="1" Text="I agree with this answer, but it would be more *useful* if it were expanded beyond a bald statement of opinion.  :)  (I didn't downvote.)" CreationDate="2017-07-28T03:12:53.773" UserId="1103" />
  <row Id="6161" PostId="2958" Score="0" Text="What do you mean by *“in SQL there is not supposed to be an 'order'”* and **“they just yield T/F and so there is no sense of left-to-right or anything”**?" CreationDate="2017-07-27T10:48:42.247" UserId="216" />
  <row Id="6162" PostId="2958" Score="1" Text="And what's the problem with explaining precedence of logical operations in the same way as explaining precedence of arithmetic operations? With `a + b * c` we first calculate `b * c` and only then `a + …` — the same with `a OR b AND c` we first calculate `b AND c` and only then `a OR …`." CreationDate="2017-07-27T10:51:33.867" UserId="216" />
  <row Id="6188" PostId="2958" Score="0" Text="@Sasha I confused myself because SQL is based on the relational model (set theory) which is less like programming (time sequence of commands and operations in order) and more like math (timeless / instantaneous expression of result), so there was no reason to talk about whether AND / OR is applied 'first', only which is more 'important'. Boolean operations do not 'care' if you do the left or right expression first, because, &quot;who's on first?&quot; Nobody! The Query Processor is free to rearrange whatever you type in any old way it wants anyhow. So that is why I visualized a tree and confused myself." CreationDate="2017-07-27T15:16:24.940" UserDisplayName="user737" />
  <row Id="6201" PostId="2958" Score="1" Text="@nocomprende, «boolean operations do not 'care' if you do the left or right expression first» — but other operations (e.g. integer arithmetic) do not 'care' either (why do you differ boolean operations from others?)." CreationDate="2017-07-27T16:26:19.633" UserId="216" />
  <row Id="6248" PostId="2958" Score="0" Text="Incidentally, SQL is **not** relational.  It violates the relational model in non-trivial ways.  There are zero popular databases that *truly* follow the relational model.  Something to remember when you read nonsensical statements about the obsolescence of the relational model in these days of &quot;noSQL&quot; databases.  For more on this I refer you to [SQL and Relational Theory](https://www.safaribooksonline.com/library/view/sql-and-relational/9781491941164/)." CreationDate="2017-07-28T03:35:51.193" UserId="1103" />
  <row Id="6263" PostId="2958" Score="0" Text="@Wildcard yes, but I hope you will understand when I say that I would not care less if SQL used pig Latin or required them to talk backwards underwater: it is what is used, so I teach what they need to know. When it comes to getting hired, we &quot;take the instant way&quot; without many detours into the reasoning behind. They can have debates with *coworkers* later, after they have coworkers." CreationDate="2017-07-28T12:11:10.717" UserDisplayName="user737" />
  <row Id="6134" PostId="2959" Score="0" Text="Actually, put the &quot;.&quot; operator at position 0. y = x + foo.bar()++; for a functional method." CreationDate="2017-07-26T18:41:25.347" UserId="1293" />
  <row Id="6136" PostId="2959" Score="0" Text="@Buffy that list is specifically java. And it's irrelevant to the analogy... Oracle don't consider function and member calls as operators..." CreationDate="2017-07-26T18:55:56.673" UserId="150" />
  <row Id="6137" PostId="2959" Score="0" Text="What they &quot;consider&quot; and how they operate are, then, perhaps different. See my example. The . (method resolution operator) is applied first and binds tightest, but yes, Java. The order of evaluation in y = x + foo.bar()++ is: &quot;.&quot;, &quot;++&quot;, &quot;+&quot; and finally &quot;=&quot;. And &quot;Oracle&quot; isn't. =) (an oracle, that is)" CreationDate="2017-07-26T19:03:04.270" UserId="1293" />
  <row Id="6264" PostId="2959" Score="0" Text="I noticed/remembered that Oracle owns MySQL and I blanched. Ugh" CreationDate="2017-07-28T12:13:15.887" UserDisplayName="user737" />
  <row Id="6265" PostId="2959" Score="0" Text="@nocomprende yep. MySQL belongs to oracle..." CreationDate="2017-07-28T12:14:49.057" UserId="150" />
  <row Id="6194" PostId="2960" Score="0" Text="My mistake was that I visualized a tree, thought of AND as 'higher' and described how it joined the larger parts together (which of course is wrong): expr1 OR expr2  *joined with* expr3... Why we draw 'trees' in CS with the root sticking up is beyond me! The student looked at the two examples and said, &quot;so why are the results different?&quot; and I went, Uh... and corrected myself the next day. They see me make mistakes a lot, and I don't even blush or stammer anymore. Sometimes I try to explain the origin of the mistake, so they avoid doing it also, other times I just &quot;leave bad enough alone&quot;." CreationDate="2017-07-27T15:31:05.903" UserDisplayName="user737" />
  <row Id="6195" PostId="2960" Score="0" Text="I'm guessing &quot;root at top&quot; is an artifact of working on blackboards with chalk in the days before bread came sliced. Easier to work that way and better use of the resource when the tree didn't fill the board. Just a guess, tho. If U R young, Google:blackboard. &amp; maybe chalk too. And I suppose I've told a few whoppers in my time too." CreationDate="2017-07-27T15:34:09.997" UserId="1293" />
  <row Id="6160" PostId="2961" Score="0" Text="@no order of evaluation and precedents are different. Order of evaluation  does not affect precedence. (You still get the expected result). It only changes behaviour if there are side effects; So if you are writing in a functional way, it will make no difference. (Removed from answer as not relevant)" CreationDate="2017-07-27T10:35:25.720" UserId="204" />
  <row Id="6163" PostId="2961" Score="0" Text="@richard, [order of evaluation](//en.cppreference.com/w/cpp/language/eval_order) **is** different from precedence, but [order of operations](//en.wikipedia.org/wiki/Order_of_operations) **isn't**. So the questioner's statement “*a common synonym for ‘precedence’ is ‘order of operations’*” is fully correct. Please, don't confuse “order of evaluation” (purely runtime concept) with “order of operations“ a.k.a. “operation/operator precedence” (mathematical and compile-time programming concept)." CreationDate="2017-07-27T11:03:46.797" UserId="216" />
  <row Id="6164" PostId="2961" Score="0" Text="@sasha, did I not say “order of evaluation and precedents are different”. And remove from answer?" CreationDate="2017-07-27T11:08:04.403" UserId="204" />
  <row Id="6165" PostId="2961" Score="0" Text="@richard, [here](//cseducators.stackexchange.com/q/2958#comment6160_2961) — but I might misunderstand you." CreationDate="2017-07-27T11:11:18.967" UserId="216" />
  <row Id="6166" PostId="2961" Score="0" Text="P.S.: I strongly oppose to teaching boolean algebra with precedence of conjunction higher than of disjunction. This makes students to perceive them as non-symmetric. When I was a student, our teacher was compelled to explicitly state that we should not regard conjunction as multiplication and disjunction as addition (even though we used same precedence and `∧`/`∨` notion) — because otherwise some of students could apply some laws only in half (e.g. “A∧(B∨C)=(A∧B)∨(A∧C)”, but not “A∨(B∧C)=…”). Though idea of replacing `∧`/`∨` signs with something else is great, as they really look too similar." CreationDate="2017-07-27T11:29:47.360" UserId="216" />
  <row Id="6169" PostId="2961" Score="0" Text="@sasha `(a+b)(a+c)` = `a²+ab+ac+bc` apply `1+1=1` we get `a+ab+ac+bc` = `a(1+b+c)+bc` = `a(1)+bc` = `a+bc`. Harder to do backwards, like so many things in maths (multiply vs divide, differentiate vs integrate). It these other areas we remember the solutions, so we can also do that here." CreationDate="2017-07-27T12:55:29.793" UserId="204" />
  <row Id="6171" PostId="2961" Score="0" Text="@Sasha In mathematics, AND / OR are the same precedence, but in most computer languages, they are different. So, if I am teaching SQL, I must tell them that it treats AND as higher precedence than OR. I am teaching programming, not math, and if I say too many things, everyone gets confused, including me. Math is timeless, so to speak, and programming is not. SQL is on the fence, because it deals with set theory." CreationDate="2017-07-27T14:57:48.147" UserDisplayName="user737" />
  <row Id="6202" PostId="2961" Score="0" Text="@richard, it isn't harder to get from `a+bc` to `(a+b)(a+c)` than from `(a+b)(a+c)` to `a+bc`. It is, in fact, **easier**; the only thing that you need for that is not to treat conjunction as multiplication and disjunction as addition, but **as AND and OR** (and to understand that conjunction and disjunction are, in fact, **fully symmetric**). “a OR (b AND c) = (a OR b) AND (a OR c)” is fully intuitive and is, in fact, forward stuff (as “x(y+z) = xy + xz”; while “(a OR b) AND (a OR c) = a OR (b AND c)” is backward)." CreationDate="2017-07-27T16:39:13.433" UserId="216" />
  <row Id="6205" PostId="2961" Score="0" Text="@nocomprende, yes, I understand, if you teach programming, than you shouldn't make too deep dives into the math and should teach with notation traditions and operator precedence used in the target language, not in math. (Still, there is a small question: if you teach programming, why are you forced to teach math at all? hadn't your students learned boolean algebra, set theory and other math topics with another teacher before?)" CreationDate="2017-07-27T16:44:46.573" UserId="216" />
  <row Id="6210" PostId="2961" Score="0" Text="@nocomprende, still, in that case, I even more disagree with richard's advice. IMHO: use &quot;a AND b&quot; / &quot;a OR b&quot; / &quot;NOT a&quot; notation (right like in the target language), explain that &quot;NOT&quot; precedes &quot;AND&quot;, while &quot;AND&quot; in its turn precedes &quot;OR&quot; (in the same way, as raising-to-power precedes multiplication/division and multiplication/division precede addition/subtraction in regular arithmetic) — but don't use &quot;a⋅b&quot;/&quot;a+b&quot; notation for &quot;a AND b&quot;/&quot;a OR b&quot; (it leads to misconceptions that are hard to get rid of, IMHO). Through I may be wrong, of course." CreationDate="2017-07-27T17:11:04.833" UserId="216" />
  <row Id="6199" PostId="2963" Score="0" Text="Why don't you come by [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom)? It's our main chat room, and you might find it interesting." CreationDate="2017-07-27T16:24:02.987" UserId="150" />
  <row Id="6243" PostId="2965" Score="8" Text="The question in the first paragraph and the last one seem entirely different, and the text in between is interesting but doesn't clarify what you're asking." CreationDate="2017-07-28T03:07:38.783" UserId="1103" />
  <row Id="6249" PostId="2965" Score="7" Text="&quot;Oops, I see a mistake here, in what I wrote.  Raise your hand if you can spot what I did wrong.&quot;" CreationDate="2017-07-28T05:33:07.913" UserId="59" />
  <row Id="6261" PostId="2965" Score="9" Text="This reminds me of the time a lecturer spent the best part of *an hour* trying to explain the concept of parity bits. He'd clearly forgotten but he was obviously trying to wing it. He spent the entire time contradicting himself and getting things wrong. My fellow students would correct him and he still couldn't grasp it. Still one of the funniest things I've ever seen, simply because he was too proud to concede he'd forgotten. There's nothing wrong with admitting you're not sure - that lecture would have been *so* much more productive for everyone if he had." CreationDate="2017-07-28T11:37:16.837" UserId="860" />
  <row Id="6270" PostId="2965" Score="5" Text="&quot;If debugging is the process of removing bugs, then programming must be the process of putting them in.&quot; - E. W. Dijkstra. IMHO programming (as an applied form of CS) is mostly about making mistakes and dealing with their consequences. Learning/Teaching how to spot mistakes sadly is much harder than making them in the first place." CreationDate="2017-07-28T15:17:59.480" UserId="1276" />
  <row Id="6277" PostId="2965" Score="0" Text="@Wildcard in a way you are correct, but this is a 'best-practice' question, and it is really about *behavior*. What is it in the behavior of the teacher that shows good ways to handle inevitable errors? The text between the beginning and the end sentences was meant to say: the more I know, the more impossible it is to be perfect, and I often feel like a dolt, but I don't have to act like one. The ego solution to this problem will not work. &quot;The Tao&quot; means The Way, and this is about the way of teaching, by being an example first of all. Being relaxed also works better for everyone." CreationDate="2017-07-28T19:42:36.537" UserDisplayName="user737" />
  <row Id="6222" PostId="2967" Score="0" Text="These are good examples / analogies. Also, since we start knowing nothing, the prognosis is always to get better. &quot;The largest room in the world is the room for improvement.&quot;" CreationDate="2017-07-27T19:14:22.367" UserDisplayName="user737" />
  <row Id="6234" PostId="2967" Score="2" Text="Not to brag, but I don't need to add &quot;make lots of mistakes&quot; to my lesson objectives. I do it without even thinking about it. ;-)" CreationDate="2017-07-27T20:32:47.487" UserId="283" />
  <row Id="6237" PostId="2967" Score="1" Text="@EllenSpertus It is the student's objectives. I share them with the class at the beginning. For my self, I just make an effort not to cover them up." CreationDate="2017-07-27T21:08:44.337" UserId="204" />
  <row Id="6404" PostId="2968" Score="1" Text="I chose this as the Accepted Answer because it emphasizes *humility*, which aligns with what Dijkstra said all those years ago about programming. The &quot;No Problem&quot; attitude described by Gerald M. Weinberg is fatal to openness and success." CreationDate="2017-08-01T15:15:57.227" UserDisplayName="user737" />
  <row Id="6215" PostId="2969" Score="1" Text="I came here to say exactly this. One of the most important lessons you can teach a class of novices is that making mistakes is a huge part of the process. It's **completely normal** to be confused, to get compiler errors, to get runtime errors. It's completely normal to have to do google searches, read the documentation, do some debugging, and even isolate the problem in a little example program. I call this &quot;the Bob Ross approach to learning how to code&quot; - named after Bob Ross's approach of treating mistakes as opportunities. &quot;This accidental brush stroke can become a happy little bird.&quot;" CreationDate="2017-07-27T18:40:52.507" UserId="2068" />
  <row Id="6216" PostId="2969" Score="4" Text="Compare that to a student who only ever sees teachers and tutorials getting everything correct the first time, never making a mistake, never having that &quot;wtf...&quot; moment that happens all the time while coding. Then they get home and find themselves making a ton of mistakes. *&quot;Is it supposed to be this difficult?&quot;* Yes, it is!" CreationDate="2017-07-27T18:49:05.173" UserId="2068" />
  <row Id="6217" PostId="2969" Score="0" Text="@KevinWorkman Yes it is." CreationDate="2017-07-27T18:51:46.087" UserId="1293" />
  <row Id="6223" PostId="2969" Score="0" Text="If it was easy, everybody would be doing it. &quot;Anyone can hold a sleeping baby.&quot;" CreationDate="2017-07-27T19:16:44.820" UserDisplayName="user737" />
  <row Id="6244" PostId="2969" Score="0" Text="Teaching by showing incorrect approaches is different from making mistakes.  You **don't** have to make mistakes to be a good teacher.  I think there is a valid point to be had here, but what you've actually said is exaggerated to the point of untruth." CreationDate="2017-07-28T03:09:37.823" UserId="1103" />
  <row Id="6256" PostId="2969" Score="2" Text="@Wildcard I didn't say that, or imply it. Many analogies and metaphors that aid in learning a concept are only &quot;approximately&quot; accurate, but they add to student understanding in different ways as well as to aid students who think in different ways. Saying the &quot;perfect thing, once&quot; is guaranteed to miss all but a fraction of students." CreationDate="2017-07-28T10:02:02.137" UserId="1293" />
  <row Id="6297" PostId="2969" Score="2" Text="My 2nd-year (undergrad) calculus professor (Dr. K. K. Tan) had an approach to mistakes I still remember fondly: when a student made a mistake, he'd say &quot;ah, you are careless&quot; in a friendly and not-insulting way, and point out the mistake.  This sounds rude, but it really didn't come across that way.  More like a martial-arts sensei.  When he'd make a mistake at the blackboard, he'd say, &quot;oh, **I** am careless!&quot; after noticing himself or having someone point it out.  It was fun, and I think most people got the idea that mistakes happen, and are normal.  Laugh it off and move on." CreationDate="2017-07-30T01:54:22.807" UserId="1654" />
  <row Id="6298" PostId="2969" Score="1" Text="That isn't really the kind of &quot;mistake&quot; the OP is talking about, though.  Dr. Tan had been teaching math for a long time, and undergrad math doesn't change the way undergrad programming/CS does.  So it was never an issue of high-level confusion, just minor stuff while re-arranging an equation, which of course makes it a lot easier to joke about being &quot;careless&quot;.  He'd usually notice when he didn't end up with the result he was expecting." CreationDate="2017-07-30T01:59:55.263" UserId="1654" />
  <row Id="6224" PostId="2971" Score="0" Text="Time-sinks are bad, but I am especially careful not to over-explain in such a way that people become confused again. My mistake in the Precedence question came from over-explaining or re-explaining something they already knew." CreationDate="2017-07-27T19:22:06.390" UserDisplayName="user737" />
  <row Id="6267" PostId="2972" Score="0" Text="@nocomprende I dunno what the world was like back then, but I could imagine it being harder to obtain qualified CS instructors and equipment to deal with a sudden surge like the plots show; universities tend to be slow-moving environments.  Hopefully it'd be a lot easier today since a lot of factors have changed." CreationDate="2017-07-28T12:56:30.633" UserId="39" />
  <row Id="6236" PostId="2973" Score="1" Text="Regarding your first paragraph, I wouldn't be asking for them to _invent_ it per se. Rather, I'd teach it (as I do) with some demos of each of the three sorting algorithms, so students &quot;see&quot; the process in action. I'd also give them the pseudocode logic. This sounds much like what you have them do in your second paragraph. My question though is whether I should then have them write bubble sort based on what they've just seen or just give them the code and have them start applying and analyzing it." CreationDate="2017-07-27T20:45:53.760" UserId="76" />
  <row Id="6238" PostId="2973" Score="0" Text="I like the idea of bottom-up and top-down. Therefore for this have them write it. But in other lessons give them bigger programs to edit." CreationDate="2017-07-27T21:16:04.720" UserId="204" />
  <row Id="6283" PostId="2973" Score="0" Text="Regarding the first sentence, if it's such an impossible task, how come it's been done so many times by so many people before, many times as coursework?" CreationDate="2017-07-29T15:47:39.970" UserId="104" />
  <row Id="6284" PostId="2973" Score="0" Text="@GypsySpellweaver “I want you to discover and implement insertion sort. It is a sorting algorithm. I can not tell you any more about it, as you must do it from scratch. If you hand in a solution for merge/selection/quick/bubble/any-other sort, then you will fail the unit.” (It probably depends on what you mean by scratch)" CreationDate="2017-07-29T16:29:35.643" UserId="204" />
  <row Id="6247" PostId="2975" Score="0" Text="Aha!  So someone else *did* mention this talk.  It was my first thought on reading the question.  :)" CreationDate="2017-07-28T03:22:55.000" UserId="1103" />
  <row Id="6239" PostId="2976" Score="1" Text="Could you give some details about these links?  We love great resources, but link-only answers aren't considered to be good SE form.  It doesn't take a lot of writing, but what are the big takeaways?" CreationDate="2017-07-27T22:27:47.390" UserId="27" />
  <row Id="6266" PostId="2980" Score="0" Text="Ah, the *ramifications* of unplanned branches of planned errors! Perfect execution kills most everything. No worries of that for me." CreationDate="2017-07-28T12:21:14.667" UserDisplayName="user737" />
  <row Id="6271" PostId="2981" Score="0" Text="Ah yes, [Miller's Magic Rule of Seven, plus or minus two](https://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two)" CreationDate="2017-07-28T16:58:04.047" UserId="1293" />
  <row Id="6281" PostId="2982" Score="1" Text="Possibly helpful to users thinking of making suggestions, or to yourself to generate ideas; *what specific concept should the lab demonstrate, or expose?* information theory is pretty big for a lab, or three." CreationDate="2017-07-29T15:39:24.097" UserId="104" />
  <row Id="6290" PostId="2982" Score="0" Text="@GypsySpellweaver Any of the concepts listed above. Should those each be separate questions? It felt like the topics would get so miniscule as to become useless for others." CreationDate="2017-07-29T19:46:33.283" UserId="27" />
  <row Id="7184" PostId="2982" Score="0" Text="@nocomprende I guess your answer has taught me that I have more to learn about information theory!" CreationDate="2017-08-23T00:00:34.710" UserId="27" />
  <row Id="6314" PostId="2983" Score="0" Text="I like to consider BCNF as a compromise between 3NF &amp; 4NF, or 3.5NF in that BCNF removes all candidate keys that are not part of the PK, but doesn't address the presence of multi-valued facts for the PK" CreationDate="2017-07-30T20:50:46.293" UserId="104" />
  <row Id="6364" PostId="2983" Score="0" Text="This is turning into a great answer!" CreationDate="2017-07-31T16:04:44.030" UserId="27" />
  <row Id="6570" PostId="2983" Score="0" Text="@nocomprende You'd need to verify in that book, but earlier sections dealing with &quot;key&quot; fields might cover what is, or is not, a key field versus the 'primary key'" CreationDate="2017-08-04T14:39:27.907" UserId="104" />
  <row Id="6278" PostId="2984" Score="1" Text="welcome to [cseducators.se]! A very nice question. I advise you use the [tag:resource-request] tag." CreationDate="2017-07-29T09:31:01.360" UserId="150" />
  <row Id="6279" PostId="2984" Score="7" Text="Those answering are encouraged to do more than name a book. Say why you believe the book is a good fit, and describe it to some extent. One book per answer is likely better than a single long list." CreationDate="2017-07-29T12:50:06.720" UserId="1293" />
  <row Id="6293" PostId="2984" Score="0" Text="I already gave one answer (SICP), but, if I could give a second, I might suggest *Computers and Intractability*. https://en.wikipedia.org/wiki/Computers_and_Intractability" CreationDate="2017-07-29T21:29:59.977" UserId="283" />
  <row Id="6296" PostId="2984" Score="1" Text="@EllenSpertus As I understand it, in situations like this, the limit is one &quot;resource&quot; per answer, with appropriate supporting text to clarify why it's recommended and how it fits the question. I don't recall anything limiting it to one answer per user, however. Even on non-list questions a second answer is acceptable, as long as it is distinct from the first one, as they must be, by definition, in this case. Write up the answer supporting _Computers and Intractability_." CreationDate="2017-07-30T01:12:49.553" UserId="104" />
  <row Id="6321" PostId="2984" Score="0" Text="@GypsySpellweaver I had not realized I could give multiple answers. I'll do so." CreationDate="2017-07-30T22:53:59.547" UserId="283" />
  <row Id="7928" PostId="2984" Score="0" Text="I am afraid that your requirements &quot;basics&quot; and &quot;rigor&quot; are incompatible. Introductory books are intended for programmers, and programmers on average have weaker mathematical background and demands. Hence I recommend to pick a book for each topic in Computer Science. As you can see, some answers (&quot;A Theory of Objects&quot;, &quot;Computers and Intractability: A Guide to the Theory of NP-Completeness&quot;) are already narrow." CreationDate="2017-09-10T11:42:14.510" UserId="160" />
  <row Id="6280" PostId="2985" Score="1" Text="Quote attributed to Henry Ford: **&quot;When you say you can, or you say you can't, you are absolutely right.&quot;** That was on the wall in the tiny 'office' (literally a 3 foot wide space between walls) of my elementary school Gym Teacher, who still stands out in my memory as *great*." CreationDate="2017-07-29T13:42:41.370" UserDisplayName="user737" />
  <row Id="6282" PostId="2985" Score="1" Text="Smile like you mean it, and *fake* it until you *make* it." CreationDate="2017-07-29T15:43:40.967" UserId="104" />
  <row Id="6291" PostId="2985" Score="2" Text="What's the difference between authenticity bias and [imposter syndrome](https://en.wikipedia.org/wiki/Impostor_syndrome) (besides the fact that only the latter has a Wikipedia article)?" CreationDate="2017-07-29T20:57:43.847" UserId="1523" />
  <row Id="6292" PostId="2985" Score="0" Text="@jwodder My interpretation of the differences: 1. Naturalness bias (what the article actually discusses) refers to the belief that one's success depends primarily on innate ability. This belief may or may not be part of imposter syndrome. 2. Imposter syndrome is more common at higher levels when one has nominally achieved some success (admission to a graduate program, a prestigious job), while Buffy is describing an earlier stage in students' lives." CreationDate="2017-07-29T21:04:35.823" UserId="283" />
  <row Id="6285" PostId="2988" Score="2" Text="ob xkcd: https://xkcd.com/163/" CreationDate="2017-07-29T17:52:34.190" UserId="283" />
  <row Id="6286" PostId="2988" Score="0" Text="Someone without your mathematical background might start with Knuth's *Concrete Mathematics*." CreationDate="2017-07-29T17:52:59.723" UserId="283" />
  <row Id="6555" PostId="2988" Score="1" Text="While those are excellent books, they are nigh impossible to read cover-to-cover, even for seasoned academics, yet alone students. If using this, be sure you pick small, self-contained sections and make sure beforehand that the students have all the preliminary knowledge required for understanding the chapters. Knuth is excellent if you want to go really deep, but the amount of time you need to spend on each single page to properly understand it is *very* high." CreationDate="2017-08-04T08:15:45.563" UserId="1370" />
  <row Id="7927" PostId="2988" Score="0" Text="@Ellen Spertus: &quot;Someone without your mathematical background&quot; The OP is a mathematician." CreationDate="2017-09-10T11:31:33.707" UserId="160" />
  <row Id="7933" PostId="2988" Score="0" Text="@beroal I know. I was saying that the OP could skip Concrete Mathematics but others might find it useful background." CreationDate="2017-09-10T14:40:05.200" UserId="283" />
  <row Id="7934" PostId="2988" Score="0" Text="@EllenSpertus Thanks for the vote of confidence, but I'd probably find it an interesting read." CreationDate="2017-09-10T14:41:50.587" UserId="1293" />
  <row Id="7935" PostId="2988" Score="0" Text="You're not the OP." CreationDate="2017-09-10T14:43:07.977" UserId="283" />
  <row Id="7936" PostId="2988" Score="0" Text="@EllenSpertus, thought you meant for the answer. Oh well. Back to our regularly scheduled programming." CreationDate="2017-09-10T14:44:20.103" UserId="1293" />
  <row Id="6288" PostId="2991" Score="0" Text="&quot;not yet&quot; is an interesting concept. I normally allow do-overs as a regular part of grading. Similar, but not quite the same." CreationDate="2017-07-29T18:00:30.527" UserId="1293" />
  <row Id="6310" PostId="2991" Score="0" Text="You could save a lot of time by just issuing everyone with a pass certificate *before* they start the course. As you might guess, I have no sympathy whatever with this happy-clappy approach to education. As preparation for adult life, it's *totally* inappropriate IMO. If Socrates was killed for &quot;corrupting youth&quot;, there's a whole generation of happy-clappy teachers who should face the same fate!" CreationDate="2017-07-30T17:31:42.803" UserId="1352" />
  <row Id="6313" PostId="2991" Score="0" Text="@alephzero I see that you have not watched the video or read her papers. In the video she say that we need to stop, praising pupils, the have a whole generation of people that can not do a days work with out being praised. As for your first point, her approach is about teaching, not measuring. This give them a certificate at the start, is because you thing that school is for measuring people, so that employers know who to hire. Where as she is talking about how best to create improvement in people." CreationDate="2017-07-30T20:05:28.803" UserId="204" />
  <row Id="6359" PostId="2991" Score="1" Text="@nocomprende, That seem fair, we don't want bias. However if we have this “fixed mind set”, then we do not grow, and we get what we expect. But if we have “growth mind set”, then we learn, and are often surprised at what we and our students can do." CreationDate="2017-07-31T15:49:34.493" UserId="204" />
  <row Id="6287" PostId="2992" Score="0" Text="Yes, I've done that, and it works. Thanks." CreationDate="2017-07-29T17:59:03.693" UserId="1293" />
  <row Id="7929" PostId="2993" Score="0" Text="IMHO, this book is not rigorous enough for a mathematician. There are no theorems, no proofs." CreationDate="2017-09-10T11:42:56.157" UserId="160" />
  <row Id="7937" PostId="2993" Score="0" Text="@beroal it depends what the OP wants to learn. Not all of computer science is theorems and proofs. SICP is considered the deepest introduction to programming, which is part of computer science." CreationDate="2017-09-10T14:49:20.950" UserId="283" />
  <row Id="6319" PostId="2998" Score="4" Text="The core problem here is that you're assuming that styling should not be done directly in HTML, and that using CSS is better. Neither of those things is true." CreationDate="2017-07-30T21:48:00.157" UserId="2325" />
  <row Id="6339" PostId="2998" Score="0" Text="@Puppy well, part of the question is whether I should teach it separatly. If I don't,  then they won't use stylesheets. But do you think any website anywhere actually hardcodes all it's css in html? **Every** `div` has a mountain of code in its `style` attribute?" CreationDate="2017-07-31T08:17:40.517" UserId="150" />
  <row Id="6354" PostId="2998" Score="3" Text="This site shows the power of keeping css separate. http://www.csszengarden.com - Same structure, different css stylesheet." CreationDate="2017-07-31T14:09:24.923" UserId="2343" />
  <row Id="6355" PostId="2998" Score="0" Text="@DavidSpence nice. I'll definitely use that" CreationDate="2017-07-31T14:10:19.910" UserId="150" />
  <row Id="6373" PostId="2998" Score="0" Text="@ItamarG3 Sure, why not? You can just call a function that makes a div with the code in and then just do that three times." CreationDate="2017-07-31T18:29:53.890" UserId="2325" />
  <row Id="6375" PostId="2998" Score="0" Text="@Puppy and how, exactly, would I syle a div *without some form of CSS?*" CreationDate="2017-07-31T19:35:31.283" UserId="150" />
  <row Id="6427" PostId="2998" Score="0" Text="@ItamarG3: There's a handy-dandy style attribute you can use." CreationDate="2017-08-01T17:34:25.030" UserId="2325" />
  <row Id="6428" PostId="2998" Score="0" Text="@Puppy you're right but that's doesn't mean that saying styling shouldn't be done directly in HTML is not true. Give me one profesional website that has all its styling inline." CreationDate="2017-08-01T17:47:26.733" UserId="150" />
  <row Id="6429" PostId="2998" Score="0" Text="I build such a website at work." CreationDate="2017-08-01T17:48:26.327" UserId="2325" />
  <row Id="6473" PostId="2998" Score="0" Text="@Puppy But... but... but your website uses a stylesheet for most of the styling (in fact you have 6 stylesheets; talk about separate css file, you have separate css file**s**). Moreover, some of the `style` attributes (which belong to things with `id`s and are identical) that are generated by functions I suppose, are empty." CreationDate="2017-08-02T13:40:36.027" UserId="150" />
  <row Id="6668" PostId="2998" Score="0" Text="But the website that you're looking at is a squatter who yoinked the domain after I allowed it to lapse. It's certainly not my work, personal or professional." CreationDate="2017-08-06T22:59:33.653" UserId="2325" />
  <row Id="6300" PostId="3002" Score="0" Text="That second paragraph sounds especially useful. But that doesn't answer whether I should really devote a lesson for teaching how and why one should write a css stylesheet, instead of inline html `style` attributes." CreationDate="2017-07-30T10:04:54.863" UserId="150" />
  <row Id="6301" PostId="3002" Score="0" Text="Added a partial answer to If and why to devote a lesson to it." CreationDate="2017-07-30T11:01:31.140" UserId="204" />
  <row Id="6307" PostId="3002" Score="1" Text="I agree that un-teaching is an especially wasteful use of everyone's time. It is best to catch misconceptions before bad habits are built and reinforced." CreationDate="2017-07-30T13:03:45.610" UserId="1293" />
  <row Id="6315" PostId="3002" Score="0" Text="Google says you should include above the fold css in the html file" CreationDate="2017-07-30T21:29:33.010" UserId="2247" />
  <row Id="6316" PostId="3002" Score="1" Text="@tim, this is just a load **optimisation**. Conceptuality it should still remain separate. However Google is saying put it in the same file. They are not saying that you should style each bit separately. They are saying take what could be in a css file and add it to the &lt;style&gt; section of the html." CreationDate="2017-07-30T21:38:03.077" UserId="204" />
  <row Id="6317" PostId="3002" Score="0" Text="@richard yes, hence my careful wording there!" CreationDate="2017-07-30T21:44:21.820" UserId="2247" />
  <row Id="6332" PostId="3002" Score="0" Text="What I do with my crummy little framework plugin I run over WordPress: provide a little API for myself to either dump CSS into a &lt;style&gt; tag while outputting HTML or enqueue it as a separate file, as the page requires. That's where the reality of web optimization comes in. But of course the concept of style must be kept separate from the content in either case." CreationDate="2017-07-31T02:00:03.610" UserId="927" />
  <row Id="6352" PostId="3002" Score="1" Text="Instead of giving the students a variety of style sheets that affect their code, I would try the opposite approach.  After teaching them inline styles in HTML, give them a page that relies on a CSS document for its style and ask them to make their own stylesheet for it (using the same techniques they learned from using inline HTML - just a matter of labeling the styles and putting them together in one place).  Then everyone in class can compare their style sheets on a common test subject (the one you provided) and see the possibilities." CreationDate="2017-07-31T13:31:28.503" UserId="1089" />
  <row Id="6356" PostId="3002" Score="0" Text="@Darren that's an interesting suggestion." CreationDate="2017-07-31T14:11:04.310" UserId="150" />
  <row Id="6361" PostId="3002" Score="0" Text="@Darren I agree, though not sure about doing it the wrong way first. Could you put this into an answer, with some more detail." CreationDate="2017-07-31T15:51:16.840" UserId="204" />
  <row Id="6365" PostId="3002" Score="0" Text="@richard I'm not sure what you mean by &quot;the wrong way first&quot;.  I don't see there being any &quot;right&quot; or &quot;wrong&quot; ways, just different levels of organization depending on what's needed.  For a one off style on a single element I don't see anything wrong with putting the style in the tag itself, if there isn't already a stylesheet assigned that should cover it.  In any case, I'm not making that an answer because I don't have an answer for your original question.  It was just a suggestion based on my own experience with HTML and CSS over the years." CreationDate="2017-07-31T16:07:15.293" UserId="1089" />
  <row Id="6333" PostId="3004" Score="1" Text="The comparison with functions is good. I presume the sin in question is directly supplying style attributes in source HTML. If so, it could be compared to taking the body of a method and just sticking that where you were going to call the method. Counterproductive in the extreme." CreationDate="2017-07-31T02:02:33.740" UserId="927" />
  <row Id="6311" PostId="3017" Score="0" Text="HI thehayro! Welcome to [cseducators.se]!" CreationDate="2017-07-30T17:33:02.947" UserId="58" />
  <row Id="6320" PostId="3017" Score="1" Text="Sure. That is up to the requirements where the webpage should be displayed (mobile/desktop).&#xA;But the question as far as I understood it,  was how to explain why and how there is a need for a separation of HTML and CSS." CreationDate="2017-07-30T21:55:30.143" UserId="2324" />
  <row Id="6329" PostId="3021" Score="1" Text="Hi Puppy, welcome to [cseducators.se]! If you'd like to meet another puppy, you can say hi to [Buffy](https://cseducators.stackexchange.com/users/1293/buffy), who's a bulldog, in [chat](https://chat.stackexchange.com/rooms/59174/the-classroom). This is an interesting answer, thanks for sharing your perspective here!" CreationDate="2017-07-31T00:29:57.157" UserId="58" />
  <row Id="6382" PostId="3021" Score="2" Text="While I do not agree with everything you say. I do see your point. Especially the last line (I think you should expand on this). Show us how you think it should be done.  Even if we don't 100% agree, we could learn something." CreationDate="2017-07-31T23:11:51.347" UserId="204" />
  <row Id="6470" PostId="3021" Score="0" Text="@Puppy Is that so?" CreationDate="2017-08-02T12:40:01.017" UserId="150" />
  <row Id="6669" PostId="3021" Score="0" Text="It's definitely so" CreationDate="2017-08-06T23:01:19.240" UserId="2325" />
  <row Id="10036" PostId="3021" Score="0" Text="It seems like your problems are with your teams: Too many people on the project, and not enough communication. I agree that you should generate it. CSS does style and layout, keep them seperate; HTML does content and structure. The structure should be done with templates, and the content should me pulled form the database. The two combined with a program." CreationDate="2018-02-08T00:15:45.087" UserId="204" />
  <row Id="6322" PostId="3022" Score="3" Text="It would be good if you could say a bit more about your expectations for the course and the backgrounds students would have, both in math and computing. Are you looking for just an overview of the field, or for the students to  have some level of technical or operational knowledge at the end?" CreationDate="2017-07-30T23:21:56.807" UserId="1293" />
  <row Id="6324" PostId="3022" Score="1" Text="I've downvoted this question because it sounds too broad for a single answer to cover. You could write a book on teaching cybersecurity. You might be able to narrow this question by elaborating on what you mean by &quot;real computer science&quot;." CreationDate="2017-07-30T23:35:13.443" UserId="58" />
  <row Id="6351" PostId="3022" Score="1" Text="I'm really looking for what others think is &quot;real computer science&quot; and &quot;Cybersecurity.&quot; It was deliberately written broadly because I didn't want narrow answers." CreationDate="2017-07-31T13:22:08.580" UserId="541" />
  <row Id="6393" PostId="3022" Score="1" Text="As nobody really agrees what cyber security is, I think you will not get simple answers that will fulfil your requirement." CreationDate="2017-08-01T14:21:01.403" UserId="2357" />
  <row Id="6337" PostId="3026" Score="1" Text="Wow. Welcome to [cseducators.se]. This is really something I had not considered. I'd love it if you could add some examples or description that show that. (I **can** write them myself, but I'm more interested in seeing what you can think of). This really is an interesting answer :)" CreationDate="2017-07-31T08:11:49.980" UserId="150" />
  <row Id="6338" PostId="3026" Score="1" Text="Unrelated: why don't you take our [tour]? I'm sure you'd find it interesting." CreationDate="2017-07-31T08:12:47.037" UserId="150" />
  <row Id="6340" PostId="3026" Score="0" Text="I got it slightly wrong, its external style sheet first, then document styles and then on the element, my brain is never 100% on a monday morning. :)" CreationDate="2017-07-31T08:29:43.540" UserId="2332" />
  <row Id="6341" PostId="3026" Score="0" Text="forgive and forget ;). You can edit your answer. There's an `edit` button\link directly under your answer. While you're at it, would you like to add some example to demonstrate what your answer is addressing? It'd really make it into a much better answer :D" CreationDate="2017-07-31T08:30:19.917" UserId="150" />
  <row Id="6342" PostId="3026" Score="0" Text="Unfortunately i do not have time right now. I just wanted to mention inheritance of css, as it is important aspect of css." CreationDate="2017-07-31T08:49:46.570" UserId="2332" />
  <row Id="6343" PostId="3026" Score="0" Text="Allright, if you have the time, then I do recommend reading the [tour]." CreationDate="2017-07-31T08:50:37.963" UserId="150" />
  <row Id="6345" PostId="3030" Score="0" Text="you raise some very interesting points. Thanks! and welcome to [cseducators.se]" CreationDate="2017-07-31T10:06:34.220" UserId="150" />
  <row Id="6371" PostId="3033" Score="0" Text="As this is a more casual methodology I'm leaving it as a comment: Talk to your students about usage of Facebook, etc., and ask them how they would cope and what the consequences would be if they no longer had access to the internet, but everyone else still did. (This, of course, assumes most/all of them use Facebook regularly. I don't, but I do use other sites like the Stack Exchange network often.)" CreationDate="2017-07-31T17:27:25.830" UserId="654" />
  <row Id="6374" PostId="3033" Score="0" Text="The story of stuff — https://www.youtube.com/watch?v=sW_7i6T_H78" CreationDate="2017-07-31T18:40:26.130" UserId="204" />
  <row Id="6418" PostId="3033" Score="1" Text="@richard The Story of Electronics video fiercely advocates halving production of toxics from electronics by 50% every 18 months, &quot;Green Moore's Law.&quot; It points out inequity in toxics production from mining and disposal of electronics, a.k.a. advocacy for &quot;environmental justice.&quot; I wrote a fuller  review of the video and suggestions for classroom use in comment to the video at https://www.youtube.com/watch?v=sW_7i6T_H78&amp;lc=z12tdv1w0zqtxhk2123qfhlwpo34t4h0.1501603843862852" CreationDate="2017-08-01T16:14:01.233" UserId="765" />
  <row Id="6439" PostId="3033" Score="0" Text="@BennettBrown I can't find your comment. Could you copy it to an answer here (if it was your comment, you have copyright, so can do that)." CreationDate="2017-08-01T22:01:17.270" UserId="204" />
  <row Id="6453" PostId="3033" Score="0" Text="@richard, the link I provided above takes you directly to my comment, or should. It is purported a reply to the top-voted comment on the YouTube video's page, but only so that it would be near the top. It exceeds a SO comment limit by over 1000 chars." CreationDate="2017-08-02T04:16:02.953" UserId="765" />
  <row Id="6368" PostId="3038" Score="2" Text="Do you mean in logic computations, specifically or as an operation in programming? Do you mean also &quot;short circuit&quot; evaluation?" CreationDate="2017-07-31T16:19:53.443" UserId="1293" />
  <row Id="6370" PostId="3038" Score="1" Text="Well, exclusive or kind of matches people's intuition of what &quot;or&quot; means, inclusive or is slightly more counterintuitive." CreationDate="2017-07-31T16:53:17.423" UserId="1299" />
  <row Id="6372" PostId="3038" Score="0" Text="some of the answer here may be of help https://cseducators.stackexchange.com/questions/2750/active-learning-for-boolean-algebra/" CreationDate="2017-07-31T17:43:31.140" UserId="204" />
  <row Id="6378" PostId="3038" Score="1" Text="For the &quot;What's the point&quot; kind of questions, I would point out how in English as it is commonly practiced, context can change the meaning of the conjunctions. &quot;AND&quot; can sometimes mean &quot;OR&quot;. For example: &quot;You have two choices: You can go to the party, and you can stay home.&quot; Everyone hearing it would understand you are listing exclusive options. In this case, &quot;AND&quot; means &quot;XOR&quot;." CreationDate="2017-07-31T21:27:21.567" UserId="2348" />
  <row Id="6379" PostId="3038" Score="1" Text="OR and AND are ambiguous in English: &quot;You can hang your sign here if it's blue or if it's purple.&quot;  &quot;You can hang your sign here if it's blue and if it's purple.&quot; They mean the same thing. The point of rigorously defining the binary (and logical) operators is so they mean one thing and only one thing, to make sure you're telling the computer exactly what you want it to do." CreationDate="2017-07-31T21:30:16.377" UserId="2348" />
  <row Id="6385" PostId="3038" Score="1" Text="A 3-way (4-way, multiway) light switch can model a xor operation. When both switches are down, the light is out, when one switch is up, the light is on, and when both switches are up, the light is back off. In multiway configurations, the system behaves as the generic definition of the xor function: if the number of switches that are up is odd, then the light is on, else, the light is off. This is all assuming that no switch has been installed upside down, of course." CreationDate="2017-08-01T03:30:37.827" UserId="2352" />
  <row Id="6376" PostId="3040" Score="7" Text="My favorite example of Null: &quot;Everyone who is not here, raise your hand.&quot;" CreationDate="2017-07-31T19:43:20.857" UserDisplayName="user737" />
  <row Id="6380" PostId="3043" Score="0" Text="Welcome to [cseducators.se]! A very interesting point. But I don't quite see how this answers the question. Could you please edit your answer to add an example for illustrating the difference between OR and XOR?" CreationDate="2017-07-31T21:50:18.413" UserId="150" />
  <row Id="6381" PostId="3043" Score="0" Text="It is interesting that I have told my fellow programmers to not do `if condition == true`, because we don't say “would you like fries with that is true”, but here I see this in natural language. As I am from only one part of the English speaking world, and the way we speak can change in less than 100 miles. I would like to ask. Do people add “Is true” to the end of questions, where you are from? — thanks" CreationDate="2017-07-31T21:51:22.057" UserId="204" />
  <row Id="6384" PostId="3043" Score="0" Text="This really is an interesting point, but while I agree that I can't think of any English construction comparable to $A\oplus (B \oplus C)$, why is $A \oplus B$ not the same has he is in Paris or London?" CreationDate="2017-08-01T00:07:30.767" UserId="27" />
  <row Id="6548" PostId="3043" Score="0" Text="@Ben Just because we think it's the same &quot;or&quot; as &quot;he is in Paris or London or Istanbul&quot;. Clearly it can't be mathematical ex-or." CreationDate="2017-08-03T22:05:32.867" UserId="2349" />
  <row Id="6549" PostId="3043" Score="0" Text="@mander I agree that &quot;He is in Paris or London or Istanbul&quot; is not equivalent to $inParis \oplus inLondon \oplus inIstanbul$, because that is a matter of 3 $\oplus$s.  But &quot;He is in Paris or London&quot; should be an identical statement to $inParis \oplus inLondon$." CreationDate="2017-08-03T22:23:42.200" UserId="27" />
  <row Id="6475" PostId="3044" Score="1" Text="I'm curious - what exactly do you expect them to memorize?  As mentioned by a few others below, I've found that having an understanding of basic concepts &amp; patterns and how systems are designed to behave can be much more important than rote memorization." CreationDate="2017-08-02T15:09:58.083" UserId="2046" />
  <row Id="6389" PostId="3045" Score="0" Text="Don't discount negative reinforcement. They [both have their place](https://pavlok.com/blog/positive-vs-negative-reinforcement-which-is-more-effective/). Don't fall for the hype; these are system components of our foundational biological motivations, they're not just making people feel good or bad." CreationDate="2017-08-01T13:38:01.523" UserId="27" />
  <row Id="6390" PostId="3045" Score="2" Text="I am well aware that negative reinforcement can be important, but from my personal experience and pretty much everyone I've encountered reacts far better to positive reinforcement. I certainly know that if people went the other way with me, I'd currently still be stuck at home without a job. I personally just feel that there is enough fear in the world as it is. Also since when is it a hype?" CreationDate="2017-08-01T13:41:46.743" UserId="2335" />
  <row Id="6391" PostId="3045" Score="0" Text="What you're saying makes no sense to me at all.  Are we even talking about the same thing?  Are you using the term &quot;negative reinforcement&quot; in some sense that is outside of the system of Applied Behavioral Analysis?  What you're saying only makes sense to me if you're somehow taking the term *negative reinforcement*, and using it as some sort of synonym for *being discouraging*.  (The way I understand the term, it means something entirely different.)" CreationDate="2017-08-01T13:48:24.283" UserId="27" />
  <row Id="6392" PostId="3045" Score="2" Text="Maybe I should put it this way then: I've rarely ever noticed anyone changing their way over &quot;hey, if you (don't) do X, Y will happen&quot; wherein Y is something negative. The problem being that the people I interact with are almost always intimidated and aware as it is. I myself for one always think of those things myself and any reinforcement of that thought doesn't push me, but makes me get scared and paralyzed. This is just an example, but I just fail to see how this is anything other than intimidation tactics provided the person is already aware." CreationDate="2017-08-01T13:58:28.530" UserId="2335" />
  <row Id="6424" PostId="3045" Score="1" Text="@nocomprende Obligatory XKCD: https://xkcd.com/357/" CreationDate="2017-08-01T17:09:21.447" UserId="27" />
  <row Id="6388" PostId="3046" Score="0" Text="I'm pretty sure that's inclusive or, because &quot;both&quot; would be a fine answer. &quot;Would you like a white pie or pie with sauce&quot; would be exclusive." CreationDate="2017-08-01T13:31:57.823" UserId="27" />
  <row Id="6438" PostId="3046" Score="0" Text="You will notice I said &quot;one-topping pie&quot;" CreationDate="2017-08-01T22:00:06.490" UserId="21" />
  <row Id="6440" PostId="3046" Score="0" Text="You give me far too much credit, sir. ;-D" CreationDate="2017-08-01T22:02:06.603" UserId="27" />
  <row Id="6443" PostId="3046" Score="0" Text="Do you happen to know of a situation analogous to (or English equivalent of) $A \oplus B \oplus C$?" CreationDate="2017-08-01T22:48:57.643" UserId="27" />
  <row Id="6444" PostId="3046" Score="0" Text="This means an odd number of A, B and C ar true." CreationDate="2017-08-01T22:50:08.457" UserId="21" />
  <row Id="6445" PostId="3046" Score="0" Text="This leads to a simple proof that $\oplus$ is associative." CreationDate="2017-08-01T22:50:43.657" UserId="21" />
  <row Id="6403" PostId="3048" Score="1" Text="Right. Like Bret Victor said in the video *The Future of Programming*: &quot;The most dangerous thought that you can have as a creative person, is to think that you know what you're doing.&quot; (Because it shuts off learning, growth, openness, discovery, inquiry...)" CreationDate="2017-08-01T15:13:09.940" UserDisplayName="user737" />
  <row Id="6406" PostId="3049" Score="0" Text="@nocomprende it's not uncommon that students who need motivation can find it in other fields in which they *are* motivated." CreationDate="2017-08-01T15:47:56.903" UserId="150" />
  <row Id="6454" PostId="3049" Score="0" Text="It's worth noting that competition doesn't work for everyone.  Specifically, women.  (I remember reading the book &quot;Gender Inclusive Game Design&quot; which specifically said that women (typically, but of course not always) dislike head-to-head competition but will happily compete indirectly (e.g., each person runs a race on their own, and they compete by comparing times).&#xA;The main thing is not to force the whole class into competition - what about asking for people to voluntarily compete?" CreationDate="2017-08-02T06:39:59.353" UserId="2317" />
  <row Id="6462" PostId="3049" Score="0" Text="@MikeTheTall true, but it works for some. It's up to the teacher to choose which of the options would best suit their case." CreationDate="2017-08-02T12:07:29.103" UserId="150" />
  <row Id="6394" PostId="3050" Score="1" Text="An interesting answer. Welcome to [cseducators.se]!" CreationDate="2017-08-01T14:25:07.267" UserId="150" />
  <row Id="6395" PostId="3050" Score="0" Text="Thanks - as a disclaimer, I'm one of the Security Stack Exchange mods :-)" CreationDate="2017-08-01T14:25:52.097" UserId="2357" />
  <row Id="6396" PostId="3050" Score="0" Text="Oh, I know ;) (I looked around other sites a while back :D)" CreationDate="2017-08-01T14:26:20.697" UserId="150" />
  <row Id="6399" PostId="3050" Score="1" Text="Lol. I wasn't aware of this site until now, so I'll stick around and see if I can help. I'm a bit niche though - never taught broader comp sci, just sec." CreationDate="2017-08-01T14:35:00.103" UserId="2357" />
  <row Id="6400" PostId="3050" Score="0" Text="Why not come by out [chat](https://chat.stackexchange.com/rooms/59174/the-classroom)" CreationDate="2017-08-01T14:35:50.397" UserId="150" />
  <row Id="6402" PostId="3050" Score="0" Text="That's a lot for one semester (or one year)! Also, welcome to the site! These might be up your alley: https://cseducators.stackexchange.com/questions/1079/how-do-i-teach-ethics-in-hacking https://cseducators.stackexchange.com/questions/79/how-to-raise-students-security-awareness-in-programming https://cseducators.stackexchange.com/questions/1143/demonstrating-the-possible-dangers-of-sql-injection https://cseducators.stackexchange.com/questions/1327/classroom-use-of-a-limited-port-scan-in-the-wild" CreationDate="2017-08-01T14:40:20.123" UserId="27" />
  <row Id="6408" PostId="3052" Score="2" Text="I shudder to think what CS research might even *need* human subjects." CreationDate="2017-08-01T15:49:59.593" UserId="150" />
  <row Id="6413" PostId="3052" Score="2" Text="@ItamarG3 virtual reality is an obvious one. Anything that is looking at usability is another. Signal processing/programming of medical devices is a third. I can go on if needed." CreationDate="2017-08-01T15:56:26.723" UserId="276" />
  <row Id="6414" PostId="3052" Score="0" Text="please do go on. It is needed. but try to do it in the question body. That'll make the question clearer." CreationDate="2017-08-01T15:57:19.367" UserId="150" />
  <row Id="6415" PostId="3052" Score="1" Text="Can you say a bit more about context? Some places permit this at the graduate level, but with strong (we hope) safeguards.  It is also a fact that much of the existing &quot;research&quot; has proven not to be reproducible, giving some a false picture of what the &quot;truth&quot; is. In the US post-secondary institutions have &quot;Institutional Review Boards&quot; (IRB) to reduce some of the problems." CreationDate="2017-08-01T15:57:36.383" UserId="1293" />
  <row Id="6416" PostId="3052" Score="0" Text="I think you're going to have to expand on what you mean, specifically, by &quot;subjects&quot;... but this is definitely better than before! :)" CreationDate="2017-08-01T16:07:55.917" UserId="150" />
  <row Id="6417" PostId="3052" Score="0" Text="@ItamarG3 I mean any research that might require IRB review" CreationDate="2017-08-01T16:09:26.360" UserId="276" />
  <row Id="6419" PostId="3052" Score="0" Text="@StrongBad I think I got what you're talking about" CreationDate="2017-08-01T16:19:31.923" UserId="150" />
  <row Id="6431" PostId="3052" Score="2" Text="A/B testing is a form of human subject research. All companies use it." CreationDate="2017-08-01T18:53:53.977" UserId="283" />
  <row Id="14255" PostId="3053" Score="1" Text="I have a personal desire to distinguish strongly between the notion *&quot;we should teach ethics&quot;* (which we should) and *&quot;we should teach people to navigate the bureaucracy which has developed around ethics compliance&quot;* (which we also should, at least at the level of knowing that it is there and where to get started) because one is the territory and the other is (at best) a map." CreationDate="2019-02-10T05:29:21.913" UserId="2735" />
  <row Id="6435" PostId="3054" Score="0" Text="@nocomprende Yeah, I think waiting until the end to let the students work on their own activities just delays their interest until the very end, which is how you lose people. Maybe have each homework be a mini-project where they can do whatever they want, using your lessons as tools to improve it over time." CreationDate="2017-08-01T20:25:01.170" UserId="2068" />
  <row Id="6457" PostId="3056" Score="0" Text="@nocomprende: do you mean that you, the teacher, are deeply introvert; or that the pupils that have trouble are so?" CreationDate="2017-08-02T10:50:13.927" UserId="652" />
  <row Id="6484" PostId="3057" Score="0" Text="At least they weren't testing shades of grey." CreationDate="2017-08-02T18:49:11.990" UserDisplayName="user737" />
  <row Id="6437" PostId="3059" Score="0" Text="Welcome to [cseducators.se]! Wow. This is an incredible answer. However i feel as though the last two paragraphs are mainly important. Don't you agree?" CreationDate="2017-08-01T20:47:40.423" UserId="150" />
  <row Id="6468" PostId="3059" Score="0" Text="Thanks, sure the last two are pretty good.  There will always be malicious people, but that should not stop the good people from working on new things.  The few tend to ruin it for everyone else, this is nothing new, and this is why we have countless laws which don't stop the cause of people committing crimes anyway.  This requires personal change, the hardest thing to do." CreationDate="2017-08-02T12:38:52.723" UserId="2364" />
  <row Id="6673" PostId="3060" Score="0" Text="Hey, @nova, you may be interested in [this question](https://cseducators.stackexchange.com/questions/3152/books-about-pedagogical-research-within-our-field), and in any case, I'd definitely be interested in your response." CreationDate="2017-08-07T01:26:02.227" UserId="27" />
  <row Id="6902" PostId="3060" Score="0" Text="@BenI. I am interested in that question and all the questions haha. I've been so busy at work I haven't had much time. Hopefully in a couple weeks I'll be able to spend a little more time here." CreationDate="2017-08-11T15:12:44.370" UserId="2045" />
  <row Id="6441" PostId="3061" Score="0" Text="I had a similar experience with grad school. I became pretty frustrated by &quot;purely academic&quot; courses that didn't give me any knowledge that I could immediately actually use in real life. While knowledge is valueable in and of itself, I think academic types lose sight of the value of actually getting stuff done as well. A good course will be a mix of both." CreationDate="2017-08-01T22:14:07.053" UserId="2068" />
  <row Id="6442" PostId="3061" Score="0" Text="@KevinWorkman The irony is that the course in question ends up actually being *highly* relevant to my area of interest, but no one actually told me that so I didn't realize it until halfway through the term. Even then, it wasn't because someone actually told me that, it was because I figured it out on my own." CreationDate="2017-08-01T22:18:20.470" UserId="1299" />
  <row Id="6447" PostId="3061" Score="0" Text="@nocomprende Therein lies the problem - the fact that *we* know why a topic is worth knowing about in no way implies that *students* know why it's worth studying." CreationDate="2017-08-01T23:44:26.093" UserId="1299" />
  <row Id="6449" PostId="3062" Score="0" Text="Java and Python, and JS are indispensible and ubiquitous." CreationDate="2017-08-02T00:22:03.050" UserId="21" />
  <row Id="7248" PostId="3063" Score="0" Text="A metaphor is by definition not a literal representation of the concept. That's why, it will be very difficult to find a metaphor that explains everything perfectly. That being said, I do like the &quot;virus&quot; metaphor because it can help us focus on teaching students better computing hygiene. When germ theory first became an accepted part of science, it still took us multiple generations to get people to make health hygiene or food hygiene a daily part of their daily routine, and even today, it's something that we must constantly educate and remind people/workers about." CreationDate="2017-08-25T00:25:23.743" UserId="1195" />
  <row Id="7249" PostId="3063" Score="0" Text="Also, putting the burden on the student to protect himself is key here. Because that student won't always be using computers in a controlled and well-protected computer lab environment. He won't always have knowledgeable staff that he can call upon. At some point, he will be purchasing and using his own computer and other electronics. And/or at some point, he may also start using internet cafes in sketchy areas." CreationDate="2017-08-25T01:22:15.390" UserId="1195" />
  <row Id="7253" PostId="3063" Score="0" Text="@StephanBranczyk yes at some point the student will be purchasing their own computer, so we need to teach them about systems that will minimise pilot error (see comment in section on vampires bellow). In the UK/EU up to the early 1970s we used to teach don't fall into the spinning blades. After this time, we started teaching about machine guards, and hazard protective equipment. It seems we are still catching up in our teaching of computing." CreationDate="2017-08-25T10:32:26.617" UserId="204" />
  <row Id="7261" PostId="3064" Score="1" Text="Very well thought out. Nicely worded answer. Too bad that the OS designers were naive or optimistic, but that goes for almost all products and systems in existence." CreationDate="2017-08-25T14:27:42.117" UserDisplayName="user737" />
  <row Id="7267" PostId="3064" Score="0" Text="@nocomprende “Those who do not understand Unix are condemned to reinvent it, poorly.”" CreationDate="2017-08-25T19:01:44.620" UserId="204" />
  <row Id="6458" PostId="3065" Score="0" Text="The problem with this metaphor is apparent in your answer. You are doing all of your reasoning in the metaphor. Therefore if there is a problem in the metaphor there will be a problem in your reasoning. This leads to false conclusions." CreationDate="2017-08-02T11:00:33.723" UserId="204" />
  <row Id="6466" PostId="3065" Score="0" Text="the only problem with the (biological virus) metaphor is that it leads to the wrong treatment. I don't like the computer metaphor ether. There primary function is not computing, it is modelling (modelling a calculator, a typewriter, a television, or something new), they do this not by calculating but by pattern matching (yes look at how the control unit, memory unit, ALU, etc. work)." CreationDate="2017-08-02T12:20:27.610" UserId="204" />
  <row Id="7260" PostId="3065" Score="0" Text="@richard Perhaps it would be better to un-do the metaphor then. NOT use the word 'virus', **say &quot;malicious program&quot;** instead. That is what it is. We thought that a metaphor would make things easier or more memorable, but if it gets in the way, rip it out and start with something that is literally true. (That's called an 'analogy', by the way. A metaphor is something that is *not* literally true. Truth is a good thing.)" CreationDate="2017-08-25T14:24:15.010" UserDisplayName="user737" />
  <row Id="6464" PostId="3067" Score="1" Text="I have never ran a virus scanner on my PC. I just follow the other thinks in your bullet list. My dad just does Secure architecture, as he is a complete novice. I phoned me the other day to tell me that his computer was infected with a virus. I asked him how he knew. He told me that the virus scanner told him (interesting as there is not one installed). I tracked the problem down in his web-browser history. He said that is it but I can get the “cleaner” to work, he had downloaded it, but because he did not know how to make it executable, it could not infect his machine. **It defaulted safe.**" CreationDate="2017-08-02T12:13:36.487" UserId="204" />
  <row Id="6482" PostId="3067" Score="0" Text="Well, we already know that people will be able to cause havoc like that. Every car system that gets connected to the internet, or has wireless connectivity at all is vulnerable, and folks like Ken Munro regularly demonstrate this." CreationDate="2017-08-02T17:22:31.143" UserId="2357" />
  <row Id="6469" PostId="3068" Score="0" Text="Wow. I hadn't thought of that. Would you mind expanding a bit on how I can explain this in a separate lesson about using CSS stylesheets?" CreationDate="2017-08-02T12:39:13.043" UserId="150" />
  <row Id="6471" PostId="3068" Score="0" Text="I would use an analogy. Automotive engineers don't choose car colors.  Screenwriters don't generally do costume design." CreationDate="2017-08-02T13:14:34.650" UserId="1564" />
  <row Id="6472" PostId="3068" Score="0" Text="I see. Maybe you should include such analogies in your answer by editing the answer." CreationDate="2017-08-02T13:34:22.400" UserId="150" />
  <row Id="6507" PostId="3068" Score="1" Text="Actually it is worse than that. At some large companies with an important web presence, there is a standards team sitting above both the content and layout teams. If the layout is one pixel off of the standard, you do it over. One pixel." CreationDate="2017-08-03T11:28:27.457" UserId="1293" />
  <row Id="6477" PostId="3070" Score="11" Text="I think faulty engineering is a likelier ethical concern than Skynet." CreationDate="2017-08-02T15:47:32.890" UserId="283" />
  <row Id="6488" PostId="3070" Score="0" Text="The BCS Code of Conduct might give some insight into this issue; http://www.bcs.org/upload/pdf/conduct.pdf" CreationDate="2017-08-02T19:52:22.633" UserId="2383" />
  <row Id="6492" PostId="3070" Score="9" Text="Speaking as a machine learning guy, I *wish* creating AIs was actually easy enough that a rogue programmer creating Skynet was a realistic concern." CreationDate="2017-08-02T21:03:33.773" UserId="827" />
  <row Id="6498" PostId="3070" Score="1" Text="I highly recommend &quot;Ethics and Technology: Controversies, Questions, and Strategies for Ethical Computing&quot; by Herman T. Tavani." CreationDate="2017-08-02T22:00:13.240" UserId="2386" />
  <row Id="6499" PostId="3070" Score="0" Text="Some good case studies, would be Uber (http://www.bbc.co.uk/news/business-36843386), Ashley Madison (The site itself, and the subsequent information disclosure), Encrypted Messaging vs National Security (http://www.express.co.uk/news/world/834597/WhatsApp-Facebook-removing-encryption-would-make-extremists-harder-track)" CreationDate="2017-08-03T08:04:26.700" UserId="1874" />
  <row Id="6536" PostId="3070" Score="0" Text="@nocomprende: as someone that survived lymphoma I really, really disagree with you." CreationDate="2017-08-03T16:47:59.290" UserId="2394" />
  <row Id="6542" PostId="3070" Score="0" Text="@nocomprende: I still believe that the question cannot be stated like that. Lack of food and water are about lack of social structures, such as Democracy, that establish societies where people's wellfare is guaranteed. The cure for diseases is a completely different thing. Of course you could argue that sciencific and technological development are only possible where those basic problems are already solved, but if they are, then we will not have to choose. I think that your dichotomy is not well put." CreationDate="2017-08-03T18:35:07.357" UserId="2394" />
  <row Id="6545" PostId="3070" Score="0" Text="Conversations like the above are appropriate in the classroom. https://chat.stackexchange.com/rooms/59174/the-classroom. Less so in comment streams." CreationDate="2017-08-03T20:00:39.123" UserId="1293" />
  <row Id="6481" PostId="3071" Score="3" Text="@nocomprende I don't disagree. I am reminded of the great wisdom of Dr. Ian Malcolm from _Jurassic Park_: &quot;Your scientists were so preoccupied with whether or not they could that they didn't stop to think if they should.&quot; People need to &quot;stop to think.&quot; Instilling that &quot;need&quot;: &quot;Ay, there's the rub.&quot;" CreationDate="2017-08-02T16:42:52.413" UserId="76" />
  <row Id="6528" PostId="3071" Score="0" Text="The only person I would trust is a madman who would rather voluntarily live in poverty than allow himself to be pressured. Well, since everyone else by definition can be pressured and bought to sneak in bad stuff in the code which therefore eradicates any trust." CreationDate="2017-08-03T14:19:10.687" UserId="1933" />
  <row Id="6535" PostId="3071" Score="0" Text="@nocomprende no idea what this &quot;Tao&quot; says or who he is. But there do definitely exist enough ways to pressure most people to stop trusting the concept &quot;trust&quot; altogether." CreationDate="2017-08-03T15:58:10.710" UserId="1933" />
  <row Id="6546" PostId="3071" Score="0" Text="@mathreadler. Even the *Road Warrior* world had *some* trust. You have to get to *Lord of the Flies* to go without it. But perhaps you only mean &quot;trust but verify&quot;.  Also, conversations to the classroom, please: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2017-08-03T20:04:17.303" UserId="1293" />
  <row Id="6490" PostId="3072" Score="0" Text="The link dose not go to a page that explains what a MyBlock is. I am assuming that it is just a way to define a your own block ( a procedure, what you ( and the C programming language ) are calling a function). But can you tell me what the distinction between external and not external." CreationDate="2017-08-02T20:59:40.667" UserId="204" />
  <row Id="6491" PostId="3072" Score="0" Text="@richard think of it as creating a DLL with one method in it, and then simply using that one method from the DLL, But not only once and more than one DLL. For that matter, external or not external doesn't really make a difference" CreationDate="2017-08-02T21:02:36.087" UserId="150" />
  <row Id="6494" PostId="3072" Score="0" Text="You are creating small programs with &lt;11year olds. And you want them to create multiple object files. And to see an advantage of this?" CreationDate="2017-08-02T21:06:45.673" UserId="204" />
  <row Id="6495" PostId="3072" Score="0" Text="@richard it's really a bit much to explain in comments if you're not familiar with the software or with Lego Mindstorms" CreationDate="2017-08-02T21:07:56.420" UserId="150" />
  <row Id="6485" PostId="3075" Score="4" Text="So the only ethical software is &quot;free&quot; software, where &quot;free&quot; is defined by Stallman's turgid GPL. I disagree." CreationDate="2017-08-02T19:27:10.570" UserId="2382" />
  <row Id="6486" PostId="3075" Score="0" Text="@JamesKPolk but not all Free Software is ethical. I have amended answer to address this. You are saying that because software A has some aspect of ethical then it **is** ethical. And You are thinking that I am saying that all Free software is ethical. It is not that simple." CreationDate="2017-08-02T19:49:03.080" UserId="204" />
  <row Id="6487" PostId="3075" Score="2" Text="@JamesKPolk The Free Software Definition defines what Free Software is. The GPL is but one implementation. You should give them a read, you will find that the language is very simple and short." CreationDate="2017-08-02T19:51:47.973" UserId="204" />
  <row Id="6501" PostId="3075" Score="1" Text="-1 if I could downvote on this site. This doesn't seem to have anything to do with ethical software." CreationDate="2017-08-03T08:15:48.373" UserId="675" />
  <row Id="6502" PostId="3075" Score="1" Text="Why would a disembodied brain have no empathy? Are you suggesting empathy comes from the liver or what? It's not a separate system that restricts the brain, it's part of the brain. Not that I'm saying it's a good idea trying to model a true artificial intelligence after the ridiculously flawed machine built by natural selection :)" CreationDate="2017-08-03T08:38:01.047" UserId="1816" />
  <row Id="6503" PostId="3075" Score="1" Text="@Luaan No I was thinking that empathy comes from your interaction with others. But I would leave it as a discussion for the students, to decide if they think I am correct." CreationDate="2017-08-03T09:37:27.053" UserId="204" />
  <row Id="6509" PostId="3075" Score="1" Text="@nocomprende https://www.youtube.com/watch?v=IHyH3MPgZDo" CreationDate="2017-08-03T11:40:06.073" UserId="204" />
  <row Id="6500" PostId="3076" Score="0" Text="You make it sound like paper voting somehow has less issues with trustworthiness. Technical solutions could theoretically improve trustworthiness (as you increase the number of people who would all need to be 'in on it'), but it's a very complex issue. Anyway, -1 if I could vote down on this site." CreationDate="2017-08-03T08:12:25.810" UserId="675" />
  <row Id="6504" PostId="3076" Score="0" Text="@DavidMulder So if I provide a system, for an election. It checks each voters ID. We could ensure anonymity by never ever ever, connecting it to a network after it has been used. However there is no way for the voters to know. Then it takes your vote, and reduces it to a count for each candidate. How will you as a candidate ensure that it does this correctly ( It could just make up the numbers, in favour of the candidate that it wants to win)." CreationDate="2017-08-03T09:42:21.533" UserId="204" />
  <row Id="6519" PostId="3076" Score="0" Text="@nocomprende it has already been solved for paper based system, but you may have improved it. However I see no need to use dollar bills: once country elects an untrustworthy precedent, the dollar bill would be as trust worthy as raffle tickets. But still an improvement, as it allows each voter to verify there part. The existing system focuses on the candidates and parties verifying the system. Can you see why it is impossible to implement using a computer system?" CreationDate="2017-08-03T12:37:51.007" UserId="204" />
  <row Id="6520" PostId="3076" Score="0" Text="While the answer has some merit in the context of the question (for example as a teaching aid to show layers of complexity for the use case of electronic voting systems), I would be *really* reluctant to make the  absolute claim that it is prinicipally impossible. Cryptography gives us tools similar to the pen&amp;paper, anonymous envelops, tokens, booths...; without having really analyzed it, I could see possible solutions. Obviously, part of it would be that local machines (+ their software) would be assumed to be compromised, and such compromising must be detected by the &quot;crypto&quot; part." CreationDate="2017-08-03T13:09:20.217" UserId="652" />
  <row Id="6521" PostId="3076" Score="0" Text="@AnoE because you can not trust or audit the computer, you need end to end checking (crypto). Now get this to work with anonymity and inability to show how you voted. The some solutions video talks about these, but I see problems with all of the solutions (and I am to that clever). This is without having to resort to “How does my mum verify a cryptographic hash by hand (because she dose not trust the computer).”" CreationDate="2017-08-03T13:23:54.213" UserId="204" />
  <row Id="6522" PostId="3076" Score="0" Text="@richard: my point is not that I have outlined a working electronic voting system in a SE comment. ;-) My point is that is incredible hard to argue that &quot;solving XYZ is not possible and will never be possible&quot;. It is absolutely fine to argue that todays solution to XYZ suffer problems A, B, C and that nobody has yet found a working solution, but your answer seems to say that it is theoretically and in all principles impossible to solve the problem." CreationDate="2017-08-03T13:30:29.500" UserId="652" />
  <row Id="6537" PostId="3076" Score="0" Text="@AnoE My point is that no implementation can ever be found, because the way it is implemented is impossible. You can be a black box analysis of the requirements. The requirements contradict: Actually the real requirements are very hard, and only just possible, but if you say that you must have a computer, you add an implied requirement that no one can observe. With this no requirement there becomes a contradiction." CreationDate="2017-08-03T17:27:35.357" UserId="204" />
  <row Id="6539" PostId="3076" Score="0" Text="@AnoE  I just looked up homomorphic encryption, just to see what it was, because there is a clam that this solves the E-voting problem. I predicted that it must have the property of “whoever can read the result, can find out who you voted for”, for it to do what it was claimed to do. I don't understand the math of the fully homomorphic systems, but their usage manuals confirmed my fear. It does not matter what happens in the box, it must have these properties, therefore in is of no use in implementing an E-Voting system. It looks like it may have other uses though." CreationDate="2017-08-03T17:32:34.360" UserId="204" />
  <row Id="7356" PostId="3076" Score="0" Text="Since my lost comment on this, I heard a talk by a women that has her Phd + in electronic voting systems, she has several **mathematical proofs** that they can not do what they need to do. One of her colleges invited a group of “young people” to hack some real voting machines (manufacturers claimed 100% secure, and trustworthy) , in a 1 or 2 week session. She was sceptical that there would be time, to find any thing. First exploit found in two minutes. All compromised by end of exercise. Could be that all current systems, are made by cowboys. But see proofs, or linked video for general case." CreationDate="2017-08-27T12:13:45.850" UserId="204" />
  <row Id="8817" PostId="3076" Score="0" Text="I'm not seeing why this fits under &quot;*ethical practices*&quot;." CreationDate="2017-10-27T19:31:04.463" UserId="1219" />
  <row Id="8818" PostId="3076" Score="0" Text="@Peter Taylor Is it ethical to have the people use voting systems, that do not do what they say they do. That do not do what the voting laws say they must do." CreationDate="2017-10-27T19:55:30.823" UserId="204" />
  <row Id="6489" PostId="3077" Score="0" Text="1, 2 and 3 are superb. Really useful. (Might even make my regex skills better)" CreationDate="2017-08-02T20:14:00.430" UserId="150" />
  <row Id="6493" PostId="3078" Score="0" Text="MyBlocks aren't like functions in that way. You need to reuse the tool for creating them if you want to make a change. That's why I didn't want much to do with the functions analogy, because it isn't such a good one. Also, what does &quot;teaching skills&quot; mean? Not quite sure I understand" CreationDate="2017-08-02T21:05:56.453" UserId="150" />
  <row Id="6496" PostId="3078" Score="0" Text="May be the kids are right, may be it is better not to use them. I said “teacher skills”, to mean that after that you carry on being a teacher, but it is outside the scope of the question. I would probably respond to the question with a question, to try to lead them to using the MyBlocks." CreationDate="2017-08-02T21:16:09.607" UserId="204" />
  <row Id="6513" PostId="3078" Score="0" Text="Can you give an example of what kind of program would have this feature?  I don't understand what you're saying in this answer." CreationDate="2017-08-03T12:08:07.967" UserId="27" />
  <row Id="6516" PostId="3078" Score="0" Text="@BenI. If you cut and paste, then choose to change the code, then you have to change every copy." CreationDate="2017-08-03T12:29:26.270" UserId="204" />
  <row Id="6505" PostId="3083" Score="0" Text="This is incredible. Wow." CreationDate="2017-08-03T11:19:05.690" UserId="150" />
  <row Id="6511" PostId="3083" Score="0" Text="Well, make it credible then." CreationDate="2017-08-03T12:05:48.663" UserId="2389" />
  <row Id="6514" PostId="3083" Score="0" Text="It's incredible becase it solves a problem with circumstances that I can't disclose (school stuff), but it doesn't **exactly** address the question..." CreationDate="2017-08-03T12:10:19.590" UserId="150" />
  <row Id="6523" PostId="3083" Score="1" Text="Oh, and I'm meddling in the discussion as not a teacher but an IT professional - what I described is why things are done in practice just like the theory you want to teach says :)" CreationDate="2017-08-03T13:35:15.863" UserId="2389" />
  <row Id="7732" PostId="3084" Score="0" Text="@Buffy This question and its answers is intended to help my colleagues in other subjects, that have been asked by the higher powers, to include computing in their lessons. I have made some improvements, to make this more clear." CreationDate="2017-09-01T13:56:01.300" UserId="204" />
  <row Id="6645" PostId="3085" Score="0" Text="Great answer, as well as absolutely hilarious - +1" CreationDate="2017-08-06T17:50:14.453" UserId="919" />
  <row Id="6529" PostId="3086" Score="0" Text="What materials and resources do you have (e.g. motors, sensors etc.)" CreationDate="2017-08-03T14:36:51.790" UserId="150" />
  <row Id="6531" PostId="3086" Score="0" Text="The school hasn't bought anything yet, so I can use anything that isn't outrageously expensive." CreationDate="2017-08-03T15:07:16.313" UserId="58" />
  <row Id="6532" PostId="3086" Score="0" Text="I see. hehe *starts formulating an answer*" CreationDate="2017-08-03T15:10:34.910" UserId="150" />
  <row Id="6533" PostId="3086" Score="0" Text="@ItamarG3 Also you could do some fun stuff with non-uno boards like the primo (wifi, BLE, NFC, IR, etc.) or yun (runs openwrt linux distro) or mega (sooo many pins)." CreationDate="2017-08-03T15:16:27.883" UserId="58" />
  <row Id="6530" PostId="3088" Score="1" Text="@nocomprende: absolutely. Not only the Web, but the Internet as a whole. I was active in Fidonet, Usenet etc.; one day DejaNews, then Google, just slurped in the whole Usenet history, for eternity. Before that, Usenet was kind of temporary. That was kind of *the* eye opener for me; before that nobody gave a d*mn about what they posted (private information, etc.); afterwards not so much. If I check Google Groups now, I easily find all my post history from the early 90's, including real names, mail addresses, phone numbers in the signature and such things...)." CreationDate="2017-08-03T14:52:47.190" UserId="652" />
  <row Id="6524" PostId="3089" Score="0" Text="Thanks for the answer! I'd really like to have something that the students (who have little to no experience) can wire themselves, but an LCD display is a great idea also." CreationDate="2017-08-03T13:44:23.027" UserId="58" />
  <row Id="6526" PostId="3089" Score="1" Text="The important thing NOT to do is sending ANY &quot;high&quot; (non-zero-voltage) signals to the display before it is powered properly. Especially keeping any pin &quot;high&quot; and then switching on can let the smoke out." CreationDate="2017-08-03T14:03:35.673" UserId="2389" />
  <row Id="6538" PostId="3090" Score="0" Text="You seem to be contradicting your bold statement (I noticed the pun). If I understood correctly, you are saying that *because of the serious dangers that unethical IT workers might pose*, they **shouldn't** be taught not to do those things? Even if one cannot &quot;foresee&quot; the ethical implications work might have, I doubt it will ever be considered ethical to disclose secret information which leads to **direct** harm to others. That can be taught, and [You don't need the gift of foresight](http://www.quotes.net/mquote/120399) to know what sort of ethics would be useful for your students." CreationDate="2017-08-03T17:31:56.737" UserId="150" />
  <row Id="6543" PostId="3090" Score="0" Text="@ItamarG3 The point is that *teaching* (and thereby to some extent *&quot;defining&quot;*) ethics is not sensibly possible in a CS course. Regarding your example: Disclosing information that may harm others could be &quot;OK&quot; if the &quot;other&quot; person is a terrorist who plans an attack. Whether this is unethical can neither sensibly be discussed here nor in a CS course. On the other hand, what you **can** teach is, for example: **Which** measures may prevent unauthorized access to personal data, or which pieces of information can be combined in order to identify someone, from a purely technical point (...cont'd)" CreationDate="2017-08-03T18:52:55.373" UserId="2393" />
  <row Id="6544" PostId="3090" Score="0" Text="(also @nocomprende ) : To **judge** whether something is ethical/unethical, right/wrong, good/evil depends on the context. Although you can [define a motto, like Google did](https://en.wikipedia.org/wiki/Don%27t_be_evil), this won't mean anything. Although there certainly is some consensus about what is &quot;right&quot; or &quot;wrong&quot; (regarding WW2, most people will call it &quot;wrong&quot;), **teaching** this is totally unrelated to the contents of basic CS courses. Or another summary: You should not teach *ethics*, but the (technical) points of the work that may have *implications* for ethics." CreationDate="2017-08-03T18:57:51.750" UserId="2393" />
  <row Id="6547" PostId="3090" Score="0" Text="Let me suggest that ethics isn't an infinite set of &quot;rules&quot;: if A then B, but a set of principles and dispositions to act in a certain way. Physicians have been trained &quot;Do no Harm&quot; for quite a long time, though the quote is attributed to Florence Nightingale. Too many rules: yes - don't even try. Infinitely applicable principles: yes" CreationDate="2017-08-03T20:10:25.723" UserId="1293" />
  <row Id="6554" PostId="3090" Score="2" Text="&quot;... assuming that the students are in their 20's: It's too late. You will not convert an (ethically) &quot;bad&quot; person into an (ethically) &quot;good&quot; person...&quot; This assertion is [not supported by the research](https://www.scu.edu/ethics/ethics-resources/ethical-decision-making/can-ethics-be-taught/) about ethics and morality. We don't even seriously *start* developing a cohesive moral perspective until our 20s, and this process continues well into our 30s.  The very late teens and the early 20s are prime time in the brain for discussing moral and ethical action." CreationDate="2017-08-04T04:43:30.960" UserId="27" />
  <row Id="6564" PostId="3090" Score="1" Text="@BenI. It's not tooo surprising that the ethics department of a university claims that ethics can be tought ;-) But that's not the point. The point is rather that this ethics department will not teach the students that ethical implications can be modeled with binary logic on NAND gates. One could blatantly say: &quot;That's off-topic&quot;. Again: CS students should be aware of their responsibility and how their work may affect the lifes of others. But trying to *teach* them what is &quot;right&quot; or &quot;wrong&quot; (and for which reason) seems pointless for me, as these are subjective, open-ended discussions." CreationDate="2017-08-04T12:51:49.483" UserId="2393" />
  <row Id="6581" PostId="3090" Score="0" Text="@nocomprende The trolley example is *very* obvious, and I referred to it in the answer. There are dozens of examples that are similarly (although not so obviously) subtle. To put it that way: The CS/engineer will not decide about the track that the trolley will take, but he will have to make sure that there is a lever to switch the track in the first place, and be aware that, if this lever does not work, something will happen what *others* defined to be ethically wrong (regardless of what this is)." CreationDate="2017-08-04T21:10:39.100" UserId="2393" />
  <row Id="6552" PostId="3092" Score="2" Text="Actually the example you give has some legs. Go to a laundry and do some things in parallel. Also bottlenecks occur (no available dryers - curses). And travel is added at a couple of points. Even the old &quot;peanut butter sandwich&quot; algorithm example with one person vs (say) four. Better yet, let the students suggest analogies and examine them for faithfulness." CreationDate="2017-08-04T01:08:05.440" UserId="1293" />
  <row Id="6553" PostId="3092" Score="0" Text="@Buffy I wasn't objecting to the laundry analogy, just looking for additional ones. Asking for ones from students is a good idea." CreationDate="2017-08-04T01:09:19.287" UserId="283" />
  <row Id="6830" PostId="3092" Score="0" Text="Isn't optimising the last 2 stages just an analogy for cache?" CreationDate="2017-08-09T18:01:34.753" UserId="41" />
  <row Id="6556" PostId="3095" Score="1" Text="Welcome to [cseducators.se]! This is certainly an interesting question, and quite unlike any we've had here." CreationDate="2017-08-04T09:18:11.547" UserId="150" />
  <row Id="6557" PostId="3095" Score="0" Text="Thanks, I meant to say if this is maybe too debatey or unclear just remove and I won't post questions like it again! I just think it's interesting/important" CreationDate="2017-08-04T09:18:56.577" UserId="2329" />
  <row Id="6558" PostId="3095" Score="1" Text="If you still feel it might be too, as you put it, debatey, then by all means [Join me in our guidance Office (chatroom)](https://chat.stackexchange.com/rooms/60468/the-guidance-office). I may have some ideas for improvement on the site" CreationDate="2017-08-04T09:20:14.277" UserId="150" />
  <row Id="6560" PostId="3095" Score="2" Text="I've voted to close this question as primarily opinion based. If you have questions, I'll be in the Guidance Office. Please remember that closure is **not** the end of the line, it's a way to shelter questions so they can be improved." CreationDate="2017-08-04T10:52:03.923" UserId="58" />
  <row Id="6737" PostId="3095" Score="0" Text="Why no mention of engineering?" CreationDate="2017-08-08T07:26:03.280" UserId="1219" />
  <row Id="7926" PostId="3095" Score="0" Text="I doubt this is specific to computer science. It is relevant to any science like physics or biology. The question should be moved." CreationDate="2017-09-10T11:27:07.277" UserId="160" />
  <row Id="8773" PostId="3095" Score="0" Text="@beroal moved to where??? Where would be a more appropriate place? Is there a learning stack? - or maybe a meta stack?" CreationDate="2017-10-19T13:38:03.777" UserId="2329" />
  <row Id="8785" PostId="3095" Score="0" Text="@seanyt123: Well, there is a proposal for Science Educators https://area51.stackexchange.com/proposals/113414/science-educators .You may want to support it. There is also Mathematics Educators https://matheducators.stackexchange.com/ ; your question is about mathematics too." CreationDate="2017-10-20T18:13:57.363" UserId="160" />
  <row Id="6563" PostId="3098" Score="0" Text="Debate is welcome, but only when the participants are calm and respectful of each others beliefs. Please keep the tone calm and respectful; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/63319/discussion-on-answer-by-buffy-should-students-be-taught-to-be-first-and-foremost). Any further comments which are not _directly_ suggesting improvements to the answer will be deleted." CreationDate="2017-08-04T10:56:56.500" UserId="58" />
  <row Id="6574" PostId="3098" Score="0" Text="Well, from my experience as a Physics student, it does give some thinking skills which have proved relevant." CreationDate="2017-08-04T18:10:12.757" UserId="150" />
  <row Id="6576" PostId="3105" Score="5" Text="One thing you might do is show the video by Bret Victor called, &quot;The Future of Programming&quot; to show what has NOT changed since 1968 - our attitudes towards programming and what computers can do." CreationDate="2017-08-04T18:36:16.660" UserDisplayName="user737" />
  <row Id="6582" PostId="3105" Score="15" Text="Can I play devil's advocate here for a second: why do you need to convey this at all?" CreationDate="2017-08-04T21:26:39.193" UserId="2068" />
  <row Id="6590" PostId="3105" Score="2" Text="[Obligatory python sketch](https://www.youtube.com/watch?v=Xe1a1wHxTyo)." CreationDate="2017-08-05T01:36:18.140" UserId="1538" />
  <row Id="6591" PostId="3105" Score="6" Text="@KevinWorkman I don't *need* to, but I want to share my sense of wonder. Also, I teach computer architecture, where Moore's Law is part of the curriculum." CreationDate="2017-08-05T02:14:56.673" UserId="283" />
  <row Id="6596" PostId="3105" Score="7" Text="One thing is to look at the TOPS-100 list and see what is the last year your desktop PC would qualify as a supercomputer… and how few more years when it exceeds the sum of all supercomputers in operation." CreationDate="2017-08-05T06:17:14.617" UserId="1116" />
  <row Id="6618" PostId="3105" Score="1" Text="It wasn't too long ago that your current cell phone would be high on the TOPS-100 list of multi-million dollar supercomputers." CreationDate="2017-08-05T18:42:59.720" UserId="59" />
  <row Id="6670" PostId="3105" Score="2" Text="This article in the New York Times speaks about the computers on board the Voyager Spacecraft from 1977: https://www.nytimes.com/2017/08/03/magazine/the-loyal-engineers-steering-nasas-voyager-probes-across-the-universe.html. They are now billions of miles from earth and still operational. Their power is a tiny fraction of that of a smartphone. The article is mostly about the engineers who have maintained and programmed them remotely since before launch." CreationDate="2017-08-06T23:34:45.547" UserId="1293" />
  <row Id="6671" PostId="3105" Score="1" Text="I often feel that &quot;sense of wonder&quot; when reading stories about some old software explaining why it was made the way it was. All those clever tricks the developers used because their system (sooo revolutionary at the time!!) had only that much memory, could access only one-quarter of it simultaneously, had to share it between the data and the picture, which could have 16 colors, but only 5 of them at once, and couldn't do floating point arithmetic because it was too slow. Not as grandiose as TFLOPS super-computer or Apollo missions, but perhaps easier to grasp?" CreationDate="2017-08-07T01:24:12.107" UserId="2440" />
  <row Id="6698" PostId="3105" Score="1" Text="Show them an early MUD and explain it was the World Of Warcraft of the day and playing all day would cost hundreds of pounds and really annoy your parents as it was all on dial-up.  Or David Braben rewriting Elite overnight as he found a way to save a couple of bytes of memory." CreationDate="2017-08-07T15:48:37.837" UserId="1234" />
  <row Id="6703" PostId="3105" Score="0" Text="Estimate the power of a computer as number of cores x frequency x amount of main memory. Represent the power of e.g. a PDP-9 as one square mm. Compare it to the area for a recent phone and a super computer. Hint think area of countries." CreationDate="2017-08-07T16:26:11.500" UserId="2454" />
  <row Id="6716" PostId="3105" Score="3" Text="You don't even need to go back to the 60s to get that sense of wonder.  Just the other day, I noticed that one of the research machines was almost out of memory; it only had 400 MB free.  I literally stopped in awe for a few minutes after realizing what I was thinking of as &quot;almost no memory&quot;: that was the size of my first computer's *hard drive*." CreationDate="2017-08-07T21:10:51.253" UserId="827" />
  <row Id="6720" PostId="3105" Score="3" Text="@Ray - You must be pretty young yourself. My first hard drive had 20 Meg. (and that was for a multiuser system for me &amp; my evil twin to share, connected to 80x25 green screens and a dot-matrix printer). It took a few more years for me to get to 400 Meg." CreationDate="2017-08-07T22:15:34.970" UserId="2460" />
  <row Id="6732" PostId="3105" Score="0" Text="Simple hasn't changed sense the 50s with work of gilbert, goddel, church, and perhaps turing. Every thing else is non functional and opinionated. Especially reguarding computational power." CreationDate="2017-08-08T04:45:25.297" UserId="2430" />
  <row Id="6733" PostId="3105" Score="0" Text="As my answer has been closed so should all of these because they discuss various mechanisms that computational mechanisms are validated which has been deemed unrelated." CreationDate="2017-08-08T04:47:05.117" UserId="2430" />
  <row Id="6754" PostId="3105" Score="0" Text="@EllenSpertus depending on what you do in your course, perhaps give them an exercise where they can only use 48k of memory. I don't know how much of your course is applied mechanics vs theory, but having them either make a program that uses &lt;48k of memory or perform calculations on specific design to assess cycles and reveal that &quot;you couldn't even do that in 1968!&quot;. What usually helps people conceptualize differences is performing the comparison one's self." CreationDate="2017-08-08T15:01:57.987" UserId="2186" />
  <row Id="6755" PostId="3105" Score="0" Text="@EllenSpertus also, try compare code practices from then and now. One of my teachers a while ago learned to code in the mid-70's and it showed; his code had short variable names because when he was learning, they had to save drive and memory space. i.e. his code would have `int a = 0; ... if (a-- &lt; 0) { ... }` whereas now we ***should always use descriptive variable names*** and would change it to `int userInputForProcessA = 0; ... if (userInputeForProcessA-- &lt; 0) { ... }`. That variable name is 21x longer! Imagine not being able to do that because the computer literally couldn't store it all." CreationDate="2017-08-08T15:12:09.677" UserId="2186" />
  <row Id="6765" PostId="3105" Score="1" Text="@manassehkatz Congratulations for being older than some other random person on the internet, I guess?" CreationDate="2017-08-08T19:45:25.507" UserId="869" />
  <row Id="6769" PostId="3105" Score="2" Text="@sgroves In a sense, that's about it - bragging rights for how long I've been in the business. But there is more - it isn't just that many years ago we had computers with only 20 Meg., etc. It is that we did a LOT with those computers. Today it is assumed that you &quot;need&quot; megabytes of RAM &amp; gigabytes of hard drive to run multiple processes, but more than 30 years ago that was common on a desktop computer with 1/2 Meg. of RAM and 20 Meg. hard drive, and years before that on room-filling mainframes with even less RAM &amp; storage. Programmers (myself included) have gotten lazy thanks to Moore's law." CreationDate="2017-08-08T20:37:35.887" UserId="2460" />
  <row Id="6802" PostId="3105" Score="1" Text="@manassehkatz Programs today need to do much much more than back then.  It is not lazy programmers - it is how much you get from  X lines of code has changed." CreationDate="2017-08-09T12:01:45.867" UserId="1213" />
  <row Id="6577" PostId="3106" Score="8" Text="Actually, sneaker-netting disk drives is still sometimes the fastest data transmission protocol." CreationDate="2017-08-04T18:48:25.647" UserId="1293" />
  <row Id="6578" PostId="3106" Score="0" Text="Yeah, I get that @Buffy, but how many kids will understand that?" CreationDate="2017-08-04T19:06:17.000" UserId="65" />
  <row Id="6579" PostId="3106" Score="4" Text="Since you mentioned paper specifically: https://xkcd.com/1162 Be sure to hover the mouse to read the title text." CreationDate="2017-08-04T19:23:32.223" UserId="1293" />
  <row Id="6585" PostId="3106" Score="2" Text="I remember reading a (Heinlein?) novel in which astrogators used slide rules on space craft." CreationDate="2017-08-05T00:53:24.463" UserId="283" />
  <row Id="6593" PostId="3106" Score="1" Text="Slipstick Libby was the most famous Heinlein astrogator to use a sliderule, featured in the various Lazarus Long novels and short stories. The use of sliderules for rapid computations was stock in trade for Heinlein juveniles and early adult fiction. I chuckle to think I was probably the last person in my highschool to use a slide rule for my final physics exam. I like to show a progression, starting with 8k of ferrite core memory (about 1 square foot), then 8k of static RAM, then 8k of dynamic RAM, then various increments until I show a current generation SSD." CreationDate="2017-08-05T03:20:49.893" UserId="1537" />
  <row Id="6665" PostId="3106" Score="2" Text="Why wouldn't sneaker-netting and *re-typing* programs have seemed silly to anyone in 1966 who used a teleprinter like the ASR33?  Rather than only printing to human-readable paper, an ASR33 could simultaneously punch a paper tape, which could then be automatically read, at a rate of 10 characters/second, by another ASR33 at the destination." CreationDate="2017-08-06T21:36:47.667" UserId="2073" />
  <row Id="6694" PostId="3106" Score="7" Text="Forget 1966. Look at the average &quot;enthusiast&quot; home computing magazine of, say, 1986. You'd get whole listings, usually in BASIC (with or without machine code interspersed), for games; usually a few different variants for different computers. (So you might get ones for the same game for, say, C-64, IBM PC, and maybe one or two others.) Readers were actually expected to type those back in, just to play a game that we'd barely glance at today." CreationDate="2017-08-07T14:14:08.973" UserId="2451" />
  <row Id="6699" PostId="3106" Score="7" Text="@MichaelKjörling - In the late 70's-early 80's there used to be a minor industry of publishing books full of BASIC source code (mostly games) like cookbooks. I owned several of those. Of course BASIC is not particularly portable, and humans make typos. Getting the result running is how an entire generation of us learned programming." CreationDate="2017-08-07T16:04:38.087" UserId="1139" />
  <row Id="6741" PostId="3106" Score="0" Text="@Buffy That XKCD is even funnier if you know what [Knuth's up-arrow notation](https://en.wikipedia.org/wiki/Knuth%27s_up-arrow_notation) is. (At least, I assume it's still funny if you don't know.)" CreationDate="2017-08-08T09:17:08.700" UserId="1538" />
  <row Id="6742" PostId="3106" Score="0" Text="@G.Ann-SonarSourceTeam &quot;Yeah, I get that Buffy, but how many kids will understand that?&quot; Depends how old they are and how interested they are. Don't underestimate what 'kids' can understand though. If all else fails, compare it to the difference between mailing someone a book one page at a time and driving over to hand-deliver the book to them." CreationDate="2017-08-08T09:22:41.017" UserId="1538" />
  <row Id="13131" PostId="3106" Score="1" Text="In &quot;the moon is a harsh mistress&quot;, when you do the math on Mike's &quot;neuristors&quot; to computer his storage capacity, it was a little more than 5 megabytes." CreationDate="2018-08-04T02:32:36.507" UserId="1537" />
  <row Id="6592" PostId="3108" Score="33" Text="If an image helps, [here is a 5mb hard drive](https://i.redd.it/7250uumu9tvx.jpg) in 1956 being loaded on to a truck." CreationDate="2017-08-05T02:18:47.883" UserId="1784" />
  <row Id="6594" PostId="3108" Score="2" Text="And here is a 5MB drive being loaded into an airplane in 1956 (same drive?) https://www.reddit.com/r/pcmasterrace/comments/2xtxpb/a_5_megabyte_ibm_hard_drive_being_loaded_into_an/  https://i.imgur.com/m1cndmB.png" CreationDate="2017-08-05T05:20:14.150" UserId="950" />
  <row Id="6597" PostId="3108" Score="0" Text="Hmm, I thought I saw a TerraFLOP board the size of a pingpong table at SIGGRAPH ’92 or so.  That’s a better comparison against a GPU board." CreationDate="2017-08-05T06:19:30.790" UserId="1116" />
  <row Id="6603" PostId="3108" Score="31" Text="If you want to go a bit further back, I like to compare with the iconic Cray-1, the worlds' faster computer as of 1976, which produced a stunning 160 MFLOPS, weighed over 5 tonnes, cost \$8 million, and used enough power that it had to be liquid cooled in a fluorinated refrigerant.  Which we can compare with the Raspberry Pi Zero, which fits across the fingers of your hand, costs \$8, is more than 10 times as fast, and has 32 times as much memory, and doesn't even need a heatsink to cool." CreationDate="2017-08-05T12:36:43.660" UserId="848" />
  <row Id="6682" PostId="3108" Score="11" Text="@BruceWayne When that pic was posted to Imgur a while ago, someone joked that the size was because it contained a midget with a chisel and a supply of stone tablets. The mindblowing part is that 5MB is such a low number that would actually work." CreationDate="2017-08-07T08:54:23.413" UserId="1142" />
  <row Id="6688" PostId="3108" Score="0" Text="@JollyJoker what do you mean that would actually work? Five million characters is more than enough for most things anyone would want to do in 1956." CreationDate="2017-08-07T13:10:49.033" UserId="2448" />
  <row Id="6690" PostId="3108" Score="2" Text="@OrangeDog Say each tablet is the size of an iPad. Half a cubic meter can hold a thousand of those. 2500 bytes per side should be easily doable for the midget with a chisel." CreationDate="2017-08-07T13:57:10.223" UserId="1142" />
  <row Id="6691" PostId="3108" Score="0" Text="@JollyJoker oh right, that the chisel would work. I thought you meant the actual hard drive." CreationDate="2017-08-07T13:58:18.293" UserId="2448" />
  <row Id="6692" PostId="3108" Score="0" Text="@OrangeDog I suspect the hard drive had some advantages over stone tablets. Although a few hundred midget-boxes would be enough for a movie, I guess playback would be problematic. Laser pointers? ;)" CreationDate="2017-08-07T14:06:04.680" UserId="1142" />
  <row Id="6693" PostId="3108" Score="1" Text="@JollyJoken Why would anyone spend millions on a computer just to play a movie when we have perfectly good film (which even now is usually of higher quality)?" CreationDate="2017-08-07T14:08:15.013" UserId="2448" />
  <row Id="6712" PostId="3108" Score="1" Text="Really, the GPU can only compare to the 2008 server rack if you use it for very SIMD-friendly tasks. Of course, much of the stuff that used to be, and still is, done on supercomputers _is_ actually such straightforward number-crunching, but arguably, most _interesting_ problems are not. A comparison involving phones or Raspberry Pi Zeroes is thus IMO more relevant." CreationDate="2017-08-07T19:43:54.223" UserId="1157" />
  <row Id="20980" PostId="3108" Score="0" Text="_&quot;Extrapolating from that back another 20 years only gets you to 1978&quot;_ People are notoriously bad at mentally graphing an exponential curve. You generally can't rely on the power of extrapolation here as people are liable to assume a linear progression or vastly underestimate the curve over an elongated period." CreationDate="2023-02-14T03:58:10.133" UserId="2164" />
  <row Id="6586" PostId="3112" Score="2" Text="We are near the Computer History Museum, where they have a difference engine." CreationDate="2017-08-05T00:53:54.263" UserId="283" />
  <row Id="6589" PostId="3112" Score="0" Text="@EllenSpertus Make it an anual thing ASAP. One of the biggest disappointments I had with my college was the lack of attempts to take us on field trips or get people from the computing industry in to talk to us." CreationDate="2017-08-05T01:34:30.670" UserId="1538" />
  <row Id="6705" PostId="3112" Score="0" Text="For me, comparing machines from a few years ago gives the best impression of how things have changed (not just the raw numbers), both in terms of battery size, and speed if you're using smartphones." CreationDate="2017-08-07T16:34:15.113" UserId="41" />
  <row Id="6695" PostId="3114" Score="0" Text="I don't think you even need to compare to a &quot;smartwatch&quot; (whether those really count as &quot;smart&quot; is a different discussion, but I digress). Just compare it to a typical digital watch. If you want to get fancy, compare it to one with a calculator, such as those that were popular around 1990s-ish." CreationDate="2017-08-07T14:18:18.420" UserId="2451" />
  <row Id="6735" PostId="3114" Score="0" Text="I disagree you can never get them to &quot;feel&quot; the wonder.  But you don't do it by talking, that's true.  As a student, you learn it by painstakingly following through algorithms by hand." CreationDate="2017-08-08T05:26:56.603" UserId="1103" />
  <row Id="6583" PostId="3115" Score="2" Text="Welcome to [cseducators.se], Katie.  I hope we hear more from you going forward!" CreationDate="2017-08-04T23:18:28.013" UserId="27" />
  <row Id="6604" PostId="3115" Score="0" Text="Is there anything especially good in print form? Especially for an experienced OOP developer." CreationDate="2017-08-05T13:31:38.850" UserId="1293" />
  <row Id="6610" PostId="3115" Score="0" Text="@kateiOS Thank you for this response. That guide is _exactly_ the resource I was looking for. I added information to your post to make it more self-contained on the site here. I echo Ben's comment: welcome and hope to see more from you in our CS Ed community!" CreationDate="2017-08-05T16:48:18.953" UserId="76" />
  <row Id="6587" PostId="3116" Score="0" Text="Even if my phone is a decade old brick?" CreationDate="2017-08-05T01:07:53.513" UserId="1538" />
  <row Id="6595" PostId="3116" Score="7" Text="@Pharap Yes, even if your phone is a decade old brick. I daresay the $0.50 microcontroller in an Arduino is more powerful than the AGC, though not as radiation-proof." CreationDate="2017-08-05T05:40:06.573" UserId="1275" />
  <row Id="6643" PostId="3116" Score="4" Text="@Pharap The original Game Boy (the old grey brick) had 2x more processing power than the Apollo Guidance Computer.  Of course, the Apollo computer was designed around triply redundant circuits, so perhaps you might have to duct tape 3 Game Boys together in order to beat out the AGC." CreationDate="2017-08-06T17:45:34.673" UserId="812" />
  <row Id="6675" PostId="3116" Score="1" Text="@immibis [This](https://www.bunniestudios.com/blog/?p=3554) article state even the lowly microSD have more performance than an Arduino" CreationDate="2017-08-07T02:35:38.860" UserId="1649" />
  <row Id="6601" PostId="3118" Score="4" Text="Completely agree. OP makes it look like technology during the life of its students hasn't progressed anymore. Trying to place himself in a elitary position of &quot;I was the only one seeing the evolution &quot;" CreationDate="2017-08-05T11:15:29.347" UserId="2409" />
  <row Id="6713" PostId="3118" Score="0" Text="FYI: Even if your mother's old Mac was a PowerPC, it possibly would have supported dual boot, which doesn’t have to do much with computing power." CreationDate="2017-08-07T19:55:18.263" UserId="1633" />
  <row Id="6714" PostId="3118" Score="1" Text="@idmean sure, yeah, I just meant that the chromebook - a simpler, lower memory computer that's pretty small, light, and cheap - can do a lot." CreationDate="2017-08-07T20:01:35.943" UserId="919" />
  <row Id="6783" PostId="3118" Score="1" Text="@FezVrasta FYI, OP is a she and never said technology hasn't progressed in students' lifetimes. Moore's Law didn't end when they were born." CreationDate="2017-08-09T01:29:15.090" UserId="283" />
  <row Id="13147" PostId="3118" Score="0" Text="Interesting. I've never been to a museum for computers, or even featuring them in an exhibit. Short of the real &quot;Ancients of Days&quot; (i.e.: EDVAC &amp; ENIAC) and bleeding edge (for any time period) stuff like the CRAY series, I have been around samples from each generation while they were in daily use rather than &quot;on display&quot;. With a few exceptions, I've also programmed on a few machines from each, and repaired or maintained a few as well. Unfortunately for the question, I also don't have the sense of &quot;wonder&quot; about it. More like a natural growth similar to anything else that's &quot;always been there.&quot;" CreationDate="2018-08-10T02:13:07.557" UserId="104" />
  <row Id="19012" PostId="3118" Score="1" Text="The science museum in London is pretty great. Technology going back to Faraday's coil that he built to study magnetic induction 200 years ago." CreationDate="2022-01-15T18:41:23.517" UserId="5349" />
  <row Id="6588" PostId="3120" Score="1" Text="Nicely said.  And welcome to [cseducators.se]!" CreationDate="2017-08-05T01:25:18.527" UserId="27" />
  <row Id="6700" PostId="3120" Score="2" Text="Reminds me of a programme I used to watch where the end credit soundtrack was a download you could record onto tape and then load into your BBC B." CreationDate="2017-08-07T16:08:36.820" UserId="1234" />
  <row Id="6706" PostId="3120" Score="3" Text="@DarrenBartrup-Cook That's much cooler than the modern insistance of &quot;like us on facebook/follow us on twitter for reason X&quot;. In turn, that reminds me of a thing Valve did where they [encoded hidden images in sound files using SSTV](http://half-life.wikia.com/wiki/Portal_ARG#Sound_list)." CreationDate="2017-08-07T17:33:10.330" UserId="1538" />
  <row Id="6707" PostId="3120" Score="2" Text="I'm in the same boat as Pharap. The most potent example of change was one of my professors was telling me about what it was like when he went to college for CS. He was on a punchcard system and they only had one computer. So every student would fill out their punch card, get in a ten minute line, and if they messed up at all, they would have to go and do it all over. Assignments would take hours, just because of how much time they would spend waiting in line to use the computer." CreationDate="2017-08-07T17:54:43.573" UserId="1028" />
  <row Id="6739" PostId="3120" Score="1" Text="@EvSunWoodard my mum worked at Marconi and dropped a box of those punchcards - took hours to put back in the right order. Can also remember my dad bringing home a 30mb Winchester Hard Drive.  I swear they make cars smaller than that now." CreationDate="2017-08-08T08:03:07.293" UserId="1234" />
  <row Id="6599" PostId="3121" Score="0" Text="An interesting point." CreationDate="2017-08-05T07:30:51.160" UserId="150" />
  <row Id="6602" PostId="3122" Score="1" Text="Welcome to [cseducators.se]! That's an interesting point. If you could add more examples along the line of what you have (i.e. the scale growth), it would really make it into a much better answer." CreationDate="2017-08-05T11:52:09.013" UserId="150" />
  <row Id="6600" PostId="3123" Score="0" Text="... I like being able to scroll through the history of previously executed commands." CreationDate="2017-08-05T10:34:42.467" UserId="146" />
  <row Id="6628" PostId="3124" Score="1" Text="Normally I wouldn't think of a broad question as a _good_ question. In this case I do. It is too broad to answer without having options all over the place. There's no way to design a capstone course without knowing _much_ more about the path the student has taken to reach this point. The question seems to be asking for examples of designs (hopefully good ones) for a capstone course. I'm going to guess that you _mean_ how to evaluate a designed course to determine if it _is_ a good one. I.e.: criteria, not samples. I can't be sure, however, and had to VTC as too broad. :(" CreationDate="2017-08-06T05:15:31.623" UserId="104" />
  <row Id="6636" PostId="3124" Score="0" Text="Actually, I'm very happy with examples, provided they provide some background. I suspect that a reader of answers will get ideas from samples and use their own judgement about institutional fit. And caveats based on disaster evaluation is also good." CreationDate="2017-08-06T13:27:35.220" UserId="1293" />
  <row Id="6609" PostId="3125" Score="1" Text="Welcome to [cseducators.se]! While personal experience is sometimes useful, it wouldn't help the asker in this specific situation: The question asks about conveying an idea or point, and personal experience without much explanation is not enough. If you could edit your answer to expand on how it might be used to convey the idea to students, it would improve the answer's quality." CreationDate="2017-08-05T15:51:53.060" UserId="150" />
  <row Id="6612" PostId="3125" Score="0" Text="@ItamarG3: Better?" CreationDate="2017-08-05T17:22:54.193" UserId="1559" />
  <row Id="6613" PostId="3125" Score="0" Text="Considerably :)" CreationDate="2017-08-05T17:24:18.703" UserId="150" />
  <row Id="6608" PostId="3127" Score="0" Text="Welcome to CSEducators. Thanks for your answer. We hope to hear more from you." CreationDate="2017-08-05T15:50:58.293" UserId="1293" />
  <row Id="6615" PostId="3127" Score="0" Text="I'm not a good educator, I just have opinions and ideas on the topic of CS ;) Hopefully I'll have interesting ideas to share." CreationDate="2017-08-05T17:40:24.887" UserId="1223" />
  <row Id="6616" PostId="3127" Score="0" Text="@NikoNyrth Hmmm, not a _good_ educator. Some of us _official_ educators have to admit to that occasionally also. But we are welcome here too." CreationDate="2017-08-05T17:46:16.107" UserId="1293" />
  <row Id="6614" PostId="3128" Score="0" Text="Welcome to [cseducators.se]! Quite an interesting answer. I hope we'll be hearing more from you again." CreationDate="2017-08-05T17:25:40.823" UserId="150" />
  <row Id="6611" PostId="3129" Score="0" Text="Thanks for your answer and welcome to CSEducators. We hope you will contribute in the future as well." CreationDate="2017-08-05T17:15:38.170" UserId="1293" />
  <row Id="6617" PostId="3131" Score="1" Text="Welcome to [cseducators.se]! This is an interesting comparison. I hope we'll be hearing more great content from you." CreationDate="2017-08-05T18:42:18.150" UserId="150" />
  <row Id="6704" PostId="3131" Score="4" Text="And this is why we don't have interstellar craft (well, one reason...) - the same principle: if we left today and it took 40 years to get there, we could instead leave in 35 years time and it only take 3 years to get there." CreationDate="2017-08-07T16:28:02.407" UserId="2455" />
  <row Id="6744" PostId="3131" Score="2" Text="@freedomn-m this assumes that there will be a civilization capable of building an interstellar craft in 35 years time, so in this case it might be favourable to launch a craft now and get there in 40 years :)" CreationDate="2017-08-08T10:31:53.693" UserId="2471" />
  <row Id="6750" PostId="3131" Score="1" Text="The Human Genome Project is a real-life example for this phenomenon. What used to be the work of years can now be done in what? A few days?" CreationDate="2017-08-08T14:36:01.327" UserId="1675" />
  <row Id="6774" PostId="3131" Score="3" Text="@freedomn-m So, faster-than-light transportation technology is going to be invented within the next 35 years? Travel time in space has not experienced regular massive improvements like processor performance has. It took months to reach Mars in the 70s, it takes months to reach Mars today." CreationDate="2017-08-08T22:53:19.350" UserId="2477" />
  <row Id="6792" PostId="3131" Score="0" Text="@8bittree no, it's an allegory." CreationDate="2017-08-09T08:11:24.880" UserId="2455" />
  <row Id="6809" PostId="3131" Score="1" Text="@freedomn-m Strange allegory. The relative lack of improvement in travel time in space parallelizes the exponential growth in computing power? Space travel improvements like those in your comment will be brought about by *unpredictable*, revolutionary changes in propulsion, not by steady, evolutionary improvements like computers have enjoyed." CreationDate="2017-08-09T12:42:48.593" UserId="2477" />
  <row Id="6647" PostId="3132" Score="1" Text="This is too small for an answer but start by showing them why regular expressions are worth their time to learn.  I found when I was learning Regex, it was a horrid experience until I found use cases where they made my life easy enough to be worth the cost of learning." CreationDate="2017-08-06T18:31:24.447" UserId="812" />
  <row Id="6648" PostId="3132" Score="0" Text="@CortAmmon good point." CreationDate="2017-08-06T18:32:27.737" UserId="150" />
  <row Id="6664" PostId="3132" Score="0" Text="Regex is great when you are creating a language-using tool, or something that processes stuff written in a (regular) language. Not much use for them otherwise. Great for Domain Specific Languages. Why do they need to learn them? Maybe they need background in language design first?" CreationDate="2017-08-06T20:39:11.960" UserDisplayName="user737" />
  <row Id="6620" PostId="3133" Score="0" Text="In a similar way you could create a Jeopardy game. The Jeopardy &quot;answers&quot; are REs. The contestants are given an RE for some category and the first to &quot;ring the bell&quot; gets to reply with a valid match - in the form of a question, of course. I used to keep a set of hotel desk bells for this sort of thing. This only works for deciphering/reading, of course. As you proceed through a category the REs get harder. The categories can be RE types or something more elaborate." CreationDate="2017-08-05T22:06:57.487" UserId="1293" />
  <row Id="6852" PostId="3133" Score="0" Text="A similar activity to RegexOne, without the tutorial text but with larger test suites for each problem, is https://alf.nu/RegexGolf" CreationDate="2017-08-10T07:30:37.387" UserId="1219" />
  <row Id="6621" PostId="3134" Score="1" Text="I dont even know what you mean by `FA` or that being `F`, yet I'm pretty good with regex. Similarly, I don't understand why you think math is needed to use, or understand, them. They're *pattern matching*, right? Not *formula matching*." CreationDate="2017-08-06T00:18:28.283" UserId="104" />
  <row Id="6622" PostId="3134" Score="1" Text="@GypsySpellweaver `FA` is finite automaton, where `F` stands for `finite`." CreationDate="2017-08-06T00:24:50.047" UserId="182" />
  <row Id="6623" PostId="3134" Score="0" Text="Ditto what @GypsySpellweaver said." CreationDate="2017-08-06T00:24:58.320" UserId="2145" />
  <row Id="6624" PostId="3134" Score="1" Text="So, how is knowing any of that important to using regex, in programming or CLI? In implementing a regex interpreter, that might be important, can't say, but that's not part of the question from the OP." CreationDate="2017-08-06T00:33:38.170" UserId="104" />
  <row Id="6625" PostId="3134" Score="2" Text="@GypsySpellweaver OP didn't ask of _using_ regex; the question is explicitly about _fundamentals_ and _understanding how it works_. You cannot teach fundamentals without resorting to fundamentals." CreationDate="2017-08-06T00:38:07.857" UserId="182" />
  <row Id="6626" PostId="3134" Score="0" Text="Then one of us misread the question. I interpreted it as an introduction to the use of regex, according to the statement: _The students don't need to know every detail, but do need to know enough to work effectively and learn more_." CreationDate="2017-08-06T00:47:25.030" UserId="104" />
  <row Id="6627" PostId="3134" Score="1" Text="@GypsySpellweaver I agree on the misreading. OTOH I have seen enough senior programmers trying to parse stack languages with regexes. I am sure you did too. I do want my students to know what they are doing." CreationDate="2017-08-06T00:53:59.097" UserId="182" />
  <row Id="6663" PostId="3134" Score="1" Text="If you simply teach finite automata first, then regex just falls out as a notation for describing them. It's like saying that if you teach about baking, then reading and writing recipes is not very much of a stretch. Funny how they teach stuff all out of order sometimes. I learned about them in the college course about computer languages where we built a compiler. Ive used lex and yacc a few times since then." CreationDate="2017-08-06T20:33:37.133" UserDisplayName="user737" />
  <row Id="6676" PostId="3134" Score="0" Text="@nocomprende Glad to hear from a like-minded." CreationDate="2017-08-07T02:56:00.070" UserId="182" />
  <row Id="6736" PostId="3135" Score="1" Text="@nocomprende, I have trouble understanding that question.  You want to build the smaller, more capable equipment, and *then* build the big clunky ineffective equipment?  :)" CreationDate="2017-08-08T05:29:53.547" UserId="1103" />
  <row Id="6747" PostId="3135" Score="0" Text="@nocomprende funny!  :)  Economies of scale, my friend.  And marketing.  (Marketing is a good thing, by the way.)" CreationDate="2017-08-08T11:13:57.217" UserId="1103" />
  <row Id="6785" PostId="3137" Score="0" Text="Good idea. I already do this." CreationDate="2017-08-09T01:33:31.863" UserId="283" />
  <row Id="6637" PostId="3143" Score="0" Text="Thanks. I don't disagree about the course placement under appropriate circumstances. Can you say a bit more, though, about the course and its environment? The more you can write, the better. Thanks again." CreationDate="2017-08-06T13:29:09.543" UserId="1293" />
  <row Id="6642" PostId="3145" Score="0" Text="Welcome to [cseducators.se]! This is quite a nice answer. I hope we'll be getting more good content from you." CreationDate="2017-08-06T14:27:14.810" UserId="150" />
  <row Id="6644" PostId="3145" Score="1" Text="The only problem with this is the follow up question:  Why the *heck* are TI-83's still so bloody expensive?!" CreationDate="2017-08-06T17:46:04.343" UserId="812" />
  <row Id="6681" PostId="3145" Score="1" Text="@CortAmmon according to the economics parrot, &quot;Aawk! Supply and demand! Supply and demand! Aawk!&quot;" CreationDate="2017-08-07T04:53:55.617" UserId="2432" />
  <row Id="6683" PostId="3145" Score="1" Text="@SpencerJoplin and a monopoly thanks to that model being mandated at most schools.  I was lucky enough to be able to pick what I wanted.  Most of the class had much more modern Casios with a price tag almost 2/3rds less than the TI models." CreationDate="2017-08-07T10:11:01.390" UserId="993" />
  <row Id="6734" PostId="3145" Score="1" Text="@CortAmmon, [obligatory xkcd.](https://xkcd.com/768/)" CreationDate="2017-08-08T05:25:34.517" UserId="1103" />
  <row Id="6808" PostId="3145" Score="0" Text="If you paid $2500 for a ZX80 you were robbed. Launch price was £99.95. Even with inflation that's only about £400 now," CreationDate="2017-08-09T12:42:43.180" UserId="2299" />
  <row Id="6811" PostId="3145" Score="0" Text="@Bob Corrected. I was reading the ZX80 and TRS-80 Web pages at the same time." CreationDate="2017-08-09T13:30:00.463" UserId="2432" />
  <row Id="6851" PostId="3147" Score="0" Text="Most importantly: call them regex or regexp, not regular expressions, or the person who later teaches them the Chomsky hierarchy will curse you from the depths of their heart." CreationDate="2017-08-10T07:23:32.017" UserId="1219" />
  <row Id="6722" PostId="3148" Score="0" Text="Usborne books has released its 1980s introductory programming manuals as free downloads, and emulators for the systems used are available." CreationDate="2017-08-07T23:15:05.907" UserId="2462" />
  <row Id="6686" PostId="3149" Score="0" Text="Nice images. Hope we get them educated before the heat death of the universe!" CreationDate="2017-08-07T12:39:16.397" UserDisplayName="user737" />
  <row Id="6784" PostId="3149" Score="0" Text="I love it about the cheetah and snail! I'm going to put that in a lecture." CreationDate="2017-08-09T01:32:43.367" UserId="283" />
  <row Id="6653" PostId="3150" Score="0" Text="Why don't you join me in the [Guidance office (chatroom)](https://chat.stackexchange.com/rooms/60468/the-guidance-office)?" CreationDate="2017-08-06T18:53:36.467" UserId="150" />
  <row Id="6666" PostId="3150" Score="0" Text="**&quot;_I'm a student in computer science and got my bachelor's degree 2 weeks ago._&quot;**-  Are you still in school, e.g. grad school?" CreationDate="2017-08-06T22:17:06.087" UserId="39" />
  <row Id="6723" PostId="3150" Score="0" Text="Apprenticeship. No one should just be cast adrift on a sea of problems, alone, with only their &quot;square girlfriend&quot; as company. But, if you are, take advantage, you are unsupervisable, and not easy to replace. You are being paid to learn whatever you need to, or want to." CreationDate="2017-08-08T01:10:32.713" UserDisplayName="user737" />
  <row Id="6738" PostId="3150" Score="1" Text="Great question - both in terms of asking about an early career point, and identifying something which maybe isn't taught all that well by goal based education." CreationDate="2017-08-08T07:29:46.017" UserId="41" />
  <row Id="6745" PostId="3150" Score="0" Text="Note you were told wrong about fork and exec: fork create a new process, exec replaces program with external program (not builtin)." CreationDate="2017-08-08T10:43:32.653" UserId="204" />
  <row Id="6766" PostId="3150" Score="0" Text="I always found the Unix process methods to be sort-of like a very large hammer. Entirely replacing the existing process by overlaying it with a new binary seems a bit... blunt. Creating an exact duplicate of the existing process, with only the process ID and parent process ID being different seemed... ungraceful. There is literally no way to just say &quot;Run this other program and leave the existing process alone!&quot; Odd. So, it is understandable that the way to accomplish something might be unintuitive at best." CreationDate="2017-08-08T19:48:11.270" UserDisplayName="user737" />
  <row Id="6777" PostId="3150" Score="0" Text="Not an answer to the more general question, but for the specific example of Unix system calls (like fork and exec), you should read W. Richard Stevens' *Advanced Programming in the Unix Environment*, (and *UNIX Network Programming* by the same author for network system calls).  Books have the advantage of not requiring you to know what questions you should be asking." CreationDate="2017-08-08T23:13:47.380" UserId="827" />
  <row Id="6836" PostId="3150" Score="0" Text="@Nat Yes, I'll get my master degree in 2019" CreationDate="2017-08-09T19:30:52.523" UserId="2434" />
  <row Id="6678" PostId="3151" Score="0" Text="The bullet point 2 is exactly what the OP is about. Why `ls` could be an external program, but `cd` can not? To answer this question one need to understand an entire Unix process model, and I am afraid it takes a bit more than a Google query. BTW, in other models, like MS-DOS, `cd` could happily be an external utility." CreationDate="2017-08-07T03:33:09.620" UserId="182" />
  <row Id="6679" PostId="3151" Score="0" Text="@user58697 -- I'm not sure if that distinction is really important, or relevant? If you were trying to make a simple shell, the easiest thing to do would be to implement as much functionality as possible within a single codebase, including handling both 'ls' and 'cd. That would suffice until OP runs into whatever limitations emerge from taking that approach -- that that point, OP would have a better sense of the context needed to make effective queries." CreationDate="2017-08-07T04:41:39.177" UserId="732" />
  <row Id="6680" PostId="3151" Score="0" Text="I guess my broader point is that when you're not sure what to do, just trying the first thing you can think of even if you have no idea how it'll turn out can be a surprisingly effective way of learning. It's of course not as efficient as forming a complete plan from the start or knowing exactly what to do, but I do think exploratory programming is a valid strategy for acquiring experience and domain knowledge." CreationDate="2017-08-07T04:49:26.663" UserId="732" />
  <row Id="6696" PostId="3151" Score="0" Text="@Michael0x2a Sounds a bit like [BusyBox](https://en.wikipedia.org/wiki/BusyBox)." CreationDate="2017-08-07T14:48:24.980" UserId="2451" />
  <row Id="6726" PostId="3151" Score="0" Text="I wrote a DOS TSR to share modems on a Novell network (over 25 years ago) this way. One or two crucial books made the difference, but my manager just let me run with the project when I had never done anything this complex before. Got it to work!" CreationDate="2017-08-08T01:21:09.230" UserDisplayName="user737" />
  <row Id="6677" PostId="3152" Score="0" Text="I know this comment isn't going to be particularly helpful, but these are the only three books that I know of that address computer science pedagogy.  Wish there were more!" CreationDate="2017-08-07T03:03:02.190" UserId="2145" />
  <row Id="6684" PostId="3152" Score="0" Text="Actually most of the contributors to Pedagogical Patterns are involved in some way with CS. Some are university teachers and some are industry trainers. In fact it is all about teaching CS in various ways and the information needs to be adapted for other, similar, fields. Six members of the Editorial Board are university teachers, the other three teach in industry. However, it is about teaching, not research. It is informed by the practice of teaching." CreationDate="2017-08-07T10:16:42.873" UserId="1293" />
  <row Id="6697" PostId="3152" Score="0" Text="Other research-based books on CS ed with good references are [Krauss and Prottsman](https://resources.corwin.com/computationalthinking) (2017), [Kafai and Burke](https://mitpress.mit.edu/connected-code) (2014), and [Frieze and Quesenberry](https://cds.cern.ch/record/2160926?ln=en) (2017)." CreationDate="2017-08-07T15:17:19.847" UserId="765" />
  <row Id="6702" PostId="3152" Score="0" Text="I've just written a dissertation on a teaching approach to Computer Science (UK curriculum). There is a lot of contemporary research in this field around Computational Thinking. Critical thinking is a popular approach. Maybe a hunch, but I imagine many more pragmatic approaches will be available in the near future." CreationDate="2017-08-07T16:25:56.213" UserId="146" />
  <row Id="6724" PostId="3156" Score="0" Text="Doco is the way. Whenever you are not busy, raid the doco." CreationDate="2017-08-08T01:16:50.210" UserDisplayName="user737" />
  <row Id="6789" PostId="3157" Score="0" Text="Nice ordering. (I noticed it abides the rules of citing :P)" CreationDate="2017-08-09T07:36:51.343" UserId="150" />
  <row Id="6848" PostId="3157" Score="0" Text="I'm like 99% sure I remember Hazzan, Lapidot, and Ragonis, but I don't have it in front of me to double check.  That said, I had high hopes for the book, but was disappointed when I read it.  It was more of a collection of their papers than a book; it lacked a clear, unifying organization as a result." CreationDate="2017-08-10T01:58:26.827" UserId="2317" />
  <row Id="6849" PostId="3157" Score="0" Text="It was also written in a style that I assume is &quot;education-ese&quot; - it was very list-driven.  It was list-driven the point where section 1 would contain a couple of quick sentences telling you what was in sections 1.1, 1.2, and 1.3. Next came Section 1.1, which would tell you what 1.1.1, 1.1.2, and 1.1.3 contained, then section 1.1.1.  Within 1.1.1 they'd make a point, then cite a list of stuff to support it.  I found it very hard to read.  I assume that this is just the style of writing (CS) Education Research papers, but I'd love to be proven wrong :)" CreationDate="2017-08-10T01:59:45.790" UserId="2317" />
  <row Id="6930" PostId="3157" Score="0" Text="I just purchased the first 3 of these books.  This is an awesome answer!" CreationDate="2017-08-12T00:56:24.530" UserId="27" />
  <row Id="6883" PostId="3158" Score="0" Text="Hi Joel! You've been posting a lot of answers lately (and I might add, high quality ones at that). Feel free to come by [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) and introduce yourself :)" CreationDate="2017-08-10T23:50:57.683" UserId="27" />
  <row Id="6753" PostId="3159" Score="0" Text="I find this question fascinating, and it is yielding a lot of self-examination. But it seems to lead to a conundrum or two: if ethics is subjective, then there is really nothing to say, but if objective, we should be able to reduce it to a set of ideas that apply uniformly. If it is mostly about external factors like safety, then we can describe safe and unsafe things and how to prevent harm. If it is about &quot;doing what is best&quot;, then I think it is indescribable, and we just have to wait for people to be self-realized. Maybe train them, like with, say, Buddhism? Or Trans-personal Psychology." CreationDate="2017-08-08T14:59:01.043" UserDisplayName="user737" />
  <row Id="6725" PostId="3161" Score="0" Text="Yes. Google is so much better than a big shelf of manuals and the few books at the local Borders." CreationDate="2017-08-08T01:18:19.527" UserDisplayName="user737" />
  <row Id="6752" PostId="3163" Score="0" Text="I think this was downvoted because it didn't address enough of the question. Anyway, I can understand safety training, because it is not always obvious what can go wrong in a new situation. But I am not sure how there could be ethics training? It would be like training people to be smart, or to predict the results of their actions. Is that teachable? Can we out and out make people *better* as people? If so, for the love of God, let's get started!" CreationDate="2017-08-08T14:54:14.953" UserDisplayName="user737" />
  <row Id="6757" PostId="3164" Score="0" Text="Reading OS code is just the most amazing way to learn. Nowadays it is far easier to get your hands on it. I used to peruse the Turbo C library code back in the early 90's." CreationDate="2017-08-08T15:43:16.673" UserDisplayName="user737" />
  <row Id="6767" PostId="3165" Score="1" Text="_Calculus I_ is such a basic how-to-think class that it seems like just about every college student should have it.  Also, _Linear Algebra_ is highly relevant to Computer Science (in the sense of what CS is about as a field, rather than just programming).  But, _Calculus II_ might be a bit much for a basic degree in CS." CreationDate="2017-08-08T20:00:28.383" UserId="39" />
  <row Id="19291" PostId="3165" Score="0" Text="I was required in the mid-1980s to take Calc 1 thru 4, Differential Equations and a 400-level Statistics course. I have never used anything like that. And, as my mother said once, &quot;I don't need anyone to teach me how to think!&quot;" CreationDate="2022-02-07T23:42:20.503" UserId="5349" />
  <row Id="6759" PostId="3166" Score="1" Text="This seems a bit broad. Would you mind specifying what kind of feedback you're looking for, or possibly which specific parts\aspects of the book you'd like feedback on?" CreationDate="2017-08-08T16:38:22.410" UserId="150" />
  <row Id="6762" PostId="3166" Score="1" Text="I like this question now.  And welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-08-08T17:04:14.310" UserId="27" />
  <row Id="6782" PostId="3166" Score="1" Text="I thought zyBooks Computer Organization and Design looked good, but it was too expensive for my students." CreationDate="2017-08-09T01:26:53.920" UserId="283" />
  <row Id="11784" PostId="3166" Score="0" Text="I think we should close this. its been around for a while and its about a specific brand of books which does not seem to be all that popular." CreationDate="2018-03-24T06:43:46.960" UserId="2605" />
  <row Id="11787" PostId="3166" Score="0" Text="@Jay So we only should be asking about popular things? And the time limit you have decided on for questions is exactly how long?" CreationDate="2018-03-24T12:22:38.667" UserId="433" />
  <row Id="11788" PostId="3166" Score="2" Text="@Jay I've chosen to keep this open. Popularity of the subject isn't a good reason to drop a question, rather it's a reason to keep it. This site might be the only place where uncommon resources can be investigated." CreationDate="2018-03-24T15:09:39.837" UserId="104" />
  <row Id="6764" PostId="3167" Score="0" Text="Welcome to [cseducators.se]! That's a good idea, Thanks." CreationDate="2017-08-08T19:04:35.913" UserId="150" />
  <row Id="6771" PostId="3170" Score="0" Text="@Buffy I edit the question , but I did not understand this * What resources do you have?*" CreationDate="2017-08-08T22:15:21.213" UserId="2478" />
  <row Id="6772" PostId="3170" Score="1" Text="Welcome to [cseducators.se]! Quite an interesting question." CreationDate="2017-08-08T22:15:34.100" UserId="150" />
  <row Id="6778" PostId="3170" Score="1" Text="What are you _actually_ trying to teach? A programming language is a means to teach a concept. What concept are you trying to teach? If you don't include a concept, I think this question is both primarily opinion based and too broad." CreationDate="2017-08-08T23:22:19.510" UserId="58" />
  <row Id="6779" PostId="3170" Score="3" Text="For what it is worth, the language isn't the most important thing. For example, I would simply hate to have to go back to programming in my first language, though I love to program in general. Focus on the teaching, not the language." CreationDate="2017-08-08T23:22:21.433" UserId="1293" />
  <row Id="6781" PostId="3170" Score="1" Text="I've voted to close this question because as it stands it's simply a language popularity contest. Please keep in mind that close is not the end of the road for the question. If you'd like help fixing it so it can be reopened, please stop by [our question help chat room](https://chat.stackexchange.com/rooms/60468/the-guidance-office)." CreationDate="2017-08-08T23:34:26.273" UserId="58" />
  <row Id="6787" PostId="3170" Score="1" Text="Hey Ali, welcome to [cseducators.se]!  What this question needs is to describe what you are trying to teach. Language choices typically flow from other goals." CreationDate="2017-08-09T01:59:48.177" UserId="27" />
  <row Id="6788" PostId="3170" Score="1" Text="Here's a possible duplicate: [Programming languages specifically designed for beginners](https://cseducators.stackexchange.com/q/161)" CreationDate="2017-08-09T02:19:59.307" UserId="2481" />
  <row Id="6791" PostId="3170" Score="0" Text="@Ali Don't get disheartened by the closure of the question. If you want, I can help you edit the question so it can be reopened. If you're interested, I'm waiting in [The Guidance Office](https://chat.stackexchange.com/rooms/60468/the-guidance-office) (Chatroom)" CreationDate="2017-08-09T08:05:19.443" UserId="150" />
  <row Id="6794" PostId="3170" Score="0" Text="@ItamarG3 thanks for your offer , but what I get is really useful" CreationDate="2017-08-09T08:27:10.337" UserId="2478" />
  <row Id="6800" PostId="3170" Score="1" Text="Consider “Snap” like “Scratch”, but designed for 1st year undergraduates, is a good place to start, and you can then use it to teach other languages. Python is often used as a 2nd language (after “Scratch” or “Snap”). Eiffel is a very good language to teach Object orientated. A touch of class is a book/course. It claims that it is quicker to learn Eiffel then C++ and C#, than to start with C++ or C#. Another good option is “Scheme”, see structure and interpretation of programming languages ( a book, video series, course for 1st year undergraduates )." CreationDate="2017-08-09T10:03:46.007" UserId="204" />
  <row Id="6819" PostId="3170" Score="3" Text="@Ali Even if you have received a helpful answer, I would consider it a personal favor if you came by [Guidance](https://chat.stackexchange.com/rooms/60468/the-guidance-office) to help us fix the question anyway. We've been discussing it, but there's no way to re-open the question without some more input from you. The problem is that if the question is on-hold for long enough, it will eventually get automatically deleted by the system. :( I want to find a way to preserve it so that it will have value for future visitors as well!" CreationDate="2017-08-09T15:41:06.383" UserId="27" />
  <row Id="6780" PostId="3172" Score="2" Text="IMO, the lack of low level stuff is not necessarily an issue.  It's important at some point of course.  It's good for theoretical stuff (knowing how a computer works), but for a new programmer it's not a practical thing." CreationDate="2017-08-08T23:28:08.730" UserId="1667" />
  <row Id="6775" PostId="3173" Score="2" Text="Welcome to Computer Science Educators!" CreationDate="2017-08-08T23:08:29.077" UserId="283" />
  <row Id="6776" PostId="3173" Score="3" Text="I think this is a decent answer, but it doesn't explain why Python is any better than other common scripting languages, such as Ruby, PHP, or Perl." CreationDate="2017-08-08T23:13:09.253" UserId="869" />
  <row Id="6824" PostId="3173" Score="0" Text="Thanks @EllenSpertus, looking forward to be an active member in this site. :D" CreationDate="2017-08-09T16:45:46.397" UserId="2480" />
  <row Id="6790" PostId="3174" Score="0" Text="Welcome to [cseducators.se]! This answer could really benefit from explanations on why Snap! might be a good option." CreationDate="2017-08-09T07:57:39.117" UserId="150" />
  <row Id="6815" PostId="3174" Score="0" Text="Also, feel free to come by [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi. That's where we all tend to hang out. ;-)" CreationDate="2017-08-09T15:09:05.883" UserId="27" />
  <row Id="6796" PostId="3175" Score="2" Text="I think this topic is already reasonably well-covered on other SE sites: I'd start by reading the first few answers in [this post](https://softwareengineering.stackexchange.com/q/9730/45762) and [this post](https://stackoverflow.com/q/24279/646543), as well as recursively reading every linked off-site resource + every related question in the sidebar." CreationDate="2017-08-09T08:59:32.383" UserId="732" />
  <row Id="6797" PostId="3175" Score="1" Text="@Michael0x2a yikes. Well, I better get started." CreationDate="2017-08-09T09:14:49.567" UserId="150" />
  <row Id="6816" PostId="3175" Score="2" Text="In FP, functions may be applied to other functions, or to data containing functions, so the worlds of data and functions are not that much separated  (think about a sort() function, with a comparator function as parameter)." CreationDate="2017-08-09T15:20:13.567" UserId="2103" />
  <row Id="6875" PostId="3175" Score="3" Text="I think it's also important to note how difficult it can be to read and comprehend the benefits of something like functional programming.  For me anyway, it took programming imperatively for a long time to realize the complexity that modified state brings.  Once I realized that was a real problem I had to solve, functional programming was a natural solution and all the material explaining what functional programming was started to make sense." CreationDate="2017-08-10T17:30:10.253" UserId="2526" />
  <row Id="6924" PostId="3175" Score="1" Text="I also recommend Eric Lippert's excellent answer to [Why hasn't functional programming taken over yet?](https://stackoverflow.com/questions/2835801/why-hasnt-functional-programming-taken-over-yet) from SO." CreationDate="2017-08-11T22:02:53.327" UserId="1102" />
  <row Id="6944" PostId="3175" Score="0" Text="Others here have mentioned the theory behind functional programming. If you want to see the theory behind OOP, see [_A Theory of Objects_](https://www.amazon.com/Theory-Objects-Monographs-Computer-Science/dp/0387947752) by Abadi and Cardelli. (Not cheap, not easy)." CreationDate="2017-08-12T14:51:26.027" UserId="1293" />
  <row Id="6795" PostId="3177" Score="0" Text="I'm sorry if it seems like I'm nagging (*sheepish grin*), but I'd like to say that this seems like a good answer. If you could include the core parts of that article in your answer, it would be much better." CreationDate="2017-08-09T08:46:02.460" UserId="150" />
  <row Id="6814" PostId="3177" Score="0" Text="Welcome to [cseducators.se]!  I'm glad to see you posting around :) Particularly for this question, which I also need an answer to. Usually, when we post links, we also give a (tiny) summary of the most relevant points. This provides some insurance that your answer will stay useful in case the link ever goes dead." CreationDate="2017-08-09T15:07:24.807" UserId="27" />
  <row Id="6831" PostId="3177" Score="0" Text="I have seen some correlation between certifications and CyberPatriot. Do you have a specific certification in mind that relates well to the cybersecurity knowledge required of CyberPatriot? While there would not be time for students to reach certification-level, a good text resource (i.e. prep book) is something I can work with." CreationDate="2017-08-09T18:17:43.993" UserId="76" />
  <row Id="6798" PostId="3178" Score="0" Text="Interesting. I had not thought of some of the things you pointed out. Thanks" CreationDate="2017-08-09T09:16:26.740" UserId="150" />
  <row Id="6884" PostId="3178" Score="0" Text="“While in an OOP paradigm, you'd likely do some_list.sort() and the next time you use some_list it will be sorted.” No. With an **imperative** paradigm, you'd do `sort(some_list)` (procedural) or `some_list.sort()` (OO) to change `some_list`. OO vs procedural is orthogonal to imperative vs functional. In functional OOP, you'd do `let sorted_list = some_list.sort()`." CreationDate="2017-08-11T00:17:36.030" UserId="124" />
  <row Id="6828" PostId="3180" Score="4" Text="This is full of unsubstantiated opinions and reads more like a rant than an answer. Hype is orthogonal to utility: things can be anywhere in the matrix of sexy/boring and useful/superfluous." CreationDate="2017-08-09T17:10:45.637" UserId="1790" />
  <row Id="6839" PostId="3180" Score="0" Text="I wouldn't say it's all the rage. The only popular 'functional' language I can think of is Rust, and that's more than just plain 'functional', it has OO characterists too - it's more of a hybrid. All the older functional languages are preferred by mathematicians and scientists (or people who like maths and science). Granted many OO languages have adopted pseudo-functional features such as lambda expressions, that doesn't necissarily make them interested in the functional paradigm, rather the implementors have seen a feature they liked and found a use for and adapted it to suit their needs." CreationDate="2017-08-09T21:55:16.207" UserId="1538" />
  <row Id="6841" PostId="3180" Score="1" Text="@Pharap indeed, that's what I call whims of fashion. Templates in C++, stateless and immutable structures all over the web, JavaScript and Python being used as poor man's FP... Immutability and statelessness can be very appealing when dealing with concurrent processes (multithreading that has become mandatory since we started hitting the speed limit of a single CPU, or networking, after 30 years of calamitous efforts to synchronize data brokers), but still they are no silver bullets: costly, hard to read, relying on increasingly complex (and unreliable) tools to reach OOP performances." CreationDate="2017-08-09T23:30:34.447" UserId="2486" />
  <row Id="6843" PostId="3180" Score="1" Text="@kuroineko I wouldn't knock templates because they can be incredibly useful and time-saving *in the right hands* (emphasis important), the ability to write them is certainly more useful for library writers than regular programmers though. I can understand the want for statelesness (it's more about the web's core principle of robustness), but I agree with JavaScript and Python creeping into territory they are unfamiliar with (functionalism)." CreationDate="2017-08-10T00:06:41.360" UserId="1538" />
  <row Id="6845" PostId="3180" Score="0" Text="@Pharap Even non-library writers can use templates for creating flexible data structures of their own. Getting deep into template metaprogramming is more something that would be relegated to library or framework code, admittedly, but the ability to delay type/etc. selection to the time of usage is incredibly useful for any programmer writing significantly complex C++ programs." CreationDate="2017-08-10T01:26:32.127" UserId="654" />
  <row Id="6847" PostId="3180" Score="1" Text="@JAB They can do if the problem they are solving is well suited to generics (such as writing datastructures or arithmetic types), but those cases occur less frequently than the standard case for most programmers. Plus there's the same danger with templates as there is with programming patterns, and that's the &quot;this is cool, let's make _everything_ a template&quot; mentality. The danger doesn't come from the templates themselves, it comes from them being considered a cool thing to know - it attracts people who will learn _how_ to use them but not _when_ to use them." CreationDate="2017-08-10T01:54:53.317" UserId="1538" />
  <row Id="6805" PostId="3181" Score="0" Text="Hi Kuroi! Welcome to [cseducators.se]! All three of your recent answers have been really interesting. Also, feel free to stop by and say &quot;hi&quot; in [our chat room](https://chat.stackexchange.com/rooms/59174/the-classroom)." CreationDate="2017-08-09T12:21:17.767" UserId="58" />
  <row Id="6803" PostId="3182" Score="0" Text="oh. That's a nice way of putting it." CreationDate="2017-08-09T12:02:41.037" UserId="150" />
  <row Id="6804" PostId="3182" Score="1" Text="That would be common sense. Now the trouble is, you don't always have the choice. Try programming in C++ from C++11 onwards and you will have to wrap your head around template metaprogramming even to move a matchstick. Functional programming is a fashion that invades all kinds of fields of computer engineering, willy-nilly." CreationDate="2017-08-09T12:03:45.057" UserId="2486" />
  <row Id="6905" PostId="3182" Score="0" Text="@kuroineko You don't need to know anything about template metaprogramming to benefit from C++11. The most a user has to worry about with templates is knowing how to write `std::vector&lt;int&gt;` and maybe a bit about how they work (i.e. template instatiation) and when the template parameters can be inferred. If you had said lambda expressions instead, I'd be tempted to upvote, but templates are usually completely avoidable. In fact, C++11 made it more avoidable: before C++11 you'd need template meta-programming to calculate factorial at compile time, now you can just use a `constexpr` function." CreationDate="2017-08-11T17:13:40.063" UserId="1538" />
  <row Id="6906" PostId="3182" Score="0" Text="@Pharap Good point about lambda functions, but these are not changing fundamental paradigms (no more than equivalent techniques in JavaScript or Python). Now templates are another story. They are becoming an increasingly essential part of the language. You can't completely ignore them. You need to understand at least their error messages (ouch!), and possibly the code they generate. I wonder how many people outside a tiny elite of library developpers really master them, but they sure allow quite a few guys to write cryptic code that makes a compiler crawl and spew pages of cryptic errors." CreationDate="2017-08-11T18:07:20.513" UserId="2486" />
  <row Id="6916" PostId="3182" Score="0" Text="@kuroineko Actually with the addition of `static_assert` it's become ever more possible to provide meaningful error messages when a template instantiation fails. You simply detect a property of the type provided and if it doesn't meet the requirements, provide an error message explaining the exact problem. Aside from which, templates aren't some great mystery, they have a set of rules and for most cases you only need to know basic things about them. [Javascript's type rules on the other hand are a major case of wat](https://www.destroyallsoftware.com/talks/wat)." CreationDate="2017-08-11T19:56:11.010" UserId="1538" />
  <row Id="6919" PostId="3182" Score="0" Text="In the hands of seasoned experts, templates certainly can produce things like the STL. I'm just saying they turn C++ into the most dangerous and inconsistent language I can think of. A language within the language, with a terribly obscure syntax and semantics totally alien to either structured or OOP approach. This type-matching engine initally meant to cope with C inconsistencies (implicit base types conversions, pointer decay, ambiguous initializers...) has become an almighty monster. Most people used to run in fear of templates, but with all the FP hype they rather tend to misuse them now." CreationDate="2017-08-11T21:21:34.750" UserId="2486" />
  <row Id="6936" PostId="3182" Score="1" Text="I don't recall mentioning templates in my Answer..." CreationDate="2017-08-12T13:19:31.977" UserDisplayName="user737" />
  <row Id="6946" PostId="3182" Score="0" Text="@kuroineko People aren't flocking to templates because of functional programming hype. Template metaprogramming has been around for a very long time, any recent interest in it is more likely to be down to changes in the language that have enabled improvements in how templates are used (the afforementioned `constexpr` and `static_assert`)." CreationDate="2017-08-12T15:11:23.443" UserId="1538" />
  <row Id="6977" PostId="3182" Score="0" Text="Well yes, templates have become more attractive now that you can loop over things without dummy recursions :). Still it sounds more like an afterthought. C++11 was limiting `constexpr` functions to single return statements, forcing people to do FP for FP's sake. This is still the case outside constexpr functions. Just try to manipulate a list of parameters (filtering, merging, etc.) and you're back to FP land... Frankly, as far as pre-computing a few values is concerned, writing a dedicated code generator in Python often remains easier and faster than jumping through all these template hoops." CreationDate="2017-08-14T01:47:04.637" UserId="2486" />
  <row Id="12879" PostId="3182" Score="0" Text="So, we have come to the day where writing your own language (and meta-language to write it) is easier than using a built-in feature of the language. Wait. Didn't we start there?" CreationDate="2018-06-19T13:18:48.513" UserId="5349" />
  <row Id="6813" PostId="3183" Score="2" Text="Actually, I _don't_ have a preference for FP. In fact the only functional language I was ever any good at was ML. I depend on concrete syntax to help organize my thoughts. My view is truly OOP, just a deeper, purer version than most people have and few OOP languages require. The only really serious software I've built (quite a bit) has been in OO languages. But my experience goes back a long way and I've tried to develop a style that is sustainable. My view isn't unique, of course. Glad I was helpful." CreationDate="2017-08-09T14:27:54.197" UserId="1293" />
  <row Id="6825" PostId="3183" Score="1" Text="Well, my &quot;serious&quot; software is also fun. It should be fun. In the above reference, however, serious also meant more than 15K deployments." CreationDate="2017-08-09T16:46:50.287" UserId="1293" />
  <row Id="6882" PostId="3183" Score="2" Text="Functional languages often use the term &quot;variable&quot; like mathematics – a name for some value which is constant during its lifetime, but the same name may refer to a different value the next time the algorithm is run. A true constant has the same value each time." CreationDate="2017-08-10T21:10:31.093" UserId="653" />
  <row Id="6810" PostId="3184" Score="1" Text="Welcome to [cseducators.se]! that's a very useful overview and explanation. Thanks!" CreationDate="2017-08-09T13:25:49.897" UserId="150" />
  <row Id="6837" PostId="3184" Score="0" Text="I would ask whether to use a nail or a screw, e.g.: http://www.popularmechanics.com/home/tools/how-to/a18606/nails-vs-screws-which-one-is-stronger/ .  OO vs FP is different in that it's possible (reasonable) to do both, e.g. making `x.square()` return a new object or writing a method `expr.calculated_type()` in a compiler." CreationDate="2017-08-09T20:00:54.737" UserId="1622" />
  <row Id="6833" PostId="3186" Score="1" Text="+1, You could compare object oriented to data oriented, though." CreationDate="2017-08-09T19:10:36.483" UserId="1430" />
  <row Id="6834" PostId="3186" Score="3" Text="The opposite of OOP would seem to be maintaining a separation between data and behavior.  (These opposites aren't mutually exclusive, though - I've seen programs that mix imperative *and* functional *and* OOP *and* separation of data and behavior - they just do different things in different places.)" CreationDate="2017-08-09T19:11:15.453" UserId="2505" />
  <row Id="6960" PostId="3186" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/63722/discussion-on-answer-by-ben-i-learning-fundamental-differences-between-function)." CreationDate="2017-08-12T23:26:57.333" UserId="58" />
  <row Id="6870" PostId="3187" Score="0" Text="This is the best answer here." CreationDate="2017-08-10T14:05:20.717" UserId="27" />
  <row Id="6817" PostId="3188" Score="1" Text="I disagree with you that you will learn about *&quot;how these approaches differ&quot;* - they don't differ in any meaningful way.  They are orthogonal concepts from the start. It's like saying that you will learn how *tennis* differs from *clay* (of which the court is made), or how *paintings* differ from *paper*." CreationDate="2017-08-09T15:36:14.610" UserId="27" />
  <row Id="6818" PostId="3188" Score="0" Text="@BenI. I'm not enough of a programming languages expert to speak with my own authority on such a matter, but I have a feeling the professor sees things differently. The end of the course dives in to how each approach takes fundamentally opposite approaches to program decomposition. From the lecture notes: &quot;We show that the two approaches [OOP and FP] largely lay out the same ideas in exactly opposite ways.&quot; https://courses.cs.washington.edu/courses/cse341/17sp/unit8notes.pdf" CreationDate="2017-08-09T15:39:57.930" UserId="76" />
  <row Id="6820" PostId="3188" Score="0" Text="In that case, my disagreement is with the professor. Perhaps he overstated his case? The sentence that you have quoted would seem to be disproven by the existence of the many functional, object-oriented languages." CreationDate="2017-08-09T15:51:00.087" UserId="27" />
  <row Id="6827" PostId="3188" Score="0" Text="@nocomprende Your statement is beautiful, but I suspect it is ultimately more poetic than it is meaningful. Godel is talking about the limits of *provability*, which is simply unrelated to the notion of whether various engineering philosophies can play nicely with one another." CreationDate="2017-08-09T17:05:15.147" UserId="27" />
  <row Id="6838" PostId="3189" Score="2" Text="That 2nd example `while (temperature &lt; 100 &amp;&amp; unHatched())`, has no cast or type conversion: `&lt;` takes 2 comparable, and returns a boolean, then `&amp;&amp;` takes 2 booleans and returns a boolean, then `while` takes a boolean." CreationDate="2017-08-09T21:17:44.143" UserId="204" />
  <row Id="7022" PostId="3189" Score="0" Text="May be he could write such statements, but he should know (and use) other ways to express the same idea. For example : write auxiliary functions (here numberOfDigits(int n)), use superfluous parentheses  to help readability ( around temperature&lt;100).  The key challenge in programming is to manage the complexity and the readability of the text we produce. The milk quickly goes over." CreationDate="2017-08-15T15:20:41.210" UserId="2103" />
  <row Id="7037" PostId="3189" Score="0" Text="Another point : be careful with such exercices. Some students could conclude they are expected to write programs this way if they want to look smart." CreationDate="2017-08-15T17:45:30.033" UserId="2103" />
  <row Id="6972" PostId="3191" Score="1" Text="You have broken this into steps that are too small.  There is a lot of namespace clutter here." CreationDate="2017-08-13T20:12:19.470" UserId="21" />
  <row Id="6973" PostId="3191" Score="0" Text="@ncmathsadist What exactly do you mean by &quot;namespace clutter&quot; in this context? I would assume these are all local variables inside a function. Also please keep in mind that the point of this exercise is to get the student to a point where they no longer need to do this. Code you write while learning != code you write in real life." CreationDate="2017-08-13T20:43:44.770" UserId="2068" />
  <row Id="6976" PostId="3191" Score="0" Text="too many variable names." CreationDate="2017-08-14T01:14:54.130" UserId="21" />
  <row Id="6978" PostId="3191" Score="0" Text="@ncmathsadist You understand that the point of this exercise is to break it down into smaller steps, right? And that this type of code is meant for learning and not for production?" CreationDate="2017-08-14T02:17:09.890" UserId="2068" />
  <row Id="6985" PostId="3191" Score="0" Text="but not too small." CreationDate="2017-08-14T13:33:31.857" UserId="21" />
  <row Id="6993" PostId="3191" Score="0" Text="@ncmathsadist I'm really not sure what your point is. If this was production code, I *might* agree with you. But this is code meant to teach the process of breaking things down into smaller steps. Smaller is better in this context." CreationDate="2017-08-14T16:02:40.123" UserId="2068" />
  <row Id="7044" PostId="3191" Score="0" Text="It's about seeing *what happens* in some parts of the expression (namely:  `n+&quot;&quot;`), not necessarily refactoring it into many variables until they're all dead." CreationDate="2017-08-16T12:57:01.790" UserId="2103" />
  <row Id="7053" PostId="3191" Score="0" Text="Smaller is not _always_ better.  If it was, then we'd all be writing assembly language.  IMO `nPlusOne` is slightly _harder_ to read than `(n+1)`.  Also, the goal of the exercise is to compare the number of digits in `n` to the number of digits in `(n+1)`, but the word &quot;digits&quot; appears nowhere in your &quot;simpler&quot; example." CreationDate="2017-08-16T17:17:57.820" UserId="1269" />
  <row Id="7071" PostId="3191" Score="0" Text="@jameslarge This is code I threw together without really thinking about it. Imho the actual code is secondary to the real &quot;meat&quot; of the answer, which is the exercise in general. Getting hung up on the precise syntax of the code (which is based on example code from the question anyway) is missing the point of the question and my answer, I think." CreationDate="2017-08-17T14:46:11.703" UserId="2068" />
  <row Id="6832" PostId="3192" Score="3" Text="Your history is backwards. Object Oriented programming is the newbie here. FP predates the earliest proto-OO language by a decade. LISP, a functional language based on Church's Lambda Calculus, was the second high-level programming language ever created. It came out just 2-3 months after FORTRAN (the oldest high level programming language that exists)." CreationDate="2017-08-09T18:53:45.400" UserId="27" />
  <row Id="6842" PostId="3192" Score="3" Text="@BenI. I'm aware of the chronology. But in terms of mindshare in the lifetimes of undergraduate students (last ~20yrs) OOP has been utterly dominant. As programming and computer science are rapidly growing, a decent subset (majority?) of persons in the craft came of age in the Javassic Era and are just now being exposed to what LISP and Erlang (and ML and Haskell) have been doing for decades." CreationDate="2017-08-09T23:38:16.630" UserId="1790" />
  <row Id="6860" PostId="3192" Score="0" Text="Regarding your games programming argument: [John Carmack taught his son game programming in Racket](https://twitter.com/id_aa_carmack/status/635839636754038784?lang=en), a LISP dialect." CreationDate="2017-08-10T12:01:35.687" UserId="1370" />
  <row Id="6868" PostId="3192" Score="2" Text="Another hurler of colorful metaphors! About time, too." CreationDate="2017-08-10T13:53:11.243" UserDisplayName="user737" />
  <row Id="6871" PostId="3192" Score="1" Text="@nocomprende inexact metaphors are always stickier than exact but dry technical discourse :D" CreationDate="2017-08-10T15:07:50.593" UserId="1790" />
  <row Id="6917" PostId="3192" Score="0" Text="I don't quite understand what you are getting at with the rant (is it a rant?) about Java.  OOP was around for quite a while before Java, and I don't recall any controversy over whether Java's flavor of OOP was good when compared to Smalltalk.  In any case, Java was more a take on C++ than it was on Smalltalk.  There _was_ serious controversy over C++, but the controversy I remember came from C programmers.  Still does come from C programmers, now that I think of it." CreationDate="2017-08-11T20:11:53.797" UserId="224" />
  <row Id="6926" PostId="3192" Score="0" Text="@WayneConrad what I'm getting at with my not-rant is that Java was a juggernaut the left it's mark on almost every corner of Programmingland. Many people (not the least of which were Sun's marketing department) hailed it as the One True Language to Replace All Others. Except that it wasn't. The fact that it wasn't quite low-level enough to displace C in some domains and not quite high level enough to replace scripting languages in others doesn't make Java good or bad. In fact, the social-phenomenon aspect makes it rather hard to assess Java simply on its own merits." CreationDate="2017-08-11T23:47:27.613" UserId="1790" />
  <row Id="6927" PostId="3192" Score="0" Text="...con't so you can't just talk about OOP without talking about Java which not only popularized many OOP concepts but made them *mandatory* knowledge for working programmers. I may not like it, but denying the reality would be foolish in the extreme. Simula didn't do that, smalltalk didn't do that, python didn't do that. Neither did C++ as you point out: people could and did just keep writing C if they wanted to. Java did that. Or more precisely, Sun's brilliant and insanely expensive marketing campaign did that." CreationDate="2017-08-11T23:51:07.883" UserId="1790" />
  <row Id="6835" PostId="3193" Score="1" Text="Welcome to [cseducators.se]! A very in depth answer, addressing many points. Thanks." CreationDate="2017-08-09T19:22:51.077" UserId="150" />
  <row Id="6854" PostId="3193" Score="2" Text="There is this &quot;Myth of the Sufficiently Smart Compiler&quot;. In theory, a compiler could inline `g` and `h` into `f`, perform an escape analysis to realize that the reference cannot have escaped, and therefore modify the value in place since no observer can realize the modification. Of course, a language without GC would make this much easier (eliding escape analysis partially)." CreationDate="2017-08-10T08:15:23.257" UserId="1848" />
  <row Id="6900" PostId="3194" Score="0" Text="How  To call ?  isNotAPowerOf10minus1 (int n)" CreationDate="2017-08-11T14:47:15.407" UserId="2103" />
  <row Id="7008" PostId="3194" Score="0" Text="@MichelBillaud can you repeat your comment, with context and grammar; I have no idea what its meaning is." CreationDate="2017-08-15T09:37:54.363" UserId="204" />
  <row Id="7011" PostId="3194" Score="0" Text="n and n+1 (I suppose n is strictly positive) have the same number of digits (in the decimal representation), except when n is made of sequence of 9's.  That is when n = 10^k - 1, for some k (and then n+1 = 10^k. n has k-1 digits, n+1 has k.&#xA;Thus the name of a predicate should state something about n not being a power of 10 minus 1." CreationDate="2017-08-15T10:45:55.727" UserId="2103" />
  <row Id="7014" PostId="3194" Score="0" Text="@MichelBillaud I grok you now. However to name something well, you have to know the intention. It should not be based on how it does it, but on what it does. That is what externally visible behaviour it has." CreationDate="2017-08-15T11:02:46.993" UserId="204" />
  <row Id="7019" PostId="3194" Score="0" Text="Of course, you're right.   &#xA;boolean hasTheSameNumberOfDigitsAsItsSuccessor(int n) { return ! isAPowerOf10(n+1); }" CreationDate="2017-08-15T15:01:05.173" UserId="2103" />
  <row Id="7032" PostId="3194" Score="0" Text="@michel I would find out what the intention of the code is. Instead of searching for mathematical explanations that are coincident with the intention. These coincident functions are good for implementing, but will not make the code easier to understand. E.g. isHouseOnLeft(int house number) may use isEven(int n) for some roads (but will also need direction of travel ). So call it by what it does, not by how it does it." CreationDate="2017-08-15T17:05:22.480" UserId="204" />
  <row Id="7036" PostId="3194" Score="0" Text="&quot;if(hasTheSameNumberOfDigitsAsItsSuccessor(n))&quot; is a clear explicit and non-ambiguous description of the intention of &quot;if((n+&quot;&quot;).length() == (((n+1)+&quot;&quot;).length()))&quot;. Checking powers of 10 and computing/comparing the number of digits are 2 possible implementations.  The formula as given relies on tricks (eg.  n+&quot;&quot;  to convert a number into a string - instead of the standard Integer.toString()), and code duplication (for n and n+1). So it should never have been written as such, from the beginning. &quot;if (numberOfdigits(n) == numberOfDigits(n+1))&quot; is ok, of course." CreationDate="2017-08-15T17:36:21.607" UserId="2103" />
  <row Id="6853" PostId="3195" Score="4" Text="I am afraid this answer conflates Functional Programming and Haskell. At the very least Type Inference, Type Classes and Currying are NOT a hallmark of FP." CreationDate="2017-08-10T08:12:00.113" UserId="1848" />
  <row Id="6855" PostId="3195" Score="0" Text="@MatthieuM. Could you give some examples of functional languages that do not have these features? Also I was under the impression that the majority of functional languages apply the principles of typed lambda calculus and use a hindley-milner type inference system." CreationDate="2017-08-10T10:10:46.147" UserId="1538" />
  <row Id="6856" PostId="3195" Score="0" Text="Lisp? *(Not sure if it has currying)*" CreationDate="2017-08-10T10:45:22.173" UserId="1848" />
  <row Id="6857" PostId="3195" Score="0" Text="@MatthieuM. Ok, I checked and Lisp does indeed not have currying, so I will mark that as a 'sometimes' feature (because it's still more prominent in functional languages than object oriented ones). That doesn't rule out type classes or type inference though. I suspect it's possible type classes are not considered a 'core' feature of functional languages, but I'm pretty sure hindley-milner type inference is because of the relation to typed lambda calculus which is partly what sparked the idea of functional languages in the first place." CreationDate="2017-08-10T10:50:55.547" UserId="1538" />
  <row Id="6858" PostId="3195" Score="1" Text="Lisp is dynamically typed, so no type inference is necessary (or meaningful). Possibilities for making it statically typed are [discussed here](https://stackoverflow.com/questions/3323549/is-a-statically-typed-full-lisp-variant-possible)." CreationDate="2017-08-10T10:57:39.777" UserId="1848" />
  <row Id="6873" PostId="3195" Score="0" Text="@nocomprende I just about understood the horse grooming joke thanks to google, but I don't understand the first sentence. No comprende, no comprende." CreationDate="2017-08-10T16:54:24.907" UserId="1538" />
  <row Id="6874" PostId="3195" Score="0" Text="@MatthieuM. I shall mark that as also a 'sometimes' feature, but I believe it's a somewhat popular one that's typically considered to be a feature expected more from functional languages. Or at least [C2 seems to think so](http://wiki.c2.com/?TypeInference). I suspect this is due to the great influence of ML upon other functional languages." CreationDate="2017-08-10T17:01:21.993" UserId="1538" />
  <row Id="6877" PostId="3195" Score="1" Text="@nocomprende I am aware of that saying and its application to computer languages. It's often applied to patterns too. (The bit I got hung up on was the word 'tale', which as far as I know is a synonym for 'story', which doesn't really fit the sentence.) Technically humans are animals. At any rate, this seems like an esoteric, slightly poetic tangent rather than a comment about the answer." CreationDate="2017-08-10T17:44:23.520" UserId="1538" />
  <row Id="6880" PostId="3195" Score="1" Text="@nocomprende &quot;I was just putting in a warning that we often need to take a step back from debates and consider carefully the basis for the whole question. &quot; - _that_ is a fair point. What you had to say was valid, I think your earlier comments were just a bit too crypic at what they were getting at. (Either that or they made perfect sense and I'm just tired.) It's up to you whether you delete them or not, they might be considered 'too chatty' they might not be - I can't really say either way." CreationDate="2017-08-10T18:07:56.833" UserId="1538" />
  <row Id="6885" PostId="3195" Score="2" Text="Currying is inherently possible in any functional language, but whether it's used has little relation with the design of the language. For example Standard ML and Ocaml have a very similar core, but SML favors tuples as function arguments while Ocaml favors currying. (“Favors” means that this is what the standard library uses and the compiler optimizes this case better.)" CreationDate="2017-08-11T00:21:33.580" UserId="124" />
  <row Id="6886" PostId="3195" Score="0" Text="“In a functional language, values are created and they do not change”. In a *pure* functional language. For example, Haskell does not allow values to change (or rather, it requires going through a monad); ML discourages mutable values; Lisp tends to use them a lot." CreationDate="2017-08-11T00:23:06.387" UserId="124" />
  <row Id="6887" PostId="3195" Score="0" Text="Type inference is only very loosely connected to functional languages, in that the most advanced type systems tend to be implemented on functional languages. Lisp is statically untyped (singly typed if you want to get technical). Many imperative languages are statically typed." CreationDate="2017-08-11T00:24:53.710" UserId="124" />
  <row Id="6892" PostId="3195" Score="0" Text="@Gilles &quot;Note that these are not all completely necessary for something to be considered a functional language, but they are features that are commonly associated with functional languages because they can be found in a wide variety of functional languages, particularly the most popular ones.&quot;" CreationDate="2017-08-11T09:26:59.647" UserId="1538" />
  <row Id="6862" PostId="3196" Score="1" Text="I'm voting to close this question as off-topic because the teaching practice of the 60's has little bearing on teaching today. The question can be answered by the OP with a google search." CreationDate="2017-08-10T12:48:00.743" UserId="1293" />
  <row Id="6863" PostId="3196" Score="0" Text="Note that much of what appears in &quot;early&quot; textbooks using some language are heavily influenced by the practice of programmers using _earlier_ languages. For example, early Fortran books were very much assembly language like. Subroutines weren't used for problem decomposition but only to capture &quot;common computations.&quot; This was likely due to the relative difficulty of setting up subroutines in the assembly languages of the day. Early Pascal textbooks were very &quot;Fortran-like&quot;. It took a while to learn the new way of thinking." CreationDate="2017-08-10T12:51:43.957" UserId="1293" />
  <row Id="6864" PostId="3196" Score="0" Text="@Michel, I have modified your question to pull it within the rules of SE (*list questions* must contain criteria to differentiate stronger from weaker answers).  I tried to make sure that it would still answer your original question; feel free to roll back the edit if I have misunderstood your intentions." CreationDate="2017-08-10T13:32:05.583" UserId="27" />
  <row Id="6890" PostId="3196" Score="0" Text="@buffy what seems the logical order of exposition in today's textbooks is heavily influenced by the quantity of textbooks published before on a similar subject." CreationDate="2017-08-11T06:05:35.903" UserId="2103" />
  <row Id="6969" PostId="3196" Score="2" Text="An adequate answer would be scan images of old textbook tables of contents, for example.  Definitely not easy to find by a google search for obsolete books of the 60's, if you ever tried..." CreationDate="2017-08-13T16:51:42.387" UserId="2103" />
  <row Id="6971" PostId="3196" Score="0" Text="The way it's written now, you've answered your own question.  If that's not the case, then it's unclear what you're asking." CreationDate="2017-08-13T19:28:49.913" UserId="27" />
  <row Id="6979" PostId="3196" Score="0" Text="Sorry if  it's not clear enough : my answer states that I've  not found any example of &quot;procedural first&quot; approach in imperative programming in &quot;good old times&quot; (say before 1980) yet.  &#xA;Before I conclude there is none, I'd like to check from textbooks from that period how they ordered the concepts. In the late seventies I read all the programming books (fortran) in french from the university library, probably representative for what was published at the time (not very good books), they were all on the same model. &#xA;So I'd like to check for textbooks in english." CreationDate="2017-08-14T08:42:48.873" UserId="2103" />
  <row Id="6984" PostId="3196" Score="0" Text="@MichelBillaud Absent scanning _every_ textbook ever written in that time frame, it is impossible to prove it didn't exist. That's a classic problem in many area: proving the non-existence of something." CreationDate="2017-08-14T13:09:52.030" UserId="104" />
  <row Id="6995" PostId="3196" Score="0" Text="@GypsySpellweaver Of course I'm not interested at *every* textbook. Only some which would attest the existence of a real procedural approach. It doesn't seem impossible that someone still remembers what they learned/taught at the time. And maybe keeped the books." CreationDate="2017-08-14T17:26:36.857" UserId="2103" />
  <row Id="6999" PostId="3196" Score="0" Text="I'm guessing that _procedural first_ approach is intended to mean teaching how to use procedures before learning how to use a `while` loop, for example. If such is the case, it seems impossible as the procedures need the smaller building blocks just as much as the main program does." CreationDate="2017-08-14T17:39:09.217" UserId="104" />
  <row Id="7000" PostId="3196" Score="0" Text="You dont even need variables. Consider the task of drawing a picture from a number of calls (rect, ellipse, etc) to primitive functions. You will probably appreciate a linguistic support to the idea of splitting the work into parts : functions. Even void and without parameters, at the beginning. Is'nt it more appropriate  than groups of statements separated by comments ?" CreationDate="2017-08-14T17:48:48.057" UserId="2103" />
  <row Id="6879" PostId="3199" Score="0" Text="The on-line testing website codility give the last few marks for big-O. It is all done with automated unit tests." CreationDate="2017-08-10T17:59:10.717" UserId="204" />
  <row Id="7047" PostId="3199" Score="0" Text="When you are teaching about data structures, some points in implementation are explictely dictated by the requirement of some operations about their complexity (eg. O(1)  for direct access, O(n) for traversal, etc). So it depends on the question you ask : write a function + tell about the complexity, or write a function with the best complexity you can." CreationDate="2017-08-16T14:39:20.610" UserId="2103" />
  <row Id="6872" PostId="3200" Score="1" Text="Welcome to Computer Science Educators! Whilst this may theoretically answer the question, [it would be preferable](https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers/8259#8259) to include the essential parts of the answer here, and provide the link for reference." CreationDate="2017-08-10T16:23:22.380" UserId="150" />
  <row Id="6881" PostId="3202" Score="1" Text="Hi, welcome to [cseducators.se]! This is a bit of a stub answer. Good answers take a little more work.  Could you flesh out your theory a little bit?" CreationDate="2017-08-10T19:53:52.710" UserId="27" />
  <row Id="7229" PostId="3208" Score="0" Text="You may need to define &quot;gaps&quot;. He doesn't know about the latest technologies ? Same for me and I don't care. If you're thinking &quot;gaps&quot; in term of &quot;basic programming knowledge&quot; then what is that basic programming knowledge ?  Define it and you know what to test people against to." CreationDate="2017-08-24T10:03:03.483" UserId="1375" />
  <row Id="7234" PostId="3208" Score="1" Text="@Walfrat -- ok, I'll define a &quot;gap&quot; as &quot;a lack of awareness of some specific topic relevant to what the student is interested in&quot;. The topic could be big or small. For example, not being aware of the existence of data structures like lists or hashmaps is a gap. If the student is doing some data analysis in Python, not knowing about libraries like pandas or numpy is a gap. If the student is making a web page with complex layout, not being aware of the box model (and things like flexbox) is a gap. If the student is writing JS, not knowing how the 'this' keyword is scoped is a gap." CreationDate="2017-08-24T15:04:57.227" UserId="732" />
  <row Id="6907" PostId="3210" Score="2" Text="Is this purely self study, or do you or someone else intend to mentor him? I think that former might fail unless the student is already strongly self-motivated. Also, you might say a bit more about the student's actual interests, especially outside of computing; math, biology, literature, ..." CreationDate="2017-08-11T18:49:17.313" UserId="1293" />
  <row Id="6908" PostId="3210" Score="1" Text="We live about an hour apart, so any mentoring would have to be remote for the most part.  We could meet and discuss things, but honestly my time is limited.  I was hoping for something &quot;fun&quot; so there would be some self-motivation." CreationDate="2017-08-11T18:51:40.877" UserId="2550" />
  <row Id="6909" PostId="3210" Score="1" Text="I'm afraid it will be difficult. I have a similar issue with my grandson (a bit younger). I have a lot of materials that are age-appropriate, and _I'm_ motivated, but he is not, so nothing has happened. If he likes to build things in general, then you might have a hook (Lego Mindstorms, say). That hasn't worked yet with my grandson, though. :-(" CreationDate="2017-08-11T18:55:08.560" UserId="1293" />
  <row Id="6910" PostId="3210" Score="1" Text="Well, think about it this way... I don't want to motivate him to the point of steering him into a career he finds boring.  He's actively looking for career choices, so I want to give him something that isn't so dry that it turns him off immediately.  I want to take a &quot;give him the tools and let him play on his own&quot; approach.  I don't want to try to talk him into the career, just expose him to it." CreationDate="2017-08-11T18:58:29.913" UserId="2550" />
  <row Id="6921" PostId="3210" Score="1" Text="@Buffy Why the sad emoticon? Every kid is different, and it's not reasonable in the very least to expect them to do whatever it is that you want them to do. Trust me, it's the worst thing on earth when your family members want you to do something you don't have a passion for. Let them discover their interests, and encourage them in pursuing them!" CreationDate="2017-08-11T21:39:50.640" UserId="1912" />
  <row Id="6925" PostId="3210" Score="1" Text="@rahuldottech I agree, actually, and don't press him. It isn't a problem for either of us." CreationDate="2017-08-11T22:04:07.613" UserId="1293" />
  <row Id="6928" PostId="3210" Score="1" Text="All the kids these days with their tablets and their phones and their wearables and whatnot. Get the kid a used tablet and a copy of android studio (or xcode if that's how he rolls) and turn him loose. Android studio has a great intro tutorial to get a hello world app up. I'm sure xcode has something similar for iOS." CreationDate="2017-08-12T00:02:00.130" UserId="1790" />
  <row Id="6931" PostId="3210" Score="1" Text="Same way as for *any* subject: start with the **PURPOSE** of the subject and go from there.  (Though most teachers don't do this for most subjects.)" CreationDate="2017-08-12T01:05:59.220" UserId="1103" />
  <row Id="6986" PostId="3210" Score="1" Text="@nocomprende, I see what you're saying, but he's in a small town, and doesn't have any friends that are into it, and parents do not have technical jobs.  He's just literally never been exposed to it and hasn't had anyone to ask questions." CreationDate="2017-08-14T14:18:01.133" UserId="2550" />
  <row Id="6914" PostId="3211" Score="0" Text="Agree that Khan Academy and similar self-directed curricula are a great option. It's also worth noting that Khan Academy uses Processing (which I mentioned in my answer) behind the scenes." CreationDate="2017-08-11T19:11:13.573" UserId="2068" />
  <row Id="6912" PostId="3212" Score="1" Text="Yea, I threw the word test in there for lack of a better one, but I very much just want to give him something that he can work on to see if he enjoys it.  I think him enjoying it is better than him being naturally good at it." CreationDate="2017-08-11T19:01:09.793" UserId="2550" />
  <row Id="6913" PostId="3212" Score="0" Text="@JPhi1618 I agree with that last sentence 1000%. I'd definitely recommend checking out Processing. Maybe run through a few introductory lectures together and see if he takes it from there." CreationDate="2017-08-11T19:03:32.573" UserId="2068" />
  <row Id="6923" PostId="3213" Score="2" Text="PS: I don't like Scratch. At all. Too kiddish for me. While you can ask them to take a look at it, if they find it boring, don't insist. Keep this in mind, some kids just want to jump into the real stuff. Plus, typing stuff out is fun! :P" CreationDate="2017-08-11T21:48:56.837" UserId="1912" />
  <row Id="6929" PostId="3213" Score="1" Text="I as well don't like Scratch and am a young programmer *::high fives::* great advice." CreationDate="2017-08-12T00:46:18.470" UserId="919" />
  <row Id="7343" PostId="3213" Score="0" Text="Excellent way of doing this. for me, if a kid is really interested, I want to know that he can be autonomous with minimal guidance. That is how I did it and that is probably what I am looking for when I run into such kids." CreationDate="2017-08-27T07:18:33.073" UserId="2605" />
  <row Id="6966" PostId="3217" Score="0" Text="Would you agree that calculus problems are like puzzles?" CreationDate="2017-08-13T16:26:27.933" UserId="2550" />
  <row Id="6968" PostId="3217" Score="1" Text="@JPhi1618 I'd say it depends on the problem. However, in this instance, to test a student's interest/aptitude, I would stay away from subject-specific skills (e.g. calculus) and focus on logic puzzles that don't rely on subject-matter ability outside of CS." CreationDate="2017-08-13T16:38:22.313" UserId="76" />
  <row Id="6998" PostId="3218" Score="1" Text="Have you considered submitting your teaching materials to open-source teaching initiatives, to help other teachers (perhaps less experienced with programming) teach their own programming courses?" CreationDate="2017-08-14T17:35:46.900" UserId="2068" />
  <row Id="7042" PostId="3218" Score="0" Text="@KevinWorkman That could make a good answer. Can you write it up with advantages of doing this. And why to use a Free / Open-Source licence." CreationDate="2017-08-16T11:27:02.987" UserId="204" />
  <row Id="9018" PostId="3218" Score="0" Text="@ctrl-alt-delor [Done.](https://cseducators.stackexchange.com/a/3947/2068)" CreationDate="2017-11-08T21:52:13.853" UserId="2068" />
  <row Id="6967" PostId="3220" Score="1" Text="Very interesting take.  You bring up some good points that I didn't think of.  I appreciate you bringing you personal experience to this." CreationDate="2017-08-13T16:30:47.337" UserId="2550" />
  <row Id="6994" PostId="3220" Score="0" Text="According to this metric I have zero potential for programming. Hope nobody tells my boss." CreationDate="2017-08-14T16:20:35.923" UserId="2068" />
  <row Id="7280" PostId="3220" Score="0" Text="I'd reconsider your stance on video games, but actually narrow it down as well. I'd argue that people who are interested in *game optimization* would be an indicator. Playing Candy Crush probably won't do it. But a player who's really interested in optimizing their character in the latest MMORPG? Interests in speed running might also be good, since that also explores the limits of the game engine, including potential bugs/exploits. Someone who's really interested in exploring the limits of the game rules of that video game is akin to your board game/roleplaying game analogy I would think." CreationDate="2017-08-25T21:52:48.220" UserId="2707" />
  <row Id="6961" PostId="3221" Score="3" Text="Can you say a bit more about what the students have already done and what they can be expected to know? Also, are you pretty free to design the course or does the existing design impose constraints on you? Just edit your question to add more if possible. Also, if you are new to this site welcome. We will try to be as helpful as we can." CreationDate="2017-08-13T12:41:00.370" UserId="1293" />
  <row Id="6964" PostId="3222" Score="0" Text="A project course looks like a great idea, but I am not sure how to combine it with presenting the abstract OOP concepts. Isn't a project course encouraging students to just quickly writing code that works, rather than to think about OOP practices that only pay out in the long run?" CreationDate="2017-08-13T14:10:46.553" UserId="1873" />
  <row Id="7043" PostId="3222" Score="0" Text="Great ideas for a project course, I could use some of this. It should be possible to introduce OO topics along with appropriate parts of the projects. Also, a bit of refactoring later is good experience too. Reviewing the code is good, I have seen my students begin to write OO by passing member variable values around as arguments, missing the entire point." CreationDate="2017-08-16T11:55:21.650" UserDisplayName="user737" />
  <row Id="6990" PostId="3223" Score="2" Text="This sounds like a good subject for a debate rather than this forum. Perhaps you could talk to Prof Regis at U Washington to see what might be arranged for the next SIGCSE conference. I'd guess that there are many people near you who have tried each path and it would be interesting to see what they have to say." CreationDate="2017-08-14T15:04:25.897" UserId="1293" />
  <row Id="6991" PostId="3223" Score="1" Text="@nocomprende -- while that's true, I'm mainly interested in helping beginners who are evaluating their options right now and don't have the luxury of waiting another half-decade or two for bootcamps to become more of a known quantity. In particular, I guess I'm looking primarily for data to help people make informed decisions -- analysis and comparison is a nice bonus, but probably unnecessary." CreationDate="2017-08-14T15:07:50.547" UserId="732" />
  <row Id="6996" PostId="3223" Score="2" Text="@nocomprende *&quot;If bootcamps are terrible, they will fail and disappear.&quot;* They will only fail and disappear if people like us do the research and spread the word that they are terrible." CreationDate="2017-08-14T17:30:51.443" UserId="2068" />
  <row Id="6997" PostId="3223" Score="2" Text="I would also love to see a study on bootcamps, but I'm afraid it's even more complicated than your question. For example, you really need to factor in the **quality** of the job that's guaranteed by the bootcamp. I've seen more than a few bootcamps that end up just being cleverly disguised recruiters for data entry jobs. &quot;Learn how to be an engineer!&quot; &quot;Now fill out these spreadsheets for 8 dollars an hour.&quot; That is technically a full-time position, but it's not what was promised. That's the real danger to be aware of, IMHO." CreationDate="2017-08-14T17:32:44.477" UserId="2068" />
  <row Id="7048" PostId="3224" Score="0" Text="I often read about studies conducted without controls, or at tiny scales. But not all research is this way! With regards to research broadly, the best resource I've found is &quot;How People Learn&quot;, which really goes through the mechanics of learning: how brains attenuate, encode information, etc. That book is really very elucidating. The other good resource is &quot;What Works Clearinghouse&quot;, which the US DoE publishes every 10 years. It ranks research results by how strongly they are actually supported (by multiple studies, large groups, strong controls, etc). The &quot;strongly supported&quot; stuff is great." CreationDate="2017-08-16T15:38:09.813" UserId="27" />
  <row Id="7049" PostId="3224" Score="0" Text="(continued) You will be unsurprised to hear that the &quot;strongly supported&quot; research is *not* highly prescriptive. I share your wariness about the &quot;use this approach&quot; commands from ON-HIGH. But bad usage doesn't invalidate the best of educational research, which really can be very good. That's what I want to contribute to :)" CreationDate="2017-08-16T15:41:26.463" UserId="27" />
  <row Id="6987" PostId="3225" Score="1" Text="Your mention of simplicity over efficiency is important to note. Students should, of course, be aware of the tradeoff. And note that if the expected number of data points is expected to be small, then a simple solution may be much more valuable than a theoretically efficient one." CreationDate="2017-08-14T14:23:41.793" UserId="1293" />
  <row Id="7013" PostId="3228" Score="2" Text="Can you clarify what kinds of larger projects you mean or what the goal of the self learner is here?  In light of Buffy's answer: Are we talking about training for the job market, or about programming for fun/out of interest, or both?" CreationDate="2017-08-15T10:50:36.563" UserId="847" />
  <row Id="7018" PostId="3228" Score="0" Text="By the way, there's a [Topic Challenge](https://cseducators.meta.stackexchange.com/q/275/58?cb=1) going on." CreationDate="2017-08-15T14:51:56.783" UserId="150" />
  <row Id="7021" PostId="3228" Score="0" Text="@BlackJack -- good point. I edited my question to try and clarify. To answer your specific question: the self-learner could be both training for the job market or learning to code for fun." CreationDate="2017-08-15T15:14:36.580" UserId="732" />
  <row Id="7035" PostId="3228" Score="0" Text="Just saw your update, we were talking about completely different things. You meant &quot;large project&quot; (&quot;*experienced programmer might be able to pull off the same thing in a weekend*&quot;) I thought you meant large projects as in &gt; 100k sloc ;-). You can ignore my answer, it's not relevant. What you want is definitely possible with good learning material. Unfortunately I don't have any concrete advice(maybe just tell them to read some good books and not tutorials?)." CreationDate="2017-08-15T17:32:15.893" UserId="2149" />
  <row Id="7038" PostId="3228" Score="0" Text="*This question has been entered into [The Being Selfish challenge question contest](https://cseducators.meta.stackexchange.com/questions/275/topic-challenge-02-being-selfish).*" CreationDate="2017-08-15T20:47:11.457" UserId="27" />
  <row Id="7006" PostId="3230" Score="0" Text="I think there is a middle ground between tutorials and the kind of big projects you describe here and I guess that's the kind of projects the OP talks about. Because in my experience that is already considered too big by self learners right after the tutorial phase. Usually anything with more then three or four toy classes seems to be a challenge, because in most tutorials you learn the syntax to write classes, inheritance and so on, and the theory but the self learner then struggles to apply this even to a small or medium project. Which is already big from their point of view." CreationDate="2017-08-15T07:28:39.433" UserId="847" />
  <row Id="7007" PostId="3230" Score="0" Text="For the second bullet point I would recommend implementing a card or board game, or to re-implement some given program. It can be implemented by the self learner alone, and the complete specification/set of rules is already given." CreationDate="2017-08-15T07:31:40.217" UserId="847" />
  <row Id="7010" PostId="3230" Score="0" Text="Implementing from a written description is decidedly not the same as working for a client. The point is having another person in the loop who sets the direction, and can even change it. What you describe is still in the simplest part of the space, even if the program is larger than what you normally build. You could use something like that for the first method, however. Find a couple of other people to form a team and build a game that way." CreationDate="2017-08-15T10:11:05.150" UserId="1293" />
  <row Id="7012" PostId="3230" Score="0" Text="I'm not sure bigger project means working for a client in the context of the question. Self learning beginners usually struggle with the first “big“ project(s) after tutorials, where ”big” means big for _them_, not necessarily for an experienced, professional programmer. It might be a days work or a weekend project for those." CreationDate="2017-08-15T10:46:48.430" UserId="847" />
  <row Id="7005" PostId="3231" Score="1" Text="Most big projects aren't tackling big problems; they're tackling all the little details in a small but realistic problem. Managing this complexity is where people seem to get stuck, because strategies that work on the scale of a textbook exercise stop working." CreationDate="2017-08-15T00:19:18.577" UserId="1102" />
  <row Id="7040" PostId="3232" Score="0" Text="When expressed in formal math notation like this,  I don't get it. Expressed in code, I get it. I've been programming for 40 years +/-." CreationDate="2017-08-16T02:06:17.970" UserId="1537" />
  <row Id="7041" PostId="3232" Score="0" Text="This is arguably a simplest combinatorial problem possible. If a student can't get it, well, tough luck. Not everybody is cut to be a programmer." CreationDate="2017-08-16T04:14:55.923" UserId="182" />
  <row Id="7016" PostId="3233" Score="0" Text="Wow, I should write a program like this to get dressed for work! Shirts, ties, pants, socks... No wonder it is probably the hardest thing I do all day." CreationDate="2017-08-15T11:50:38.507" UserDisplayName="user737" />
  <row Id="7017" PostId="3233" Score="2" Text="@nocomprende no changing your jeans until you have worn all your shirts, ties, pants, socks in all their combinations. Sounds like a plan :)" CreationDate="2017-08-15T12:55:16.733" UserId="2584" />
  <row Id="7023" PostId="3235" Score="1" Text="This seems a bit chicken-and-egg? In my experience, companies tend to prefer hiring people who have already have a few large, non-trivial projects on their resume/portfolio that demonstrate their potential -- that's why many universities make their students work on projects or capstones as part of their curriculum, and why many people advise job seekers to work on side projects. If the only way to become good at larger projects is by getting a job, but employers prefer hiring entry-level devs who've already completed larger projects, what is a beginner supposed to do?" CreationDate="2017-08-15T15:20:49.473" UserId="732" />
  <row Id="7024" PostId="3235" Score="0" Text="@Michael0x2a You are talking about something else, my position is that in order to actually reach professional level you have to be a professional for some time, university projects are not going to cut it. And yes, it definitely sucks being a beginner, they are supposed to get by, that's what people do. My cousin for example looked nearly 6 month for his first job after graduating. Even then it was for a quarter of the average salary, his next job ~1.5 years later was much better and with the one after that ~3 years after graduation he was able to make standard software developer salary." CreationDate="2017-08-15T15:41:47.197" UserId="2149" />
  <row Id="7025" PostId="3235" Score="0" Text="I'm not sure I agree, but that's probably not a debate worth having atm. To work within the framework of your answer: I'm interested in helping beginners and self-learners who struggle to complete even university-level projects, especially the ones that are expected to take a few weeks to complete. What advice would you give to those beginners?" CreationDate="2017-08-15T16:00:12.567" UserId="732" />
  <row Id="7026" PostId="3235" Score="0" Text="@Michael0x2a What kind of help are we talking about? If you can have them actually work with you(or some other experienced developer) on a project for a long period of time then it's possible. If you are talking about writing a tutorial or some forum/messages to help then imho it's not possible." CreationDate="2017-08-15T16:18:46.350" UserId="2149" />
  <row Id="7028" PostId="3235" Score="1" Text="it seems we fundamentally disagree on the premise, then. Based both on my personal experience and from watching the progress of a variety of other self-learners, I feel it is very much possible for a self-learner to scale up to independently working on large projects without any direct guidance. You can find examples of what I mean by &quot;help&quot; by looking at the other answers that have been posted so far." CreationDate="2017-08-15T16:32:17.490" UserId="732" />
  <row Id="7029" PostId="3235" Score="0" Text="@Michael0x2a It's definitely possible just in my opinion very difficult. I started programming when I was 10, worked on my first big project in a professional environment when I was 18 and learned **a lot** from my team lead, I really don't see how I could've replaced those 3 years with self learning. Your personal experiences are obviously different and I hope you will succeed in helping other people to follow your path. As to the other answers..." CreationDate="2017-08-15T16:50:49.213" UserId="2149" />
  <row Id="7030" PostId="3235" Score="0" Text="@Michael0x2a **Buffy** - Talks about teamwork and specifications not code complexity. **Kevin** - Don't work on big projects. **Itamar** - It's all in your head. I don't see how any of this is helpful." CreationDate="2017-08-15T16:52:14.500" UserId="2149" />
  <row Id="7285" PostId="3235" Score="0" Text="@Oleg I believe that your answer is relevant. If such an opportunity presents itself, working on a large project for a company (even if it is pastime) for some time (if not an entire year) is useful. I have just upvoted your answer because I agree with your views. It might work for some self learned students, and actually encourage them to self learn even more." CreationDate="2017-08-26T06:33:36.813" UserId="2605" />
  <row Id="7319" PostId="3235" Score="0" Text="@Jay Thanks, wasn't expecting any upvotes on this one ;). I do think it might be useful to someone and this is why I left it. It's generally relevant to people who want to learn programming but strictly in the StackOverflow sense of answering the question it's not really relevant." CreationDate="2017-08-26T17:24:37.740" UserId="2149" />
  <row Id="7335" PostId="3235" Score="0" Text="precisely Oleg. The whole self-learning thing is huge, and when there are lack of resources and guidance (like how it is in my city), self learning is the only way to learn anything. The base question is, why would you self learn? So you can get a better career, a hike or more money or better opportunity. At the end of the day, I approach the profession of teaching as way to ensure livelihood to my students more than anything else. From that angle, your answer makes practical sense to me." CreationDate="2017-08-27T06:35:33.687" UserId="2605" />
  <row Id="7095" PostId="3240" Score="2" Text="Maybe an 8a: Write code that doesn't _need_ comments. Comments are for explaining why the code does what it does — if that's not obvious from the code itself anyway. So if you feel the need for a comment, think for a moment how the code can be written clearer, so it doesn't need a comment. This comes down to names most of the time, but also to restructuring code and/or data sometimes." CreationDate="2017-08-18T09:29:14.810" UserId="847" />
  <row Id="7112" PostId="3240" Score="0" Text="@BlackJack I strongly disagree, it's arguable if striving to write code that doesn't require comments is generally good, it's definitely a terrible advice for a beginner. I don't think that this is something they should be concerned about and it will make there task of moving to bigger projects much more difficult. \@heather This is a very good answer, please leave it as is or change it only based on your personal experiences." CreationDate="2017-08-19T02:09:25.470" UserId="2149" />
  <row Id="7119" PostId="3240" Score="0" Text="@Oleg Why isn't it generally good for beginners to aim to write code that's clear and understandable? Thinking about and finding good names for instance is very important. If you can't come up with good names it is often a sign that the problem or the solution isn't fully understood, or a function mixes different concerns or data structures bundle things that don't actually belong together. Structure in code and data becomes more important the bigger projects get, so I think it is actually very good, for beginners and others, to think about expressing their ideas in understandable code." CreationDate="2017-08-20T10:17:02.473" UserId="847" />
  <row Id="7120" PostId="3240" Score="0" Text="@BlackJack Having good names is a good suggestion. However I think that trying to &quot;Uncle Bob&quot; there code will only confuse them and make there task much more difficult. If they manage to come up with a 40 line function that does what they want, adding some comments that explain what each part does and moving on will be better for them. &quot;Clean Code&quot; is meant for more advanced programmers and in my personal opinion many times I saw &quot;Uncle Bob&quot; take a perfectly fine and readable code and make it much less readable. I do admit that it's the minority opinion." CreationDate="2017-08-20T13:03:30.227" UserId="2149" />
  <row Id="7224" PostId="3240" Score="1" Text="&quot;Never, ever, ever feel like using Google/Stack Overflow is cheating. It isn't, or if it is, cheat away.&quot; - this is an excellent advice. For some reason, a lot of students feel that they should 'everything' on their own. It takes a huge cultural change to make folks understand that copying blatantly and avoiding reinventing the wheel is not the same thing." CreationDate="2017-08-24T03:37:22.160" UserId="2605" />
  <row Id="12863" PostId="3241" Score="0" Text="In real life (business) there is always a tradeoff between time/cost/difficulty of implementation+maintenance, and the benefit of a solution. For this reason, it is not the case that the most algorithmically efficient way to solve a problem is always required, nor necessarily the best for a given problem." CreationDate="2018-06-19T07:38:39.800" UserId="1090" />
  <row Id="7058" PostId="3242" Score="0" Text="I didn't DV, but it feels like you need to connect this back to the question a bit more.  It's also not entirely clear what you mean by &quot;lost progress&quot;." CreationDate="2017-08-16T19:14:48.980" UserId="27" />
  <row Id="7059" PostId="3242" Score="0" Text="Seems motivating to me. Cut the GNU guy some slack, eh?" CreationDate="2017-08-16T19:17:56.840" UserDisplayName="user737" />
  <row Id="7057" PostId="3243" Score="0" Text="Thanks Ben, this is great, I found your experience and your examples very interesting. +1 for you. I hope we can get a couple of answers more." CreationDate="2017-08-16T19:06:32.127" UserId="2480" />
  <row Id="7060" PostId="3243" Score="4" Text="A polynomial $O(n^3)$ cannot possibly grow faster than the Moore's exponent. I understand what you are trying to convey, but I strongly suggest you to rephrase." CreationDate="2017-08-16T22:51:44.200" UserId="182" />
  <row Id="7065" PostId="3243" Score="0" Text="@user58697 Ugh, that's a tricky wording." CreationDate="2017-08-17T10:59:52.680" UserId="27" />
  <row Id="7100" PostId="3243" Score="0" Text="@user58697 Is the wording now sufficiently clear?" CreationDate="2017-08-18T14:10:41.830" UserId="27" />
  <row Id="7061" PostId="3245" Score="0" Text="Could you add an example of something that is expressed much more concisely in Scala than Java?" CreationDate="2017-08-17T00:23:59.070" UserId="58" />
  <row Id="7066" PostId="3245" Score="0" Text="Nope @thesecretmaster. I don't know Scala." CreationDate="2017-08-17T11:34:46.410" UserId="65" />
  <row Id="7063" PostId="3248" Score="0" Text="Are you a residential college/university? Do most of your students live on campus or very locally?" CreationDate="2017-08-17T09:45:51.057" UserId="1293" />
  <row Id="7091" PostId="3248" Score="0" Text="@Buffy -- I'd estimate the majority of the students live on or near campus, but a decent subset of the students are commuters. As I'm sure you're going to say, that's yet another problem..." CreationDate="2017-08-18T01:16:12.603" UserId="732" />
  <row Id="7064" PostId="3249" Score="0" Text="Welcome to [cseducators.se]! A very thorough answer, and very good, too." CreationDate="2017-08-17T10:15:12.743" UserId="150" />
  <row Id="7104" PostId="3252" Score="1" Text="This question has been re-opened. At this point we are looking for answers, so unless further clarification is necessary, let's direct all energy there rather than here in the comments. @Nat, you have some great ideas, so maybe you can take them and form them into one cohesive answer." CreationDate="2017-08-18T21:28:56.513" UserId="76" />
  <row Id="7077" PostId="3254" Score="0" Text="Looks like a beautiful example. Nice illustrations too. I created a program called &quot;FizzyCalc&quot; which looks like a simple calculator, to demonstrate using one event handler for multiple buttons. All the digit buttons are handled by one method, which simply pulls the digit value from the label of the button. The math methods pull their symbol from their button and apply in a Case statement. I will try implementing it in HTML + CSS." CreationDate="2017-08-17T16:41:10.913" UserDisplayName="user737" />
  <row Id="7097" PostId="3256" Score="0" Text="I would suggest points 3 and 4 of this post: https://cseducators.stackexchange.com/a/3251/1293. It will take you about one class period, but if carefully done, demonstrates both the technique and its benefits. I think that book describes what might happen _after_ such an introductory lesson." CreationDate="2017-08-18T13:47:03.163" UserId="1293" />
  <row Id="21520" PostId="3256" Score="0" Text="Have you gained any insight about teaching pair programming since you asked the question in 2017? Personally, I am not a fan of pair programming, as my answer here https://cseducators.stackexchange.com/a/7551/9884 shows (lol). But after trying github copilot for several months, I really like the idea of AI pair programming." CreationDate="2023-11-16T09:52:06.593" UserId="9884" />
  <row Id="21521" PostId="3256" Score="0" Text="@Qiulang邱朗 I don't have many insights to characterize. I've been using it on and off for years, and I find that it helps some students tremendously (as in they affirmatively learn more and also produce better work), and it allows some other students to slack off.  My best observation is that it is a difference of difficulty; if both of the students find the work genuinely challenging, then they are often willing to both invest as a team, and they both learn by having a partner. If one is underchallenged, they just take over, and if both are underchallenged, one checks out." CreationDate="2023-11-16T13:25:14.790" UserId="27" />
  <row Id="21522" PostId="3256" Score="0" Text="@Qiulang邱朗 As a result, I've been using pair programming for labs that really stretch students, but I avoid it on easier labs.  One one particularly daunting lab that I give, I *nearly* require it, and only allow exceptions for students who *really* want to work alone.  This has worked out well, because the lab is very, very hard, and they genuinely need each other to figure it all out.  It is also a good lab to show why, when facing sufficiently complex problems, divide and conquer is a poor team strategy. Students who try to divide and conquer almost never turn in working labs." CreationDate="2023-11-16T13:27:18.643" UserId="27" />
  <row Id="21525" PostId="3256" Score="0" Text="“divide and conquer is a poor team strategy” interesting! I would suggest you try github copilot and it has student pack, https://education.github.com/pack" CreationDate="2023-11-16T14:49:53.817" UserId="9884" />
  <row Id="21527" PostId="3256" Score="0" Text="@Qiulang邱朗 I haven't had much use for copilot, to be honest.  (I do use ChatGPT a bunch, however).  And to clarify: much of programming, *most* or programming, can use divide and conquer.  But small, highly intellectually dense problems do not lend themselves to this approach.  Imagine trying to work with a teammate on Programming Koans using a divide and conquer approach, and you will see the problem immediately. I believe that the concentrated intellectual density is the obstacle here. It is similarly so with my very difficult lab: students cannot bring together what they have created apart." CreationDate="2023-11-16T16:23:27.607" UserId="27" />
  <row Id="7101" PostId="3257" Score="0" Text="@Buffy The original poster mentioned high school so I was assuming that he is with his students when they are doing their programming assignments." CreationDate="2017-08-18T20:58:39.590" UserId="2145" />
  <row Id="7103" PostId="3257" Score="0" Text="@CSCheerleader. probably not a safe assumption. Also, In the situation you were describing, I'd rather do &quot;teaching by wandering around&quot;, nudging, rather than employing my &quot;serious face.&quot; I think positive rather than negative enforcement  is likely more effective. I might sit down as a second &quot;navigator&quot; for example and just make the appropriate comments. Note that you can edit your own answers to be more complete." CreationDate="2017-08-18T21:08:56.273" UserId="1293" />
  <row Id="7108" PostId="3257" Score="0" Text="I'm going to guess that you would do better with a rule not based on time. If you interrupt the driver's thought process with a bell you set them back.  The driver should be focused like a laser. Since I use small tasks with required tests, the switch can be at the end of a task. If the students task themselves, then at the end of, say, each method written, though even that is a bit artificial. But always switch when the driver is stuck and the navigator has a suggestion." CreationDate="2017-08-19T00:45:25.533" UserId="1293" />
  <row Id="7110" PostId="3257" Score="0" Text="The time rule has worked for me.  I do think your idea of having the periods be based on tasks instead of time is a good one and will consider using that  in the future when the opportunity affords itself." CreationDate="2017-08-19T01:30:41.190" UserId="2145" />
  <row Id="7175" PostId="3257" Score="0" Text="'d be happy to have a conversation about the switching of roles in the CSEducators classroom:https://chat.stackexchange.com/rooms/59174/the-classroom. I've also updated my answer to explain the ideas a bit more completely." CreationDate="2017-08-22T14:55:56.707" UserId="1293" />
  <row Id="7105" PostId="3259" Score="4" Text="Normally assembly code is still symbolic and needs to be further translated to machine code (assembled). But is there a reason that you want to go to actual hardware? Many compiler courses compile for a machine simulator instead. That gives you the chance to use a more rational machine definition than most actual hardware provides. Real machines can be messy." CreationDate="2017-08-18T23:53:39.627" UserId="1293" />
  <row Id="7106" PostId="3259" Score="1" Text="Two additional problems you need to solve with real hardware is (a) a link between the development and target machines, and, (b) if the target has an OS, dealing with that as well. The complications are one reason for using pseudo-hardware instead, so the students can focus on the compilation process itself - especially in a first compiler course." CreationDate="2017-08-19T00:00:42.073" UserId="1293" />
  <row Id="7107" PostId="3259" Score="1" Text="Also, welcome to [cseducators.se]! I have starred this question as one that I am interested in. In my program, we teach on a simulation of the 6502. The limited number of registers and commands make it pretty manageable. I hope to hear more from you around the site." CreationDate="2017-08-19T00:27:16.197" UserId="27" />
  <row Id="7109" PostId="3259" Score="1" Text="And the 6502 has a reputation as a pretty clean design. So does the Zilog Z80 if you can find a simulator. Intel hardware tends to be more complicated after the first couple of editions (i.e. 8080). @BenI. have you got a reference for the 6502? Maybe a full answer is warranted." CreationDate="2017-08-19T00:52:00.510" UserId="1293" />
  <row Id="7111" PostId="3259" Score="0" Text="Thanks for the answers, Yes the students will build a simple compiler and of course this will generate assembly code (MOV, LOOP, etc). So with this can we play with some hardware or do we need something more?" CreationDate="2017-08-19T02:04:10.970" UserId="2055" />
  <row Id="7113" PostId="3259" Score="0" Text="It might be a good idea for you to visit the classroom to chat. I think you can get some good advice there: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2017-08-19T12:14:33.640" UserId="1293" />
  <row Id="7114" PostId="3259" Score="0" Text="One idea maybe is to not target hardware but instead target LLVM (which in turn can target all sorts of devices -- even web browsers). Caveat: I've never done this myself, so don't know for certain if this is actually a good idea or not, from a pedagogical point of view." CreationDate="2017-08-19T19:00:02.503" UserId="732" />
  <row Id="7115" PostId="3259" Score="0" Text="The MIPS SPIM simulator is good, that's what I learned on in college." CreationDate="2017-08-19T22:05:49.107" UserId="1299" />
  <row Id="7132" PostId="3259" Score="0" Text="z80 is not very clean, is has a lot of special purposes register, like the x86, so you can spend a lot of instructions just moving data from register to register. 6502 and Arm are nice, so also is this old CPU MC68000." CreationDate="2017-08-20T23:22:49.593" UserId="204" />
  <row Id="7116" PostId="3260" Score="0" Text="Thanks a lot fro you answer Ben. Didn't know about this and sounds like a great idea. Im interested in purchasing one of this computers in eBay. What computer do you recommend us to use? And after we have it. How can we pass assmebly code to it? and through what?  Thanks. Any manual o explanation?" CreationDate="2017-08-19T23:04:54.210" UserId="2055" />
  <row Id="7117" PostId="3260" Score="0" Text="I haven't dealt with the hardware myself, though that complete assembly specification goes so far as to give the byte-code for each processor command. I'd guess that each of the machines provides their own way to enter your assembly programs.  (You may need to find a way to transfer files to a 5 1/4 inch floppy disk.)" CreationDate="2017-08-19T23:06:55.497" UserId="27" />
  <row Id="7118" PostId="3260" Score="0" Text="Then that works for me :) Thanks a lot Ben. I'll do a research about this. And I think we will start working in building a compiler for the 6502. Thank you so much for your help :) Greetings." CreationDate="2017-08-19T23:18:25.550" UserId="2055" />
  <row Id="7130" PostId="3260" Score="0" Text="The 6502 ISA, although nice for hand coding, is not the best instruction set target for a modern compiler.  The most popular compilers (UCSD Pascal and others) for 6502 PCs targeted an interpreted P-code instead." CreationDate="2017-08-20T21:22:36.473" UserId="59" />
  <row Id="7134" PostId="3260" Score="0" Text="@hotpaw2 I can't find that information anywhere.  Where are you seeing that?  And also, what p-code was used?  Presumably the p-code would be a better match, then, if one were to take this path." CreationDate="2017-08-21T02:28:02.630" UserId="27" />
  <row Id="7231" PostId="3260" Score="0" Text="The BBC micro has A version of basic with an integrated assembler. This may make it useful for some classes, as a stand alone machine. With all of these old machines, check for display screen comparability." CreationDate="2017-08-24T10:51:19.387" UserId="204" />
  <row Id="7121" PostId="3262" Score="0" Text="I agree very much with the practical considerations you've outlined here. When I think about this issue in my own classroom, I worry more about attentional and learning aspects, and I'm not sure if I'm getting this right. Welcome to [cseducators.se]! I hope we hear more from you around the site." CreationDate="2017-08-20T13:57:14.823" UserId="27" />
  <row Id="7122" PostId="3262" Score="1" Text="And of course I totally disagree, but welcome to the site and we look forward to your future contributions. Interesting profile too." CreationDate="2017-08-20T15:20:55.533" UserId="1293" />
  <row Id="7123" PostId="3262" Score="0" Text="Folks, thank you for the welcome. &#xA;&#xA;When you say attentional, I am guessing, you are referring to the laptop itself becoming a source of distraction aka causing them to lose attention. In the beginning, I used to worry about but after a while I told myself that, at some point I got to trust my students to do the right thing. Which is to take notes and not use the computer for something else." CreationDate="2017-08-20T15:54:01.703" UserId="2605" />
  <row Id="7126" PostId="3265" Score="2" Text="What does this answer add to [this other answer about using the command line instead of a GUI and mentioning online git resources such as GitHub, GitLab, BitBucket, etc.](https://cseducators.stackexchange.com/a/2912/58)?" CreationDate="2017-08-20T18:47:46.743" UserId="58" />
  <row Id="7139" PostId="3265" Score="0" Text="I read through all the answers and realised that what helped me 2 years ago, the simple stuff, wasn't there. I have used this technique in live training sessions and it has helped hundreds of students. &#xA;&#xA;When it comes to training and learning things, I believe that there is one right method. there are many methods, and the more the merrier. The post is about making GIT easy. I shared what made it easy for my students :)" CreationDate="2017-08-21T04:01:11.457" UserId="2605" />
  <row Id="7141" PostId="3265" Score="0" Text="(not able to edit my comment so posting this here) in the above comment, 'I believe that there is one right method'. &#xA;&#xA;I meant, &quot;I believe that there is no one right method&quot; :)" CreationDate="2017-08-21T05:31:50.380" UserId="2605" />
  <row Id="7143" PostId="3265" Score="0" Text="Yes, it's great that you are willing to share your experiance, but you still havn't explained how your experiance is any different from the other answer I linked." CreationDate="2017-08-21T11:14:02.153" UserId="58" />
  <row Id="7144" PostId="3265" Score="0" Text="I am sorry man, but I really have nothing else to add. I thought this forum was about sharing experiences. I checked all the other answers. I believe things can be a little more succinct. If my answer is so bad (or spam, accidentally), I am sure it should and will get down voted into oblivion, and I will be schooled. &#xA;&#xA;However, after your comments, I ran this page and all the answers including mine with my own students. So, I will stick with my answer and I do believe it adds some value to the discussion here." CreationDate="2017-08-21T11:43:19.817" UserId="2605" />
  <row Id="7146" PostId="3265" Score="0" Text="Let's continue this conversation [in chat](http://chat.stackexchange.com/rooms/64170/discussion-on-answer-by-jay-how-to-make-git-easy-to-learn)." CreationDate="2017-08-21T11:56:28.800" UserId="58" />
  <row Id="8930" PostId="3265" Score="0" Text="for a local project you need to do a `git init`." CreationDate="2017-11-02T22:36:32.810" UserId="204" />
  <row Id="7124" PostId="3266" Score="0" Text="*This question has been entered into [The Being Selfish challenge question contest](https://cseducators.meta.stackexchange.com/questions/275/topic-challenge-02-being-selfish).*" CreationDate="2017-08-20T18:13:06.993" UserId="919" />
  <row Id="7125" PostId="3267" Score="0" Text="So, Getting Raspberry Pi's (ej Zero cheapest one), can we get the work done for the students on writing assembly code?" CreationDate="2017-08-20T18:36:09.423" UserId="2055" />
  <row Id="7129" PostId="3267" Score="1" Text="Likely yes.  A generic web search turns up tons of sites/pages with tutorials on programming a Pi in ARM ASM." CreationDate="2017-08-20T20:40:54.673" UserId="59" />
  <row Id="7149" PostId="3268" Score="2" Text="+1 for a list of good queries. I didn't know about half of these (I certainly had never heard of a linter before now), so this is now my go-to post when self-learning - thank you." CreationDate="2017-08-21T13:05:38.263" UserId="2613" />
  <row Id="7150" PostId="3268" Score="0" Text="As a further suggestion - I also recommend having at least one or two code beautifiers for the language you're learning, especially if they can help show where a block of code isn't especially intelligible (both to help anyone proof-reading your code, or even &quot;future you&quot; when reading back over something you wrote before)." CreationDate="2017-08-21T13:07:57.007" UserId="2613" />
  <row Id="7156" PostId="3268" Score="1" Text="+1 for Code Review, which exists specifically for experienced developers to help improve code." CreationDate="2017-08-21T17:57:13.097" UserId="659" />
  <row Id="7257" PostId="3268" Score="0" Text="Well the first part of your post is what I answered to you about how to fill &quot;gaps&quot;  when they're localized, by opposition to wider concept. I feel like I didn't add anything meaningfull now xD." CreationDate="2017-08-25T13:59:55.777" UserId="1375" />
  <row Id="7135" PostId="3270" Score="1" Text="Would a practical masters be looked at in a positive light, or basically as a waste of time?" CreationDate="2017-08-21T02:31:29.507" UserId="27" />
  <row Id="7136" PostId="3270" Score="1" Text="Well, no rigorous program in something you're interested in studying is a waste of time. Whether it will help for PhD admission probably depends on how prestigious his undergraduate degree is. (Most people apply to PhD programs with only an undergraduate degree.) Someone could come out of this program with a strong recommendation from a Georgia Tech professor." CreationDate="2017-08-21T02:41:30.460" UserId="283" />
  <row Id="7152" PostId="3270" Score="0" Text="I'm thinking that this is much more applicable to someone who wants to work in industry rather than develop an academic career. Not that it would be a waste of time, but it would cost time that might be better spent." CreationDate="2017-08-21T13:29:19.147" UserId="1293" />
  <row Id="7137" PostId="3271" Score="2" Text="&quot;Cargo-cultist&quot; made me chuckle :)  Welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-08-21T03:27:17.393" UserId="27" />
  <row Id="7138" PostId="3271" Score="1" Text="Welcome to [cseducators.se] NotSpooky! Feel free to stop by [our chat room](https://chat.stackexchange.com/rooms/59174/the-classroom) if you're interested in talking to us :)" CreationDate="2017-08-21T03:28:07.293" UserId="58" />
  <row Id="7142" PostId="3272" Score="1" Text="Hi, Jay, welcome to the site, I wish you much success. We sound very similar." CreationDate="2017-08-21T10:43:56.263" UserDisplayName="user737" />
  <row Id="7145" PostId="3272" Score="0" Text="thank you, and if we are similar then that is super cool." CreationDate="2017-08-21T11:46:30.807" UserId="2605" />
  <row Id="7148" PostId="3273" Score="1" Text="Note this is an education question, it is not a computer-science-education question. But I still like it (I am not saying it should be closed).  Just because we use a computer for something does not make it more computer science. “Computer science is about computers, in the same why that astronomy is about telescopes, or poetry is about pens.”" CreationDate="2017-08-21T13:03:39.460" UserId="204" />
  <row Id="7153" PostId="3273" Score="1" Text="just to add some clarity. You would be surprised how many 'computer classes' are conducted where I live, without actual computers. If it wasn't actually very sad, I would actually laugh about it. At least where I live, the only place where I can assume that my students will have access to computers and internet (and hence ebooks are a feasible option) are only in a computer class." CreationDate="2017-08-21T15:10:11.670" UserId="2605" />
  <row Id="7157" PostId="3273" Score="0" Text="You can study astronomy without a telescope, and poetry with out a pen. see [cs unplugged](http://csunplugged.org/). It is often better that way." CreationDate="2017-08-21T18:56:33.553" UserId="204" />
  <row Id="7160" PostId="3273" Score="0" Text="I tell my students: whichever you learn best from (or whichever is more affordable)." CreationDate="2017-08-21T22:19:24.440" UserId="283" />
  <row Id="7164" PostId="3273" Score="0" Text="If there is one thing I learnt about people (at least where I live) affordability always has the highest priority even for the rich kids. I don't know why that is (may be it is a cultural thing here) but I am leaning towards e-books as more and more thoughts pour in here." CreationDate="2017-08-22T03:43:09.863" UserId="2605" />
  <row Id="7167" PostId="3273" Score="1" Text="its true about the astronomy without telescope thing. I am agreeing with you on that. My question is more for a target audience that is willing (rather insisting) to buy the telescope, and I am just trying to figure out if they want a real telescope or a virtual on. I did not have to deal with the real or virtual a year ago, but now I do. Hence the dilemma." CreationDate="2017-08-22T03:50:40.553" UserId="2605" />
  <row Id="7165" PostId="3274" Score="1" Text="To add some clarity, the folks (students) I interact will rarely if ever dig deeper into computer historical books. At best, they are looking at a book to be used for the duration of the training course, and then may be use that book till they get a job (or a promotion if they already have the job). Then, they might end up using the book as a reference during their job." CreationDate="2017-08-22T03:45:05.207" UserId="2605" />
  <row Id="14506" PostId="3275" Score="0" Text="I like this perspective on the ephemerality of knowledge. I'd not really considered it in those terms, but you make a great point about always appraising what you do and know, and always at least being ready to find a better way of doing something." CreationDate="2019-03-14T15:27:45.710" UserId="2613" />
  <row Id="7166" PostId="3276" Score="0" Text="With respect to specifically about DRM, I have made my peace with that. For instance, all of my games are on Steam, and sure, if Steam some day dies, I will be in trouble. Same goes to the hundreds of dollars I have poured on apps from the App Store. I think, at this point in my life (and by extension any advice I give to my students) will implore them to accept that DRM is part of their lives too." CreationDate="2017-08-22T03:47:19.560" UserId="2605" />
  <row Id="7172" PostId="3276" Score="0" Text="@jay That is up to you, however note that this is not inevitable. You are in charge of you. You do not have to change the world to change you. https://www.youtube.com/watch?v=cX8szNPgrEs" CreationDate="2017-08-22T10:16:16.843" UserId="204" />
  <row Id="7154" PostId="3277" Score="3" Text="This is a great question!" CreationDate="2017-08-21T15:40:33.370" UserId="27" />
  <row Id="7158" PostId="3277" Score="1" Text="I agree, projection is vital, and making it easier to follow is important. The simplest suggestion I have is to project on to a whiteboard and write / underline with markers. When I do that with the textbook, they can underline the same things that I do." CreationDate="2017-08-21T19:29:50.540" UserDisplayName="user737" />
  <row Id="7162" PostId="3277" Score="0" Text="@nocomprende Oh yes, I did this once or twice. It is awesome. Why not post it as an answer? Also, an active board can be useful too in a similar but extended way." CreationDate="2017-08-21T22:55:51.700" UserId="51" />
  <row Id="7169" PostId="3277" Score="1" Text="As a student, here's what works for me: Have a full section of the code on your slides (like you get in a book). Do not show the code in an editor (it's distracting). Avoid making changes to the code quickly (over your slides), instead discuss what change you're going to make and have it clearly marked when it happens. Before you even get to big sections of code, discuss what it's going to do, introduce new syntax in isolation and have diagrams of algorithms (if relevant). Don't expect code you show to be understood well - if you want that, have students write something similar as an exercise." CreationDate="2017-08-22T07:55:19.570" UserId="2623" />
  <row Id="7170" PostId="3277" Score="0" Text="https://marketplace.visualstudio.com/items?itemName=LiamMorrow.PowerMode or https://atom.io/packages/activate-power-mode -- full list: https://github.com/codeinthedark/awesome-power-mode" CreationDate="2017-08-22T09:46:08.383" UserId="2624" />
  <row Id="7223" PostId="3277" Score="0" Text="Make your code from each day downloadable or otherwise accessible." CreationDate="2017-08-23T23:33:50.650" UserId="21" />
  <row Id="7291" PostId="3278" Score="0" Text="Ah! I like this suggestion. It should be very useful to my own methods." CreationDate="2017-08-26T09:55:07.810" UserId="2605" />
  <row Id="7155" PostId="3279" Score="5" Text="Welcome to [cseducators.se], Mr. Tower!  We're always glad to have another teacher join our community. =) Could you describe a bit more about thonny?  Ideal answers on this site have a little more information than you've provided here." CreationDate="2017-08-21T15:45:10.647" UserId="27" />
  <row Id="7185" PostId="3279" Score="0" Text="Did you know that you can tune Thonny to be more suitable for projecting by turning on Expert mode: https://groups.google.com/forum/#!msg/thonny/Tvj0ioD3WJ8/7g6jw4UFBgAJ;context-place=topic/thonny/VYRKG43qevk" CreationDate="2017-08-23T05:26:22.620" UserId="2632" />
  <row Id="7715" PostId="3283" Score="0" Text="I would differ here as Turbo-C was used here in Pakistan as well but it was exactly the reason why I kept loathing programming for a long time. C is difficult or not is a separate topic but Turbo C is an awful IDE (imo) for sure. Being a teacher, first thing I managed was keeping an arm's length between my students and Turbo C and it reaped dividends as well." CreationDate="2017-09-01T07:22:49.490" UserId="2537" />
  <row Id="7716" PostId="3283" Score="0" Text="Just to clarify, I am recommending go with C but please god please don't use Turbo C indeed. Man, that thing (although OKAY at that time, 15 years ago) is just awful by todays standards. Its easier to just use an online C compiler, and if that is not available, Visual Studio or GCC." CreationDate="2017-09-01T08:25:13.940" UserId="2605" />
  <row Id="12276" PostId="3283" Score="0" Text="« I never got a chance to use C professionally » You were lucky you never had to program in C professionally." CreationDate="2018-05-03T12:49:18.747" UserId="2103" />
  <row Id="12277" PostId="3283" Score="0" Text="I got to agree with that, and I do count myself lucky. I still dread C :)" CreationDate="2018-05-03T16:41:54.357" UserId="2605" />
  <row Id="7176" PostId="3284" Score="0" Text="You said: &quot;Programming is a profession geared towards Autodidacts&quot;. Yes! Technician, teach thyself!" CreationDate="2017-08-22T15:38:41.930" UserDisplayName="user737" />
  <row Id="7173" PostId="3285" Score="0" Text="This is also very useful because it helps them get used to GIT. Thanks!" CreationDate="2017-08-22T12:09:31.673" UserId="51" />
  <row Id="7203" PostId="3287" Score="1" Text="'methods' is the modern term. Subroutine usually refers to languages that cannot return values from methods. Like old Basics or Fortrans. But it can mean a method which may or may not return a value. Nonsense to someone steeped in Functional." CreationDate="2017-08-23T13:08:19.853" UserDisplayName="user737" />
  <row Id="7297" PostId="3291" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64475/discussion-on-question-by-aivar-students-can-solve-programming-exercises-but-not)." CreationDate="2017-08-26T10:49:15.410" UserId="58" />
  <row Id="7924" PostId="3291" Score="1" Text="IMHO, if a student can prove that their program satisfies a specification, they understand the program. Proof of correctness requires knowledge of types of values, conditions on values, and much more." CreationDate="2017-09-10T11:12:52.370" UserId="160" />
  <row Id="17608" PostId="3291" Score="0" Text="Code with pen and paper. It might sound odd at first but solves a lot of issues. Small exercises can basically be solved by brute force. Type a few things - run - make changes - run again - fix a few conditions - run again. Use smaller exercises and let them code with pen and paper. Ignore small mistakes like a single missing semicolon or minor typos. Now you can basically see what's in the head of your students and what you need to teach/address." CreationDate="2021-01-29T18:13:44.353" UserId="10051" />
  <row Id="7296" PostId="3292" Score="0" Text="Comments are for suggesting improvements; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64474/discussion-on-answer-by-jay-students-can-solve-programming-exercises-but-not-exp)." CreationDate="2017-08-26T10:46:10.027" UserId="58" />
  <row Id="7213" PostId="3295" Score="1" Text="I think this is an important answer." CreationDate="2017-08-23T14:11:35.393" UserId="27" />
  <row Id="18911" PostId="3295" Score="0" Text="But there are quite some preconditions before this can happen." CreationDate="2022-01-10T03:12:05.240" UserId="9884" />
  <row Id="7258" PostId="3297" Score="1" Text="I'm using the second point as the *base* for grading first-year computer science students. In the setting I usually teach, students prepare their solutions as a homework, so it's all too easy for them to just find a solution on the web; so they don't get a grade for just providing a solution that works. Most of their grade comes from implementing small modifications to their code (e.g. &quot;Please change the order from ascending to descending&quot; for an assignment on sorting) and bonus points for code clarity (if they can explain why; typical question is: &quot;why is this identifier named this way?&quot;)." CreationDate="2017-08-25T14:13:18.223" UserId="2695" />
  <row Id="7276" PostId="3297" Score="1" Text="I got a very clear example of #1 back when I was a lab assistant.  This was in the era of floppy disks, on single drive machines  backup meant a lot of swapping.  The idiotic backup routine couldn't sense the wrong disk in the drive and someone not paying attention could easily copy the target directory over the source--deleting everything.  I knew how to rebuild them and thus got a fair number of students crying for help.  (Continued)" CreationDate="2017-08-25T21:06:07.893" UserId="668" />
  <row Id="7278" PostId="3297" Score="1" Text="Everyone would freak when I sat them down in front of a binary dump of their data and asked them to identify it but after a bit of paging through it they would start recognizing pieces and I would build up the map I needed.  One gal absolutely couldn't get it.  Somehow it wasn't a surprise when later I found out she had copied everything." CreationDate="2017-08-25T21:12:06.463" UserId="668" />
  <row Id="7216" PostId="3299" Score="1" Text="Do they ever welcome international visitors? :)" CreationDate="2017-08-23T16:22:51.150" UserId="27" />
  <row Id="7217" PostId="3299" Score="0" Text="I would think so, it is done by volunteers, and I have never had my ID checked. If you have something to contribute, then I am sure they would be interested." CreationDate="2017-08-23T16:35:33.943" UserId="204" />
  <row Id="8679" PostId="3299" Score="1" Text="CAS *always* welcomes international visitors, and international members are welcome to join [the online community](http://community.computingatschool.org.uk/) too." CreationDate="2017-10-07T14:30:19.477" UserId="44" />
  <row Id="7198" PostId="3300" Score="0" Text="Oh thank you so much for that information. Yes, I am high school/secondary. These all sound fantastic, I will check them out. Do you know if there are any similar PD events that showcase things like new tools/software/hardware for teaching?" CreationDate="2017-08-23T12:54:34.330" UserId="2638" />
  <row Id="7212" PostId="3303" Score="1" Text="Nice! And welcome to [cseducators.se]. I hope we hear more from you!" CreationDate="2017-08-23T14:11:14.503" UserId="27" />
  <row Id="7273" PostId="3308" Score="2" Text="@drewbenn - even if that was the case, id adds no value to someone's education to be forced to present his work in front of audience. And no, despite many claims of the opposite, you don't really do that when working as a programmer." CreationDate="2017-08-25T20:54:44.277" UserId="1145" />
  <row Id="7325" PostId="3308" Score="1" Text="@drewbenn - unfortunately cs academics drown out actual people from the industry here, so the answers you get are the same nonsense you get in the academic setting in the first place. &quot;Democracy&quot; has severe downsides." CreationDate="2017-08-26T20:54:14.820" UserId="1145" />
  <row Id="7333" PostId="3308" Score="0" Text="@davor Learning to present your ideas is an important skill. This often brings interesting discussion of design for programs that is both productive and useful.  NCSSM has a nice environment; kids do not have anything to fear going in front of their peers. They are used to this." CreationDate="2017-08-27T01:04:12.173" UserId="21" />
  <row Id="7348" PostId="3308" Score="0" Text="@ncmathsadist - brushing your teeth is also an important skill, but it still doesn't belong in CS curriculum." CreationDate="2017-08-27T09:44:10.520" UserId="1145" />
  <row Id="19215" PostId="3308" Score="0" Text="It is well documented that we learn through experience, and that we often learn the most through teaching. What is lacking in many graduates is the ability for a developer to use the correct _language_ to describe their logic and issues and importantly expectations. _Talking_ about code _out-loud_ should be encouraged and practised." CreationDate="2022-02-03T11:33:14.133" UserId="11481" />
  <row Id="19233" PostId="3308" Score="0" Text="@Davor I disagree strongly. I assume we're teaching programming so that people can use the skills in a software engineering context, and in that context, being able to communicate what you're doing and why (and justifying it when challenged) is an essential skill and therefore a vital part of your education. Also, an awful lot of what I learnt about programming at college was from fellow students explaining their approach." CreationDate="2022-02-03T18:49:00.433" UserId="2936" />
  <row Id="19234" PostId="3308" Score="0" Text="A technique I've also used on training courses is to actually create the code collaboratively: have someone typing while others are watching and making suggestions, asking questions, spotting problems. It doesn't fit the academic model where gaining a mark out of ten is more important than learning something useful, but as a way of getting a team of people up to speed on a new technology, it's very effective." CreationDate="2022-02-03T18:55:44.790" UserId="2936" />
  <row Id="7225" PostId="3313" Score="1" Text="I like this metaphor, I will use it in class. Except I do not like to blame the user. This is like blaming it on pilot error. Air crash investigators (we can learn a lot from them), have come to realise that it is rarely pilot error: pilots make mistakes in air-craft that have design faults in the user interaction design. Therefore if we design your computer systems better, then we can, almost, eliminate user error, and therefore eliminate virus infection." CreationDate="2017-08-24T09:26:15.423" UserId="204" />
  <row Id="7226" PostId="3313" Score="0" Text="How do you know if someone is a vampire? see my view on **what is a virus scanner?** I think I will combine this answer and my answer, when teaching next." CreationDate="2017-08-24T09:29:31.573" UserId="204" />
  <row Id="7227" PostId="3313" Score="1" Text="glad you like the metaphor. Of course, I take some liberties (like assuming the user is to blame) but I am going with anecdotal evidence. As long as the kids get the point I am putting across, I am happy :)" CreationDate="2017-08-24T09:47:08.573" UserId="2605" />
  <row Id="7239" PostId="3317" Score="1" Text="Welcome to [cseducators.se]! Whilst this may theoretically answer the question, [it would be preferable](//stackoverflow.meta.com/q/8259) to include the essential parts of the answer here, and provide the link for reference." CreationDate="2017-08-24T18:42:25.497" UserId="150" />
  <row Id="7279" PostId="3319" Score="5" Text="I'm also an engineer and not an instructor, but I'd be concerned about using specific homework assignments as a basis for an exam. If you have a student who struggled with the homework assignment, then they're already at a large disadvantage for the exam. Exam questions should probably stand on their own and the students are either able to answer them or unable to answer them. Instead of using the student's homework, simply provide your own program code instead." CreationDate="2017-08-25T21:29:30.800" UserId="2707" />
  <row Id="7411" PostId="3319" Score="1" Text="@Ellesedil It's true that students could be punished twice for doing a bad job on homework. I would mitigate that by not making too much depend on any one piece of homework or test question. Also, you could communicate how you test ahead of time, and have office hours or class time set aside for improving homework even after it has been turned in, which would improve the code for the exam, but not for the original homework grade. Generally, I think the issue can be managed/mitigated. Using your own code would be ok sometimes, but doesn't incent students to create readable, maintainable code." CreationDate="2017-08-28T14:40:54.877" UserId="2682" />
  <row Id="7255" PostId="3323" Score="0" Text="I don't have enough insight here for a full answer, but I think a valuable lesson is the danger of relying on Excel models built by amateurs for serious financial analysis. Buggy VBA can kill you. There are some horror stories around, I'm sure." CreationDate="2017-08-25T12:58:44.760" UserId="1293" />
  <row Id="7256" PostId="3323" Score="0" Text="@Buffy Oh yeah, I have heard some of those stories during my travels. Luckily VBA is mostly used for automating mundane tasks in big corporations." CreationDate="2017-08-25T13:03:42.277" UserId="51" />
  <row Id="7262" PostId="3325" Score="1" Text="Hi ysalmon! Welcome to [cseducators.se]! This is a very well organized question. We hope you'll stick around and maybe say &quot;Hi&quot; [in our chat room](https://chat.stackexchange.com/rooms/59174/the-classroom)." CreationDate="2017-08-25T15:24:26.487" UserId="58" />
  <row Id="7266" PostId="3326" Score="0" Text="Thanks. I think the idea around the poem rather confusing; maybe it is because I do not know it (I doubt my students would) and cannot find of a well known equivalent in French. Your other suggestions correspond to what I am teaching presently (see question 1.3 [there](https://pro.yannsalmon.fr/_media/forums/td-chaines.pdf)). I too remarked that students tend to confuse a file with its name; I will try to see if &quot;x&quot;/x confusions arise more in this context. Could you point me to your essay? I could not find it by browsing your profile." CreationDate="2017-08-25T18:53:57.210" UserId="2574" />
  <row Id="7268" PostId="3326" Score="0" Text="In English we can relate quoted string literals to what they learn in literacy class ( see call this English Language class). In French I thing you quote «Like this». I also note that in you text you have used ” in place of &quot;. This may (or may not) lead to confusion." CreationDate="2017-08-25T19:36:28.560" UserId="204" />
  <row Id="7269" PostId="3326" Score="0" Text="@ysalmon. See https://cseducators.meta.stackexchange.com/q/276/1293" CreationDate="2017-08-25T19:41:29.343" UserId="1293" />
  <row Id="7436" PostId="3326" Score="0" Text="At step 4. The white knight should simply have started singing after he said, &quot;The song _is_&quot;." CreationDate="2017-08-28T21:34:05.180" UserId="1269" />
  <row Id="7301" PostId="3330" Score="2" Text="While this is an interesting question, it doesn't seem to be about teaching. Fixing the question asking flow for new users has been the topic of many discussions on meta stack overflow, and that's where questions about stack overflow belong." CreationDate="2017-08-26T12:22:57.833" UserId="58" />
  <row Id="7302" PostId="3330" Score="14" Text="@thesecretmaster Seems to be about teaching to me. This would not be on-topic on Meta Stack Overflow, because it's not about Stack Overflow *policies* as such, more about how a teacher can introduce the usage of a certain resource (Stack Overflow) in order to help students learn. It would seem clearly on-topic if the question was &quot;How to more efficiently teach using Wikipedia/a book/insert other resource?&quot;, so I feel it's also on-topic if about Stack Overflow." CreationDate="2017-08-26T12:29:12.607" UserId="2" />
  <row Id="7322" PostId="3330" Score="3" Text="Interesting. As a student I've never been taught how to use SO or any other community, for that matter. But I think this question is really interesting in the broader sense of &quot;How to more efficiently teach students how to ask good questions?&quot; which is a quite wider ability. Also considering that SO is not about computer science but only about programming." CreationDate="2017-08-26T19:50:43.273" UserId="963" />
  <row Id="7326" PostId="3330" Score="3" Text="Be aware that some CS academic settings don't put any focus on specific tools (debugger, stack overflow, visual studio, etc). Those are too subject to change over time. Perhaps consider what your course is about, and if something like this should be taught. I would only imagine this being appropriate if it were a VERY general CS class, and even then the subject should be about asking technical questions, certainly not using SO." CreationDate="2017-08-26T21:14:45.560" UserId="2719" />
  <row Id="7366" PostId="3330" Score="5" Text="Please don't just teach them how to use SO effectively - teach them in general about [the smart way of asking questions](http://catb.org/~esr/faqs/smart-questions.html) and [how to write the perfect question](https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). This art is applicable to any other platform as well." CreationDate="2017-08-27T13:27:02.533" UserId="660" />
  <row Id="7608" PostId="3330" Score="0" Text="It seems interesting that some of the Answers refer to the restrictions on new users, and this question was protected a day after being posted. I don't see a lot of bad answers or off-topic comments." CreationDate="2017-08-30T17:44:07.553" UserDisplayName="user737" />
  <row Id="7375" PostId="3334" Score="0" Text="I'd be interested in hearing which formal new-user restrictions you find most constraining. Or if not a formal restriction what cultural artifact. Some thought was put into the question of *&quot;How can we protect the network without preventing new users from using it?&quot;* and your feeling seems to be that the resulting rules are failing to meet that goal." CreationDate="2017-08-28T00:13:23.370" UserId="2735" />
  <row Id="7379" PostId="3334" Score="0" Text="The part about upvoting and the commenting was severely restricting. I remember a year ago when I joined stack, I left because of that only to return 2 weeks ago. Even then, I was frustrated with the restrictions. Especially on stack, where earning reputation is insanely difficult, these two things can be demotivating." CreationDate="2017-08-28T03:20:01.397" UserId="2605" />
  <row Id="7606" PostId="3334" Score="0" Text="@dmckee some of the other SE sites are aggressive bordering on a full-on attack. Everything is ripped to pieces, denied, confronted, disavowed, downvoted, vote-to-close literally in minutes. Forget that. CSE was *so* soft in comparison that I thought it was some sort of new way to abuse and trip me up. I flamed someone my first day here who suggested that I self-answer my question, because that is uniformly seen as the sign of the Antichrist on other SE sites." CreationDate="2017-08-30T17:35:47.257" UserDisplayName="user737" />
  <row Id="7607" PostId="3334" Score="0" Text="@nocomprende Hm. Self-answers (well good self-answers to good questions—we don't care for astroturfing) are actively encouraged on [physics.se] (my most used site) and they used to be on Stack Overflow when I was active there (admittedly it's been while). I suspect that there is some culture shock at work here. Those of us who joined Stack Overflow in the beta had both guidance from the podcasts and *time* to adjust to a culture still forming." CreationDate="2017-08-30T17:41:01.197" UserId="2735" />
  <row Id="7609" PostId="3334" Score="0" Text="@dmckee SO in the beta? Wasn't that about 9 years ago? It might be a bit different these days. To me, the idea of self-answering seems like a non-sequitur no matter where it is. If I have the answer already, why on earth would I be asking the question? Why would I even come here? I still find that on CSE my Questions are nitpicked, so much so that I have repeatedly considered leaving. When something is declared &quot;Too Broad&quot; and I add a sentence and it is now &quot;Too Narrow&quot; or &quot;Opinion Based&quot; or whatever, I just give up. If you don't want questions, fine by me." CreationDate="2017-08-30T17:51:00.967" UserDisplayName="user737" />
  <row Id="7634" PostId="3334" Score="0" Text="@nocomprende I was active on Stack Overflow until about four years ago, when the culture had settled down. But that aside, the reason you come to SE and the reason for the SE exists don't need to be the same thing. SE exists to (among other things) make the internet a better place by collecting good answers to good questions. A well constructed self-answer can aid that part of the mission, but site cultures vary which can lead to culture shock. That is something that should be addressed, but systematically rather than in response to individual events." CreationDate="2017-08-30T19:30:17.660" UserId="2735" />
  <row Id="8168" PostId="3334" Score="1" Text="Thanks for pointing out the network bonus. I'd known about it but hadn't thought of mentioning it to my students. FWIW, it's pretty easy to gain reputation in English Language Learners." CreationDate="2017-09-14T21:52:01.027" UserId="283" />
  <row Id="7320" PostId="3335" Score="14" Text="`They're not familiar with online etiquette and norms.` -- Or they're saddled with bad habits from participating in other online forums." CreationDate="2017-08-26T18:24:16.560" UserId="882" />
  <row Id="7332" PostId="3335" Score="8" Text="Adding to issue #5 (recommendation #4) - [How to debug small programs](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) is absolutely essential. If a student (or anyone) can't explain precisely what part isn't working, then they're not ready to ask on SO." CreationDate="2017-08-26T23:02:29.737" UserId="1400" />
  <row Id="7346" PostId="3335" Score="2" Text="The link to BInary debugging really uses some annoying ad practices, popping up random screens while you're reading the text" CreationDate="2017-08-27T08:59:08.353" UserId="1639" />
  <row Id="7371" PostId="3335" Score="0" Text="@Ferrybig -- oh, does it? (I use adblock so can't really tell). If you (or anybody else) can find an alternate link, I'm happy to replace it." CreationDate="2017-08-27T15:26:09.847" UserId="732" />
  <row Id="7290" PostId="3337" Score="1" Text="What...why is there a down vote? Every answer in this entire page is putting a lamp on the wall, sharing valid views but nobody is making a definitive statement. I collated everything and put them in one place and made it definitive so it could help others who are facing a dilemma like mine. You do know I stand to gain nothing by marking my own answer right?" CreationDate="2017-08-26T09:47:33.030" UserId="2605" />
  <row Id="7300" PostId="3337" Score="0" Text="I didn't downvote this, but I would *guess* that it got downvoted because most of the reasons in your answer have already been stated in the other answers, so someone probably didn't see this answer as adding much value. If there were any additional things you considered that weren't raised in other answers, you should add them or emphasise them to make your answer more applicable to others. Hope this helps, or at least gives you an idea how you might improve your answer further." CreationDate="2017-08-26T12:11:47.693" UserId="2" />
  <row Id="7303" PostId="3337" Score="1" Text="Thats precisely my point. Others have pointed but each answer is, okay you can do that, but you can also do this. I was hoping that someone would say, right, you should do this, because of this. It's like, should I take the bus or the train (please tell) and every answer is like, you should take the bus and also the train. and I am still stuck with the question :P you see what I mean :) so, I decided to end the discussions, and just close it of with what I eventually decided to do." CreationDate="2017-08-26T12:56:29.913" UserId="2605" />
  <row Id="7305" PostId="3337" Score="1" Text="@Jay But that's called an XY problem. You already have your solution. If you ask &quot;why is this a good solution&quot;, you'll get opinionated answers." CreationDate="2017-08-26T14:10:46.787" UserId="150" />
  <row Id="7312" PostId="3337" Score="2" Text="This doesn't appear to be an answer. It's a reply to the existing answers. This question will not be closed, because that would make new answers impossible. The way to say that you've chosen a particular answer is by accepting it." CreationDate="2017-08-26T14:57:09.797" UserId="58" />
  <row Id="7313" PostId="3337" Score="1" Text="I didn't downvote your answer, but I didn't find your answer to be definitive (at least not in the second sense of the word). https://www.merriam-webster.com/dictionary/definitive Also, I think you omitted some key points that were alluded to in the other answers, my favorite two points being the &quot;searchability&quot; of e-books (especially if your students use file sharing and the OCR of the scans wasn't done at all or wasn't done properly) and also the distractable nature of having your materials stored on a laptop or a tablet, since most students tablets unlike yours are loaded with distractions" CreationDate="2017-08-26T15:53:52.860" UserId="1195" />
  <row Id="7315" PostId="3337" Score="1" Text="Which brings me to my next point, my comment ran out of space, so I couldn't do it there, and nor should you really do this in comments, but if you're going to incorporate people's suggestions into your own definitive and comprehensive answer, and place the limelight on you even if it wasn't your intent, it's nice to attribute and credit the people by name who answered your question and first mentioned those particular ideas you found the most compelling." CreationDate="2017-08-26T16:15:26.493" UserId="1195" />
  <row Id="7317" PostId="3337" Score="1" Text="It also should be noted that StackExchange/StackOverflow doesn't really like to have short definitive answers to subjective questions because such answers are likely to attract people who disagree with them and then launch into long-winded debates about them (with no clear way to stop such debates). This is why you'll often see questions that start with &quot;What is the best...&quot;, &quot;What is your favorite...&quot;, immediately put on hold for being too opinion-based/too subjective/too broad/too difficult. See https://stackoverflow.blog/2010/09/29/good-subjective-bad-subjective/" CreationDate="2017-08-26T16:25:05.513" UserId="1195" />
  <row Id="7334" PostId="3337" Score="0" Text="&quot;It also should be noted that StackExchange/StackOverflow doesn't really like to have short definitive answers&quot; ah...you see there you go...there are mechanics about stack that I am still getting used to :) I acknowledge that this answer (with all its down votes) is a learning experience for me about what I can or cannot do :) Next time, I know what to avoid. thanks for the insightful feedback guys (although, I must admit, the dictionary link was kind of a low blow...did not expect that :P )" CreationDate="2017-08-27T06:28:09.010" UserId="2605" />
  <row Id="18633" PostId="3337" Score="0" Text="Where do you get that ebooks are cheap? I'm dismayed by how often ebooks cost 3/4 of the price of a paper book. But sure, if you find a cheap one, go for it. Since this is a CS ?podium? ?group? ?subreddit? I find the searchability argument decisive. CS topics require soooo much cross-referencing." CreationDate="2021-12-28T16:07:40.567" UserId="6346" />
  <row Id="7323" PostId="3339" Score="0" Text="If you can define 'worth asking', this question would be better. I'd hope you remember the difference between 50 LOC and 50k though..." CreationDate="2017-08-26T20:30:25.503" UserId="41" />
  <row Id="7324" PostId="3339" Score="0" Text="Was she asking them to come up with a figure from memory, or did they have a computer with the source code in front of them?" CreationDate="2017-08-26T20:34:14.707" UserId="124" />
  <row Id="7331" PostId="3339" Score="0" Text="@Gilles She was asking them to answer it precisely to the .. say 673 lines of code and they had a computer with source code in it but this question was asked during project evaluation. Her question was normally: Now come to the code.. Wait a minute! Before opening it, tell me how many lines does it have? and introspection began" CreationDate="2017-08-26T22:50:19.290" UserId="2537" />
  <row Id="16305" PostId="3339" Score="1" Text="Maybe she was going on the assumption that the students would need a minimum number of lines of code to solve the problem.  If she assumes someone would need to write at least 200 lines of code and their answer to the question is &quot;20&quot; then maybe she wants to look at their code more closely.  Other than that, I cannot imagine how this question really helps much with anything." CreationDate="2020-03-27T18:12:03.163" UserId="4689" />
  <row Id="16338" PostId="3339" Score="0" Text="@FailedScientist well, did you ask that faculty member?" CreationDate="2020-04-10T16:21:07.377" UserId="2103" />
  <row Id="16339" PostId="3339" Score="1" Text="I am reminded of the joke Abraham Lincoln told: &quot;*How long should a man's legs be? Long enough to reach the ground.*&quot; So the answer would be: Lines enough to reach the solution." CreationDate="2020-04-12T16:28:49.263" UserId="5349" />
  <row Id="7605" PostId="3346" Score="0" Text="It is an interesting question: when is it &quot;good enough&quot; to be an expert user of technology, and when is it necessary to know the underlying details? *&quot;But you already know what I am going to tell you...&quot;* - The Oracle" CreationDate="2017-08-30T17:30:51.280" UserDisplayName="user737" />
  <row Id="7329" PostId="3352" Score="0" Text="regex can be readable. If you break them up. Lots of separate bits that you join together. E.g. `LetterOrUnderscore+LetterOrUnderscoreOrNumber+&quot;*&quot;`" CreationDate="2017-08-26T22:11:16.310" UserId="204" />
  <row Id="7314" PostId="3353" Score="0" Text="What you are likely to miss, however, is the opportunity to interact personally with other educators and develop lasting relationships that benefit your teaching and your career." CreationDate="2017-08-26T16:15:10.830" UserId="1293" />
  <row Id="7316" PostId="3353" Score="0" Text="Well, I can see what you mean, but Dr. Chuck does interact with other educators through the forums, and you can also communicate with other students, many of whom also work in education.... It's just not f2f in this case.  It would also be possible to find others there, and join or start a LinkedIn group, arrange Skype calls with screenshares, or even set up a group on Google/Live to share notes, resources etc. :)" CreationDate="2017-08-26T16:21:11.107" UserId="2706" />
  <row Id="7318" PostId="3353" Score="0" Text="There is something marvelous, however, when you go to meet and interact with people IRL and learn (a) you are just as smart/good as anyone, and (b) you have a lot to contribute yourself. Much harder to get that with computer mediated communication. Bandwidth matters." CreationDate="2017-08-26T16:27:37.257" UserId="1293" />
  <row Id="7321" PostId="3353" Score="1" Text="Welcome to CSE Stack Exchange! I hope to see more posts by you." CreationDate="2017-08-26T19:19:24.530" UserId="283" />
  <row Id="13471" PostId="3357" Score="1" Text="In the U.S. there would be 'K' and 13 would mean college, 'K' has been around for quite a while -- everything else is the same!" CreationDate="2018-09-14T19:55:40.110" UserId="5930" />
  <row Id="13475" PostId="3357" Score="1" Text="@JosephDoggie In UK years 12 and 13, can be college, but some(may be most) schools, have a 6th form. This Does the same as the early college years, but at a school. After these 2 years, a lot of pupils go on to university (or work, or more college)." CreationDate="2018-09-15T10:01:19.457" UserId="204" />
  <row Id="14156" PostId="3357" Score="0" Text="In the US, there's also sometimes Pre-K, which I guess would be -1." CreationDate="2019-01-12T00:26:29.203" UserId="5963" />
  <row Id="14161" PostId="3357" Score="0" Text="@SolomonUcko same in UK, (I love -1 indexed arrays)" CreationDate="2019-01-12T09:22:59.060" UserId="204" />
  <row Id="7921" PostId="3358" Score="0" Text="I have seen your questions on StackOverflow and they really look well-researched ones! Can you please expand a bit on it's &quot;secrets&quot; here? I would love to hear that part." CreationDate="2017-09-10T01:15:15.500" UserId="2537" />
  <row Id="7336" PostId="3360" Score="0" Text="I guess, asking the right questions is the right approach for life in general, but I don't know if that is what is being discussed here. Your answer is neither here nor there and it does not even touch the topic at hand :(" CreationDate="2017-08-27T06:39:35.817" UserId="2605" />
  <row Id="7337" PostId="3360" Score="1" Text="Well, to &quot;teach&quot; stack overflow isn't a useful goal. To teach people to ask better questions and their steps is. That it so happens that it makes for better questions and the occasional rubber duckery is the point I'm trying to make here. Even if, god forbid, SE goes away, these are skills that carry over anywhere" CreationDate="2017-08-27T06:41:36.300" UserId="2722" />
  <row Id="7338" PostId="3360" Score="0" Text="I agree with your point. we are both on the same page there. Its just not relevant to this question. If there is another question (or you could create one) that says 'How to teach asking the right questions', then your answer would be right there in the sweet spot." CreationDate="2017-08-27T06:43:21.993" UserId="2605" />
  <row Id="7339" PostId="3360" Score="0" Text="But the way to use SE efficiently *is* to ask the right questions, and use answers to sharpen one's skills in solving problems. That's how I've benefited from it over time" CreationDate="2017-08-27T06:44:09.887" UserId="2722" />
  <row Id="7340" PostId="3360" Score="0" Text="Ha..ha...okay okay, live and let live is my policy :P your thoughts might help others because you know, opinions and views is what we want in this community. I may not agree with the answer being relevant, but I respect your contribution." CreationDate="2017-08-27T06:46:38.147" UserId="2605" />
  <row Id="7370" PostId="3361" Score="0" Text="If I did that, I'd feel like I was abdicating my responsibility to those students. My students weren't in my class to prove to me that they didn't need to be there. Perhaps you can organize things so that you provide a variety of challenges so that they don't get away without expanding their knowledge, not just showing it off." CreationDate="2017-08-27T15:07:54.660" UserId="1293" />
  <row Id="7372" PostId="3361" Score="0" Text="Well, I have been running a tech club in my city for the last 5 years. These students end up joining my club where I fund their software projects, I go to the extent of buying them expensive computing hardware, providing them much needed textbooks and broadband connectivity. All out of my pocket. I only let them out of the lab, but not out of my guidance. If anything, I have gone above and beyond my responsibility as a faculty, spending thousands of dollars out of my pocket so they can do things." CreationDate="2017-08-27T17:06:45.343" UserId="2605" />
  <row Id="7345" PostId="3363" Score="0" Text="I don't quite get it. How is this flagged as a broad question? Its a very specific scenario I am facing, and this is something that happens to almost every department and every faculty. I even narrowed down the solutions so it will be easier for folks to help me out. I cannot get any more specific than that. I am an educator and this is a real challenge I am facing. Some careers are literally at stake here, and a wrong call from me will have long term consequences. Hence, the question." CreationDate="2017-08-27T07:59:16.747" UserId="2605" />
  <row Id="7357" PostId="3363" Score="1" Text="I would suggest to change its title - it feels from homepage that this question is about latecomers in class." CreationDate="2017-08-27T12:26:52.930" UserId="2537" />
  <row Id="7361" PostId="3363" Score="0" Text="I cannot think of anything better than that. They are late to their 'career preparation' is what I am trying to imply. If someone can suggest a better title (or better yet, edit it in) that would be great." CreationDate="2017-08-27T12:35:06.823" UserId="2605" />
  <row Id="7362" PostId="3363" Score="0" Text="Yeah I am also looking forward to that - I am sure there must be some better title for that." CreationDate="2017-08-27T12:36:05.963" UserId="2537" />
  <row Id="7367" PostId="3363" Score="0" Text="I think you need to ask for a 'Curriculum structure for basic single year course' or something similar. The tags are also all wrong, this should be about your course, not the students.I also wonder if you are asking for confirmation of your plan, rather than presenting all of your constraints." CreationDate="2017-08-27T13:52:52.607" UserId="41" />
  <row Id="7368" PostId="3363" Score="0" Text="I already have a basic single year course in place. This is not about that. Obviously, I have a plan. However, I wish to consult the experts and see what additions I can make, and what I can delete. There are many times where I am hopelessly wrong, so I prefer to consult before finalising the plan." CreationDate="2017-08-27T14:39:21.807" UserId="2605" />
  <row Id="7374" PostId="3363" Score="4" Text="So if I understand it right, that college offers a 4 year CS course that does not end up with anything making employment likely? Could you add more details on how that can be (age, course content...)? Frankly, as someone reviewing applications on a regular basis, I don't even look so much at their study related things; I look for items that show their *interest* in the subject. People who are really into it usually find ways to express that (side projects, hacking stuff together in the basement, coding something cool, etc.). But it has to come from themselves, not from yet another teacher..." CreationDate="2017-08-27T23:20:39.140" UserId="652" />
  <row Id="7378" PostId="3363" Score="1" Text="That is the real challenge here. These students (and by extension many - and there are many more from where they come from) did not show any interest. Now, a sudden realisation that they will soon be out of their homes and branded 'unemployed' is forcing them to take drastic measures. Its tragic but I have seen this happen every year." CreationDate="2017-08-28T03:02:50.847" UserId="2605" />
  <row Id="7443" PostId="3363" Score="0" Text="I'm still cringing at &quot;They have finished 6 semesters and have a half baked idea and some exposure... However, nothing is employment worthy.&quot; I'd hope by junior year, students would have a strong enough foundation to learn new languages on their own, and would have completed at least one large class project." CreationDate="2017-08-28T23:53:41.727" UserId="2045" />
  <row Id="7349" PostId="3364" Score="0" Text="At this point, they are pretty much independent of passion. Its like they are adrift at sea. They are not asking for pizza anymore but just drinking water. So, passion no passion, they got to do it because the clock is ticking for them (their words, not mine)." CreationDate="2017-08-27T10:14:44.917" UserId="2605" />
  <row Id="7354" PostId="3364" Score="0" Text="Talk to them, find out what they could get passion for. There is some rely cool stuff that they could learn. I like Gnu/Linux I learnt it in 1991, it is still current, and not-waiting for the others to catch up. It is like there has been no real advancement in software since the 1960s." CreationDate="2017-08-27T11:41:04.437" UserId="204" />
  <row Id="7359" PostId="3364" Score="1" Text="Passion may no longer matter to them, but I have scheduled a discussion with them in exactly a week from. I am looking to gather as many views/thoughts/opinions as I can here and see where that takes me." CreationDate="2017-08-27T12:31:29.073" UserId="2605" />
  <row Id="7355" PostId="3365" Score="2" Text="You could find a real Free Software / Open Source project to contribute to." CreationDate="2017-08-27T11:43:02.973" UserId="204" />
  <row Id="7364" PostId="3365" Score="1" Text="I was thinking of making them work solo, but a team project might be better...good I will keep that in mind. These students stay together anyway...I did not factor the significance of that." CreationDate="2017-08-27T12:38:56.110" UserId="2605" />
  <row Id="7438" PostId="3365" Score="2" Text="My university actually required students to take a course that fits your description to a T before they were allowed to get their CS degrees. Perhaps the OP's school already offers such a class? If so, and if the class is run well, the best thing might be for the students to really do their best in that class, not to impress the teacher, but to get as much out of the experience as they can for themselves." CreationDate="2017-08-28T22:29:37.263" UserId="1360" />
  <row Id="7358" PostId="3367" Score="0" Text="I have already narrowed it down. there is no time to sit and discuss with them what they are passionate or what they want in life or any of that. Like I have said above, folks who are essentially looking up to me to take the call. So, the above answer won't really help me. I want to know, which of the above, or something similar I can do with them. We must assume here that the students will essentially listen to whatever I decide for them. Their input is essentially nil here. Hence the title, Late Comers." CreationDate="2017-08-27T12:30:15.580" UserId="2605" />
  <row Id="7360" PostId="3367" Score="0" Text="@Jay Thanks! I think my answer is invalid in this context then." CreationDate="2017-08-27T12:32:42.160" UserId="2537" />
  <row Id="7363" PostId="3367" Score="1" Text="Its not invalid (you will notice that I haven't flagged or down voted it) but more like, I liked the last part but not the rest (so, may be you can edit your answer to be more specific). You are right. I will see about taking them through a OOP crash course and SQL with a practical project." CreationDate="2017-08-27T12:37:01.063" UserId="2605" />
  <row Id="7369" PostId="3368" Score="0" Text="Do you actually use a textbook lock step with the instruction - No is it a reference to be used by the student as needed Yes. or is it an alternate source that might present the material in a manner that differs from the instructor so as to provide another option if the student is having trouble? No." CreationDate="2017-08-27T14:41:06.147" UserId="2605" />
  <row Id="7376" PostId="3371" Score="0" Text="Disclaimer: I am not associated with the institute whose OCW I used as an example above. It was purely intended to share it with fellow CS educators." CreationDate="2017-08-28T01:15:21.490" UserId="2537" />
  <row Id="7399" PostId="3372" Score="10" Text="It might be useful to show which programming langaues are &quot;hot&quot; right now and that these languages are all using some form of FP. (For example JavaScript, Swift, Rust, [Erlang&amp;Elixir], Python, Scala, ...) And to fully understand what the advantages/disadvantages are one needs to understand the fundamental basics  (.e.g. a pure FP language)." CreationDate="2017-08-28T12:52:48.583" UserId="2752" />
  <row Id="7484" PostId="3372" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64740/discussion-on-question-by-keelan-how-to-answer-functional-programming-is-useles). Any further discussion will be deleted and **will not** be moved to chat." CreationDate="2017-08-29T12:57:03.543" UserId="58" />
  <row Id="7659" PostId="3372" Score="1" Text="I'd strongly warn against citing Hughes' paper on this. 27 years is a LONG time in programming for something to gain traction... and it's still on a very slow roll. You may be shooting yourself in the foot citing it." CreationDate="2017-08-31T10:11:57.020" UserId="2096" />
  <row Id="7677" PostId="3372" Score="4" Text="The assumed premise in this question is very questionable. After I finished my PhD not knowing any functional programming, the first company I joined turned into a Haskell shop and now I write Erlang for a living. Both languages are purely functional. Moreover, I see a lot of Python projects now strictly using `functtools` to write functional python despite it not being a functional language. So, I doubt the assumed premise in your question anecdotally. I've literally paid my bills since graduation with FP despite never thinking that once before hand." CreationDate="2017-08-31T12:33:18.887" UserId="2855" />
  <row Id="7754" PostId="3372" Score="2" Text="Sorry y'all. I'd love to move these comments to chat, but because I can't I've had to delete them." CreationDate="2017-09-02T01:12:39.487" UserId="58" />
  <row Id="7764" PostId="3372" Score="0" Text="If your teaching language for this course is so specific it can identify your university, then maybe that is the problem. They're telling you they want to see how FP is used in industry, why not do that? You don't have to pander to industry fads, but if they're only learning some highly specific academic language, then they're not going to see the application." CreationDate="2017-09-02T14:47:42.380" UserDisplayName="user2884" />
  <row Id="7770" PostId="3372" Score="3" Text="Tell them [Scala is used by Twitter, LinkedIn and eBay](https://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_websites). Tell them that [Akka](http://akka.io), which requires that certain data be immutable, is used by Amazon, Walmart, PayPal, and Intel." CreationDate="2017-09-02T23:50:22.937" UserId="2888" />
  <row Id="10598" PostId="3372" Score="1" Text="Focus on some *very* key concepts: Handling of side-effects for example and unit testability. Do this in OOP and show the perils - what happens if you have a deeply nested side effect embedded in the method? Now, for that same method, write a unit test (you need them in the &quot;real world&quot; if you want to be confident about your changes). Now do the same with FP and see how &quot;things change&quot;. They need to see it for themselves. Then say that in most cases you can do this with OOP but without compiler support - learning the principles of FP trumps learning a language IMHO" CreationDate="2018-03-15T19:30:02.430" UserId="4677" />
  <row Id="13891" PostId="3372" Score="2" Text="It's not really the answer to your direct question so I'm not posting this as an answer: the reason OOP is so predominant in business is because enterprise applications have been built to **mirrror** previous systems. The world is object oriented (i.e. physical). Employees, and the tasks they perform, are defined in a way that very much fits with the declaratory nature of OOP. Functional programming comes forth from a fully abstract system; which is why mathematical operations tend to be functional instead of object-oriented." CreationDate="2018-11-12T12:01:40.787" UserId="2164" />
  <row Id="7551" PostId="3373" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64786/discussion-on-answer-by-peter-taylor-how-to-answer-functional-programming-is-us)." CreationDate="2017-08-29T23:24:35.520" UserId="58" />
  <row Id="7738" PostId="3373" Score="6" Text="I don't agree with this answer. Usefulness != popular in industry. Or to put it another way, the question isn't &quot;what can I use to show the usefulness *in industry*...? This is clear from the OP's penultimate paragraph, where he provides a reasonable justification for usefulness. University *is* about teaching useful content. Useful doesn't have to mean direct or immediate. Something can be useful because it gets the student thinking in a certain way, provides context for other knowledge, builds intuition, and a whole host of other reasons." CreationDate="2017-09-01T15:00:33.160" UserId="735" />
  <row Id="7739" PostId="3373" Score="0" Text="Short version: the question you quote can and should be answered, even if the answer doesn't conform to what the student thinks of (for now) as &quot;usefulness&quot;." CreationDate="2017-09-01T15:02:44.333" UserId="735" />
  <row Id="7744" PostId="3373" Score="0" Text="@JBentley, I think the last two paragraphs have a clear subtext of &quot;The students won't accept my definition of usefulness, so what argument can I give which is compatible with theirs?&quot;" CreationDate="2017-09-01T18:18:34.820" UserId="1219" />
  <row Id="7750" PostId="3373" Score="3" Text="Yes, it feels like the real question that needs to be answered here is the one asked at the end of the question: the inevitable question is &quot;why don't you teach us FP in a language that we can actually use later?&quot; Why on earth would anyone teach in a dead language? Nobody loves Latin, nor Cobol. Teach a paradigm in a language that they are familiar with, and they will learn the paradigm. Teach it in an unfamiliar language, and they will learn... language syntax." CreationDate="2017-09-01T20:41:48.923" UserId="2878" />
  <row Id="7859" PostId="3373" Score="1" Text="@DewiMorgan I don't know if anybody loves Cobol, but it's absolutely false to say &quot;Nobody loves Latin&quot;. Clearly, [many](https://la.wikipedia.org/wiki/Vicipaedia:Pagina_prima) [people](https://latin.stackexchange.com/) do (including me, though my understanding is limited). It's relevant because the reasons often given for learning Latin are similar to those given for functional programming: it improves your thinking, it makes you better even at other languages, it builds character, etc. :-)" CreationDate="2017-09-06T04:37:53.020" UserId="932" />
  <row Id="7872" PostId="3373" Score="0" Text="@ShreevatsaR Forgive me a little hyperbole in that 'nobody': there're always madmen who love Cobol. But there's a reason these languages are essentially unspoken outside of academia. You would not use Latin to teach students who don't know Latin (but are learning German) about the concepts of gendered nouns and declension. But in programming, teachers regularly teach concepts in their random pet legacy language, requiring hundreds of students to learn a dead language, rather than learn a current language themselves. It's a tragedy: *teachers who've forgotten how to learn!*" CreationDate="2017-09-06T14:31:10.103" UserId="2878" />
  <row Id="7874" PostId="3373" Score="0" Text="@DewiMorgan, I'm not quite sure what you think because you seem to be arguing against yourself. The point of your first comment seems to be that OP should reply &quot;*I'm going to teach you FP in a language which you won't actually use later so that you learn FP rather than language syntax*&quot;. But your second comment argues for teaching them a language. If you think the real question is about syllabus design (relative merits of teaching untyped and/or one or more typed lambda calculi, LISP, SML, Haskell, etc) then ask it, unless you think https://cseducators.stackexchange.com/q/106/1219 is a dupe." CreationDate="2017-09-06T15:09:12.130" UserId="1219" />
  <row Id="7875" PostId="3373" Score="0" Text="@PeterTaylor You seem to have read my first comment as meaning *exactly the opposite* of what I meant - I apologize if I was unclear, though I can't see what's unclear about &quot;Teach a paradigm in a language that they are familiar with, and they will learn the paradigm. Teach it in an unfamiliar language, and they will learn... language syntax.&quot; If your course is about a paradigm, you want to teach that paradigm, not Cobol. If you teach the paradigm in Cobol, then all they'll remember of your course is that Cobol *sucks*. Whatever you set out to teach is hidden by the chaff of learning Cobol." CreationDate="2017-09-06T15:50:49.690" UserId="2878" />
  <row Id="7876" PostId="3373" Score="0" Text="@DewiMorgan, firstly, your insistence on talking about Cobol in a context of teaching functional programming reduces clarity rather than adding to it. Secondly, your dichotomy is clear in itself but the purpose of bringing it up isn't, unless to argue against teaching them FP in a language they don't already know. (I disagree with that, FWIW: if the course is about FP and the only languages the students are familiar with are unsuited for FP, trying to teach them FP with those languages will teach them *neither* the paradigm *nor* language syntax, but merely to hate the paradigm)." CreationDate="2017-09-06T16:10:31.680" UserId="1219" />
  <row Id="7877" PostId="3373" Score="0" Text="To be honest, I rather get the impression that this is a personal hobby horse which you would cheerfully rant about over a drink, but which is only tangentially relevant to this Q&amp;A." CreationDate="2017-09-06T16:15:10.120" UserId="1219" />
  <row Id="7878" PostId="3373" Score="1" Text="@PeterTaylor The point of my first comment was given in my first comment: &quot;the real question that needs to be answered here is the one asked at the end of the question&quot;. I agree, if students know no suitable language for the paradigm, one *must* be taught. That's a *strong, valid* answer to that question, but is unlikely to ever be true. Even then, the selection must be defensible: Lisp would be hard to defend. &quot;This is the only functional lang I know&quot; or &quot;javascript isn't *as good* for functional code&quot; risk being seen as *weak, invalid* attempts to justify laziness on the part of the teacher." CreationDate="2017-09-06T16:34:26.937" UserId="2878" />
  <row Id="7380" PostId="3374" Score="5" Text="Welcome to &#xA;Computer Science Educators. This is an interesting question. Hope to see you around here more." CreationDate="2017-08-28T08:25:05.350" UserId="204" />
  <row Id="7391" PostId="3374" Score="1" Text="This seems like a duplicate of [this question](https://cseducators.stackexchange.com/q/44/58). Can you explain the difference to me?" CreationDate="2017-08-28T12:01:35.793" UserId="58" />
  <row Id="7395" PostId="3374" Score="2" Text="@thesecretmaster That question is about teaching HTML to 11-13 year-olds, whereas this is a question about a course on the university level. It is reasonable to assume that more cognitive load is managable for university students than children, making the question about editor+terminal vs. IDE more relevant. Furthermore, HTML requires only an editor, whereas programming includes using the terminal to actually run the programs." CreationDate="2017-08-28T12:21:54.643" UserId="2741" />
  <row Id="7430" PostId="3374" Score="1" Text="Each student is different, and each will have vastly different needs from such a personal tool. Why not give them positive arguments for both things and let them individually choose what to use? Python was taught at my university for first years and some of us used VIM some used PyCharm and some used GEDIT." CreationDate="2017-08-28T19:43:38.430" UserId="2774" />
  <row Id="7475" PostId="3374" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64717/discussion-on-question-by-henrik-hillestad-lovold-ide-vs-editor-and-terminal-for)." CreationDate="2017-08-29T11:19:57.977" UserId="58" />
  <row Id="7390" PostId="3375" Score="4" Text="Learning more languages can also confuse programmers more. There is no indication that functional is the future. Most programs run on a desktop/phone. &quot;Can be quicker&quot; is not a convincing argument as it depends on the person learning." CreationDate="2017-08-28T11:55:01.653" UserId="2491" />
  <row Id="7426" PostId="3375" Score="1" Text="@TwoThe Learning how to learn new languages quickly is another skill they should be picking up.  No language is perfect, after all, so they should always be expanding their toolbox even if they *do* neglect functional languages (which they shouldn't).  Temporary confusion is a common symptom of learning something new." CreationDate="2017-08-28T18:39:45.133" UserId="827" />
  <row Id="7447" PostId="3375" Score="0" Text="I haven't seen a non-trivial case in which a compiler automatically multi-threaded independent expressions so as to better utilize a CPU's multiple threads. Sounds great in theory, but I've never seen it practice. For one, I worry about how a compiler would determine if two expressions are sufficiently expensive so at to benefit enough from being processed in parallel, and to be worth the huge overhead of spawning/synchronizing threads. Would love to be proven wrong, however." CreationDate="2017-08-29T04:42:10.717" UserId="1041" />
  <row Id="7448" PostId="3375" Score="0" Text="(1/2) Additionally, even though the statement &quot;fp performs better because it can be automatically parallelized&quot; is theoretically true, I would argue that it's not as much of an issue. It's already quite uncommon for performance to be the primary issue of a project. The primary challenges of software development are rapidly shifting away from hardware limitations, and towards project management/scale/complexity issues." CreationDate="2017-08-29T04:47:54.673" UserId="1041" />
  <row Id="7449" PostId="3375" Score="0" Text="(2/2) A strong argument can be made that languages need to strongly prioritize simplicity, rapid prototyping, maintainability. In many cases, FP excels at these things, but the argument for theoretical performance improvements is less relevant than ever, and it becomes a mere &quot;nice-to-have&quot;." CreationDate="2017-08-29T04:51:09.937" UserId="1041" />
  <row Id="7463" PostId="3375" Score="0" Text="@Alexander I agree. However Functional is not necessarily about automatic parallelism. It is more that it is trivially parallelised (if there is no mutation, then there is no need for synchronisation). Functional programing (with functional language or not) is easier that synchronisation; Parallel programming is easy, synchronisation is hard.  Examples where it can be automatically parallelised are map/reduce, and pipe-lineing." CreationDate="2017-08-29T08:45:08.790" UserId="204" />
  <row Id="7487" PostId="3375" Score="0" Text="@ctrl-alt-delor yep, and those features are now picked up in all the big imperative languages, which then begs the question if restricting yourself to purity and immutability is worth the effort" CreationDate="2017-08-29T13:05:37.700" UserId="1041" />
  <row Id="7489" PostId="3375" Score="0" Text="@Alexander you are correct that you can avoid synchronisation problems in any language [not just big or new]. But to do this you must do one of two things: avoid threading, or avoid mutation (or at least keep mutation tamed). There is not enough space here to explain. I hardly ever use fictional languages any more, but I am glad I learnt them." CreationDate="2017-08-29T13:15:54.363" UserId="204" />
  <row Id="7382" PostId="3376" Score="0" Text="I agree. I find C# even easier than Python" CreationDate="2017-08-28T09:12:13.913" UserId="2537" />
  <row Id="7385" PostId="3376" Score="0" Text="the new kids, they don't find dot net easy at all. You and I (given how many years we have been in this work) may do. The young ones, they just don't man. I don't know why. And yeah, little knowledge is dangerous, but none is disastrous." CreationDate="2017-08-28T10:06:42.920" UserId="2605" />
  <row Id="7381" PostId="3377" Score="0" Text="In my opinion, using the same software on every system is not really a sole advantage of text editors as most IDEs also support multiple operating systems. Is it possible that I've misunderstood this formulation?" CreationDate="2017-08-28T09:01:25.733" UserId="793" />
  <row Id="7417" PostId="3377" Score="2" Text="@TuringTux I think it's a matter of degree rather than of absolutes.  Some IDEs eg Eclipse are widely available on many platforms; others eg Visual Studio are single platform.   Even then Eclipse isn't as widely available as emacs or vi; I suspect the same would be true for eclipse vs Sublimesque text editors as well; if not individually then as an entire product class." CreationDate="2017-08-28T17:39:32.983" UserId="1411" />
  <row Id="7384" PostId="3378" Score="2" Text="A good answer,  I would add auto-correct should be considers harmful. Though spell check, and error highlighting are not. Also my text editor has revision control." CreationDate="2017-08-28T09:44:47.007" UserId="204" />
  <row Id="7416" PostId="3378" Score="0" Text="Do you count the &quot;idle&quot; IDE as a heavyweight solution ?" CreationDate="2017-08-28T17:16:02.607" UserId="2103" />
  <row Id="7420" PostId="3378" Score="2" Text="@MichelBillaud Good question - I think I don't. As far as I can remember, IDLE comes bundled with Python (so from the space point of view it's like the OS-builtin editor) and starts pretty fast, so it seems &quot;lightweight&quot; to me (at least, judging by my quite subjective criteria)." CreationDate="2017-08-28T17:53:14.293" UserId="793" />
  <row Id="7432" PostId="3378" Score="2" Text="I don't think that &quot;consume a lot of disk space and memory&quot; is really worth the consideration these days. PyCharm right now needs less memory than some single chrome tabs and requires about 500MB of disk space - both negligible even for the weakest notebooks. There are lots of other arguments that should imo be more front and center than that." CreationDate="2017-08-28T20:06:00.407" UserId="819" />
  <row Id="7457" PostId="3378" Score="0" Text="@Voo I think that this depends a little on the machine - on my laptop, PyCharm takes considerably more time until it's usable than the standard text editor. From my experience, I think this could be relevant for school PCs as I've seen that they are often not the latest and fastest models." CreationDate="2017-08-29T07:25:42.180" UserId="793" />
  <row Id="7462" PostId="3378" Score="1" Text="@Turing Startup time definitely. But my point is you only start it once and when it's running the amount of resources it needs is hardly worthy the consideration these days. If you spend several hours programming, whether the initial setup takes &lt;1 second or 10 seconds is not that relevant." CreationDate="2017-08-29T08:24:12.147" UserId="819" />
  <row Id="14351" PostId="3378" Score="0" Text="Another advantage of an editor is the ability to just get something &quot;on paper&quot; without worrying about any syntax. In using an IDE (which I do, but also use editors), I am sometimes put off by all the &quot;errors&quot; that are a result of just typing thoughts and structure. &quot;Yes, IDE I know it isn't syntactically correct, but I don't care. I'll deal with that later.&quot;" CreationDate="2019-02-19T19:33:56.033" UserId="4301" />
  <row Id="7388" PostId="3380" Score="11" Text="Yes show them how there is currently a trend toward functional. As there once was a trend toward structured, and object-oriented. But the new will not replace the old. It will improve it." CreationDate="2017-08-28T10:54:45.180" UserId="204" />
  <row Id="7925" PostId="3380" Score="0" Text="By agreeing with them, we reinforce their confidence. That will close them for any discussion." CreationDate="2017-09-10T11:21:33.603" UserId="160" />
  <row Id="7532" PostId="3381" Score="0" Text="What if one of them does it?" CreationDate="2017-08-29T19:20:44.483" UserDisplayName="user737" />
  <row Id="7536" PostId="3381" Score="0" Text=";-) I was talking about a function that can deal with _any_ program." CreationDate="2017-08-29T20:11:16.273" UserId="2574" />
  <row Id="7563" PostId="3381" Score="0" Text="I meant that too." CreationDate="2017-08-30T13:40:22.167" UserDisplayName="user737" />
  <row Id="7564" PostId="3381" Score="0" Text="So they cannot do it : the uniform halting problem is not decidable. And that's the point : learning a bit of &quot;theory&quot; can avoid searching for things that do not exist, which should be of interest to them as they are learning CS and not theology." CreationDate="2017-08-30T13:43:39.440" UserId="2574" />
  <row Id="7565" PostId="3381" Score="0" Text="But searching for things that do not exist is usually what leads us to find or invent those that do. Where would we be without Theology? We certainly don't want students to feel that all the interesting problems have been solved. Have you seen Bret Victor's video, *The Future of Programming*? At the end he says, &quot;The most dangerous thought that you can have as a creative person is to think that you know what you are doing.&quot; The video points out that our attitudes about what a program is and does hardened over about 40 years ago. Now, that self-modifying program to see if it itself will halt..." CreationDate="2017-08-30T13:48:39.310" UserDisplayName="user737" />
  <row Id="7396" PostId="3382" Score="4" Text="You would have to take a side-trip to explain big data, then satisfy the student's need to understand procedural programming, so that they have some concept of what algorithms are and how to code them, then go back to big data and start explaining how Functional is necessary there. I don't think you can go straight for the punchline, people will not get the joke." CreationDate="2017-08-28T12:27:18.840" UserDisplayName="user737" />
  <row Id="10068" PostId="3382" Score="0" Text="Functional programming is great for extracting an answer from a dataset so huge it spans a multi-room computer system.  It's horrible for writing Tetris.  Far more programmers will spend their careers writing Tetris that will spend their careers developing for room-sized computers." CreationDate="2018-02-12T06:10:30.803" UserId="2781" />
  <row Id="17863" PostId="3382" Score="0" Text="Pure functional is great at Tetris/games like rowclear, rotate, canfit, drop are all pure functions that take in board and piece.  A custom monad for game data is good so that you can save/reload, ai players, and online play, and this custom monad is a layer above IO.  In games you want to change the game data all at once like functional, and directly changing the game data one by one is very error prone.  FRP can be good for user interfaces and animation.  For speed, you can embed a lower-level language like how Naughty Dog made Jak &amp; Daxter." CreationDate="2021-03-31T22:28:36.083" UserId="10324" />
  <row Id="7405" PostId="3383" Score="0" Text="If I play the devil's advocate (the pragramtics) I would answer that as lot of developers (even more in Java), I use databases. So it's the database that do that stuff for me. It's so rare that I have to do that myself that I can afford writing some specific loops for that." CreationDate="2017-08-28T13:18:13.283" UserId="1375" />
  <row Id="7437" PostId="3383" Score="4" Text="Well, honestly, if I came upon that in a code review in an enterprise-y environment...I would probably send it back to be redone in a way that is less &quot;elegant&quot; but more &quot;readable&quot; or &quot;maintainable&quot;..." CreationDate="2017-08-28T22:10:11.933" UserId="1407" />
  <row Id="7458" PostId="3383" Score="6" Text="Readability and maintainability depend on the level of knowledge in the company. In my current company about every Java developer  can fluently read and maintain that. But I've also been in companies where the word &quot;stream&quot; alone caused headaches, there I probably would write that differently. In the end it is however an artificial solution to demonstrate something." CreationDate="2017-08-29T07:42:46.327" UserId="2491" />
  <row Id="7492" PostId="3383" Score="4" Text="@Walfrat let me play the devil's advocate right back. In C# you can write that code in C# and then have that _run on the database_ by using a LINQ provider - where the abstract syntax tree is used to generate SQL. The fact it's functional is what makes this possible. This is how a LINQ provider do." CreationDate="2017-08-29T13:54:05.023" UserId="102" />
  <row Id="7506" PostId="3383" Score="0" Text="@BenjaminGruenbaum I wasn't answering to LINQ. My point was more about learning a new tool that I may have very little use in fact." CreationDate="2017-08-29T14:49:57.297" UserId="1375" />
  <row Id="7531" PostId="3383" Score="6" Text="@user3067860 You may have hit upon an answer to the original question there.  Learning functional programming is useful because people who haven't can be confused by three lines of fairly trivial code." CreationDate="2017-08-29T18:40:50.960" UserId="827" />
  <row Id="7598" PostId="3383" Score="0" Text="@Ray: For better or worse, people who *have* learned functional programming can still be confused by &quot;three lines of fairly trivial code&quot;--or often even one really short line of completely trivial code, if it uses a syntax with which they're sufficiently unfamiliar (e.g., somebody who knows functional programming extremely well will still often have difficulty reading APL)." CreationDate="2017-08-30T16:07:01.703" UserId="2835" />
  <row Id="7701" PostId="3383" Score="2" Text="@JerryCoffin True...but APL is a special case.  Any language composed mostly of characters that don't even exist on a standard keyboard is going to be difficult to read.  But the simplest evidence I have for the idea that anyone confused by TwoThe's example is confused by the functional programming and not the syntax or API is that I've never used Java's streams API and I was able to understand that code without any difficulty since the functional approach was so clear." CreationDate="2017-08-31T17:42:02.587" UserId="827" />
  <row Id="7704" PostId="3383" Score="0" Text="@Ray You're justifying learning how to read it in case someone else writes it that way, but I still don't see what you gain by actually writing it that way. Is your source control server running out of storage, so that you must economize on lines of code?" CreationDate="2017-08-31T18:49:12.213" UserId="1407" />
  <row Id="12040" PostId="3383" Score="0" Text="@user3067860 LoC is the wrong metric for *anything*. The 3 line version is objectively more readable *in business-logic terms*. There's no index variables, for statements, intermediate assignments. The only advantage of explicitly spelling all of that out is that it's easier to debug. When you look at a piece of code and see that it's &quot;iterating over something and turning it into something else&quot; the something/something else is the only thing that matters, everything else is noise." CreationDate="2018-04-12T12:53:17.920" UserId="1790" />
  <row Id="12041" PostId="3383" Score="0" Text="@JaredSmith The 3 line version is also simultaneously objectively less readable because it has a left-right scroll bar that I have to use to read the ends of the lines." CreationDate="2018-04-12T15:44:47.637" UserId="1407" />
  <row Id="7454" PostId="3384" Score="13" Text="You miss out on abstraction. What's the equivalent to an efficient `for` loop? No, it's not tail recursion, its `foldl'`. You write `def our_length(list): return list.reduce(x =&gt; x+1, 0)`" CreationDate="2017-08-29T06:52:48.977" UserId="660" />
  <row Id="7549" PostId="3384" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64784/discussion-on-answer-by-mason-wheeler-how-to-answer-functional-programming-is-u). Any further discussion here will be deleted and **will not** be moved to chat." CreationDate="2017-08-29T23:08:26.077" UserId="58" />
  <row Id="7445" PostId="3385" Score="2" Text="Commercial IDEs are also an option since many provide free licenses to students, educators, and classrooms (e.g. [Jetbrains IDEs](https://www.jetbrains.com/products.html?fromMenu#type=ide))." CreationDate="2017-08-29T01:15:04.937" UserId="1719" />
  <row Id="7453" PostId="3385" Score="9" Text="I too started with (hand) punched-cards, and while I wouldn't suggest going back to that, there is a potential danger that a _do-it-all-IDE_ can hide a lot of what's really happening from a new student, and produce _cut-and-paste-coders_ that don't _really_ understand what they're doing (and lead to some of the poorer questions on StackOverflow). On the flip side, systems, libraries and frameworks have got so complex that very few people _could_ every understand &quot;everything&quot;, so a degree of &quot;trust the black box&quot; is necessary. Perhaps a term of no-frills _programming_ before switching to IDEs." CreationDate="2017-08-29T06:49:44.610" UserId="1372" />
  <row Id="7642" PostId="3386" Score="1" Text="“the teacher's job is to teach them what they need to know, not just what they want to know.”  Sure, but it’s hard to teach it to them while they don’t want to know it.  Most routes to effectively teaching anything involve bringing students around until they *do* want to know it." CreationDate="2017-08-30T21:26:19.033" UserId="2276" />
  <row Id="7772" PostId="3386" Score="1" Text="&quot;the teacher's job is to teach them what they need to know, not just what they want to know&quot; - Sure, but it's not unreasonable for students to ask `I get that you think I need to know this, but could you explain why you think that?'  It's not unreasonable for students to ask you to help them to understand why you think that they need to know it.  So the question probably still deserves to be answered.  If you have a compelling argument that they need to know it, it seems like them asking the question is a great opportunity to make the case for it." CreationDate="2017-09-03T02:19:24.140" UserId="1106" />
  <row Id="7775" PostId="3386" Score="0" Text="Agree. Of course." CreationDate="2017-09-03T09:52:56.357" UserId="1293" />
  <row Id="7542" PostId="3387" Score="2" Text="I like this answer, because is completely true. For beginners I think this hybrids are the best option. I was thinking in Visual Studio Code, that actually opens really fast and has a lots of plugins easy to install. Using this, you can focus in programming and not in configuration." CreationDate="2017-08-29T21:29:43.987" UserId="2480" />
  <row Id="10462" PostId="3387" Score="1" Text="@KennyBarrera VS Code is probably fine, I was thinking of VS itself which is, to say the least, heavyweight." CreationDate="2018-03-12T20:30:12.790" UserId="1790" />
  <row Id="14330" PostId="3387" Score="2" Text="Especially &quot;ditto&quot; for emacs. It's really another language. Sublime ... no problem. Acts like an editor." CreationDate="2019-02-19T03:07:35.893" UserId="6588" />
  <row Id="7446" PostId="3390" Score="1" Text="I am talking about India, but the situation is the same. In the last 2 years, I have worked on a 4 major projects, each of them had a significant web component. I also have a habit of informally walking around the client location, and asking people what they are upto. web development skills are in demand, if not high paying." CreationDate="2017-08-29T03:01:09.847" UserId="2605" />
  <row Id="7480" PostId="3390" Score="0" Text="I have a question a bit off topic, but for web projects won't you need to have some experience with design?" CreationDate="2017-08-29T12:10:07.027" UserId="118" />
  <row Id="7485" PostId="3390" Score="1" Text="@Safirah it depends on the team. I've worked two different co-ops with some web component, and only in one did I specifically need to know basic design concepts. It is possible to be entirely isolated from design in a web project, especially if the Back End is a heavy part of the project. But that's another advantage of showing the students the essential web components; it is likely they will naturally gravitate more to design or more to backend, but both are employable and have just as much place on a team." CreationDate="2017-08-29T13:00:59.987" UserId="2755" />
  <row Id="7486" PostId="3390" Score="1" Text="you would need experience with design, but the design is usually given by someone else, or it can be done by someone else. The web development skills in this context would be the interactions and the things that can called and so on." CreationDate="2017-08-29T13:01:26.257" UserId="2605" />
  <row Id="7455" PostId="3392" Score="1" Text="As I comment on [Buffy's answer](https://cseducators.stackexchange.com/a/3385/1372), I think there's a lot to be said for starting at the &quot;nuts and bolts&quot; level, at least for a while, to try to give students a solid grounding so they have a better understanding of what the _do-it-all-IDE_ is doing for them. In a similar way to when I did &quot;O-level&quot; maths, and one test-paper was calculator-free (slide-rules/log-tables allowed) to prove you understood the basic concepts involved." CreationDate="2017-08-29T07:00:58.467" UserId="1372" />
  <row Id="7510" PostId="3392" Score="0" Text="At the same time, do you really want to bother first year students with things such classpaths (oh god), manually configuring gradle projects and whatnot? &quot;So before we start programming, you'll now get a 4 hours introduction into technical details that are in the end irrelevant for programming but are required to get started&quot; just doesn't sound like a great introduction. In the end even if there's no IDE, you'll still give them some basic structure that they won't understand so that they can get to the interesting parts." CreationDate="2017-08-29T16:22:33.163" UserId="819" />
  <row Id="7511" PostId="3392" Score="0" Text="And if you do that anyhow, using an IDE doesn't seem particularly problematic from the &quot;magic&quot; POV. It just depends whether it actually helps or distracts from the actual programming. I certainly would think that developing Python without IDE is a great deal easier than say Java." CreationDate="2017-08-29T16:23:54.563" UserId="819" />
  <row Id="7464" PostId="3395" Score="0" Text="Linq is designed to be functional (non-mutating), as is sql. But create, delete, update are not functional or sql. These are an extension to sql. So you may struggle with them." CreationDate="2017-08-29T09:32:57.457" UserId="204" />
  <row Id="7721" PostId="3395" Score="0" Text="Only one person really understands Entity Framework, so don't feel bad." CreationDate="2017-09-01T13:09:00.747" UserDisplayName="user737" />
  <row Id="7569" PostId="3398" Score="0" Text="I keep waiting for new answers or suggestions, but I guess, no cloud folks here :P Would mark answer by default (like win by default) a good practice ctrl?" CreationDate="2017-08-30T13:57:36.107" UserId="2605" />
  <row Id="7521" PostId="3401" Score="3" Text="It would be a huge help if students could look over each other's code on projects to help each other out before handing them in. Unfortunately, the (very appropriate) culture in schools that treats cheating and plagiarism very strictly makes this difficult to do." CreationDate="2017-08-29T17:38:24.387" UserId="1360" />
  <row Id="7545" PostId="3401" Score="4" Text="Your findings are not unique to students. The workforce is exactly the same way. Some developers believe strongly in code reviews and do a good job while others look at them as yet another task they don't have time for and barely do a review if they do one at all. If you find that silver-bullet that gets everyone excited and motivated to do code reviews then you will be able to leave your teaching job and make a lot of money consulting. IME, neither the carrot nor the stick has much impact in changing behavior regarding code reviews one way or the other over the long-run." CreationDate="2017-08-29T21:52:11.667" UserId="2817" />
  <row Id="7498" PostId="3402" Score="1" Text="The only problem with you're first idea is that if the majority of the class doesn't want to do the task then you have 2 solutions: 1) You make groups where you put motivated students and let unmotivated students fail or 2) Let them make groups and possibly see the usual 5 people group: 1 working + 4 watching" CreationDate="2017-08-29T14:39:08.923" UserId="118" />
  <row Id="7500" PostId="3402" Score="0" Text="But the pair programming idea might do the trick, although it must be an assignment done in the classrom, I've seen countless &quot;pair group assignments&quot; where one of them doesn't even know what the first line of code does" CreationDate="2017-08-29T14:42:06.990" UserId="118" />
  <row Id="7501" PostId="3402" Score="1" Text="Certainly I would form the groups in a case like this, even if I randomize it.  You can also use group peer evaluation to goad the ones tempted to slack. You have incentives you can use. Don't neglect them." CreationDate="2017-08-29T14:42:10.603" UserId="1293" />
  <row Id="7505" PostId="3402" Score="0" Text="I don't want to seem annoying xD, but students usually defend each other." CreationDate="2017-08-29T14:49:23.427" UserId="118" />
  <row Id="7508" PostId="3402" Score="0" Text="My answer was updated to give more ideas about how to to about peer evaluation. It is a bit subtle, but isn't difficult." CreationDate="2017-08-29T15:03:38.613" UserId="1293" />
  <row Id="7546" PostId="3402" Score="2" Text="More of an addendum to this answer (plus, I'm new here, hello!)  How about introducing unit tests.  Members of pairs must be able to pass their partner's tests as well as their own.  It encourages the collusion and teamwork you seek without looking like you're palming your work off on them.  Those unit tests can also be included in the grading perhaps?" CreationDate="2017-08-29T21:58:12.497" UserId="2818" />
  <row Id="7548" PostId="3402" Score="0" Text="Re:&quot;But you also learn a lot from what is not said and who is not included in the contributor list&quot;.  Like for instance, you learn who is friends with who and who is popular versus not popular?  I'd agree that you may be surprised that people say positive things about someone you didn't realize was doing well because many kids are introverted and don't necessarily stand out in the crowd. However, their work does stand out when given the chance. Conversely, I don't think you can come to the reverse conclusion with any degree of reliability;You may as well flip a coin versus using the reviews." CreationDate="2017-08-29T22:01:40.677" UserId="2817" />
  <row Id="7507" PostId="3403" Score="0" Text="Hahaha students thinking I'm ditching work is the last of my problems! ;) But your solution is very helpful! And a interesting twist from @RageCage solution" CreationDate="2017-08-29T14:52:40.253" UserId="118" />
  <row Id="7544" PostId="3407" Score="1" Text="This is a fair point, but there is a counterpoint: someone trained in *always* finding errors in code may change things for the sake of change when on the job.  An even more important ability, I would argue, is the **ability to recognize flawless code that does not need modification.**" CreationDate="2017-08-29T21:37:40.237" UserId="1103" />
  <row Id="7562" PostId="3407" Score="0" Text="Fair point, but not one in the OP. Also I don't agree. *Any* professional of merit will have received some training in recognising serious faults, routine faults, and unimportant poor practice - and *also* when a fault matters and when it doesn't from a product perspective. I don't think you can say &quot;don't specifically train them to see faults (even in their own or similar work), or they will find fault with everything&quot; (which is basically the concern you give).  I don't know any educational or skill training body that would agree." CreationDate="2017-08-30T10:30:08.243" UserId="1629" />
  <row Id="7567" PostId="3412" Score="1" Text="If the flowchart is laid out correctly (down, with nested parts indented to the right) then you can create the pseudocode by simply copying and pasting each line in sequence from the flowchart directly to a text editor. No rearrangement or thinking whatsoever is required. The only difference between a branch and a loop is which way the connecting line goes: up or down. These lines provide the &quot;End If&quot; and other structural parts. This is the magic of using these two techniques. It is a preview of how the same program in any language is &quot;the same&quot;, which amounts to a spiritual revelation." CreationDate="2017-08-30T13:54:36.217" UserDisplayName="user737" />
  <row Id="14015" PostId="3412" Score="0" Text="While it is possibly to create structured flowcharts, we are discussing total novices here. The flowcharts that they produce, will be used to create goto ridden code (see goto considered harmful — Edgar Dijkstra ), or it will be ignored, or become a grate source of frustration." CreationDate="2018-12-05T08:28:40.490" UserId="204" />
  <row Id="7580" PostId="3414" Score="0" Text="Which OS are you using. If you are using a Unix (UNIX, MacOS, Gnu/Linux), then (if syllabus allows) it could be a good idea to teach command line. My order of preference, for my own usage, are: Unix command line, Unix GUI (KDE), Microsoft GUI, Microsoft command line." CreationDate="2017-08-30T14:19:33.640" UserId="204" />
  <row Id="7601" PostId="3414" Score="0" Text="Actually, I don't see any &quot;pros&quot; stated in your question. Did you forget to list them. I see the &quot;what&quot; but not the &quot;why&quot;." CreationDate="2017-08-30T17:11:30.873" UserId="1293" />
  <row Id="7612" PostId="3414" Score="1" Text="@Buffy; the pros are that the concepts under &quot;Relevant topics to explore in the Introduction&quot; are introduced, i.e. to visualise a variable as a cell location which can be given a name, and you can assign a data type, use the name in calculations etc." CreationDate="2017-08-30T18:38:02.200" UserId="2706" />
  <row Id="7613" PostId="3414" Score="0" Text="@ctrl-alt-decor  All the machines use Win7.  I use a Linux laptop myself.  I have considered starting code after the intro with NotePad++, and this could generate Python code that is run from the command line, and I have also been thinking about creating scripts in the form of Windows batch files and doing some simple &quot;commands&quot; for file-sys nav, editing/creating/deleting folders and so on..." CreationDate="2017-08-30T18:40:45.597" UserId="2706" />
  <row Id="7614" PostId="3414" Score="0" Text="But say why you think those things are &quot;pros&quot; for this way of teaching. You aren't making a connection (for me, at least). You are just listing topics." CreationDate="2017-08-30T18:47:13.140" UserId="1293" />
  <row Id="7633" PostId="3414" Score="1" Text="@Buffy My rationale is that it introduces these topics in a more familiar, and relatively popular application that many may have met before, and to use the Excel environment to demonstrate the concepts of variables etc.  When I show the Python Interpreter, math expressions will (for the most part) evaluate as they do in Excel.  If I use if/else, the syntax will differ but the principle will be the same.  If we were to look at a function to sum a list, we have to think about the algorithm that may be used &quot;under the hood&quot; in Excel, and create it in Python.  Similarly for min, max etc." CreationDate="2017-08-30T19:20:09.183" UserId="2706" />
  <row Id="7637" PostId="3414" Score="0" Text="See my answer here, which I just updated to address this issue. If they are well familiar with spreadsheets then it is more natural, of course." CreationDate="2017-08-30T19:35:43.707" UserId="1293" />
  <row Id="7679" PostId="3414" Score="0" Text="And if they are not familiar with spreadsheets, they had better be before they start a job. Win Win. Either it is familiar, or it will be familiar, and necessary. *&quot;What is necessary is never unwise.&quot;* -- Spock's father" CreationDate="2017-08-31T13:19:21.060" UserDisplayName="user737" />
  <row Id="7720" PostId="3415" Score="0" Text="Another Moodle-er!" CreationDate="2017-09-01T11:57:29.340" UserDisplayName="user737" />
  <row Id="7570" PostId="3418" Score="0" Text="I agree that many of your points are true, but I don't think it will hurt anyone to spend a week learning some ideas from spreadsheets. I do this." CreationDate="2017-08-30T14:02:13.927" UserDisplayName="user737" />
  <row Id="7572" PostId="3418" Score="0" Text="Do you mean 'you teach this as an introduction', or 'you learn from spreadsheets'? I think it will do a small amount of harm - maybe to a minority - if it is used as an introduction." CreationDate="2017-08-30T14:06:14.693" UserId="41" />
  <row Id="7573" PostId="3418" Score="0" Text="I like the above suggestion by Sean. And, most editors come with intellisense anyway, so almost nobody needs to remember syntax. I am not proud of it, but I absolutely remember none of the syntax, and I have quite a few enterprise projects under my belt." CreationDate="2017-08-30T14:07:40.277" UserId="2605" />
  <row Id="7575" PostId="3418" Score="0" Text="@Jay Day one, it's not a question of remembering syntax, it's all about mapping natural language to the unknown. The problem then with blocks is trying to remember the hierarchy and where the 'loop thing' is hidden. I strongly feel that with this group, day one needs to be easy and appear productive." CreationDate="2017-08-30T14:10:51.657" UserId="41" />
  <row Id="7577" PostId="3418" Score="0" Text="Learning is like tugging at a sweater: start pulling anywhere, and eventually the whole thing will come unraveled. I am saying that I do teach Excel (and Word, PowerPoint and Visio) before any other programming. Also flowcharts and pseudocode. People keep harping here on starting with the familiar." CreationDate="2017-08-30T14:12:58.720" UserDisplayName="user737" />
  <row Id="7578" PostId="3418" Score="1" Text="Ah, then, I stand corrected. Easy and Productive is my mantra. for myself and others" CreationDate="2017-08-30T14:13:18.797" UserId="2605" />
  <row Id="7615" PostId="3418" Score="1" Text="@Sean   I've also tried both https://blockly-games.appspot.com/ and Scratch (cloud and DL vers), trinket.io for online storage and execution and pythontutor.com so that you can step through the code and see it visualised in the browser.  I am also teaching a module on Excel this year, and it occurred to me that perhaps I could use it as a learning aid for the concepts outlined above, before moving on to other approaches.  I'd be interested to know how it may do harm?  If discussing how the SUM function works &quot;under the hood&quot; it might be a way to introduce the idea of something like a for-loop." CreationDate="2017-08-30T18:47:49.543" UserId="2706" />
  <row Id="7655" PostId="3418" Score="0" Text="@srattigan Added to the answer. I worry that you will plant some seeds of false understanding, confusion or concern, unless you start with an above-average familiarity of using spreadsheets across the whole cohort. I was writing database applications when I first encountered spreadsheets, and the spreadsheets made little sense to me at the time (35 years ago - so my early experience may match some of your cohort's only exposure)." CreationDate="2017-08-31T09:06:57.027" UserId="41" />
  <row Id="7681" PostId="3418" Score="0" Text="In early 1985 I sat down in front of a Mac for the first time. I had never seen a GUI before. I had never touched a mouse before. I had never heard a computer make sounds when I did things before. (It even smelled a bit strange.) I was able to mess around with no help or guidance whatsoever and use the Paint program to do something silly and print it. (Was about 20, visiting a friend at another college.) I recall when I was 5, staring at printed pages of text and trying to will it in to being readable. Everything is unfamiliar at first. How is this a problem? Aren't we teaching people?" CreationDate="2017-08-31T13:43:16.643" UserDisplayName="user737" />
  <row Id="7693" PostId="3418" Score="1" Text="@Sean, thanks for clarifying what you meant.  I can see where you are coming from, and while I do not agree entirely with your perspective, it is food for thought.  I'm going to have to think about this a bit more..." CreationDate="2017-08-31T15:56:55.327" UserId="2706" />
  <row Id="7571" PostId="3419" Score="0" Text="I like to show how I used a spreadsheet with a single expression (duplicated across multiple columns) to decode a &quot;noisy&quot; textual message - 1 in 5 chance that the letter will be correct - from a large number of repetitions of the message (about 40 is usually sufficient). This is from a book by Gerald M. Weinberg, and I think it is a beautiful example of using a spreadsheet to solve a problem that would require a quite complex program otherwise. Thus, I was unwittingly teaching a Functional approach! (which I otherwise do not)" CreationDate="2017-08-30T14:06:09.203" UserDisplayName="user737" />
  <row Id="7617" PostId="3419" Score="0" Text="@ctrl-alt-delor  I started bith Blockly (Google) last year, and did a few weeks in Scratch, to try to demonstrate the basics.  Some said they found it useful, some did not.  I am keen to try anything new that helps learners to &quot;get it&quot; at the beginning, before moving on to coding in a text-editor or IDE." CreationDate="2017-08-30T18:51:02.083" UserId="2706" />
  <row Id="7574" PostId="3420" Score="1" Text="Actually, spreadsheets are very widely used in complex, &quot;big data&quot; analysis. I used to teach on this idea for a few weeks, but we had to drop it from the curriculum for the sake of time and focus. I suggest that you find one of the many books about data analysis using Excel and Access and take a quick look. You will be surprised and impressed. Excel is not the most used software in the world for nothing, and there are few data analysis tasks that cannot be done elegantly with it." CreationDate="2017-08-30T14:09:45.707" UserDisplayName="user737" />
  <row Id="7576" PostId="3420" Score="1" Text="I have nothing against spreadsheets (I use them myself at work). Just, I don't want first years exposed to it, that is all :P I like to keep my classroom fun and nice, and spreadsheets are just not that." CreationDate="2017-08-30T14:12:06.857" UserId="2605" />
  <row Id="7579" PostId="3420" Score="1" Text="It would be interesting to hear why you think they are not fun or nice or why early learning would be hindered with spreadsheets. They were designed from the beginning as a tool that was easy to learn and apply for complex problems. Programming is not just writing statements, there used to be &quot;analog computers&quot; that could solve some problems with no numerical representation at all. You can build one to find a linear approximation of a scattered set of points using a plank of wood, nails, rubber bands and a stick. And it works 'instantly' too." CreationDate="2017-08-30T14:17:55.490" UserDisplayName="user737" />
  <row Id="7581" PostId="3420" Score="0" Text="To use a simple analogy, spreadsheets are like that Microsoft guy from the apple ad. Just does not fit into my definition anything remotely fun. Full Disclosure, I am a huge MS fan, and 80 % of my money comes from dot net, but yeah, I can be honest and say that most of the time Microsoft is not what I call fun. They have improved over the years, but, spreadsheets...nope, not fun at all." CreationDate="2017-08-30T14:20:23.923" UserId="2605" />
  <row Id="7620" PostId="3420" Score="0" Text="Thanks, I wasn't even thinking of fun!  I used Scratch last year with mixed results.  I also used Blockly Games.  Maybe I can find a way to make Excel sheets fun :D  It's a good point though!  Fun = engagement =&gt; better learning?" CreationDate="2017-08-30T18:54:18.363" UserId="2706" />
  <row Id="7641" PostId="3421" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/64854/discussion-on-answer-by-talha-irfan-introduction-to-programming-class-use-sprea)." CreationDate="2017-08-30T20:55:17.493" UserId="58" />
  <row Id="7586" PostId="3422" Score="1" Text="So what is your (ultimate) question?" CreationDate="2017-08-30T14:42:14.780" UserId="2537" />
  <row Id="7593" PostId="3422" Score="0" Text="I've never encountered language as a barrier. Culture to a small extent (people unable to admit they are stuck and need help) - but not in me personal experience with people from India. Soft skills help, and maybe it depends what level in the market you're addressing, but delivery is what matters in the end. Here, you're providing an __excuse__ to your students about why even after you trained them, they will struggle - and they don't like that." CreationDate="2017-08-30T15:13:22.623" UserId="41" />
  <row Id="7595" PostId="3422" Score="0" Text="&quot;I've never encountered language as a barrier. &quot; ah...well, it is a big deal here. With so much work coming from Europe and US, this is a huge one for us, and by extension a challenge for every trainer who works in Asia. We have no choice but to deal with it. I have had managers spending hours telling me how they have lost so many deals because of language issues. Its actually very sad." CreationDate="2017-08-30T15:55:20.007" UserId="2605" />
  <row Id="7597" PostId="3422" Score="0" Text="The ultimate question is, I am trying to figure out a way to convey that, and making it part of my curriculum. I am not the only struggle with it either. Many trainers here are, and I am always about improving what I am doing...for example, G. Ann has posted the kind of stuff I want to read and work on." CreationDate="2017-08-30T16:01:13.650" UserId="2605" />
  <row Id="7599" PostId="3422" Score="0" Text="It sounds like you are more motivated 'for' your students' success than they are. This is usually an uncomfortable position for a student, and an awkward one for an instructor, as you see. I am also looking at this issue and formulating a question here. My suggestion is to &quot;take a step back&quot; and be ready when they come towards you wanting something, but do not push. Mention, but do not 'tirade', regardless how much you have their interests at heart." CreationDate="2017-08-30T16:21:38.717" UserDisplayName="user737" />
  <row Id="7600" PostId="3422" Score="0" Text="&quot;It sounds like you are more motivated 'for' your students' success than they are.&quot; It's more like the big bosses want them to learn because it means, more revenue. I simply end up with these scenarios because I am just open to suggestions and take some risks, something that other trainers are unwilling to do." CreationDate="2017-08-30T16:24:08.470" UserId="2605" />
  <row Id="7604" PostId="3422" Score="0" Text="I see a new future career for you: train the big bosses on how to motivate their people to learn new things so that they can all improve the revenue. You have a willing audience, just not the one you are standing in front of! Your openness predicts your success, in part because you will probably have no competition. *Qapla'!*" CreationDate="2017-08-30T17:19:20.103" UserDisplayName="user737" />
  <row Id="7650" PostId="3422" Score="1" Text="I hope it works out for me :)" CreationDate="2017-08-31T05:20:25.367" UserId="2605" />
  <row Id="7656" PostId="3422" Score="1" Text="@Jay I do work quite a lot with engineers in Asia (possibly well above average ability, I can't judge). Maybe it's better to say the illusion of following process is a far bigger barrier than language in the cases where there are problems - and I see some of your question here resonates with that conflict." CreationDate="2017-08-31T09:17:24.290" UserId="41" />
  <row Id="7594" PostId="3423" Score="0" Text="This is an awesome suggestion and also a great way to show importance of clear code and good comments" CreationDate="2017-08-30T15:18:29.350" UserId="118" />
  <row Id="7596" PostId="3424" Score="0" Text="the gentle tirade is putting it mildly. I tend to get dramatic...so there is that. Perhaps, I could work on that. offering suggestions, I do that...ignoring...thats hard but already doing it..and making it part of curriculum is what I am hoping to do with this question above." CreationDate="2017-08-30T15:57:22.133" UserId="2605" />
  <row Id="7631" PostId="3432" Score="2" Text="@Kevin Workman, really good point.  Who wants a boring Introduction?  As someone said in another response- we need some fun in there too!  I may demo some of the work of previous years students to show what the end-goal is.  I've read through those links as well- there were some really nice suggestions in each.  Processing looks pretty nice, and although I am happily married to Python, I am tempted to cheat, or even have an affair with Processing." CreationDate="2017-08-30T19:14:16.797" UserId="2706" />
  <row Id="7632" PostId="3432" Score="0" Text="@srattigan In that case you might look into using [Processing.py](http://py.processing.org/). See [this answer](https://cseducators.stackexchange.com/questions/3374/ide-vs-editor-and-terminal-for-cs1/3388#3388) for more info." CreationDate="2017-08-30T19:16:17.457" UserId="2068" />
  <row Id="7626" PostId="3433" Score="1" Text="I like to try different things every year.  Some work and some don't.  This would not be a major part of the course, just an introduction before moving on to writing Python code in NotePad++ (and later- in the follow-on module- PyCharm).  For this module they must understand the elements in the intro, and be able to create flowcharts, modular programming (files and functions, imports etc.).  Some may be familiar with Office, and some likely will not." CreationDate="2017-08-30T19:02:54.740" UserId="2706" />
  <row Id="7629" PostId="3433" Score="2" Text="Good, then. A wise friend of mine has advocated for a long time that a certain part of every course (I think he says 10%) should be experimental. Try something new and evaluate it. But also be prepared to compensate if it goes especially badly. It also makes it less boring if you have to teach the same courses repeatedly." CreationDate="2017-08-30T19:07:25.647" UserId="1293" />
  <row Id="7638" PostId="3433" Score="1" Text="I never know what the students are going to be like until they start, so I'll know next Monday.  It looks like there can be benefits to using Excel: if they have some knowledge of using it, vars, expression and functions may be grasped more readily.  On the other hand, it's not very exciting.  Scratch and Google Blockly are arguably more &quot;fun&quot;, but it was considered useful by about half of last years cohort.  Another &quot;new&quot; thing to try is batch file scripts... there really are so many options I can use that getting the right balance is difficult." CreationDate="2017-08-30T19:46:37.333" UserId="2706" />
  <row Id="7611" PostId="3434" Score="0" Text="I doubt this is specific to [tag:adult-education] actually." CreationDate="2017-08-30T18:35:48.653" UserId="1293" />
  <row Id="7627" PostId="3435" Score="0" Text="A good and wise answer (IMO). Welcome to CSEducators. Hope to hear more from you." CreationDate="2017-08-30T19:04:23.583" UserId="1293" />
  <row Id="7622" PostId="3436" Score="0" Text="I love the last paragraph. I feel like I will be a better teacher because of it. @nocomprende I think that buffy is not saying that the teacher therefore does nothing, the teacher is a conductor. Everything the teacher does should be to perfect the students doing." CreationDate="2017-08-30T18:57:18.463" UserId="204" />
  <row Id="7624" PostId="3436" Score="0" Text="Well, not the last paragraph any more, since I updated to answer the OPs concerns. But thanks." CreationDate="2017-08-30T18:59:17.383" UserId="1293" />
  <row Id="7640" PostId="3436" Score="0" Text="@nocomprende yes, but the only ones the instructor can control are the ones that the instructor controls." CreationDate="2017-08-30T20:36:05.400" UserId="204" />
  <row Id="7619" PostId="3437" Score="0" Text="Yes, I wish to do more of this somehow. One of the more popular assignments is the old &quot;create shapes on the screen with print statements&quot; thing. Lots of immediate feedback there." CreationDate="2017-08-30T18:53:26.987" UserDisplayName="user737" />
  <row Id="7651" PostId="3439" Score="1" Text="to put some things in context, I don't have a job but rather arrangements with various agencies. There is no job to lose because I don't have one. However, instead of making 10 dollars, I might make 9 (which is still more than what most of my peers make). While there is a monetary loss, it is something that is acceptable to me. I feel that if I can figure this out (like say in the next 1 year), it will pay for itself." CreationDate="2017-08-31T05:23:20.633" UserId="2605" />
  <row Id="7666" PostId="3441" Score="1" Text="Could you give us more details on what is the curriculum for the class is like?" CreationDate="2017-08-31T11:16:57.707" UserId="118" />
  <row Id="7678" PostId="3441" Score="1" Text="I think you should ask for help on the APCS mailing list. You may find others with more experience at this. You would reach a larger audience on the ACM SIGCSE list. Your issue isn't really limited to high-school, of course. It can arise in any course at any level. With appropriate changes of language (emphasizing the CS less and the visual elements of the curriculum more) you might also ask it on other forums here at StackExchange." CreationDate="2017-08-31T13:05:46.007" UserId="1293" />
  <row Id="7688" PostId="3441" Score="0" Text="Shouldn't this question be migrated to Academia SE?" CreationDate="2017-08-31T15:08:55.400" UserId="2537" />
  <row Id="7713" PostId="3441" Score="4" Text="@TalhaIrfan no, it's about high school, not academia." CreationDate="2017-09-01T06:46:08.003" UserDisplayName="user24" />
  <row Id="7796" PostId="3441" Score="1" Text="I think the number one point is to ditch the GUI and go with full CLI access. For additional resources, try contacting [Kentucky School for the Blind](http://www.ksb.k12.ky.us/), a K-12 school which has probably encountered, and overcome, any issue you might have." CreationDate="2017-09-04T04:56:14.113" UserId="104" />
  <row Id="13050" PostId="3441" Score="0" Text="See also https://cseducators.stackexchange.com/questions/3441/teaching-a-blind-high-school-student and https://cseducators.stackexchange.com/questions/4239/how-to-teach-image-processing-and-computer-graphics-to-a-blind-student" CreationDate="2018-06-28T18:46:05.720" UserId="765" />
  <row Id="20917" PostId="3441" Score="0" Text="[Ask HN: Alternatives to Scratch for a blind child?](https://news.ycombinator.com/item?id=34229502) has useful ideas as well." CreationDate="2023-01-03T19:56:48.300" UserId="9426" />
  <row Id="21811" PostId="3441" Score="0" Text="A high school student is a school student on drugs. Students on drugs cannot be taught particularly well, especially if they are blind." CreationDate="2024-03-18T01:02:42.760" UserId="14351" />
  <row Id="7653" PostId="3446" Score="1" Text="Azure is broad. No doubt about that. However, every one must start somewhere. Like with any programming, I want to give them a rundown. For instance, the azure dashboard itself is overwhelming for newcomers. However, if a simple 3 hour session on creating a web service and connecting to it via FTP and putting some 'just coded' basic html files has worked wonders for me in the past." CreationDate="2017-08-31T08:34:44.910" UserId="2605" />
  <row Id="7654" PostId="3446" Score="0" Text="The first paragraph was a comment, and then I realised that I was extending it into a answer. Perhaps I didn't make the point clear enough: the course isn't going to be Azure because that's too big a topic, so what is it *really* going to be?" CreationDate="2017-08-31T09:05:52.397" UserId="1219" />
  <row Id="7657" PostId="3446" Score="1" Text="thats what I am doing here with the question. gathering thoughts to see if it can help me. I want them to not be overwhelmed. Perhaps, attend successive Azure workshops which will be more fine tuned. And, if enough students show interest, I could allow the workshop to evolve into a full on training course." CreationDate="2017-08-31T09:21:13.547" UserId="2605" />
  <row Id="7723" PostId="3446" Score="0" Text="*&quot;The blue sky opens out farther and farther...&quot;* - Kabir" CreationDate="2017-09-01T13:14:31.030" UserDisplayName="user737" />
  <row Id="7722" PostId="3447" Score="0" Text="Now if we could just get the tools to do everything, including the testing, we could hit the beach!" CreationDate="2017-09-01T13:10:08.290" UserDisplayName="user737" />
  <row Id="7718" PostId="3448" Score="2" Text="I agree. As Piaget said, &quot;Nothing Gnu is learned until existing systems have failed to maintain equilibrium.&quot; (well, almost)" CreationDate="2017-09-01T11:50:20.187" UserDisplayName="user737" />
  <row Id="7731" PostId="3448" Score="0" Text="@nocomprende Can you enlighten be in that quote. It reminds we of something." CreationDate="2017-09-01T13:36:04.533" UserId="204" />
  <row Id="7734" PostId="3448" Score="3" Text="It should be 'new' instead of 'Gnu', of course. The idea is that we only learn when we must, and it means that we are always off-balance or struggling while learning. If our existing knowledge suffices, why would we bother to change it? A friend of mine used to quote this a lot. So, the basis for all learning is discomfort. Like the basis for all of Buddhism is the Truth of Suffering. Hmm..." CreationDate="2017-09-01T14:28:48.367" UserDisplayName="user737" />
  <row Id="7757" PostId="3448" Score="0" Text="@user737 Oh very punny. (and sorry I seemed to have miked you up with someone else, in that last comment." CreationDate="2017-09-02T09:35:58.673" UserId="204" />
  <row Id="7719" PostId="3449" Score="0" Text="I agree. The curriculum for this person could be focused on their real interests, instead of making them slog through a lot of peripheral things. If someone was interested in mountain climbing but had had a stroke we could help them reach their objective, and not require a ballet class at the same time." CreationDate="2017-09-01T11:53:03.847" UserDisplayName="user737" />
  <row Id="7683" PostId="3450" Score="0" Text="Something like the following might help at least a bit. The key is the left-right rule as discussed there. http://unixwiz.net/techtips/reading-cdecl.html. I might try to discuss the C data types as a way to represent Java references, and the structs as a way to build objects (with embedded references). Not a perfect analogy, but maybe a place to start." CreationDate="2017-08-31T14:23:30.480" UserId="1293" />
  <row Id="7684" PostId="3450" Score="0" Text="I have faced no challenge in using or explaining pointers when they are used within a C file. It is only when I decided to do 'separate files' with the .h and .c, I ran into issues. You will find a sample code in the question, which I just updated." CreationDate="2017-08-31T14:25:53.360" UserId="2605" />
  <row Id="7685" PostId="3450" Score="0" Text="Pointers should behave exactly the same whether you're using them in a header file or not. In any case, after your edits, it seems like your actual question is more of a technical one -- I would try asking it on StackOverflow rather then here." CreationDate="2017-08-31T14:36:24.850" UserId="732" />
  <row Id="7686" PostId="3450" Score="0" Text="@Michael0x2a Agree!" CreationDate="2017-08-31T14:48:45.537" UserId="2537" />
  <row Id="7687" PostId="3450" Score="1" Text="Thats all very fair folks. I was hoping if someone could point me to a Pointer + header Files + Struct resource online, or explain how it works in a post....that would have really helped me...like how things have been explained in the 'Pointer Examples in C' post." CreationDate="2017-08-31T15:06:22.047" UserId="2605" />
  <row Id="7690" PostId="3450" Score="1" Text="This also seems to be a question about C and its usage, not a question about education. The StackOverflow forum will have better answers." CreationDate="2017-08-31T15:23:54.483" UserId="1293" />
  <row Id="7695" PostId="3450" Score="0" Text="@Buffy I thought this question, was asking for help on teaching pointers in C: What can I do to make it easier for my student to learn pointer? If so then it should be on topic. Am I wrong?" CreationDate="2017-08-31T16:56:25.757" UserId="204" />
  <row Id="7699" PostId="3450" Score="1" Text="Just because a question arises in a teaching context doesn't make it about education. Had it started out &quot;We are building the next Facebook replacement and are running into a header file problem...&quot; and then continued at the 3rd paragraph. The question would be the same. It isn't the context that makes it about education, though the context is needed. It was a specific C usage question." CreationDate="2017-08-31T17:24:49.570" UserId="1293" />
  <row Id="7709" PostId="3450" Score="0" Text="The JVM is implemented in C. C pointers are a key part of the Java reference mechanics. You might start from there." CreationDate="2017-09-01T03:06:37.127" UserId="1537" />
  <row Id="7765" PostId="3450" Score="1" Text="Using &quot;typedef&quot; to hide real definitions provides a way to give some opaqueness (example : FILE) to user defined data types.  But It makes more harm than good when you're trying to explain pointers to beginners. BTW you used the same name in both typedefs. Better start with functions over some structs (without pointers, like coordinates or dates with day/month/year) and explain pointers for parameter passing of structs. Keep dynamic allocation and chaining for a later stage (topic won't be unfamiliar to your java student)." CreationDate="2017-09-02T17:50:42.633" UserId="2103" />
  <row Id="7682" PostId="3451" Score="0" Text="I have updated my question to pinpoint the exact place where things are doing south." CreationDate="2017-08-31T14:22:56.093" UserId="2605" />
  <row Id="7689" PostId="3453" Score="0" Text="Yeah, thats the link I spent time reading as well, before posting the question. I am confused if I should use the one with the * or without the *, not using them together. and what do they signify in this context, the one with the * and the one without." CreationDate="2017-08-31T15:13:36.733" UserId="2605" />
  <row Id="7691" PostId="3453" Score="0" Text="You mean &quot;On the other hand, if you say typedef struct samplestructrec samplestruct;&quot; right? without the *. Assuming that is the case, that explanation solves my problem." CreationDate="2017-08-31T15:29:23.307" UserId="2605" />
  <row Id="7692" PostId="3453" Score="0" Text="Yes. Fixed. But still, not an appropriate question for CSEducators." CreationDate="2017-08-31T15:30:55.390" UserId="1293" />
  <row Id="7694" PostId="3453" Score="0" Text="`#include` is not, “just about as you would treat textual inclusion”, it is textual inclusion. It is an instruction to the C pre-processor. It tells it to replace the `#include` line with the content of the file. (There are some other `__LINE__` and `__FILE__` stuff included,  but this is just to reset some values used by the code that outputs the debug info. You may see this if you look at the output of `cpp` the C pre-processor. )" CreationDate="2017-08-31T16:54:25.813" UserId="204" />
  <row Id="7700" PostId="3453" Score="0" Text="OK, I yield on that. It's been a while since I used C and haven't kept up on advances in processing it, so I was being cautious in my statement. But textual inclusion is in my memory bank." CreationDate="2017-08-31T17:26:34.250" UserId="1293" />
  <row Id="7762" PostId="3454" Score="0" Text="Whole SO community is after you. Good luck dude! https://stackoverflow.com/a/406819/1698143" CreationDate="2017-09-02T11:35:56.810" UserId="2537" />
  <row Id="7763" PostId="3454" Score="1" Text="@TalhaIrfan added emphasis: not too much. A little goes a long way. Hungarian notation has been over used in the past, it is not evil, if used appropriately." CreationDate="2017-09-02T13:52:24.020" UserId="204" />
  <row Id="7829" PostId="3454" Score="1" Text="It is appropriate for languages with &quot;typeless&quot; variables. But I agree some notation convention helps the beginner:  `Thing my_thing, *your_thing_ptr;`" CreationDate="2017-09-05T08:43:38.477" UserId="2103" />
  <row Id="7830" PostId="3454" Score="0" Text="@MichelBillaud I still use `_pt` and I have over 30 years experience as a programmer. Both the C library and I use `_t` for types. Though I prefer all caps (Eiffel style) for types/classes (In C all caps is for macros)." CreationDate="2017-09-05T09:26:30.700" UserId="204" />
  <row Id="7832" PostId="3454" Score="0" Text="@ctr-alt-delor I'm afraid I'm a bit older. And I'm not convinced by the necessity or _t suffix in user defined data types names. Opening a random file in the linux source tree : there is none https://github.com/torvalds/linux/blob/master/include/linux/amba/bus.h" CreationDate="2017-09-05T09:41:53.560" UserId="2103" />
  <row Id="7871" PostId="3454" Score="0" Text="@ctrl-alt-delor But I see this (_t suffix) is a recommendation in some coding standards for Embedded C  https://barrgroup.com/Embedded-Systems/Books/Embedded-C-Coding-Standard/Data-Type-Rules/Naming-Conventions&#xA;(note they don't seem to know about C11 and recommend C99). Standards, so many of them...." CreationDate="2017-09-06T14:19:42.677" UserId="2103" />
  <row Id="7712" PostId="3455" Score="1" Text="Did these students have other courses on this topic before, where you would expect them to learn these things?" CreationDate="2017-09-01T06:42:25.023" UserDisplayName="user24" />
  <row Id="7714" PostId="3455" Score="0" Text="@Keelan Yes Keelan! As I mentioned in the start of the question, Programming Fundamentals and OOP are pre-requisite for this C# course" CreationDate="2017-09-01T07:14:51.703" UserId="2537" />
  <row Id="7887" PostId="3455" Score="0" Text="What language did they use to do OOP course?" CreationDate="2017-09-07T14:49:14.640" UserId="204" />
  <row Id="7888" PostId="3455" Score="0" Text="@ctrl-alt-delor C++ all the way" CreationDate="2017-09-07T14:49:54.250" UserId="2537" />
  <row Id="7890" PostId="3455" Score="0" Text="The language we teach in is very important: C++ focuses on mechanisms, not OO concepts: you have to learn which mechanism to use where. It has a many to many relationship between concept and mechanism (situation A use mechanism f, situation B use mechanism g). It is a **HUGE** language, learning it at the same time as OO is putting to much on the students (zone of proximal development). C# and Java are, at least, smaller. A better choice is Eiffel (see a touch of class https://www.eiffel.org/doc/eiffel/Touch%20of%20Class%3A%20Learning%20to%20Program%20Well%20with%20Objects%20and%20Contracts )." CreationDate="2017-09-07T16:55:11.317" UserId="204" />
  <row Id="7891" PostId="3455" Score="0" Text="Most of the recent additions to C# / .net, have come from Eiffel. Eiffel was the 2nd .net language. Eiffel.net was released on day 0, of .net, though it precedes .net." CreationDate="2017-09-07T16:57:50.023" UserId="204" />
  <row Id="8531" PostId="3455" Score="1" Text="C# is a disaster of a language, and surely not a good fit for introducing concepts like objects (it would be a great example of how to overcompilcate, drown in inconsistencies and incompatibilites etc.). MSVS is a disaster of a code editor, especially the MSBuild part. It completely obfuscates the programming process. It is a miracle that some students master any of the above. But when you say they started with C++, I can't help but to sigh and think &quot;this is how we have such bad programmers for the last 40 or so years&quot;." CreationDate="2017-10-01T13:49:24.653" UserId="1000" />
  <row Id="7717" PostId="3456" Score="3" Text="I just asked a similar question with different end goals last week and it was down voted till it was deleted.  Oh well, I am simply glad that another person is talking about Minecraft in the site. Welcome to the site man." CreationDate="2017-09-01T08:27:22.703" UserId="2605" />
  <row Id="7783" PostId="3456" Score="0" Text="My guess would be, if you tell your students &quot;we can do this in the classic way, or modding Minecraft -- if you can set up the environment until next Friday&quot;, you'll have all the stuff set up one day early." CreationDate="2017-09-03T18:10:01.333" UserId="842" />
  <row Id="7810" PostId="3456" Score="1" Text="One can program Minecraft also in Python: http://www.instructables.com/id/Python-coding-for-Minecraft/ and http://www.instructables.com/id/Interactive-Python-Programming-for-Minecraft-Pytho/" CreationDate="2017-09-04T13:00:50.070" UserId="2632" />
  <row Id="7733" PostId="3458" Score="0" Text="Thanks Jay! I have done Bootcamps in the past too, but in this institute its not possible unfortunately due to too much students and limited class rooms availability" CreationDate="2017-09-01T14:25:05.647" UserId="2537" />
  <row Id="7736" PostId="3458" Score="1" Text="Then, you are out of luck my friend. bad luck...the disruptor of carefully laid out plans." CreationDate="2017-09-01T14:46:47.490" UserId="2605" />
  <row Id="7735" PostId="3459" Score="0" Text="I have updated the question statement to address your queries and I liked your suggestion of checklist tasks." CreationDate="2017-09-01T14:41:20.973" UserId="2537" />
  <row Id="7749" PostId="3461" Score="1" Text="_Why did it take you so long? You should be finding this stuff out as early as possible, and correcting it before you start throwing tests at them_ I totally agree Kevin! The last paragraph is the one i was lacking in my self-assessment and _Insha'Allah_ will remember at the next semester's commencement (and onwards!)" CreationDate="2017-09-01T20:37:32.673" UserId="2537" />
  <row Id="7745" PostId="3462" Score="0" Text="Doesn't that depend quite a lot on the OS? Can you be more specific?" CreationDate="2017-09-01T20:25:51.683" UserId="1293" />
  <row Id="7746" PostId="3462" Score="0" Text="Pretty much any useful program effects the system in some way, whether reading/modifying a file, outputting something to the screen or otherwise.  Even something like `int main(){int i = 0; return 0;}` has to implicitly request resources from the system to store the variable." CreationDate="2017-09-01T20:30:28.803" UserId="753" />
  <row Id="7747" PostId="3462" Score="1" Text="Maybe an opportunity to talk about layers of abstraction in a system. The deeper you go, the more likely it is you need to talk to the kernel." CreationDate="2017-09-01T20:34:59.530" UserId="1293" />
  <row Id="7748" PostId="3462" Score="0" Text="Anyway. Welcome to CSEducators. We try to be helpful, even when we sound a bit gruff." CreationDate="2017-09-01T20:36:19.167" UserId="1293" />
  <row Id="7755" PostId="3462" Score="4" Text="The students would probably be familiar with `strlen` and `strcmp`, which are not and do not result in syscalls. Then you have `printf` and `malloc` which are not syscalls, but which may result in syscalls." CreationDate="2017-09-02T02:10:56.890" UserId="2880" />
  <row Id="7802" PostId="3462" Score="0" Text="A great example of the misdirection which results from the subjects covered in a syllabus. Almost all code written is userland - i.e. _not_ system calls, yet this question is still not 'trivially obvious'." CreationDate="2017-09-04T11:01:26.803" UserId="41" />
  <row Id="7756" PostId="3463" Score="0" Text="I agree +1, however memory mapped IO could result in an, implicit, system call, if there is a page fault. Where as direct IO uses explicit system calls.  Also `printf` may not make a system call: The C library can buffer the data. The library will call flush if the buffer becomes full. You can also call `flush`. You will notice this sometimes, “Why does `printf` not work / why is output of `printf` delayed?”. On a gnu system (such as Gnu/Linux), as well as `strace`, you are free to look at the source code (though `strace` may be easier/quicker." CreationDate="2017-09-02T09:27:17.890" UserId="204" />
  <row Id="7758" PostId="3463" Score="1" Text="@ctrl-alt-delor As I wrote: “Both of these statements have exceptions”. A page fault is not a system call. (This may be a matter of terminology, but I'll assert it, because I'm a professional OS developer and a “system call” and a “fault handler” are two separate ways to invoke kernel code, and this matches Linux and Windows terminology.) Looking at the source code doesn't tell you which system calls are executed, at most it lets you see the library calls, which as you point out are not directly related (the example of buffered IO is a nice one, thanks)." CreationDate="2017-09-02T10:10:32.673" UserId="124" />
  <row Id="7759" PostId="3463" Score="0" Text="@giles [I was not disagreeing with you, just exploring these exceptions] I said implicit system call, I mean here that it triggers a service routine in the kernel. Is it correct that all access to the kernel is through interrupt service routines (hardware interrupts: page fault, device ready; and software interrupts (syscall)?" CreationDate="2017-09-02T10:33:51.147" UserId="204" />
  <row Id="7760" PostId="3463" Score="1" Text="@ctrl-alt-delor It's a bit dangerous to take such a general statement as absolute truth because there's usually some bizarre hardware somewhere. But for a sufficiently broad definition of “interrupt service routine” that's true. Depends if you think something like returning from hypervisor mode counts as a software interrupt." CreationDate="2017-09-02T10:37:51.400" UserId="124" />
  <row Id="21568" PostId="3463" Score="0" Text="I am still learning the basics, when I see the architecture diagrams online, I always see the System calls in between user space and kernel space, so i find it hard to comprehend how any instruction can be without a sys call ? I mean even if I do a + b , does that not need to access CPU, RAM , Registers and then place the result back in a variable ?" CreationDate="2023-12-06T20:57:15.423" UserId="14110" />
  <row Id="21571" PostId="3463" Score="1" Text="@theMyth Performing CPU instructions and accessing registers can't involve system calls because system calls work by performing CPU instructions and accessing registers. In theory it would be possible to design a system where accessing memory requires a system call, but it would be very impractical. CPUs with memory separation allow unprivileged code to access a part of memory (based on MMU/MPU/segmentation — look those up). System calls are generally needed to access shared resources, but CPU time+registers are always granted to applications temporarily (time slice in a scheduler)." CreationDate="2023-12-07T09:37:56.267" UserId="124" />
  <row Id="7752" PostId="3466" Score="0" Text="Welcome to CSE Stack Exchange! You obviously know a lot about Haskell, but you may want to focus your answer more on procedural habits to break, rather than the most difficult concepts to teach in Haskell." CreationDate="2017-09-01T22:58:27.703" UserId="283" />
  <row Id="7753" PostId="3466" Score="1" Text="Thanks. The somewhat hidden message of my answer was exactly that breaking habits happens in the beginning of the course, I would say, first quater. But the problems with learning a functional language do not stop there. To name such a &quot;procedural/OOP&quot; habit: syntax, of course!" CreationDate="2017-09-01T23:28:23.963" UserId="2879" />
  <row Id="7771" PostId="3468" Score="0" Text="Welcome to [cseducators.se]! *&quot;The final test questions can of course be adjusted...&quot;* made my stomach turn a little bit.  Creating good questions for CS tests is *hard*.  I hope we hear more from you in the future." CreationDate="2017-09-03T01:08:19.270" UserId="27" />
  <row Id="7780" PostId="3468" Score="0" Text="@BenI. I agree that creating good CS questions is hard. In this case it was a very basic programming course though, and I think any book about programming will contain plenty of examples that could be useful. Thinks like for-loops, string copying, etc.  I understood the OP to be in a similar situation, not university level CS. I didn't discuss it with the teacher, but I'll have to assume it wasn't a big issue for him since he was willing to do it. I'd imagine they have a set of questions they rotate anyway from year to year, otherwise the problem of leaking questions would easily happen." CreationDate="2017-09-03T13:38:52.457" UserId="1090" />
  <row Id="7813" PostId="3469" Score="0" Text="For new learners it is better nowadays to call it [**Racket**](http://racket-lang.org/), solving an old [communication problem](http://racket-lang.org/new-name.html). Scheme is the ancestor and was generally associated to one perspective (R5RS). Racket supports this, R6RS and the latest developments from the PLT team." CreationDate="2017-09-04T14:14:28.560" UserId="2906" />
  <row Id="7817" PostId="3469" Score="0" Text="@Armfoot I don't know about other universities, but Berkeley uses it's own scheme, which is distinct from racket." CreationDate="2017-09-04T19:26:34.527" UserId="1721" />
  <row Id="7818" PostId="3469" Score="0" Text="@k_g interesting, I thought that Scheme implementations used in schools were derived from the PLT group. Did Berkeley implement their version from a particular standard/perspective (RnRS)?" CreationDate="2017-09-04T21:12:56.073" UserId="2906" />
  <row Id="7819" PostId="3469" Score="3" Text="Creating a level playing field and forcing people to think differently. Too many kids show up knowing one curly-brace language or another and thinking that's all they ever need know." CreationDate="2017-09-04T21:21:47.020" UserId="961" />
  <row Id="7820" PostId="3469" Score="0" Text="@armfoot, I'm not sure exactly what the origin is, we've been using our own scheme for at least a decade." CreationDate="2017-09-04T22:30:34.603" UserId="1721" />
  <row Id="7838" PostId="3469" Score="0" Text="Why would you learn Latin as a first language? Similar question, and I regret it to this day." CreationDate="2017-09-05T12:43:56.097" UserId="1675" />
  <row Id="7840" PostId="3469" Score="0" Text="@BobJarvis WHy would you *want* to level the playing field? Teach people at their respective levels. Let people who can code already skip that introduction. Teach them something that moves them forward." CreationDate="2017-09-05T12:46:08.463" UserId="1675" />
  <row Id="7841" PostId="3469" Score="1" Text="Interestingly, I think MIT switched a few years ago from Scheme to Python in the first programming class in course 6." CreationDate="2017-09-05T12:51:12.323" UserId="1471" />
  <row Id="7849" PostId="3469" Score="0" Text="I was in college for CS(Software Engineering) between 2006 and 2012, never once touched Scheme. I believe it was part of the higher level CS curriculum though. The first language taught there was Python. Another university nearby starts off with C/C++." CreationDate="2017-09-05T16:26:08.020" UserId="2918" />
  <row Id="19963" PostId="3469" Score="0" Text="You may want to read Hansen, M. R., &amp; Kristensen, J. T. (2008). Experiences with functional programming in an introductory curriculum. In Reflections on the Teaching of Programming (pp. 30-46). Springer, Berlin, Heidelberg. Their paper is not about Scheme, but FP in general, but they do enumerate a number of advantages of using FP as the introductory programming language." CreationDate="2022-05-16T20:32:51.197" UserId="11997" />
  <row Id="7766" PostId="3471" Score="1" Text="“Procedural approach”?" CreationDate="2017-09-02T18:51:57.440" UserId="204" />
  <row Id="7767" PostId="3471" Score="0" Text="@ctre-alt-delor Imperative approach: a program is seen as a &quot;sequence&quot; (maybe structured)  of actions. Procedural: relies on procedures (functions, subroutines, whatever) for the division of work." CreationDate="2017-09-02T20:26:21.817" UserId="2103" />
  <row Id="7769" PostId="3471" Score="2" Text="@MichelBillaud [*Procedural*](https://en.wikipedia.org/wiki/Procedural_programming) does not mean the same as *functional*. It usually refers to structured imperative programming." CreationDate="2017-09-02T21:31:54.453" UserId="660" />
  <row Id="7774" PostId="3471" Score="0" Text="@bergi Learning to decompose a task into smaller subtasks,&#xA;write code for subtasks, and combine it, is the key to successful programming. Once learnt, transposable to any prog. language.&#xA;Programming languages provide mechanisms to express subtasks: functions,  procedures,... It's better to learn use them as soon as possible, systematically. That's probably taught within the first 2 hours in the case of functional languages (except if you insist on writing bad Fortran in Scheme). Much later with C, C++, Java, etc. Functions unfortunately considered &quot;an advanced topic&quot;." CreationDate="2017-09-03T09:39:14.213" UserId="2103" />
  <row Id="7777" PostId="3471" Score="1" Text="Procedural is imperative, functional can be imperative, imperative can and should be structured, however functional ≠ procedural. Procedural is about doing and side-effects, functional is about return values. Both use subroutines." CreationDate="2017-09-03T12:17:53.220" UserId="204" />
  <row Id="7778" PostId="3471" Score="0" Text="@MichelBillaud Yes. We think it would improve your answer if you replaced &quot;procedural&quot; with &quot;functional&quot; in the first sentence." CreationDate="2017-09-03T12:20:02.190" UserId="660" />
  <row Id="7793" PostId="3471" Score="1" Text="@Bergi Notice that the answers says &quot;Procedural _apporoach_&quot;, __not__ &quot;Procedural _programming_&quot;. The approach to teaching in _functional_ languages is to reduce tasks until each subtask is a single function. That process is a _procedural approach_ to the task, while not being _procedural programming_. Let's not argue with terms and definitions when discussing _concepts_ to begin with." CreationDate="2017-09-04T02:38:45.940" UserId="104" />
  <row Id="7773" PostId="3472" Score="7" Text="Scheme is not a pure functional language." CreationDate="2017-09-03T06:31:46.637" UserId="2154" />
  <row Id="7776" PostId="3472" Score="0" Text="That depends on the Scheme." CreationDate="2017-09-03T12:09:21.413" UserId="2894" />
  <row Id="7779" PostId="3472" Score="0" Text="@Derek it was originally, but some variants add mutation. Thing is you don't need much to implement mutation, just the basic building block. Therefore functional programming is a state of mind. The best way to get this state of mind is to learn a pure functional language such as scheme. And then add mutation your self, when and only when you need it." CreationDate="2017-09-03T12:31:41.170" UserId="204" />
  <row Id="7768" PostId="3474" Score="1" Text="Woah. Maybe a _bit_ overstated. A couple of teaspoon fulls maybe. But yeah. It explains why those other languages require more pedagogy and support, most likely." CreationDate="2017-09-02T20:49:00.227" UserId="1293" />
  <row Id="7827" PostId="3474" Score="0" Text="Why would Python change the meaning of 5/2 or make print &quot;a&quot; an invalid syntax, I can't understand. But at least it's not like Swift which has many breaking changes in every subversion..." CreationDate="2017-09-05T07:14:21.277" UserId="2914" />
  <row Id="7835" PostId="3474" Score="2" Text="&quot;__Recent__ languages like Python&quot; in contrast to languages like C++, Java, is a bit confusing. Python was first published 1991, a quarter century ago. Java 1995. C++ was standardized 1998 (though dating back to 1979)." CreationDate="2017-09-05T11:56:14.770" UserId="2916" />
  <row Id="7791" PostId="3475" Score="1" Text="Perhaps I'm corrupted by already knowing programming languages that are so different from Scheme, but I've been poking at Scheme for quite some time now, and still don't feel like I understand it.  The closest thing I've found to &quot;learn Scheme in 10 minutes&quot; is this: http://web-artanis.com/scheme.html.  I've also read [Norvig's claims](http://www.paulgraham.com/avg.html) that he could do in 3 days what it took his Java competitors 30 days to do.  I'd love to have that kind of productivity spike, but I remain skeptical." CreationDate="2017-09-04T02:07:33.513" UserId="882" />
  <row Id="7792" PostId="3475" Score="1" Text="Scheme, therefore, remains one of those simple, elegant tools that can be compared to a surgeon's scalpel: powerful, but taking years to master.  Most people apparently don't have that kind of patience, as evidenced by the ubiquity of curly-brace languages and the ongoing obscurity of s-expressions." CreationDate="2017-09-04T02:14:10.027" UserId="882" />
  <row Id="7828" PostId="3475" Score="1" Text="@RobertHarvey but then when pushed, Peter Norvig moved to Python: https://news.ycombinator.com/item?id=1803815. Said 10x productivity boost has there become &quot;has the edge&quot;. And, presumably, not enough edge to bring Google to LISP." CreationDate="2017-09-05T08:04:58.837" UserId="2862" />
  <row Id="7846" PostId="3475" Score="1" Text="Scheme's grammar is easier to specify to yacc than that of Python (it's probably simpler to just write a Scheme parser freehand), but where's the need to hyper-optimize an operation that happens *once per compiler*? The popularity of curly-brace languages and the ubiquity of byzantine natural-language grammars suggests that learning silly arbitrary grammar rules is massively cheaper for our brains than specifying those rules in BNF. That's not to say there isn't value in kids learning Scheme, of course. Just not because it's &quot;easy to learn&quot;." CreationDate="2017-09-05T15:01:29.440" UserId="2838" />
  <row Id="12056" PostId="3475" Score="0" Text="Huh?  COBOL  is scheme with syntax? Since when?" CreationDate="2018-04-14T08:25:11.070" UserId="1537" />
  <row Id="12065" PostId="3475" Score="1" Text="@pojo-guy: I am willing to bet there are more deployed JavaScript runtimes in the world than there are COBOL runtimes. For example, in my (tiny) flat, there are over 20 JavaScript runtimes (7 on my laptop alone), and 0 COBOL runtimes. Almost every adult in the (so-called) developed world is carrying at least one in their pocket." CreationDate="2018-04-14T20:58:19.560" UserId="945" />
  <row Id="12066" PostId="3475" Score="0" Text="@JörgWMittag Ok, that explains it.  Without that additional information I had no clue what you were talking about. Scheme has never been on my radar before today. Around 80% of the world's actively used code is COBOL (220 billion lines and increasing)." CreationDate="2018-04-14T21:02:08.167" UserId="1537" />
  <row Id="7908" PostId="3477" Score="0" Text="Also you have macros.  This is similar to pointers in that the concept is _hard_ to wrap  your mind around.  &quot;Now it is data, now it is code, now it is data again&quot;.  Very few languages get this." CreationDate="2017-09-08T16:25:23.550" UserId="1213" />
  <row Id="7781" PostId="3478" Score="0" Text="I don't think you can compare Scheme and C in this way.  C _is_ used out there in real world projects. Operating systems and hardware related stuff is still a domain for C programmers. There is much less Scheme outside of education." CreationDate="2017-09-03T16:43:31.330" UserId="847" />
  <row Id="7784" PostId="3478" Score="0" Text="There are enough uses for Scheme et al in an educational context to avoid assuming this rather sarcastic viewpoint..." CreationDate="2017-09-03T18:19:50.860" UserId="652" />
  <row Id="7789" PostId="3478" Score="0" Text="@BlackJack I picked the closest reference I could pick to write my answer. May be C is used somewhere, but I was only explaining my exposure in the industry and the prevalence of C, not the entire software industry's and the prevalence of C." CreationDate="2017-09-04T02:01:31.107" UserId="2605" />
  <row Id="7790" PostId="3478" Score="0" Text="@AnoE I had no idea I was going for sarcasm above. I cannot rewrite the entire answer but I can issue an apology if it offended you." CreationDate="2017-09-04T02:01:39.163" UserId="2605" />
  <row Id="7797" PostId="3478" Score="0" Text="No apology necessary, I am not angry at you. I just like to give feedback for votes." CreationDate="2017-09-04T08:48:05.050" UserId="652" />
  <row Id="7807" PostId="3478" Score="1" Text="Your reasoning is flawed.  You are likely correct that teaching C is mainly due to inertia preventing a switch to something more modern.  C has little to recommend it for the purpose of teaching program except that *at one point in time* it was the most popular language around.  Neither of these is true for Scheme." CreationDate="2017-09-04T11:53:50.813" UserId="848" />
  <row Id="7808" PostId="3478" Score="2" Text="Then, Scheme has my compliments that it does not have any of the baggage that C has. Further, I hope that someday, the universities here in India will adopt Scheme so the youth in India can also benefit from it. You know, prosperity for everyone :)" CreationDate="2017-09-04T12:07:27.010" UserId="2605" />
  <row Id="12063" PostId="3478" Score="2" Text="Re, &quot;We don't have Scheme in our entire country.&quot; Nobody?... in all of India?... has _ever_ downloaded a copy? Well hey! That means you can be the first:  http://www.gnu.org/software/mit-scheme/" CreationDate="2018-04-14T17:16:44.223" UserId="1269" />
  <row Id="12071" PostId="3478" Score="0" Text="perhaps some day I will take it up." CreationDate="2018-04-16T08:13:52.023" UserId="2605" />
  <row Id="20612" PostId="3478" Score="0" Text="I suspect they keep teaching C simply because it has *all* the basic concepts, and none of the more complicated ones." CreationDate="2022-07-16T15:32:52.207" UserId="9075" />
  <row Id="13048" PostId="3479" Score="0" Text="https://quorumlanguage.com/ is a website hosting resources developed by this group." CreationDate="2018-06-28T18:36:19.283" UserId="765" />
  <row Id="7798" PostId="3480" Score="0" Text="Are you after creating dynamically generated pages, or dynamic pages? (The latter being pages with code embedded in them. So that the page can run code and change it self, without talking to the server.)" CreationDate="2017-09-04T09:49:43.173" UserId="204" />
  <row Id="7799" PostId="3480" Score="0" Text="@ctrl-alt-delor edited to clear that part." CreationDate="2017-09-04T10:06:07.037" UserId="150" />
  <row Id="7801" PostId="3480" Score="0" Text="Is javascript close enough? If so then I would suggest you look at couchdb." CreationDate="2017-09-04T10:12:34.260" UserId="204" />
  <row Id="7803" PostId="3480" Score="0" Text="Why do you want to move away from Java? The reasons might change the answers as well." CreationDate="2017-09-04T11:25:59.700" UserId="1062" />
  <row Id="7804" PostId="3480" Score="0" Text="@Sirko It's not Java I'm running from; it's JSP specifically." CreationDate="2017-09-04T11:27:14.357" UserId="150" />
  <row Id="7805" PostId="3480" Score="1" Text="Then maybe turn towards a more client focused architecture like Angular in the frontend and Spring for Rest services in the backend. Not sure, however, how suitable this is for high schools students." CreationDate="2017-09-04T11:41:32.073" UserId="1062" />
  <row Id="7806" PostId="3480" Score="0" Text="@Sirko might be worth a look into it..." CreationDate="2017-09-04T11:48:45.013" UserId="150" />
  <row Id="7809" PostId="3480" Score="0" Text="Actually a search, google:&quot;jsp alternative&quot; gives some options." CreationDate="2017-09-04T12:38:36.587" UserId="1293" />
  <row Id="7814" PostId="3480" Score="0" Text="Be sure to go for AngularJS first not Angular (Angular is a rewrite of AngularJS in Typescript), the eco system of Angular is quite different and your student will get lost into it. Binding one controller and a ng-repeat to list data loaded from the server should be like 10 line of HTML and 10 of Javascript. Of course if you want them writing a full application, you will have a bit more of work because you will have an MVC on the backend (spring with REST as the view) and on the frontend. Velocity even if not maintened anymore is a good template engine too for backend generation." CreationDate="2017-09-04T14:40:14.137" UserId="1375" />
  <row Id="7850" PostId="3480" Score="0" Text="Why not use servlets instead of (or in additin to) JSP?" CreationDate="2017-09-05T17:20:23.947" UserId="2068" />
  <row Id="8529" PostId="3480" Score="0" Text="Today it is considered a bad idea to generate HTML on the server before displaying it to client. The typical process involves generating only the data required to render the page, but have the page enough JavaScript to be able to render those data. So, teaching students to deal with JSP or the likes of it would only make sense if they were prepared to support legacy systems." CreationDate="2017-10-01T13:29:37.110" UserId="1000" />
  <row Id="13096" PostId="3480" Score="0" Text="JSP is still a fallback technology, but is quickly being displaced by cleaner frameworks such as Angular backed by spring webservices, as @Sirko mentions. I'm not convinced it's easier, but it results in cleaner separation of concerns and thus cleaner code." CreationDate="2018-07-23T18:33:53.353" UserId="1537" />
  <row Id="8530" PostId="3482" Score="0" Text="I strongly disagree with the choice of proprietary technology which only really runs on top of another proprietary technology for academic use. (Yes, I know there's open-source version of ASPX and Mono, but they don't really work...) But even if they did, it would be far too easy for students to be led astray and into the non-free world of perpetual hand-holding and hand-twisting performed by large corporations on unsuspecting users." CreationDate="2017-10-01T13:34:03.943" UserId="1000" />
  <row Id="7831" PostId="3485" Score="0" Text="With the exception of the last paragraph, the question would be better with the “etc”s removed. They read as “and the other things I am thinking”. The one in the last paragraph reads “and any thing else you can think of”, so this is ok." CreationDate="2017-09-05T09:31:14.770" UserId="204" />
  <row Id="7816" PostId="3486" Score="0" Text="Perhaps you can say a bit more about _Intellisense_. Not everyone will be familiar with it." CreationDate="2017-09-04T19:00:58.503" UserId="1293" />
  <row Id="7826" PostId="3486" Score="0" Text="affirmative and executed." CreationDate="2017-09-05T04:02:17.460" UserId="2605" />
  <row Id="7833" PostId="3491" Score="0" Text="How difficult is it to explain how to install? (I assume that they must have done command line by now (if not then it would not make too much difference).) They just have to type `sudo apt-get install eclipse monodevelop` (this installs two IDEs), and listen to the rest of the lecture and it will be done." CreationDate="2017-09-05T09:52:20.570" UserId="204" />
  <row Id="7836" PostId="3491" Score="0" Text="@ctrl-alt-delor -- unfortunately, I can't assume they have command line experience. I also need to give platform-independent instructions: I'm assuming most of my students will use either Windows or Mac. In any case, installation by itself isn't the hard part: it's just that all the factors in combination lead to the &quot;death by a thousand paper cuts&quot; kind of effect, if that makes sense." CreationDate="2017-09-05T12:26:43.010" UserId="732" />
  <row Id="7853" PostId="3491" Score="0" Text="I never had any issues showing how Visual Studio works for other people. Unless you have a very exotic environment, it mostly works out-of-the-box without having to think too much about it. The newer versions are even easier to use." CreationDate="2017-09-05T20:45:54.123" UserId="2305" />
  <row Id="7834" PostId="3492" Score="1" Text="Did you mean “Hello, world”? This answer needs some proof reading, elsewhere also." CreationDate="2017-09-05T10:45:42.370" UserId="204" />
  <row Id="7857" PostId="3492" Score="0" Text="I meant &quot;hello world&quot;" CreationDate="2017-09-06T03:11:26.413" UserId="2605" />
  <row Id="7861" PostId="3492" Score="1" Text="“Let's eat Jay” or “Let's eat, Jay”?" CreationDate="2017-09-06T08:57:05.593" UserId="204" />
  <row Id="7863" PostId="3492" Score="0" Text=":P oh man, that cracked me up. nope, still sticking with &quot;hello world&quot;" CreationDate="2017-09-06T09:04:09.723" UserId="2605" />
  <row Id="7870" PostId="3492" Score="0" Text="Actually, since the statement about Eclipse is pure opinion, I'll give mine. I rather like Eclipse. It does what I need in several languages. In particular, it shows me what I need to see and supports the external tools that I need to use." CreationDate="2017-09-06T14:17:36.037" UserId="1293" />
  <row Id="7873" PostId="3492" Score="0" Text="As always, I am on team - 'To each his own'." CreationDate="2017-09-06T14:38:41.707" UserId="2605" />
  <row Id="7839" PostId="3501" Score="1" Text="Hmm, you bring up several good points. I'll have to re-think that assumption I made -- thanks!" CreationDate="2017-09-05T12:45:53.040" UserId="732" />
  <row Id="7885" PostId="3501" Score="0" Text="@Michael0x2a I don't think your assumption was wrong - a separate demonstration/tutorial of IDE can take precious time out of 16/18 weeks semester." CreationDate="2017-09-07T13:57:15.600" UserId="2537" />
  <row Id="7837" PostId="3502" Score="1" Text="To answer your &quot;education vs training&quot; question -- I'm teaching how to use an IDE partly because I want students to start working on larger projects (specifically in Java) and it feels a bit cruel to have them do that without an IDE. I also think it's entirely possible to simultaneously teach students theory/the fundamentals/&quot;how to learn&quot; while also preparing them for industry with minimal compromise -- having to pick one seems like defeatism. (This is partly why I'm asking this, actually: I have a lot of material to cover, so the more efficiently and smoothly I can cover IDEs, the better)." CreationDate="2017-09-05T12:42:16.310" UserId="732" />
  <row Id="7852" PostId="3502" Score="0" Text="@Michael0x2a I agree that you can have both. It is only when there is a conflict that you have to choose. So my answer is only asking you to think, it is by no means saying not to (OK maybe it starts that way, but then it gives you stuff to think about)." CreationDate="2017-09-05T18:33:56.647" UserId="204" />
  <row Id="7856" PostId="3502" Score="0" Text="&quot;Your role at a university is education not training&quot; - thats the blzarrest sentence I have read in a while. I am sure students who are paying thousands of dollars for a university education, are here for 'education' alone, and have no expectation of training. It's like a knight who has not seen the battle field or a stage dancer who hasn't danced in front of an audience. What use is such a Knight or a Dancer in the real world?" CreationDate="2017-09-06T03:10:57.537" UserId="2605" />
  <row Id="7860" PostId="3502" Score="0" Text="@Jay It is like http://agilemanifesto.org/ That is, while there is value in the items on the right, we value the items on the left more. “Education over Training.” You can (and should) do both, but if and only if there is an unresolvable conflict, then you should ensure that education wins." CreationDate="2017-09-06T08:54:31.730" UserId="204" />
  <row Id="7862" PostId="3502" Score="0" Text="I hope we can agree to disagree here :) I find myself at a unique place where I train other developers and would be developers, and I myself work as a developer, putting what I teach in practice. However, I acknowledge that there is no practicals without theory. There is room for both in this world." CreationDate="2017-09-06T09:00:47.607" UserId="2605" />
  <row Id="7865" PostId="3502" Score="0" Text="@Jay Now that you have explained that you are a trainer. I am forced to agree with you. Sometimes it is training over education. Education for the long term. Training for short term." CreationDate="2017-09-06T10:57:31.727" UserId="204" />
  <row Id="7842" PostId="3504" Score="1" Text="Not sure if this is a full-fledged answer or not, but you could look into using [Moss](https://theory.stanford.edu/~aiken/moss/). Basically, you upload your student's code to their online service, and it gives you back a link to a temp webpage with stats. It seems to support a wide variety of languages, and works reasonably well (though I have very very limited experience using it). I think [this paper](http://theory.stanford.edu/~aiken/publications/papers/sigmod03.pdf) describes the high-level algorithm it uses?" CreationDate="2017-09-05T12:59:57.573" UserId="732" />
  <row Id="7843" PostId="3504" Score="2" Text="Two simple ideas (that don't answer your question, of course) are (a) require full bracing of all statement blocks (as many employers do) and -otherwise (b) omit bracing from your hash. It is also relatively easy to alphabetize functions before applying the hash, or while doing it." CreationDate="2017-09-05T13:00:38.923" UserId="1293" />
  <row Id="7844" PostId="3504" Score="0" Text="@Buffy I think removing braces from the hash would lead to many false positives, but requiring them or adding them programmatically would be a good idea. As for sorting functions, this still fails when students also rename functions. But perhaps defining an ordering on function types could work." CreationDate="2017-09-05T14:24:18.837" UserDisplayName="user24" />
  <row Id="7845" PostId="3504" Score="0" Text="@Michael0x2a that could definitely constitute an answer. I didn't know about the system, very nice, thanks!" CreationDate="2017-09-05T14:26:40.240" UserDisplayName="user24" />
  <row Id="7848" PostId="3504" Score="0" Text="@Keelan Removing braces/delimiters should be equivalent to adding them in programatically, I think. I'd be tempted to investigate mapping the code to a template, so you see 'assign', 'iterate', 'select' syntax elements (with multiple code patterns leading to each one). Do you want more positives, or fewer? I admire your confidence in the approach shown by publshing it..." CreationDate="2017-09-05T16:18:17.910" UserId="41" />
  <row Id="7851" PostId="3504" Score="1" Text="@SeanHoulihane I don't think it's equivalent, because it changes the hash. Those braces tell you something about the control flow, and that is harder to change than variable names. // I want more positives. This system works fine and gives almost no false negatives (except for some very small assignments where there are not many ways to do things), but the problem is that it is easy to fool. // That confidence stems mostly from the impression that those students who are going at length to understand the algorithm and trying to fool it are usually not those *wanting* to fool it :-)" CreationDate="2017-09-05T17:40:16.623" UserDisplayName="user24" />
  <row Id="7858" PostId="3504" Score="1" Text="I put this in a comment rather than an answer because i'm not going to chase it beyond &quot;yes&quot;. There is one built into the Polarion tool. I was sprprised to see that it (1) found the lifted code, and (b) recognized it was attributed correctly." CreationDate="2017-09-06T04:07:25.767" UserId="1537" />
  <row Id="8528" PostId="3504" Score="0" Text="Simple way to deal with present / absent optional formatting elements: use code beautifiers (for example, for Python you could use `yapf`), `indent` for C (though, I haven't tried). Some languages have built-in pretty-printing function for normalizing code representation." CreationDate="2017-10-01T13:01:33.687" UserId="1000" />
  <row Id="14824" PostId="3504" Score="0" Text="I think there shouldn't be plagiarism checks on source code. If the problem's solved it's all that matters. Just find a way to solve it with yours on someone else's code." CreationDate="2019-04-25T17:32:16.497" UserId="6827" />
  <row Id="8285" PostId="3526" Score="2" Text="+1. The (main) reason I still use emacs for development: I haven't come across enough problems that require a 'modern' IDE to fix." CreationDate="2017-09-22T14:51:04.140" UserId="2040" />
  <row Id="7854" PostId="3535" Score="1" Text="Just to add an anecdote, I've encountered students like this (albeit pretty rarely) at the university level. Thankfully, the problem doesn't seem to be quite as bad as @BenI is describing for me -- rather then complete incomprehension, these students (usually Mac users?) just don't seem to know where precisely their files are stored, what a &quot;home directory&quot; is, how exactly to use the built-in file explorer GUI, etc (but do appear to understand the concept of a &quot;folder&quot;, thankfully)." CreationDate="2017-09-05T21:44:45.823" UserId="732" />
  <row Id="7855" PostId="3535" Score="0" Text="Org chart, or geopolitical arrangement: World, Nation, State, City." CreationDate="2017-09-06T00:12:35.410" UserId="104" />
  <row Id="7864" PostId="3535" Score="1" Text="Provide them with a solid two panel file manager, like MultiCommander, TotalCommander, etc. This makes it easy to grasp the concept. Later they can start with the command line operations. Also, store learning materials in a well structured directory system, which they'll have to use." CreationDate="2017-09-06T10:39:31.653" UserId="51" />
  <row Id="7866" PostId="3535" Score="0" Text="I haven't come across this situation. they already seem to know where the files are, what are these namespaces, workspaces, solutions and projects and where they go into. of course, all of my students are age 20 plus which probably means the faculties who came before me are doing their job :)" CreationDate="2017-09-06T11:42:50.890" UserId="2605" />
  <row Id="7869" PostId="3535" Score="0" Text="The view of the students (and most users) is that they have Applications on their computer, and these Applications deal with WorkSpaces (maybe with Projects) and maybe some Transit areas (Download zone), and things contained in &quot;Documents&quot;. Actually they are (mostly) implemented as Files/Directories, but it could be some sort of &quot;Database&quot;." CreationDate="2017-09-06T13:54:23.803" UserId="2103" />
  <row Id="10010" PostId="3535" Score="0" Text="Hierarchical file systems are a direct evolution on flat systems,  such as that of the IBM 360 architecture . Early in the lifespan of the 360 file sysyem, programmers used a file naming convention that mimics a hierarchical system. Eg: pds.apps.jisadj3.pmb300 is a filename that tells people in a particular environment a lot about the file, it looks like a directory path, and tools have evolved over the decades that treat it as such, but the os does not." CreationDate="2018-02-04T14:30:59.000" UserId="1537" />
  <row Id="10250" PostId="3535" Score="2" Text="I love this question. I just hired someone who can't type. I stopped testing candidates for typing aptitude years ago... It seems that the &quot;Introduction to Computers&quot; of 20 years ago will become popular again. &quot;Introduction to Computers for the Critically Abstracted&quot;." CreationDate="2018-03-06T19:04:17.673" UserId="4082" />
  <row Id="7867" PostId="3544" Score="0" Text="Note that the comments about navigating in GNU/Linux also apply to the Macintosh which is based on BSD unix. Use the terminal for executing shell commands as on other u* systems." CreationDate="2017-09-06T12:27:14.330" UserId="1293" />
  <row Id="7868" PostId="3544" Score="0" Text="@Buffy I agree MacOS X is a Unix, though I have little experience with it. Can you run `dolphin` on it? Or something similar with synchronised GUI and CLI?" CreationDate="2017-09-06T12:57:13.610" UserId="204" />
  <row Id="7945" PostId="3544" Score="1" Text="The UNIX alike file systems however **ARE** tag based if you squint just right. I have a file, it has an Inode number and a reference count, I also have some directory entries scattered around this tree structure that point to the file. One file, many names. There is a reason the old school refers to the try structure as directories not folders. Also, how did you manage to get those cats to stay in the boxes long enough for a photo? Glue? Velco?" CreationDate="2017-09-10T18:48:00.207" UserId="2963" />
  <row Id="10006" PostId="3544" Score="2" Text="I love this answer, but it seems to go after Microsoft rather unfairly. Of the big four major commercial Operating Systems (Windows, OS X, Android, iOS), Windows hides the directory structure the least.  Apple is probably the big villain here.  They made an active decision starting with the iPod and iTunes that directories needed to be hidden, and the world has been moving that way ever since." CreationDate="2018-02-04T02:53:28.627" UserId="27" />
  <row Id="10009" PostId="3544" Score="0" Text="@BenI. Have made some improvement, but as I don't use mac or ios, and my android has a file explorer (I don't think they come by default). I can't give example from these. Could you help to redress the bias?" CreationDate="2018-02-04T09:37:05.827" UserId="204" />
  <row Id="10011" PostId="3544" Score="0" Text="Personally, I'm happy with your adjustment.  I'd upvote you for it, but the system only allows me one upvote per answer." CreationDate="2018-02-04T17:40:11.753" UserId="27" />
  <row Id="18292" PostId="3545" Score="0" Text="I'm wondering if the legacy storage concepts are the only common reference point for the various systems. Otherwise it's a little like teaching about dogs and cats without teaching about mammals, animals, life, physics... To me, it would be missing the entire point of teaching at all. If someone can't find the root of the lesson, they know nothing." CreationDate="2021-10-02T22:55:10.273" UserId="5349" />
  <row Id="14654" PostId="3552" Score="0" Text="On a mac, the terminal does away with the &quot;hiding&quot; shenanigans.  Learn to use your lappy like a pro. Use the terminal." CreationDate="2019-04-06T01:06:16.730" UserId="21" />
  <row Id="18289" PostId="3552" Score="0" Text="I was always uncomfortable with that word 'terminal'. Sounds dangerous. Of course, throughout the medical field 'negative' is a good thing. Photography used to be like that, alas. Now I have trouble even seeing the &quot;dark chamber&quot; it is so small." CreationDate="2021-10-01T10:19:45.900" UserId="5349" />
  <row Id="19401" PostId="3552" Score="0" Text="The ‘tree’ command (not always installed by default) can be helpful for visualizing directory structures on the command line. For GUIs, tools like DaisyDisk or WinDirStat have interesting visualizations." CreationDate="2022-02-19T05:44:34.403" UserId="11736" />
  <row Id="7879" PostId="3554" Score="0" Text="Hey, thanks, this is good material. However, you didn´t answer my question :D Could you extract what you think is most important in the sources you mentioned so the question can be answered? That would be great." CreationDate="2017-09-06T16:54:39.553" UserId="2480" />
  <row Id="7880" PostId="3554" Score="1" Text="Thanks for posting about my favorite CS book, and welcome to CSE Stack Exchange! Answers are supposed to be self-contained, so could you please summarize why SICP rocks?" CreationDate="2017-09-06T19:14:39.667" UserId="283" />
  <row Id="7893" PostId="3554" Score="1" Text="I'm sorry, I thought I added one reason for using Scheme - that one of the best introductory computer science textbooks is based on Scheme. Other major reasons for using Scheme as an introductory language have already been presented in answers provided prior to my note, e.g., its syntax simplicity and its emphasis on data and procedural abstraction. I believe that one should use a language best suited to introducing computer science/programming in an introductory class. Students can learn other languages in common use in follow-on classes." CreationDate="2017-09-07T17:25:58.013" UserId="2925" />
  <row Id="7881" PostId="3557" Score="0" Text="Thanks, but I don't have room in my course to add an assignment of the magnitude you propose. (Another reader might.)" CreationDate="2017-09-06T21:29:04.880" UserId="283" />
  <row Id="7882" PostId="3558" Score="1" Text="(a) The SIGCSE list might point you to some research. (b) The outcome in a single instance might depend on the instruction given. If the instructor was someone learning Scheme him/herself then the outcome might not be predicted to be very positive, and might turn out as you describe. Now if Hal Abelson was the instructor..." CreationDate="2017-09-06T21:58:33.413" UserId="1293" />
  <row Id="7883" PostId="3558" Score="0" Text="Hal Abelson *was* the instructor. (Well, not when I took it, but when I TA'd it.)" CreationDate="2017-09-06T22:29:03.757" UserId="283" />
  <row Id="7884" PostId="3558" Score="1" Text="I'd expect better results with Hal. Why don't you ask him this question?" CreationDate="2017-09-06T22:35:48.940" UserId="1293" />
  <row Id="7889" PostId="3558" Score="0" Text="@Buffy I owe Hal code. I suppose I could ask him, but I don't know that he ever did an evaluation." CreationDate="2017-09-07T15:50:40.443" UserId="283" />
  <row Id="7896" PostId="3560" Score="4" Text="Choose a different programming language next time. It's an intrinsic characteristic of programming in C that you spend a lot of time debugging run-time errors; and the only thing you learn from this is how to debug C programs." CreationDate="2017-09-07T22:42:10.720" UserId="2936" />
  <row Id="7912" PostId="3560" Score="6" Text="@MichaelKay I really don't think a language other than C or C++ would work for an operating systems programming course (C seems best for this particular kind of class)... And often you don't have a choice of which language to use for a particular class (others make that choice for you)" CreationDate="2017-09-08T17:46:24.420" UserId="2950" />
  <row Id="7913" PostId="3560" Score="0" Text="Does that mean you are still teaching 1960s operating systems?" CreationDate="2017-09-08T22:44:12.317" UserId="2936" />
  <row Id="7920" PostId="3560" Score="0" Text="@MichaelKay Did somebody hack your account? What is this nonsense comment? C didn't exist in the 1960s and what language do you think modern operating systems are written in? (Hint: letter after B)." CreationDate="2017-09-10T00:14:00.673" UserId="2149" />
  <row Id="7922" PostId="3560" Score="2" Text="I'm just really expressing frustration that operating systems practice has advanced so little since 1970. I spent the 70s/80s working with an operating system (ICL's VME) written in an Algol-68 derivative; programming in C is a big step backwards, and it's disappointing to see that teaching of operating systems is still bogged down in unnecessary low-level stuff like that." CreationDate="2017-09-10T08:26:03.723" UserId="2936" />
  <row Id="7923" PostId="3560" Score="0" Text="Interesting point @MichaelKay. At this institution, soft.eng students used C extensively throughout their degree. I wonder if a course on Redox OS (written in Rust) would be worth creating." CreationDate="2017-09-10T09:00:19.157" UserDisplayName="user2923" />
  <row Id="7938" PostId="3560" Score="0" Text="I think it all depends on what you're trying to teach. Operating systems are difficult because there's such a gulf between what's state of the art in computer science and what's actually used in the field." CreationDate="2017-09-10T15:29:07.300" UserId="2936" />
  <row Id="8527" PostId="3560" Score="0" Text="Go, while not a great language, will spare your students a lot of nonsense associated with C. It is perfectly valid for writing system code (I red a paper, but cannot find it anymore, where IP Linux kernel module was reimplemented in Go, and it generally displayed better performance than its C counterpart). There's also Rust (a better alternative IMO). But OCaml would also be able to achieve this in practice. Finally, there's an entire OS written in CL: https://github.com/froggey/Mezzano" CreationDate="2017-10-01T11:52:05.103" UserId="1000" />
  <row Id="7895" PostId="3561" Score="13" Text="One extra benefit of having &quot;better&quot; students help another is that sometimes the &quot;better&quot; students are tempted to skip through exercises quickly because they &quot;already know it&quot;. They complete the tasks, but don't learn the lesson fully. By helping someone else work through it, they accidentally work through the exercise fully and may learn more." CreationDate="2017-09-07T21:05:19.887" UserId="1400" />
  <row Id="7911" PostId="3561" Score="0" Text="I had a few undergraduate courses in which we were asked to pick a partner with whom we would pair-program throughout the semester. I found pair-programming to be an extremely effective and helpful for both my own learning and getting projects done. Note that this was actually pair-programming - sitting at a single computer at the same time - not splitting up tasks. (I had many more classes that I programmed by myself, but I came to love pair-programming.)" CreationDate="2017-09-08T17:43:36.597" UserId="2950" />
  <row Id="12166" PostId="3562" Score="0" Text="May want to grab a copy of and de-profanitize ESR's &quot;How to ask questions the smart way&quot;.  http://www.catb.org/esr/faqs/smart-questions.html" CreationDate="2018-04-29T14:27:03.297" UserId="662" />
  <row Id="12168" PostId="3562" Score="0" Text="@ivanivan What, now?" CreationDate="2018-04-29T16:09:58.793" UserId="27" />
  <row Id="12169" PostId="3562" Score="2" Text="ESR has this nice document on how to ask good questions in online help, how to get help for technical issues in general, etc. Well worth reading.  He does use some offensive language, so I have a copy I tell my students to read with some slight wording changes (ie, RTFM becomes Read The Fine Manual)." CreationDate="2018-04-29T16:13:23.947" UserId="662" />
  <row Id="7892" PostId="3563" Score="0" Text="I agree with variable names, but what I was after was a way to survey the test cases that the function has passed. This is the fastest way that I am aware of to spot errors in student code" CreationDate="2017-09-07T17:21:59.703" UserId="27" />
  <row Id="7894" PostId="3563" Score="0" Text="@BenI that is similar to contracts (pre/post conditions, and invariants). As most languages don't support these (well), then comments can be used for this. And test cases (as I just re-read in your answer) is like but better that “What you expected, and what went wrong”." CreationDate="2017-09-07T17:26:53.557" UserId="204" />
  <row Id="11898" PostId="3563" Score="0" Text="I like to promote the idea of test before code. xUnit  testing frameworks are free,  and they encourage strong formalization of requirements" CreationDate="2018-04-03T11:34:47.867" UserId="1537" />
  <row Id="12463" PostId="3564" Score="0" Text="(a side note) FWIW Scheme's typical wall-of-words code can IMO be made more readable by generously adding more white space inside, and by aligning various entities visually. that's *not* the accepted style of course; so what, if it helps. (see e.g. [this](https://stackoverflow.com/a/48694546/849891) to see what I mean; or even [this](https://stackoverflow.com/a/49631993/849891) which is a bit over the top). and, using *short* variable names!" CreationDate="2018-05-13T18:45:26.140" UserId="3806" />
  <row Id="12464" PostId="3564" Score="0" Text="@WillNess, a student of McCarthy's and one of the developers of CLOS told me that he can understand lisp code from a distance just by looking at the visual structure. That assumes the standard formatting, of course. I have no reason to doubt him as he is reliable in all known ways." CreationDate="2018-05-13T18:54:55.760" UserId="1293" />
  <row Id="7904" PostId="3565" Score="2" Text="Note: those advices also apply to professionals." CreationDate="2017-09-08T13:55:24.007" UserId="1848" />
  <row Id="7907" PostId="3565" Score="0" Text="And when are they supposed to learn it?" CreationDate="2017-09-08T16:21:56.020" UserId="1213" />
  <row Id="7909" PostId="3565" Score="3" Text="@ThorbjørnRavnAndersen Like I said in my answer, they should be learning this as early as possible. It should be introduced in their first programming course. If it's not, then spending a class at the beginning going over these expectations would help." CreationDate="2017-09-08T16:28:53.340" UserId="2068" />
  <row Id="7906" PostId="3567" Score="2" Text="&quot;teach all of them basic debugging skills&quot; this should be more heavily emphasized in classrooms then it is typically since much programming in the real world is actually debugging code not writing it." CreationDate="2017-09-08T15:23:34.540" UserId="2947" />
  <row Id="7914" PostId="3567" Score="0" Text="Relevant article that I'm going to keep posting whenever relevant until all programmers everywhere are able debuggers ;) is [The Fundamental Philosophy of Debugging](http://www.codesimplicity.com/post/the-fundamental-philosophy-of-debugging/)." CreationDate="2017-09-09T03:29:15.937" UserId="1103" />
  <row Id="12167" PostId="3567" Score="0" Text="A dupe of my comment above, but relevant for asking questions the right way - ESR's &quot;How to ask questions the smart way&quot; - http://www.catb.org/esr/faqs/smart-questions.html" CreationDate="2018-04-29T14:28:29.190" UserId="662" />
  <row Id="7915" PostId="3569" Score="0" Text="Some of these are just, what we called in the UK, ICT. That is “It uses a computer, doesn't it.”. However some of them are very good examples: use of python, R, ones that don't use a computer," CreationDate="2017-09-09T11:00:40.600" UserId="204" />
  <row Id="7916" PostId="3569" Score="0" Text="@ctrl-alt-delor Which ones are &quot;just using a computer&quot;? I respectfully disagree. I purposely chose topics that had a ton of creativity behind them, and that could be further explored by particularly interested students." CreationDate="2017-09-09T15:41:10.240" UserId="2068" />
  <row Id="7917" PostId="3569" Score="0" Text="I agree, non of them are negative. I was just thinking that some were not very computer science or IT. But using computers to aid in teaching the other subject. This is not a bad thing though, just not what I was looking for (for those examples). +1" CreationDate="2017-09-09T18:35:37.370" UserId="204" />
  <row Id="7918" PostId="3569" Score="0" Text="@ctrl-alt-delor I don't think it's &quot;using computer to teach other subjects&quot; at all. I think it's finding the intersection of computer science and other subjects, which is where a lot of interesting (and lucrative) research is happening right now. Getting students who are already interested in other subjects thinking about how computer science helps them with their interests is a good thing for everybody involved, imho." CreationDate="2017-09-09T18:38:51.757" UserId="2068" />
  <row Id="7919" PostId="3569" Score="1" Text="I agree. You are opening my eyes." CreationDate="2017-09-09T18:42:55.273" UserId="204" />
  <row Id="7930" PostId="3571" Score="0" Text="This is a good way to think about the topic once a student is sufficiently advanced in their studies, but I'm not sure what course of study would introduce automata theory and CFGs before introducing precedence. In our program, CFGs are introduced in the third year." CreationDate="2017-09-10T12:51:35.360" UserId="27" />
  <row Id="7931" PostId="3571" Score="0" Text="@Ben I. ♦: &quot;what course of study would introduce automata theory and CFGs before introducing precedence&quot; This material usually does not require knowledge of automata theory. It is where educators put it. Not my decision." CreationDate="2017-09-10T13:24:33.057" UserId="160" />
  <row Id="7932" PostId="3571" Score="0" Text="I believe that if a student can program, they can understand what I have written. It does not look advanced to me at all. I remember the online course &quot;Paradigms of Computer Programming - Fundamentals&quot; https://www.edx.org/course/paradigms-computer-programming-louvainx-louv1-1x-0 where syntax of Oz is defined by a context-free grammar. It is not the first course on programming, but it is basic, as is shown in its title." CreationDate="2017-09-10T13:32:12.097" UserId="160" />
  <row Id="7953" PostId="3572" Score="1" Text="&quot;Typical&quot; in which country?" CreationDate="2017-09-10T20:45:42.263" UserId="963" />
  <row Id="7955" PostId="3572" Score="0" Text="I just addressed location, I hope." CreationDate="2017-09-10T22:51:36.270" UserId="1293" />
  <row Id="7959" PostId="3572" Score="0" Text="Its too vague is what it is." CreationDate="2017-09-11T02:56:39.690" UserId="2605" />
  <row Id="7971" PostId="3572" Score="0" Text="Not sure I really like the question as-is, but it may be relevant that post-degree employment in the UK seems spectacularly poor in CS (ref some research data from maybe 6 months ago). Supports the 'feeling unprepared'." CreationDate="2017-09-11T10:08:55.643" UserId="41" />
  <row Id="7996" PostId="3572" Score="0" Text="Some answers point out that programs might miss out on testing or source control. But even if the program includes these topics, some people (including some answerers here) will find the graduate unprepared. It's mostly because they don't understand that the education gives overview and general understanding but can't and won't teach every pecularity and nuance in the languages, development processes etc." CreationDate="2017-09-11T15:49:13.683" UserId="1834" />
  <row Id="7999" PostId="3572" Score="3" Text="They general concepts are taught in every decent CS programme. The day-to-day things like certain tools and languages are usually not taught, at least not in entirity because those things become outdated every few years and can be picked up within days (if you have good background in the general concepts) when needed in a certain workplace." CreationDate="2017-09-11T15:52:55.837" UserId="1834" />
  <row Id="8060" PostId="3572" Score="0" Text="@SeanHoulihane - indeed, I've often wondered about those statistics.  It seems very odd that a career-oriented degree in a field that is very much in-demand should have such a high graduate unemployment rate, particularly when you consider that in the US graduates in the same field have among the *lowest* unemployment rates.  There's something odd going on there, and I'm at a loss to explain it." CreationDate="2017-09-11T23:16:03.390" UserId="848" />
  <row Id="8064" PostId="3572" Score="0" Text="@Džuris It's not that they don't understand what education supposedly gives, they are looking for people who genuinely love and are interested in programming. Asking them about nuances in languages is one way to find them." CreationDate="2017-09-12T02:01:24.553" UserId="2149" />
  <row Id="8065" PostId="3572" Score="0" Text="@Jules It's the same thing in Israel. Graduates from top universities are recruited immediately because of their high potential, all the others struggle finding their first job. Seems very reasonable to me, nobody wants to invest a year until they will see anything resembling productivity from them. If anything it's odd that it's different in US maybe it's because of internship practices?" CreationDate="2017-09-12T02:06:27.223" UserId="2149" />
  <row Id="8074" PostId="3572" Score="1" Text="I can't speak to other countries, but here in the US it's assumed that a new CS grad isn't going to produce much for as much as the first year, and will require a lot of supervision to do so. I guess businesses just consider it a good way to get an employee relatively cheap - assuming they stay long enough for the investment to pay off." CreationDate="2017-09-12T15:46:33.393" UserId="1884" />
  <row Id="8079" PostId="3572" Score="0" Text="The biggest thing I didn't learn was how to *not* write it yourself. The biggest, most embarrassing thing I ever did my first week at work after graduating was writing a search algorithm from scratch, because I was treating the assignment like homework. We have a whole framework for that sort of thing, that does it way better than I would do myself, way quicker!" CreationDate="2017-09-12T15:58:36.110" UserId="1263" />
  <row Id="8082" PostId="3572" Score="1" Text="I've voted to close this question because there are too many possible causes for a CS graduate feeling unprepared to enter the job market. I'd suggest that you ask a separate question about how to resolve a specific concern that graduates have (e.g. lacking in workplace skills, missing knowledge, etc)." CreationDate="2017-09-12T17:13:13.627" UserId="58" />
  <row Id="7958" PostId="3573" Score="0" Text="I have an answer but I got no experience with children. got to stay out on this one :P" CreationDate="2017-09-11T02:55:00.493" UserId="2605" />
  <row Id="7961" PostId="3573" Score="0" Text="@Jay as long as you are clear on your context I would love to hear it." CreationDate="2017-09-11T07:27:14.987" UserId="204" />
  <row Id="7962" PostId="3573" Score="0" Text="With the avalanche of down votes I got last week, I have decided to post only when I am absolutely sure of. I haven't dealt with kids (all my students are 20 and above, going up to 50), so my answer will probably be down voted or flagged or something else simply for being different anyway." CreationDate="2017-09-11T07:38:59.770" UserId="2605" />
  <row Id="7939" PostId="3574" Score="2" Text="Good answer, a couple of nitpicks. 1. It actually starts on the &quot;Experience&quot; paragraph, this is a matter of style and not actually a problem. 2. Why mention mercurial? And before git?? It might be as good but git has won that war a long time ago. It's the de facto standard and they should concentrate on learning it (knowing subversion is also useful but not much to learn there)." CreationDate="2017-09-10T16:16:37.523" UserId="2149" />
  <row Id="7942" PostId="3574" Score="2" Text="Point 1 is not important no need to grok it. With a good GUI like SourceTree for example it's really not that hard, you can mostly just use its basic features as you would use subversion. I don't see git being replaced in the near future and if you want a swarm there is [GitTorrent](https://github.com/cjb/GitTorrent). None of this is relevant, people who want to work in the industry need to know git you said so yourself in your answer what I don't understand is why you also think they need to learn mercurial and by placing it before git it makes it look like you think it's more important." CreationDate="2017-09-10T17:36:29.417" UserId="2149" />
  <row Id="7943" PostId="3574" Score="14" Text="@ctrl-alt-delor If a CS graduate can't learn how to use the basic functions git *from the command line* in a day, they should give up programming and go into management IMHO. (Don't complicate things by using a GUI that tries to make git look and feel the same as a different product, and just gives you all the bad features of both of them!) Also, I'm at a loss to see why you should have 200 students pulling anything of significant size *during a lecture* in any case. Lectures should be for *learning* new stuff, not practicing using it!" CreationDate="2017-09-10T17:48:26.537" UserId="1352" />
  <row Id="7944" PostId="3574" Score="0" Text="The &quot;low self worth&quot; issue is usually curable, unless it's so severe the person is incapable of attempting to do anything at all. Unfortunately, &quot;arrogance&quot; usually isn't a treatable condition IMO - just filter it out in the recruitment procedure!" CreationDate="2017-09-10T17:52:07.873" UserId="1352" />
  <row Id="7947" PostId="3574" Score="0" Text="@alephzero I strongly agree regarding using git from the command line.  Regardless of if someone actually interacts with git regularly through the CLI knowing how your tools work under the hood is crucial to being an engineer." CreationDate="2017-09-10T19:21:05.993" UserId="1630" />
  <row Id="7965" PostId="3574" Score="1" Text="As someone who has used CVS, Subversion and Git I'd say **Git is only hard to learn if you already learned either of the other two.** Things with the same name mean different things, and Git contains concepts not found in the others because it embraces the inherent distributed nature of DVCS." CreationDate="2017-09-11T08:11:14.437" UserId="2972" />
  <row Id="7967" PostId="3574" Score="0" Text="To comment on git see https://cseducators.stackexchange.com/questions/2897/how-to-make-git-easy-to-learn" CreationDate="2017-09-11T08:14:15.423" UserId="204" />
  <row Id="7968" PostId="3574" Score="2" Text="@Oleg In the spirit of the question, one thing I've learned since graduating is that any tool you can name will have *somewhere* where it's used. Mercurial is the VCS of choice for several sizeable institutions I know of, including at least one university. A good software developer keeps abreast of *all* tools, researches and develops their own opinions on which is the best for when they're able to choose which to use, but is prepared to work with anything for when they're not." CreationDate="2017-09-11T08:14:47.517" UserId="1129" />
  <row Id="7973" PostId="3574" Score="0" Text="@anaximander I strongly disagree, the question is about what graduates need to learn, with the current state of the industry knowing git is necessary mercurial much less so. The rest of your comment about &quot;all tools&quot; is preposterous ***nobody*** knows all the tools from [here](https://en.wikipedia.org/wiki/Comparison_of_version_control_software) and this is not a comprehensive list. By your definition &quot;good software developers&quot; don't exist and you will need an infinite(probably with higher cardinality than the people making those tools) amount of time to become one." CreationDate="2017-09-11T10:47:13.040" UserId="2149" />
  <row Id="7974" PostId="3574" Score="2" Text="@Oleg A good developer prioritises what to learn, I agree with you there, and I agree that as it stands, git is a better call. I'm not saying you must know everything; it's just useful to have a general idea of what's out there. If I mention Mercurial to a candidate at interview, I'd want them to have heard of it, maybe have a rough idea of how it compares to other options, and if I said that they'll have to *use* Mercurial, I wouldn't mind them having an opinion on that, but I'd hope that they'd be open to the idea of using it, and learning what they need to learn to be comfortable with it." CreationDate="2017-09-11T11:03:32.320" UserId="1129" />
  <row Id="7966" PostId="3576" Score="3" Text="Testing is so hard to learn to do properly that I'd strongly recommend finding a mentor for this. Unfortunately many people who think they know how to test create slow, over-complicated test suites which are more for show than actually useful." CreationDate="2017-09-11T08:13:41.603" UserId="2972" />
  <row Id="7972" PostId="3576" Score="1" Text="We don't need grads who are good at testing. We need grads who know the value of testing, and when to ask for focused help. Also knowing that testing is about catching the failures, not demonstrating that 'correct' paths can be found." CreationDate="2017-09-11T10:16:03.920" UserId="41" />
  <row Id="7993" PostId="3576" Score="1" Text="Hmmm...when I was at uni almost all my programming assignments were automatically run against specific test cases created by the instructor. The test cases were unknown by the students so it forced the students to &quot;test&quot; their code as failing the instructor test cases pretty much guaranteed a failing grade on the assignment. I remember sometimes the instructors wouldn't even accept the assignment if it didn't pass all the test cases. That was a couple of decades ago and I know times have changed where telling someone they failed hurts their feelings, so do universities no longer do this?" CreationDate="2017-09-11T15:34:48.883" UserId="2817" />
  <row Id="8104" PostId="3576" Score="0" Text="@Dunk In my experience some universities do this, but a good number don't. I think you can count yourself lucky (I know I do in this regard)." CreationDate="2017-09-12T22:28:20.990" UserId="2045" />
  <row Id="8014" PostId="3577" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/65432/discussion-on-answer-by-dan-mills-what-does-a-person-with-an-undergraduate-degre)." CreationDate="2017-09-11T17:33:26.387" UserId="27" />
  <row Id="8022" PostId="3577" Score="3" Text="Most of these points are not things that a College graduate would/should be expected to know. All of them are nice to knows. Regression testing? I mean, I'd love for applicants to have that experience, but realistically it may not happen, and that's okay. Almost all of these things can and will be taught on the job. Big O notation is the outlier, but it is most often taught in CS 201 - &quot;Whatever name your algorithms class has.&quot;" CreationDate="2017-09-11T18:10:32.563" UserId="1028" />
  <row Id="8061" PostId="3577" Score="2" Text="&quot;An appreciation that it is Worst Case that really matters, not average case (This one may be specific to my hard realtime industry).&quot; -- I'd say it has good relevance to GUI design, too.  A user interface that occasionally stutters and takes too long to complete an operation is a usability problem (and one that is, alas, all too common)." CreationDate="2017-09-11T23:22:13.800" UserId="848" />
  <row Id="7957" PostId="3579" Score="0" Text="This is an excellent answer that stems from a clear wealth of experience. Welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-09-11T00:42:02.133" UserId="27" />
  <row Id="7991" PostId="3579" Score="0" Text="The second paragraph is both factually true, and completely missing the point. Almost nobody in the industry actively works with 40 other people daily. Teams that large are split into subteams. Plus, being able to work with **any kind** of team at all would be a huge improvement over the typical CS practice of training students to think that working alone is virtuous and working with others is for cheaters." CreationDate="2017-09-11T15:26:56.233" UserId="1139" />
  <row Id="7963" PostId="3580" Score="0" Text="Welcome to the site. Nice question. I have added an answer; just my opinion. Hope you get a more research based answer though, as I am interested in the result." CreationDate="2017-09-11T07:46:25.030" UserId="204" />
  <row Id="8021" PostId="3580" Score="0" Text="Seems this could equally be asked on a language stack - with regard to either vocabulary, or grammar. More likely to be research in natural language teaching, I expect." CreationDate="2017-09-11T18:09:56.007" UserId="41" />
  <row Id="7977" PostId="3582" Score="0" Text="Give them some code with corrective/evolutive maintenance tasks. Good code and bad code, so they'll see the difference. (Ask professional developpers for samples of bad code :-))" CreationDate="2017-09-11T12:07:44.807" UserId="2103" />
  <row Id="7979" PostId="3582" Score="0" Text="The obvious answer would be giving them a project or letting assignments use code from previous assignments. Ideally, the next assignment would require some non-trivial abstraction in the previous one. Is there a reason why you don't want these assignment dependencies or a project?" CreationDate="2017-09-11T12:16:58.703" UserDisplayName="user24" />
  <row Id="7981" PostId="3582" Score="0" Text="It would be better to identify the problem you're trying to solve. Commercial code needs to be nearly good enough, and not late enough to notice - quite reliably." CreationDate="2017-09-11T12:26:30.707" UserId="41" />
  <row Id="7982" PostId="3582" Score="0" Text="@SeanHoulihane did you say, “nearly good enough”. This is by definition not true. It needs to be at least “just about good enough”. However if you increase, internal, quality then you can do it cheaper and quicker. (increasing external quality will increase costs, unless done as a side effect of increasing internal quality.)" CreationDate="2017-09-11T13:39:01.100" UserId="204" />
  <row Id="8002" PostId="3584" Score="0" Text="But to be a successful programmer is not nearly as difficult as being a pro sports player, so I think this is overly pessimistic for people who want to get into programming later in life." CreationDate="2017-09-11T16:13:13.367" UserId="1979" />
  <row Id="8011" PostId="3584" Score="0" Text="&quot;you're never going make it, or at least the chances are very very slim&quot;. There are obvious reasons why it's important to start early with physical activities, but I don't see why these would apply to intellectual activities. There are also many, many, many counter examples for CS (Don Knuth not programming in his teens doesn't seem to have hampered him that much). You just don't need 15 years of muscle memory to be a great engineer - yes the experience helps, but the experience you gain as a kid writing MUDs is going to be of limited use later on anyhow." CreationDate="2017-09-11T17:20:50.010" UserId="819" />
  <row Id="8018" PostId="3584" Score="0" Text="`I've seen a lot of CS kids where it's just too late already` whaat? nearly my entire team is people who didn't program until after their undergraduate degrees. Are we all exceptions to this rule? I think not." CreationDate="2017-09-11T17:55:53.960" UserId="177" />
  <row Id="8023" PostId="3584" Score="0" Text="I just graduated with a degree in CS in 4 years from a US college. Before starting college, I'd never programmed. By the end of my first CS course I was in the upper half of my class. I disagree that not programming in my teens was a huge disadvantage. I'd say the ability to teach yourself, to google, and experiment, and just not give up until you can do the task at hand, is more important then previous experience." CreationDate="2017-09-11T18:15:21.247" UserId="2991" />
  <row Id="8024" PostId="3584" Score="0" Text="@all - Fair enough, and all good points.  Most, if not all, good programmers I've known all started early on their own initiative and not because they were assigned classwork that required them to learn programming - maybe that's not always the case, as it would seem, but usually if you're interested in programming you're not waiting around for someone to give you an assignment before you start writing code; you dive in and learn because you want to." CreationDate="2017-09-11T18:19:14.467" UserId="2976" />
  <row Id="8051" PostId="3584" Score="0" Text="Your post applies to what somebody needs to do to become a *good* programmer. With the current supply and demand for programmers lots and lots of bad ones manage to find jobs and stay employed." CreationDate="2017-09-11T21:28:10.817" UserId="2149" />
  <row Id="7983" PostId="3585" Score="0" Text="Writing software is design; copying a file to a hard-disk or CD is software manufacture. See also lean manufacture: not being repeatable, that is not doing it exactly the same way every time is wast. In writing software it is the other way around, because we don't manufacture software, we design it. The same is true of all design: If you do the same design again it is waist. Just reuse the old one." CreationDate="2017-09-11T13:41:40.690" UserId="204" />
  <row Id="7995" PostId="3586" Score="0" Text="Copy and Paste into an archive directory as the CM tool is more than sufficient for BS degree course work. How exactly would having a source control tool have saved you from many struggles? IME, most companies that new employees go to are using different CM tools than what they already know. Thus, they simply use the cheat-sheet created by the CM person and are on their way in minutes. There isn't enough time to learn everything the students are supposed to be learning as it is in most CS programs. Why throw something as trivial as using source control instead of some more overarching concept?" CreationDate="2017-09-11T15:47:19.023" UserId="2817" />
  <row Id="7998" PostId="3586" Score="2" Text="I used source control extensively in college- if you have any projects shared with multiple people, its invaluable. Its also really good to be able to have GIT,TFS and SVN on your resume." CreationDate="2017-09-11T15:52:21.547" UserId="2987" />
  <row Id="8118" PostId="3590" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/65527/discussion-on-question-by-walrus-why-dont-more-universities-teach-revision-cont)." CreationDate="2017-09-13T11:15:25.213" UserId="58" />
  <row Id="8137" PostId="3590" Score="7" Text="Do you mean *version* control?" CreationDate="2017-09-13T23:56:31.933" UserId="3048" />
  <row Id="8143" PostId="3590" Score="1" Text="@ErikE: One of those terms not worth being nitpicky about ;) https://stackoverflow.com/questions/1056912/source-control-vs-revision-control" CreationDate="2017-09-14T08:53:40.230" UserId="2916" />
  <row Id="8146" PostId="3590" Score="2" Text="For the same reason that mechanical engineers never have to pick up a screwdriver." CreationDate="2017-09-14T10:13:06.317" UserId="2976" />
  <row Id="8149" PostId="3590" Score="3" Text="Why Excel isn't thought in CS?" CreationDate="2017-09-14T11:46:37.490" UserId="3052" />
  <row Id="8151" PostId="3590" Score="3" Text="Extreme example: using a computer and/or typing with more than two fingers is also desirable for employment and useful during the degree. &#xA;Why is it not taught in a CS curriculum (or a Philosophy curriculum, as I expect philosophy students to type long essays as well)?" CreationDate="2017-09-14T12:19:18.143" UserId="757" />
  <row Id="8157" PostId="3590" Score="1" Text="@CalculatorScience Because there are more intuitive functional languages available." CreationDate="2017-09-14T13:44:54.240" UserId="654" />
  <row Id="8158" PostId="3590" Score="1" Text="@TobiaTesan Probably because it's assumed those skills will have been developed earlier in general education. I had classes in middle school about how to type properly (though I'd already developed touch typing skills by that point from personal use). I don't think most grade schools teach how to use version control (yet)." CreationDate="2017-09-14T13:46:18.577" UserId="654" />
  <row Id="8159" PostId="3590" Score="0" Text="@TobiaTesan that strikes me as a bit of a straw man, really." CreationDate="2017-09-14T13:51:58.040" UserId="2981" />
  <row Id="8160" PostId="3590" Score="1" Text="@JAB I have never heard of typing classes in high school where I come from, but you can replace that with any practical skill of your choice that happens to be relevant in day-to-day university and work life and is not taught in general education. My point is that at the end of the day, there is a plethora of practical skills and mechanical tools you end up learning how to use on your own. Besides it being impractical to set aside more than an epsilon of class time for Word 101, Google 101, Emacs 101, etc...  I am not sure that teaching the use of standard tools is University's main job." CreationDate="2017-09-14T14:14:50.450" UserId="757" />
  <row Id="8162" PostId="3590" Score="1" Text="@walrus I did say &quot;extreme&quot;, and it was an exaggeration on purpose - but why does it strike you as a straw man? I believe therein lies a possible answer to your question." CreationDate="2017-09-14T14:23:40.627" UserId="757" />
  <row Id="8165" PostId="3590" Score="0" Text="@TobiaTesan, it struck me as a straw man because it is both extreme and *not equivalent* - as JAB says it's a skill that you can reasonably assume students to have learned before university." CreationDate="2017-09-14T15:06:51.313" UserId="2981" />
  <row Id="8211" PostId="3590" Score="1" Text="Very well, you can indeed assume students who graduate from high school know how to use a graphing calculator or Excel. But in high school they don't have classes on how to use a graphing calculator or Excel and certainly middle school children don't know their way around the things, so how do they learn? It's just another example of a handy tool that people can and eventually *will* learn to use on their own by R'ing the good ol' FM, if you get what I mean. Excel is to high school what a VCS or an IDE is to college.  At least that's my humble point of view: it's not the University's job." CreationDate="2017-09-16T08:07:19.653" UserId="757" />
  <row Id="19055" PostId="3590" Score="0" Text="@ErikE OP mentioned `git` so revision control, not version control." CreationDate="2022-01-17T22:58:24.620" UserId="204" />
  <row Id="19071" PostId="3590" Score="0" Text="@ctrl-alt-delor That seems a really subtle distinction that isn't necessary. Version control is an umbrella term that covers more than just `git`. In any case, it's unimportant, and if people want to be picky and call it &quot;revision control&quot; then they are welcome to." CreationDate="2022-01-18T21:18:32.507" UserId="3048" />
  <row Id="19076" PostId="3590" Score="0" Text="In all honesty this was a dull thing to argue about five years ago and it's not got any more interesting; if you really want to see why the question refers to revision control not version control have a look at the chat." CreationDate="2022-01-21T09:58:24.180" UserId="2981" />
  <row Id="19081" PostId="3590" Score="0" Text="@ErikE I only made the distinction between version control and revision control. Because you asked &quot;Do you mean version control?&quot; (2nd comment in this thread). The distinction is considerable, but as so many people both names to mean revision control, it is unreliable to make a distinction. You are correct revision control is often used as part of version control, but it can be used without it (I don't recommend it, but only because I don't recommend not using revision control)" CreationDate="2022-01-23T21:26:53.853" UserId="204" />
  <row Id="19101" PostId="3590" Score="0" Text="@ctrl-alt-delor Thanks for explaining, but I really don't want to argue." CreationDate="2022-01-24T22:44:55.687" UserId="3048" />
  <row Id="7997" PostId="3592" Score="2" Text="Exactly how are you going to know the answer to all your &quot;wish-list&quot; ideas from an interview? Also, IME, most computer science/engineering grads are introverts and it takes a few years experience before they even start to get better at those &quot;social&quot; skills you are looking for. But once they add those &quot;social&quot; skills to those technical skills they become quite good. Thus, I mainly look for someone that demonstrates they can learn, demonstrated that they are motivated to be a developer and someone that seems like they'll fit the personality of the team they'll be working with." CreationDate="2017-09-11T15:49:45.160" UserId="2817" />
  <row Id="8000" PostId="3592" Score="1" Text="@Dunk it's actually pretty easy. Ask them to talk through how they solve a problem, how they resolve conflict with a team member (probably a group project), and a few questions about &quot;what would you have done differently on a project?&quot; and you get insight into most of those questions." CreationDate="2017-09-11T16:02:35.813" UserId="177" />
  <row Id="8007" PostId="3592" Score="2" Text="pretty easy for someone with job experience. However, I can picture the terrified looks in the eyes of new-grads if I asked them the same kinds of questions as their mind becomes completely blank with the cache-swapping going on because I switch contexts and asked them non-computer questions." CreationDate="2017-09-11T16:42:15.230" UserId="2817" />
  <row Id="8009" PostId="3592" Score="0" Text="@Dunk why do you think I answered a question `What is missing from a typical undergraduate program, or not sufficiently emphasized, that a person needs to know for successful employment in a software development position` with this list of questions then? What you just said _is entirely the point_." CreationDate="2017-09-11T17:11:11.290" UserId="177" />
  <row Id="8048" PostId="3592" Score="1" Text="Everything you described in your post applies to a good programmer. I don't understand the distinction you made between a programmer and an engineer." CreationDate="2017-09-11T21:19:16.403" UserId="2149" />
  <row Id="8049" PostId="3592" Score="2" Text="@enderland - Your answer is fine, just IMO I don't see a whole lot a college can do to teach much on your list. At most they could have more group projects but I'm not alone in saying that those were the worst assignments ever and I don't think they are as good of learning experience as some people think. Finally, I'd be thrilled to death to find some new grad who could write beautiful code and come up with good algorithmic solutions on their own. I'd hire them in a second, with the exception being that it is obvious they are going to be a &quot;people&quot; problem. I'll teach the engineering skills." CreationDate="2017-09-11T21:24:09.973" UserId="2817" />
  <row Id="20703" PostId="3592" Score="1" Text="All these good qualities are hard to evaluate during an interview." CreationDate="2022-08-22T01:49:20.793" UserId="9884" />
  <row Id="8017" PostId="3593" Score="1" Text="This answer seems to mainly address point b) from the question. Do you have any thoughts on why some universities ignore the benefits to them apart from inertia and lack of time (the latter of which I struggle to believe is a real issue in a 3 or 4 year degree)." CreationDate="2017-09-11T17:41:30.130" UserId="2981" />
  <row Id="8019" PostId="3593" Score="0" Text="@walrus -- I think it's less that you're ignoring the benefits. Rather, it's more that there are just so many things that could be teaching and it's hard to pick. An undergraduate degree has time to cover only a tiny fraction of computer science -- that's a part of why we have masters degrees and PhD programs, after all (and even those can only cover a small fraction of what's out there).." CreationDate="2017-09-11T18:02:24.123" UserId="732" />
  <row Id="8020" PostId="3593" Score="3" Text="Also, it's worth noting that the university and the instructors themselves don't necessarily get any huge benefit out of using version control (it's sometimes the opposite, in fact: somebody needs to set up and maintain all the infrastructure and tooling). Rather, it's mainly the students who get the benefit." CreationDate="2017-09-11T18:02:57.567" UserId="732" />
  <row Id="8055" PostId="3593" Score="0" Text="that's one way of looking at it. I suppose I'm surprised that you'd struggle to fit a course with only a couple of hours' content in, especially considering some of the things that (both my and other) courses do find time to include.&#xA;&#xA;Regarding the university getting the benefit; I can see that it could definitely be more trouble than it's worth, but I can also see that it could make certain things a lot easier to administer for the university." CreationDate="2017-09-11T22:02:03.843" UserId="2981" />
  <row Id="8058" PostId="3593" Score="3" Text="@walrus -- oh, don't get me wrong. I think adding an extra, lightweight course containing all of these additional &quot;things you should probably know&quot; is a pretty decent way of solving this particular problem -- that's exactly what my university does, in fact. But the path of least resistance for a typical instructor is to modify their (existing) course, and my point is that can sometimes be a bit challenging." CreationDate="2017-09-11T22:09:27.693" UserId="732" />
  <row Id="8062" PostId="3593" Score="5" Text="&quot;Version control isn't that challenging to learn.&quot; I disagree with this. When I finally did need to learn version control, it took me several weeks to really get the hang of it, and I continued to learn more about it for years. And there are many, *many* wrong ways of using VCS that are easy to fall into if you aren't taught well or don't have a deep enough understanding of what you're doing. Proper VCS usage could easily cover multiple lectures, if not an entire unit in a class." CreationDate="2017-09-12T00:16:19.367" UserId="1360" />
  <row Id="8063" PostId="3593" Score="1" Text="@Kevin: I suppose it might depend on which VCS you're learning -- there are certainly some quirky ones out there. But I genuinely do think that a CS graduate shouldn't find it too hard to pick up something like Git by working through something like [LearnGitBranching](http://learngitbranching.js.org/): after all, Git basically boils down to a tool for manipulating DAGs, and graph manipulation should be the sort of thing that's extensively covered both explicitly and implicitly in a decent CS curriculum. The other best practices stuff is only a google search or two away with the right query." CreationDate="2017-09-12T01:32:01.340" UserId="732" />
  <row Id="8069" PostId="3593" Score="5" Text="I second @Kevin's comment. See e.g. [this](https://cseducators.stackexchange.com/q/2897/735) or [this](https://softwareengineering.stackexchange.com/q/351607/78464) question. At the very least, I **certainly** think it's wrong to say that you could learn Git *trivially* easily. This is supported by the fact that Git's primary documentation includes a [574 page book](https://git-scm.com/book/en/v2), and that book doesn't even explain *how* Git works, a topic which the same author wrote [a separate 120 page book](https://github.com/pluralsight/git-internals-pdf) on." CreationDate="2017-09-12T14:06:04.173" UserId="735" />
  <row Id="8080" PostId="3593" Score="0" Text="@Kevin I partly disagree with you.  I think that it's very easy how to learn how to use Git in a single-user environment, where you are working out of master, never branch, and never merge.  (Which describes how you would probably use version control for most school assignments)  I agree though, that Git gets very complex very fast, as soon as you involve branching and merging.  That when you run into this: http://justinhileman.info/article/git-pretty/" CreationDate="2017-09-12T16:24:05.967" UserId="3024" />
  <row Id="8086" PostId="3593" Score="0" Text="@JBentley sorry, I still disagree. I do think Git is often taught poorly, but don't think it's *inherently* hard to learn. All you need to know is that Git is a tool for manipulating DAGs -- you can infer what's possible and how to do it on-the-fly based on just this and a little googling without needing to read a ~600 page manual. For example, if you didn't know about something like `rebase -i`, you'd still be able to easily infer the existence of this command: you can rearrange nodes in a DAG, so Git certainly must support such an operation. You can then google/read the book to get details." CreationDate="2017-09-12T17:45:21.130" UserId="732" />
  <row Id="8087" PostId="3593" Score="0" Text="That said, I do agree that if you try and learn Git without knowing about graphs or using a tutorial that doesn't emphasize the DAG that learning to use Git would be challenging: without understanding the underlying model, Git would be very cryptic. Unfortunately, many tutorials seem to de-emphasize the DAG (possibly to target beginners?) and focus on teaching specific commands instead, which is probably why people find Git challenging to pick up. That fact that Git commands are often named unintuitively only compounds the problem for people who learned this way." CreationDate="2017-09-12T17:46:10.717" UserId="732" />
  <row Id="8093" PostId="3593" Score="5" Text="@Michael0x2a I've had to teach Git in a commercial setting a few times.  What I have found is that if you can start from &quot;learn the *correct* model of how git models everything under the hood,&quot; and then learn how to use it, Git is easy.  However, if you cannot justify learning the entire model before doing anything, it's very easy to develop wrong models in one's head.  I still grapple with issues regarding the index because I learned it wrong the first time.  Honestly, I find most people want to being seeing productivity as they learn, not after they learned it." CreationDate="2017-09-12T19:17:57.713" UserId="812" />
  <row Id="8105" PostId="3593" Score="2" Text="I think another thing here that has not been touched on is that command line Git is not the only version control method out there. I would bet that if one can grasp fundamental data structures, one can figure out a version control system at their leisure." CreationDate="2017-09-12T22:35:54.270" UserId="3032" />
  <row Id="8135" PostId="3593" Score="0" Text="The challenge of finding good tutorials on a subject is the most compelling justification for universities even existing." CreationDate="2017-09-13T21:35:25.030" UserId="676" />
  <row Id="14524" PostId="3593" Score="0" Text="I think the notion that you can (or should be able to) teach yourself a VCS has some validity - &lt;ironic&gt;it's mostly how I learned all of the ones that I've used&lt;/ironic&gt;. But that only makes me think that it should most definitely included in the curriculum - teaching yourself is a valuable, and transferable, CS skill and VCS is a skill that would be widely useful in a CS program. Maybe do a brief explanation of the rationale and point students at a variety of good tutorials and offer a few lab sessions? Then adjust your curriculum so students appreciate having the skill..." CreationDate="2019-03-18T01:09:34.690" UserId="134" />
  <row Id="8004" PostId="3595" Score="20" Text="`The main thing you need version control for is for group coding projects.` citation needed? I've seen _many_ instances where people do all sorts of things where VCS would be beneficial. Not the least of which is the CS rite of passage, doing an accidental `rm -rf` on something important." CreationDate="2017-09-11T16:22:15.123" UserId="177" />
  <row Id="8005" PostId="3595" Score="0" Text="Interesting; in my course (graduated this year) we did five big, term-long group projects and probably a couple of dozen smaller group coursework pieces, plus more pieces of coursework that could be done individually or in small groups. About the only work that was strictly individual was the exams." CreationDate="2017-09-11T16:26:27.483" UserId="2981" />
  <row Id="8006" PostId="3595" Score="0" Text="@walrus - Yay! Very encouraged to hear that." CreationDate="2017-09-11T16:31:47.323" UserId="1139" />
  <row Id="8035" PostId="3595" Score="14" Text="This answer is ludicrous.  You don't need multiple people to make mistakes you'd like to revert, or want to keep track of change history, or try out experiments on a separate branch." CreationDate="2017-09-11T19:28:42.510" UserId="2168" />
  <row Id="8046" PostId="3595" Score="1" Text="@BlueRaja-DannyPflughoeft - You don't need a full-blown revision control tool to do any of that either though, and its a conspicuously heavy solution if those are the only tasks you use it for. I was doing all that stuff just fine with VMS and its [automatic edit backup version system](http://www.mcm.edu/tutorial/vaxguide.htm) before I ever heard about their revision control tool. What I **couldn't** do without it was manage simultaneous work from multiple people." CreationDate="2017-09-11T21:11:15.387" UserId="1139" />
  <row Id="8047" PostId="3595" Score="2" Text="Perhaps I should add &quot;teaching what a revision-control tool is really for&quot; to my list of CS complaints here, since clearly a lot of people still don't understand this." CreationDate="2017-09-11T21:16:59.020" UserId="1139" />
  <row Id="8050" PostId="3595" Score="0" Text="@enderland - I believe my first crack at this ever with the VMS tool kept the repository in my main working directory. Early revision control tools liked to work that way, and if you didn't like it you had to fake it out with link directories. The VMS equivalent of the &quot;rm -rf&quot; command would have likely deleted my repository just as easily. Remember that revision control tools are designed for controlling revisions from multiple people. If you can use it as a glorified emergency backup tool, that's nice, but it isn't its prime designed purpose." CreationDate="2017-09-11T21:26:59.593" UserId="1139" />
  <row Id="8052" PostId="3595" Score="0" Text="@enderland ...today if I use git, that mistaken &quot;rm&quot; command will **still** delete everything I've done since my last merge push up to the master. If the &quot;master&quot; is in fact in my .git subdirectory because nobody else is collaborating with me, then the mistaken &quot;rm&quot; will delete all my code, and all history, so your &quot;CS rite of passage&quot; is probably quite safe." CreationDate="2017-09-11T21:45:12.340" UserId="1139" />
  <row Id="8056" PostId="3595" Score="0" Text="@T.E.D. part of the rite of passage is understanding the importance of _pushing_ your code somewhere, too ;-)  This helps you in industry if you accidentally `rm -rf ~` when you have too little coffee without fully thinking when trying to delete an errantly created folder named ~ (speaking for someone else, of course)." CreationDate="2017-09-11T22:05:13.047" UserId="177" />
  <row Id="8059" PostId="3595" Score="1" Text="@enderland - Point is, revision control tools don't fix this (and weren't meant to)." CreationDate="2017-09-11T22:19:13.647" UserId="1139" />
  <row Id="8016" PostId="3597" Score="2" Text="Very much this. Deep perspective comes from deep experience, and that is simply not a goal that coursework should be expected to encompass. I do not run a trade school, and I have other, more pressing concerns than poorly mimicking the experiences of someone who has been a developer for 10+ years." CreationDate="2017-09-11T17:39:27.497" UserId="27" />
  <row Id="8031" PostId="3598" Score="0" Text="I like the idea of an online portfolio i can read, especially for web developers. I would definitely consider a well made one to be a plus when hiring." CreationDate="2017-09-11T18:43:24.403" UserId="2774" />
  <row Id="8026" PostId="3599" Score="0" Text="Are people still using `rcs`?" CreationDate="2017-09-11T18:26:59.563" UserId="204" />
  <row Id="8027" PostId="3599" Score="1" Text="No, don't think so - but good version control feels like a fairly new thing, and there is a great temptation to teach things as you learnt them, as your tutor learn them - etc." CreationDate="2017-09-11T18:36:50.680" UserId="41" />
  <row Id="8028" PostId="3599" Score="4" Text="I think this is probably the main factor. The lifecycle (and inertia) for intro CS courses is quite a bit longer than the cycle for programming developments. Having a robust, readily available version control system which can be instituted on a personal level and doesn't require major support infrastructure (e.g. a server) is relatively recent, especially when measured against how frequently departments revamp their CS courses. As more people get familiar with Git and the like, I imagine it will be incorporated more widely in the &quot;best practices&quot; suggestions/requirements given to students." CreationDate="2017-09-11T18:38:35.820" UserId="2992" />
  <row Id="8083" PostId="3599" Score="0" Text="@ctrl-alt-delor Yes, with a [modern wrapper](http://www.catb.org/esr/src/)." CreationDate="2017-09-12T17:18:01.703" UserId="3026" />
  <row Id="8029" PostId="3600" Score="1" Text="I love “rewrite the assignment in their own words”, I used to do that when I was a software engineer, but it did not occur to be to get my students to do it." CreationDate="2017-09-11T18:40:03.467" UserId="204" />
  <row Id="8030" PostId="3600" Score="1" Text="@ctrl-alt-delor Back when I was a student, the fact that I **read the assignment** before starting writing code basically gave me a super power. *&quot;How did you know how to do that??&quot;* *&quot;Well, it's written in the assignment right here...&quot;*" CreationDate="2017-09-11T18:43:01.663" UserId="2068" />
  <row Id="8057" PostId="3601" Score="11" Text="True story: I did quite a lot of theatre at uni and did an entire play script in LaTeX, which I of course version controlled using git &amp; github. The director (not at all technically minded) was confused, to say the least." CreationDate="2017-09-11T22:07:52.553" UserId="2981" />
  <row Id="8094" PostId="3601" Score="2" Text="There are tools that can diff MS-Word files, which can be plugged into your version control system" CreationDate="2017-09-12T19:51:27.340" UserId="3028" />
  <row Id="8095" PostId="3601" Score="0" Text="@JoelFan I would be interested in knowing what they are. Can they also merge?" CreationDate="2017-09-12T19:53:47.263" UserId="204" />
  <row Id="8097" PostId="3601" Score="1" Text="@ctrl-alt-delor, http://blog.martinfenner.org/2014/08/25/using-microsoft-word-with-git/" CreationDate="2017-09-12T20:03:02.733" UserId="3028" />
  <row Id="8098" PostId="3601" Score="1" Text="@JoelFan that `pandoc` tool looks awesome. I have many uses for it. Looks better than what I was using for a few task, plus I have other jobs for it. Turns out that I already had it, so I just installed it." CreationDate="2017-09-12T20:21:04.580" UserId="204" />
  <row Id="8101" PostId="3601" Score="1" Text="I think it's a mistake to say revision control is  &quot;computer engineering&quot; topic. Revision control should be thought of as an essential tool for any area of study/work that deals with preparing files using a computer. And even if you won't be doing it using a computer, the same principles should be learned for preparing creative works by hand - organizing and filing different revisions you went through (rough drafts, sketchbook sketches, recordings while preparing a song or a speech, etc.) - because it's how you study and improve your own processes." CreationDate="2017-09-12T21:15:10.917" UserId="1327" />
  <row Id="8102" PostId="3601" Score="4" Text="As such, in a modern academic environment where most work is prepared to hand in digitally, revision control software of some sort should be the first thing you're taught when you go to college, or even in high school, not just for CS students but for everyone." CreationDate="2017-09-12T21:16:45.810" UserId="1327" />
  <row Id="14523" PostId="3601" Score="0" Text="Maybe revision control isn't a CS thing, but collaboration is, code review is, and so is testing. I'd argue that revision control is essential to all of those activities and the ability to engage productively in those activities is often looked for in interviews." CreationDate="2019-03-18T00:58:46.090" UserId="134" />
  <row Id="8077" PostId="3607" Score="3" Text="I think the point is not so much that they're difficult to use as that many people struggle to get by without them without realizing that their struggles would be alleviated by simply using version control." CreationDate="2017-09-12T15:51:01.027" UserId="3021" />
  <row Id="19056" PostId="3607" Score="0" Text="I have no idea why this answer is being downvoted.  Relevant xkcd: https://xkcd.com/1597/  Git is many things, but simple to use is not one of them." CreationDate="2022-01-17T23:46:55.187" UserId="27" />
  <row Id="8067" PostId="3609" Score="4" Text="Huh? You don't need a server or Internet access to use RCS, CVS, Subversion, or git; I haven't used any others, but I assume they work fine from a pen drive too." CreationDate="2017-09-12T08:33:44.283" UserId="1219" />
  <row Id="8078" PostId="3609" Score="2" Text="@PeterTaylor true, e.g. `.svn` and `.git` folders can also be copied along with the project's subfolders. If revision control was heavily used in those repositories, these folders may be bigger than the project itself, but they can be completely copied to a pen drive and reused without Internet access." CreationDate="2017-09-12T15:58:12.520" UserId="2906" />
  <row Id="8109" PostId="3609" Score="0" Text="for me, version control without server access is essentially useless. hence the answer above :) It's like a car without fuel or a light bulb that won't burn when needed. Or a super hero who can no longer fly. Utterly useless." CreationDate="2017-09-13T04:27:30.377" UserId="2605" />
  <row Id="8129" PostId="3609" Score="0" Text="Makes sense, but you still want to be keeping a repo in the pen drive. You have the barrier of working out how to make the workflow, but it will pay back quickly." CreationDate="2017-09-13T14:48:05.250" UserId="41" />
  <row Id="8130" PostId="3609" Score="0" Text="Use the pen drive as the repository storage (instead of a server) is an interesting approach. I will have to think about that if only because, as a responsible trainer, I am bound to keep my mind open for suggestions. A superhero who can no longer fly can still kick ass on the ground." CreationDate="2017-09-13T15:14:31.757" UserId="2605" />
  <row Id="8153" PostId="3609" Score="1" Text="@Armfoot nitpicking: you probably want to `git clone --mirror` instead of copying the `.git` folder." CreationDate="2017-09-14T12:25:18.213" UserId="757" />
  <row Id="8154" PostId="3609" Score="1" Text="@Jay `for me, version control without server access is essentially useless` -- you are missing out. I'm surprised that you can't find value in having a history and being able to revert your changes alone." CreationDate="2017-09-14T12:27:00.247" UserId="757" />
  <row Id="8155" PostId="3609" Score="0" Text="Looks like I am missing out indeed. My first experience with git was at an office and yeah, it was all connected. Yet, here I am, learning stuff." CreationDate="2017-09-14T12:42:46.670" UserId="2605" />
  <row Id="8088" PostId="3610" Score="0" Text="Re, &quot;it's quite tempting to [...talk] about the CRT and how an electron beam scans...&quot;  It's not like you need to explain how a CRT works.  All they need to know is that it scans the screen, line by line at a fixed rate, that the sync pulses define the top of the screen and the start of each line, and that the voltage level controls the brightness of the flying spot.  Shouldn't take more than two or three minutes (assuming you show some illustrations including the wave form at different levels of detail.)" CreationDate="2017-09-12T17:47:47.150" UserId="1269" />
  <row Id="8089" PostId="3610" Score="0" Text="@jameslarge - Agreed - there is not a lot of wasted time, but is it too much irrelevant old context?" CreationDate="2017-09-12T17:57:00.040" UserId="41" />
  <row Id="8110" PostId="3613" Score="1" Text="I think most of it is covered here - https://cseducators.stackexchange.com/questions/2897/how-to-make-git-easy-to-learn?s=1|0.8511" CreationDate="2017-09-13T04:33:24.520" UserId="2605" />
  <row Id="8111" PostId="3613" Score="1" Text="Possible duplicate of [How to make git easy to learn](https://cseducators.stackexchange.com/questions/2897/how-to-make-git-easy-to-learn)" CreationDate="2017-09-13T04:33:37.000" UserId="2605" />
  <row Id="8128" PostId="3613" Score="0" Text="@Jay I addressed the dupe question. Though the two questions are definitely related, I don't think they are dupes: the classifier I use is that answers on one can be trivially ported to the other. I don't think that is true here, for nontrivial answers." CreationDate="2017-09-13T14:31:01.750" UserId="2025" />
  <row Id="9109" PostId="3613" Score="1" Text="As author of question [How to make git easy to learn](https://cseducators.stackexchange.com/q/2897/204). It was not and was a self learning question. I was asking because another teacher wanted to teach it. But I asked in the self help style, because I was not ready to consider teaching it, until I was first able to teach my self. I use mercurial, which I found easy to learn. I still can't get my head around git's mismatch between commands and features." CreationDate="2017-11-24T17:47:46.023" UserId="204" />
  <row Id="11765" PostId="3613" Score="0" Text="If you have a GitHub account, you could check out https://education.github.com/advisors?utm_source=newsletter&amp;utm_medium=email#complete-the-training" CreationDate="2018-03-23T13:37:14.643" UserId="4759" />
  <row Id="8107" PostId="3614" Score="0" Text="Interesting. Thanks for sharing. I've been a student in a course with cumulative assignments. The lecturer offered the choice between building on your own code, or taking code supplied by the lecturer at each stage. I always opted to use the supplied code, as did most other students. Perhaps compounding problems from old code is just a headache students don't need. My intention is to have students reflect on their code and learn, not just throw it away. However, I don't want them to stress out and lose marks for their mistakes. So perhaps simple code reviews offer a good middle ground." CreationDate="2017-09-13T01:09:29.830" UserDisplayName="user2923" />
  <row Id="8081" PostId="3615" Score="1" Text="I learnt sccs in 1991, it was installed on all of the university computers." CreationDate="2017-09-12T17:09:34.110" UserId="204" />
  <row Id="8084" PostId="3615" Score="0" Text="Your answer rather ignores the fact that most institutions that teach CS will have one or more computer labs, with machines on which they can pre install useful software, but I can believe that using version control systems was harder in the past than currently and so many institutions will have no tradition/habit of using them." CreationDate="2017-09-12T17:24:34.173" UserId="2981" />
  <row Id="8156" PostId="3615" Score="2" Text="&gt;Subversion requires you set up a local server on your computer - It can be used without one, just like git. This is how we did it at university  a year or two before git was created" CreationDate="2017-09-14T13:32:41.887" UserId="1221" />
  <row Id="19057" PostId="3615" Score="1" Text="@walrus That's not the case any more.  Most computer science programs are in lower level schools than colleges at this point, if only because they are being mandated by laws around the world, and such schools simply outnumber colleges by astronomical margins.  Not having labs is, indeed, a huge problem for teaching VCSs at lower levels." CreationDate="2022-01-18T03:44:36.380" UserId="27" />
  <row Id="8096" PostId="3620" Score="0" Text="Is it likely that anyone can find a StackExchange answer that they haven't bookmarked?" CreationDate="2017-09-12T19:53:47.273" UserId="3028" />
  <row Id="8108" PostId="3623" Score="2" Text="Go with the sudoku solver man. Easy to explain and easy to implement as well. and welcome to the site because, you know, you are here :P" CreationDate="2017-09-13T04:25:20.037" UserId="2605" />
  <row Id="8114" PostId="3623" Score="3" Text="Well, idk if I have a project idea for you, but based on your updated description, I think you can immediately reject your last three ideas. If most of your audience is new to programming, I don't think they'll either appreciate, care, or have the background to understand those three mini-projects. I would also recommend not approaching this from the perspective of &quot;how can I introduce these students to Haskell/functional programming&quot; -- I'd approach it from the perspective of &quot;how can I introduce these students to programming&quot; and ignore the people who are already familiar with CS." CreationDate="2017-09-13T05:44:20.187" UserId="732" />
  <row Id="8120" PostId="3623" Score="0" Text="wait, a f word is allowed in a question?" CreationDate="2017-09-13T11:44:54.273" UserId="2605" />
  <row Id="8121" PostId="3623" Score="0" Text="Welcome to [cseducators.se]!  Not an answer, but all of those projects strike me as very ambitious for a novice programmer, though if they're not programming it (it's merely a demonstration), then have at it." CreationDate="2017-09-13T11:53:40.750" UserId="27" />
  <row Id="8163" PostId="3623" Score="1" Text="If you can't tackle the problems in 10 minutes yourself, don't expect beginners to do so in 1 hour." CreationDate="2017-09-14T14:48:06.620" UserId="2103" />
  <row Id="8117" PostId="3624" Score="0" Text="I think I am overly cautious because I read a voluminous book on TVs whilst at school, and I'm still in awe at the detail and clever circuit tricks..." CreationDate="2017-09-13T09:02:52.347" UserId="41" />
  <row Id="8119" PostId="3624" Score="0" Text="technology man...old or new....always aweing and inspiring." CreationDate="2017-09-13T11:43:27.233" UserId="2605" />
  <row Id="8139" PostId="3625" Score="0" Text="If it's not university-level material, then it seems like students should already know it before attending a college programming course. Right?" CreationDate="2017-09-14T00:00:05.900" UserId="3048" />
  <row Id="8140" PostId="3625" Score="3" Text="No - just like the university won't teach you how to program monopoly, risk &amp; yahtzee, it won't teach you how to use source control. It will teach you what you need to learn it by yourself: logical thinking, databases, modelling, programming basics, certain methodologies... it's a level of abstraction. University lays the foundations, the student is supposed to erect the building themselves." CreationDate="2017-09-14T06:08:35.187" UserId="3038" />
  <row Id="8148" PostId="3625" Score="2" Text="Ad hominem attacks are counted as a fallacy in a discussion, ErikE. They don't really add any value. We actually did learn how to *program* (not play - I said programming monopoly in my comment above, you twisted it to playing) in university, but as an exercise to anchor the learned (theoretical) material." CreationDate="2017-09-14T11:11:00.563" UserId="3038" />
  <row Id="8152" PostId="3625" Score="3" Text="@ErikE I don't think that the complement set of &quot;university-level stuff&quot; is &quot;stuff that all students know already&quot; or &quot;stuff that is taught in high school&quot;. See also: using a graphing calculator or a word processor." CreationDate="2017-09-14T12:24:13.327" UserId="757" />
  <row Id="8177" PostId="3625" Score="1" Text="I did misread what you said, and thought you were referring to playing those games, not programming them. My apologies. Had that been your actual statement, I would stand by what I said. It was not an ad hominem attack that meant your argument was invalid because you were not an adult, but simply that anyone making such a ridiculous statement is not acting in an adult way. What I *thought* you were saying **deserves** to be called &quot;not adult.&quot;" CreationDate="2017-09-15T06:55:25.103" UserId="3048" />
  <row Id="8178" PostId="3625" Score="2" Text="A serious comment then. The types of commits you make, what changes you include together, how you comment your commits, and your workflow options for collaboration and code review are integral to coding. These change how you code. I don't agree version control is an afterthought or mere application like the way you might program a game. I see developers struggle with git *all the time*. It's a valuable tool and, all else being equal, I would take a developer who'd learned git over one who'd learned b-trees or any other three data structures taught in college." CreationDate="2017-09-15T07:00:01.407" UserId="3048" />
  <row Id="8179" PostId="3625" Score="1" Text="Git rebase, splitting a commit, index editing, fixing problems like the public repo getting rewritten, recovering lost commits, solving tricky merge conflicts, rewriting or replacing a commit several commits back, and so on and so forth are super useful knowledge that CS graduates ought to be well-versed in. It's hardly like &quot;using a word processor&quot;." CreationDate="2017-09-15T07:03:30.610" UserId="3048" />
  <row Id="8194" PostId="3627" Score="0" Text="I think that Scala looks interesting and it builds on the JVM." CreationDate="2017-09-15T00:26:45.903" UserId="21" />
  <row Id="8122" PostId="3628" Score="0" Text="We simply do not have the luxury of pursuing something which does not have an endgame that has no industrial applications. For us, any time spent learning something is an investment and must have (monetary) returns. Would understanding Scheme, eventually lead us to using F sharp better? We understand that it will be challenging but we have already taken that into consideration." CreationDate="2017-09-13T14:08:29.900" UserId="2605" />
  <row Id="8123" PostId="3628" Score="1" Text="Then you have other goals, of course, than teaching functional programming." CreationDate="2017-09-13T14:11:55.760" UserId="1293" />
  <row Id="8124" PostId="3628" Score="0" Text="That is true. Step 1 : Learn functional Programming with Language X Step 2 : Do something with it. Step 3 : Profits :P However, we are still in step 1, and we have to finalise on a functional programming first. If we need to start with Scheme, then we will do that, but I thought I will ask the experts here first since you folks talk about functional programming so much as it is. My own mentor is convinced that F sharp is awesome for functional programming but he has no option on other languages." CreationDate="2017-09-13T14:17:49.787" UserId="2605" />
  <row Id="8125" PostId="3628" Score="0" Text="At the same time, while I got lucky with these 2 students, we are unable to convince other students to join us because they are asking us 'what is the end game if we learn'. So, if we can prove that functional programming has practical applications, we can get more students to participate next year, if not this year." CreationDate="2017-09-13T14:19:53.467" UserId="2605" />
  <row Id="8126" PostId="3628" Score="0" Text="I assume your students have most experience with languages that use concrete syntax. A shorter step for them would be ML (OCAML) or Haskell, rather than Scheme. It would seem more familiar, but would _require_ the change in mental processing." CreationDate="2017-09-13T14:20:28.890" UserId="1293" />
  <row Id="8127" PostId="3628" Score="0" Text="We have already agreed that we will have to fundamentally alter the way we do things with functional programming. We are ready for that. So, ML or Haskell. Hmm....alright, I will add that to my notes then." CreationDate="2017-09-13T14:23:00.210" UserId="2605" />
  <row Id="8131" PostId="3628" Score="0" Text="When I learn Scheme, I never used it again (so apparently no pay off). However the way that I now write C, C++, C#, python, has changed for the better. I now do these 90% in a functional way. As a result there are less bugs, and it can be made multi-threaded more easily." CreationDate="2017-09-13T15:41:26.147" UserId="204" />
  <row Id="8138" PostId="3628" Score="0" Text="After learning ML, I noticed its features in modern languages like F# and Rust. ML is worth learning because (1) ML is easy to learn and (2) it helps you learn other languages. The bang for buck is high with ML in my opinion." CreationDate="2017-09-13T23:59:07.913" UserDisplayName="user2923" />
  <row Id="8254" PostId="3628" Score="0" Text="Just to add to user2923's comment: if you teach them OCAML, they can use it for F# in the 'real world' (it is pretty much ML compatible). I was taught OCAML at University (already knowing some F#), and even ended up using F# documentation for some of the ported libraries because I had an easier time reading them. This way, you hide away the 'imperative' features without using an 'obscure' language." CreationDate="2017-09-20T09:50:32.473" UserId="1333" />
  <row Id="8136" PostId="3630" Score="0" Text="Welcome to CSEducators. Thanks for that link and the explanation." CreationDate="2017-09-13T23:01:07.160" UserId="1293" />
  <row Id="8145" PostId="3631" Score="1" Text="1. [tag:curriculum-design] seems like a much more relevant tag than [tag:imperative-programming]. 2. Where does this fit into the wider scheme of things? Are the students doing a degree in something related to computers? What prerequisites are they *supposed* to have (whether they *actually* have them or not)? (To me, &quot;basic IT knowledge&quot; would mean knowing how to use a keyboard and mouse and understanding a filesystem at a very basic level, but you seem to expect them to know C and Unix). If this course is a prerequisite for another course, what are the key elements you need to include?" CreationDate="2017-09-14T09:41:35.043" UserId="1219" />
  <row Id="8147" PostId="3631" Score="0" Text="I disagree with unfriendly operating systems. I think Unix is more friendly than Microsoft windows. Mainly because of its consistency (there are far fewer surprises). A few years ago my dad, a complete beginner, was calling me every 2nd day, to tell me he was stupid, it turned out ever time, that MS-Windows was just broken in some way. I switched him to Debian Gnu/Linux. He no longer calls, it just works." CreationDate="2017-09-14T11:00:40.587" UserId="204" />
  <row Id="8150" PostId="3631" Score="1" Text="I support the call for more clarity on the students. What is the purpose of this class for them? I can't tell if they are a general cross-section of the uni (who need to be taught not to do too many stupid things), or if the cohort believe they will soon be working as infosec professionals?" CreationDate="2017-09-14T12:00:10.530" UserId="41" />
  <row Id="8166" PostId="3631" Score="0" Text="What background do the students have? Are they taking this to fulfill some kind of requirement? Are they computer science majors, business majors, something else? What are they hoping to get out of it?" CreationDate="2017-09-14T17:10:51.550" UserId="2068" />
  <row Id="8171" PostId="3631" Score="0" Text="Question edited" CreationDate="2017-09-15T01:28:07.950" UserId="3049" />
  <row Id="13959" PostId="3631" Score="0" Text="&quot;They say: It's not our fault if the students don't have the necessary knowledge for understanding us, they should work harder at home. And we are busy with our research.&quot; excuse me for off topic but those people should immediately be kicked out of school and never return. It's your call to make it happen." CreationDate="2018-11-21T11:25:17.687" UserId="2234" />
  <row Id="8175" PostId="3632" Score="0" Text="Any suggestions on what math problems I could talk about?" CreationDate="2017-09-15T02:40:59.903" UserId="3036" />
  <row Id="8182" PostId="3632" Score="0" Text="Added examples, counter example, and a link." CreationDate="2017-09-15T08:04:14.517" UserId="204" />
  <row Id="8184" PostId="3632" Score="0" Text="On the other hand, if it's a demo rather than an exercise, a functional $O(n)$ Fibonacci can be just `fibhelper 0 a _ = a; fibhelper n a b = fib (n-1) b (a+b); fib n = fibhelper n 0 1`. (Although I suspect an idiomatic Haskell version would use a lazy infinite sequence and take the nth element)." CreationDate="2017-09-15T10:31:30.090" UserId="1219" />
  <row Id="8188" PostId="3632" Score="0" Text="@PeterTaylor very good. However you made an error: you call you called `fib` with 3 arguments. I changed it to `fibhelper`, tested it, thought it through and it worked. Fixed code `fibhelper 0 a _ = a; fibhelper n a b = fibhelper (n-1) b (a+b); fib n = fibhelper n 0 1`" CreationDate="2017-09-15T12:01:35.200" UserId="204" />
  <row Id="14383" PostId="3632" Score="0" Text="They are not at all too difficult if you are being guided and can evaluate code during the tutorial to follow along. Parsers in Haskell are amazingly elegant, but also have an air of practicality that can help keep novices interested. A really simple arithmetic expression parser *and* evaluator is just one line: `expr = &quot;(&quot; *&gt; expr &lt;**&gt; (&quot;+&quot; $&gt; (+) &lt;|&gt; &quot;*&quot; $&gt; (*)) &lt;*&gt; expr &lt;* &quot;)&quot; &lt;|&gt; decimal`. This also gives the opportunities to talk about some very useful Haskell operators and the importance of the little details in formal grammar definitions. 1 hour should be enough to cover 1 line of code." CreationDate="2019-02-20T16:47:05.277" UserId="6585" />
  <row Id="14389" PostId="3632" Score="0" Text="@StevenArmstrong your comment seems more like an answer." CreationDate="2019-02-21T09:27:11.363" UserId="204" />
  <row Id="14390" PostId="3632" Score="0" Text="Hmm, possibly, though it felt too simple at the time to qualify as an answer, I'll think about it and see if I can flesh it out into a proper one. The question did already consider an arithmetic expression evaluator so it did not feel like a useful answer." CreationDate="2019-02-21T10:21:59.740" UserId="6585" />
  <row Id="8181" PostId="3633" Score="0" Text="Thank you @Buffy i edited the question. If you can add other information in your answer feel free to do so. (It already helped a lot , thanks!)" CreationDate="2017-09-15T07:43:45.067" UserId="3049" />
  <row Id="8185" PostId="3636" Score="0" Text="I'm not quite sure what you're saying: do you think that as a dinosaur in my mid-30s I use kaolin and India ink?" CreationDate="2017-09-15T10:55:29.160" UserId="1219" />
  <row Id="8186" PostId="3636" Score="0" Text="@PeterTaylor, The older we are, the more history we have embedded in our knowledge (and less the younger we are). So I do remember the smell of the blue print machine from long ago (only seen kaolin and linen in the museums;-), and I now use Git when I can. At my work site (established during WWII) our (computerised) version control system has many attributes of the older DO systems. In part I was noting that modern CS 'version control' have developed from perhaps unexpected origins - Is it still my grandfather's axe? Is this the one that cuts down trees?" CreationDate="2017-09-15T11:20:58.733" UserId="1759" />
  <row Id="8187" PostId="3636" Score="0" Text="Welcome to CSEducators. While history isn't our main focus here it was nice to see a bit of it here. As an old person, I can agree..... wait, I forget..." CreationDate="2017-09-15T11:54:07.410" UserId="1293" />
  <row Id="8195" PostId="3636" Score="0" Text="@Buffy, the history helps provide the &quot;why's&quot; that put the &quot;how's&quot; into context ;-). E.g. I personally like FORTH as a language (1976-) because of it's ease of use and contrasts with other programming styles. (Knowledge of) It helps one think!" CreationDate="2017-09-15T14:58:47.613" UserId="1759" />
  <row Id="8207" PostId="3637" Score="0" Text="Can you elaborate on the type of class you're teaching and the type of students? That could impact implementation choice." CreationDate="2017-09-16T03:05:29.647" UserId="58" />
  <row Id="8191" PostId="3638" Score="0" Text="Is the reference book for you or the students? What level students are you teaching? What do you want them to learn?" CreationDate="2017-09-15T13:30:36.700" UserId="283" />
  <row Id="8192" PostId="3638" Score="0" Text="This question has more details - https://cseducators.stackexchange.com/questions/3627/functional-programming-using-f-sharp" CreationDate="2017-09-15T13:36:53.833" UserId="2605" />
  <row Id="8200" PostId="3638" Score="0" Text="@Jay: If you plan on using the SICP book along with Racket, keep in mind that the dialect of Scheme taught using the book isn't exactly the same as Racket. However, Racket has this interesting feature that lets you change/modify the language to all sorts of different dialects and variations of Lisp, including a [variant designed specifically to be compatible with SICP](https://docs.racket-lang.org/sicp-manual/index.html) which you may want to use." CreationDate="2017-09-15T15:29:49.343" UserId="732" />
  <row Id="8206" PostId="3638" Score="1" Text="@Jay Please don't count on people to read both questions. Put the same information in both questions instead." CreationDate="2017-09-16T03:04:21.507" UserId="58" />
  <row Id="8208" PostId="3638" Score="0" Text="I'd recommend HtDP, Little Schemer and SICP, in that order, based on my own preferences" CreationDate="2017-09-16T05:45:04.923" UserId="130" />
  <row Id="8209" PostId="3638" Score="0" Text="@thesecretmaster I don't think they are the same question. I would like to keep them separate as per community guidelines on not making things too broad." CreationDate="2017-09-16T06:51:16.640" UserId="2605" />
  <row Id="8210" PostId="3638" Score="0" Text="@xuq01 I will add your recommendation to the consideration list. perhaps post your suggestion as an answer if possible." CreationDate="2017-09-16T06:52:08.727" UserId="2605" />
  <row Id="8212" PostId="3638" Score="0" Text="You might also be interested in [Concrete Abstractions](https://gustavus.edu/mcs/max/concrete-abstractions.html) - which is available online for free, as well as in dead tree form." CreationDate="2017-09-16T08:09:52.137" UserId="757" />
  <row Id="8213" PostId="3638" Score="0" Text="I shall look into that. and as always, a more detailed sentence as an answer post would be most useful since comments can get deleted after some time." CreationDate="2017-09-16T08:50:32.823" UserId="2605" />
  <row Id="8189" PostId="3639" Score="0" Text="I downloaded structure and interpretation of computer programs, a short while ago. It is available in html and pdf. I would also recommend this book. May be not as a reference book, but as a learning book. Can you get a scheme reference book, I thought you could only get a scheme, back of a postage stamp. This language is so tiny." CreationDate="2017-09-15T12:07:09.840" UserId="204" />
  <row Id="8202" PostId="3640" Score="1" Text="DrRacket, along with [How To Design Programs, second edition](http://www.ccs.neu.edu/home/matthias/HtDP2e/) was the way I learned FP, as the &quot;Intro CS&quot; course at my undergrad." CreationDate="2017-09-15T16:32:45.043" UserId="2842" />
  <row Id="8205" PostId="3641" Score="0" Text="Huh, I didn't know GNU had another Scheme implementation besides Guile. I think this is the first time I've seen them have 2 programs for the same task. Kind of weird, as I thought their (original) grand goal was to make their ideal open source operating system." CreationDate="2017-09-16T00:47:38.093" UserId="1482" />
  <row Id="8214" PostId="3641" Score="0" Text="@Jol I did not know they had two ether (I did not know about guile). As for there goals the main one: “The goal of GNU was to give users freedom”, that is all software should be Free Software. Then to make an Operating System, and all of the software that runs on it (directly or with other peoples help). From the name, I think MIT way have written this scheme." CreationDate="2017-09-16T10:06:14.910" UserId="204" />
  <row Id="8215" PostId="3641" Score="0" Text="@Jol While (almost) all Open Source software is Free Software, they are not the same. Some philosophical differences. Also I have found it very difficult to explain Open Source, but easy to explain Free Software. People often miss represent both: When someone says “for free”, it is easy to correct them. Just explain the meaning of free (not free of charge, but free as in freedom). When someone says that “source code openly available”. It is much harder to put them right. All that can be done is point them to a long definition document. Also Source is focused on developers, Free is about users." CreationDate="2017-09-16T10:14:32.420" UserId="204" />
  <row Id="8204" PostId="3643" Score="1" Text="And its lead author, Matthias Felleisen, is one of those brilliant people in both tech and in education. His working group, originally at Rice, and now at Northeastern U, has been doing great things for a long time." CreationDate="2017-09-15T20:49:02.817" UserId="1293" />
  <row Id="8223" PostId="3646" Score="0" Text="@Buffy: I value concepts as much as technical details in specific languages, because that will help me learn concurrent programming knowledge that can apply to all/most languages, without being lost in the differences between specific langauges. I am not sure if searches in specific languages will help me achieve that goal." CreationDate="2017-09-17T12:50:30.450" UserId="1532" />
  <row Id="8526" PostId="3646" Score="0" Text="My first book ever on this subject was &quot;Concurrent C&quot; - this is not a book about actual C, it suggests an extension to C, which would implement communicating-processes calculus. This book seems to have inspired Go authors, and, perhaps Erlang authors (not sure which came first, the book or the language). Clojure has implementation of CSP, though due to the difference in syntax the similarities aren't immediately apparent." CreationDate="2017-10-01T11:29:36.843" UserId="1000" />
  <row Id="8218" PostId="3648" Score="0" Text="Thanks. Can you tell more about &quot;I am doing something similar but with functional programming&quot;? By &quot;functional programming&quot;, do you mean some other languages than C#?" CreationDate="2017-09-17T12:09:33.460" UserId="1532" />
  <row Id="8224" PostId="3648" Score="0" Text="I do a lot of self learning too and most recently (since 3 days or so) I have started self learning functional programming and asking questions about books and stuff." CreationDate="2017-09-17T13:03:48.153" UserId="2605" />
  <row Id="8232" PostId="3656" Score="2" Text="Do you know if lack of effort is a problem just in your class, or with your university as a whole?" CreationDate="2017-09-19T06:11:01.007" UserId="732" />
  <row Id="8233" PostId="3656" Score="0" Text="Hello Ryan, welcome to your community. Hope you enjoy it here, and ask many good questions. You can also look at existing questions, and add an answer. This question may be of some relevance to your question https://cseducators.stackexchange.com/questions/1410/how-do-you-encourage-students-to-take-criticism-of-their-code-constructively?rq=1" CreationDate="2017-09-19T07:51:09.403" UserId="204" />
  <row Id="8234" PostId="3656" Score="0" Text="Gaming development or coding or just learning in general, there is not much you can do to encourage masses to do something. if you are talking about an individual then sure, but a whole class....thats a tough one." CreationDate="2017-09-19T09:14:10.607" UserId="2605" />
  <row Id="8236" PostId="3656" Score="0" Text="It might also be the fact that these are &quot;upper level graduate courses&quot; that is at the heart of the problem. Such students may have more pressing concerns than this course." CreationDate="2017-09-19T10:40:03.300" UserId="1293" />
  <row Id="8238" PostId="3656" Score="1" Text="Welcome to [cseducators.se], Ryan!  May I ask what country this is in?" CreationDate="2017-09-19T12:47:27.617" UserId="27" />
  <row Id="8241" PostId="3656" Score="0" Text="What were the prereqs for the class? What language or framework are you using? What types of games are the students creating? What are you covering in lecture? What exactly is expected from the homework assignments?" CreationDate="2017-09-19T17:38:46.663" UserId="2068" />
  <row Id="8243" PostId="3656" Score="0" Text="@KevinWorkman I added a response to these questions in the main topic since I should have included it in the first place." CreationDate="2017-09-19T19:49:30.433" UserId="3078" />
  <row Id="14617" PostId="3656" Score="0" Text="Hi Ryan. Could you give a link to the course website, including the homework assignment instructions?" CreationDate="2019-03-28T03:02:49.800" UserId="1873" />
  <row Id="8237" PostId="3657" Score="0" Text="In addition, games like Planning Poker (Scrum Poker) can help a class of individuals meld into a team quickly. It is used in industry partly for that purpose: https://en.wikipedia.org/wiki/Planning_poker" CreationDate="2017-09-19T10:44:40.333" UserId="1293" />
  <row Id="8242" PostId="3658" Score="0" Text="Even fining (reducing grade) for lateness, may not work. There was a study that showed that when a day nursery fined parents for late pick-up. late pick-ups increased. Parents no longer felt guilty, they just paid the fee (they saw it as $fine = fee$)." CreationDate="2017-09-19T17:42:58.267" UserId="204" />
  <row Id="8244" PostId="3658" Score="0" Text="Assignments that get turned in late are reduced by 10% each day. If you are late 10 days, you get a 0. Also, the assignments are laid out in such a way that student X and student Y may have completely different games by the end of the semester but still get 100% on every assignment. It gives students the freedom to make games that they find fun and exciting instead of, &quot;Make pac-man&quot;." CreationDate="2017-09-19T19:52:23.097" UserId="3078" />
  <row Id="15415" PostId="3658" Score="0" Text="Note that the &quot;growth mindset&quot; theory has failed multiple replication attempts, e.g.: (1) https://www.sciencedirect.com/science/article/abs/pii/S0191886917303835 (2) https://osf.io/preprints/socarxiv/tsdwy" CreationDate="2019-08-08T21:44:32.113" UserId="8137" />
  <row Id="15416" PostId="3658" Score="0" Text="The first study is closed: I can not read it, so is meaning-less. The second has some problems: reward of sweets. I would expect this to undo any positive affect (Extrinsic motivator: even if it is unconditional, the subjects way see it as conditional, as given at end)." CreationDate="2019-08-08T22:05:02.427" UserId="204" />
  <row Id="8245" PostId="3663" Score="0" Text="Thank you! I added another edit to the main topic to answer some of your questions. The students aren't under prepared, I can assure you. To get to this point every single one of them have had to take the same courses. I've been a TA for a while, and there were classes I took Sophomore year where X person was there with me. I then TA'd that class a year later, and they were in it again, failed, and now I'm the TA in that class again this year and they are in it again, and they either haven't turned in the assignment, or turned it in two days late. (I'm speaking about two individuals)" CreationDate="2017-09-19T19:56:49.837" UserId="3078" />
  <row Id="8246" PostId="3663" Score="0" Text="Feedback is given on every assignment that doesn't receive a 100%. It is given both at a broad level, and for each section of the rubric. I try to keep it down to just a few paragraphs, because I know that when I see a wall of text I generally move on unless I'm truly interested. Also, your comment about asking them to respond to the feedback on the next assignment is brilliant and I'm going to try to work that in." CreationDate="2017-09-19T20:00:33.960" UserId="3078" />
  <row Id="8255" PostId="3663" Score="1" Text="@Ryan -- the more I think about it, the less comfortable I feel with my answer (and by proxy, you accepting my answer). I have to agree with Buffy and Kevin in particular -- if 85% of your students are getting Cs and Fs, I do think that there's some fundamentally deeper issue at play that lack of motivation alone doesn't explain. And if that's the case, making things harder, as I suggest, would be a terrible move to make. I'd start by getting feedback first, talking with your professor, and other professors + TAs in your department before making any changes." CreationDate="2017-09-20T13:43:50.107" UserId="732" />
  <row Id="8256" PostId="3663" Score="1" Text="@Ryan -- I also want to remind you to keep in mind that *not all students are you*. While *you* may have excelled at your coursework and found it to be engaging, interesting, and valuable, that doesn't mean that other students have done the same. I've been guilty of falling into the same sort of trap myself: just because you might find something doable doesn't mean it actually is for the majority of students." CreationDate="2017-09-20T13:50:08.693" UserId="732" />
  <row Id="8247" PostId="3664" Score="0" Text="Oh my god... I put upper level graduate, when I meant upper level under-grad... Besides that, answering your bullets: I've talked to many students, and I've gotten feedback that there is too much homework given, but there is no way that we can reduce the load considering it is roughly 5 hours a week for the average person (per class of course). In terms of how I can help them, I offer office hours and basically 24/7 methods of contact, yet I only ever get contacted by those who are already getting A's. Those who are struggling never contact me or the professor." CreationDate="2017-09-19T20:06:28.547" UserId="3078" />
  <row Id="8248" PostId="3664" Score="0" Text="Make it anonymous. Then you might get different (possibly more honest) answers." CreationDate="2017-09-19T20:08:51.913" UserId="1293" />
  <row Id="8249" PostId="3664" Score="0" Text="The GDD degree at my University is essentially a UX focused CS degree done with game design. IE: Instead of Assembly and Machine Language, you take UI design and development. So if their goal is to be a game designer, programmer, or UX dev, then these courses benefit them greatly. While they might not be focused on doing well in class or building a portfolio, they know how useful it is in the long run because of how often I talk about my person experiences with it. I had a hard time getting a job with just a resume, but once I put everything in a portfolio I got a few calls within a week." CreationDate="2017-09-19T20:10:22.247" UserId="3078" />
  <row Id="8250" PostId="3664" Score="0" Text="That's a great idea. I'll work on getting an anonymous feedback system in place." CreationDate="2017-09-19T20:12:05.627" UserId="3078" />
  <row Id="8251" PostId="3665" Score="0" Text="You bring up some good points, and I agree with you entirely. There might be some issues in the course structure, but I am certain the key contributor is the lack of motivation. Myself and the Professor are available almost 24/7 through email and phone, yet the only people who come talk to us are the ones getting A's already. I know for certain these students are capable of doing this material, as they often do in-class labs that involve developing with Unity3D. Also, the first assignment was to create a minimum viable product which is as simple as to make the first level in super mario bros." CreationDate="2017-09-19T23:16:45.247" UserId="3078" />
  <row Id="8252" PostId="3665" Score="0" Text="Am I wrong in assuming that a 3 credit hour course should have ~5 hours of homework per week? Could this be something that is intimidating them to where they put it off until the last minute?" CreationDate="2017-09-19T23:19:55.190" UserId="3078" />
  <row Id="8253" PostId="3665" Score="0" Text="@Ryan Take a look at my edit whenever you get a chance. But I will say that doing an in-class lab (where you have neighbors to ask, the topics are fresh in your mind, etc) is a different beast than going home and doing a homework assignment. One does not equal the other." CreationDate="2017-09-19T23:32:44.127" UserId="2068" />
  <row Id="8258" PostId="3666" Score="0" Text="Does your school have independent studies? (Where the student spends a semester doing research under your guidance for credits towards graduation.)" CreationDate="2017-09-20T20:56:20.860" UserId="2068" />
  <row Id="8259" PostId="3666" Score="0" Text="“Gifted”, do you mean born in September? (birth date is a bigger predictor of educational outcome than parents wealth/income). But more importantly see Carol Dwecks work on mindset “I don't believe in ability” or more precisely I don't believe that thinking about ability produces good out comes. See has done a ton of research, in to this, and what to do about it. **I would be looking to see how I could provide this for all, as it seems like it will develop useful skills.**" CreationDate="2017-09-21T08:23:29.850" UserId="204" />
  <row Id="8278" PostId="3666" Score="0" Text="If you have a 9th grade student doing PhD level work, you have a gifted student. Not every adult can do that level of work, so why would you expect that every student can? Would you deny Reed Jobs (son of Steve Jobs) his role in cancer research because he was in 10th grade when he started? Would you expect every 10th grade student to have that natural ability?" CreationDate="2017-09-22T02:59:47.103" UserId="1537" />
  <row Id="8307" PostId="3666" Score="0" Text="what kind of gifted? that is quite a broad term, and one that has quite a few levels. Gifted students might have extreme abilities in some fields and almost nothing in other fields. Could you explain what kind of things make it clear (beyond a professional diagnosis, which I assume exists) that said students is gifted? some things he or she said that shows a special way of thinking, perhaps." CreationDate="2017-09-25T09:51:49.743" UserId="150" />
  <row Id="8326" PostId="3666" Score="0" Text="@ctrl-alt-delor yes, growth mindset is important, but to be quite honest, it is ridiculous to pretend that all students are at the same level. Some students are ready for more advanced study than others." CreationDate="2017-09-25T23:14:29.690" UserId="919" />
  <row Id="8279" PostId="3667" Score="0" Text="+1 My daughter was already experienced in videography when she started high school, so she spent much of her high school time teaching video and media classes,  allowing her teacher to do the non-teaching parts of the teaching job (securing funding, planning projects, etc)." CreationDate="2017-09-22T03:04:46.493" UserId="1537" />
  <row Id="8272" PostId="3670" Score="2" Text="Some more context might help us to answer your question." CreationDate="2017-09-21T16:31:47.943" UserId="41" />
  <row Id="8274" PostId="3670" Score="4" Text="What exactly do you want them to do during these breaks? I don't see how standing around in the hallway looking at my phone for 10 minutes is any better than staying in my chair and looking at my phone for 10 minutes. How do you know this is making them unhealthy? You've tagged this with [tag:adult-education], so treat them like adults. If they don't want to take a break, then there isn't much you can (or should) do." CreationDate="2017-09-21T17:00:31.693" UserId="2068" />
  <row Id="8280" PostId="3670" Score="1" Text="Hey man, I hope this is not a joke. Are they glued (literally) to their seats. Or are you that good a faculty that they don't wish to stop hanging out with you. I got to vote to close this question." CreationDate="2017-09-22T04:44:14.467" UserId="2605" />
  <row Id="8283" PostId="3670" Score="1" Text="I have had this same problem in industry. It can result in reduced performance, lower quality code, as well as poor health. First explain why they need breaks, and that you expect them to take them, and not use hand held devices as a substitute to a break. Then issue consequences, when they are overdone ( Ask a question of someone that did not take a break and looks tired, make them stand outside for not paying attention. Be real mean, but fair. )" CreationDate="2017-09-22T08:37:31.240" UserId="204" />
  <row Id="8286" PostId="3670" Score="2" Text="@ctrl-alt-delor If I took a class for adults and the teacher made me sit outside as punishment because I didn't &quot;take a break&quot; in the middle of class, I would immediately ask for my money back." CreationDate="2017-09-22T16:29:55.193" UserId="2068" />
  <row Id="8290" PostId="3670" Score="0" Text="@KevinWorkman I said nothing about punishment. I said consequences. I no most people don't know the difference, and substitute the word, when asked to change there behaviour. So if they fall asleep send them for a break, send them now, and choose a now that will have the biggest impact." CreationDate="2017-09-22T18:20:07.053" UserId="204" />
  <row Id="8292" PostId="3670" Score="3" Text="@ctrl-alt-delor A negative consequence that is enforced to be &quot;real mean&quot; as a result of violating some &quot;rule&quot; is literally a punishment. My point still stands. This question is about [tag:adult-education]. Saying that the teacher should make an adult &quot;stand outside&quot; as punishment for not &quot;taking a break&quot; is ridiculous." CreationDate="2017-09-22T18:36:10.640" UserId="2068" />
  <row Id="8294" PostId="3670" Score="1" Text="@kevin if being hit by a car, is a punishment for not looking, then you are correct. Saying that being an adult is a licence to not have consequences for your actions (to be irresponsible) …" CreationDate="2017-09-22T18:38:06.630" UserId="204" />
  <row Id="8295" PostId="3670" Score="1" Text="@ctrl-alt-delor I mean, it kind-of is. But we aren't talking about that. We're talking about a teacher forcing a student to sit outside because the student didn't do something that the teacher wanted them to do. That's a punishment." CreationDate="2017-09-22T18:39:39.473" UserId="2068" />
  <row Id="14787" PostId="3670" Score="0" Text="How about bringing the free water to drink during the class? They'll need a bio break without your urging them" CreationDate="2019-04-22T19:24:13.603" UserId="6827" />
  <row Id="8282" PostId="3671" Score="0" Text="If you can teach something in this game time, even better: They will learn something, and may engage more (as they don't see it as wasting time). Also explain why you are doing it, as this will help." CreationDate="2017-09-22T08:28:36.283" UserId="204" />
  <row Id="8304" PostId="3671" Score="3" Text="What does any of this happy-clappy nonsense have to do with *learning computer science?*&quot; If I was forced to take part in that sort of time wasting, I would just leave the class - and you are *forcing* people to take part, through peer pressure from those who will prefer throwing balls around to using their brains." CreationDate="2017-09-24T01:35:01.820" UserId="1352" />
  <row Id="8329" PostId="3671" Score="0" Text="@alephzero *Breaks* have to do with *learning*. I'd love to see how well you function after 4 hours of continuous learning with 0 breaks. As for the &quot;happy-clappy nonsense&quot;, this heavily depends on the teacher. And I have to admit, you have to be on a very very high level to pull this sort of thing off. But if you can, it will work wonders. Also, **this answer is about spending time during the breaks, and clearly about elementary school** level. Why would it upset you is beyond me..." CreationDate="2017-09-26T10:51:49.363" UserId="51" />
  <row Id="8332" PostId="3671" Score="1" Text="Actually, I did this with _adults in a doctoral program_, but just for the reasons you suggest. It is very successful - and necessary - and team-building. However, if you are seen by your students as primarily authoritarian, then just send them out and lock the door. (No, I didn't really say that.) As I said above, it is teen-agers who have the hardest time with such a solution. On the other hand, if a student came to me as a &quot;brain in a jar&quot; then I'd probably exempt them from game-time. But they would resent the fact they were left out, I think." CreationDate="2017-09-26T11:34:31.403" UserId="1293" />
  <row Id="8275" PostId="3672" Score="0" Text="Since the difference between a compiler and an interpreter is actually very small, most good compiler books will give you the basis. The difference is only in the back end where an execution engine replaces the code generator. The front and middle sections are the same: scanning, parsing, semantic analysis, maybe some optimization. It may even create intermediate code and work from that. Otherwise from the parse tree usually." CreationDate="2017-09-21T20:52:34.120" UserId="1293" />
  <row Id="8276" PostId="3672" Score="0" Text="And welcome to CSEducators." CreationDate="2017-09-21T21:21:20.023" UserId="1293" />
  <row Id="8277" PostId="3672" Score="0" Text="Can you give some more context about the age of the students, the previous experience, the environment, etc? Also, welcome!" CreationDate="2017-09-21T21:56:13.993" UserId="58" />
  <row Id="8291" PostId="3675" Score="0" Text="The way you pose the question suggests that you have doubts yourself. Given that, I don't think it will work. However, an analogy doesn't need to be perfect in every way. If it were an exact match it wouldn't be an analogy, but the real thing. You can use a simple analogy to introduce a topic and get the synapses in the student minds aligned in the right direction. For the deeper case either use a more sophisticated analogy or depend on the fact that they already know something about the topic so analogy is less important." CreationDate="2017-09-22T18:33:32.107" UserId="1293" />
  <row Id="8323" PostId="3675" Score="0" Text="I don't think any analogy is going to help. Delegates are conceptually pretty simple. The problem is that the .NET implementation is a bit weird, and no analogy can help with that. The fact that delegates are an abstract concept means that you should be trying to explain _how_ to use them, not how they work. Don't talk about power strips - which are concrete and nothing like delegates - talk about _events_ and _callbacks_ and show them _Linq_. Give them some use cases and let them work out the rest (there is much)." CreationDate="2017-09-25T16:40:29.833" UserId="1333" />
  <row Id="8439" PostId="3675" Score="1" Text="I though about writing an answer, but will rather let my secretary write one for you instead." CreationDate="2017-09-28T22:35:20.940" UserId="2393" />
  <row Id="8300" PostId="3677" Score="5" Text="Seems a bit weak, actually. Where is the recursive &quot;call&quot;? Might be better for `while loops` where you also need a stopping condition." CreationDate="2017-09-22T20:00:05.257" UserId="1293" />
  <row Id="8303" PostId="3679" Score="1" Text="This is probably a US only question. I think many other countries require more training for teachers. In the US the requirements differ radically by place and by type of school. But as the poster implies, there are few subject level requirements for CS teachers at this level. Worse, not every CS teacher actually desires to teach it, being required by circumstances." CreationDate="2017-09-23T23:49:26.623" UserId="1293" />
  <row Id="8305" PostId="3679" Score="3" Text="Teacher requirement differ by State. Most States have no certification for CS at all, but some are changing that. Answers from faculty involved in teacher preparation (from any country) are welcome. Although my question is hypothetical–&quot;what should a program include?&quot;–I am interested in hearing about successful existing programs." CreationDate="2017-09-24T10:09:31.207" UserId="2197" />
  <row Id="8306" PostId="3679" Score="0" Text="Are you asking because you want to create one? Is it just for one school? If you already exists, maybe for a different place, would you be interested in adopting it? Can you update question, not just reply to comments." CreationDate="2017-09-25T08:49:16.383" UserId="204" />
  <row Id="8312" PostId="3679" Score="0" Text="I'm voting to close this question as off-topic because I think, when it comes choosing faculty for an established education system, there are already systems in place. Set protocols which seems to be working okay. Unless you can give a new context, I believe this question is no serving any specific purpose." CreationDate="2017-09-25T13:00:50.450" UserId="2605" />
  <row Id="8322" PostId="3679" Score="2" Text="This question is getting at something interesting, but I think it needs to be more specific to be on-topic. Theoretical or &quot;just wondering&quot; questions are off-topic as per the help center. I'm voting to close for now, but I hope you edit your question to be more specific so we can reopen it." CreationDate="2017-09-25T16:23:57.377" UserId="2068" />
  <row Id="8519" PostId="3679" Score="0" Text="Currently NY does not have any certification requirements for CS. Discussions have started about creating a certification program and one of the State Universities of NY (Albany) has something for new CS teachers. This is all very preliminary, so I didn't want to give out any specifics. In planning to design propose such a program, a group of educators was asking each other precisely the question I posed here." CreationDate="2017-10-01T02:46:04.733" UserId="2197" />
  <row Id="8520" PostId="3679" Score="0" Text="@Jay  In the U.S., much of the curriculum and teacher preparation is left up to individual states. While the Computer Science Teachers Association has created guidelines and a curriculum framework, few States have adopted this. We have a national push for more computer science education without a clear path in place to train teachers for the task. There are many teacher training workshops available, but no clear requirements in most states." CreationDate="2017-10-01T02:52:47.683" UserId="2197" />
  <row Id="8522" PostId="3679" Score="0" Text="I see. Then, may be this question is relevant. I am withdrawing my close vote then." CreationDate="2017-10-01T04:31:45.013" UserId="2605" />
  <row Id="8549" PostId="3679" Score="0" Text="@Thorn You should edit your question to clarify. Don't expect people to read a discussion in the comments..." CreationDate="2017-10-02T11:00:42.393" UserId="41" />
  <row Id="8694" PostId="3679" Score="0" Text="If you can't do, don't teach. The only people teaching something should be those who have done it professionally. This applies to CS, Math, Art, Driver's Ed, Woodshop... Everything. Only professionals should teach professions. No one wants to be taught by an amateur. (Amateur Radio being the only exception, as many of them are more proficient than people working in the field.)" CreationDate="2017-10-06T18:33:21.273" UserId="3244" />
  <row Id="8695" PostId="3679" Score="0" Text="While what you say isn't false, it isn't enough. It requires more than proficiency to teach. Professionals often don't know why they do what they do, in fact. It just seems natural to them, perhaps since they have done it so long." CreationDate="2017-10-06T18:36:36.980" UserId="1293" />
  <row Id="8696" PostId="3679" Score="0" Text="Not true. First, computer science is not a profession, it is an academic discipline. &#xA;&#xA;Second, even if we equate CS with professional programming, the statement is still false. Do we think only professional chemists and biologists can teach biology? Only published authors and professional journalists can teach English? Only a professional translator can teach a foreign language? Many successful teachers have no professional experience in the discipline they teach. If we only allowed people with professional experience to teach, we would not have enough teachers in any subject." CreationDate="2017-10-06T18:44:19.083" UserId="2197" />
  <row Id="8697" PostId="3679" Score="1" Text="@user3244 While it is certainly true that you should have deep content knowledge, such knowledge is only gently correlated with professional experience. By this standard, most college professors (regardless of field!) should not be, and most of the greatest coaches in NFL history shouldn't have been allowed on the field." CreationDate="2017-10-08T17:01:42.667" UserId="27" />
  <row Id="8569" PostId="3683" Score="0" Text="Isn't &quot;Many gifted students have ADD\ADHD&quot; modern educatorese for &quot;They're bored silly&quot;?" CreationDate="2017-10-04T03:56:19.063" UserId="1537" />
  <row Id="8571" PostId="3683" Score="0" Text="@pojo-guy it most certainly isn't." CreationDate="2017-10-04T06:02:48.363" UserId="150" />
  <row Id="8308" PostId="3684" Score="0" Text="Since there have been recent meta discussions about the suitability of questions without clear answers, this looks to me like a good, specific question where the answers may be useful for lots of different scenarios." CreationDate="2017-09-25T10:36:55.267" UserId="41" />
  <row Id="8309" PostId="3684" Score="0" Text="User interaction design, or user interface design? There is a difference. User interaction design is not just a new name, it is a new way of thinking (see the inmates are running the asylum — Alen Cooper, for a good introduction)." CreationDate="2017-09-25T11:21:38.240" UserId="204" />
  <row Id="8310" PostId="3684" Score="0" Text="Actually, [Alan Cooper](https://en.wikipedia.org/wiki/Alan_Cooper)" CreationDate="2017-09-25T11:56:20.887" UserId="1293" />
  <row Id="8311" PostId="3684" Score="0" Text="Are you looking for case studies of good design or horror stories, primarily? The latter are more dramatic, of course." CreationDate="2017-09-25T12:20:49.237" UserId="1293" />
  <row Id="8339" PostId="3684" Score="0" Text="@SeanHoulihane: I'm glad you think so!" CreationDate="2017-09-26T13:39:30.757" UserId="3117" />
  <row Id="8340" PostId="3684" Score="0" Text="@ctrl-alt-delor: Interaction design. Although there is a big focus on just UI, the focus is broader than that. Thanks for pointing it out, though. I'll be aware of it when looking at Cooper's stuff." CreationDate="2017-09-26T13:40:52.143" UserId="3117" />
  <row Id="8341" PostId="3684" Score="0" Text="@Buffy: I'm just as interested in case studies of good design as I am in horror stories. I'd like my students to learn to reflect on why something works well, not only to be able to point out (obvious) flaws. Thanks for asking." CreationDate="2017-09-26T13:40:56.263" UserId="3117" />
  <row Id="8338" PostId="3685" Score="0" Text="Thanks for the response! I think you have a good point that I need to get them hooked somehow. I'll definitely take a look at Alan Cooper's book to find inspiration. However, my experience with my own classmates in these kinds of courses is that if you show them examples of clearly bad UIs, they'll be engaged, but they'll also say: &quot;That's obvious, why would I need to take a course to learn this?&quot; But I'll see if Cooper has some examples in which the problem is not as obvious - and then let my students think about what could be wrong before giving them the answer." CreationDate="2017-09-26T13:36:41.550" UserId="3117" />
  <row Id="8315" PostId="3686" Score="1" Text="Hope this link helps - https://en.wikipedia.org/wiki/Metro_(design_language)#Reception" CreationDate="2017-09-25T13:29:26.757" UserId="2605" />
  <row Id="8321" PostId="3686" Score="0" Text="Let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/66144/discussion-between-jay-and-buffy)." CreationDate="2017-09-25T14:17:58.870" UserId="2605" />
  <row Id="8337" PostId="3686" Score="0" Text="Thanks, Jay. I very much like the idea of discussing some screw-ups and their fixes, in combination with relying on familiarity. And thanks for the link to the Wikipedia page! Could you point me to some more detailed sources thta you have found useful (if any)?" CreationDate="2017-09-26T13:31:17.713" UserId="3117" />
  <row Id="8346" PostId="3686" Score="1" Text="Try this one - https://www.pcworld.com/article/2098585/windows-ui-designer-explains-why-forcing-metro-on-all-is-great-for-power-users.html and also this one - https://www.thurrott.com/mobile/windows-phone/3000/ex-microsoft-designer-explains-the-move-away-from-metro &#xA;&#xA;Unfortunately, there are no detailed studies. mostly just comments from former UI experts, commentary, jokes and stuff." CreationDate="2017-09-27T04:13:35.297" UserId="2605" />
  <row Id="8327" PostId="3687" Score="3" Text="+1 for the first paragraph, agreed completely. I'll just add that I'd also get sick of constant &quot;let's get up and moving!&quot; type activities. I'm there to learn. I paid money to be there. Don't waste my time with cleverly disguised &quot;breaks&quot; that I know I don't need. (Or that I might not be physically capable of! Being an adult sucks, and my knees aren't what they used to be!)" CreationDate="2017-09-25T23:42:48.113" UserId="2068" />
  <row Id="8330" PostId="3687" Score="0" Text="Why would it offend you that a break is held e.g. every 90 minutes? The teacher needs it more than you, but you would need it too. (Even @KevinWorkman needs it, at least his mind and body does, even if he denies it.) Breaks are not a waste of time, just like sleeping. Yes, we sleep every day, what a waste of time! But try working after 24 hours of wakefullness..." CreationDate="2017-09-26T10:55:08.030" UserId="51" />
  <row Id="8331" PostId="3687" Score="0" Text="The 2nd and 3rd paragraphs deserve a + though." CreationDate="2017-09-26T10:58:05.567" UserId="51" />
  <row Id="8333" PostId="3687" Score="0" Text="@vacip sure, there's a place for breaks, but that place is not in a paid for adult education class." CreationDate="2017-09-26T12:03:41.640" UserId="919" />
  <row Id="8336" PostId="3687" Score="0" Text="@heather even if that class lasts 360 minutes (4*90 minutes, but I do hold breaks) - this is the case in many adult education intensive courses, actually 90% of the courses I hold. I'd love to hear your opinion on this at 14:30 when there is still 2 hours to go, with no lunch or toilet break since 9 AM. :)" CreationDate="2017-09-26T12:49:07.543" UserId="51" />
  <row Id="8343" PostId="3687" Score="0" Text="@vacip Please understand what is being said before you attempt to offer criticism. I never said that nobody should take breaks. I'm simply against the idea of **punishing** students who would rather remain seated during said break. I'm also against the idea of using children's games to &quot;trick&quot; adults into being more active on these breaks. I'm an adult. I paid hundreds, or thousands, of dollars to be in the class. I'm not there to play ring around the rosie or to stand in the hall as punishment for not being active during a break." CreationDate="2017-09-26T16:25:04.827" UserId="2068" />
  <row Id="8345" PostId="3687" Score="0" Text="@vacip, oh, I meant in terms of breaks being required/for anything other than quick-use-the-restroom-get-a-drink breaks (or lunch breaks, or whatever)." CreationDate="2017-09-26T20:28:06.430" UserId="919" />
  <row Id="8334" PostId="3690" Score="0" Text="While I think the question is more about students working by themselves for too long to be healthy, there is research that suggests that a lecture should not exceed 20 minutes or the attention starts to drift. The idea is to break up longer sessions with lecture and other more active things, though not necessarily physical activity. The usual thing is to use &quot;active learning&quot; after a short lecture." CreationDate="2017-09-26T12:05:09.527" UserId="1293" />
  <row Id="8335" PostId="3690" Score="1" Text="You've added some example context which is still absent in the original question - I expect that in this context the breaks are more likely to be taken (e.g. lunch, even in the same room, requires some engagement). I don't see the experience you're describing reflected in the original question. Fortunately, you've not suggested gamification of the primary activity..." CreationDate="2017-09-26T12:05:18.923" UserId="41" />
  <row Id="8344" PostId="3690" Score="0" Text="I don't really disagree with anything you said here. Please note that most of the &quot;hate&quot; in this question is directed at the idea of **forcing** students to take a break in a certain way, or to **punish** them for not taking a break exactly how the teacher wanted them to. If I recharge by looking at Twitter for ten minutes, who are you to tell me otherwise? I'm pretty sure you and I are saying more or less the same thing, especially with your last paragraph." CreationDate="2017-09-26T16:29:23.300" UserId="2068" />
  <row Id="8342" PostId="3691" Score="2" Text="http://csunplugged.org/ has some good active learning stuff, and all relating to computer science." CreationDate="2017-09-26T14:11:12.783" UserId="204" />
  <row Id="8348" PostId="3691" Score="0" Text="@ctrl-alt-delor Really nice! Why not post it as an answer (add two more sentences and maybe highlight one idea from the site)?" CreationDate="2017-09-27T07:45:41.863" UserId="51" />
  <row Id="8349" PostId="3691" Score="1" Text="For the drive-by downvoter: why not add a comment to let me know how I can improve the question? Same goes for the answer downvote... I'd love to improve it if you told me what was wrong." CreationDate="2017-09-27T07:47:10.507" UserId="51" />
  <row Id="8350" PostId="3691" Score="1" Text="I've not voted on either Q or A yet, but it only takes one bad experience with 'fun games' to turn people against them. Once one irresponsible trainer has pushed someone over the edge, just the suggestion of gamification is enough to trigger some people to walk out." CreationDate="2017-09-27T08:36:03.883" UserId="41" />
  <row Id="8347" PostId="3693" Score="0" Text="Thank you for the general advice. :) My classes are mostly hands-on classes with lot of practice, so not a lot of frontal lectures in it. Anyhow, I'm looking for actual wake-up exercise ideas. Nap time, role playing algorithm, related questions session - good ideas. I'll leave the question open though in hopes of more. Thanks!" CreationDate="2017-09-27T07:44:49.763" UserId="51" />
  <row Id="8642" PostId="3694" Score="0" Text="The problem is that humans tend to use non-explicit algorithms to sort. Give someone ten cards, and they'll be able to look at the cards and do the majority of the processing in their heads. And if you give them ten cards, A to 10, they can just sort based on sorted[i][card_value] = i." CreationDate="2017-10-05T17:53:45.327" UserId="3225" />
  <row Id="8644" PostId="3694" Score="0" Text="@Acccumulation When I watched them they usually did insertion sort. The scanning/searching was hard to see, but the putting them in order is easy to see." CreationDate="2017-10-05T18:11:57.373" UserId="204" />
  <row Id="8351" PostId="3695" Score="3" Text="I wonder whether your primary mission is to create scholars or professionals. Are you mostly getting students ready for university or for jobs in industry? I think those sorts of overall goals should have a strong influence on what you do." CreationDate="2017-09-27T14:14:01.173" UserId="1293" />
  <row Id="8353" PostId="3696" Score="13" Text="I disagree that `goto` has no place; I would agree that there is little value in teaching it to new programmers: it can be mentioned (and discouraged) and they can work it out for themselves when (if) they need it. There is nothing to it if you can already 'read' code, and one is more likely to understand why it is generally inadvisable with an existing understanding of higher-level flow-control techniques (as opposed to &quot;Here is `goto`! NEVER USE IT&quot;)" CreationDate="2017-09-27T18:29:27.560" UserId="1333" />
  <row Id="8357" PostId="3696" Score="28" Text="As an old programmer (learned on a TRS-80 in 1980), I think that teaching GOTO **is** a good idea, because it teaches the students that at the bottom of all that fancy flow control and OO stuff are nothing but jumps (both conditional and unconditional) and pointers." CreationDate="2017-09-27T20:32:15.670" UserId="3132" />
  <row Id="8363" PostId="3696" Score="8" Text="You'd be surprised how many people don't seem to get &quot;the computer does things in the order they're written&quot; - flowcharts *might* help explain that." CreationDate="2017-09-27T23:31:10.190" UserId="1275" />
  <row Id="8368" PostId="3696" Score="7" Text="@immibis &quot;computer doing things in order&quot; : a typical misunderstanding is thinking that during a `while ( x != 0) { statements; }`, the `x` variable is monitored  during the statements execution, and the loop break as soon as `x` gets the value 0." CreationDate="2017-09-28T06:59:45.107" UserId="2103" />
  <row Id="8371" PostId="3696" Score="40" Text="If you don't teach the kids about `goto`, they will learn it on the streets." CreationDate="2017-09-28T07:50:58.210" UserId="3138" />
  <row Id="8411" PostId="3696" Score="2" Text="You are confusing the &quot;goto concept&quot; with the &quot;goto keyword&quot; - the latter of which is generally considered bad, but that's actually more of a religious objection than a practical one. Every loop, every recursion, every function call, is a GOTO/GOSUB conceptually. We can't program anything without that concept." CreationDate="2017-09-28T16:14:12.063" UserId="1257" />
  <row Id="8413" PostId="3696" Score="0" Text="@Jasmine the article is advocating direct use of goto, that is by using the `goto` keyword. I have said that goto is useful in teaching assembler language (they have branch/jump instructions)." CreationDate="2017-09-28T16:28:47.097" UserId="204" />
  <row Id="8428" PostId="3696" Score="2" Text="[Relevant xkcd](http://xkcd.com/292/)" CreationDate="2017-09-28T18:35:33.570" UserId="3146" />
  <row Id="8436" PostId="3696" Score="1" Text="Flow charts show up again in intermediate computer science in the form of finite state machines, which are basically flowcharts with set theory thrown at them in order to be mathematically precise." CreationDate="2017-09-28T21:42:32.977" UserId="1360" />
  <row Id="8443" PostId="3696" Score="2" Text="Look at it from the other end of the telescope:: Language features like if-then-else, while loops, break and continue keywords in loops, case constructs, catch-throw exceptions, function calls, recursion, etc, etc are just syntactic sugar to avoid using that nasty G-word (and in some instances, to avoid explicitly using a stack as well). Of course you can use the G-word for other programming purposes as well as the ones where the language designers gave you a sugar-coated alternative - and some of them are perfectly good ways to write code in real life, but others are not!" CreationDate="2017-09-29T02:42:32.390" UserId="1352" />
  <row Id="8483" PostId="3696" Score="1" Text="There is always value in teaching flow charts, at least in my opinion. (Disclosure: I am not an educator, just a programmer :) )" CreationDate="2017-09-29T17:40:03.237" UserId="3165" />
  <row Id="8485" PostId="3696" Score="0" Text="@Restioson your comment has no information, except that you have an opinion. Can you elaborate?" CreationDate="2017-09-29T18:48:10.410" UserId="204" />
  <row Id="8508" PostId="3696" Score="0" Text="@ctrl-alt-deor oh, I'm sorry, I accidentally left that out I guess. Essentially, I see great value in being able to reconcile code with the flow of your program, and being able to visualise it like that. It's an exceptionally useful debugging tool too - whenever I have mangled or wrong output, I mentally step through my program, like a flowchart, to see what's gone wrong" CreationDate="2017-09-30T09:11:25.650" UserId="3165" />
  <row Id="8510" PostId="3696" Score="0" Text="@ctrl-alt-delor Not to be flippant, (well, a little) but what is `IF THEN ELSE` but a giant Go-To? As in: **Step-Skipper**?&#xA;But please show us the 1960 article, so we can judgje for our selves.     &#xA;For now, it seems that your own biases have led you to a hasty judgment." CreationDate="2017-09-30T13:15:41.947" UserId="3174" />
  <row Id="8513" PostId="3696" Score="0" Text="@GwenKillerby I have added a link to one of the copies of the paper. You are correct `if` `then` `else` `while` `for` etc all use `goto`, however Dijkstra's argument was that these are some safe ways to use `goto`. We call it structured programming. I and others would argue that this is not enough, that conditionals, and mutation are also a problem, but like `goto` they can be tamed with appropriate structures. I use conditionals and mutation very little, and have an intuition an how to use them well. As a consequence my code have very few bugs." CreationDate="2017-09-30T16:53:06.347" UserId="204" />
  <row Id="8539" PostId="3696" Score="0" Text="goto *can* be helpful in languages such as C to avoid repeating oneself in error handling code, where its scope handling provides a legitimate advantage, as well as in escaping multiple nested loops." CreationDate="2017-10-02T04:22:14.843" UserId="3189" />
  <row Id="8558" PostId="3696" Score="2" Text="Last flowchart I did was in 1979, and I never had much faith in them even when I was taught them in 1971. For a start they reduce every non-trivial and trivial action or decision to the same sized box. For another thing, they draw on graphic skills that CS students tend not to have: at least I didn't. There is no harm and indeed a considerable necessity in teaching `JMP`, but `goto` as a language construct has certainly seen its last hurrah." CreationDate="2017-10-03T09:38:20.533" UserId="3202" />
  <row Id="8708" PostId="3696" Score="1" Text="I never teach this statement. It is a guaranteed creator of congealed spaghetti code.  Do things in a structured way." CreationDate="2017-10-09T01:43:52.803" UserId="21" />
  <row Id="8735" PostId="3696" Score="0" Text="structured-programming control structures are not always the clearest way to express the variety of &quot;structures&quot; you have in mind when programming. An easy example : business application where you have to do a dozen of tests (like field contents is numeric or blank, value doesnt exceed something etc.) before doing the real job.  You probably dont have a 12-level intrication in mind." CreationDate="2017-10-11T10:14:58.033" UserId="2103" />
  <row Id="8736" PostId="3696" Score="0" Text="@MichelBillaud I have worked on very complex systems. I write highly structured code, and never go beyond 4 levels of indentation, and rarely more than 3. I have heard all the excuses before. You can not untangle spaghetti; If you think spaghetti, it is too late. You can not convert it in to structured." CreationDate="2017-10-11T13:37:14.513" UserId="204" />
  <row Id="8738" PostId="3696" Score="0" Text="@ctrl-alt-delor I'm impressed by the argument of authority :-) I'm not advocating for spaghetti code. If you have ten things to check before doing some thing, better write is as &quot;action 1 ; if test1 fails return; action 2, if test2 fails return; .... if test10 fails return; you_can_do_it_now()&quot; the code is easier to maintain than multi level imbrication.  That's not unstructured code, but structured ideas expressed in a language lacking the proper control structures. Talking about authorities in SP, even Disjkstra had his &quot;skip&quot; and &quot;abort&quot; statements..." CreationDate="2017-10-11T16:20:48.400" UserId="2103" />
  <row Id="8739" PostId="3696" Score="0" Text="@MichelBillaud I have just noticed in your fist comment: “control structures are not always the clearest way to express the variety of &quot;[control] structures&quot;”. I think you are saying that sometimes even modern languages, lack the needed control structures, so sometimes we still need to synthesise them with a jump/goto. (see my answer, I think I covered this.)" CreationDate="2017-10-11T18:01:33.213" UserId="204" />
  <row Id="8352" PostId="3697" Score="1" Text="I have used a tool to automaticaly create UML class diagrams form code. Because we needed them, it was policy." CreationDate="2017-09-27T18:29:07.867" UserId="204" />
  <row Id="8356" PostId="3697" Score="6" Text="Flowcharts work well as a tool to define/describe the desired flow (on a higher level) of a program. They can be important tools when explaining your program to a stakeholder or when attempting to grasp a new subject domain that you are developing for. I would argue they're not a waste of time to learn when used correctly." CreationDate="2017-09-27T19:51:16.193" UserId="3131" />
  <row Id="8378" PostId="3697" Score="0" Text="There are cases where you really *need* goto or labelled break. Example : &#xA;&#xA;    outer_loop :  for (X x : list_of_X) { &#xA;                          for (Y y: list_of_Y) { &#xA;                             if (some_condition(x,y)) { &#xA;                                do_something_with(x,y); &#xA;                                break outer_loop; &#xA;                          } }" CreationDate="2017-09-28T09:01:09.887" UserId="2103" />
  <row Id="8382" PostId="3697" Score="0" Text="Well, _need_ is relative. You have set up a case in which a targeted break is really _convenient_ but there are other solutions to such a problem. Otherwise Python programmers would be just _stuck_." CreationDate="2017-09-28T11:13:29.177" UserId="1293" />
  <row Id="8383" PostId="3697" Score="0" Text="Nor is a targeted break, precisely speaking, a _goto_, though easy to explain as if it were, assuming your students know about `goto`. But it isn't necessary to explain it as a specialization of a wild _goto_ when they don't." CreationDate="2017-09-28T11:24:04.767" UserId="1293" />
  <row Id="8385" PostId="3697" Score="0" Text="@buffy, My best effort, with a boolean, looks like this &#xA;`boolean want_to_leave = false;&#xA;for (int i = 0; ! want_to_leave &amp;&amp; i &lt; list1.size(); i++) {&#xA;  String w1 = list1.get(i);&#xA;  for (int j = 0; ! want_to_leave &amp;&amp; j &lt; list2.size(); j++) {&#xA;    String w2 = list2.get(j);&#xA;    if (w1.length() == w2.length()) {&#xA;      println(w1, &quot; &quot;, w2);&#xA;      want_to_leave = true;&#xA;    }&#xA;  }&#xA;}`  and doesnt seem much clearer than `outer: &#xA;for (String w1 : list1) {&#xA;  for (String w2 : list2) {&#xA;    if (w1.length() == w2.length()) {&#xA;      println(w1, &quot; &quot;, w2);&#xA;      break outer;&#xA;    }&#xA;  }&#xA;}`." CreationDate="2017-09-28T13:27:31.980" UserId="2103" />
  <row Id="8445" PostId="3697" Score="1" Text="@Buffy have you actually USED Fortran in the 20 years or so? You do realize it now even has classes? - plus a whole range of other &quot;structured&quot; features of course. Sure, there are one or two things that still *need* the concept of gotos and statement labels (like low-level error handling in I/O statements) but those are very much a minority - and of course you can (and should!) encapsulate the low-level I/O in its own classes and/or modules, so the implementation is invisible to the rest of the program! Teaching people Fortran IV is about half a century out of date now." CreationDate="2017-09-29T03:03:12.743" UserId="1352" />
  <row Id="8648" PostId="3698" Score="0" Text="It's customary to include a comment when downvoting." CreationDate="2017-10-05T21:17:10.657" UserId="3127" />
  <row Id="8369" PostId="3699" Score="20" Text="People should actually read Dijkstra's letter. He states the less gotos, the better. The context at the time was &quot;goto's for everything&quot;, including decision and repetitions. Dijsktra advocated that programming languages should include constructs (like while/repeat until, if-then-else) helping to avoid the use of goto. Didn't say that loops/if-then-else were sufficient constructs to get clear code without gotos (talks about Jacopini's theoretical way to eliminate all gotos, where euphemistically &quot;the resulting flow diagram cannot be expected to be more transparent than the original one&quot;)." CreationDate="2017-09-28T07:20:29.873" UserId="2103" />
  <row Id="8387" PostId="3699" Score="0" Text="Actually, D. Knuth _agreed_ with E. Dijsktra. He just provided a more detailed view, with good examples of &quot;no-so-easy to remove gotos&quot; (with arguments on clarity and optimization: error management, n+1/2 loops, etc.), and honestly explained he had lot of difficulties to change his programming  habits. Anyway, it doesnt hurt to explain that what happens in a program actually turns into ridiculously small things like moving data, comparing it, and jumping elsewhere." CreationDate="2017-09-28T13:40:40.073" UserId="2103" />
  <row Id="8406" PostId="3699" Score="8" Text="Yes, Dijkstra was a _purist_. He was also extremely arrogant. But he wasn't wrong as I think you are trying to imply. Yes, there was controversy about his claims at the time, but the paper influenced the development of _every_ later language. It has taken a while to eliminate goto altogether, of course, but the trend is now nearly complete." CreationDate="2017-09-28T15:51:20.237" UserId="1293" />
  <row Id="8415" PostId="3699" Score="2" Text="@Buffy Dijkstra's paper protects (in part) against [these practices](https://softwareengineering.stackexchange.com/a/118793/239446).The thing is, those practices aren't supported by higher level languages. It was absolutely correct when he wrote it, but technology has changed. It's like us sticking with QWERTY. Back when it was designed, it made sense. Now, it doesn't at all. Obviously, I'm not switching to DVORAK anytime soon, but can we at least agree that advice from 50 years ago using different technology might not be the gold standard for the technology we have today?" CreationDate="2017-09-28T16:35:42.530" UserId="1578" />
  <row Id="8420" PostId="3699" Score="11" Text="Dijkstra was right for most cases and purposes. Can I just ask if people criticising the approach have any experience of trying to teach low ability 12 year old children? When I trained to teach my biggest problem is I thought I could just explain things and children would understand. In reality I had been hanging out with the top 10% of the ability range (even in school I had no idea about the struggle of bottom sets.) I also teach year 11 maths and pupils struggle with place and value along with adding negative numbers. It is a different world." CreationDate="2017-09-28T17:19:59.407" UserId="3129" />
  <row Id="8423" PostId="3699" Score="9" Text="@PaulPowell I have taught exactly one 12 year old to code (although to be fair, it was me). In support of what you're saying, I was learning TI-BASIC, so I learned what a goto was before a for-loop, and it made perfect sense. &quot;Computers always read the next line of code unless you tell it to jump to a different line instead.&quot; Can't get much easier than that. When I got to loops and method calls which implicitly jump around, the first thing I'd do was mentally stick the `goto`s in and then they made sense too. I couldn't imagine learning loops first (or, god forbid, how a stack pointer works)." CreationDate="2017-09-28T17:38:29.853" UserId="1578" />
  <row Id="8429" PostId="3699" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](http://chat.stackexchange.com/rooms/66358/discussion-on-answer-by-paul-powell-is-there-any-value-in-teaching-goto-or-flowc)." CreationDate="2017-09-28T18:50:12.570" UserId="27" />
  <row Id="8451" PostId="3699" Score="0" Text="I want to downvote this because I completely disagree with it, but you have direct experience with 12 year olds and I don't so I won't." CreationDate="2017-09-29T09:38:12.450" UserId="2172" />
  <row Id="9146" PostId="3699" Score="0" Text="I still need to be convinced of the value of teaching `goto`, even to low ability kids (How low ability are they? Are they brain damaged, or just farther behind than others?) I can see that `goto 1` is an easy place to start, it is easier that using `for` or `while`, but what next. Can you show some evidence (anecdotal is ok) of how it helped you." CreationDate="2017-12-03T15:33:12.633" UserId="204" />
  <row Id="8360" PostId="3700" Score="1" Text="There is a fourth one: `throw`." CreationDate="2017-09-27T21:10:45.993" UserId="653" />
  <row Id="8361" PostId="3700" Score="1" Text="@PaŭloEbermann And `System.exit()`." CreationDate="2017-09-27T22:25:33.260" UserId="1675" />
  <row Id="8362" PostId="3700" Score="1" Text="Also note that the Java virtual machine bytecode has unconditional jumps (of course). It could be instructive to show the bytecode for loops and conditional expressions (instead of comparing unrelated 6502 assembler)." CreationDate="2017-09-27T22:33:33.467" UserId="1675" />
  <row Id="8365" PostId="3700" Score="1" Text="@PeterA.Schneider 6502 is useful for me because it is what they have studied, so it's a good point of reference. It's also a beautifully clean and simple assembly language" CreationDate="2017-09-28T01:51:54.580" UserId="27" />
  <row Id="8377" PostId="3700" Score="0" Text="And a fifth one: `switch`" CreationDate="2017-09-28T08:57:07.523" UserId="3137" />
  <row Id="8381" PostId="3700" Score="0" Text="@Manngo `switch` would involve conditional jumps, not particularly unconditional ones (unless you are referring to the `default` at the end?) But in any case, there is a philosophical dissimilarity here. By that measure, so do `if` statements. The purpose isn't to find every jump that a compiler would generate, but rather, to find the ones that pull a program out of the narrative flow of the program (which is the use-case that so readily creates spaghetti code)" CreationDate="2017-09-28T10:11:02.103" UserId="27" />
  <row Id="8398" PostId="3703" Score="3" Text="I think one of the best reasons to teach `goto` is so that people understand why it's problematic.  Often old bad ideas are recycled in software and it's the people that don't know the old ways that get suckered.  While your at it build an app in VB where all the code is buried in button events.  Then change the requirements.  Same goes for [doodleware](http://www.enterpriseintegrationpatterns.com/ramblings/02_doodleware.html)." CreationDate="2017-09-28T14:42:14.290" UserId="2087" />
  <row Id="8554" PostId="3703" Score="0" Text="reminiscent of the Law of Leaky Abstractions https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/" CreationDate="2017-10-02T12:33:15.667" UserId="3198" />
  <row Id="8359" PostId="3704" Score="1" Text="Hey LordFarquaad! Welcome to [cseducators.se]!" CreationDate="2017-09-27T20:59:13.017" UserId="58" />
  <row Id="8366" PostId="3704" Score="1" Text="Don't forget that COBOL is still the most prolific language out there, and all of the flow control in COBOL is through equivalents to GOTO" CreationDate="2017-09-28T01:57:33.837" UserId="1537" />
  <row Id="8370" PostId="3704" Score="1" Text="Although this makes sense as an answer, I'm not sure it will help the subset of teachers most at risk of incorrectly introducing GOTO to their cohort." CreationDate="2017-09-28T07:23:45.927" UserId="41" />
  <row Id="8394" PostId="3704" Score="0" Text="Well, @pojo-guy, you really should update to COBOL 85 or more recent. &#xA;&#xA;Cobol 74 really was a pain in the ***, but since 1985 it has all you need for structured programming : loops, if then else, and even a very interesting EVALUATE verb, much more powerful than the rudimentary switch of C/C++/Java etc :-)" CreationDate="2017-09-28T14:07:01.660" UserId="2103" />
  <row Id="8422" PostId="3704" Score="0" Text="I agree that Evaluate is much more powerful than &quot;switch&quot;, but COBOL is crippled in other ways. Problems that take three lines of java code can take hundreds of lines of COBOL code - for example finding the intersection set of two sets.  Each language expresses different thoughts easily, so they are all valuable." CreationDate="2017-09-28T17:33:22.080" UserId="1537" />
  <row Id="8431" PostId="3704" Score="0" Text="This is a very good point, and one that maybe I should have thought of (given the name of the forum!) before posting my comment!" CreationDate="2017-09-28T19:01:54.543" UserId="1333" />
  <row Id="8456" PostId="3704" Score="0" Text="@pojo-guy COBOL has never been intended as a general purpose language, it has some dark spots, but ir does rather well in its category for a 60y old language. &#xA;Remark that COBOLS's `add A to B C D` is much shorter than `B += A; C+= A; D += A;` :-).  Back to the point, it allows structured programming." CreationDate="2017-09-29T11:55:05.350" UserId="2103" />
  <row Id="8459" PostId="3704" Score="0" Text="@MichelBillaud Structured programming is a way of thinking, as is object oriented programming. I have done both in BASIC (olde style, not what is called BASIC today). COBOL expresses some thoughts more elegantly than other languages, and it is still far from dead. Now that it runs on a JVM, it will live another 60 years." CreationDate="2017-09-29T12:24:50.843" UserId="1537" />
  <row Id="8461" PostId="3704" Score="0" Text="and it officially has objects since 2002, if you're desperate enough to use it (a lot of my students earn their life in Cobol code maintenance for banks - where the money is- but AFAIK everybody sticks to Cobol 85, no objects)." CreationDate="2017-09-29T12:38:35.943" UserId="2103" />
  <row Id="8469" PostId="3704" Score="0" Text="@MichelBillaud it has objects, but they are skewed from what OO programemrs from other backgrounds think of as objects.  As one language junkie and COBOL guru friend of mine says, &quot;Object Oriented COBOL is neither Object Oriented nor COBOL, but it makes a lot of sense for the right problems&quot;" CreationDate="2017-09-29T13:58:17.350" UserId="1537" />
  <row Id="8521" PostId="3704" Score="0" Text="Except you'll never actually be good at it if you don't understand the why.  Thus everyone who is serious about it should learn the why." CreationDate="2017-10-01T03:51:56.857" UserId="668" />
  <row Id="8374" PostId="3707" Score="0" Text="I agree that flow charts in non-programming contexts is often good. For example, to describe a manual procedure. Flowcharts are an abstraction of unstructured code, such as assembler. If your machine is a human, then this is appropriate." CreationDate="2017-09-28T08:37:03.250" UserId="204" />
  <row Id="8438" PostId="3707" Score="1" Text="A former colleague of mine used GOTO as &quot;elegant recovery from inelegant situations&quot; --- dealing with catastrophic error conditions." CreationDate="2017-09-28T22:18:40.823" UserId="1660" />
  <row Id="8470" PostId="3707" Score="1" Text="@PeterK.: A specific example: error handling in a C function that took a lock.  [`linux/mm/msync.c`](https://github.com/torvalds/linux/blob/5924bbecd0267d87c24110cbe2041b5075173a25/mm/msync.c#L103) uses `goto out_unlock;` inside many error-check `if()` clauses.  It implements a system call, so all its args are untrusted, and there are many return-error cases that are only detected after taking a lock.  It's C, so RAII to release the lock isn't an option.  Obviously this applies to any other cleanup task that you don't / can't use RAII for in whatever language." CreationDate="2017-09-29T14:11:30.847" UserId="1654" />
  <row Id="8471" PostId="3707" Score="0" Text="Can also be used for breaking out of a double-nested loop, although that's getting into spaghetti territory if done too much.  Some languages have a `break label` for this.  e.g. PERL has [`next LABEL`](https://perldoc.perl.org/functions/next.html) for outer loops.  Still possible to abuse, though." CreationDate="2017-09-29T14:14:14.297" UserId="1654" />
  <row Id="8523" PostId="3707" Score="0" Text="@PeterCordes actually you can use deeply-nested `if`s to do the same thing. A real anti-goto purist would make you do that. It's not as much of a readibility problem on modern wide monitors..." CreationDate="2017-10-01T04:46:26.913" UserId="1275" />
  <row Id="8737" PostId="3707" Score="0" Text="@immibis it is a code maintainability problem in, say, business programming when you have a lot of things to check before doing something. And the list of tests has to change over time. In this case a flat list of tests + break if they fail is much easier to maintain over time." CreationDate="2017-10-11T15:37:58.863" UserId="2103" />
  <row Id="8375" PostId="3710" Score="0" Text="You have used a flowchart to model a program flow tree, to model a decision tree. Just use a decision tree. This is basically the same as what you have draws, but minor notation change. And more importantly, no suggestion that this is what the program looks like. Imagine writing a program from this flowchart, that can sort 100 items." CreationDate="2017-09-28T08:47:01.577" UserId="204" />
  <row Id="8376" PostId="3710" Score="1" Text="@ctrl-alt-delor sometimes the decision tree grows &quot;indefinitely&quot;, and when you remark two situations are similar, comes the idea of jumping back to a previous point. Then you recognize a loop. Or a regular infinite tree, if you are more mathematically inclined. PS: I dont teach a notation for finished programs, but an approach. When you recognize a loop, you know what is the condition, and what you want to repeat." CreationDate="2017-09-28T08:52:24.467" UserId="2103" />
  <row Id="8372" PostId="3711" Score="0" Text="I agree, except the last paragraph, interrupts cause subroutine calls, not `goto`." CreationDate="2017-09-28T08:06:07.093" UserId="204" />
  <row Id="8379" PostId="3711" Score="0" Text="@ctrl-alt-delor That's just a force-pc with some side effects. Where goto fits as a better analogy is that exceptions are less structured. SVC can be considered a subroutine because it is planned, IRQ less so (although it uses an identical mechanism)." CreationDate="2017-09-28T09:05:10.490" UserId="41" />
  <row Id="8388" PostId="3711" Score="2" Text="Why is while(true): in any way more sensible? Write down a full explanation of how the two bits of code work. Which is simpler to understand?" CreationDate="2017-09-28T13:42:01.190" UserId="3129" />
  <row Id="8389" PostId="3711" Score="0" Text="@PaulPowell `While (true)` captures the intent, not the mechanics of how the code operates. If you look at [tag:coding-style] there are several questions about readability and intent. Professionally, readability is the critical thing students need, so I think this has to come first. Generally, when you start to teach coding, the 'how it works' involves a lot of abstraction, so using 1980's style doesn't make sense. This question has slightly missed the point in your article that the 'how it works' really is important. To explain how it works, `BEQ`, `CBZ` are preferable to `GOTO` IMO." CreationDate="2017-09-28T13:56:54.617" UserId="41" />
  <row Id="8390" PostId="3711" Score="2" Text="@PaulPowell It might be interesting if you ask your question about how control flow teaching is leaving gaps - particularly if you have specific student groups in mind." CreationDate="2017-09-28T13:59:29.023" UserId="41" />
  <row Id="8395" PostId="3711" Score="1" Text="@sean I think it is simpler than leaving gaps. It is about a student being able to express themselves in code. Did you try writing down a full explanation of while true?" CreationDate="2017-09-28T14:15:14.283" UserId="3129" />
  <row Id="8396" PostId="3711" Score="1" Text="Really awkward leaving comments here as I can only access it on mobile at the moment." CreationDate="2017-09-28T14:16:32.567" UserId="3129" />
  <row Id="8462" PostId="3711" Score="0" Text="I'd take a guess and say that it might be easier for some coders to grasp programming when there is one action per line (where each line has text), maybe it's easier for them to understand `JMP wherever` instead of `while(condition) {}` (where the brace at the end means &quot;go back up to the beginning&quot;. When I first started I remember a C `for` loop seemed very daunting and I had a hard time remembering it (e.g.: &quot;When do each of these things in the parentheses even run? Once? After the loop? Before it? Both?&quot;)." CreationDate="2017-09-29T12:45:35.833" UserId="933" />
  <row Id="8465" PostId="3711" Score="1" Text="@jrh - See edit." CreationDate="2017-09-29T13:04:26.707" UserId="41" />
  <row Id="8424" PostId="3712" Score="0" Text="I can't tell what &quot;[hacking... is] completely based on jumps not loops&quot; is trying to get at.  I would suggest removing your third bullet point, or trying to provide evidence for it.  That doesn't match my experience of security.  Are you perhaps trying to hint at ROP attacks?  But that's something entirely different; ROP has to do with CALL/RET instructions, and I don't see what the difference between jumps vs loops has to do with it." CreationDate="2017-09-28T17:43:22.643" UserId="1106" />
  <row Id="8426" PostId="3712" Score="0" Text="Anyone analysing malware, or looking at vulnerability testing that requires analysis of compiles software, will need to dip into assembler. Which means understanding assembler, CPU address (+other) stacks (and perhaps interrupts) and so on. Which means understanding code that exclusively uses jumps and branches, such as JMP/JEQ/JL/JNE (or whatever the equivalent is on your CPU/SCAD). AKA understanding goto. Crucial for infosec work." CreationDate="2017-09-28T18:16:28.850" UserId="1629" />
  <row Id="8437" PostId="3712" Score="0" Text="That's an argument for eventually teaching students assembly language, at least if they want to do infosec reverse engeering.  That's not the same as an argument for teaching goto.  And it has nothing to do with &quot;jumps vs loops&quot;." CreationDate="2017-09-28T22:08:46.733" UserId="1106" />
  <row Id="8493" PostId="3712" Score="0" Text="@D.W. I think that by “goto also has considerable importance in security/vulnerability”, Stilez means “goto is important to write native exploits”. Which is true, as part of the more general fact that writing native exploits requires a very good understanding of how a machine executes a program. But teaching how to write exploits is not relevant to  the context of the question, which is teaching to fairly novice students (the author of the article seems to insist that it's especially relevant for middle school students)." CreationDate="2017-09-29T21:41:21.000" UserId="124" />
  <row Id="8494" PostId="3712" Score="0" Text="By the way, the statement “at a low level there are no loops, only conditional and unconditional gotos” is partly wrong (some processors do more than that for you, e.g. they manipulate the stack, and conversely a jump can actually be *more* than a goto if it involves changing processor modes). It's also misleading, because even in microcontroller programming, very little code is written in assembly and goto is rarely used in C, let alone higher-level languages." CreationDate="2017-09-29T21:45:40.200" UserId="124" />
  <row Id="8509" PostId="3712" Score="0" Text="This isn't hard to understand. C wont help you, nor is it about writing exploits. Example paper: malware analysis of stuxnet: https://www.codeproject.com/KB/web-security/StuxnetMalware/Stuxnet_Malware_Analysis_Paper.pdf . Among the earliest pages (bottom of p.6) is _&quot; at the place of the entrypoint of the unloaded module, stuxnet writes a &quot;jmp&quot; instruction&quot;_. `jmp`. That's effectively `goto`. Is there any value in &quot;teaching goto&quot;? Evidently yes, if analysing malware, or you won't be able to do so." CreationDate="2017-09-30T09:37:44.490" UserId="1629" />
  <row Id="8400" PostId="3713" Score="0" Text="I feel this question is lacking a clear definition... Is your Pseudo-Code just a weakly structured language with implicit gap filling? The Arm Architecture defines a formalised Pseudo-Code which is used to completely describe the architecture..." CreationDate="2017-09-28T14:50:19.767" UserId="41" />
  <row Id="8559" PostId="3713" Score="0" Text="sudo code: “The command you type to get the computer to do a task as admin?” — One pupil of mine." CreationDate="2017-10-03T10:00:23.830" UserId="204" />
  <row Id="15993" PostId="3714" Score="0" Text="In the now OCR spec, they have changed most references to pseudo code to (some thing like) reference language." CreationDate="2019-12-24T10:56:06.340" UserId="204" />
  <row Id="8384" PostId="3715" Score="0" Text="Yes, when reading this, is realised that as a professional developer I have **sometimes** invented a Domain Specific Language, and used that to help me design a program. Because I had not written a compiler for it, it was a pseudo-code." CreationDate="2017-09-28T13:12:15.543" UserId="204" />
  <row Id="8533" PostId="3715" Score="1" Text="Sometimes, I have wondered if pseudocode is actually more useful to students who have learned basic programming rather than complete beginners. To be able to write good pseudocode, the programmer needs to be able to pinpoint the appropriate level of abstraction which is something beginners have a hard time doing." CreationDate="2017-10-01T21:18:54.333" UserId="3187" />
  <row Id="8430" PostId="3716" Score="2" Text="This is your second great question here on cseducators.  Feel free to come by [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi!" CreationDate="2017-09-28T18:57:02.720" UserId="27" />
  <row Id="8502" PostId="3716" Score="1" Text="There's lots of boolean algebras that aren't just on the set {True, False}. e.g. take a big square-free number; then its divisors form a boolean algebra where conjunction is lcm and disjunction is gcd. The &quot;truth table&quot; approach can easily be made unapproachably tedious (or even infinite!) with a careful choice of boolean algebra." CreationDate="2017-09-30T05:20:54.367" UserId="3171" />
  <row Id="8760" PostId="3716" Score="0" Text="Your final question is intriguing. Booleans have some deep properties. See, for example: [http://en.wikipedia.org/wiki/Cook–Levin_theorem](http://en.wikipedia.org/wiki/Cook–Levin_theorem). I doubt you were trying to get to situations where that would apply, but it is worth a look." CreationDate="2017-10-14T19:56:54.147" UserId="1293" />
  <row Id="16423" PostId="3716" Score="0" Text="Ask them for a legend for their graphic--how to determine what proposition the table states." CreationDate="2020-04-29T23:39:53.887" UserId="2485" />
  <row Id="8402" PostId="3717" Score="0" Text="Good to know your history, of course: https://en.wikipedia.org/wiki/Structured_program_theorem. You have something nice and tricky, but not essential." CreationDate="2017-09-28T15:33:30.173" UserId="1293" />
  <row Id="8403" PostId="3717" Score="1" Text="@Buffy I guess nothing is &quot;essential&quot; if you give up on readability. I really like the &quot;Single-while-loop, folk version of the theorem&quot; section from the page you linked, even if it addresses an extreme form of what you have to do with control flags (`p` is completely artificial, and is only needed because of the shortcomings of the structured flow). I especially like the last quote before the block of code, which neatly sums up my PoV." CreationDate="2017-09-28T15:38:44.177" UserId="2038" />
  <row Id="8404" PostId="3717" Score="0" Text="I worry about &quot;readability&quot;. Suppose that your &quot;simple&quot; flowchart results in code that is spread over about 5 pages. Is it still &quot;readable&quot;. The history of computing languages seems to imply that go-to should just go. Python, Scala, etc, don't include it and there are other ways to think than with low level structures. These result in cleaner and more maintainable code. One problem with go-to is that it often results in &quot;write-once&quot; or even &quot;write-only&quot; software that is impossible to maintain in the face of changing requirements." CreationDate="2017-09-28T15:45:56.540" UserId="1293" />
  <row Id="8405" PostId="3717" Score="0" Text="For Ruby's support of goto see: http://patshaughnessy.net/2012/2/29/the-joke-is-on-us-how-ruby-1-9-supports-the-goto-statement" CreationDate="2017-09-28T15:46:17.097" UserId="1293" />
  <row Id="8407" PostId="3717" Score="1" Text="A five-page nested loop won't do you any good either, so that's a job for another structuring tool (namely, functions). Anyway, there's no doubt that structured control flow is a benefit in the overwhelming majority of cases. But wanting, in the tiny number of cases when it isn't enough, to simulate a goto by misusing a control structure is just a bad idea. The tell-tale symptom is the apparition of infinite or do-once loops with `breaks`, or the proliferation of control flags. That's not &quot;more maintainable&quot; code in the slightest compared to a simple labeled `goto`." CreationDate="2017-09-28T15:57:02.083" UserId="2038" />
  <row Id="8408" PostId="3717" Score="0" Text="Hmmm. No one is suggesting misusing other control structures. And yes, functions are one of the classic ways to solve many such control issues. Could you imagine suggesting such a control structure to a Scheme programmer? You seem to be insisting that such things are _needed_. They are not. Finding out why and how will expand your horizons, I think." CreationDate="2017-09-28T16:06:23.833" UserId="1293" />
  <row Id="8409" PostId="3717" Score="0" Text="For a little more perspective. For &quot;replacements&quot; of some of these poor control structures a small local change may not do the job, resulting in even poorer code and misuse of structures. Sometimes you want to step back and re-think the algorithm. There is likely a clearer, simpler, more readable, more maintainable way to do it. I'd suggest the Gries book mentioned elsewhere here (The Science of Programming) as a good place to learn such things. https://www.amazon.com/Science-Programming-Monographs-Computer/dp/038790641X" CreationDate="2017-09-28T16:11:45.207" UserId="1293" />
  <row Id="8410" PostId="3717" Score="0" Text="@Buffy you can implement it in a functional language by wrapping it in a function, and tail-recursing from the first condition. That's not ideal in imperative languages though. As for misusing control structures, ending up with loops that don't actually loop, or depend on some phantom flag unrelated to the data you're processing, or have their condition in a weird place (granted, that one is pretty tame) seems definitely off." CreationDate="2017-09-28T16:11:51.003" UserId="2038" />
  <row Id="8412" PostId="3717" Score="0" Text="Procedural languages can do tail recursion as well: The C and C++ specifications allow it, but do not mandate it. `gcc` implements it. But tail recursion is no more `goto` than `if` is. It is a `while` with out mutation." CreationDate="2017-09-28T16:26:10.213" UserId="204" />
  <row Id="8416" PostId="3717" Score="0" Text="@ctrl-alt-delor it still isn't that idiomatic, and might not fit the meaning of the algorithm. Not sure about your comparison with `goto`: tail recursion is equivalent to just jumping back to the beginning of the function, while wiping the stackframe." CreationDate="2017-09-28T16:42:15.323" UserId="2038" />
  <row Id="8417" PostId="3717" Score="0" Text="@Buffy I do make this answer on the premise that this flow *is* the best you can do to model your requirements. I also didn't design it, but actually stumbled upon it while writing actual C++ code. I've also been bitten by another case in Java, which doesn't have `goto` and left me needing to write a degenerate `do`-loop with `break`s so I could skip to the end." CreationDate="2017-09-28T16:47:09.187" UserId="2038" />
  <row Id="8418" PostId="3717" Score="0" Text="@I can accept that tail recursion is goto, when I accept that while and if are goto. Depends how you look at them. I prefer mainly to look at there structure not their implementation. I too have sometimes had to do weird things with goto and flags. I have come to realise that it because the languages we use don't have the higher order structures. Same as in the 1960s we used goto because we did not have the basic structures (while,for,if). There are still other higher order structures. If our languages did them, then we would not need to do weird stuff." CreationDate="2017-09-28T17:03:29.950" UserId="204" />
  <row Id="8419" PostId="3717" Score="0" Text="@ctrl-alt-delor yes, maybe some new structures would be the solution, so we can avoid falling back to `goto` and its caveats. I'm purposefully avoiding the &quot;but a `while` is just a `if+goto` in disguise&quot; argument because it's moot, for the reason you stated. I do invite you, though, to try implementing that flowchart, and then verify that each abstraction and structure you used is actually meaningful -- loops actually loop, conditions are about the (imaginary) data you're processing, and there's no weird flags floating around. Maybe you'll get a great idea for the missing structure :)" CreationDate="2017-09-28T17:11:20.070" UserId="2038" />
  <row Id="8421" PostId="3717" Score="0" Text="@Quentin I took up this challenge once before, when it was a concrete problem. So I could re-write it. But I agree that this abstract problem is not elegantly solved." CreationDate="2017-09-28T17:25:16.207" UserId="204" />
  <row Id="8457" PostId="3717" Score="0" Text="Use the Jacopini method:  1. Give different a block-number to each block. 2. Define a `next_block` variable with initial value 1.  3. replace first action by `if (next_block == 1) { instructions for action 1; next_block = 2 }`. 3. Replace first test (block 3) by `if (next_block == 3) { if (condition1) next_block = 1; else next_block = 4;`. Do the same for all, use number 0 for exit. 5. Put it all in a `while(next_block != 0)` loop. 6. Done: structured flowchart where all the logic disapeared and nobody can understand anymore. &#xA;That what Dijkstra was referring to." CreationDate="2017-09-29T12:06:08.550" UserId="2103" />
  <row Id="8460" PostId="3717" Score="0" Text="Seems your flowchart can be written as `action1; aux; action3; while(condition2) { aux; action3;}, action4`, where `aux` is `action2; while(condition1) { action1; action2} ;`.    (obtained by loop unfolding)" CreationDate="2017-09-29T12:26:59.573" UserId="2103" />
  <row Id="8464" PostId="3717" Score="0" Text="@MichelBillaud but then you have duplicated code." CreationDate="2017-09-29T12:48:05.197" UserId="2038" />
  <row Id="8466" PostId="3717" Score="0" Text="@Quentin If it is a problem to have the same code, change the names. Well, no, better idea, put the repeated code in a function, and call it where it is needed.  Joke aside, It is probably a theorem &quot;given a finite set of 'flowchart schemes' there are flow charts where gotos cannot be be removed without code duplication or use of extra variable.&quot; Should check. So the the point would be : what are the schemes needed for most practical use ?" CreationDate="2017-09-29T13:35:09.530" UserId="2103" />
  <row Id="8467" PostId="3717" Score="0" Text="@MichelBillaud as an anecdote, this very scheme popped up while I was implementing a turn scheduler similar to that of HoMM5, which handled a list of actors and had to work with turn skipping, reordering, etc." CreationDate="2017-09-29T13:49:35.483" UserId="2038" />
  <row Id="8468" PostId="3717" Score="0" Text="@Quentin It means that a specific structure is needed to express clearly what you need to do, which seems to be retrying previous steps.  `#define retry(label) goto label`" CreationDate="2017-09-29T13:56:06.930" UserId="2103" />
  <row Id="8435" PostId="3718" Score="0" Text="&quot;Discussing simple circuits (gates) might also give some an incentive to do more&quot; ... but don't teach them about Karnaugh maps, or you have given them another reason *not* to mess about with Boolean algebra! [/devil]." CreationDate="2017-09-28T20:27:28.843" UserId="1352" />
  <row Id="8434" PostId="3719" Score="0" Text="You're right; I need to consider what my learning goals actually are. I think I have two reasons for teaching this practice: (1) manipulating logical expressions is a common activity in computer programming, and (2) practice with algebra of any kind helps with the mental skill of mathematical abstraction." CreationDate="2017-09-28T20:11:11.103" UserId="587" />
  <row Id="8442" PostId="3719" Score="3" Text="Yet in the workplace, if you presented boolean algebra math to &quot;prove&quot; something, most people will not understand it.  I don't care if the truth table has 1000 rows; everyone can understand that!&#xA;&#xA;And if you have a problem that has EIGHT variables, then it's time to break the problem down to smaller bits... god be damned if I were to look at an SQL statement with 8 joins, or an if statement with 8 conditions." CreationDate="2017-09-29T02:30:41.203" UserId="1285" />
  <row Id="8444" PostId="3719" Score="6" Text="@Nelson -- I disagree with the claim that most people in a workplace don't understand basic boolean algebra laws. If a dev doesn't understand things like De Morgan's law or laws like `(a &amp;&amp; b) &amp;&amp; c == a &amp;&amp; (b &amp;&amp; c)` or `(a || !a) == true`, then they're grossly incompetent and should never have been hired, full stop. I'm also not sure why you have &quot;prove&quot; in scare quotes. Applying boolean algebra laws is a perfectly valid proof strategy, as is generating a truth table." CreationDate="2017-09-29T03:01:44.550" UserId="732" />
  <row Id="8446" PostId="3719" Score="6" Text="@Nelson -- Also, regarding truth tables not scaling if you have many variables: are you familiar with the SAT problem as well as SAT solvers, SMT solvers, and the like...? They're pretty useful and come up in several subfields of CS/software engineering -- it turns out the SAT problem is NP-complete, and SAT solvers can do a pretty good job of efficiently finding solutions in most (though not all) cases. When you're taking your domain-specific NP problem and converting them into propositions to feed to your SAT/SMT solver, it's not uncommon to generate thousands or millions of variables." CreationDate="2017-09-29T03:05:20.037" UserId="732" />
  <row Id="8453" PostId="3719" Score="3" Text="@Michael0x2a A lot of my completely competent colleagues of mine throughout the years would have had no ideas about De Morgan's law... and yet they were able to program things of amazing complexity. That's the thing, sure, a law like that can save you a couple of seconds or give marginally clearer code, but in the end 99.99% of real world programming has nothing to do with that. So calling those types of programmers incompetent and not worth hiring is beyond naive and rude, showing a complete lack of understanding of the real world." CreationDate="2017-09-29T11:22:50.893" UserId="675" />
  <row Id="8455" PostId="3719" Score="0" Text="In a programming-teaching context, you have to convince students that boolean expressions ARE expressions, not things that only appear as condition parts of if, for, while etc. As expressions, computations can be done on them, and some computations can be simplified/clarified either by case analysis (truth tables) or routine transformations (algebraic laws). Unfortunately, De Morgan laws don't really work in this context, as evaluation is often left-to-right with some reason `( i==n || t[i] == x)`... so **multivalued logic should be used instead** (sorry for the math teacher :-))" CreationDate="2017-09-29T11:41:39.553" UserId="2103" />
  <row Id="8473" PostId="3719" Score="0" Text="@DavidMulder -- sure, I can concede that some devs might legitimately have never heard of De Morgan's law. But I still stand by the rest of my assertion -- are you really claiming that your co-workers are completely incapable of understanding things like why `(a &amp;&amp; b) &amp;&amp; c == a &amp;&amp; (b &amp;&amp; c)` and `(a || !a) == true` are true? I find that extremely hard to believe." CreationDate="2017-09-29T15:37:05.773" UserId="732" />
  <row Id="8474" PostId="3719" Score="0" Text="@MichelBillaud -- I suppose. That said, OP said in their question that this was for an upper division class about specifically discrete math, so I'm making the assumption that the students are already familiar and comfortable with programming." CreationDate="2017-09-29T15:42:16.577" UserId="732" />
  <row Id="8477" PostId="3719" Score="0" Text="@Michael0x2a It's one thing to logically understand such a thing, another entirely to understand one specific abstracted model from which such logic can be derived. Let me put it this way, a decade and a half ago in my early teens I started programming seriously and I am sure I could've reasoned those two things within seconds... yet if I would've opened the Wikipedia page about Morgan's law I would've gotten stuck in literally the first sentence. Personally I never took a computer science education (very intentionally) (cont.)" CreationDate="2017-09-29T15:56:55.740" UserId="675" />
  <row Id="8478" PostId="3719" Score="0" Text="and the only reason why I have any knowledge about the computer scientific model is because I am naturally curious, not because I need it professionally. So yeah, boolean algebra is not something I would recommend anybody to use in a professional setting (unless you're doing some very specific type of tasks which are comparatively rare in the real world)." CreationDate="2017-09-29T15:58:34.747" UserId="675" />
  <row Id="8480" PostId="3719" Score="0" Text="@DavidMulder -- I'm not sure if I agree with your conclusion. There aren't that many boolean algebra laws, and most of them are common sense (for example, things like `a &amp;&amp; b == b &amp;&amp; a`). As a result, I think it's very reasonable to expect devs to be able to follow most boolean algebra proofs, even if they've never been formally taught the material -- after all, all you do is just apply these (mostly) common-sense laws one after the other. That is, I claim all you need to follow a boolean algebra proof is the ability to &quot;logically understand&quot; something, as you put it." CreationDate="2017-09-29T16:52:26.630" UserId="732" />
  <row Id="8481" PostId="3719" Score="4" Text="@DavidMulder -- Regarding De Morgan's law -- sure, if a beginner starts with Wikipedia, they'd be lost, but Wikipedia is pretty obtuse in general. De Morgan's law is usually presented within most intro classes as just two factoids: `!(a &amp;&amp; b) == (!a || !b)` and `!(a || b) == (!a &amp;&amp; !b)` (and the instructor then spends some class time working through truth tables to convince students why this is the case). So sure, I can agree that not everybody might have run into this factoid, but I don't think it's some hugely complicated thing a beginner will have trouble understanding." CreationDate="2017-09-29T16:54:00.487" UserId="732" />
  <row Id="8500" PostId="3719" Score="0" Text="@Michael0x2a I'd be concerned about the opposite.  While I agree that I'd expect a developer to be able to understand that `(a &amp;&amp; b) == !(!a || b)`, the real question would be, if someone made a mistake with said logic, would the developers be able to catch it in a code review?  That's a much harder question.  (And a funnier one too.  You'll know it when you get it!  It was actually quite unintentional)" CreationDate="2017-09-30T01:56:28.657" UserId="812" />
  <row Id="8501" PostId="3719" Score="0" Text="@CortAmmon -- well, that's what things like unit tests, code coverage analysis, mutation tests, fuzz tests, and the like are for, right? To catch accidental errors like that one. But yes, typos can be hard to catch in general. I'm not sure what that fact has to do with boolean algebra in particular? (I also note that correctly applying boolean algebra is likely to *reduce* bugs -- after all, if you simplify an expression, it'll be easier for somebody else to reason about and verify.)" CreationDate="2017-09-30T03:18:23.263" UserId="732" />
  <row Id="8503" PostId="3719" Score="0" Text="@Michael0x2a To catch an error like that, a developer not only needs to understand that laws like DeMorgan's work, but to be able to apply them subconsciously and see that a piece of code just doesn't smell right." CreationDate="2017-09-30T05:24:06.210" UserId="812" />
  <row Id="8504" PostId="3719" Score="0" Text="The thing is, I'll rather put a truth table in a requirements document than expect a client to understand boolean algebra.  I can walk through the truth table, automate the unit tests, and tell them, right then and there, whether my code meets the requirements." CreationDate="2017-09-30T05:34:25.820" UserId="1285" />
  <row Id="8563" PostId="3719" Score="0" Text="@Michael0x2a Actually, laws of Boolean algebras are actually *broken* for conditions in C-like languages.  Think about  `p != nullptr  &amp;&amp;  *p = x`" CreationDate="2017-10-03T11:48:54.903" UserId="2103" />
  <row Id="8433" PostId="3722" Score="1" Text="I think I get what you're saying. A student would have to use the algebra rules to try to find an equivalent expression. A particularly stubborn student might still use two truth tables to prove that the rewrite is equivalent to the original." CreationDate="2017-09-28T19:58:26.483" UserId="587" />
  <row Id="8448" PostId="3722" Score="0" Text="Yes you could use a truth table to check the answer is correct. Therefore you could find the answer by brute force guessing and checking. If they are that stubborn, then you need a question that has too many possible answers, and a large truth table, they are both correlated so $O(n^2)$. You should find (as long as you have done nothing to annoy the student, to make them stubborn), that they are not stubborn, they are just pragmatic. Truth tables are easier, and sufficient, oh now they are not, I now see why boolean algebra may be of use." CreationDate="2017-09-29T07:44:07.967" UserId="204" />
  <row Id="8450" PostId="3722" Score="1" Text="@ctrl-alt-delor: Truth tables are worse than $O(n^2)$, they're $O(2^n)$, which grows a lot faster!" CreationDate="2017-09-29T09:30:20.837" UserId="2337" />
  <row Id="8454" PostId="3722" Score="0" Text="@psmears Anyway, we won't use them with functions with more than 10 arguments, so it is reasonable to use them to compare (by computer) if 2 combinatorial circuits have the same behaviour, and who where the differences are. Just print the (first) lines,  where they differ." CreationDate="2017-09-29T11:27:33.823" UserId="2103" />
  <row Id="8463" PostId="3722" Score="0" Text="@MichelBillaud: Are you sure you're replying to my comment? None of what you say contradicts what I said :)" CreationDate="2017-09-29T12:46:52.930" UserId="2337" />
  <row Id="8476" PostId="3722" Score="0" Text="@psmears I didn't expect the Argument Clinic sketch. My point is : the theoretical complexity is a barrier when values of n are &quot;sufficiently big&quot;." CreationDate="2017-09-29T15:53:58.063" UserId="2103" />
  <row Id="8511" PostId="3722" Score="0" Text="@MichelBillaud no, psmears is just pointing out a mistake" CreationDate="2017-09-30T15:10:04.647" UserId="2401" />
  <row Id="8512" PostId="3722" Score="0" Text="@somebody You are right, psmears is right, and  I should have started by &quot;anyway, whatever the theoretical complexity, it can be handled (by student written programs) in such practical cases with only a few (&lt;= 10 or 20) variables&quot;.  3 methods : truth tables by hand, algebraic transformations, case exhaustion by program." CreationDate="2017-09-30T16:17:58.937" UserId="2103" />
  <row Id="8514" PostId="3722" Score="0" Text="I am not making any sense of the last few comments, so can not tell if you have made any sense of mine. What I am saying is that if you get students to do the type of question in my answer, then the complexity of `repeat until I get it correct: guess an answer, draw up truth table, compare`, should be enough to discourage this approach. This is $O(2^n)$ for the truth table × $O(?)$ for the guesses, which is quite a lot." CreationDate="2017-09-30T17:00:51.337" UserId="204" />
  <row Id="8524" PostId="3722" Score="0" Text="@ctrl-alt-delor Doing truth tables by hand is quick for &lt;= 4 variables, but fastidious enough so students will soon discover the interest of algebraic manipulation of expressions by themselves. &#xA;To answer the OP question : yes, identities valid in all Boolean algebras (true/false, sets, bitvectors, whatever) can always be proved by truth tables on the &quot;basic&quot; true/false algebra." CreationDate="2017-10-01T08:20:52.743" UserId="2103" />
  <row Id="8432" PostId="3723" Score="0" Text="These actually are CS majors; this is a discrete math course for CS majors. I edited my question for clarity." CreationDate="2017-09-28T19:56:02.230" UserId="587" />
  <row Id="8441" PostId="3724" Score="1" Text="Hey MuffinMan! Welcome to [cseducators.se]!" CreationDate="2017-09-29T01:06:24.563" UserId="58" />
  <row Id="8447" PostId="3725" Score="0" Text="And your experience of delivering this knowledge to 28 mixed ability 11 year olds is?" CreationDate="2017-09-29T07:18:32.633" UserId="3129" />
  <row Id="8449" PostId="3725" Score="0" Text="@PaulPowell  Teaching goto is not the problem. It may even be easier that teaching structured programming. But then you have a class full of pupils that need to be un-taught. I have been in gilles position, and have had people on my team that have been taught these bad habits. It can take longer to un-teach them, than it took you to teach them. Use scratch as a basis (this is taught to 7 year olds), then have them translate scratch programs into python (see https://cseducators.stackexchange.com/a/178/204 ). Both languages do not have `goto`." CreationDate="2017-09-29T08:05:46.113" UserId="204" />
  <row Id="8452" PostId="3725" Score="0" Text="I am an experienced Head of Department with a degree in Computer Science and 12 years in industry. Do you really think I have not tried this or thought about it?" CreationDate="2017-09-29T10:22:13.860" UserId="3129" />
  <row Id="8472" PostId="3725" Score="1" Text="Real-world example of `goto` for cleanup: [`linux/mm/msync.c`](https://github.com/torvalds/linux/blob/5924bbecd0267d87c24110cbe2041b5075173a25/mm/msync.c#L103) uses `goto out_unlock;` inside many error-check `if()` clauses.  It implements a system call, so all its args are untrusted, and there are many return-error cases that are only detected after taking a lock.  It's C, so RAII to release the lock isn't an option.  (There are 12,987 hits for `goto` in the Linux kernel tree; all like this or `asm goto` as a way of optimizing `if (asm_statement)` to avoid producing an actual boolean.)" CreationDate="2017-09-29T14:23:03.093" UserId="1654" />
  <row Id="8479" PostId="3725" Score="2" Text="@PaulPowell I don't have any experience teaching this to 11 year olds, but I have as much industry experience, and I'm telling you that your teaching will neither make them better programmers nor make it easier for them to learn. The example you cite from the Linux kernel is an example of the pattern I state as being the only common use case for goto in my world." CreationDate="2017-09-29T16:36:29.190" UserId="124" />
  <row Id="8482" PostId="3725" Score="0" Text="Firstly, the Linux comment wasn't made by me. Secondly, If you have no experience of KS3 education then what, apart from the height of arrogance, compels you to presume it works how you think it does?" CreationDate="2017-09-29T17:12:18.330" UserId="3129" />
  <row Id="8486" PostId="3725" Score="0" Text="&quot;If you think it's just a jump, you don't understand goto&quot;  Wow, well aren't you a gate keeper?  We don't need this kind of language on any Stack Exchange site, especially not a site for educators with the explicit purpose of making CS education better.    Always, *always* explain after statements &quot;if you think X, your are wrong&quot;.  If you don't, all you've said is &quot;I think I know something you don't, and I just wanted to let you know that&quot;, and I really hope I don't have to explain what is wrong with that statement." CreationDate="2017-09-29T20:36:15.693" UserId="3168" />
  <row Id="8487" PostId="3725" Score="0" Text="@snb I recommend that you read my answer, not just one sentence. I *do* explain why goto isn't just a jump." CreationDate="2017-09-29T20:44:29.980" UserId="124" />
  <row Id="8489" PostId="3725" Score="0" Text="@PaulPowell By the way, your authority argument might conceivably carry some weight if you at any point explained why goto is better suited for 11 year olds than for adults (undergrads and up)." CreationDate="2017-09-29T20:55:20.737" UserId="124" />
  <row Id="8490" PostId="3725" Score="0" Text="@Gilles No you don't explain why it isn't a jump, you state &quot; It's a jump to a different context &quot;, and no, underneath it would still be a jump regardless, with semantic rule control in the compiler if you're in a language like C++, goto is a jump.   You seemed to want to find a way to display arrogance when what you actually should have said is &quot;Goto isn't dangerous because you jump to another point in a program, its dangerous because that jump to a completely different context in the program. The invariants that ....&quot;  with out your gate keeping statement." CreationDate="2017-09-29T20:59:14.263" UserId="3168" />
  <row Id="8495" PostId="3725" Score="0" Text="@Gilles, if you teach undergrads then you are looking, at worst, at the brightest 50% of the population. Imagine your brightest undergrad and your absolute dimmest. Now imagine someone who is that much less able again. Now imagine all of them have six or seven fewer years of being educated. To put you in the picture, I spent 5 minutes today with a Y11 student exploring different ways he could attempt the sum 21/3. He is at the bottom of the range and although he eventually could do it today, he will have the same problem tomorrow, the day after and probably for the rest of his life." CreationDate="2017-09-29T22:01:12.347" UserId="3129" />
  <row Id="8496" PostId="3725" Score="0" Text="Difference enough for you?" CreationDate="2017-09-29T22:01:36.903" UserId="3129" />
  <row Id="8497" PostId="3725" Score="0" Text="@PaulPowell I'm well aware that teaching to Y11 is vastly different from teaching to undergrads. What I fail to see is why goto would be more appropriate to Y11. It's a very complicated concept. Why on earth would you teach the more complicated concept to middle schoolers?" CreationDate="2017-09-29T22:19:42.027" UserId="124" />
  <row Id="8505" PostId="3725" Score="0" Text="First I said year KS3 is where I am doing this, not Y11. I gave a Y11 example it illustrate where the bottom of the ability range is, although if I were required to teach this child CS I may well use GOTO. You might be theretically aware, but try going to a local non-selective comprehensive and teaching a class (not a selected group) of year 7s. Then try the same thing in London." CreationDate="2017-09-30T08:00:55.030" UserId="3129" />
  <row Id="8506" PostId="3725" Score="0" Text="The whole article and everything else says that this is an experiment, so I don't know if they will find it easier yet as we are just getting started." CreationDate="2017-09-30T08:02:11.823" UserId="3129" />
  <row Id="8507" PostId="3725" Score="0" Text="You are asking me to say what is simple about goto (which is always harder than saying why it is complicated). Two things, first: one line one sttatement, one action for all statements. Secondly, context is pretty much irrelevant at this stage - about the worst you could do is reference a variable before it has been defined. Thirdly, they don't have to think about what is in and outside the loop - just what happens next. We are using BASIC 256 as our language. Now you tell me what is so complicated about this." CreationDate="2017-09-30T08:20:41.233" UserId="3129" />
  <row Id="8535" PostId="3725" Score="0" Text="I upvoted. I am a retired software engineer who learned programming using BASIC in 1981. Basic's `GOTO` was the *most confusing* part of trying to learn how to program, and I had real trouble with control flow in more complex programs until I encountered structured control flow in Pascal, ca. 1985. I later programmed quite a bit in assembly language, even microcode, where understanding the concept of GOTO is useful. My programming teaching experience is limited to being a TA at university. Based on that: GOTO is an *advanced* concept that should be kept away from beginners learning a HLL" CreationDate="2017-10-02T02:07:37.470" UserId="1940" />
  <row Id="8515" PostId="3726" Score="1" Text="Every control structure in any language can be described as &quot;a kind of goto&quot;." CreationDate="2017-09-30T17:58:01.977" UserId="1139" />
  <row Id="9145" PostId="3726" Score="0" Text="@T.E.D. Every high-level program is compiled to machine code. The only flow control instructions in machine code, are `jump` (goto), and `jump_to_subroutine` (gosub / call, this one is almost structured). The point is not that it gets converted to a goto, the point is that all gotos should be used to implement control structures, and preferably these structures should be baked into the language, and add-hock goto removed from the language. `break` in a `for` look is a control structure, but break in a `case` may not be. You have to make your own structure with `case` in the `C` languages." CreationDate="2017-12-03T15:21:27.697" UserId="204" />
  <row Id="8488" PostId="3727" Score="1" Text="Generated programs are a radically different beast from code that humans maintain. Most (I hesitate to say all, but I can't think of a counterexample) state machines I've written in the real world are better written out with an explicit state; conflating program state with program counter location, the way you have to do it if you rely on goto for state change, would have made them very hard to maintain, because the states are not clearly disjoint. Admittedly, goto might be the easiest way to express a state machine which is a toy exercise, designed to keep the states simple." CreationDate="2017-09-29T20:51:58.497" UserId="124" />
  <row Id="8491" PostId="3727" Score="0" Text="@Gilles - There are of course good ways and bad ways to organize state-machine goto code (believe it or not), just like any other kind of code. But you aren't &quot;fixing&quot; that by artificially imposing an unnecessary loop-switch structure on top of it." CreationDate="2017-09-29T21:23:25.413" UserId="1139" />
  <row Id="8492" PostId="3727" Score="1" Text="My point is that the state machines I usually see are a loop around *something that contains a switch, or at least a bunch of conditionals*. The loop body is hardly ever *just* a switch. It tends to be something like: read and parse a message, run consistency checks, analyze the state, update some data structures, emit a log message, make a state transition, loop. That's hard to express with goto statements, even in the best of cases where “analyze the system state” only comes up once." CreationDate="2017-09-29T21:37:21.457" UserId="124" />
  <row Id="8498" PostId="3727" Score="0" Text="@Gilles -  If there's really a significant amount of &quot;always run&quot; code, yes that's a good reason for a loop. However, I tried that for a while with my first serious manual lexer, and gave it up. The problem is that stuff outside the switch tends to end up only running at the end or beginning of *most* loops, not all of them (practical example: don't bother updating the lexeme in comment state.) After about the 3rd interlocking exception, you end up just making that stuff subroutines and calling them at the end of the states that need it. That's much easier to follow code." CreationDate="2017-09-29T22:24:22.277" UserId="1139" />
  <row Id="8742" PostId="3727" Score="0" Text="@T.E.D. Create/Use a meta compiler (a compiler compiler). Compilers are allowed to output `goto`s. Any domain specific language should be well structured, but may output code that is not intended to be maintained my humans. Every other compiler outputs `JMP` instructions." CreationDate="2017-10-13T13:00:08.253" UserId="204" />
  <row Id="9147" PostId="3727" Score="0" Text="The body of my favorite language parser's main() function was &quot;while ((f=*f()) != null);&quot;  All structured, no gotos, but most people couldn't understand it. Gotos or switch (which is just a hidden goto) would have made it more clear to most people." CreationDate="2017-12-03T19:55:05.863" UserId="1537" />
  <row Id="9148" PostId="3727" Score="0" Text="@ctrl-alt-delor - I designed and built one as part of my Master's thesis." CreationDate="2017-12-03T20:12:11.970" UserId="1139" />
  <row Id="9173" PostId="3727" Score="0" Text="@T.E.D. I have no idea on what you disagree on. I have just re-read the answer and comments. I see nothing to disagree on. You are correct that you can not turn gotos-full code to structured-code in any reliably way. However it is better to write structured code in the first place, though this could involve `goto` statements, if the language does not support the control structures. Then if you know the full list of control-structures this code could be translated to have no `goto`s." CreationDate="2017-12-06T19:21:44.973" UserId="204" />
  <row Id="8475" PostId="3728" Score="0" Text="Hey man, happy to have you here but this seems more like a discussion. Come over to the chat room to discuss this. I am going to have to recommend to have this closed. Further, the answer to your question is whatever got you interested in the first place. Just say what got you interested. You don't need a community suggested answer for that." CreationDate="2017-09-29T15:51:36.847" UserId="2605" />
  <row Id="8484" PostId="3728" Score="0" Text="While the question is quite different from what we normally see here, the issue of motivating students through faculty connection is a valid one for any educators site. However, the issue is broader than just _CS_  education, of course. However, newer teachers may need to know where they should try to place themselves on the formal to informal scale in dealing with students. So, I think advice from the community is valid and valuable." CreationDate="2017-09-29T18:23:22.280" UserId="1293" />
  <row Id="8499" PostId="3728" Score="1" Text="Welcome to [cseducators.se]. This seems like a good discussion to have, and I'm sure that there could be some good questions generated from either that discussion, or this question. As written, however, this is more an invitation to share experiences than a _question_ looking for __an__ _answer, and is too broad for the Stack Exchange format. Have a look at the [Tour](https://cseducators.stackexchange.com/tour) and the [Help Center](https://cseducators.stackexchange.com/help) to get a better idea of how things work here compared to most other forum sites." CreationDate="2017-09-30T00:52:27.357" UserId="104" />
  <row Id="8516" PostId="3731" Score="1" Text="I agree with you completely. However, too many teachers are assigned such courses when they are not ready at all. But if you are going to get training, get something that doesn't just help you keep a day ahead of the students." CreationDate="2017-09-30T20:07:51.720" UserId="1293" />
  <row Id="8517" PostId="3731" Score="1" Text="The danger is that too many states are going for the quick win and stopping at the weekend PD model. The right way to do it is set an M year goal. You can start now with nothing, you must do ABC by year N and finish the whole shebang by year M." CreationDate="2017-09-30T20:14:06.797" UserId="237" />
  <row Id="8518" PostId="3731" Score="0" Text="Yes. Can you develop that into a complete answer here? Such a plan might require the backing of some organization behind it, i'd guess." CreationDate="2017-09-30T20:17:57.833" UserId="1293" />
  <row Id="8525" PostId="3732" Score="0" Text="I might make more explicit the relationship to other, perhaps more familiar algebras. It may not be motivational enough, but will probably sparkle curiosity." CreationDate="2017-10-01T11:18:28.187" UserId="1000" />
  <row Id="8532" PostId="3732" Score="1" Text="Another method to prove identities, between truth tables and algebraic manipulation : 1. select the most frequent variable v 2. replace it by 0, apply simplifications, prove (recursively) whats left. 3. do the same with v=1.&#xA;Applying at to the first consensus law : with a=0 `(0 ∨ b) ∧ (¬0 ∨ c) ∧ (b ∨ c) ≡ (0 ∨ b) ∧ (¬0 ∨ c)`, iff  `b ∧ (b ∨ c) ≡ b` and on the other side, if a=1  `(1 ∨ b) ∧ (¬1 ∨ c) ∧ (b ∨ c) ≡ (1 ∨ b) ∧ (¬0 ∨ c)` iff  `c ∧ (b ∨ c) ≡ c`. To prove `b ∧ (b ∨ c) ≡ b`, b=0 leads to `0≡0`, and b=1 to `1≡1`." CreationDate="2017-10-01T16:54:05.380" UserId="2103" />
  <row Id="8536" PostId="3734" Score="0" Text="This question is specifically for motivating examples?" CreationDate="2017-10-02T02:44:57.930" UserId="27" />
  <row Id="8538" PostId="3734" Score="0" Text="@BenI. Yes, I am looking specifically for examples that I could show in code." CreationDate="2017-10-02T03:08:57.370" UserId="830" />
  <row Id="8540" PostId="3734" Score="1" Text="I don't think your description of the difference between `for` and `while` actually describes what happens in any reasonably popular language. These are just some used-to-be macros that due to historical reasons made their way into some programming languages. But there isn't really anything that warrants this particular number of kinds of loop keywords (some languages have more, some have less)." CreationDate="2017-10-02T06:25:35.970" UserId="1000" />
  <row Id="8541" PostId="3734" Score="0" Text="What language? (python `for` in much like C# `foreach`)" CreationDate="2017-10-02T08:35:39.903" UserId="204" />
  <row Id="8542" PostId="3734" Score="0" Text="The for loop (in C-ish languages) is here to give a clear separation between the control and the code to be executed at each turn. Then it leads to idiomatic forms, like the well-known  `for(int i=0; i&lt;n; i++)`, or `for(char *p = str; *p; p++)` that every programmer recognizes without thinking. Can be done with `while`, but the `i++` part would be hidden far away. So the preference of the students for `for` over `while` relies on their ability to abstract the control part from the repeated part. Takes some time and exercises, with usual structures like &quot;do sthg for x between min and max&quot;." CreationDate="2017-10-02T08:38:47.340" UserId="2103" />
  <row Id="8544" PostId="3734" Score="0" Text="You're constrained to use only console I/O, and no physical interfaces?" CreationDate="2017-10-02T09:31:05.203" UserId="41" />
  <row Id="8545" PostId="3734" Score="0" Text="@SeanHoulihane I/O is all they know thus far, so yes. We'll move onto GUIs in a few weeks, which do naturally lend themselves to more `while` loops, but until then, we only have the console." CreationDate="2017-10-02T09:40:03.747" UserId="830" />
  <row Id="8546" PostId="3734" Score="0" Text="@cryptic_star Take a look here: http://www.the-tech-tutorial.com/top-10-command-line-linux-games/" CreationDate="2017-10-02T09:43:24.950" UserId="41" />
  <row Id="8547" PostId="3734" Score="0" Text="Is the 'java' tag appropriate?" CreationDate="2017-10-02T09:56:14.527" UserId="41" />
  <row Id="8548" PostId="3734" Score="0" Text="as in 'use this tag only if the use of the language would affect the question **significantly**'" CreationDate="2017-10-02T10:16:12.830" UserId="41" />
  <row Id="8550" PostId="3734" Score="0" Text="@SeanHoulihane I added it because some of the previous commenters felt that language played a role. If there's a broader language tag that would be more appropriate, that's fine too." CreationDate="2017-10-02T12:00:44.600" UserId="830" />
  <row Id="8543" PostId="3735" Score="0" Text="This is not an example of engaging exercises, it is a tutorial on the syntax." CreationDate="2017-10-02T09:14:45.897" UserId="41" />
  <row Id="8552" PostId="3735" Score="0" Text="@SeanHoulihane “I'm looking for a set of concrete examples that illustrates good use cases of using a for vs a while loop” — so while not example, it is a rule, that can be taught and used to generate examples." CreationDate="2017-10-02T12:09:05.400" UserId="204" />
  <row Id="8553" PostId="3735" Score="0" Text="but we all know the rules, and if we wanted to learn about the rules, we'd be on SO..." CreationDate="2017-10-02T12:10:32.320" UserId="41" />
  <row Id="8941" PostId="3735" Score="0" Text="Since reading an article (now cited in my answer), I have changed my mind about the wisdom of teaching for loops to beginners." CreationDate="2017-11-03T17:55:40.727" UserId="204" />
  <row Id="8555" PostId="3738" Score="2" Text="The first example is counterproductive. Students should be taught *not* to use floating point for types such as &quot;money&quot; which are inherently fixed-point decimal values." CreationDate="2017-10-02T14:09:03.097" UserId="1219" />
  <row Id="8556" PostId="3738" Score="0" Text="@PeterTaylor I agree you should teach them to use `java.math.BigDecimal` for real money calculations. The use of such objects in the `for` loop is left as a funny exercise to the reader." CreationDate="2017-10-02T16:56:49.307" UserId="2103" />
  <row Id="8560" PostId="3738" Score="0" Text="Actually, the first example is worse than that. Using floats in any counting situation can easily lead to a classic &quot;off by one&quot; error&quot;. You have to assume that 0.5 is exact (which it likely is) but other very similar situations will fail. Try to count by 0.2 for example, up to about 1000.0. (I don't know if that one actually fails, but some will). Just as in base 10, 1/3 isn't precisely representable, many things in base 2 are not." CreationDate="2017-10-03T10:47:12.153" UserId="1293" />
  <row Id="8561" PostId="3738" Score="0" Text="And note that BigDecimal is _arbitrary precision_. But that isn't the same as _infinite precision_. Rounding happens. Good enough for money, but not for everything." CreationDate="2017-10-03T11:24:45.553" UserId="1293" />
  <row Id="8562" PostId="3738" Score="0" Text="@buffy Of course it happens, and it has to, for money handling applications. The way it happens (precision, rounding mode) is defined by the MathContext http://docs.oracle.com/javase/8/docs/api/java/math/MathContext.html BTW who assumes the loop had to stop *exactly* on value 10 ?" CreationDate="2017-10-03T11:37:33.580" UserId="2103" />
  <row Id="8551" PostId="3739" Score="1" Text="These don't look like console based tasks, they are 'human robot' tasks..." CreationDate="2017-10-02T12:04:01.650" UserId="41" />
  <row Id="8557" PostId="3739" Score="2" Text="I'd interpret it differently: find good examples of for/while in concrete java applications, not &quot;real life examples&quot; which are not related to programming." CreationDate="2017-10-03T09:22:26.620" UserId="2103" />
  <row Id="8568" PostId="3740" Score="0" Text="Yes, I think these are generally good examples, but don't fit in the constraints laid out in the original question (e.g., my students don't yet know data structures)." CreationDate="2017-10-04T02:56:42.900" UserId="830" />
  <row Id="8597" PostId="3740" Score="0" Text="Count numbers from 1 to 10? Next lession: `if`, `break`, `continue` and count only odd numbers and stop when encounter a cubic number? It feels hard to describe exactly the difference between `for` and `while` if there are no things that have no a priori known size. But user input, as hinted below, might be a good idea." CreationDate="2017-10-04T23:07:31.153" UserId="2879" />
  <row Id="8600" PostId="3740" Score="0" Text="Yes, we actually did many of those exercises earlier. I provided an answer to this question that I think did a decent job demonstrating the principle." CreationDate="2017-10-05T01:28:32.130" UserId="830" />
  <row Id="12378" PostId="3740" Score="0" Text="As you say, if there is a list or known (or determinable) number of things, use `for` or `foreach` (or equivalent) - loop through an array, iterate through POST values, etc.  If the required number of cycles is unknown (reading from a file, letting a user guess something, etc) then it is a `while` or `until` (or equivalents)" CreationDate="2018-05-09T12:55:21.497" UserId="662" />
  <row Id="8577" PostId="3742" Score="0" Text="Something your answer alludes to that I'd not seen in the others, an imprecise example can be good if it results in a discussion." CreationDate="2017-10-04T13:22:30.350" UserId="41" />
  <row Id="8578" PostId="3742" Score="0" Text="@SeanHoulihane Could you clarify? I'm not sure I see what you mean." CreationDate="2017-10-04T15:42:57.630" UserId="830" />
  <row Id="8579" PostId="3742" Score="0" Text="You say 'there are better ways of writing the above' ... 'this prompted a nice discussion'. So you may not have meant that the discussion was about better ways of doing it, but if you're presenting some code to introduce a topic (rather than presenting a problem to be solved by the students, as I inferred in the Q), showing an example which can be improved upon is often constructive." CreationDate="2017-10-04T15:47:00.683" UserId="41" />
  <row Id="8580" PostId="3742" Score="0" Text="@SeanHoulihane Yes, I concur!" CreationDate="2017-10-04T15:55:48.647" UserId="830" />
  <row Id="8567" PostId="3743" Score="2" Text="Shouldn't &quot;go home&quot; be outside the &quot;foreach period&quot; loop?  I'm sure the students would prefer how you have it now, though." CreationDate="2017-10-03T21:14:43.890" UserId="1523" />
  <row Id="8575" PostId="3743" Score="0" Text="@Jwodder You can use errors like that as a teaching opportunity. But I have now fixed it." CreationDate="2017-10-04T07:57:18.717" UserId="204" />
  <row Id="8672" PostId="3743" Score="0" Text="Perfect timing. We're doing nested loops on Monday." CreationDate="2017-10-06T17:53:54.820" UserId="30" />
  <row Id="8581" PostId="3747" Score="0" Text="There seem to be two issues conflated in the question. One is structuring a program to be modular, the second relates to the concept of pipelining several individual programs. I guess that the question would be equally valid without the STDOUT part. Or maybe you mean to include this as your current teaching example which is not as effective as you want?" CreationDate="2017-10-04T16:30:09.133" UserId="41" />
  <row Id="8582" PostId="3747" Score="0" Text="Indeed, I try to impress upon them the importance of modularity, otherwise I might just say it's OK to create gigantic main() functions with the whole code there (and of course, it's impossible to teach something like recursion without resorting to functions). The main issue indeed is teaching the necessity of pipelining the output of a function to another piece of code. They seem to think that, somehow, once I printf() something, the computer &quot;understands&quot; this is what they mean to return from the function, but obviously it doesn't work like that." CreationDate="2017-10-04T16:36:12.837" UserId="3209" />
  <row Id="8583" PostId="3747" Score="0" Text="Maybe you can update the question to identify your process more specifically, so questions address the right detail. It's not always easy for people from different places to answer the question you thought you asked! The issue does resonate with my early coding experiences." CreationDate="2017-10-04T16:42:38.763" UserId="41" />
  <row Id="8584" PostId="3747" Score="0" Text="I'm not entirely sure what I should change in the question. Perhaps you'd like me to stress this point of pipelining function outputs to other code?" CreationDate="2017-10-04T16:44:24.920" UserId="3209" />
  <row Id="8585" PostId="3747" Score="0" Text="I edited - mostly re-ordering two paragraphs. So I think now you might need to also share the example problem. I have a feeling it might be too similar to your previous examples. If you do `print (f(i)))` then its different to `for (::)i+=f(i); print(i)`" CreationDate="2017-10-04T16:55:45.507" UserId="41" />
  <row Id="8586" PostId="3747" Score="1" Text="OK, I added a concrete example." CreationDate="2017-10-04T17:01:12.373" UserId="3209" />
  <row Id="8587" PostId="3747" Score="18" Text="Why is this such a long question? Students cannot seem to differentiate between return and printf. Then, give an example. Please edit out all the noise. Meanwhile, let me share in the answer section what I did to solve this." CreationDate="2017-10-04T18:13:40.667" UserId="2605" />
  <row Id="8588" PostId="3747" Score="6" Text="This misconception isn't special to students studying C. It is common in beginners who don't understand the operation of a machine separate from its operator." CreationDate="2017-10-04T18:25:56.993" UserId="1293" />
  <row Id="8589" PostId="3747" Score="1" Text="Note: some languages do it the way the students think it is done. That is you return data by printing it. Examples are the Unix shells." CreationDate="2017-10-04T18:28:36.933" UserId="204" />
  <row Id="8590" PostId="3747" Score="5" Text="@Jay Sorry for the question being so long. I guess it is my style to try to be as thorough as possible, and also to point out the context of the issue and what I've tried. I've edited the question to add a heading &quot;Extra details&quot; and tried to keep the core of the question before that heading." CreationDate="2017-10-04T18:33:05.357" UserId="3209" />
  <row Id="8593" PostId="3747" Score="0" Text="Its long dude. So long. Live and let live is my motto...so it should be okay :)" CreationDate="2017-10-04T19:12:18.583" UserId="2605" />
  <row Id="8602" PostId="3747" Score="4" Text="I remember that this was one of my big &quot;aha&quot; moments. My reasoning for why it was hard to grasp back then was that I was coming to it from BASIC, which had no concept of scope. Once I understood scope,  the role of &quot;return&quot; became obvious." CreationDate="2017-10-05T01:48:00.263" UserId="1537" />
  <row Id="8626" PostId="3747" Score="0" Text="Draw a diagram of the data flow with boxes and arrows. Show each function as a box. Also show standard out as a box. Point out that when all of the data just goes to standard out, `norm` never gets the results of `square` and has nothing to pass to `add`." CreationDate="2017-10-05T13:16:24.117" UserId="3221" />
  <row Id="8651" PostId="3747" Score="0" Text="@ctrl-alt-delor Check you `/bin/sh` manpage for what the `return` keyword does. A shell function returns to the calling routine in very much the same way that a function in any other language does, and printing to the user is not returning a value in that context any more than it is in c." CreationDate="2017-10-05T22:50:02.860" UserId="2735" />
  <row Id="8656" PostId="3747" Score="0" Text="@dmckee `/bin/sh` etc, return only returns an 8bit error code. You have to `print`/`echo` to stdout, to pass data to the next function e.g. `function a() { echo &quot;hello, world&quot;; }; a | grep &quot;hello&quot;`" CreationDate="2017-10-06T08:03:44.113" UserId="204" />
  <row Id="8659" PostId="3747" Score="0" Text="Get them to compile their code with `-Wall -Werror -pedantic`? The compiler won't _let_ them do this." CreationDate="2017-10-06T09:06:39.660" UserId="2624" />
  <row Id="8670" PostId="3747" Score="1" Text="I don't have enough rep to answer, but one neat idea an early CS professor did was assign groups of students to play the role of &quot;function&quot;. If your team was &quot;called&quot;, you had to calculate the result. But just calculating it wasn't good enough; if the team &quot;calling&quot; you needed that result, you had to write it down on a piece of paper and &quot;return&quot; it to your &quot;calling&quot; team. You could demonstrate the differences between `return` and `printf` in concrete role-playing this way." CreationDate="2017-10-06T15:36:45.153" UserId="3241" />
  <row Id="8677" PostId="3747" Score="0" Text="An actual example: [link](https://codereview.stackexchange.com/questions/177378/date-class-in-c)" CreationDate="2017-10-07T11:05:03.023" UserId="1276" />
  <row Id="8712" PostId="3747" Score="0" Text="It's been over a decade since I taught CS, but @MrDuk's professor's technique is exactly what I did to illustrate functions and scope. Get the students off their laptops and have them physically participate in an analogy. It's amazing how well this technique helps stuff sink in. I taught working professionals late in the evening (they were exhausted and had attention issues) so sticking to straight-up lecturing was a recipe for failure." CreationDate="2017-10-09T11:07:33.077" UserId="3269" />
  <row Id="8599" PostId="3748" Score="8" Text="The play-acting idea sounds fantastic. I wonder if it might help to &quot;implement&quot; `return` by whispering rather than passing a paper? Or alternatively, make `print()` write the result on a chalkboard visible to the class (not the actors)? The idea being to show `print()` and `return` as being very different actions." CreationDate="2017-10-05T01:04:31.623" UserId="1357" />
  <row Id="8613" PostId="3748" Score="0" Text="Many variations are possible. Just think it through before you implement it. And expect surprises. Things can go wrong, so be prepared for a backup explanation." CreationDate="2017-10-05T10:41:22.187" UserId="1293" />
  <row Id="8634" PostId="3748" Score="0" Text="make them chaining the calls, that's exactly what I though when I red the post. RIP printf solution." CreationDate="2017-10-05T14:51:49.183" UserId="1375" />
  <row Id="8591" PostId="3749" Score="0" Text="I can see that making it physical does help with the idea of 'message passing' and even mailboxes, but this seems very close to the described 'didn't work' option." CreationDate="2017-10-04T18:49:54.037" UserId="41" />
  <row Id="8592" PostId="3749" Score="2" Text="Worked for me for 5 years and over 5000 students. So, yeah, it works :)" CreationDate="2017-10-04T18:55:36.817" UserId="2605" />
  <row Id="8608" PostId="3749" Score="0" Text="I like it, You could ware ear defenders, to show that you can not hear. But what is “comparison printf”?" CreationDate="2017-10-05T07:56:51.937" UserId="204" />
  <row Id="8616" PostId="3749" Score="0" Text="oh man, I messed that sentence up. fixed it :P" CreationDate="2017-10-05T11:35:40.393" UserId="2605" />
  <row Id="8621" PostId="3749" Score="0" Text="This is great, and +1, however I would like to make a suggestion for it. Perhaps explaining to the students that computers are dumb, and they cannot intuit on their own what to do with things that you display on screen or audio played. Likewise, you, being the computer for the role-play, only understand what is in your computer memory, and the paper is your computer memory. Your microphone might hear the shouted answer, so I would not even discourage shouting the answer, but when they expect you to react they get &quot;I'm a PC and not programmed to respond to audio; put it in my computer memory.&quot;" CreationDate="2017-10-05T12:14:44.627" UserId="1740" />
  <row Id="8622" PostId="3749" Score="0" Text="Further; with my above suggestion, inevitably someone will ask &quot;Then why don't we just program the computer to understand and use the audio or visual data so it can just pick up on the printf and know what to do?&quot; To which you can reply &quot;Billions of dollars are spent trying to do that. OCR, speech-to-text, artificial intelligence; that is required for what you suggest. It is possible, but it does not work as well, and it eats a massive amount of processing power... when you could just explicitly return this value.&quot;" CreationDate="2017-10-05T12:17:37.197" UserId="1740" />
  <row Id="8623" PostId="3749" Score="1" Text="It just so happens I do a lot of what you said. I pretend I am a computer and then, do literally nothing until I am explicitly told. I can be pretty dramatic at that point to drive home the point that computers are fast, efficient but totally just dumb." CreationDate="2017-10-05T12:23:58.367" UserId="2605" />
  <row Id="8594" PostId="3753" Score="0" Text="Question says 'introduce', so I think you're saying 'no, but later'?" CreationDate="2017-10-04T19:37:10.167" UserId="41" />
  <row Id="8595" PostId="3753" Score="0" Text="Actually no, I'm saying &quot;yes&quot;, introduce is fine. Introduce &quot;continue&quot; into a known base. That was the point, actually." CreationDate="2017-10-04T19:38:33.263" UserId="1293" />
  <row Id="8598" PostId="3754" Score="1" Text="I think it's overkill.  I think it would be faster and more effective to [*thoroughly clear the words* involved.](http://www.effectivetrainingsolutions.com/wordclearing)  For example, actually thoroughly clearing the words &quot;return&quot; and &quot;function&quot; and &quot;operator,&quot; rather than taking them for granted as understood.  To the extent that your approach works, I think it will be because it conveys the meanings of these words—but I think that by explicitly addressing the definitions, it could be done faster and more directly." CreationDate="2017-10-05T00:13:24.420" UserId="1103" />
  <row Id="8619" PostId="3754" Score="0" Text="@Wildcard I prefer 'define' or 'disambiguate', not another made up use of an existing word (with all the baggage that comes with cliques)." CreationDate="2017-10-05T11:55:31.717" UserId="41" />
  <row Id="8676" PostId="3754" Score="0" Text="@SeanHoulihane I can agree with that, but I do *not* simply mean &quot;define&quot; or &quot;disambiguate.&quot;  Those words do not convey the depth of understanding I refer to (nor the precision of steps involved in attaining it).  *Clearing* a word is a precise action; much as the phrase &quot;worst-case time complexity&quot; should not be equated to &quot;how long it takes to run.&quot;  I can attest to the effectiveness of *word clearing* as described on the website I linked; merely disambiguating terms will not achieve the same result." CreationDate="2017-10-07T06:42:36.610" UserId="1103" />
  <row Id="8596" PostId="3755" Score="0" Text="Actually, for this year, I have decided to delay as much as possible introducing printf() to them. Sometimes I will provide code samples where it is used, but I did not formally introduce the concept to them. When someone does ask about it, I reply in jest that it is a very dangerous concept that made quite a few former students fail the discipline previously (which, in a way, isn't far from the truth). Unfortunately, having seen it in action a few times, they've already realized how it works and keep trying to use it." CreationDate="2017-10-04T22:42:52.960" UserId="3209" />
  <row Id="8601" PostId="3755" Score="0" Text="@swineone Interesting. If you're using C, how can the students see their results without printing?" CreationDate="2017-10-05T01:46:18.750" UserId="2045" />
  <row Id="8604" PostId="3755" Score="4" Text="As I mentioned somewhere else, I started with Logo, so many things can be done without printing (although, admittedly, drawing poses the same problems as printing). I'm introducing the subject of C to the class now and I'm trying to use the test-driven development methodology, where for now I will be supplying the tests and skeleton functions for them to write their implementation. Also, I plan on teaching them how to use the debugger as an alternative to printing." CreationDate="2017-10-05T03:39:45.240" UserId="3209" />
  <row Id="8607" PostId="3755" Score="0" Text="With respect of print only in main. I have a rule, that functions only call functions. Procedures can call functions or procedures. print is a procedure. main is a procedure. Therefore I can write other procedures to print, but not functions. (a procedure does something, a function returns something.)" CreationDate="2017-10-05T07:52:56.913" UserId="204" />
  <row Id="8625" PostId="3755" Score="0" Text="`&quot;Setting a standard that printing only happens in main() may help&quot;` I would hesitate to agree with @ctrl-alt-delor... I would say main should call a calculate function which stores `result`... and then sends `result` to a separate function that prints - neither function is &quot;main&quot;. Then a third function that waits for enter to continue. `main()`, `int results(int a, int b)`, `void printresults(int a)`... separation of concerns. Each block does one thing. 1) Main coordinates, 2) results calculates, 3) printresults prints... results." CreationDate="2017-10-05T13:01:24.700" UserId="3220" />
  <row Id="8627" PostId="3755" Score="0" Text="@ctrl-alt-delor `main` is a function, it does return `int` (exit status). It's just that in C99 you may omit the `return` statement, with implicit `return 0;`." CreationDate="2017-10-05T13:34:45.017" UserId="1076" />
  <row Id="8628" PostId="3755" Score="0" Text="@Ruslan printf is a procedure with a (status) return value (so not pure). Therefore should only be called from a procedure. (this is not a rule of `C`, just one that will help with your sanity.)" CreationDate="2017-10-05T14:35:33.320" UserId="204" />
  <row Id="8650" PostId="3755" Score="2" Text="@ctrl-alt-delor you seem to be inventing your own terminology here. If printf returns a value (which it always does) then it's a *function*. The fact that many people choose to *ignore* the return value is a different issue, and no different conceptually from writing `int i, j, k; j = 1; k = 2; i = j, k;`." CreationDate="2017-10-05T22:40:12.523" UserId="1352" />
  <row Id="8655" PostId="3755" Score="0" Text="For those that have a different idea of what a function is, a rewrite:&#xA;	&#xA;With respect of print only in main. I have a rule, that side-affect-free-subroutines only call side-effect-free-subroutines. Subroutines-with-side-effects can call side-effect-free-subroutines or subroutines-with-side-effects. print is a subroutines-with-side-effects. main is a subroutines-with-side-effects. Therefore I can write other subroutines-with-side-effects. to print, but not side-effect-free-subroutines. I also ensure that only side-affect-free-subroutines return a value. Error codes, excepted in non-OO." CreationDate="2017-10-06T07:52:00.793" UserId="204" />
  <row Id="8669" PostId="3755" Score="0" Text="@swineone Since you will already be providing the skeleton, make the way the receive feedback be a GUI that was just a couple of input boxes/labels. I remember my professor having us create a Java class with a specified set of functions, then he would run our class against his test GUI program that was only missing our class. Substitute for a shared lib/dll in your case." CreationDate="2017-10-06T14:11:26.370" UserId="3238" />
  <row Id="8688" PostId="3755" Score="3" Text="@ctrl-alt-delor Maybe I'm being pedantic but those aren't just your rules, those are the rules of reality. As soon as you try to have a side-effect-free subroutine call a subroutine with a side effect the former is no longer a side-effect-free subroutine. No rules have been violated. Side-effect-free subroutines necessarily don't call subroutines with side effects. Its part of what makes them side-effect-free." CreationDate="2017-10-07T23:13:04.383" UserId="2757" />
  <row Id="8699" PostId="3755" Score="0" Text="@matt I noticed the same when I write it out in the long form. When I have presented it in the short form. People say I am wrong. Then when I present it in the long form it is just a tautology. Why do we fight it?" CreationDate="2017-10-08T17:36:31.113" UserId="204" />
  <row Id="8721" PostId="3755" Score="0" Text="@ctrl-alt-delor Probably because your short form implies C makes a distinction between &quot;functions&quot; and &quot;procedures&quot; which it does not. When you frame it in terms of C it seems like a rule of C (but it's not actually a rule of C, hence you are wrong). When you frame it as a general design concept it is correct. However I assume students at this level cannot yet grasp the general design concept (or perhaps even the idea of software design) so it's not useful." CreationDate="2017-10-10T03:52:25.743" UserId="1275" />
  <row Id="8730" PostId="3755" Score="0" Text="@immibis sorry, it is not a rule of C, or of many languages. Just a rule that I have picked up, that makes programming easier. You can however configure a lint tool to do the checks, at least for C++. C++ has the idea of side effect free methods (almost), but the lint tool can be made to be more strict. I would also argue that all examples should be best practice, even if you don't teach the best practice directly." CreationDate="2017-10-10T08:38:08.660" UserId="204" />
  <row Id="8603" PostId="3757" Score="0" Text="another role play thing. Role play is useful when teaching methods." CreationDate="2017-10-05T01:56:04.533" UserId="2605" />
  <row Id="8606" PostId="3758" Score="0" Text="You could try looking at micro:bit resources, there may be some ideas you can copy. Not looked at Arduino specifically, but copy a skeleton and extend seems to work (not sure of the experience of the kids I did this with though)" CreationDate="2017-10-05T07:49:44.470" UserId="41" />
  <row Id="8610" PostId="3759" Score="0" Text="Is there a logic error in paragraph 2? (a negation/ non-negation)" CreationDate="2017-10-05T08:09:49.040" UserId="204" />
  <row Id="8645" PostId="3759" Score="0" Text="I do not think so. I am defining n(&gt;=2) to be pseudo-prime iff for all 2&lt;=a&lt;n, n divides (a^n-a). Is this weird ? Other notions of pseudo-primality exist but this one is nice for the example." CreationDate="2017-10-05T19:51:33.690" UserId="2574" />
  <row Id="8653" PostId="3759" Score="0" Text="a paragraph is not a bullet point. “I teach in Python, so using …”" CreationDate="2017-10-06T07:40:07.077" UserId="204" />
  <row Id="8609" PostId="3760" Score="0" Text="Real programmers don't use debuggers (or printf). OK I do sometimes. However when I use design by contract, and/or test first. I don't need them. I have not done these in a teaching environment (yet), but they are very powerful, and result in code that work, and stays working. No need to debug." CreationDate="2017-10-05T08:06:22.537" UserId="204" />
  <row Id="8617" PostId="3760" Score="5" Text="I am firm proponent of caveman debugging. printf should be okay." CreationDate="2017-10-05T11:37:28.290" UserId="2605" />
  <row Id="8680" PostId="3760" Score="0" Text="Debuggers are a very bright almost laser-like spot light. You can view one aspect of the code (in space and time) very vividly. But you don't get a full picture. You have to shine that light in a lot of places to understand the full picture - this takes time. On the other hand, print statements are like flash lights. You can get some understanding of the entire picture but not all the details. Most of the time, flashlights work well." CreationDate="2017-10-07T16:13:59.307" UserId="2176" />
  <row Id="8681" PostId="3760" Score="0" Text="@Harrichael Breakpoints can execute arbitrary debugger instructions, like printing variables, without polluting your release application" CreationDate="2017-10-07T16:21:59.153" UserId="1041" />
  <row Id="8682" PostId="3760" Score="0" Text="I'll keep that in mind, but I would definitely recommend removing print statements after debugging - I would shudder at leaving them in." CreationDate="2017-10-07T16:28:07.793" UserId="2176" />
  <row Id="8683" PostId="3760" Score="0" Text="@Harrichael That's a lot of work, that's what logging frameworks are for, to give you a central control that lets you disable all (for example) &quot;info&quot; and &quot;debug&quot; level messages" CreationDate="2017-10-07T16:37:51.527" UserId="1041" />
  <row Id="8605" PostId="3761" Score="2" Text="FYI we have a sister site for [software recommendations](https://softwarerecs.stackexchange.com/). I'm not sure which site would be best able to answer this question. Please don't post the same question there, but do have a look to see whether someone has asked a similar one and got an answer. If you think the other site would have been a better place to ask, you can click the &quot;flag&quot; link and request that the moderators migrate it." CreationDate="2017-10-05T07:47:06.963" UserId="1219" />
  <row Id="8657" PostId="3761" Score="0" Text="Have you considered a projector?" CreationDate="2017-10-06T08:53:11.637" UserId="1537" />
  <row Id="8689" PostId="3761" Score="2" Text="I'm voting to close this question as off-topic because it is not specific to CSEd." CreationDate="2017-10-08T07:49:28.267" UserDisplayName="user24" />
  <row Id="8690" PostId="3761" Score="1" Text="@Keelan I don't think that not being specific is a good reason to close. It is certainly valid for questions to be acceptable on multiple sites. To general or 'opinion based' - but I don't see any answers which are specificly addressing the 'control' aspect explicitly." CreationDate="2017-10-08T10:46:47.867" UserId="41" />
  <row Id="8700" PostId="3761" Score="1" Text="@SeanHoulihane my answer addresses the control aspect." CreationDate="2017-10-08T17:42:44.383" UserId="204" />
  <row Id="8714" PostId="3761" Score="0" Text="Use https://go.twitch.tv/ if you want to look cool ;) (This isn't used for educational purposes but by gamers, and eventually programmers who would share their screen while they slay some monsters or code a program)." CreationDate="2017-10-09T12:57:47.330" UserId="1000" />
  <row Id="8620" PostId="3762" Score="0" Text="Long, but very useful." CreationDate="2017-10-05T11:58:11.450" UserId="41" />
  <row Id="8612" PostId="3764" Score="0" Text="The 2nd paragraph is not clear can you improve it. And welcome to our community. Hope you can continue to contribute." CreationDate="2017-10-05T08:59:14.697" UserId="204" />
  <row Id="8618" PostId="3765" Score="0" Text="scanf...that will drive those who cannot even get printf mad." CreationDate="2017-10-05T11:38:57.050" UserId="2605" />
  <row Id="8614" PostId="3766" Score="0" Text="For example, a bad question on DQs: Which of the following shapes is an abstraction of the moon: Rectangle | Cuboid | Sphere | Triangle. It's very subjective, e.g. http://www.askamathematician.com/wp-content/uploads/2011/05/cubeearth.jpg" CreationDate="2017-10-05T10:41:47.923" UserId="48" />
  <row Id="8615" PostId="3766" Score="2" Text="What is MCQ? Also can you put all important info into the question. Not (just) link, especially to subscription sites." CreationDate="2017-10-05T10:43:14.133" UserId="204" />
  <row Id="8636" PostId="3766" Score="1" Text="I would struggle with getting those questions correct." CreationDate="2017-10-05T16:40:37.947" UserId="204" />
  <row Id="8637" PostId="3766" Score="1" Text="A problem with MCQ and abstractions is that often an abstraction has personal context. I also find those examples hard (the first one reads to me as {blah} {blah} for the first 3 choices, and misdirects me because I want to make them all fit). Too much 3D printing, everything decomposes to triangles..." CreationDate="2017-10-05T16:45:15.180" UserId="41" />
  <row Id="8638" PostId="3766" Score="3" Text="A tennis racket is a white **rectangle**, that moves vertically, and is controlled with a rotary knob." CreationDate="2017-10-05T16:51:29.883" UserId="204" />
  <row Id="8639" PostId="3766" Score="0" Text="I just looked at the site, there are some flow charts. They made me say wt*?  There is a diamond with the word payment in it. Even with an up inflection that is not a question. If I was doing this quiz I would just answer A for everything or walk out." CreationDate="2017-10-05T16:57:02.017" UserId="204" />
  <row Id="8640" PostId="3766" Score="0" Text="Am watching the video and am impressed with what I hear. I was thinking that there is a need for up/down votes for questions. However the approach you are taking of the quiz also marking it self, seems better. I wonder if it would be of value to do both. To compare, or as an initial score for the question (would it speed up the systems initial learning). Could you use the system to grade teacher/assessors ability to assess questions." CreationDate="2017-10-05T17:10:24.187" UserId="204" />
  <row Id="8658" PostId="3766" Score="0" Text="As a programmer,  not a teacher,  the question looks to me to be presented as recipe regurgitation. I would never approach the font problem in the manner the question presents it. A person understands abstraction when they can look at a specific problem and grasp that there is a larger set of problems that the initial problem is a mere part of, which can be resolved with the same mechanisms. Recognizing that the existence of a font implies multiple fonts and the need for a font manager to hide the font implementation from the core business of display is abstraction." CreationDate="2017-10-06T09:05:28.243" UserId="1537" />
  <row Id="8664" PostId="3766" Score="0" Text="Users can 'favourite' questions and include them in quizzes - we can sort the questions on these metrics. Users can also provide feedback to question writers. &#xA;The Rasch analysis will be online &quot;later this year&quot;, which will provide a measure of how hard a question is and how good it is at discriminating strong and weak students. Users and writers will have access to this data too." CreationDate="2017-10-06T11:47:49.503" UserId="44" />
  <row Id="8671" PostId="3766" Score="0" Text="&quot;Understanding of Abstraction&quot; is not something that can readily be measured... (Wittgenstein got it wrong too)  And the constraints due to nature of MCQs probably requires a group of questions rather than a single one. Probably psychology, psychiatry, social studies, anthropology and industrial-psychology are good disciplines to tap as they have been grappling with similar problems for a lot longer. A CS'esq approach: Derive questions out of a graph of concepts and apply a (biased) distance-function between the query node and the answer nodes, with bias declared in the query." CreationDate="2017-10-06T17:10:03.807" UserId="3242" />
  <row Id="8713" PostId="3766" Score="0" Text="Aren't questions that ask the student to group objects or find an object not belonging to a group already testing abstract thinking? In the end of the day, this is what it is: you get a bunch of objects, imagine an abstract concept that might fit all of them or most of them--and here you are, making abstractions." CreationDate="2017-10-09T12:54:37.573" UserId="1000" />
  <row Id="8630" PostId="3767" Score="1" Text="Welcome to the site. Hope you can ask many more questions, and help with some answers as well. **Can you amend question to tell us what CSTA is. And add a link to the standards.**" CreationDate="2017-10-05T14:40:56.867" UserId="204" />
  <row Id="8633" PostId="3768" Score="0" Text="Review: The 1st section is just more of the same (see other answers). I nearly got bored and stopped reading. However the 2nd section onward has value." CreationDate="2017-10-05T14:50:13.563" UserId="204" />
  <row Id="8635" PostId="3768" Score="1" Text="@ctrl-alt-delor: Swapped the sections around to improve the answer :)" CreationDate="2017-10-05T14:53:40.070" UserId="2164" />
  <row Id="8724" PostId="3773" Score="0" Text="1) printing is actually doing something, 2) &quot;Show them what memory looks like, and the stack.&quot; sounds just confusing." CreationDate="2017-10-10T04:11:34.480" UserId="1275" />
  <row Id="8641" PostId="3774" Score="0" Text="Brilliant explanation of command query separation, and of naming methods. The only thing that I would add is adjectives, for when a method returns a boolean. Then more advanced adverbs or adjectives for enums (you should never pass a bool into a method, it will be, humanly, unreadable). (I have used the word method here, to mean subroutine, as I use function as a query, the noun/adjective thing, and procedure as a command a verb thing.)" CreationDate="2017-10-05T17:48:18.637" UserId="204" />
  <row Id="8649" PostId="3774" Score="1" Text="+1 function does what the name says it does!!  sum() doesn't say *print* so it shouldn't print!" CreationDate="2017-10-05T21:41:50.110" UserId="3132" />
  <row Id="8722" PostId="3774" Score="0" Text="@RonJohn that might not work because: it also doesn't say *return* so it shouldn't return!" CreationDate="2017-10-10T03:55:08.750" UserId="1275" />
  <row Id="8726" PostId="3774" Score="0" Text="@immibis that's so inane, I lost 3 IQ points just reading it.  Do you know the *slightest* thing about math, and what functions even are?" CreationDate="2017-10-10T04:21:27.020" UserId="3132" />
  <row Id="8727" PostId="3774" Score="0" Text="@RonJohn Do your students, who you are trying to teach the difference between *print* and *return* to, and who probably do not understand mathematical functions any better than they do programming functions, know the difference between *print* and *return*?" CreationDate="2017-10-10T04:38:22.660" UserId="1275" />
  <row Id="8728" PostId="3774" Score="0" Text="@RonJohn And if they do not understand the difference between *print* and *return*, why do you suppose they understand the difference between &quot;it doesn't say *print* so it shouldn't print&quot; and &quot;it doesn't say *return* so it shouldn't return&quot;?" CreationDate="2017-10-10T04:38:58.037" UserId="1275" />
  <row Id="8729" PostId="3774" Score="0" Text="@immibis Why are students who barely -- if at all -- understand math being taught how to program a **computer** (that thing who's *raison d'etre* is doing math)?" CreationDate="2017-10-10T04:55:44.697" UserId="3132" />
  <row Id="8732" PostId="3774" Score="0" Text="@RonJohn Why are people who barely understand Maxwell's equations being taught how to paint a picture (that thing whose entire purpose is to intricately manipulate electromagnetic waves)?" CreationDate="2017-10-10T20:34:56.377" UserId="1275" />
  <row Id="8733" PostId="3774" Score="0" Text="@immibis completely flawed logic, in that people have been paining for *at least* 32000 years, while -- as I wrote -- the whole *raison d'etre* of the **computer**, and it's baked into the very name -- is math." CreationDate="2017-10-10T20:50:24.570" UserId="3132" />
  <row Id="8734" PostId="3774" Score="0" Text="Let us [continue this discussion in chat](http://chat.stackexchange.com/rooms/66913/discussion-between-immibis-and-ronjohn)." CreationDate="2017-10-10T21:54:30.647" UserId="1275" />
  <row Id="8643" PostId="3775" Score="0" Text="I got my copy of [Hello, World](https://helloworld.raspberrypi.org) the other day. I defiantly recommend it. @Miles's picture is on page 3. You can also read them all on-line." CreationDate="2017-10-05T18:04:28.647" UserId="204" />
  <row Id="8646" PostId="3775" Score="0" Text="A bat is not an abstraction of a tennis racket.  Bats and tennis rackets are two different specializations of the same abstraction.  The common abstraction is a thing that you can swing with your arms to send a flying ball back in the direction that it came from.  Bats and tennis rackets both have concrete properties that are unlike each other, but which can be &quot;abstracted away&quot; when we want to talk about what they have in common." CreationDate="2017-10-05T20:29:49.720" UserId="1269" />
  <row Id="8654" PostId="3775" Score="0" Text="@jameslarge I think you are correct, can you think of a better word/ phrase?" CreationDate="2017-10-06T07:41:54.783" UserId="204" />
  <row Id="8660" PostId="3775" Score="0" Text="I can see the simile with a colander as something round with holes in, but the closest thing that a tennis racquet seems to have in common with a flying mouse is that both are important scene-setting elements for a genre of books (tennis racquet: story set in upper class English society of the early 20th century; bat: vampire stories). The correct answer to your question is clearly the third one, which abstracts out the essence of a tennis racquet to a definition which also covers badminton racquets, squash racquets, ..." CreationDate="2017-10-06T09:58:17.660" UserId="1219" />
  <row Id="8662" PostId="3775" Score="0" Text="Improved options, a bit. If any one has any ideas for getting them all about the some length, and similar grammar structure, then please improve them." CreationDate="2017-10-06T11:38:13.873" UserId="204" />
  <row Id="8647" PostId="3776" Score="1" Text="The two questions posted are there to show that mcqs for abstraction are generally poor. Can we write good ones? You've made an attempt above,  it would be good to get a clear one answer question with valid distractors" CreationDate="2017-10-05T20:58:39.380" UserId="48" />
  <row Id="8723" PostId="3778" Score="1" Text="I imagine you could also solve the first issue by using a more complex function... such as the absolute value (provided they don't yet know it's built in) or vector length." CreationDate="2017-10-10T04:01:08.340" UserId="1275" />
  <row Id="8691" PostId="3779" Score="0" Text="Welcome. Can you add any more detail to your answer? For example, is it paid, does your school use it universally, or just for CS, etc." CreationDate="2017-10-08T10:50:33.720" UserId="41" />
  <row Id="8661" PostId="3780" Score="0" Text="We're not clear on the question, but I think it was saying 'all I can find are full projects, not open ended design/development ideas'. Are you saying that this doesn't matter for a student, or that making games is a good extension?" CreationDate="2017-10-06T11:34:51.090" UserId="41" />
  <row Id="8665" PostId="3780" Score="0" Text="What do you mean by “to not have Arduinos ready”? Tell us more about what would have made it fun/interesting/useful for you." CreationDate="2017-10-06T12:31:04.017" UserId="204" />
  <row Id="8666" PostId="3781" Score="0" Text="Not everything is a tree, but good examples: Trying to organise everything as a tree, such as a company, does not work to produce well functioning organisations. See “a city is not a tree” — Christopher Alexander." CreationDate="2017-10-06T12:34:48.373" UserId="204" />
  <row Id="8667" PostId="3781" Score="2" Text="I would never argue with the author of one of my favourite books, but the point was that someone else set the company up like that and now you need to make certain calculations on it like &quot;what do we spend on R&amp;D?&quot; and recursion is a way to do that calculation. Since we are just looking for good examples, whether they in fact represent best practices in the real world of running companies isn't super relevant." CreationDate="2017-10-06T13:24:45.490" UserId="1036" />
  <row Id="8685" PostId="3784" Score="0" Text="Welcome to CSEducators. Hope to see you again. I'm one who isn't so sure that the assessment is obvious, but agree that teaching is the hard part." CreationDate="2017-10-07T20:45:02.117" UserId="1293" />
  <row Id="10365" PostId="3788" Score="0" Text="Thank you.  These resources are just what I was looking to find, They seem to be developmentally appropriate.  If anyone has implemented them with students at various grades, please provide your feedback." CreationDate="2018-03-10T15:55:22.587" UserId="3219" />
  <row Id="8762" PostId="3791" Score="0" Text="I like the analogy to a biology or chemistry lab section. In the lab session, though, there are often reflective questions a student must answer to show that they have an understanding of what they did. I remember writing endless lab reports explaining why my results meant something. What are examples of those reflective questions for Arduino projects?" CreationDate="2017-10-14T20:31:32.147" UserId="2045" />
  <row Id="8692" PostId="3797" Score="4" Text="So, 86% said the micro:bit made CS more interesting? Compared to what. It sounds like every exit survey from every CS program ever.&#xA;&#xA;Half the teachers feel more confident? Did they compare this to any other group of teachers that used any other set of resources?" CreationDate="2017-10-08T13:36:24.597" UserId="237" />
  <row Id="8702" PostId="3797" Score="0" Text="@MikeZamansky That is what I was going to say. My guess is compared to ICT. ICT was a mess, so I am glad we have an improvement. If you go to the CAS or other microbit training events, then I would expect improvements like this. The CAS events are very good. I would attribute most of the gain to the training. The microbits also add some value, and are cheep. But you still need a full size computer (I don't think you need an internet connection, to their compiler farm, any more. But am not sure)." CreationDate="2017-10-08T17:51:54.047" UserId="204" />
  <row Id="8703" PostId="3797" Score="0" Text="@MikeZamansky, exactly - the research was maybe loaded, hence the question. Stronger evidence would be nice." CreationDate="2017-10-08T18:04:59.553" UserId="41" />
  <row Id="8704" PostId="3797" Score="0" Text="@ctrl-alt-delor A phone will do, anything with a browser (or terminal, for python). The compiler runs in the browser, but you need to have it in cache. Interesting point on the training - don't know how this compares to other sessions that are available. I'll clarify that this Q is about students." CreationDate="2017-10-08T18:08:39.147" UserId="41" />
  <row Id="8740" PostId="3797" Score="1" Text="Start with the big picture. Don’t make it about coding, or wiring diagrams, or blinking lights. Make it about helping to change the world. All kids want to change the world. Develop that big picture and then work backwards to the blinking led.&#xA;A blinking LED is about sustainability and a reduction in the production of greenhouse gases because an LED can appear to be on when it is off. If it is on for half the time and off for half the time then it is saving 50% of the power needed to run it. See: https://iearn.org" CreationDate="2017-10-09T03:59:25.847" UserId="3266" />
  <row Id="8741" PostId="3797" Score="1" Text="Don't teach kids to change the world, teach them to make it better. All of the problems are caused by change. Some change is good, some is bad. Making the world better, will involve change, but change dose not always make it better." CreationDate="2017-10-09T08:26:37.227" UserId="204" />
  <row Id="8705" PostId="3798" Score="1" Text="Yes, I'm asking if there is other research... This isn't really an answer." CreationDate="2017-10-08T21:07:21.420" UserId="41" />
  <row Id="8706" PostId="3798" Score="0" Text="I understand that, of course." CreationDate="2017-10-08T21:11:18.317" UserId="1293" />
  <row Id="8711" PostId="3798" Score="0" Text="While not answering the question, it does provide some missing (previously implied) context. Where does/could the gain come from? The bit about the teachers motivation is very important. Also embedded software is more common, than desktop+server software by at least 5:1." CreationDate="2017-10-09T08:34:43.947" UserId="204" />
  <row Id="8716" PostId="3798" Score="0" Text="I will have to sign with Sean on this one." CreationDate="2017-10-09T14:36:37.197" UserId="2605" />
  <row Id="8725" PostId="3800" Score="0" Text="Your `while` loop example is my `do while` example - always prompt the user once for input, and if they enter something invalid, continue to ask. And while your first example is good, as the question notes, these are very early programmers I'm teachings, without any sort of data structure beyond a variable yet." CreationDate="2017-10-10T04:16:53.877" UserId="830" />
  <row Id="8717" PostId="3803" Score="2" Text="When at university, I represented a peer from Singapore, that had lost grades for not using a plural. To the staff member it was obvious that there understanding was poor, because it should always be plural. However in Singapore they speak mandarin. Mandarin has no plural/singular. Therefore the pupils English had been assessed, not their subject knowledge." CreationDate="2017-10-09T16:02:21.763" UserId="204" />
  <row Id="8731" PostId="3803" Score="2" Text="Can you provide a concrete example of a question with this &quot;subtle&quot; wording?" CreationDate="2017-10-10T20:29:08.120" UserId="2068" />
  <row Id="8745" PostId="3803" Score="1" Text="**Example referred to in the question:** ListBox results returned using the SelectedItem vs *SelectedItems* properties. I leave it to you whether this distinction of singular vs plural is important. How does this translate for people with a language that does not have plurals? Microsoft did not think of that, I guess. Too bad that most of the computing technology has been developed by one country, but hey, that is how it went." CreationDate="2017-10-13T13:42:13.050" UserId="3289" />
  <row Id="8888" PostId="3811" Score="0" Text="&quot;Flip&quot; the classroom.  All readings, etc. are to be done out of class.   &#xA; Use your LMS (or a free shell hosted by a vendor like Canvas) to host a discussion for questions/answers related to readings so concepts, etc can get clarified.  Students should then come to class time ready to work on labs/projects, where they can get immediate help from both their peers and you the instructor (or TA or whatever other role is available)." CreationDate="2017-11-01T16:38:27.800" UserId="662" />
  <row Id="8759" PostId="3815" Score="2" Text="It's a fair criticism that the English curriculum focussed much more on computer science than software engineering. This might be because most of those involved were computer scientists rather than software engineers, or it might be because our focus was on what all should learn as part of a general education, rather than what some should study as vocational training. By analogy, we teach all children physics, we teach few if any, e.g., mechanical engineering." CreationDate="2017-10-14T19:03:33.653" UserId="44" />
  <row Id="16010" PostId="3815" Score="0" Text="This is an excellent article: https://www.computingatschool.org.uk/data/uploads/ComputingCurric.pdf (I/somenoe should add a summary as an answer)." CreationDate="2020-01-01T12:05:23.790" UserId="204" />
  <row Id="8743" PostId="3816" Score="0" Text="Interesting, but this is for USA. I am asking about UK. Also you say you got the knowledge in early 1990s, but I am asking about a definitions from a paper written in 2012." CreationDate="2017-10-13T15:24:07.463" UserId="204" />
  <row Id="8748" PostId="3816" Score="0" Text="Welcome to [cseducators.se]! Whilst this may theoretically answer the question, [it would be preferable](//meta.stackoverflow.com/q/8259) to include the essential parts of the answer here, and provide the link for reference." CreationDate="2017-10-13T18:39:05.833" UserId="150" />
  <row Id="8753" PostId="3816" Score="1" Text="The [CSTA Standards](https://drive.google.com/file/d/0B0TlX1G3mywqXzNWMVdKX0lTSkU/view) provide a reference implementation of the Framework. They're worth a look." CreationDate="2017-10-14T07:14:08.880" UserId="44" />
  <row Id="16009" PostId="3817" Score="0" Text="This is an excellent article: https://www.computingatschool.org.uk/data/uploads/ComputingCurric.pdf (I should add a summary as an answer)." CreationDate="2020-01-01T12:04:57.500" UserId="204" />
  <row Id="8747" PostId="3818" Score="1" Text="It would be great if you could expand that a bit. What tool or site do you use to manage the discussions?" CreationDate="2017-10-13T17:44:21.917" UserId="1293" />
  <row Id="8744" PostId="3819" Score="1" Text="Welcome to [cseducators.se].  I hope we hear more from you in the future!" CreationDate="2017-10-13T17:09:32.357" UserId="27" />
  <row Id="8746" PostId="3819" Score="0" Text="What age group are you teaching?" CreationDate="2017-10-13T17:34:05.663" UserId="204" />
  <row Id="9050" PostId="3819" Score="0" Text="`the simplest first program: a DataGridView that allows full update of a table` That is in no way a simple feat, especially when you're still at the stage of trying to understand what's going on. I would suggest splitting all the steps (at the very least Read Update Delete) and looking at them separately. You first learn to walk, then you learn about music theory, then you learn to play an instrument. You don't start off in the middle of a parade, figuring the basics out as you go along." CreationDate="2017-11-16T15:34:07.367" UserId="2164" />
  <row Id="8755" PostId="3824" Score="0" Text="this gives another point of view “Foundations/Applications/Implecations” as opposed to the view in the question “CompSci/IT/Digital Literacy”. I think I have a pretty good idea of what should be in and out. But I would like to know for the examples, in the question, where they fit in (or not)." CreationDate="2017-10-14T08:51:46.177" UserId="204" />
  <row Id="8756" PostId="3824" Score="0" Text="I would argue that none of “big data, Page Rank, Big Table / GFS” are “underpinning principles of computer science”. But exploring them could lead to exploring the “underpinning principles of computer science”. (What is GFS?)" CreationDate="2017-10-14T08:54:53.210" UserId="204" />
  <row Id="9049" PostId="3831" Score="0" Text="Your code example confuses me. (1) why would you repeatedly set the power to the same constant value of 20? (2) I infer the intention of the code is to hold the button for 30 seconds. How does setting the Power factor into this?" CreationDate="2017-11-16T15:28:03.083" UserId="2164" />
  <row Id="8779" PostId="3836" Score="1" Text="We have peanut and jam sandwiches. In English Jelly is the wobbly edible non-food stuff, that is eaten at children's parties." CreationDate="2017-10-20T08:29:02.847" UserId="204" />
  <row Id="8766" PostId="3837" Score="0" Text="I agree this is a very important point, and I will use it to deepen the exercise during the teacher (me) demonstration stage.  Thanks!" CreationDate="2017-10-18T04:57:30.640" UserId="1015" />
  <row Id="8765" PostId="3838" Score="0" Text="Simple, but I like it!  What better way to show the difficulties that students might otherwise gloss over?" CreationDate="2017-10-18T04:54:34.003" UserId="1015" />
  <row Id="15413" PostId="3839" Score="1" Text="Could you elaborate on this answer, maybe with some more explanation as to why you think Stepik is the correct answer to the question?" CreationDate="2019-08-08T15:15:33.747" UserId="58" />
  <row Id="8767" PostId="3840" Score="0" Text="Are they both your first languages, or do you know one of them well?" CreationDate="2017-10-18T13:09:53.843" UserId="204" />
  <row Id="8768" PostId="3840" Score="0" Text="both first languages" CreationDate="2017-10-18T13:17:06.450" UserId="3307" />
  <row Id="8769" PostId="3840" Score="6" Text="This sounds like a good way to totally confuse yourself. You might look here for some general advice: https://cseducators.stackexchange.com/a/1111/1293. Python and JavaScript have different underlying structure. It might be best to build a foundation in one or the other first." CreationDate="2017-10-18T13:31:24.070" UserId="1293" />
  <row Id="8770" PostId="3840" Score="1" Text="Could the down voters, and close voters, please leave a comment, to explain why. Closing a question without explanation is rude. And could lead to @redshift running away fast." CreationDate="2017-10-19T08:37:52.673" UserId="204" />
  <row Id="8771" PostId="3840" Score="0" Text="I agree with @ctrl-alt-delor and am also puzzled by the votes. Without some feedback it is hard for the OP to improve the question." CreationDate="2017-10-19T12:00:08.833" UserId="1293" />
  <row Id="8772" PostId="3840" Score="0" Text="I've just added [tag:self-learning] to this question as it seems to be the case. If I'm wrong, the OP can certainly remove it." CreationDate="2017-10-19T12:07:36.823" UserId="1293" />
  <row Id="8777" PostId="3840" Score="2" Text="I'm also puzzled by the close votes.  This question certainly seems topical to me." CreationDate="2017-10-19T18:55:32.193" UserId="27" />
  <row Id="8789" PostId="3840" Score="0" Text="I have not voted to close (if I had, the question would be closed), but I believe the close voters rationale was that the question is about programming more than teaching. I personally think that it's related to teaching and should be left open." CreationDate="2017-10-22T14:47:03.910" UserId="58" />
  <row Id="8775" PostId="3844" Score="0" Text="@Buffy Yes, true novices. I've updated my question." CreationDate="2017-10-19T14:35:29.260" UserId="830" />
  <row Id="8778" PostId="3844" Score="0" Text="I would say one reason I never did pre-planning for programs in college, was that we were never given programs hard enough to require it. Most were small programs to teach a principle or algorithm." CreationDate="2017-10-19T22:30:23.010" UserId="1402" />
  <row Id="8782" PostId="3847" Score="0" Text="This is fantastic! I appreciate this approach, particularly the in-class guidance and pair programming that then leads to a lab. I feel like this is what I have been missing, this integration - we do one example in class, another in lab, another for an assignment. In response to your comment about when to teach this, I might ask a different question about that." CreationDate="2017-10-20T16:24:02.460" UserId="830" />
  <row Id="8784" PostId="3848" Score="1" Text="At on of the answerers on you other question, I am sorry if you interpreted the answers this way. I said nothing about critical thinking, and for planning I only said that there should not be too much planning. Start with none and build it up. However I did say that some people do too much planning; Planning should be useful. I had a section in my answer to the other question **The value of planning** that (partly) answers this one." CreationDate="2017-10-20T18:03:27.327" UserId="204" />
  <row Id="8787" PostId="3848" Score="0" Text="@ctrl-alt-delor Nope, didn't mean to be critical! The answers just challenged me to reconsider whether such skills should even be taught at all, and if so, where in the curriculum. I personally think they should, and early, but wanted to solicit thoughts from others, particularly if there is any research on the matter." CreationDate="2017-10-20T20:23:57.497" UserId="830" />
  <row Id="8783" PostId="3849" Score="0" Text="If a student asks a question using one of these mechanisms, do all the other students automatically see it, and your answer?" CreationDate="2017-10-20T17:58:27.523" UserId="1293" />
  <row Id="8786" PostId="3849" Score="0" Text="That's the reason I tried Slack this year. I thought that having a public space for questions would work better than it has. Only a few students ask me questions on Slack, and they typically DM me instead of posting publicly. If it's a good question though I'll post my response on the public side so that everyone can see it." CreationDate="2017-10-20T19:23:55.770" UserId="30" />
  <row Id="8889" PostId="3849" Score="0" Text="Try to &quot;train&quot; your students early to ask on a discussion things they'd ask in class in front of other students. Only reason to message individually is if it relates to grades or other private matters." CreationDate="2017-11-01T16:40:26.420" UserId="662" />
  <row Id="8794" PostId="3860" Score="1" Text="This comment isn't worth a full answer, but I wouldn't try to convince anyone to join any field based on perceived economic effects. The world changes and students will face different situations than we now see. It is much better, for those who can manage it (not everyone, I realize) to _Do What You Love_. CS makes them better thinkers. Better thinkers have an advantage in any world. You can be happy and poor. You can also be miserable but rich." CreationDate="2017-10-23T20:16:54.433" UserId="1293" />
  <row Id="8795" PostId="3860" Score="0" Text="+1000 to what @Buffy just said. Don't use statistics to excited people about CS. Use examples of the cool stuff they can create, the fun projects they can work on, the problems they can solve." CreationDate="2017-10-23T20:40:47.903" UserId="2068" />
  <row Id="8796" PostId="3860" Score="3" Text="@Buffy There's been a recent discussion on Twitter that focusing on CS only for reasons of interest and passion is a privileged position. https://twitter.com/sehurlburt/status/921336589581766656 . I think that many low-income students are looking for well-paying jobs to help improve their family situation. But of course, if a job can be both high-paying and fulfilling, that's the best." CreationDate="2017-10-23T21:14:36.180" UserId="2045" />
  <row Id="8797" PostId="3860" Score="0" Text="I will type a full answer with sources later but have to leave for now. The short answer is it probably won't hurt, but whether it'll help is kinda dodgy. Women tend to state varied reasons for joining or not joining STEM fields, and this doesn't factor into the most prominent ones. Also, these stats can be a tad misleading for various reasons despite being a neat recruiting tool." CreationDate="2017-10-23T23:58:37.277" UserId="3326" />
  <row Id="8798" PostId="3860" Score="2" Text="Some of it is &quot;know your audience&quot; of course. Female-identified people make up around half the population after all, middle class girls, low-income girls, minority girls, immigrant girls, and so on are all going to have varying needs and priorities." CreationDate="2017-10-24T00:01:00.213" UserId="3326" />
  <row Id="8799" PostId="3860" Score="1" Text="I don't see any reasons not to share the stats. I think they'd only be a problem if that was all you talked about." CreationDate="2017-10-24T00:36:05.333" UserId="283" />
  <row Id="8821" PostId="3860" Score="0" Text="@LinearZoetrope I'd love to see your full answer :)" CreationDate="2017-10-29T14:36:51.890" UserId="2045" />
  <row Id="9033" PostId="3860" Score="0" Text="The NYTimes has a good article on Choosing a College Major that dispels some of the poor information. https://www.nytimes.com/2017/11/03/education/edlife/choosing-a-college-major.html. Studying Philosophy or Interpretative Dance won't necessarily leave  you poor. Studying STEM won't make you rich necessarily. Worth a read for anyone advising HS age students." CreationDate="2017-11-11T19:55:24.843" UserId="1293" />
  <row Id="8803" PostId="3869" Score="0" Text="I've changed the tags as some of the originals weren't essential to the idea of the question." CreationDate="2017-10-26T12:37:54.810" UserId="1293" />
  <row Id="8806" PostId="3869" Score="0" Text="I have many thoughts regarding this question, but no time to write them up today.  Apologies!  My answer will be coming as soon as I can pull it together.  Additionally, you may be interested in [this question](https://cseducators.stackexchange.com/questions/1363/do-python-and-java-lead-students-to-construct-different-mental-models-of-memory) as well." CreationDate="2017-10-26T14:32:59.277" UserId="27" />
  <row Id="8807" PostId="3869" Score="0" Text="Let me note that the video referenced has at least a couple of fatal flaws. At one point the order of suggested operations on pointers is backwards, leading to a loss of the tail of the list. This could be incredibly misleading to a student who is careful to follow the explanations carefully." CreationDate="2017-10-26T15:06:08.360" UserId="1293" />
  <row Id="8848" PostId="3870" Score="0" Text="He doesn't need to be good at math to understand it, python isn't a programming language for first approach" CreationDate="2017-10-31T08:59:30.980" UserId="3361" />
  <row Id="8849" PostId="3870" Score="0" Text="PS in c# you can do (int)5.5" CreationDate="2017-10-31T09:00:06.657" UserId="3361" />
  <row Id="8804" PostId="3871" Score="1" Text="`int(eval(aString))` is very dangerous if `aString` comes from user input. It will allow the user to execute arbitrary code." CreationDate="2017-10-26T13:09:41.270" UserId="204" />
  <row Id="8805" PostId="3871" Score="1" Text="Excellent point. eval is a very big hammer." CreationDate="2017-10-26T13:14:19.137" UserId="1293" />
  <row Id="8829" PostId="3871" Score="0" Text="I think this might also be well coupled with a lesson on &quot;writing good specifications is hard.&quot;  You don't really get a sense for just how hard it is until many years into programming, but you can at least explain that spec writers have to make tradeoffs.  This might be well coupled with ctrl-alt-delor's example of `int(&quot;36/5&quot;)`, which starts to show how hard it can be to draw the line on functionality." CreationDate="2017-10-31T00:33:05.080" UserId="812" />
  <row Id="8810" PostId="3874" Score="1" Text="@EllenSpertus, thanks I have now fixed the answer. It is now 42." CreationDate="2017-10-27T15:26:57.833" UserId="204" />
  <row Id="8820" PostId="3874" Score="0" Text="As I said below, type determines context.  This is an example of function overloading, which is covert in duck-typed Python and overt in statically typed C++ and Java." CreationDate="2017-10-28T18:31:28.600" UserId="21" />
  <row Id="8823" PostId="3881" Score="22" Text="A noteworthy perspective is [Joel Spolsky's opinion on pointers and &quot;getting it&quot;](https://www.joelonsoftware.com/2006/10/25/the-guerrilla-guide-to-interviewing-version-30/): *I’ve come to realize that understanding pointers in C is not a skill, it’s an aptitude.*" CreationDate="2017-10-30T21:43:42.007" UserId="659" />
  <row Id="8826" PostId="3881" Score="8" Text="I will have to dig up the answer, but a question like this was asked previously.  The comments and answers pointed towards a study where one professor created a &quot;test&quot; to determine whether you will ever &quot;get it&quot; or not.  He showed evidence that it was a good test.  Many years later, he came back and said &quot;I'm sorry.  I claimed the test worked.  It, in fact, did not.&quot;" CreationDate="2017-10-30T23:23:58.800" UserId="812" />
  <row Id="8827" PostId="3881" Score="21" Text="@CortAmmon Perhaps you are referring to the infamous [The Camel has Two Humps](http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf), and its [partial retraction](http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-two-humps-programming-aptitude-test-canned-for-overzealous-conclusion/)?" CreationDate="2017-10-30T23:26:06.913" UserId="27" />
  <row Id="8828" PostId="3881" Score="0" Text="@BenI. That's it.  Looks like you've seen it before." CreationDate="2017-10-31T00:15:54.533" UserId="812" />
  <row Id="8830" PostId="3881" Score="7" Text="“Must it be this way?” Yes. As with maths, playing piano, anything. Every person has a different kind of intelligence. Some are maths oriented, some aren't." CreationDate="2017-10-31T01:16:21.593" UserId="963" />
  <row Id="8831" PostId="3881" Score="5" Text="Why is this code so hard to understand? Because it doesn't use the natural do loop." CreationDate="2017-10-31T02:05:49.533" UserId="1888" />
  <row Id="8839" PostId="3881" Score="1" Text="In a proper University, the professors would *completely* ignore your UI and would rather focus your implementation of an ADT or your implementation of an algorithm. As that is what they ask you for the assignments, is it not? Maybe a good idea is to separate a text-based UI library like you have above that you re-use every time you submit an assignment. Make sure your Professor is OK with that, though you most, most likely will not earn extra points for it. Then again cops aren't enrolled to Universities, huh?" CreationDate="2017-10-31T06:56:08.187" UserId="3359" />
  <row Id="8847" PostId="3881" Score="0" Text="@Joshua My thought exactly." CreationDate="2017-10-31T08:22:46.807" UserId="1142" />
  <row Id="8852" PostId="3881" Score="4" Text="Pedantic note : though the current code work, a `do while` would fit better." CreationDate="2017-10-31T10:06:36.697" UserId="1375" />
  <row Id="8854" PostId="3881" Score="1" Text="Since this has more to do with your example than your actual question, I am leaving it as a comment. Could your student understand the code rewritten in plain English? For example: *Suppose I was given the integer negative one. While any integers I am given are less than one and greater than five, I will state, &quot;Please enter a number from one to five.&quot; and then I will request an integer.* If she could understand this, then there may be an element of the syntax that is confusing her." CreationDate="2017-10-31T13:42:13.173" UserId="7" />
  <row Id="8866" PostId="3881" Score="2" Text="I want to chime in and agree that this is badly-written code (it makes the reader think unnecessarily hard), and thus I can’t help but empathize with the student. It could be rewritten into pseudocode that shows its intent more clearly: `int answer; repeat { … } until (answer ∊ [1..5])`. The confusing initial value of `answer` vanishes, and the postcondition of the loop is immediately clear. I might wager that the student *would* get this pseudocode — and in that case the student is hardly at fault, Java and/or the author of the code is." CreationDate="2017-10-31T17:09:19.450" UserId="3368" />
  <row Id="8867" PostId="3881" Score="0" Text="Of course, badly-written code occurs in the wild, and understanding it is a vital skill when programming in the “real world”. But it is hardly *essential* to understanding computer science, and such code should not play a role in the assessment of someone’s comprehension of the basics of CS." CreationDate="2017-10-31T17:17:17.903" UserId="3368" />
  <row Id="8868" PostId="3881" Score="15" Text="@Lynn I agree that the code could be clearer, but it's still not deeply complex. After how many course hours of study in Java would it still be reasonable for someone to be unable to follow this snippet code, imperfect though it may be? 20? 100? 500? 10,000?" CreationDate="2017-10-31T17:34:20.247" UserId="27" />
  <row Id="8890" PostId="3881" Score="0" Text="@BenI. 2-3? couple more at a stretch?  I'm not a Java programmer myself, but all the topics needed are covered by the 6th page of the language tutorial on cplusplus.com.  assuming that each CS class your student has done (class!=lesson, right?) does cover some programming, I would have thought this would be prior knowledge.  My degree course, intentionally avoiding a language that (m)any would have used (no coding requisite) reached this point in the first lecture. (I am aware that this isn't degree level)" CreationDate="2017-11-01T17:06:22.083" UserId="993" />
  <row Id="8897" PostId="3881" Score="3" Text="Why the hell is that code so hard to understand? Here are some potential reasons: (1) &quot;int&quot;... what is &quot;int&quot;? That's not an English word. (2) &quot;answer &lt; 1 || answer &gt; 5&quot; wtf are those two bars? Oh, it means &quot;or&quot;? Then isn't that saying &quot;if answer is less than 1 or itself or if it's greater than 5?&quot; (3) &quot;println&quot; what the hell is printing? I don't even have a printer. Where would I be printing? And what's &quot;ln&quot;? natural log? (4) &quot;myScanner&quot; ...first my printer and now my scanner?? what even is a scanner?? I don't have a scanner! (5) if answer is -1 how can it also be nextInt? Isn't that wrong?" CreationDate="2017-11-01T18:35:03.990" UserId="823" />
  <row Id="8904" PostId="3881" Score="5" Text="@Joshua One of most important skills in CS is reading and comprehension of code (and when it comes to SE, it's *the* most important skill). And this includes bad code. You can't pretend bad code doesn't exist. Plus, while I agree that code could be better, if you think it's bad code, you clearly haven't seen really *bad* code." CreationDate="2017-11-02T10:52:44.043" UserId="1093" />
  <row Id="8908" PostId="3881" Score="0" Text="@Mehrdad Note that OP specifically state that his student wasn't able to understand the condition for the loop to end. Note that he doesn't know the class Scanner. On the loop thing, we have basic comprehension of code, of the Scanner thing, it's about Java specific classes, which is not relevant here." CreationDate="2017-11-02T13:00:53.627" UserId="1375" />
  <row Id="8910" PostId="3881" Score="6" Text="@Mehrdad Apparently the student has already had all of that explained to them, so there's an expectation that they *shouldn't* be confused by any of those things. Maybe that expectation is wrong, though. Maybe they just pretended to understand it when it was explained in the past, maybe they thought they understood it - or even did understand it - at the time, but have now forgotten it all. Is the failure to comprehend an inability to understand some or all of the individual parts or an inability to put them together - despite understanding them individually - to figure out the overall intent?" CreationDate="2017-11-02T14:28:14.417" UserId="1924" />
  <row Id="8929" PostId="3881" Score="1" Text="The obvious answer to this question is that **Java is Evil**, and students should learn on Right and Proper languages like Perl and bash..." CreationDate="2017-11-02T20:33:51.087" UserId="3132" />
  <row Id="8931" PostId="3881" Score="0" Text="I'm a senior front end web developer and to be honest I don't really understand the example code. I wouldn't call myself a programmer though." CreationDate="2017-11-02T22:44:26.767" UserId="3413" />
  <row Id="8932" PostId="3881" Score="0" Text="This is an anti-pattern (bad design), but should be clear to anyone reading it.  It's typical beginner code. I have known many data modelers who squeaked by their programming degree and then avoided programming because they really didn't &quot;get&quot; it. They could follow and enforce rules and recipes, but could not wrap their heads around any degree of indirection." CreationDate="2017-11-03T00:56:21.843" UserId="1537" />
  <row Id="8933" PostId="3881" Score="0" Text="This is a serious question, so no flame please. Based on your empirical evidence/experience, is there a gender bias for students who don't get it? If so, what is that bias? How statistically strong are your numbers? ie How many students have you taught and what percentage did you find don't get it?" CreationDate="2017-11-03T06:12:20.857" UserId="3416" />
  <row Id="8937" PostId="3881" Score="2" Text="@Bohemian I have not kept numbers that could be easily organized like that, so I only have impressions. I have not noticed any gender divide (or any patterns, really). I have definitely had more males with serious problems than females, but I have also had many more males in my CS courses in general, so it doesn't add up to any information on a gendered comprehension gap. I believe that I have taught CS to between 400 and 500 students at this point." CreationDate="2017-11-03T16:06:05.743" UserId="27" />
  <row Id="8943" PostId="3881" Score="2" Text="On the comment about it being specifically the condition that's confusing, my experience as a TA for an introductory course was that students new to programming were never taught about boolean values.  Only the magic structure of conditionals, that the `&lt;` in `if (x &lt; 1)` is part of the `if` and only `x` and `1` could be slotted in with values/variables.  The ability to do `bool is_lower = x &lt; 1; if (is_lower)` was mind-warping when I explained it during office hours." CreationDate="2017-11-03T18:31:39.547" UserId="3262" />
  <row Id="8944" PostId="3881" Score="4" Text="If you ask me, it's a clear sign that the student more than likely should have not passed the prior CS course(s). The student may have had someone else do their work, or would always &quot;seek help&quot; as in someone explaining how the write the code, while also telling them how to produce code at the same time. Therefore they would just regurgitate what was said, rather than actually learning. This piece of code is by no means complex, and should be able to be deciphered by someone exiting a beginner level programming course." CreationDate="2017-11-03T18:42:05.897" UserId="3423" />
  <row Id="8945" PostId="3881" Score="0" Text="For the record, I did get confused by some simple things when I learned to program. One day, some topic I would find confusing would just click. I now look back and think about my blunders and wonder how on Earth I was even confused to begin with. The answer? I didn't put in enough practice, lacked ambition, and didn't feel confident in my skill. I was able to overcome the challenges, and learned to really love programming :)" CreationDate="2017-11-03T18:46:31.163" UserId="3423" />
  <row Id="8946" PostId="3881" Score="3" Text="I've found a real good analogy that I believe is amazingly accurate--think of programming as you do playing sports.  Your question can become, can every child learn to play basketball--pretty much.  Can every child become a basketball pro?  Probably not.  There are various obvious physical and mental issues that clearly prevent it (Although anyone who works at it hard enough can become extremely good).  There is just as much variance in programming ability--and just as few pro-level coders.  Most of us &quot;Professionals&quot; are just playing hoops outside our garages and will never meet a pro." CreationDate="2017-11-03T19:33:11.510" UserId="1399" />
  <row Id="8949" PostId="3881" Score="1" Text="As someone learning programming, I had a huge trouble with creating classes in Java. It wasn't until I switched languages twice until VBA functions that I truly understood what classes actually did and were used for. Even now, I rarely use classes and instead find myself creating functions instead. Sometimes all it takes is a bit of time and a shift in perspective to turn a complete failure into an unqualified success." CreationDate="2017-11-03T22:21:22.590" UserId="3426" />
  <row Id="8960" PostId="3881" Score="1" Text="@Anoplexian +1 good point. It was my third language before I was able to abstract the problem from the code." CreationDate="2017-11-05T01:01:14.127" UserId="1537" />
  <row Id="8964" PostId="3881" Score="1" Text="There's one thing pretty much everyone seems to be missing here. The return value of `nextInt()` isn't obvious. Someone who isn't used to Java would have to check the docs to know what it returns when it can't find a number. I'm guessing from the way the code is written that it's `-1`, but I can only guess that because I'm an experienced programmer, I can't see a reason why a beginner would logically assume that." CreationDate="2017-11-05T08:44:54.930" UserId="1538" />
  <row Id="8968" PostId="3881" Score="11" Text="Is there some meaningful percentage of teachers who can’t teach students to program?" CreationDate="2017-11-05T13:51:17.353" UserId="3369" />
  <row Id="8992" PostId="3881" Score="0" Text="Sometimes, it is odd, but I think programming is one of those cases where it isn't that you *can't* learn something, but that it sometimes takes something else to make it click. It's been a while, but there were some concepts that didn't come right away, yet after taking a Digital Logic Circuits course, everything started to fall into place mentally. It may be that everyone is explaining it directly as it is (programming concepts) whereas something else may illuminate it. And once the basics are grasped, well, it makes it easier to grok things that follow the more direct way." CreationDate="2017-11-06T19:47:36.727" UserId="1477" />
  <row Id="8996" PostId="3881" Score="1" Text="@MPW I think most would (sadly) agree that there's a meaningful percentage of teachers who can't *teach*, let alone teach programming." CreationDate="2017-11-06T21:08:41.790" UserId="3457" />
  <row Id="8997" PostId="3881" Score="0" Text="Is there any empirical evidence that shows some people can't learn to program? Yes. I've been working in and around programming since the 1980's, and I meet more and more of those people every year. They're usually working in Java or C# doing &quot;web development.&quot; Just because your student doesn't understand anything about programming doesn't mean she won't be able to find work in the IT industry as a developer." CreationDate="2017-11-06T21:24:35.610" UserId="2785" />
  <row Id="9006" PostId="3881" Score="1" Text="Learning is a highly emotional and relationship based process. If you were standing over this student while they were reading the code, they may have been extremely nervous and they might have started off confused by why **answer** is assigned -1 instead of the simpler choice of 0. So they think they are being tricked and have been taught that it's better to say nothing than say the wrong thing. They panic and assume there is something basic they are missing and give up on trying to understand the code. It's not the student, it's the *situation*." CreationDate="2017-11-07T12:15:59.383" UserId="939" />
  <row Id="10240" PostId="3881" Score="1" Text="With coding, it's possible to coast through some courses by memorizing some bits here and there, without *really* learning it. Believe it or not, the code snippet you have there involves a concept that *isn't* common sense, that is, not something she would have learned outside of a programming class. She might not understand starting conditions, or order of execution. She might assume that there's a reason for -1 instead of any other invalid number." CreationDate="2018-03-05T19:30:09.523" UserId="4082" />
  <row Id="8835" PostId="3882" Score="35" Text="This is also lacking any kind of evidence. You may *think* “that students who don't learn either have little desire to learn or have had poor teaching in the past,” but can you actually back that statement up with some kind of evidence? I have read evidence contrary to that statement, and while it was far from ironclad proof of any kind, I think this question desperately needs more than generalities and possibly-wishful thinking." CreationDate="2017-10-31T03:52:11.780" UserId="1246" />
  <row Id="8836" PostId="3882" Score="5" Text="(Doing some due diligence here.) It seems that the paper I had read suggesting that they had evidence demonstrating that not everyone can learn to program has been retracted for overstating its conclusions. *However*, you can read the retraction [here](http://www.eis.mdx.ac.uk/staffpages/r_bornat/papers/camel_hump_retraction.pdf)—it still isn’t supremely encouraging. It shows that a lot of the data that went into the retracted paper is real, and if the suggested explanations for them lack sufficient evidence, we’re still left with problems we don’t know the causes to." CreationDate="2017-10-31T04:02:10.447" UserId="1246" />
  <row Id="8837" PostId="3882" Score="4" Text="In short, once again, I strongly recommend finding actual research and evidence for your claims that the answer to the title question is “no.” You kind of just assert that and then go into all your hypotheses for reasons why students fail despite the lack of a population destined to fail." CreationDate="2017-10-31T04:03:07.577" UserId="1246" />
  <row Id="8853" PostId="3882" Score="27" Text="Actually, having taught for about 45 years, my sample is &gt;10K. Every student is an anecdote, of course, but there are a lot of them. Since I also taught at quite a variety of places, I'd guess I've seen most of the range of possibles." CreationDate="2017-10-31T10:36:22.340" UserId="1293" />
  <row Id="8881" PostId="3882" Score="2" Text="@Buffy: I loved your response. I lecture now and my first TA job was 21 years ago. You did not say a single thing which is didn't recognize from personal experience or from listening to my father :)" CreationDate="2017-10-31T22:13:45.047" UserId="3371" />
  <row Id="8934" PostId="3882" Score="1" Text="You may be onto something here. There was a girl like that in my CS classes back in the 80's. Her goal was just to get a degree so she could go into teaching. She was in CS because her dad was a prof in the Engineering department, so her classes in that department were free. CS was less math than ChemE, so there she was." CreationDate="2017-11-03T10:17:07.333" UserId="1139" />
  <row Id="8965" PostId="3882" Score="0" Text="I have to agree with this. One of the reasons I never bothered to futher my education was because I found the stuff we were doing in class to be far below what I was capable of doing at home (&quot;make a simple asteroids game&quot; vs &quot;simulate rigidbody physics&quot;, &quot;make a simple 1 operation calculator&quot; vs &quot;write a recursive descent parser&quot;)." CreationDate="2017-11-05T08:52:38.247" UserId="1538" />
  <row Id="8967" PostId="3882" Score="4" Text="This post seems to be 80% about bad teachers. However programming is a *constant, never-ending learning process*. If you want to be successful, you must be able to study and learn new things by yourself without the assistance of a teacher. Having a good one can help, but a good programmer ought to have enough learning aptitude to learn to program from scratch, if need be." CreationDate="2017-11-05T10:19:32.917" UserId="3440" />
  <row Id="8999" PostId="3882" Score="2" Text="Sure, with tons and tons of work everyone can pass a course. *But if they need that much special attention next semester as well, they haven't learned how to program*. I have a colleague who googles his problem then pastes in whatever code he finds on stack overflow randomly into his code. He kinda gets things working most of the time. This isn't someone who has learned how to program. This is someone who spent a lot of time with his teachers who helped him pass courses. Getting your code to work or passing the course through the application of sheer brute force is not learning how to program." CreationDate="2017-11-07T05:36:58.150" UserId="2777" />
  <row Id="15988" PostId="3882" Score="2" Text="-1 &quot;few non medical ones why they can't&quot; this hand-waves away, without any evidence, at least two very large levels of reasons why people could not interface with programming. It sounds like you accept that some people clearly cannot learn to program (bounded from below by &quot;hormonal imbalance or other disorders&quot;). The honest question then is really: what is that percentage?" CreationDate="2019-12-23T18:27:17.353" UserId="8137" />
  <row Id="18617" PostId="3882" Score="0" Text="I'm sitting here with 23 years of teaching experience, and yes Buffy is spot on." CreationDate="2021-12-20T22:32:45.337" UserId="5011" />
  <row Id="19696" PostId="3882" Score="0" Text="+1 for &quot;No one had ever taught them how to learn in a classroom.&quot; COVID has really not helped with that one, at least in the UK" CreationDate="2022-05-12T12:05:03.540" UserId="11932" />
  <row Id="21660" PostId="3882" Score="0" Text="Perhaps your two successful students had learned enough Formal Operations by the end to make a good go of it. Some learn FO before CS courses, some during, some later or mostly, never. We don't want the nevers in the workplace, at least not for anything crucial." CreationDate="2024-02-04T22:49:44.510" UserId="5349" />
  <row Id="8822" PostId="3883" Score="3" Text="I'll admit that some have &quot;enormous difficulties&quot;. But that isn't the same thing as &quot;can't learn&quot;. Ask Stephen Hawking about difficulties. I'll also admit I have no ability in music. But I have no desire, either." CreationDate="2017-10-30T20:46:18.517" UserId="1293" />
  <row Id="8860" PostId="3883" Score="10" Text="My experience as a dev (mainly teaching interns/juniors, but also as a quest teacher at our local uni) is that you hit the nail right on the head. The comparison with musical ability is spot on in my view. I tend to give these students the same tough love my guitar teacher gave me: If you like it, by all means continue, but I would look elsewhere for a career if I where you. Maybe they will learn 'eventually'  and with 'enormous difficulties' but the student you described in your question will never get hired here, as we value 'learning speed' over actual knowledge." CreationDate="2017-10-31T15:26:16.237" UserId="3367" />
  <row Id="8875" PostId="3883" Score="9" Text="+1 for &quot;wiring&quot;. I don't have so many data points (only ~20), but I once taught &quot;Intro to Programming for non-CS Majors&quot;, easily the most challenging course I ever taught – not because the material was hard, but because so many students found it hard to grasp basic concepts. There were three groups in the class: the &quot;naturals,&quot; who programmed with ease from Day 1; the &quot;lost,&quot; who struggled with *Hello, World* and struggled even more mightily as the course progressed; and the &quot;learners,&quot; who struggled at first but eventually turned a corner. (Only one of my students that term was a learner.)" CreationDate="2017-10-31T20:42:02.287" UserId="1824" />
  <row Id="8935" PostId="3883" Score="0" Text="I can speak to the combination of desire to learn and inability to do so. I cannot hold a tune. In fact, at most, I can only tell that one note is higher or lower than another, no more than that. Yet I still played Clarinet for years. My only reference for whether the note was actually in tune is if someone else told me, I simply had no ability to tell myself. I tried so hard to learn, but I am seemingly fundamentally incapable of hearing if a note is in or out of tune and what the note is or isn't." CreationDate="2017-11-03T11:39:05.447" UserId="1919" />
  <row Id="8936" PostId="3883" Score="4" Text="I had all the mechanics of playing an instrument down, I just had no way of knowing if what I was playing was actually in the correct pitch. In a similar fashion, I can see a student who understands all the parts to a program but can't make sense of the program as a whole in their mind." CreationDate="2017-11-03T11:39:52.303" UserId="1919" />
  <row Id="19695" PostId="3883" Score="0" Text="Playing a musical instrument is the analogy I would make.  Programming is pretty natural to me, even without the need for regular practice.  I wish playing the guitar (well, baroque lute these days) were the same.  The hours I have put into practice and I am still useless!  I can play, but I will never play well (I used to say &quot;I play with a guitar&quot; rather than &quot;I play guitar&quot; ;o)" CreationDate="2022-05-12T11:59:58.107" UserId="11932" />
  <row Id="8825" PostId="3884" Score="3" Text="Welcome to [cseducators.se]! I hope we hear more from you in the future." CreationDate="2017-10-30T22:47:45.777" UserId="27" />
  <row Id="8878" PostId="3884" Score="6" Text="I agree that there are &quot;wrong&quot; languages for teaching programming.  However, if it were possible to develop a &quot;right&quot; language that would permit anybody to learn to program, I'd expect the past half-century of looking for it would have produced at least some hint of success." CreationDate="2017-10-31T21:38:45.390" UserId="2781" />
  <row Id="8882" PostId="3884" Score="5" Text="Sure it have not existed? What about pascal or python? Is to note that the choice of &quot;language to teach&quot; is driven by the idea of &quot;must be a industry standard&quot; and in some places have been replaced older languages used for years to get trendy. So I'm unsure if this is proven or not." CreationDate="2017-11-01T02:31:25.047" UserId="3352" />
  <row Id="8884" PostId="3884" Score="3" Text="If the code snippet was using some obscure part of Java, then that could definitely be true.  However this is simple enough that anyone who understands a while statement should be able to answer it.  And inability to understand &quot;keep running this code while the condition here is true&quot; means they truly haven't grasped how code works." CreationDate="2017-11-01T12:01:01.003" UserId="1864" />
  <row Id="8893" PostId="3884" Score="0" Text="@Mark Pascal was designed for the specific purpose of teaching programming concepts and good practice -- or at least, good practices as they were understood at the time.  And it was great at teaching, but not that great for large-scale maintenance.  Unfortunately, tools designed to teach and tools designed to be used in large-scale deployment don't always mean the same tools.  And these days we demand that fresh graduates be immediately employable and productive, so they're taught &quot;industry standard&quot; tools instead of &quot;useful for learning&quot; tools like Pascal." CreationDate="2017-11-01T17:55:08.360" UserId="3390" />
  <row Id="8899" PostId="3884" Score="0" Text="That is only true for the first version of Pascal. It to be only &quot;usefull&quot; for teach is wrong: http://pascal-central.com/ppl/chapter4.html#Myths. Anyway, the point is that some languages are better to be used for teach than anothers, and not mean are pointless for real work... like for example python (that is popular today)." CreationDate="2017-11-01T19:02:22.687" UserId="3352" />
  <row Id="8901" PostId="3884" Score="5" Text="@mamcx, Yes, Pascal was created as a teaching language.  So was Python.  So was Basic.  So was Logo.  AppleScript had &quot;anyone can program&quot; as a goal.  Wikipedia lists almost a hundred other languages for teaching people to program.  And yet, somehow, people still have difficulty.  Maybe it's not the language that's the problem?" CreationDate="2017-11-01T21:12:04.907" UserId="2781" />
  <row Id="8902" PostId="3884" Score="0" Text="@Graham Well, it might be. But there's always the chance that the person not understanding doesn't know Java but knows Python. If you only know Python, there's a decent chance you have no idea what &quot;||&quot; means, since Python uses the more understandable &quot;or&quot; keyword. &quot;&amp;&amp;&quot; would make sense, probably. The &quot;ln&quot; on &quot;println&quot; may have gotten confusing, what the heck is a &quot;myScanner&quot;, etc. With only 3-5 minutes looking at it there's also the chance that they misread &gt;/&lt; or something trivial like that too." CreationDate="2017-11-01T21:14:58.793" UserId="3393" />
  <row Id="8905" PostId="3884" Score="2" Text="@Delioth By the time you get to the third set of lectures though, they should understand &quot;||&quot;.  The OP isn't really looking at &quot;println&quot; and &quot;myScanner&quot; - he says she can't even explain &quot;answer&quot; needing an initial value, or what values of &quot;answer&quot; cause the loop to stop. For me, this either demonstrates that she copied answers for earlier classes and never did the work, or that tests for earlier classes weren't effective.  And really it shows that she generally does not understand structured logical reasoning like &quot;if you do this then that happens&quot;, which is a concern for a student." CreationDate="2017-11-02T10:55:01.883" UserId="1864" />
  <row Id="8824" PostId="3885" Score="6" Text="Welcome to [cseducators.se]!  It might be worth noting that the study he is citing was partially retracted, as I described in my answer [here](https://cseducators.stackexchange.com/a/784/27)." CreationDate="2017-10-30T22:47:01.583" UserId="27" />
  <row Id="8832" PostId="3885" Score="4" Text="I really wish Jeff Atwood would post an update / disclaimer on that blog post" CreationDate="2017-10-31T02:47:46.417" UserId="2045" />
  <row Id="8903" PostId="3885" Score="2" Text="I read that code fragment and saw instantly that the value of (a = b) could only be &quot;false&quot;. Wrong! the author was writing in one language, I was reading in another. I think an immense number of these difficulties are actually caused by misunderstanding the notation." CreationDate="2017-11-02T00:38:44.020" UserId="2936" />
  <row Id="9002" PostId="3885" Score="0" Text="The paper sourced in this answer and on CodingHorror blog [was retracted by its author](http://retractionwatch.com/2014/07/18/the-camel-doesnt-have-two-humps-programming-aptitude-test-canned-for-overzealous-conclusion/)." CreationDate="2017-11-07T09:32:43.887" UserId="2765" />
  <row Id="8833" PostId="3886" Score="10" Text="This is a surprisingly practical answer." CreationDate="2017-10-31T03:01:21.237" UserId="27" />
  <row Id="8873" PostId="3886" Score="2" Text="This answer says that no matter how many wrong predictions (patterns or others) you try, you can't predict an observable quantity X. Like ever. So basically it says science can't work." CreationDate="2017-10-31T19:16:34.530" UserId="2765" />
  <row Id="8874" PostId="3886" Score="20" Text="@kubanczyk -- come on, don't be factious, the answer isn't saying &quot;science doesn't work&quot; or anything silly like that. Rather, this answer is saying that regardless of what the predicted value is, the best thing for the educator to do is to help all students to the best of their ability. So, since the predicted outcome doesn't (or at least shouldn't) influence how you teach, and since prediction is difficult, why expend effort worrying about it?" CreationDate="2017-10-31T20:02:11.777" UserId="732" />
  <row Id="8895" PostId="3886" Score="9" Text="I think you're being a little too naive here. If person A requires 10x as much work to &quot;get&quot; a topic X as person B in school, then there's a nontrivial chance that that's going to be just as true on the job as it was during school. Meaning that hiring them for that job might be bad both for them and for the employer. You don't expect see this when they're hired because they could (and should) have already spent the 10x time necessary to become as good as everyone else who is applying. But their recognizing this can be useful knowledge for them: they can try doing something they are better at." CreationDate="2017-11-01T18:13:59.043" UserId="823" />
  <row Id="8896" PostId="3886" Score="0" Text="So if you're going to take this practical view, you should be asking yourself whether it's better to inform them of this when you think you recognize it, or better not to. Of course I can think of arguments both ways, and I'm not claiming that &quot;do not tell them&quot; is necessarily the worse option. But the point is, it's not about whether *you* will be able to teach them that particular topic or whether *you* should just &quot;give up&quot;, but about whether it'd help them in choosing the right path (future career, etc.)." CreationDate="2017-11-01T18:16:51.033" UserId="823" />
  <row Id="8900" PostId="3886" Score="2" Text="@Mehrad I think you're assuming each person has an intrinsic learning rate for programming topics. I don't think learning science supports that." CreationDate="2017-11-01T20:34:04.870" UserId="2045" />
  <row Id="8909" PostId="3886" Score="0" Text="They might just have trouble to get the basis, since they finally got their degree without doubling all their year, it's seems that what you assume here is not enterely true. If we generalize (and exagerating a little) that, you're basically saying that anyone that made a year of class twice (excluding personal matters and keeping only learnin problem) should just have drop school from where that year. Nova : I guess this is why it's always better to try to explain differently instead of just repeating." CreationDate="2017-11-02T13:05:57.790" UserId="1375" />
  <row Id="8952" PostId="3886" Score="1" Text="@nova I am no educator and have no knowledge of learning science; but my life experience seems to indicate that there are truly stupid people. (More generally, there is a wide spectrum of intelligence, but this discussion centers on the lower end.) Obviously a stimulating and supportive environment can improve intelligence even with young adults, but my layman's idea of the state of research is that there is a limit to environmental influence at that point. That would indicate that yes, there is an intrinsic leaning rate (ceiling). That fits with my personal experience. Do you disagree?" CreationDate="2017-11-04T07:04:07.577" UserId="1675" />
  <row Id="8995" PostId="3886" Score="0" Text="@nova: Oh, OK, please link me to said science? A priori, it would seem absolutely *shocking* for everyone to have the same learning rate for {any given topic} (even on average, if not uniformly). So if you have evidence to the contrary, I'm all ears (er, eyes)." CreationDate="2017-11-06T20:17:38.457" UserId="823" />
  <row Id="9007" PostId="3886" Score="2" Text="@Mehrdad and Peter The key point is that prior knowledge greatly influences ability to learn. New knowledge is incorporated into existing knowledge structures, which may be more or less receptive to the addition (see: constructivism). Those with well-organized prior knowledge can see patterns others can't, and therefore learn better (see https://www.nap.edu/read/9853/chapter/5#32). I believe there may be differences in &quot;intrinsic learning rate&quot;, but I think those are dwarfed by the effect of differences in prior knowledge. By building the right knowledge, we can accelerate learning." CreationDate="2017-11-07T13:10:23.963" UserId="2045" />
  <row Id="9012" PostId="3886" Score="1" Text="@nova: Apply your logic to something more tangible and you'll see it makes no sense. It's like I'm claiming that one airplane can be intrinsically more fuel-efficient than another one, and you're trying to somehow counter it with *&quot;No, the key point is that the number of passengers greatly influences the fuel usage, and those with fewer people use less fuel. [1] [2] [3] I believe there may be differences in &quot;intrinsic fuel consumption&quot;, but I think those are dwarfed by the effects of differences in passenger count.&quot;* I mean, you can believe what you want, but your argument doesn't support it." CreationDate="2017-11-07T13:37:42.890" UserId="823" />
  <row Id="9013" PostId="3886" Score="1" Text="@nova: If we're going to go based on our own beliefs, I know I personally have had lots of trouble learning certain topics (e.g. analog circuits) despite pretty equal background to my peers' and putting in ridiculous amounts of effort as compared to other topics. At some point I figured people really do just have different strengths. Now of course that won't convince you and you'll instead just conclude &quot;oh but you're just 1 sample&quot; (no, I've seen others too) or &quot;oh you were learning it *incorrectly*&quot; (uhm, yeah, sure...) but I hope you realize your personal beliefs aren't any more convincing." CreationDate="2017-11-07T13:52:24.093" UserId="823" />
  <row Id="9243" PostId="3886" Score="0" Text="@Mehrdad Your analogy makes no sense. Intrinsic fuel consumption happens to dwarf passenger count in airplanes but that isn't because of the fundamental logic of the situation, but because of the laws of physics. I think a better analogy would be to stocks: With companies founded at different times there is massive variance in profit growth in an absolute  sense, even if profit growth as a percentage of the previous years profit is the same across all companies." CreationDate="2017-12-17T03:32:29.613" UserId="3586" />
  <row Id="9244" PostId="3886" Score="0" Text="@Mehrdad To take the analogy to students, there could be an intrinsic learning rate as a percentage of prior knowledge but given varying backgrounds of students this would be only extremely loosely correlated to absolute growth in knowledge over a given term." CreationDate="2017-12-17T03:32:47.757" UserId="3586" />
  <row Id="21653" PostId="3886" Score="0" Text="If Formal Operations is necessary, and student doesn't have it yet, then BY learning programming they can start to gain it. But it will be harder than for someone who already has some FO. Like learning calculus while also learning English as a second language." CreationDate="2024-02-03T13:05:49.290" UserId="5349" />
  <row Id="8851" PostId="3887" Score="1" Text="You may be an amateur in this realm, but that it a perfectly sound analysis. Welcome to [cseducators.se]!" CreationDate="2017-10-31T10:03:15.330" UserId="27" />
  <row Id="9000" PostId="3887" Score="1" Text="+1. Very sad to see the only answer that tries to bring actual data to CS Educators so low. I wouldn't have thought this to be such a faith based community. Shameful :(" CreationDate="2017-11-07T05:39:14.983" UserId="2777" />
  <row Id="12425" PostId="3887" Score="1" Text="In this paper &quot;Evidence That Computer Science Grades Are Not Bimodal&quot;, Patistas et al. seem to prove that the grades are indeed not bimodal..." CreationDate="2018-05-10T18:55:57.700" UserId="1144" />
  <row Id="12426" PostId="3887" Score="0" Text="@NunoGilFonseca Excellent, glad to hear it. I am not a CS educator, so I have not taken as much time as I might recommend following this topic, but that is a promising sign. I hope there are more studies and more papers that confirm that result." CreationDate="2018-05-10T19:04:57.930" UserId="1246" />
  <row Id="16000" PostId="3887" Score="1" Text="The problem with &quot;barring actual mental handicap&quot; is that it makes the argument effectively circular: &quot;Except for those people who cannot learn to program, everyone can learn to program.&quot;" CreationDate="2019-12-27T17:25:23.240" UserId="8137" />
  <row Id="16001" PostId="3887" Score="0" Text="@DanielR.Collins The word “actual” was meant to pin things down to handicaps that are widely recognized as a medical diagnosis, which would prevent a “no true Scotsman” issue like you describe." CreationDate="2019-12-27T17:26:47.183" UserId="1246" />
  <row Id="16002" PostId="3887" Score="0" Text="@KRyan: That's well phrased and anticipated, but I don't think that avoids the problem. People with medically-diagnosed handicaps are students (just to reference the OP's exact question phrasing), too." CreationDate="2019-12-28T03:58:08.727" UserId="8137" />
  <row Id="8856" PostId="3889" Score="4" Text="I disagree with the notion that a teacher (of X) should be advising a student to not study X (arguments can be made if the student is not their student; but that is not the case here). You mention the possibility that the OP isn't a good teacher; which is exactly why he shouldn't suggest that the student quits the study, he might end up discouraging someone while the fault lies with the OP." CreationDate="2017-10-31T14:34:54.993" UserId="2164" />
  <row Id="8857" PostId="3889" Score="0" Text="True, that's why i used the word suggest, it's different than saying &quot;you suck&quot;" CreationDate="2017-10-31T14:41:57.947" UserId="3361" />
  <row Id="8863" PostId="3889" Score="4" Text="That's not really the point. Whether OP phrases it rudely or kindly, it still ends up discouraging the student who may simply have been subjected to a bad teacher in the past." CreationDate="2017-10-31T15:40:45.160" UserId="2164" />
  <row Id="8892" PostId="3889" Score="0" Text="Or maybe the student is not suited to the vocation, and he's doing the person and society a great favor. As I see it either the student with come to realise that its good advice and adjust their major before it's too late, or they will buckle down and work harder. It's quite possible that the student knows the correct answer, but is afraid that they are wrong so doesn't want to say anything." CreationDate="2017-11-01T17:49:11.513" UserId="3389" />
  <row Id="9003" PostId="3890" Score="0" Text="[Affects](https://en.wiktionary.org/wiki/affect#Noun)? [Effects](https://en.wiktionary.org/wiki/effect#Noun)?" CreationDate="2017-11-07T09:45:19.287" UserId="2765" />
  <row Id="21659" PostId="3890" Score="0" Text="When I first learned Lisp in college I could see why it worked and was so powerful (you can do essentially everything it is possible to do, you'll just have to build the universe yourself), but I thought it would be easier to tackle something more &quot;domain specific&quot; and less free-form, initially. There's a reason Fortran was so successful: it was designed to implement formulas, which is what the users normally did all day. Few people spend their days making new universes. When I learned C in college, I thought, ok, now I can finally learn: *how can such a thing as a computer possibly work?*" CreationDate="2024-02-03T13:51:58.583" UserId="5349" />
  <row Id="8973" PostId="3891" Score="2" Text="I really like this answer, thank you for taking the time to write it. I hope to see you around the site more!" CreationDate="2017-11-06T01:52:16.580" UserId="58" />
  <row Id="8976" PostId="3891" Score="0" Text="@thesecretmaster: You're welcome :)" CreationDate="2017-11-06T08:46:38.473" UserId="2164" />
  <row Id="16013" PostId="3891" Score="1" Text="Learning by prediction/observation gets my +1. A hugely transferrable skill" CreationDate="2020-01-02T22:50:04.407" UserId="6137" />
  <row Id="8898" PostId="3892" Score="1" Text="I think F-104 and Java is a bad comparison... the F-104 set lots of world records for speed and altitude and had a poor safety record... that sounds much more like C." CreationDate="2017-11-01T18:40:37.837" UserId="823" />
  <row Id="8954" PostId="3892" Score="0" Text="&quot;I am reminded that Bertrand Russell's wife&quot;. I was curious about this anecdote, which I'd never heard of before. I think it mght be Russell's grandmother, not his wife. I got an hit on Russell's autobiography, which says &quot;She never could understand how locks on rivers worked, although I heard any number of people try to explain it to her&quot;. It's possible one of Russell's wives has a similar problem, but it seems more likely you've read a scrambled version of this anecdote, or remembered it incorrectly." CreationDate="2017-11-04T11:11:53.207" UserId="3432" />
  <row Id="8955" PostId="3892" Score="0" Text="From context, his grandmother would have been born Lady Frances Anna-Maria Elliot-Murray-Kynynmound, the second wife of Sir John Russell, once British Prime Minister. They lived in Pembroke Lodge." CreationDate="2017-11-04T11:18:03.270" UserId="3432" />
  <row Id="21658" PostId="3892" Score="0" Text="Locks: walk to where there is a small stream with a little pond in it. Block the upper end, observe, unblock. Block the lower end, observe, unblock. Done. Teaching is about pointing the nose in the right direction and getting out of the way. Sometimes it just takes a bit more time and effort to get to the right place." CreationDate="2024-02-03T13:43:43.917" UserId="5349" />
  <row Id="8989" PostId="3893" Score="0" Text="The time has come to give someone a ✓. There are 3 very good answers here, but which one to award the tick to. A lot of the advice is general. the question asked for in computing lessons (this does not rule out the general, though I prefer thinks specific to computing). So who to pick?" CreationDate="2017-11-06T18:14:43.200" UserId="204" />
  <row Id="8871" PostId="3895" Score="1" Text="Their own computer or computers in the lab? The obvious answer is to make simpler instructions. Also, I note that people don't always interpret instructions in the same way." CreationDate="2017-10-31T18:49:05.467" UserId="1293" />
  <row Id="8885" PostId="3895" Score="0" Text="You have a more serious problem if your students need instructions on how to start Idle for every lesson. That's like starting every math lesson with a review of the base-10 number system, or every reading assignment with a review of the alphabet." CreationDate="2017-11-01T14:24:26.520" UserId="1111" />
  <row Id="8886" PostId="3895" Score="0" Text="@chepner It is not every lesson, it is mostly at the start of something new." CreationDate="2017-11-01T15:05:49.143" UserId="204" />
  <row Id="8887" PostId="3895" Score="0" Text="&quot;How do I start Idle&quot; isn't something you should *ever* need to repeat. That *is* Lesson 1, upon successful completion of which no instruction more complicated than &quot;Start Idle&quot; should be necessary. Otherwise, they haven't actually learned anything, except perhaps how to follow your precise step-by-step instructions." CreationDate="2017-11-01T15:10:36.400" UserId="1111" />
  <row Id="8870" PostId="3896" Score="1" Text="Did I just read, that some teachers are using “Fixed mindset” as a disability label. “They have a fixed-mindset, that is why **they** don't learn (it is not my fault).”. Oh the irony: that attitude is so fixed mindset." CreationDate="2017-10-31T18:49:04.660" UserId="204" />
  <row Id="8872" PostId="3896" Score="1" Text="ooooo, recursive" CreationDate="2017-10-31T18:52:36.210" UserId="1293" />
  <row Id="8883" PostId="3897" Score="0" Text="Feedback please: would the down-vote and run, please help with feedback. Sumative feedback is not affective." CreationDate="2017-11-01T08:26:18.487" UserId="204" />
  <row Id="8911" PostId="3900" Score="4" Text="&quot;certainly most people can be taught some formal logic and ideas about algorithms.&quot; Not in my experience. It is not uncommon to see a student who has learned some of the basics of programming to nevertheless struggle mightily when they get to classes like Discrete Mathematics or Algorithms and Complexity. *Introductory* CS courses typically concentrate on programming for the same reason that introductory math classes concentrate on basic calculus. It isn't what the major is really about -- but it is an essential prerequisite." CreationDate="2017-11-02T14:57:06.067" UserId="2715" />
  <row Id="21656" PostId="3901" Score="0" Text="But, but... Formal Operations too." CreationDate="2024-02-03T13:31:25.183" UserId="5349" />
  <row Id="8907" PostId="3902" Score="2" Text="Welcome to [cseducators.se]! This answer could be much better if you expand and add explanations to it." CreationDate="2017-11-02T12:42:45.423" UserId="150" />
  <row Id="8906" PostId="3903" Score="2" Text="Welcome to [cseducators.se]! This answer could be much better if you expand and add explanations to it." CreationDate="2017-11-02T12:40:09.503" UserId="150" />
  <row Id="8925" PostId="3905" Score="0" Text="I like that. Sorry I didn't think of it myself. Maybe there should be a pedagogical pattern &quot;Honor Mistakes.&quot;" CreationDate="2017-11-02T17:16:43.183" UserId="1293" />
  <row Id="21657" PostId="3906" Score="0" Text="Yeah, recursion is not an everyday thing in most people's lives. You've learned the forest and can walk around blindfolded but students keep smacking in to trees they can't recognize. What's *different* about programming? Symbolic manipulation. It's not the everyday way of approaching a problem, and some problems cannot be solved without it. Teach that. Math was the 'way' in the past but we need to move on." CreationDate="2024-02-03T13:35:47.860" UserId="5349" />
  <row Id="9251" PostId="3907" Score="0" Text="Does [SHENZHEN I/O](http://store.steampowered.com/app/504210/SHENZHEN_IO/) meet your requirements?" CreationDate="2017-12-17T21:19:45.677" UserId="2516" />
  <row Id="9465" PostId="3908" Score="0" Text="Can the person that down voted. please give feedback. Formative feedback (this is how you can do better, this is where you are wrong) is of value, Sumative feedback (grades) is not." CreationDate="2018-01-03T16:54:49.777" UserId="204" />
  <row Id="21655" PostId="3909" Score="0" Text="They used to force everyone through all these math classes, now it is programming. What is the objective? Formal Operational thought. You must get that if you are going to have more complex work. Get it somehow: be a team captain, join the Army, just get it. Programming is easier to fit in to the classroom, and more fun than math. Math never made a web page." CreationDate="2024-02-03T13:28:19.680" UserId="5349" />
  <row Id="21654" PostId="3910" Score="0" Text="It is an insight, a clue. Remapping has to do with treating things symbolically, not in a fixed way. If you see a world of as-if where everything just happens to be a certain way but could easily be different, then it will be easier to think and manipulate programs and data that way. As a snarky, jaded kid who thought everything was arbitrary, wrongly set up, unfair and inflexible, I saw copious opportunities to remap basically everything. Why is Joe so great? If he was 3 inches shorter, then everyone would like Tom better! See? It's one small step to manipulating joe and tom as variables." CreationDate="2024-02-03T13:23:20.257" UserId="5349" />
  <row Id="8919" PostId="3913" Score="1" Text="What age students are you mostly concerned with? I think the interventions may differ a bit with age." CreationDate="2017-11-02T15:27:50.230" UserId="1293" />
  <row Id="8920" PostId="3913" Score="0" Text="I see this behavior among high school and college students but more so with college/university students." CreationDate="2017-11-02T15:30:35.917" UserId="3330" />
  <row Id="9976" PostId="3913" Score="0" Text="I don't often see this behavior in students. I do, however, see this in online communities. Open source savants pretending they have no idea what late adopters are talking about when they reference some extremely well known function of a popular commercial software title. Getting down voted because the standards for &quot;general knowledge&quot; are so high, etc. The elitism of the CS world is tied to the &quot;l33t h4x0r&quot; webisms of the late 90s. It's a cultural thing that is somewhat alleviated due to CS topics being considered less esoteric." CreationDate="2018-01-31T19:08:08.443" UserId="4082" />
  <row Id="19077" PostId="3913" Score="0" Text="I remember a quote by a famous author in an interview where she explained something about the task of being an author by saying, &quot;*Normal people do not write*.&quot; Perhaps normal people do not program either?" CreationDate="2022-01-22T13:18:29.720" UserId="5349" />
  <row Id="8916" PostId="3914" Score="1" Text="I think you are wrong. I've worked with many people over a long career and relatively few of them are as bad as you describe. Some are a bit odd and remote, but not abusive. My medical doctor is a wonderful person. I wouldn't see him if he were a jerk. I think that such behavior doesn't lead to success so the jerks disappear eventually." CreationDate="2017-11-02T15:25:39.630" UserId="1293" />
  <row Id="8923" PostId="3914" Score="0" Text="@Buffy I think there is a **little** truth in this. However I agree most people are all right. It is just that we remember the ones that annoy or traumatise us. 2nd I am currently looking at ways to make programming accessible e.g. http://worrydream.com/LearnableProgramming/" CreationDate="2017-11-02T16:43:46.120" UserId="204" />
  <row Id="8924" PostId="3914" Score="0" Text="I think, actually, that it is having power over people that makes for bad behavior. Witness the spate of sexual harassment cases recently coming to the fore. These are power issues, not sex issues and it doesn't derive from the effort to achieve success. If some people have power they think they can misuse it without consequence or regret. Arrogance among students is a different issue, though." CreationDate="2017-11-02T16:50:21.547" UserId="1293" />
  <row Id="8927" PostId="3914" Score="0" Text="Another argument against the ideas in this answer is the fact that most of the bad actors are male. If it was a by product of a hard driving personality and the efforts to master programming, etc, wouldn't you expect to see similar behavior among girls and young women. I'm pretty sure that you won't find it there, though many of the females I've encountered have as much reason to be arrogant as any male." CreationDate="2017-11-02T19:05:02.540" UserId="1293" />
  <row Id="8928" PostId="3914" Score="1" Text="Still another reason for rejecting this idea is that it would seem to make any amelioration impossible. &quot;It is what it is. Nothing to see here. Move on.&quot; or maybe &quot;Boys will be boys.&quot; I worked long hours and had a lot of drive for my doctorate. It didn't turn me into a jerk. (Other things maybe, but not that)." CreationDate="2017-11-02T19:10:27.187" UserId="1293" />
  <row Id="9975" PostId="3915" Score="0" Text="Female students don't act arrogant, elitist, or competitive? This seems like a very bias observation. I've observed it to be equally prevalent across genders. Evolutionary tendencies aside, everyone competes in their own way. It is perhaps the case that male students are more likely to end up resorting to combat, although this is rarely the case in a University setting." CreationDate="2018-01-31T18:57:45.710" UserId="4082" />
  <row Id="8939" PostId="3916" Score="1" Text="Is this her first programming language? Is you learning to program, and learning C++ at same time?" CreationDate="2017-11-03T16:42:30.337" UserId="204" />
  <row Id="8942" PostId="3916" Score="1" Text="@ctrlaltdelor yes, she briefly worked with python before, but nothing of substance." CreationDate="2017-11-03T18:16:44.903" UserId="2584" />
  <row Id="8940" PostId="3917" Score="1" Text="Bertran Myers said, it is quicker and easier to learn Eiffel and then C++, than it is to learn C++. So if C++ is her first programming language, then consider a transitional language. A language to first learn **programming**." CreationDate="2017-11-03T17:04:17.697" UserId="204" />
  <row Id="8953" PostId="3918" Score="0" Text="Separating the algorithm and the exact implementation is a very good idea. I think describing the desired functionality in complete sentences should give some pointers already on how to translate that to pseudocode. &quot;For each cell visible, check whether it is alive or dead, and output the corresponding characters.&quot;" CreationDate="2017-11-04T10:00:36.803" UserId="2584" />
  <row Id="8957" PostId="3918" Score="0" Text="@JarkoDubbeldam Before I was teaching I was anti-pseudo code, but now I can see its value, when we are learning to program. I even used it a bit as a professional programmer, but with higher lever pseudo code (like a DSL (Domain specific language))." CreationDate="2017-11-04T18:13:20.443" UserId="204" />
  <row Id="8947" PostId="3919" Score="0" Text="It is only my observations, my friend. I am not the only one who sees this type of behavior and the other responses support that. At first I thought it was a cultural thing but I can tell you that teaching in USA and Spain and it is very similar. I like for every student to participate in discussions and make it as fun and enjoyable as possible by making this material accessible to everybody (not just the smart tech savvy children I mentioned earlier). It is these tech savvy children that exhibit this rude behavior that I speak of" CreationDate="2017-11-03T20:43:39.980" UserId="3330" />
  <row Id="8948" PostId="3919" Score="0" Text="@AndresAlvarez I still think you're bringing a lot of assumptions with you, but let's agree to disagree. In any case, my answer still offers several suggestions for creating a more inclusive environment that encourages non-traditional students to participate." CreationDate="2017-11-03T20:47:59.530" UserId="2068" />
  <row Id="8950" PostId="3920" Score="0" Text="&quot;Sure, that's one way to think about it. Or the way I like to think about it is...&quot;" CreationDate="2017-11-03T23:49:15.737" UserId="2068" />
  <row Id="8951" PostId="3920" Score="2" Text="I don't have time for a full answer now (maybe in a day or so), but you could ask them to elaborate how their analogy is _not_ like the thing itself. Get them to explore the range. No analogy is perfect anyway and this exploration is valuable even for strong analogies." CreationDate="2017-11-04T01:48:07.953" UserId="1293" />
  <row Id="9175" PostId="3920" Score="0" Text="In the concrete example given, the connection seen is that *a collection of event handlers* is similar to *a collection of &quot;things&quot;*. I suspect this is where the difficulty in &quot;correcting&quot; the student arose." CreationDate="2017-12-06T20:11:52.927" UserId="3697" />
  <row Id="9182" PostId="3920" Score="0" Text="&quot;After discussing it, the connection the student saw, was that you could add or remove items from arrays and you can add and remove event listeners from elements.&quot; For the analogy to hold, wouldn't you have to have &quot;you can add or remove elements from event listeners&quot;?" CreationDate="2017-12-07T00:28:35.003" UserId="3225" />
  <row Id="8959" PostId="3923" Score="0" Text="Pedagogically it can help to form an interest. From a CS point of view, it shows emergent behaviour, that is complex behaviour emerges from simple rules. You can set it up to do things that are not codded into the rules, the behaviour emerges. I think that it is not 100% understood: there may be undiscovered patterns, with interesting behaviour. I think it is Turing complete." CreationDate="2017-11-04T18:25:12.577" UserId="204" />
  <row Id="8969" PostId="3923" Score="0" Text="I'm not certain on what your audience would know when taking this course, but my understanding of importance of GoL is in illustrating a different system of computation, in asking what computation is (perhaps also showing other examples, like lambda calculus, or Horn clauses). I don't think GoL is a particularly good example of simulations. Also, while I'm aware of mixed reception received by Wolfram's book &quot;New Kind of Science&quot;, I think it would be still worthwhile to mention it when talking about GoL." CreationDate="2017-11-05T15:12:36.623" UserId="1000" />
  <row Id="8971" PostId="3923" Score="0" Text="Conway is a bit subtle to program correctly. This may be a plus. If you change the neighbor of a cell before you evaluate that cell you don't have a true representation. So you can, for example, talk about two generations. The first creates the second and then reference switching resets the second to the first. If you aren't careful you can get chaos that doesn't match the literature. Those two generations are like paging and off-screen bitmaps conceptually." CreationDate="2017-11-05T23:10:46.847" UserId="1293" />
  <row Id="9015" PostId="3924" Score="0" Text="If you want an even more impressive demonstration of GoL simulating logic, a group of people on the Code Golf and Programming Puzzles stack [implemented Tetris](https://codegolf.stackexchange.com/a/142673/194)." CreationDate="2017-11-08T09:03:24.017" UserId="1219" />
  <row Id="8961" PostId="3925" Score="2" Text="I absolutely applaud your desire to fill in gaps in your knowledge before it all snowballs, but it's hard to even begin to give guidance without something to go on.  Could you give us a hint about a thing that you've had trouble with?" CreationDate="2017-11-05T04:34:03.523" UserId="27" />
  <row Id="8962" PostId="3925" Score="0" Text="I second Ben’s comment. Is there a particular language with which you have some facility? Are there things you *have* done with programming that you can build upon? More information as to what you *can* do will help us point you in the right direction." CreationDate="2017-11-05T04:37:18.230" UserId="76" />
  <row Id="8963" PostId="3925" Score="0" Text="Thank you for wanting to help me! I have troubles converting algorithms from the textbook to source code in C++ and Java. Sometimes I struggle in implementing data structures such as queues/and stacks into C/C++ or java. I understand iterative programming, and i need to improve my understanding of recursive and dynamic programming techniques." CreationDate="2017-11-05T06:04:49.853" UserId="3438" />
  <row Id="8966" PostId="3925" Score="1" Text="With regards to programming, Java and especially C++ are hard languages to learn. And even harder to learn, when you are learning to program. Eiffel is a good language to learn Object Orientation.We had a question on here a short time ago about first languages. Another on books to read. I will but together some ideas when I get back. Can you tell us what your background is; What you have learnt so far; What you struggle with; what you are good at; what you enjoy." CreationDate="2017-11-05T09:49:32.423" UserId="204" />
  <row Id="8974" PostId="3925" Score="0" Text="I can't speak for c++ (last time I touched it seriously it was still a c preprocessor), but queues and stacks are built into the Java libraries. The only reason to implement them yourself is academic interest." CreationDate="2017-11-06T04:08:59.290" UserId="1537" />
  <row Id="8979" PostId="3925" Score="0" Text="There are some good answers here https://cseducators.stackexchange.com/q/3916/204" CreationDate="2017-11-06T11:06:56.297" UserId="204" />
  <row Id="8983" PostId="3925" Score="0" Text="Thank you for the help! @ctrl My background is mainly c++ and java. I have also worked with system verilog before and lower level languages. I notice that i stuggle with OOP." CreationDate="2017-11-06T17:11:08.010" UserId="3438" />
  <row Id="8984" PostId="3925" Score="0" Text="@pojo-guy, that's true. My teachers doesn't let us use the built java libraries, so i have too be able to implement stack and queues from scratch!" CreationDate="2017-11-06T17:12:16.510" UserId="3438" />
  <row Id="8987" PostId="3925" Score="0" Text="@Farah That fits the boundaries of &quot;Academic interest&quot;." CreationDate="2017-11-06T17:34:13.960" UserId="1537" />
  <row Id="8988" PostId="3925" Score="0" Text="I would defiantly recommend Eiffel as a language to learn OOP. How that will work when the teachers are trying to teach another language, I do not know. If using java, then see this answer for how to bootstrap into OO. Java is not 100% OO. Then try to stick to OO (e.g. no static)." CreationDate="2017-11-06T18:00:39.213" UserId="204" />
  <row Id="8998" PostId="3925" Score="0" Text="Thank you! I haven't heard much about Eiffel, i will check it out! :)" CreationDate="2017-11-07T00:09:43.990" UserId="3438" />
  <row Id="12620" PostId="3925" Score="1" Text="How did everything work out?  Are you feeling better?" CreationDate="2018-05-21T14:17:24.200" UserId="27" />
  <row Id="14453" PostId="3925" Score="0" Text="It has been nearly 1 year and a half since this post and thank God I have learned so much in the past year and I feel more confident in my skills. Here are some things that helped me, for those who see the post later: (1) Get an internship. I did an internship over the summer. I was held accountable on a project, and because I was paid to complete, i felt a huge sense of responsibility to complete it successfully. (2) Connect with positive and humble developers  and try to learn a little bit from everyone (3)  be confident and do not undersell your skills (but please do not become arrogant)" CreationDate="2019-03-05T16:39:57.973" UserId="3438" />
  <row Id="14454" PostId="3925" Score="0" Text="when I did my internship, I had more pressure to the fill the holes in my knowledge by learning quickly.  I would also recommend paired programming, as it is always faster to learn by doing, and have a person to converse with about any bugs in the code." CreationDate="2019-03-05T16:47:38.077" UserId="3438" />
  <row Id="8980" PostId="3927" Score="0" Text="Since it's the purpose of Java to abstract those kind of things, it is just better to stress it out to the students : &quot;different language for different purposes&quot;." CreationDate="2017-11-06T13:02:53.730" UserId="1375" />
  <row Id="8985" PostId="3928" Score="0" Text="Hey! I'll look into this textbook during winter break. I think I need to review what encapsulation is and how it's used in the java language. I hope that once i understand encapsulation, i'll be able to bridge the gaps in my knowledge and become a better student. Thank you for  the help." CreationDate="2017-11-06T17:18:30.957" UserId="3438" />
  <row Id="21044" PostId="3928" Score="0" Text="Do you know best DSA source in C++?" CreationDate="2023-04-01T07:16:24.050" UserId="11579" />
  <row Id="8970" PostId="3929" Score="0" Text="The lego tower is good in a couple of ways. First is the concept of the tower (list) as a whole, not just its head can be easily discussed. I note that the tower is really more of a double-ended queue (dequeue) than a simple list. How do you deal with an empty tower?" CreationDate="2017-11-05T23:04:31.387" UserId="1293" />
  <row Id="8972" PostId="3929" Score="0" Text="Hey @Elkady! Welcome to [cseducators.se]! This is a nice first answer :)" CreationDate="2017-11-06T01:45:04.657" UserId="58" />
  <row Id="8975" PostId="3929" Score="0" Text="Thank you for your nice comments. @Buffy: I use Lego tower is for explaining Recursion. I use a toy train to explain linked lists." CreationDate="2017-11-06T05:18:13.053" UserId="3417" />
  <row Id="8978" PostId="3931" Score="0" Text="And Welcome to your community, hope you can ask (and answer) many questions in the future." CreationDate="2017-11-06T10:49:27.103" UserId="204" />
  <row Id="8981" PostId="3931" Score="0" Text="Sorry, I am a student.I was also writing this somewhere else and probably got confused while typing my question.Thanks for bearing!" CreationDate="2017-11-06T14:48:24.737" UserId="3447" />
  <row Id="8982" PostId="3931" Score="0" Text="Have you already studied Java, or is that entirely new? Say a bit more about your background." CreationDate="2017-11-06T15:26:46.003" UserId="1293" />
  <row Id="8986" PostId="3931" Score="0" Text="Which class seems most interesting to you? Take that one." CreationDate="2017-11-06T17:23:45.493" UserId="2068" />
  <row Id="8990" PostId="3931" Score="0" Text="I am comfortable and have interest in all the three subjects.And yes, I have some experience in java." CreationDate="2017-11-06T18:37:39.460" UserId="3447" />
  <row Id="8993" PostId="3931" Score="2" Text="Oh man, that's like asking, *&quot;Should I have cake, cookies, or chocolates? Which will be the yummiest?&quot;*  You just can't lose.  If you really have no preference between the subjects, look up the teachers and see who has a reputation for running enjoyable courses." CreationDate="2017-11-06T19:55:42.380" UserId="27" />
  <row Id="9001" PostId="3931" Score="0" Text="Fine, I will take Enterprise java to be on the safe side but will study Compiler Design online to apply for higher studies." CreationDate="2017-11-07T08:32:41.587" UserId="3447" />
  <row Id="9008" PostId="3933" Score="1" Text="When you say attainment, do you mean degree attainment? Job attainment? Can you add a little more description?" CreationDate="2017-11-07T13:20:42.017" UserId="2045" />
  <row Id="9009" PostId="3933" Score="0" Text="have updated, I'm interested in any studie saround attainment" CreationDate="2017-11-07T13:22:42.787" UserId="48" />
  <row Id="9010" PostId="3933" Score="0" Text="I associate the word attainment with highest degree achieved (https://en.wikipedia.org/wiki/Educational_attainment). That might be a U.S. quirk. Is your question about any sort of measure of achievement or performance?" CreationDate="2017-11-07T13:31:00.763" UserId="2045" />
  <row Id="9011" PostId="3933" Score="0" Text="any sort of measure would do, this might be AP or some general programming proficiency test. The reference above uses UK degree levels" CreationDate="2017-11-07T13:33:43.503" UserId="48" />
  <row Id="9615" PostId="3933" Score="0" Text="@pluke Have you uncovered anything additional in the intervening time?  If so, I would encourage you to also create an answer here, if only to help others in the future." CreationDate="2018-01-12T23:41:49.197" UserId="27" />
  <row Id="9659" PostId="3933" Score="0" Text="I'm working on a paper about this now, will share when it's published :)" CreationDate="2018-01-15T08:50:41.087" UserId="48" />
  <row Id="9189" PostId="3934" Score="0" Text="I suspect that there are few answers appearing because there really aren't any such tests." CreationDate="2017-12-07T13:41:51.990" UserId="27" />
  <row Id="9014" PostId="3939" Score="2" Text="Do you mean [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch)?" CreationDate="2017-11-07T18:03:38.310" UserId="2068" />
  <row Id="9017" PostId="3939" Score="0" Text="`This shows the differences between data in a database and objects at run-time very clearly.` Not trying to be facetious, but it doesn't show anything like that. If I tell you that there is a car on my driveway, have I shown you the car? You're stating the existence of the differences, you're not showing why they are/need to be different." CreationDate="2017-11-08T16:54:17.423" UserId="2164" />
  <row Id="9102" PostId="3939" Score="1" Text="The mismatch is that objects contain other objects (the parent contains the child) but relational database child records reference the parent. Relational tables have no place to store the &quot;here are my children&quot; relationship,  but easily stores &quot;my parent has this identity. The object model had no need to store the parents identity because the parent &quot;knows&quot; its children" CreationDate="2017-11-23T14:38:59.880" UserId="1537" />
  <row Id="9016" PostId="3941" Score="0" Text="Welcome to [cseducators.se]! Answers are not the right way to reply to another answer or question; we use comments for that. Seeing as you don't have 50 reputation, you can't comment just yet. If you feel like you must reply with more than a comment, then be sure to do so in a way that **still answers the question**." CreationDate="2017-11-08T13:55:53.683" UserId="150" />
  <row Id="9021" PostId="3947" Score="0" Text="Open Source is like Free Software, Free Software is **not about price**, it is software that gives you **freedoms** See also https://www.gnu.org/software/free-software-for-education.en.html" CreationDate="2017-11-09T11:24:47.830" UserId="204" />
  <row Id="9029" PostId="3947" Score="0" Text="@ctrl-alt-delor I don't disagree with you, but I want to make it clear that my answer is **not** about using free software. It's about contributing to open teaching initiatives, whose goals are to share teaching resources amongst educators." CreationDate="2017-11-10T23:18:40.790" UserId="2068" />
  <row Id="9031" PostId="3947" Score="0" Text="@KeviWorkman True. However even it this field, I have noticed some problems. E.g resources published with a Creative commons Non-commercial licence. This stops the resource from being used in some education situations, and can make it ambiguous in others. (Note CC NC licences are not Free or Open. see Free Software definition, and Open Source definition) While not an open licence, the philosophy of Open Source, seems to encourage this mistake. Where the philosophy of Free Software does not. This is one of the reasons I prefer the word Free." CreationDate="2017-11-11T11:27:38.703" UserId="204" />
  <row Id="9035" PostId="3947" Score="0" Text="@ctrl-alt-delor I don't really think this is the place to debate the definition of open source software. I'm using the term &quot;open source&quot; to just mean the open sharing of teaching materials." CreationDate="2017-11-13T03:14:11.990" UserId="2068" />
  <row Id="9019" PostId="3948" Score="0" Text="Note: as you can probably tell, I'm having some difficulty articulating the exact issue I'm facing, so please let me know if there's anything I can do to improve the question/if it's too broad. Also, tags are hard, so suggestions there are also welcome." CreationDate="2017-11-09T06:04:43.043" UserId="732" />
  <row Id="9020" PostId="3948" Score="1" Text="I can't stress just how much I like the question" CreationDate="2017-11-09T07:26:08.167" UserId="150" />
  <row Id="9044" PostId="3948" Score="0" Text="I've been using regex'es since 1980, and still have problems translating requirements into them. The problems are that the syntax was organically grown over years,  different implementations have different syntax and levels of support for &quot;standards&quot;,  and the commands are not human readable. In the end, i have found that constructing any regex beyond the trivial requires ready access to google." CreationDate="2017-11-16T09:22:15.620" UserId="1537" />
  <row Id="9022" PostId="3950" Score="1" Text="This would drive my students crazy.  Many of them are grade-driven to a fault, and they would either cheat on the last one in order to get a 100%, or complain bitterly when they got stuck at an earlier example." CreationDate="2017-11-09T22:30:32.503" UserId="27" />
  <row Id="9023" PostId="3950" Score="0" Text="The intent was more to help the strugglers, but I see your point. Maybe you have a different sort of issue. Not every scheme works with every student or every group, of course." CreationDate="2017-11-09T22:32:07.090" UserId="1293" />
  <row Id="9030" PostId="3951" Score="0" Text="Not an answer, but for a resource see two books by V. J. Rayward-Smith mentioned here: https://cseducators.stackexchange.com/a/2804/1293. The first of these is more applicable to your needs here." CreationDate="2017-11-11T00:07:12.000" UserId="1293" />
  <row Id="9032" PostId="3951" Score="0" Text="An apparent difference between DFAs and NFAs is that they are functions and relations respectively. Functions are familiar to programmers because they can be programmed. (Except uncomputable functions, of course.) Relations can be easily described by logical formulas, but not programs. Writing a program that computes a relation is complex even if possible, and usually not possible. I do not suggest anything; it is just my analysis of the issue." CreationDate="2017-11-11T17:00:31.683" UserId="160" />
  <row Id="9100" PostId="3951" Score="0" Text="People are more comfortable with stemming behaviors in general. There is a leap of faith involved in trusting a non deterministic system." CreationDate="2017-11-23T14:30:30.567" UserId="1537" />
  <row Id="9101" PostId="3951" Score="0" Text="@beroal Any language in Prolog family (Ciao, Mercury, beside Prolog itself) has predicates with various nondeterminism modes. So, _of course_ it is possible to write programs that have relations rather than functions. Some languages, where model of computation is different, still can embed Prolog-like functionality (eg. `screamer` library in Common Lisp). A more popular language that deals with relations is SQL." CreationDate="2017-11-23T14:38:04.993" UserId="1000" />
  <row Id="9104" PostId="3951" Score="0" Text="@wvxvw: This is what I am talking about. Few programmers use descendants of Prolog, and SQL is specialized comparing to first-order logic, so reasoning about relations should be unfamiliar to most programmers." CreationDate="2017-11-23T19:05:46.997" UserId="160" />
  <row Id="9036" PostId="3955" Score="1" Text="This is an excellent answer for a broad question!" CreationDate="2017-11-13T21:31:43.727" UserId="27" />
  <row Id="9037" PostId="3958" Score="0" Text="Yes there is confusion outside of education, it seems to be every where. Virtual memory is used to implement swap. Then people started to call swap virtual memory. But this answer does not answer the question. It is not about education. It does not answer my dilemma." CreationDate="2017-11-14T22:09:00.540" UserId="204" />
  <row Id="9048" PostId="3959" Score="0" Text="Thanks Kevin. For the moment I'm trying with my 7 y.o son. So far so good. He's already excited drawing an space ship for a game he'd like to create. I know 6-16 is a wide range. I was thinking about making two groups. The first group for Scratch, the second for Godot engine or something that involves &quot;coding&quot; (with objects, properties, methods, etc.). Do you think going directly with Godot for a boy around 14years is too much?   Those classes would span for ~8moths, 1.5hours per week." CreationDate="2017-11-16T15:16:51.450" UserId="3493" />
  <row Id="9038" PostId="3960" Score="0" Text="I agree, except I don't thing that using VM to mean swap is old (or new). It is probably just a mistake that has happened a lot. People confuse a thing with its implementation. I have just realised that I am confusing paging and swapping (Paging uses VM.  Swapping is like paging.)" CreationDate="2017-11-15T09:37:10.373" UserId="204" />
  <row Id="9056" PostId="3961" Score="0" Text="I think it could be a good answer, with an example. Can you add an example, to the answer." CreationDate="2017-11-17T13:03:52.003" UserId="204" />
  <row Id="9045" PostId="3964" Score="0" Text="I understand your point, and @Ben I. made the same one when I posted this question. But, there's a lot more to a database than just the data (e.g., constraints on attributes, primary/foreign key relationships). I am certainly fine massaging data - I am no stranger to that - but it would be nice to *also* not need to go through and add all of these different DB-specific components/guess what the designer had intended for their dataset. I want students to be able to manipulate the data and see these things in action (e.g., delete a primary key, see it cascade to foreign key tuples)." CreationDate="2017-11-16T11:05:28.573" UserId="830" />
  <row Id="9051" PostId="3964" Score="0" Text="@cryptic_star Adding those restrictions is part of the massage process I'm talking about. The chances of you finding a data set in exactly the format you want is very low. My point is that you should just put it into the format you want yourself, and stop trying to find perfectly formatted data. You'll open yourself up to a lot of cool data sets if you think about it that way." CreationDate="2017-11-16T16:42:28.470" UserId="2068" />
  <row Id="9052" PostId="3964" Score="0" Text="I understand, and I might very well end up going that route in the future. But, clearly there are at least two such datasets (linked in my original question), so I think the question is valid and hope others might contribute what they can find. I simply find myself in an unexpected position of needing such a set of data ASAP differing from the two above." CreationDate="2017-11-16T17:28:00.940" UserId="830" />
  <row Id="9054" PostId="3967" Score="0" Text="Good point, thanks. I don't know it this will shape your answer a bit, but this course is off-school. It's one of those activities parents enroll their children after school. So I guess that If they sign in, they are somehow interesed." CreationDate="2017-11-16T19:55:29.253" UserId="3493" />
  <row Id="9057" PostId="3967" Score="1" Text="That is extremely pessimistic and ill focused. You don't include any personal objectives for schooling, only an external view. In this view people don't count, only the &quot;production&quot; of various kinds of people. A better view, IMO, is that schooling is to actually help a person learn and grow, but you ignore that. In your view, there is no actual need to teach at all. &quot;Present the material&quot; is insufficient and unnecessary. The &quot;material&quot; is all online now and can be found by anyone interested. But students need to also need to know what are the likely outcomes of their choices." CreationDate="2017-11-18T12:20:40.017" UserId="1293" />
  <row Id="9058" PostId="3967" Score="1" Text="You seem to assume that schooling is unconcerned with actually guiding or helping _people_. But even with the desire, attainment is difficult. It requires long hours and dedication. That is aided by support from teachers to help them over the hard bits. You express a &quot;take it or leave it&quot; attitude that I find unacceptable. I suspect that you don't actually teach. If you do, I hope you can someday, somehow, come to a more positive view. Your students will be better for it." CreationDate="2017-11-18T12:25:03.523" UserId="1293" />
  <row Id="9061" PostId="3969" Score="0" Text="I think that this answer mixes up CS and IT. What is the distinction between them? However it is the 1st answer to notice that I asked for examples." CreationDate="2017-11-19T16:59:15.073" UserId="204" />
  <row Id="9062" PostId="3969" Score="0" Text="@ctrl-alt-delor `I think that this answer mixes up CS and IT.` Why do you think so? I strongly feel that's not the case. `What is the distinction between them?` In your original question you say: `I have no problem understanding what Computer Science is and what it includes`. So, is &quot;what is CS&quot; part of the question or not?" CreationDate="2017-11-19T17:01:49.027" UserId="757" />
  <row Id="9063" PostId="3969" Score="0" Text="@ctrl-alt-delor I edited the answer to include CS. You should probably edit your question as well, if it is a legitimate part of the question." CreationDate="2017-11-19T17:14:47.993" UserId="757" />
  <row Id="9064" PostId="3969" Score="0" Text="We have a winner. There are some good examples here. I agree that most of the Computer Maintenance classes that I have observed are arts and craft, however is it possible that if taught properly could be at least DL, and Maybe IT?" CreationDate="2017-11-19T17:33:19.353" UserId="204" />
  <row Id="9065" PostId="3969" Score="0" Text="@ctrl-alt-delor Hardware maintenance is probably none of the three. &quot;Software maintenance&quot; (as in &quot;running Windows Update every now and then&quot; or something like that?) might be DL?" CreationDate="2017-11-19T18:04:17.000" UserId="757" />
  <row Id="9066" PostId="3969" Score="0" Text="Running Windows update is a reading age of 7. Choosing to use Debian and having updates done automatically, using little system resource, and choosing to shut-down half way through an update, and the computer just doing it, with no ill effects. That is Digital Literacy." CreationDate="2017-11-19T18:09:04.633" UserId="204" />
  <row Id="9067" PostId="3969" Score="0" Text="The example I was thinking of was changing the ink cartridge in a printer. Is that DL?" CreationDate="2017-11-19T18:09:48.497" UserId="204" />
  <row Id="9068" PostId="3969" Score="0" Text="@ctrl-alt-delor `changing the ink cartridge in a printer. Is that DL?` Honestly, I'd say that's the ability to R the ol' FM." CreationDate="2017-11-19T18:12:00.250" UserId="757" />
  <row Id="9071" PostId="3970" Score="1" Text="Sadly it doesn't appear to touch on attainment. I (being one of the authors), note that girls do better at GCSE CS, but they all outperform boys at most things: https://www.researchgate.net/publication/311595274_The_Roehampton_Annual_Computing_Education_Report_2015_data_from_England p47" CreationDate="2017-11-20T09:32:31.460" UserId="48" />
  <row Id="9069" PostId="3971" Score="1" Text="What does the knapsack problem have to do with undecidability? A high computational complexity is radically different from undecidability. I fear that by teaching them together, you're going to confuse the students into thinking that exponential-worst-case problems are unsolvable, even though they get solved daily (e.g. in compilers)." CreationDate="2017-11-20T00:19:10.693" UserId="124" />
  <row Id="9070" PostId="3971" Score="0" Text="I edited my question title. In the context of the curriculum, the topics of complexity and undecidability go together standards-wise. They are sub-categories of the EU quoted above. Given their importance relative to other topics and the limitations of time, I’d like to transition from complexity to undecidability in the context of a single lesson if possible." CreationDate="2017-11-20T00:41:32.513" UserId="76" />
  <row Id="9073" PostId="3972" Score="0" Text="Be careful with naming things: In english “halt” is a verb. If you say halt, you are giving an order. To discover if someone can halt, you would ask “Can you halt?”. In OO programming we could write `if ( program(s).withInput(s).willHalt() ) {loopForever()}else{return true;}`." CreationDate="2017-11-20T14:20:45.910" UserId="204" />
  <row Id="9209" PostId="3972" Score="0" Text="_Drawing a completely connected graph for example and adding vertices._ — I think you need a better example. The time to add a vertex and all its incident edges to a complete graph grows **linearly** with the number of vertices, not exponentially.  Drawing a complete graph takes time **quadratic** in the number of vertices, assuming each edge can be drawn in constant time.  Even if the time to draw an edge scales linearly with its length, and the vertices are evenly spaced on a circle whose radius is proportional to the number of vertices, drawing a complete graph takes &quot;only&quot; O(n^3) time." CreationDate="2017-12-10T19:32:20.873" UserId="3718" />
  <row Id="9072" PostId="3973" Score="1" Text="I don't understand the problem. You could either post the solution at the end OR post it to a different repository and only reveal its location at the end." CreationDate="2017-11-20T14:19:48.050" UserId="1293" />
  <row Id="9074" PostId="3973" Score="1" Text="Also, this is more of a Stack Overflow type of question as it is asking for technical solutions, not educational ones." CreationDate="2017-11-20T14:22:07.520" UserId="1293" />
  <row Id="9075" PostId="3973" Score="0" Text="Don't there is more than one way to code a solution. I was just reading “mind storms” — Seymour Papert, in it there is a bit where he talks about a lesson in which he was observing, the pupils got stuck, and the teacher directed the pupils to a word document, where they could copy the correct code from. At the end of the lesson all pupils had working code. No pupil learnt anything." CreationDate="2017-11-20T14:28:59.520" UserId="204" />
  <row Id="9076" PostId="3973" Score="0" Text="Publishing a reference solution after the exercise ends is common practice. Just don't assume it is the only solution. Back in the olden days these were posted on paper outside the prof's office. It often generated a lot of forehead-smacking, of course." CreationDate="2017-11-20T14:46:33.870" UserId="1293" />
  <row Id="9077" PostId="3973" Score="0" Text="If you are going to do this. Then two branchs in a private repo. Push 1st branch into public repo at start of term, then push 2nd branch (for the reveal) at the end. Pupils have to do a pull the start, and at the end, with a branch switch. Get a new puplic repo next year." CreationDate="2017-11-20T15:23:41.640" UserId="204" />
  <row Id="9211" PostId="3973" Score="0" Text="@ctrl-alt-delor yes, this is close to what I need I think. Why the &quot;if you are going to do this?&quot; comment though?" CreationDate="2017-12-11T14:59:18.113" UserId="3512" />
  <row Id="9212" PostId="3973" Score="0" Text="@Buffy this is about Computer Science Education isn't it?" CreationDate="2017-12-11T15:00:04.483" UserId="3512" />
  <row Id="9214" PostId="3973" Score="0" Text="I think it is a bit marginal, but other don't seem to agree so it is fine. You could explore it elsewhere, as well of course, and might get more/better answers. But in general, just because something is _used_ in education doesn't necessarily make questions about it relevant here." CreationDate="2017-12-11T15:16:23.420" UserId="1293" />
  <row Id="20407" PostId="3973" Score="0" Text="This is not a matter for git so much as for an LMS. Eg https://docs.github.com/en/education/manage-coursework-with-github-classroom/teach-with-github-classroom/connect-a-learning-management-system-to-github-classroom (may not be best link but only for the idea)" CreationDate="2022-06-19T05:13:19.037" UserId="8837" />
  <row Id="17759" PostId="3974" Score="0" Text="Interesting. Can you please elaborate on &quot;This is clearly not true, for we have done it (here I mean: we = you and I),&quot; pretty please." CreationDate="2021-03-07T16:08:23.923" UserId="6701" />
  <row Id="17872" PostId="3974" Score="1" Text="@Kate will `while True: pass` halt. Will `print (&quot;Hello, world&quot;)` halt? We can tell if a well writer program can halt. The proof is not saying that we should give up on writing well written programs. It is saying that there are some algorithms that can not be written e.g. one that can tell us for all p(i), where p is a program and i is its input, will p(i) halt." CreationDate="2021-04-06T22:10:08.457" UserId="204" />
  <row Id="9085" PostId="3975" Score="1" Text="My gut reaction is that this is off-topic here. How does this relate directly to CS Education? If you were asking about specific pedagogical features of a programming environment, that's a different story (and similar questions have been asked). Also, it seems to me that answers to this question would depend greatly on the language of choice; as is, this is a broad list question." CreationDate="2017-11-21T17:38:22.370" UserId="76" />
  <row Id="9086" PostId="3975" Score="0" Text="I am looking for a resource, for teaching programming. It needs to reduce barriers to learning. The feature I mention in the question would reduce barriers. More interactive environments are easier to learn, but the text based ones I have seen lately don't let you change your mind." CreationDate="2017-11-21T17:42:48.473" UserId="204" />
  <row Id="9087" PostId="3975" Score="0" Text="You seem to want to retain the features of REPL but also have a full featured development environment. I don't understand why that has to be the same program. Why not use one of each for their strengths? Certainly if you do something interesting in, say, Idle, you can copy and paste it into a full environment with file management, compilation, execution, etc." CreationDate="2017-11-21T19:43:04.613" UserId="1293" />
  <row Id="9089" PostId="3975" Score="0" Text="@Buffy That is what I do, but this morning when I woke up, I had this idea that we can have both. And that it would be of grate value in teaching." CreationDate="2017-11-21T21:45:11.553" UserId="204" />
  <row Id="9090" PostId="3975" Score="0" Text="Jupyter notebooks (formally known as IPython notebooks) springs to mind, but given you posted an answer using IPython, I'm assuming you're already familiar with these? If not, if you already have jupyter installed, it's as easy as running `jupyter notebook` from the command line (or, if you're using an older version of the program back when it was called IPython, run `ipython notebook`)." CreationDate="2017-11-21T21:48:14.417" UserId="732" />
  <row Id="9092" PostId="3975" Score="0" Text="@Michael0x2a no. I know nothing, what I put in my answer is from some research I did today. So please put an answer for me and anyone else." CreationDate="2017-11-21T21:59:19.417" UserId="204" />
  <row Id="9093" PostId="3975" Score="0" Text="Have you looked at scratch?  I just stayed my son on it and he's enjoying it immensely." CreationDate="2017-11-22T04:40:52.287" UserId="1537" />
  <row Id="9094" PostId="3975" Score="0" Text="@pojo-guy I am looking for text based. I do teach scratch already." CreationDate="2017-11-22T06:32:36.527" UserId="204" />
  <row Id="9095" PostId="3975" Score="0" Text="Why not just go to any IDE and&quot;real&quot; projects then? I initially learned BASIC on a teletype, so an IDE after some beginnings in Scratch seems like a huge improvement." CreationDate="2017-11-22T12:44:42.340" UserId="1537" />
  <row Id="9096" PostId="3975" Score="1" Text="@pojo-guy we sold the tele-types last year; we now use video display terminals. I thought we should take advantage of them. see https://www.youtube.com/watch?v=8pTEmbeENF4" CreationDate="2017-11-22T16:48:54.450" UserId="204" />
  <row Id="9099" PostId="3975" Score="1" Text="With Prolog you can always inspect the source code using `listings/1` or `listings/0` predicates. You can also modify them using `assert` / `retract` (more info here: http://www.learnprolognow.org/lpnpage.php?pagetype=html&amp;pageid=lpn-htmlse48 ). I'm using Prolog (SWI) from Emacs, but there must be other editors, perhaps less scary to beginners. SWI also has `qsave_program/2` to save program image, but I don't think it's ISO Prolog. Lisps typically offer the same, but some source code entered interactively may be actually lost." CreationDate="2017-11-23T14:27:37.217" UserId="1000" />
  <row Id="9443" PostId="3975" Score="0" Text="I see you are experimenting with Runestone Academy. It looks like you asked a question from the site but did you know that those questions are turned into GitHub [issues](https://github.com/RunestoneInteractive/RunestoneComponents/issues)? e.g. your question [Add a book of my own to your server](https://github.com/RunestoneInteractive/RunestoneComponents/issues/522)" CreationDate="2017-12-29T12:05:21.467" UserId="2516" />
  <row Id="9082" PostId="3977" Score="2" Text="I'm voting to close this question as off-topic because it is not about teaching or learning: it is not a question about how to teach or learn (although it is something you are learning, one could say this about any question) Consider asking the question on one of our other sites. Such as stack-overflow. However if it can be reworded, answers could be useful to a teacher teaching a programming project." CreationDate="2017-11-21T15:49:53.063" UserId="204" />
  <row Id="9083" PostId="3977" Score="0" Text="@ctrl-alt-delor Just out of curiosity: why answer a question if you think it should be closed?" CreationDate="2017-11-21T16:33:52.690" UserId="2068" />
  <row Id="9084" PostId="3977" Score="0" Text="@KevinWorkman I first answered it, then later realised (while going for a walk) that it was off topic. If you or someone else can rewrite, then it may be on topic." CreationDate="2017-11-21T17:37:15.857" UserId="204" />
  <row Id="9088" PostId="3979" Score="0" Text="Since Java has recently added REPL support to the language, I suspect that Eclipse and others will soon have support. That is remarkable for a language like Java, actually." CreationDate="2017-11-21T19:51:52.617" UserId="1293" />
  <row Id="9091" PostId="3979" Score="0" Text="Will give it a look. As I said I don't care about language. As long as I don't loose something more valuable. However what I rely would like is some way to move `number-checker` from the bottom window to the top, not by pasting, but by asking it to move (e.g. `(show (number-checker))`  or `(clip (number-checker))` to put into clip-board." CreationDate="2017-11-21T21:56:32.790" UserId="204" />
  <row Id="20964" PostId="3986" Score="0" Text="Hi I was wondering 5 years later do you have more insights about your question?" CreationDate="2023-02-12T05:39:48.953" UserId="9884" />
  <row Id="20967" PostId="3986" Score="0" Text="@Qiulang邱朗  Sadly, I haven't.  Student reaction remains &quot;Very cool!&quot; or &quot;Meh&quot; and I seem not to have changed the mix." CreationDate="2023-02-12T13:28:25.937" UserId="3524" />
  <row Id="20968" PostId="3986" Score="0" Text="Thanks for the reply. Can you look at my question here, https://cseducators.stackexchange.com/questions/7536/book-recommendation-for-high-school-students-who-will-major-in-cs ? One of the reasons I found your question is I am also thinking about teaching them digital logic" CreationDate="2023-02-12T14:24:37.117" UserId="9884" />
  <row Id="20969" PostId="3986" Score="0" Text="@Qiulang邱朗  I hesitate to promote my own writing here, but have a look at this: https://professorbrown.net/concepts/ (Chapter 6 is incomplete, but will be complete by the end of March.)" CreationDate="2023-02-12T15:13:49.563" UserId="3524" />
  <row Id="20970" PostId="3986" Score="0" Text="I have 2 books in my mind so far 1. https://www.howcomputersreallywork.com/ 2. https://code.energy/computer-science-distilled/ , after briefly checking your book I find they are similar and I will read your book later. Thanks again." CreationDate="2023-02-12T15:33:05.677" UserId="9884" />
  <row Id="20971" PostId="3986" Score="0" Text="But I find your book seems not to touch algorithms, is that correct? If yes, why ?" CreationDate="2023-02-12T15:35:35.870" UserId="9884" />
  <row Id="20972" PostId="3986" Score="0" Text="@Qiulang邱朗 It is an introduction to concepts for students who have already had a beginning programming course.  Chapter 6 briefly mentions undecidable and intractible problems, big-O notation, and algorithmic complexity." CreationDate="2023-02-12T16:22:42.593" UserId="3524" />
  <row Id="9110" PostId="3987" Score="0" Text="The physical activity seems impractical for the amount of time available for the material that @BobBrown wishes to cover." CreationDate="2017-11-27T01:57:22.813" UserId="27" />
  <row Id="9112" PostId="3991" Score="0" Text="Can you tell us a little about it. Tell us what makes it good, in context to the question." CreationDate="2017-11-27T18:43:58.000" UserId="204" />
  <row Id="9113" PostId="3991" Score="0" Text="I have looked at their website, and found out nothing about it. I feel like they are trying to herd me toward the pay wall. I just found a link “Tell me more about Xamerin“, it takes to to a page with little info, and a big download button, this button takes me to a sign up page. They need to get their marketing in gear, who would buy something that they can not find out what it is?" CreationDate="2017-11-27T18:50:15.580" UserId="204" />
  <row Id="9115" PostId="3991" Score="0" Text="I like the nice UI and the extensiblity, as stated in my answer. I also gave an example of how I extended it, but I see other useful ways (e.g. when teaching OO, you can extend it to draw the class diagram at the end). You can also edit the code &quot;on-the-fly&quot; and rerun it, as required by OP." CreationDate="2017-11-27T20:13:51.300" UserId="279" />
  <row Id="9116" PostId="3991" Score="0" Text="And here's the page for the installer: https://developer.xamarin.com/guides/cross-platform/workbooks/install/ Just click on the second option and you can download it. Btw. Xamarin is part of any edition of Visual Studio, the Community Edition also, which is for free." CreationDate="2017-11-27T20:15:15.713" UserId="279" />
  <row Id="9117" PostId="3991" Score="1" Text="I will not download anything, until I first know why. What is good about Xamarin?" CreationDate="2017-11-27T20:20:53.657" UserId="204" />
  <row Id="9123" PostId="3991" Score="0" Text="You can use it for more than just Xamarin, as stated in the comments. It's just that the team inside Microsoft that published this tool is the team responsible for Xamarin. You can use it for plain old C# (that's how I use it)." CreationDate="2017-11-29T09:36:21.190" UserId="279" />
  <row Id="9130" PostId="3998" Score="3" Text="Welcome to the site. And nice question. The idea filled me with excitement. I would love to hear how it went, after you have done it. Please at this time add an answer as a retrospective." CreationDate="2017-11-29T17:16:39.787" UserId="204" />
  <row Id="9131" PostId="3998" Score="0" Text="@ctrl-alt-delor Thank-you for your kind words.  I'll certainly do that!" CreationDate="2017-11-29T17:28:50.427" UserId="1660" />
  <row Id="9132" PostId="3998" Score="1" Text="Actually, the developer role and the product owner role should be separated. The product owner could be one or two students or yourself, but not the class. I assume you are providing the backlog. I can provide some guidance, but your bullet points as stated confuse me a bit. But what you want is feasible, certainly." CreationDate="2017-11-29T17:38:20.773" UserId="1293" />
  <row Id="9133" PostId="3998" Score="0" Text="@Buffy Yes, having a small group of product owners might be better than the whole class.  However, having some class input is, I think, essential." CreationDate="2017-11-29T17:53:07.400" UserId="1660" />
  <row Id="9152" PostId="3998" Score="1" Text="I just finished the Android course for my BAS in Software Development, and I'd be worried about time and schedule and covering enough of the basics right at the start so that the students can actually do something (setting up Android Studio, getting the emulator set up for whatever target you spec,etc) and then learning the app/activity lifecycle and fragment management and such.  I do like the idea of incorporating agile/scrum though - you could use it for the second half of the course for students to complete a final project." CreationDate="2017-12-05T05:36:03.110" UserId="662" />
  <row Id="9153" PostId="3998" Score="0" Text="@ivanivan Thanks for the feedback! I'm still planning the course, but I'm thinking of having four three-week sprints: 1) Set up dev environment, 2) UX / UI and how to implement it, 3) Getting &amp; displaying information from web services, 4) Social media, logins, monetization. I'll flesh it out a bit more before I edit my question with the update." CreationDate="2017-12-05T12:26:15.437" UserId="1660" />
  <row Id="18262" PostId="3998" Score="0" Text="@PeterK. what is your thoughts now ?" CreationDate="2021-09-13T07:26:06.237" UserId="9884" />
  <row Id="9134" PostId="3999" Score="0" Text="Great feedback!  Thank-you. I've worked as part of an agile team for the last ~10 years, and have taught it under the SW project management label so I believe I am well-versed in its details.  I'll have to see how to keep the full scope &quot;hidden&quot; or &quot;partially revealed&quot; (tool-wise, I mean)." CreationDate="2017-11-29T17:56:09.883" UserId="1660" />
  <row Id="9135" PostId="4000" Score="0" Text="Wow, that's a lot to digest! Thank-you!  I will say that what I want to teach in the course will not fit into one semester, so in that sense we'll have to be agile: what is taught will be determined by the product owner group.  I'll respond more as I consider your answer." CreationDate="2017-11-29T19:29:49.390" UserId="1660" />
  <row Id="9136" PostId="4000" Score="0" Text="You don't need to give up. You can be agile in a smaller project as well as a big one. If you choose features wisely you can also have a &quot;useful&quot; part of a bigger project done in a term. An agile project is &quot;done&quot; when its PO says it is done, not when the backlog is gone. Build features in order of value (which then decreases as you go). Quit when the cost of the next set of features exceeds the value. Costs rise per feature since they are integrated into an increasingly complex application." CreationDate="2017-11-29T19:58:57.507" UserId="1293" />
  <row Id="9137" PostId="4001" Score="0" Text="A key idea here is that you can make the student's successful even if your course design fails and the project fails as well. Students can learn as much from this as from success. Good job. +1." CreationDate="2017-11-30T11:34:45.260" UserId="1293" />
  <row Id="9138" PostId="4001" Score="0" Text="More great feedback! Thank-you!  I did think about how to distinguish the roles : especially for people new to it, it could be very confusing who is doing what, when, and why they are doing it.  All three answers so far have giving me lots to mull over. I will try to edit my question on the weekend to update it with more details trying to address all your concerns." CreationDate="2017-11-30T12:45:50.183" UserId="1660" />
  <row Id="12661" PostId="4006" Score="1" Text="Cool: `012` is October (latin for 8th month). ☺" CreationDate="2018-05-24T13:52:11.107" UserId="204" />
  <row Id="9150" PostId="4009" Score="0" Text="An example that seems to work is here: http://www.viksit.com/tags/clojure/practical-applications-y-combinator-clojure/" CreationDate="2017-12-04T21:34:16.797" UserId="1293" />
  <row Id="9224" PostId="4009" Score="0" Text="Does this help: RosettaCode Y-Combinator [Scheme](https://rosettacode.org/wiki/Y_combinator#Scheme) ? If so I can make it an answer." CreationDate="2017-12-14T20:48:19.977" UserId="2516" />
  <row Id="9240" PostId="4009" Score="0" Text="@GuyCoder It certainly helps." CreationDate="2017-12-16T21:06:33.523" UserId="27" />
  <row Id="9241" PostId="4009" Score="0" Text="@Buffy The memoization example there is amazing. I'm still trying to make sense of it." CreationDate="2017-12-16T21:11:52.487" UserId="27" />
  <row Id="9154" PostId="4010" Score="6" Text="How old are the students? What classes are you talking about? What do you mean by becoming the oracle?" CreationDate="2017-12-05T17:56:47.793" UserId="2068" />
  <row Id="9163" PostId="4010" Score="1" Text="@KevinWorkman An oracle is a person (or machine) that magically answers any question you ask them/it." CreationDate="2017-12-06T04:04:31.763" UserId="1275" />
  <row Id="9164" PostId="4010" Score="2" Text="@immibis soo.. stackoverflow?" CreationDate="2017-12-06T10:32:21.043" UserId="3688" />
  <row Id="9166" PostId="4010" Score="14" Text="It took me a decade to realize that my teacher, who responded with pedantic questions (having me explain every little thing about my question) had the right approach. Not only does it teach you that _questioning your own assumptions_ is often the best solution, but it also incentivized the students to not bother asking questions willy nilly, as it would take time and effort to deal with the teacher's series of questions. If you're easily approachable, students will quickly involve you in the process. If there's a cost (&quot;annoyance tax&quot;) attached, they are more likely to avoid you if possible." CreationDate="2017-12-06T13:33:42.687" UserId="2164" />
  <row Id="9169" PostId="4010" Score="0" Text="@immibis I understand what the word oracle means. I'm asking what it means to become an oracle in this environment. Is it just answering questions in general? Is it answering questions without the students really learning anything? Is it something else?" CreationDate="2017-12-06T17:26:48.967" UserId="2068" />
  <row Id="9170" PostId="4010" Score="0" Text="@Flater, I don't think the point is to get them to avoid you. Rather it is to get them into the habit of seeking their own solutions, either internally or with the available materials. You won't be there for them forever. But if you make it a bit easier for them to do that than to just consult the oracle then everyone wins." CreationDate="2017-12-06T19:08:00.090" UserId="1293" />
  <row Id="9174" PostId="4010" Score="1" Text="@CaiusJard As many questions as I've asked on stackexchange, I've probably typed even more questions half way only to discover the answer myself when having to fully articulate the problem." CreationDate="2017-12-06T19:32:57.870" UserId="3699" />
  <row Id="9176" PostId="4010" Score="0" Text="@Buffy: Maybe I worded it too strongly. The intention isn't so much to make them want to avoid you, but rather only come to you when they have _sufficient_ reason to do so (and not e.g. ask before looking themselves)" CreationDate="2017-12-06T20:27:42.730" UserId="2164" />
  <row Id="9177" PostId="4010" Score="0" Text="Point taken, but it is a skill like any other that they need to learn and practice, and that you can help them with. Being easily approachable is a _good_ thing. So foster that, but teach them to come with a harder problem and a bit of prep." CreationDate="2017-12-06T20:42:47.490" UserId="1293" />
  <row Id="9180" PostId="4010" Score="0" Text="@DeanMacGregor SO is your cardboard analyst, nice" CreationDate="2017-12-06T23:07:10.360" UserId="3688" />
  <row Id="14220" PostId="4010" Score="0" Text="When I was in college, snow days were when I learned the most, because I didn't want to walk to the terminal rooms. I spent more time looking at a printout of my code." CreationDate="2019-01-27T18:24:07.037" UserId="5349" />
  <row Id="9159" PostId="4011" Score="7" Text="This might not work work with everyone and might in fact backfire. I would hate to be &quot;paraded&quot; this way in front of the others just for being able to solbe my own problem (as everyone should be able to). Then again, I'm not the one asking the tutor/teacher for help on the first sign of trouble." CreationDate="2017-12-06T00:10:53.327" UserId="1086" />
  <row Id="9162" PostId="4011" Score="0" Text="@Polygnome I agree. One always needs to ask permission (or utilize clear intuition / knowledge of the student in question) before engaging in an activity like that." CreationDate="2017-12-06T03:02:59.100" UserId="27" />
  <row Id="9171" PostId="4011" Score="0" Text="There are various ways to &quot;celebrate&quot; a student, even if they don't want public recognition. A quiet word in the hall way, expressing approval is usually well appreciated and long remembered." CreationDate="2017-12-06T19:10:21.273" UserId="1293" />
  <row Id="9155" PostId="4012" Score="0" Text="I have rubber ducks, too :)  And a few of my labs are rubber-duck themed as well.  I haven't had a lot of success getting kids to actually talk to them.  They laugh about it when it is explained, but don't actually talk.  Have you solved that problem?" CreationDate="2017-12-05T20:14:16.370" UserId="27" />
  <row Id="9156" PostId="4012" Score="0" Text="They laughed, but once a couple of kids tried it and it worked there was buy in." CreationDate="2017-12-05T20:21:59.783" UserId="30" />
  <row Id="9157" PostId="4012" Score="0" Text="@BenI. Did you ever talk to the ducks yourself? =) Lead by example and all that. That said, I expect that most students who don't want to talk to the duck opted to speak with their neighbor, as the answer suggests." CreationDate="2017-12-05T22:48:54.000" UserId="981" />
  <row Id="9158" PostId="4012" Score="0" Text="I don't talk to it, but I do have a stuffed Angry Bird that I toss around when I'm trying to work something out. For the ducks, I think it helps get across the idea that they are working through a problem and just banging away on the keyboard without thinking is almost never the best way to attack the problem." CreationDate="2017-12-05T23:12:45.780" UserId="30" />
  <row Id="9160" PostId="4012" Score="6" Text="As long as your students (and, more importantly, your employers) don't start thinking you can be replaced by a duck :-)" CreationDate="2017-12-06T01:20:53.363" UserDisplayName="user2049" />
  <row Id="9168" PostId="4012" Score="0" Text="I've been collecting ducks, but usually give them away when I learn a colleague doesn't have a duck. I only have my sumo-wrestler duck left..." CreationDate="2017-12-06T16:02:44.770" UserId="3694" />
  <row Id="9172" PostId="4012" Score="1" Text="For this, I prefer a nodding dog (bobble-head for the Americans).  Set the head bouncing and it will nod in understanding as you go along and encourage you to keep explaining while it keeps nodding ..... :)" CreationDate="2017-12-06T19:17:45.337" UserId="3698" />
  <row Id="9181" PostId="4012" Score="0" Text="@paxdiablo: i.e. make sure you answer interesting non-debugging or non-basic questions?  So even more like Stack Overflow.  I would love to vote-to-close some debugging questions as &quot;off topic: explain it to your rubber duck&quot;." CreationDate="2017-12-06T23:48:57.810" UserId="1654" />
  <row Id="9218" PostId="4014" Score="0" Text="I worry that some of them, at least, will not use the time wisely and just wait for you. My _strong_ opinion is that you need to be more responsive. You won't be building better habits if they just fidget spin for five minutes." CreationDate="2017-12-13T02:26:11.827" UserId="1293" />
  <row Id="14219" PostId="4014" Score="0" Text="There are two general cases: 1) they could figure it out if they tried 2) there is no way in the world that they will figure it out because it is some arcane, particular thing that they don't really need to learn forever but it is blocking them. It would be good if they could distinguish these and act appropriately." CreationDate="2019-01-27T18:18:21.310" UserId="5349" />
  <row Id="9165" PostId="4015" Score="7" Text="This will cause them to ask no questions at all.  You will lose your chance to help the students who are genuinely lost this way." CreationDate="2017-12-06T11:26:33.543" UserId="27" />
  <row Id="9167" PostId="4015" Score="2" Text="And maybe if they are really united they will form a delegation to go to your boss with a complaint." CreationDate="2017-12-06T14:24:08.933" UserId="1293" />
  <row Id="14218" PostId="4016" Score="0" Text="With constantly new material of ever greater complexity, like Console, OO, Windows Forms, then databases, then ADO, then ASP, there is no basis for general problem-solving and background knowledge. So the questions keep coming." CreationDate="2019-01-27T18:14:06.047" UserId="5349" />
  <row Id="9201" PostId="4017" Score="0" Text="I am only looking for Free/Libre Software, but I will look at this to see what it offers." CreationDate="2017-12-08T17:39:36.840" UserId="204" />
  <row Id="9203" PostId="4017" Score="0" Text="Ah, sorry, can't help you there. Swift itself is Apache-licensed, but Xcode is not. (If only... :( )" CreationDate="2017-12-08T20:50:35.953" UserId="3700" />
  <row Id="9205" PostId="4017" Score="0" Text="So do we need Xcode to run Swift?" CreationDate="2017-12-09T16:05:38.907" UserId="204" />
  <row Id="9206" PostId="4017" Score="0" Text="No, you don't. You need Xcode to run the playgrounds or build Mac/iOS apps, but Swift itself will work just fine without it--even on Linux! (You can still use a REPL or compile it into an executable.)" CreationDate="2017-12-10T14:17:37.880" UserId="3700" />
  <row Id="9207" PostId="4017" Score="0" Text="Note that on Mac, you're better off getting Xcode anyway, as it comes with the compiler, etc. (If you try to run clang/gcc without it, it'll prompt you to install the Command Line Tools, which contains the compiler, etc. but not the Xcode GUI.)" CreationDate="2017-12-10T14:17:54.620" UserId="3700" />
  <row Id="9208" PostId="4017" Score="0" Text="Also, on Linux, it will have most but not all of the Foundation API, as the Objective-C runtime is not part of the open-source project. (So `String` but no `NSString`, for example.)" CreationDate="2017-12-10T15:15:25.987" UserId="3700" />
  <row Id="14217" PostId="4019" Score="0" Text="When I was a TA in an intro programming course for non-majors lon ago, this is what I tended to do. For a much more complex situation, I think it would be like a game of &quot;pin the tail on the donkey.&quot;" CreationDate="2019-01-27T18:11:17.680" UserId="5349" />
  <row Id="9184" PostId="4020" Score="0" Text="You are making a huge assumption that this would be used to evaluate students instead of to self-evaluate as a teacher. I would never give up on a student, really for all of the reasons that you just outlined. But part of the emotional life of a teacher is that you *really want* to do a good job. It matters to you. So, when I look at my own numbers, I also need a way to contextualize them. Am I doing a reasonable job, or do I need to go back and rebuild everything from the ground up?" CreationDate="2017-12-07T13:13:22.880" UserId="27" />
  <row Id="9195" PostId="4020" Score="0" Text="I guess I didn't read it the same way @BenI. did. I think the advice is good, and yes, you _can_ be doing a &quot;reasonable&quot; or even excellent job and _still_ need to at least reevaluate everything. Hmmm, what could I have done to reach the three that failed the course??? Maybe nothing, but you need to think about it." CreationDate="2017-12-07T16:14:06.010" UserId="1293" />
  <row Id="9197" PostId="4020" Score="0" Text="@BenI. I missed that interpretation ;) I guess I would say that, confronted with a student who was struggling, checking that they know how to learn, know basic math facts, etc, etc, would be an important first step to knowing whether it's your teaching or whether what they learned in the past." CreationDate="2017-12-08T13:06:19.900" UserId="919" />
  <row Id="9185" PostId="4021" Score="0" Text="Welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-12-07T13:16:29.300" UserId="27" />
  <row Id="14216" PostId="4023" Score="0" Text="This should be the accepted answer. It refers to getting the students to be more self-directed." CreationDate="2019-01-27T18:08:51.423" UserId="5349" />
  <row Id="9196" PostId="4025" Score="0" Text="What level are your students? What do they already know? How much experience do they have with programming? What is their dominant programming paradigm? There would be different answers for novices and for experienced programmers." CreationDate="2017-12-08T12:00:07.637" UserId="1293" />
  <row Id="9202" PostId="4025" Score="0" Text="@Buffy I edited the initial post about the experience level of the students." CreationDate="2017-12-08T17:40:23.310" UserId="3714" />
  <row Id="9198" PostId="4027" Score="0" Text="I am reasonably certain that no such research exists, though I would love to be wrong about this. Personally, I suspect that the second option would be nearly worthless as an assessment tool. There's too much room for cheating and for [Brownian programming](https://cseducators.stackexchange.com/a/634/27)." CreationDate="2017-12-08T14:18:52.680" UserId="27" />
  <row Id="9199" PostId="4027" Score="0" Text="I'm hoping you're wrong as well :) There are a few ways of assessing open ended programming tasks, and I should have added them above. Now adding them..." CreationDate="2017-12-08T14:20:40.983" UserId="48" />
  <row Id="9200" PostId="4027" Score="0" Text="Say something about the scale of the problem for each teacher. How many students need to be evaluated by a typical teacher. Some solutions that work for 20 students fail miserably for 200." CreationDate="2017-12-08T15:42:00.907" UserId="1293" />
  <row Id="9204" PostId="4027" Score="1" Text="Assessing programs that are non trivial can be a very subjective task. Is minimum lines to be preferred over easiest reading? Will a student be docked because s/he recognizes that the problem is built into the language and uses the programming language facilities to sidestep the exercise (examples: sort,  n phase commit,  etc)" CreationDate="2017-12-09T05:55:37.980" UserId="1537" />
  <row Id="9213" PostId="4032" Score="0" Text="Thanks for the answer. This is getting there, but the starter and the solution are ideally in the same repo (as the latter is just the fully developed version of the former). I think the comment above from @ctrl-alt-delor is closer to what I should be doing" CreationDate="2017-12-11T15:04:12.447" UserId="3512" />
  <row Id="9215" PostId="4034" Score="1" Text="I'm not sure about your ladder analogy. You don't need to understand each black box layer in order to develop good code. Learning does take time, and experience informs better choices, but most modern programmers will never need to understand (for instance) the bitwise `xor` trick for switching case in ASCII, nor the purpose of the instruction register; such low-level considerations get abstracted away by the higher-level languages." CreationDate="2017-12-12T16:09:09.797" UserId="27" />
  <row Id="9216" PostId="4034" Score="0" Text="I've used the term scaffolding sort of like you're describing the ladder. It takes breaking up the end result into what pieces your students need to know to get there. Like Ben said, and especially in an intro course, skipping levels is sometime necessary to get to the end result." CreationDate="2017-12-12T17:30:30.683" UserId="30" />
  <row Id="9220" PostId="4037" Score="0" Text="I intend to continue to think about this and may update it." CreationDate="2017-12-13T12:37:14.330" UserId="1293" />
  <row Id="9221" PostId="4037" Score="0" Text="What is *IFTTT*?" CreationDate="2017-12-13T13:04:50.483" UserId="27" />
  <row Id="9222" PostId="4037" Score="0" Text="IF This Then That: https://en.wikipedia.org/wiki/IFTTT" CreationDate="2017-12-13T13:15:46.073" UserId="1293" />
  <row Id="9284" PostId="4037" Score="1" Text="The&quot;perfect student&quot; may actually benefit from the frustration of pair programming, although he or she will not appreciate it at the time" CreationDate="2017-12-20T03:44:09.483" UserId="1537" />
  <row Id="9225" PostId="4043" Score="0" Text="Human Resource Machine is a genuinely amazing game, so much so that we purchased a site license and added it directly into our curriculum (and it gets quite challenging).  TIS-100 was a lot to start, and I never got over the initial hump.  This is an amazing collection of resources.  Wow!" CreationDate="2017-12-14T23:04:48.933" UserId="27" />
  <row Id="9227" PostId="4044" Score="0" Text="There is a meta conversation that refers to this question [here](https://cseducators.meta.stackexchange.com/questions/340/the-list-nature-of-lesson-ideas?noredirect=1#comment643_340)." CreationDate="2017-12-15T00:12:20.883" UserId="27" />
  <row Id="9229" PostId="4044" Score="0" Text="I'll note that many problems that can be one with a simple (non-nested) loop can also be done recursively." CreationDate="2017-12-15T01:01:08.813" UserId="1293" />
  <row Id="9228" PostId="4046" Score="0" Text="Actually, approximating any infinite series could be adapted to this idea. Euler is interesting, however, in that both the sum and the factorial need to be captured in the same loop." CreationDate="2017-12-15T00:39:36.220" UserId="1293" />
  <row Id="9234" PostId="4046" Score="0" Text="Possibly related: http://www.smbc-comics.com/comic/ellipsis" CreationDate="2017-12-15T10:44:56.173" UserId="1293" />
  <row Id="9230" PostId="4047" Score="0" Text="There is an opportunity here for connecting the problem to History. In HS, students may simultaneously be studying the history of the period in which the Enigma machine was a critical issue." CreationDate="2017-12-15T01:06:33.950" UserId="1293" />
  <row Id="9245" PostId="4051" Score="0" Text="Now that I've seen your writeup, are you saying that the lab activity is, itself, to create `fib` and `fac`?" CreationDate="2017-12-17T17:49:31.070" UserId="27" />
  <row Id="9246" PostId="4051" Score="0" Text="Yes. The activity would be first to create the Y combinator, then to verify that it works one could write `fib` and/or `fac`. I also find that reading the book noted is a gentler way to learning what is going on and why. While I don't know your end goal with Lambda Calculus. If I were teaching a class on it I would keep one of the goals being to understand [System F](https://en.wikipedia.org/wiki/System_F) which is the basis for a lot of functional languages and language research." CreationDate="2017-12-17T17:57:00.877" UserId="2516" />
  <row Id="9252" PostId="4053" Score="0" Text="a card -&gt; deck of cards (array of cards) -&gt; blackjack shoe with 6 decks in it -&gt; game and -&gt; player's hand.  Then have them implement a blackjack game, and add in things like the current card count, % chance of going bust if another card is drawn, etc." CreationDate="2017-12-18T00:32:21.647" UserId="662" />
  <row Id="9253" PostId="4053" Score="0" Text="The Deck class can lead to inheritance (ex. A Pile class, a Deck, a Hand) But I think it leads to simple discussions like  &quot;who's job is it to turn a card face up?&quot;" CreationDate="2017-12-18T01:17:52.697" UserId="695" />
  <row Id="9255" PostId="4053" Score="1" Text="Welcome to [cseducators.se]!  I hope we hear more from you in the future." CreationDate="2017-12-18T02:33:49.807" UserId="27" />
  <row Id="9258" PostId="4054" Score="0" Text="This answer is very short. It is of little use as it tells me nothing about the ..... (word left blank, because I know so little that I can not fill it in).  There is also no link for the first, so I can not even look it up." CreationDate="2017-12-18T17:22:25.810" UserId="204" />
  <row Id="9259" PostId="4054" Score="0" Text="I'm so used to the fact that repl.it is the name of the product and the url that I forget to link when discussing. Since the topic is &quot;interactive programming environment&quot; I misjudged that the products listed would be interpreted as such. I will agree that it should be further edited to indicate that these products do address the features and usability requested in the original post." CreationDate="2017-12-18T19:55:34.317" UserId="695" />
  <row Id="9274" PostId="4057" Score="1" Text="A very easy CTF question might be a lot of fun, though 6 is still a bit young.  Human Resource Machine is a great game, and the first few levels are accessible to any age.  A few questions: will you have internet there? Is there some sort of budget for devices (like Arduinos)?  Is there some particular direction you're considering heading off in?" CreationDate="2017-12-19T14:01:31.447" UserId="27" />
  <row Id="9275" PostId="4057" Score="2" Text="This question is likely to generate a big list. Perhaps you should provide some criteria by which the suggestions can be assessed and judged." CreationDate="2017-12-19T14:05:54.383" UserId="150" />
  <row Id="9276" PostId="4057" Score="0" Text="Edited question :)" CreationDate="2017-12-19T14:14:01.803" UserId="3761" />
  <row Id="9277" PostId="4057" Score="0" Text="@BenI. No particular direction... we can do simple coding, robotics, circuits etc... anything that would get a kid hooked :)" CreationDate="2017-12-19T14:19:05.243" UserId="3761" />
  <row Id="9280" PostId="4057" Score="0" Text="You may also be gain some inspiration from this question: https://cseducators.stackexchange.com/questions/2540/what-would-be-reasonable-to-include-in-an-introduction-to-ai-class-for-a-7th-8th" CreationDate="2017-12-19T19:30:01.440" UserId="27" />
  <row Id="9278" PostId="4058" Score="0" Text="the best advice you can get is: read the manual for `cmake`,  then use google to search for examples, etc." CreationDate="2017-12-19T15:57:09.937" UserId="3762" />
  <row Id="9281" PostId="4058" Score="3" Text="What does “organize header files” mean?" CreationDate="2017-12-19T21:19:56.610" UserId="124" />
  <row Id="9401" PostId="4058" Score="1" Text="I am new to `cmake`, I just looked it up. It seems to be to me a tool for making makefiles. So a **meta make**. Meta is my favourite Greek word. It has two meanings, the first is beyond, the second has no equivalent in English. It sort of doubles the following word, e.g. meta thinking, is thinking about thinking; a meta language is a language used to describe languages; and a meta make, is a make for making a make." CreationDate="2017-12-24T23:03:23.947" UserId="204" />
  <row Id="9282" PostId="4060" Score="1" Text="To generate a pattern like that would take a nested loop, though." CreationDate="2017-12-20T01:27:20.477" UserId="27" />
  <row Id="9283" PostId="4060" Score="0" Text="@BenI. I suppose that depends on the language. I could do this with a single loop in Processing." CreationDate="2017-12-20T01:44:20.917" UserId="2068" />
  <row Id="9285" PostId="4062" Score="1" Text="Perhaps you could share your code for these. Or at least a minimal framework." CreationDate="2017-12-20T14:21:45.107" UserId="1293" />
  <row Id="9286" PostId="4062" Score="2" Text="I agree with @Buffy that a link would be helpful.  But the ideas here are a nice contributions.  Welcome to [cseducators.se], and I hope we hear more from you!" CreationDate="2017-12-20T15:01:48.657" UserId="27" />
  <row Id="9320" PostId="4063" Score="2" Text="I've done the same thing, but then I caution students to read all the questions before they start writing." CreationDate="2017-12-22T00:33:52.617" UserId="3524" />
  <row Id="9287" PostId="4065" Score="0" Text="Welcome to CSEducators. We hope to see more of you." CreationDate="2017-12-21T13:33:16.230" UserId="1293" />
  <row Id="9302" PostId="4065" Score="17" Text="As a working software engineer I implore you: teach ideas rather than tools. E.g. how/why to use version control rather than focusing on git." CreationDate="2017-12-21T18:38:12.730" UserId="3777" />
  <row Id="9303" PostId="4065" Score="7" Text="If this is a first semester C course, your curriculum shouldn't contain  *any* of the tools your propose.  They need to know how to link, compile and debug." CreationDate="2017-12-21T19:16:27.410" UserId="882" />
  <row Id="9306" PostId="4065" Score="2" Text="`&lt;shamelessPlug&gt;`Dear HNQ visitors, [this question](https://cseducators.stackexchange.com/questions/4058/enjoyable-and-or-fun-way-to-explain-cmake) was asked yesterday, and is related enough to this one that it might also benefit from your expertise. `&lt;/shamelessPlug&gt;`" CreationDate="2017-12-21T19:23:36.563" UserId="27" />
  <row Id="9326" PostId="4065" Score="0" Text="@Jake the reason for git is, that many students, send their code via email and facebook. Wich is quite contraproductive, if they do the merge all by hand every few days." CreationDate="2017-12-22T09:43:23.307" UserId="1868" />
  <row Id="9327" PostId="4065" Score="0" Text="@RobertHarvey, how would you propose for them to  share the code in the groupproject? Make, makes submission, compiling and debugging way easier in the way that they dont need to enter every flag, and also every groupmember uses the same setup for debugging execution and compiling." CreationDate="2017-12-22T09:45:49.910" UserId="1868" />
  <row Id="9328" PostId="4065" Score="0" Text="@drewbenn Im a student, as are the other parties involved planning this 3 session course. Also, shell commands are not in the scope of this." CreationDate="2017-12-22T09:49:02.103" UserId="1868" />
  <row Id="9330" PostId="4065" Score="0" Text="For C - checking the return values instead of assuming it will succeed. Even if this is `if (someCall() == false) { fprintf(stderr, &quot;error &lt;some description&gt;\n&quot;); abort(); }`." CreationDate="2017-12-22T09:55:53.600" UserId="673" />
  <row Id="9331" PostId="4065" Score="0" Text="@drewbenn The following points knock them out: they dont know how to test, they dont know how to check for memory leaks, they have no concept of capsulating for example memory allocation(single function for memory allocation and initialisation), program flow -&gt; clean exit if error is encountered, etc" CreationDate="2017-12-22T10:28:57.763" UserId="1868" />
  <row Id="9335" PostId="4065" Score="1" Text="@gismo: Would the source control be maintained for them?  Source control is not a mountain of detail I would want in my first-semester C class.  Is this a two-semester class?  See also Jake's comment above." CreationDate="2017-12-22T15:35:12.587" UserId="882" />
  <row Id="9336" PostId="4065" Score="0" Text="@RobertHarvey If you mean by &quot;maintained&quot; hosted, the university provides a git server with unlimited repos. Its a single semester.  Why is everybody focusing on the class? We would just do about 3 sessions of about 3 hours. The focus on git is because the uni provides one. Additionally to why, we would just introduce a basic workflow with maybe the cherrypick functionality (binary search for the last working revision)" CreationDate="2017-12-22T15:57:41.537" UserId="1868" />
  <row Id="9345" PostId="4065" Score="0" Text="Is there any possibility that a different language could be used? C is not the easiest to learn, especially if you want to teach safe, effective C." CreationDate="2017-12-22T19:24:02.243" UserId="3783" />
  <row Id="9346" PostId="4065" Score="0" Text="Also, [this article](https://blog.regehr.org/archives/1393) on teaching C is probably a good source." CreationDate="2017-12-22T19:24:45.437" UserId="3783" />
  <row Id="9355" PostId="4065" Score="4" Text="What about gdb? A debugger allows students to reason about code interactively." CreationDate="2017-12-22T21:27:52.547" UserId="3787" />
  <row Id="9364" PostId="4065" Score="0" Text="*&quot; the reason for git is [...]&quot;* That is the reason for *source control*. @Jake was asking you to distinguish between the category of tool and the particular implementation you're going to cover (chosen in this case because the school hosts a `git` repository). So, `gcc` is just one compiler; `gdb` is just one debugger; `valgrind` is just a particular profiler/leak-detector. If your students stay in this business they will replace tools,  but they will keep using the same classes of services." CreationDate="2017-12-23T00:03:18.420" UserId="2735" />
  <row Id="9373" PostId="4065" Score="0" Text="I'm very happy to see you encouraging the use of `make`. I use it extensively now and believe that it is a staple of programming that everyone should know. I would also recommend demonstrating how to use `#include` and the breaking up of a project into multiple files; include guards, etc." CreationDate="2017-12-23T09:38:57.780" UserId="3791" />
  <row Id="9376" PostId="4065" Score="0" Text="Would this be an introductory course on programming, an introductory course on C (where the students have programmed before in some other language), or a best-practices programming course (which has more to do with engineering practices, and not just the programming part)?" CreationDate="2017-12-23T10:03:41.447" UserId="3793" />
  <row Id="9377" PostId="4065" Score="1" Text="How to use the debugger." CreationDate="2017-12-23T11:20:00.797" UserId="3795" />
  <row Id="9415" PostId="4065" Score="0" Text="@ilkkachu They had a python lecture wich is basicly just a crash course (1 Month) before the c lecture." CreationDate="2017-12-26T14:15:12.753" UserId="1868" />
  <row Id="9288" PostId="4066" Score="0" Text="We thought about using the final assignment from a previous year (around 800 LoC). Do you think that is big enough, or should we use a bigger project? If so, do you have one in mind? Since most open source projects that i have had a look on the code, have terrible code documentation." CreationDate="2017-12-21T14:05:09.847" UserId="1868" />
  <row Id="9289" PostId="4066" Score="0" Text="If that is the scale of the assignment to come then it is probably a good choice. Others may need something bigger in a similar context. It is probably a mistake to overwhelm students unnecessarily. And you may need to doctor whatever code you find before use. You could also use the sessions to improve the code, of course. That might be especially valuable in this context. You don't mention whether the students start the project with a given codebase or start from scratch. That can affect how you proceed, but the toolset would likely be the same." CreationDate="2017-12-21T14:10:03.440" UserId="1293" />
  <row Id="9324" PostId="4066" Score="0" Text="They start without any codebase, just the standard libraries." CreationDate="2017-12-22T09:39:22.700" UserId="1868" />
  <row Id="9295" PostId="4067" Score="2" Text="C was created at Bell Labs. If you worked there it was a &quot;firing offense&quot; if you didn't brace all. I.E. Brackets are NOT an option. Make your fingers do it so you don't need to even think about it. If you have a good IDE, the close bracket will be correctly placed if you open a brace and hit return." CreationDate="2017-12-21T17:27:28.843" UserId="1293" />
  <row Id="9305" PostId="4067" Score="0" Text="CQRS is probably out of scope for an introductory course anyway." CreationDate="2017-12-21T19:18:00.713" UserId="882" />
  <row Id="9309" PostId="4067" Score="0" Text="I just looked-up CQRS. It does not seem to be the same thing as command query separation (CQS)." CreationDate="2017-12-21T21:18:46.350" UserId="204" />
  <row Id="9321" PostId="4067" Score="3" Text="I would also add a note about &quot;Global Variables&quot; and &quot;Code Reusability&quot; to your list." CreationDate="2017-12-22T00:40:44.203" UserId="3780" />
  <row Id="9325" PostId="4067" Score="0" Text="@jjk_charles Global variables are forbidden in the lecture and are an instant fail. Code Reusability is actually a good idea to have that explicit and not just implicit!" CreationDate="2017-12-22T09:41:17.870" UserId="1868" />
  <row Id="9329" PostId="4067" Score="4" Text="My $0.03: probably `i` is well-known enought not to adding much information over index. Similarly no points for guessing what `v` and `a` are in physics simulator. `pos[i] += v[i] * dt; v[i] += a[i] * dt;` is probably clearer than `positionOfObjectsArray[index] += velocityOfObjectArray[index] * timeDifference; velocityOfObjectArray[index] += accelerationOfObjectArray[index] * timeDifference;`." CreationDate="2017-12-22T09:51:57.590" UserId="673" />
  <row Id="9342" PostId="4067" Score="7" Text="A couple major points of disagreement. First, comments, **both are bad**. Commenting `i++` to explain what the statement does is not useful, it's clutter and trains new programmers not to actually be intentional about good comments. A good comment might be something like `/* Skip an additional element because the code below assumes... */` or similar. Comments are to explain purpose, not to translate C to English." CreationDate="2017-12-22T19:05:37.453" UserId="1327" />
  <row Id="9343" PostId="4067" Score="1" Text="Second, while being inflexible about braces or variable naming may be good for the purpose of a course, you need to prepare students to be flexible about coding style and policies, because they **will differ** in real-world work. Being led to believe they've been taught the &quot;one true way&quot; about anything that's a matter of style or tradeoffs sets them up to doubt the competence of programmers/teams that do things differently for well-justified reasons or just because it's not a big deal." CreationDate="2017-12-22T19:10:05.147" UserId="1327" />
  <row Id="9351" PostId="4067" Score="0" Text="@MaciejPiechotka - While you make an argument that i, v, and a are equally readable in context to the longhand variable names. I was only &quot;pretty sure&quot; what v and a meant, as I don't normally work with physics. The second version is not only more readable, but unmistakable. In your first example, I could assume that v stood for vector, and a for acid, or something. I cannot make that mistake in your second example. There is a lot of value in being 100% sure you eliminated a mistake over being 99% sure. Especially when it doesn't cost you anything to add the 1%." CreationDate="2017-12-22T20:34:21.897" UserId="1028" />
  <row Id="9360" PostId="4067" Score="0" Text="@EvSunWoodard No, I'm claim they are _more_ readable as they are a) domain specific word no different than lingo of any other buissness client and b) if you have sufficiently long equations you may need to spill over to next lines making it less readable by sheer verbosity. Those are toy examples but consider `(legendre(x, k).plus(legendre(x, k - 1).times(Float64.valueOf(eta_k)).plus(legendre(x, k + 1)).times(Float64.valueOf(1 + eta_k)))).times(Float64.valueOf(0.5))`. If you know domain it's more or less clear - setting aside problem of lack of operator overloading in Java (...)" CreationDate="2017-12-22T22:43:54.977" UserId="673" />
  <row Id="9361" PostId="4067" Score="0" Text="(cont.) `(legendre(x, k) + legendre(x, k - 1) * eta_k + legendre(x, k + 1) * (1 + eta_k)) * 0.5;` would be clearer. However changing `legendre` to `solutionToLegndreEquation` or `k` to `numberOfCalculationPoits` etc. would not help without looking at the original paper... which used the same notation so changing notation would make things even more confusing. In similar way changing `for (size_t i = 0; i &lt; FOO_SIZE: i++) foo[i] = i;` to `for (size_t indexInFoo = 0; indexInFoo &lt; FOO_SIZE; indexInFoo++) foo[indexInFoo] = indexInFoo;` doesn't help much as virtually everyone uses `i` for index." CreationDate="2017-12-22T22:50:53.223" UserId="673" />
  <row Id="9378" PostId="4067" Score="1" Text="Yes use abbreviation, if they are used in the domain, e.g. physics. OR tv for television, because these are well known, but don't make up new ones." CreationDate="2017-12-23T12:31:33.270" UserId="204" />
  <row Id="9417" PostId="4068" Score="0" Text="Changing the names of objects is a royal pain in any RDBMS.  The normal mechanism is to copy the object contents to a new object with the new name, then delete the old object. This is why data modelers get paid big bucks." CreationDate="2017-12-26T15:20:17.720" UserId="1537" />
  <row Id="9419" PostId="4068" Score="0" Text="@pojo-guy it is only a problem it other objects reference it by name. In a well designed system all objects should be referenced by ID, but the name displayed. However we here are asking about teaching. A system used for teaching an introductory course, may be very different to a system used to store tera-bytes of data, and to serve millions of requests per second." CreationDate="2017-12-26T17:37:16.330" UserId="204" />
  <row Id="9420" PostId="4068" Score="0" Text="While I can agree with the theory of normalization, in real life RDBMS's dont always normalize themselves internally to that extent. Prior to version 10 the RENAME statement was not supported in DB2. In practice, I still run regularly into limits with rename functionality even on the big 3." CreationDate="2017-12-26T18:12:13.337" UserId="1537" />
  <row Id="9496" PostId="4068" Score="0" Text="PostgreSQL and its admin UI pgAdmin can be chosen to teach RDBMS." CreationDate="2018-01-06T16:49:48.203" UserId="3027" />
  <row Id="13052" PostId="4068" Score="0" Text="Good answers here. I'll comment that I worked in a new division of a fortune 500 company that grew from a few million dollars per year to a billion dollars per year on an access database. Access tunes like DB2, and offers clean interactive viewing of the database structures, making it a powerhouse for many applications." CreationDate="2018-06-30T12:00:52.587" UserId="1537" />
  <row Id="9296" PostId="4069" Score="0" Text="Welcome to CSEducators. You should really expand a bit on your answer, explaining a bit about why you believe each is important. Longer and more complete answers are valued over short ones." CreationDate="2017-12-21T17:40:17.570" UserId="1293" />
  <row Id="9297" PostId="4069" Score="0" Text="While I agree that a bigger program might be desirable in general, in the writer's context, the short one, if it better matches the local need is probably better. Especially if old questions to be addressed have approximately that length." CreationDate="2017-12-21T17:42:25.583" UserId="1293" />
  <row Id="9298" PostId="4069" Score="0" Text="Interesting profile you have, also." CreationDate="2017-12-21T17:43:49.740" UserId="1293" />
  <row Id="9299" PostId="4069" Score="0" Text="@Buffy thank you.  I'll add a bit, I really just wanted to comment but I don't have permissions on this site" CreationDate="2017-12-21T17:49:03.423" UserId="3775" />
  <row Id="9300" PostId="4069" Score="0" Text="If you give a better answer, you'll probably earn rep here and the comment ability will flow forth." CreationDate="2017-12-21T17:53:28.353" UserId="1293" />
  <row Id="9301" PostId="4069" Score="0" Text="not worried about it, thanks for your input :)" CreationDate="2017-12-21T17:57:49.587" UserId="3775" />
  <row Id="9323" PostId="4069" Score="0" Text="Using an ide or a specific operating system is well out of scope. Also cmake  and jenkins are  as such very specifc and beyond the need of a short booster course that only intends to give our colleagues  an edge for a specific lecture. I agree with the excurse to maths and electrical engineering, but as already stated, this is just a booster course by students for students. =)" CreationDate="2017-12-22T09:38:29.523" UserId="1868" />
  <row Id="9716" PostId="4069" Score="0" Text="@gismo Linux is appropriate for C. The Universal Operating System is fine. Debian can be considered the rock upon which Ubuntu is built. If you want to pay for UNIX that's fine too and will prepare them for employment. Also, I don't know how the students could complete a 800 line assignment without a specific operating system." CreationDate="2018-01-20T00:35:16.740" UserId="3775" />
  <row Id="9868" PostId="4069" Score="0" Text="@AbdulAhad why would you need a specific operating system to do datamanipulation and file io?" CreationDate="2018-01-26T17:54:06.830" UserId="1868" />
  <row Id="9880" PostId="4069" Score="0" Text="@gismo You don't. It's just my opinion that if you are working with C, you should probably get familiar with Unix/Linux because that is what a lot of employers are using. It's a different story if you are working with C#. It's not that important, but it doesn't take that long to setup and it's a good skill." CreationDate="2018-01-27T22:28:10.080" UserId="3775" />
  <row Id="9304" PostId="4070" Score="1" Text="Welcome to CSEducators. I agree that understanding assertions is an important idea." CreationDate="2017-12-21T19:16:41.317" UserId="1293" />
  <row Id="9307" PostId="4071" Score="0" Text="I was literally typing in almost exactly this question when your question popped up on the feed. Crazy! My question also referenced virtual environments (such as you have when developing an iPhone app) and the console, because these environmental factors are very hard to explain to a kid who has only ever used applications." CreationDate="2017-12-21T19:39:15.927" UserId="27" />
  <row Id="9308" PostId="4071" Score="1" Text="Well that makes more sense.  I just realized that I saw your question yesterday on SO. It must have infiltrated my brain to the point where I thought it was my own question.  :P  In any case, welcome to [cseducators.se]!!" CreationDate="2017-12-21T19:41:10.597" UserId="27" />
  <row Id="9311" PostId="4071" Score="0" Text="A development environment, is an environment that you develop [code] in. An integrated development environment (ide), is a development environment where the tools have been integrated, to produce a seem-less environment. You no longer have to save, compile, run. You can just press run. The can also incorporate linting, unit-test, revision-control, etc all from the editor." CreationDate="2017-12-21T21:23:33.883" UserId="204" />
  <row Id="9358" PostId="4071" Score="0" Text="BTW, now that you have the privileges, feel free to come by [the classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi!" CreationDate="2017-12-22T22:07:48.747" UserId="27" />
  <row Id="14215" PostId="4073" Score="0" Text="Often the students deflected from asking the instructor who was 5 feet away to the student next to them who was 3 feet away. This can become a bigger problem. The issue is to develop better habits and independence, not create blocks and hoops to jump through." CreationDate="2019-01-27T18:04:00.107" UserId="5349" />
  <row Id="9312" PostId="4074" Score="0" Text="Online tutorials. If an IDE does not have decent online tutorials I tend to drop it like a ton of lead." CreationDate="2017-12-21T21:31:53.423" UserId="2516" />
  <row Id="9356" PostId="4074" Score="0" Text="Thanks so much, this is exactly what I was looking for- Buffy, could you also say that there is an interpreter instead of a compiler if it isn't compiled in to machine code?" CreationDate="2017-12-22T21:49:10.770" UserId="3778" />
  <row Id="9357" PostId="4074" Score="0" Text="Yes, certainly. There is very little difference between a compiler and an interpreter, actually. Everything but the back end is the same. The compiler outputs a file and the interpreter executes some intermediate code." CreationDate="2017-12-22T21:53:17.487" UserId="1293" />
  <row Id="9313" PostId="4075" Score="0" Text="Actually, setting up a class forum in which you _don't_ wipe it between years can be even more valuable as the common questions will already be there for the current class to peruse." CreationDate="2017-12-21T21:50:23.043" UserId="1293" />
  <row Id="9314" PostId="4075" Score="0" Text="@Buffy Certainly plausible (that is, afterall, how SO works). I just know that online colleges give classes blank forums to start with." CreationDate="2017-12-21T21:51:52.337" UserId="1244" />
  <row Id="9315" PostId="4075" Score="2" Text="I usually had a class wiki for each course. It lived from year to year. It was also helpful in letting me plan the next iteration as I could find typical problems the students were having. I could edit out things I didn't want to give a hint about prior to the start of the term." CreationDate="2017-12-21T21:54:27.097" UserId="1293" />
  <row Id="9316" PostId="4075" Score="0" Text="@Buffy Neat! I'm not an educator myself, I just pop in here from time to time because I see a question that I can have some input on--usually things that I've either learned on my own *or* have struggled with in the past (e.g. something that was poorly taught to me). e.g. [this answer](https://cseducators.stackexchange.com/a/970/1244) from earlier this year." CreationDate="2017-12-21T21:57:12.917" UserId="1244" />
  <row Id="14214" PostId="4075" Score="0" Text="A forum is great for an online course, but doesn't curtail spurious questions when the instructor is sitting 5 feet away much of the time." CreationDate="2019-01-27T18:01:50.480" UserId="5349" />
  <row Id="9318" PostId="4076" Score="0" Text="Nice observations about pointers." CreationDate="2017-12-21T22:33:55.220" UserId="882" />
  <row Id="9319" PostId="4076" Score="2" Text="@RobertHarvey I almost left it out of the answer, since it's not really a best practice, but I've *never* seen students move from &quot;complete confusion&quot; to &quot;complete understanding&quot; as quickly as I have after giving that explanation, so I decided it was worth mentioning anyway." CreationDate="2017-12-21T22:41:10.020" UserId="827" />
  <row Id="9341" PostId="4076" Score="1" Text="Regarding *explained that a pointer is just an integer that is used to &quot;index memory&quot;*, this can be a double-edged sword. It can lead new C programmers to think they're in on the secret about &quot;how things *really* work&quot;, which is actually oversimplified and wrong, and thereby insist on being allowed to do very wrong/against-best-practices things. Even `ptr+n` becomes confusing for new C programmers when they think that `ptr` *is* an integer rather than *has a representation as an integer*." CreationDate="2017-12-22T19:02:07.243" UserId="1327" />
  <row Id="9344" PostId="4076" Score="1" Text="@R.. Whenever I need to simplify things, I let them know that I'm doing so.  That's the best middle ground I've found between letting them believe that an approximate explanation is precise, and trying (and failing) to explain everything at once.  That said, `ptr` *is* an integer.  It's just not an `int`.  But even `int` is a closer approximation of its type than `&amp;**magic[42]-&gt;&amp;a`, which is frequently how they seem to view it without this explanation, so I'd be fine with them thinking of it along those lines *at first* as long as they understand it's an approximation of how things really are." CreationDate="2017-12-22T19:14:27.003" UserId="827" />
  <row Id="9347" PostId="4076" Score="2" Text="@Ray: The only sense in which it &quot;is&quot; an integer is that the bits of its representation can be interpreted as an integer, which is also true for floating point types, and I wouldn't say that they &quot;are integers&quot;. For C implementations common in the past 2-3 decades with flat linear address spaces, *as an implementation detail* there's also a partial algebraic correspondence between pointers and integers. I say &quot;partial&quot; because many operations that are defined on the int side are not defined on the pointer side. But other implementations are certainly still possible..." CreationDate="2017-12-22T19:31:23.423" UserId="1327" />
  <row Id="9348" PostId="4076" Score="1" Text="...and may gain traction again with interest in memory-safety or with embedding C in nontraditional environments (like in a JS-based web ecosystem via web assembly or similar)." CreationDate="2017-12-22T19:32:12.590" UserId="1327" />
  <row Id="9349" PostId="4076" Score="1" Text="@R.. True enough. I taught this at an introductory level, so that level of detail *remained* covered by the &quot;There are a few details I'm glossing over&quot; disclaimer, whereas the &quot;`ptr+n` actually adds `n * sizeof(*ptr)` bytes issue might have actually been discussed eventually. I *could* have explained that a pointer is defined in terms of the behavior of certain operators when applied to it on the abstract machine, and that the implementation is permitted to use any representation that yields the correct behavior, per the as-if rule, but that would just confuse them worse." CreationDate="2017-12-22T19:47:05.797" UserId="827" />
  <row Id="9362" PostId="4076" Score="0" Text="Pointers may work like mailbox numbers in the language invented by Dennis Ritchie's, but students need tor realize that the langauge favored by &quot;modern&quot; compilers is far less logical, and pointers will only behave like sensibly if certain ill-defined rules are followed.  Note that the rules used by compilers are similar to the ones in the Standard, but compilers sometimes disregard the Standard in cases where following it would disallow optimizations they want to perform, and think the Standard should allow." CreationDate="2017-12-22T23:18:13.363" UserId="2073" />
  <row Id="9363" PostId="4076" Score="0" Text="@R..: Ritchie's Language does offer &quot;secret&quot; insights into how real computers actually work.  It's important that students are aware, however, that some implementation lets people write code for actual machines while others are limited to programming &quot;abstract&quot; machines that impose rules more restrictive than those of actual machines, and which will misbehave in weird and arbitrary fashion if code deviates from those rules (even in cases where the actual machine would have behaved predictably)." CreationDate="2017-12-22T23:31:16.200" UserId="2073" />
  <row Id="9366" PostId="4076" Score="1" Text="@supercat is demonstrating my point very well. :-)" CreationDate="2017-12-23T00:56:31.860" UserId="1327" />
  <row Id="9372" PostId="4076" Score="3" Text="@supercat: If the compiler does (without you giving a flag to tell it to do so) an optimization the standard disallows, that's a bug, and vendors will fix it if reported. However, what is usually going on is that the compiler is simply a better rules lawyer than you, and it turns out the weird thing you wanted to do and convinced yourself is well-defined actually isn't." CreationDate="2017-12-23T09:32:44.040" UserDisplayName="user2681" />
  <row Id="9322" PostId="4077" Score="0" Text="Although very usefull,  the lecturer actually substracts points for each use of of the &quot;goto&quot; statement. but thank you for a clean example how to actually use it." CreationDate="2017-12-22T09:33:37.487" UserId="1868" />
  <row Id="9352" PostId="4077" Score="0" Text="Why not factor out the resource management as a separate function?" CreationDate="2017-12-22T20:54:11.120" UserId="1293" />
  <row Id="9368" PostId="4077" Score="3" Text="@Buffy Because they're local variables, and it writing separate structs and functions to deal with resource management for every combination of such variables does not scale well." CreationDate="2017-12-23T01:24:58.703" UserId="2828" />
  <row Id="9369" PostId="4077" Score="0" Text="Nor does repeating code every time a given combination recurs. Especially if things change and you have to revisit every instance. Abstraction is your friend." CreationDate="2017-12-23T01:38:59.830" UserId="1293" />
  <row Id="9370" PostId="4077" Score="0" Text="@Buffy If you find yourself using the same combination of resource allocations frequently, yes, clearly you should abstract some of that away.  That won't be true all the time." CreationDate="2017-12-23T04:03:42.600" UserId="2828" />
  <row Id="9371" PostId="4077" Score="1" Text="@Buffy Additionally, even if the resources could be freed by a single function, I would still advocate using `goto`.  It's still easier to maintain; if you need to change the signature or semantics of you resource deallocation function, you'd won't need to revisit every exit point.  Also, doing `goto exit;` at each exit point is simpler than `FreeMyResources(...); return NULL;` if you need to return something." CreationDate="2017-12-23T07:28:32.353" UserId="2828" />
  <row Id="9374" PostId="4077" Score="0" Text="That's one of the two acceptable uses of `goto` (the other being breaking from two loops at once or jumping out of a loop when you found what you're looking for). I'm still not sure if I would bring that up in an introductory programming course, before they've learned the more important control structures (just imagine the result when a student forgot about `while`, but remembered `goto`.)" CreationDate="2017-12-23T09:58:27.117" UserId="3793" />
  <row Id="9375" PostId="4077" Score="0" Text="In any case, you could make more than one distinct `exit` label there so that each one just does the necessary cleanup, implicitly falling to the next one in order, e.g. `exit3: fclose(); exit2: free(); exit1: return`." CreationDate="2017-12-23T10:00:14.947" UserId="3793" />
  <row Id="16680" PostId="4077" Score="0" Text="I disagree. `goto` should not be used in C /C++ and similar language. It should be used in assembly where no other looping or branching technique does not exist. One simple `goto` could ruin the readability of the whole program. Your code is just for a simple program. What if when they would write hundreds of lines of code? This is my personal opinion. Thanks." CreationDate="2020-07-03T17:29:07.393" UserId="9279" />
  <row Id="16681" PostId="4077" Score="0" Text="@EnamulHassan 1. There are *many* things (particularly in C) that can ruin code readability. Heaven forbid that people are taught how to use `goto` *responsibly* to keep code readable! 2. I agree that structured alternatives should be used instead of `goto` *when available* (e.g. `for`, `while`). That's Dijkstra's paper. However, the fact remains that C *lacks* error handling or resource management constructs, making `goto` the only sane solution for a large codebase. (Note that C is *not* C++. I would not recommend `goto` for C++ since C++ does have a resource management construct: RAII.)" CreationDate="2020-07-03T17:56:47.953" UserId="2828" />
  <row Id="16682" PostId="4077" Score="0" Text="3. `goto` for resource management is *especially* important for large, complex programs.  For a *simple* program, releasing resources manually at each exit point is less of a problem.  For a *large* program, resource management is an even bigger problem, and using `goto` is far less error-prone." CreationDate="2020-07-03T17:57:47.227" UserId="2828" />
  <row Id="9354" PostId="4078" Score="1" Text="I agree that something non-proprietary such as SQL is a better thing to introduce to students. It will be more general and gives you a better base for teaching principles." CreationDate="2017-12-22T21:15:25.753" UserId="1293" />
  <row Id="9339" PostId="4079" Score="0" Text="Though it is still missing some sourcing, I'm tempted to accept this answer.  I've observed that you write consistently helpful content." CreationDate="2017-12-22T18:15:04.363" UserId="27" />
  <row Id="9367" PostId="4079" Score="0" Text="Common sense would seem to indicate the same thing. More common sense would indicate having the order of questions track the order of material as presented in the course, since students are likely to orient their thoughts that way. But the easy -&gt; hard rule is important so that students don't spend their time on hard problems at the start, missing easy points if they run out of time. Another independent idea is to suggest (strongly) that students read the entire exam before attempting any answers. There are multiple reasons for this, including letting the brain work in the background." CreationDate="2017-12-23T01:15:17.937" UserId="1293" />
  <row Id="9332" PostId="4081" Score="0" Text="Welcome to CSEducators. A somewhat different perspective, but a dose of reality. Thanks." CreationDate="2017-12-22T12:28:47.103" UserId="1293" />
  <row Id="9333" PostId="4081" Score="0" Text="Sadly, enrollments are so high at this moment (late 2017) that many departments are, indeed, trying to winnow the students. I don't know if that is the situation here, but it has been discussed elsewhere. This happens every few years, actually, and is often followed by a drought. The fact that many of the topics discussed in this thread were omitted from the course in question may be an indicator that this is the case, actually." CreationDate="2017-12-22T12:31:47.370" UserId="1293" />
  <row Id="9334" PostId="4081" Score="2" Text="Thank you, for making clear what i did know deep down, but didnt really consciously knew. If nothing better pops up in the next few days, youll get the accepted answer." CreationDate="2017-12-22T13:32:37.630" UserId="1868" />
  <row Id="9389" PostId="4082" Score="0" Text="When I think `Interface` I always think of it as the primary way to avoid the [multiple inheritance](https://en.wikipedia.org/wiki/Multiple_inheritance) problem. See also [Multiple Inheritance in Java](https://www.journaldev.com/1775/multiple-inheritance-in-java)" CreationDate="2017-12-24T15:25:45.887" UserId="2516" />
  <row Id="9379" PostId="4083" Score="2" Text="I would not expect a student to be able to implement an interface, before they have done classes, and inheritance. But they should be able to inherit an interface that you have made, and implement it. It would also be better to have a full interface (that is one with contracts). This way the student knows what to implement." CreationDate="2017-12-23T12:37:20.247" UserId="204" />
  <row Id="9390" PostId="4083" Score="0" Text="I like that you think in abstract first before coding, but I am surprised that you did not mention use of a different [paradigm](https://en.wikipedia.org/wiki/Programming_paradigm) when programming, e.g. functional or logic. I personally prefer logic, e.g. Prolog or Mercury, or other more abstract means of computation. The problem is that to much of the world is done with the old technology and sometimes using that for their exiting libraries outweighs the value in using another paradigm, e.g. [NumPy](http://www.numpy.org/)" CreationDate="2017-12-24T15:41:07.763" UserId="2516" />
  <row Id="10000" PostId="4083" Score="0" Text="While interfaces are generally developed before the implementing class; that doesn't mean you have to teach in in the same order. Interfaces are built with a consideration to the future (the implementation), which means the student needs to know what implementation entails. Interfaces are the solution to a problem, and therefore you must first showcase the problem to justify using the interface as a solution." CreationDate="2018-02-02T15:06:00.533" UserId="2164" />
  <row Id="10001" PostId="4083" Score="0" Text="True enough, but interfaces are also good in the thinking stage of problem solving when you are deciding what it is you need. They are like a rough sketch of the capabilities needed." CreationDate="2018-02-02T15:29:08.257" UserId="1293" />
  <row Id="10042" PostId="4083" Score="0" Text="I agree with @Buffy here, but I would add that the **idea** of 'Interfaces' be _**introduced**_ first as opposed to being necessarily _**taught**_ in  any order. It is very important for OO students to focus on the _behaviors_ of objects.  You are not required to actually use the terms when you teach the topics. ;)" CreationDate="2018-02-08T16:41:38.093" UserId="3840" />
  <row Id="9441" PostId="4086" Score="0" Text="This answer is excellent, and tells me that you probably have quite a bit to contribute to this site (and I hope that you do!)  Did the highly regularized style specifications make it more difficult to detect cheating?" CreationDate="2017-12-29T04:20:23.383" UserId="27" />
  <row Id="9380" PostId="4087" Score="0" Text="If your students are HS males, I'd guess they love the name you give the forms." CreationDate="2017-12-23T14:25:43.683" UserId="1293" />
  <row Id="9381" PostId="4087" Score="3" Text="You are, in effect, creating capital investment that improves your instruction (permanently) over time.  The fact that it's a fast enough process that you can see the results in almost real-time should be celebrated.  There is no way to prevent this kind of inequity; this is the natural result of you learning to teach a lesson better." CreationDate="2017-12-23T19:52:56.713" UserId="27" />
  <row Id="9382" PostId="4091" Score="0" Text="The one problem that remains, is the selfish one. The lessons get very out of sync. Any advice on that." CreationDate="2017-12-24T00:48:57.633" UserId="204" />
  <row Id="9391" PostId="4091" Score="0" Text="@ctrl-alt-delor I wish that I did." CreationDate="2017-12-24T16:52:59.257" UserId="27" />
  <row Id="9393" PostId="4091" Score="0" Text="I hope as I do this more, that I get better at getting it correct first time." CreationDate="2017-12-24T18:58:19.617" UserId="204" />
  <row Id="9386" PostId="4092" Score="0" Text="Actually, it seems to have understanding programs (first &amp; second rows) prior to creation of programs (third row). I don't think it implies that there are no variables in the programs to be understood. Especially if variables at that level are just presented as references to values. A complete understanding of variables (as things that can be changed) is necessary for the goals of the first two rows. You are probably reading too much into it." CreationDate="2017-12-24T14:25:56.930" UserId="1293" />
  <row Id="9387" PostId="4092" Score="0" Text="OTOH, in an OO world or a Pure Functional world, yes you can, but I don't think that is the intent of the curriculum here." CreationDate="2017-12-24T14:27:58.537" UserId="1293" />
  <row Id="9394" PostId="4092" Score="0" Text="This question is related but different https://cseducators.stackexchange.com/q/1482/204" CreationDate="2017-12-24T19:02:50.263" UserId="204" />
  <row Id="9402" PostId="4092" Score="0" Text="If it is raining and it’s a weekday, Mary goes to the store. It is raining and it’s Saturday. Does Mary go to the store? We can teach selection in spoken language before we convert to if else in code. You could argue either way for the presence of variables in this sense." CreationDate="2017-12-25T01:55:42.283" UserId="2122" />
  <row Id="9403" PostId="4092" Score="0" Text="As a side note: Would it be possible for you to share the dependency graph with us once you've created it (maybe as a self-answer)? I am really interested in seeing it. Thank you in advance :)" CreationDate="2017-12-25T10:39:38.370" UserId="793" />
  <row Id="9408" PostId="4092" Score="0" Text="Too short for an answer ... Yes. Programming languages that don't have variables still have conditional branching." CreationDate="2017-12-26T03:11:46.297" UserId="1537" />
  <row Id="9410" PostId="4092" Score="0" Text="@pojo-guy with example that could be an answer." CreationDate="2017-12-26T09:40:02.370" UserId="204" />
  <row Id="9411" PostId="4092" Score="1" Text="@TuringTux yes, It will be in a public repository. And I will try to remember to put it here. Hope I get time to work on it." CreationDate="2017-12-26T09:41:10.070" UserId="204" />
  <row Id="9395" PostId="4094" Score="1" Text="Spiraling is the logical combination of *how every expert ever learned their topics* with *good, common sense*.  I have no idea why more curricula aren't written this way.  When I taught vocal music, I so intensively spiraled my curriculum that it became next to impossible to write formal lesson plans in the format required by my district.  I got in trouble for it a number of times, but I still believe strongly that it was a better approach for the students, who thrived." CreationDate="2017-12-24T20:17:27.150" UserId="27" />
  <row Id="9396" PostId="4094" Score="0" Text="For New Yorkers, a common question is &quot;How do you get to Carnegie Hall?&quot;" CreationDate="2017-12-24T20:19:59.410" UserId="1293" />
  <row Id="9397" PostId="4094" Score="0" Text="And the answer...." CreationDate="2017-12-24T20:20:14.240" UserId="1293" />
  <row Id="9398" PostId="4094" Score="0" Text="Practice, practice, practice." CreationDate="2017-12-24T20:20:45.327" UserId="1293" />
  <row Id="13077" PostId="4095" Score="0" Text="Use MySQL, but with MariaDB, which is plug-compatible and avoids Oracle.  Start with a canned database with two or three tables and at least one associative entity.  Start them with queries, then add deletes and updates.  Provide an easy way to restore the original database because, even with the &quot;no training wheels&quot; lecture, some will DELETE *." CreationDate="2018-07-11T00:54:00.047" UserId="3524" />
  <row Id="9404" PostId="4096" Score="0" Text="That brought me down a fruitful little rabbit hole." CreationDate="2017-12-25T18:11:41.200" UserId="27" />
  <row Id="9405" PostId="4096" Score="0" Text="I'm pretty sure that Jeroo, like Karel from which it evolved, is Turing Complete." CreationDate="2017-12-25T20:58:44.867" UserId="1293" />
  <row Id="9412" PostId="4096" Score="0" Text="Have you any idea what the licence is? There is not mention on their website, or anywhere else that I can see." CreationDate="2017-12-26T10:35:05.090" UserId="204" />
  <row Id="9414" PostId="4096" Score="0" Text="Not sure on the license. Never thought to look." CreationDate="2017-12-26T13:45:57.333" UserId="30" />
  <row Id="9406" PostId="4097" Score="0" Text="Nice answer! Thank you for sharing your expieriance. +1" CreationDate="2017-12-26T02:22:13.963" UserId="58" />
  <row Id="9409" PostId="4097" Score="1" Text="Interesting, but not educationally focused. I don't care if it scales beyond one query per second. It rely does not matter. I care about how well it is suited to teaching. MS-Access, has too many gotchas. You do one little thing wrong, and it will punish you, and it will get in your way of fixing it." CreationDate="2017-12-26T09:37:57.427" UserId="204" />
  <row Id="9413" PostId="4097" Score="0" Text="Enterprise computing is about much more than speed.  ACID compliance,  standards compliance,  and stability under load are other factors that come into play." CreationDate="2017-12-26T12:36:36.987" UserId="1537" />
  <row Id="9421" PostId="4099" Score="0" Text="Welcome to [cseducators.se]! You might be interested in looking at some other questions in [tag:block-based-programming]. They cover some of the advantages and disadvantages of teaching block based programming. Also, are you asking about App Inventor specifically, or block coding generally?" CreationDate="2017-12-27T00:57:08.937" UserId="58" />
  <row Id="9422" PostId="4099" Score="0" Text="What is the age and grade level you will be teaching?" CreationDate="2017-12-27T01:24:58.280" UserId="2516" />
  <row Id="9423" PostId="4099" Score="0" Text="Thanks for the link. I'm asking about App Inventor specifically. The audience would be elementary-school and some middle school students (3rd - 7th grade)." CreationDate="2017-12-27T05:19:04.497" UserId="3809" />
  <row Id="9424" PostId="4100" Score="0" Text="I don't understand. I nee no selection, or variables in the example." CreationDate="2017-12-27T15:29:23.950" UserId="204" />
  <row Id="9425" PostId="4100" Score="0" Text="Those are procedures, not functions. And constant variables are (real) variables. Valuables can be mutating or non-mutating (const). In a functional language, all variables are non-mutating. variable ≠ mutating." CreationDate="2017-12-27T15:31:20.673" UserId="204" />
  <row Id="9426" PostId="4100" Score="0" Text="I would be curious to see a Processing example that uses `if` statements without variables, but `mouseX` and `mouseY` are variables." CreationDate="2017-12-27T17:17:24.930" UserId="2068" />
  <row Id="9427" PostId="4100" Score="0" Text="@ctrl-alt-delor in the Processing documentations, methods are often referred as 'functions&quot;. Example https://processing.org/reference/parentheses.html &quot;Parentheses have multiple functions relating to functions and structures. They are used to contain a list of parameters passed to functions and control structures" CreationDate="2017-12-27T20:23:36.937" UserId="2103" />
  <row Id="9442" PostId="4100" Score="0" Text="The program you give is impossible to understand, with out a global understanding, and that is missing. This is primarily because of a poor choice of names (yours or the frameworks). E.g. `size` is a noun, so we would expect it to return a value, but it does not. I guess it sets the size (`setSize`). `second` is a noun so should return a second object (what ever that is), but seems to return a number, so maybe it is the second number, but of what. I see no list. For this reason it is not useful. Therefore I will down-vote." CreationDate="2017-12-29T10:27:05.307" UserId="204" />
  <row Id="9444" PostId="4100" Score="0" Text="I think you are being overly critical here of someone trying to help. The example seems fairly reasonable if you just assume there is a preexisting framework in which the students program. You are being a bit nit-picky on names, and while I agree with the noun-verb concept, not everyone adheres to it so it is unreasonable to expect perfection here." CreationDate="2017-12-29T12:10:57.993" UserId="1293" />
  <row Id="9445" PostId="4100" Score="0" Text="@ctrl-alt-delor understanding a program requires the student a minimum listening to some explanations.  The names are the framework's , except `draw_square()` for which I take full responsability and your down vote for irremediable nebulousness. &#xA;&quot;list&quot; ? Are you talking about citation of the processing documentation? It explains that parentheses contain a list of parameters, as in `size(600,400)` or `background(255) ` or `second()`. &#xA;But these considerations are quite out of topic to the question of @KevinWorkman : use of `if` in a program without variables." CreationDate="2017-12-29T12:19:47.530" UserId="2103" />
  <row Id="9446" PostId="4100" Score="0" Text="@buffy no assumption  needed, as the use of the Processing framework was explicitly mentioned. We all have bad hair days." CreationDate="2017-12-29T12:28:12.647" UserId="2103" />
  <row Id="9447" PostId="4100" Score="0" Text="It might be good to discuss this in the classroom: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2017-12-29T12:36:41.183" UserId="1293" />
  <row Id="9448" PostId="4100" Score="0" Text="If some explanation was given, especially around `second()` (as this seems to be the important bit. And does it need an `else` so that `draw` always draws. If you make it clearer, then I could change it to an upvote." CreationDate="2017-12-29T15:32:38.070" UserId="204" />
  <row Id="9430" PostId="4104" Score="3" Text="As a note, I don't know that the driver-navigator scheme will combat freeloading all that much. I've had friends was were freeloader and I hated doing this style of work with any of them. When I was navigating, they would control the computer without any understanding what I was asking them to do. When I was driving, they'd just tell me they didn't know what to do; we had to either not progress, or have me do both roles. This was the case for other similarly paired students as well." CreationDate="2017-12-28T17:22:19.657" UserId="1578" />
  <row Id="9431" PostId="4104" Score="3" Text="Did you consider asking your students to develop [free software](https://en.wikipedia.org/wiki/Free_software) as their school project, and then to use some *existing* forge like e.g. [github](http://github.com/) ? I assume that your students are somehow learning to program." CreationDate="2017-12-28T18:25:39.537" UserId="3822" />
  <row Id="9433" PostId="4105" Score="0" Text="another option would be any sync tool - maybe your institution offers their own cloud, where you could manage who has access to which files. Or maybe even use git where you own the repositories" CreationDate="2017-12-28T19:26:15.523" UserId="937" />
  <row Id="9449" PostId="4105" Score="0" Text="You could create a new Runestone Interactive Component, [examples](https://runestone.academy/runestone/static/overview/overview.html), [source](https://github.com/RunestoneInteractive/RunestoneComponents)" CreationDate="2017-12-29T15:50:52.927" UserId="2516" />
  <row Id="9428" PostId="4106" Score="0" Text="I am not considering just pair programming, but all activities, that use a computer. I would like pupils to do all work in pairs, and for me to be able to rearrange pairings (may be at the start of a lesson). I have never considered using a  clock to determine when to switch role, and agree it would be a bad thing to do. You have some good ideas about when to switch. While there is useful stuff in your answer, I don't think it addresses the question." CreationDate="2017-12-28T13:11:35.213" UserId="204" />
  <row Id="9429" PostId="4106" Score="0" Text="I added a bit at the end, but you might also modify the question a bit to emphasize what you've said above: all work, not just programming." CreationDate="2017-12-28T14:13:10.870" UserId="1293" />
  <row Id="9432" PostId="4107" Score="1" Text="They have there own account on a file server. So they can work anywhere, but can not share." CreationDate="2017-12-28T18:32:58.197" UserId="204" />
  <row Id="9434" PostId="4107" Score="1" Text="@ctrl-alt-delor - An account per-pair, or an account per-user?  I'm really more recommending the latter, and using an actual VCS just enables some additional helpful features." CreationDate="2017-12-28T19:30:49.377" UserId="3821" />
  <row Id="9435" PostId="4107" Score="3" Text="Welcome to CSEducators. Hope to hear more from you in the future." CreationDate="2017-12-28T20:31:35.583" UserId="1293" />
  <row Id="15693" PostId="4107" Score="0" Text="@ctrl-alt-delor: The straightforward answer (that minimizes reworking your infrastructure) is then for them to have a folder where they both have access. Whether you create one big folder where everyone has access and pairs are expected to stick to their folder, or whether you create actual folders with specific rights for each pair, is a matter of implementation and what your admins are willing to put up with." CreationDate="2019-10-13T23:09:12.707" UserId="2164" />
  <row Id="9436" PostId="4109" Score="2" Text="Welcome to CSEducators. Thanks for your comment and we hope to hear more from you in the future." CreationDate="2017-12-28T20:32:57.670" UserId="1293" />
  <row Id="9438" PostId="4110" Score="0" Text="Do you have any idea how that network is setup, and if so could you describe it so that someone else reading this answer could replicate it?" CreationDate="2017-12-28T21:15:54.100" UserId="58" />
  <row Id="9439" PostId="4110" Score="0" Text="Not sure. It's something they've done specifically for the CompSci classes and only works in our labs." CreationDate="2017-12-28T21:22:54.777" UserId="30" />
  <row Id="9677" PostId="4111" Score="1" Text="Similar situation.  Was taking a hardware interfacing course. The µC we were using (68HC12) had to be programmed in assembly.  68HC12 assembly is similar to 6502 assembly; learned 6502 assembly over a decade prior.  My lab partner was a EE major; he knocked out the hardware parts and I knocked out the software parts (faster than other teams; excellent grades). If you looked only at software, you'd think he was a freeloader. Knowing we would be working separate on the final exam, we knocked out each assignment then switched roles and did it again to ensure each of us could do each role." CreationDate="2018-01-15T19:24:35.710" UserId="948" />
  <row Id="9451" PostId="4112" Score="0" Text="So is the dependency (variables or functional)?" CreationDate="2017-12-30T13:17:58.807" UserId="204" />
  <row Id="9455" PostId="4113" Score="2" Text="Even if the differences were trivial - and they aren't - you still have a different tool set, tool chain, debugging methods. And the library ecosystem is different as well.  You won't have issues wtih basic programming concepts - loops, condition checks, data types etc but there is so much more to deal with." CreationDate="2017-12-31T05:28:18.980" UserId="662" />
  <row Id="9463" PostId="4113" Score="0" Text="`C++`, has multiple inheritance. Few modern languages have this, even fewer do it properly (Eiffel being an exception). Take some inheritance structure, that can also be comparable. Implement it, so that you implement each of `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `=`, `!=`. You can implement them all in terms or `&lt;` in the base class, then the inherited class only has to implement `&lt;`. No `compare(a:T, b:T): int{-1,0,1}`. Note multiple inheritance is safe, but repeated inheritance is not, and must be handled correctly." CreationDate="2018-01-01T16:18:33.103" UserId="204" />
  <row Id="9452" PostId="4114" Score="2" Text="&quot;the similarities between C++ and Java are fairly shallow and the differences are very deep.&quot; Thanks for saying that so eloquently." CreationDate="2017-12-31T00:32:08.157" UserId="2516" />
  <row Id="9453" PostId="4114" Score="0" Text="&quot;Your own experience with C++ seems shallow from the statement of your question.&quot; Thumbs up." CreationDate="2017-12-31T00:34:50.057" UserId="2516" />
  <row Id="9454" PostId="4114" Score="0" Text="I feel like I learned a tremendous amount from this answer.  I would have mentioned garbage collection and pointer referencing/referencing, but my knowledge of C++ is also fairly shallow.  This is a much deeper answer." CreationDate="2017-12-31T05:19:00.323" UserId="27" />
  <row Id="9456" PostId="4114" Score="0" Text="I'd stay clear from saying things like &quot;your experience seems shallow&quot;. It can be quite offensive." CreationDate="2017-12-31T07:26:14.760" UserId="150" />
  <row Id="9457" PostId="4114" Score="0" Text="Thanks for the informative answer. I understand that C++ features &quot;guns knives and clubs&quot; that make it much more difficult to master. To teach this I need projects that actually require the use of such features... while there are endless ideas for software projects,  many of them can be built using only the standard c++ libraries that handle all memory issues for you. What are some examples of projects that do require the sophisticated manual memory management of c++?" CreationDate="2017-12-31T09:24:54.397" UserId="1873" />
  <row Id="9459" PostId="4114" Score="1" Text="The easy way for you to come up with a project to practice on yourself is to take one of the more sophisticated Java course projects and re-do it in C++. But try to do it with C++ idioms, rather than Java idioms." CreationDate="2018-01-01T00:21:16.710" UserId="1293" />
  <row Id="9458" PostId="4115" Score="1" Text="&quot;that checks at compile time, that your types are dimensionality correct&quot; F# has this. See: [Units of Measure](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure) and [Are units of measurement unique to F#?](https://stackoverflow.com/q/107243/1243762)" CreationDate="2017-12-31T13:47:29.590" UserId="2516" />
  <row Id="9460" PostId="4115" Score="0" Text="@GuyCoder and that question links to an article that mentions several others, as do some of the answers (though not all statically checked)." CreationDate="2018-01-01T10:02:28.550" UserId="204" />
  <row Id="9481" PostId="4122" Score="0" Text="Are you trying to teach all of those patterns in one 10-20 minute lesson?" CreationDate="2018-01-05T20:33:02.393" UserId="177" />
  <row Id="9483" PostId="4122" Score="0" Text="Though the gang of four book was the book that introduced patterns to programmers it has little else going for it. It was inspired by Christopher Alexander book of about 250 patterns. Alexander said that this was just a few of the many patterns, G.O.F. said that their ≈20 was all that there is (even though they described MVC, but did not identify it as a pattern. Since this time many other patterns have been described in other books plop is one source of patterns." CreationDate="2018-01-06T11:04:31.317" UserId="204" />
  <row Id="10089" PostId="4122" Score="1" Text="**A word of warning:** we are currently graduating students who believe that Design Patterns are the elixir of software development, that they're the secret key to writing a program without having to think.  You don't build good software by stitching together a catalog of well-known software patterns; you build good software by writing code that solves problems. In the meantime, you learn software patterns, and their pros and cons, so that you can apply them where they are appropriate.  See also http://the-whiteboard.github.io/2016/09/02/patterns.html" CreationDate="2018-02-15T00:04:06.193" UserId="882" />
  <row Id="10090" PostId="4122" Score="0" Text="We are also graduating students who are obsessed with vocabulary (i.e. using &quot;fancy words&quot; without understanding the underlying concepts) and doing things the &quot;right&quot; way (as if there were such a thing), but that's a rant for another day." CreationDate="2018-02-15T00:22:39.573" UserId="882" />
  <row Id="9467" PostId="4123" Score="1" Text="Welcome to CSEducators. We hope to see more such contributions in the future." CreationDate="2018-01-04T17:46:00.427" UserId="1293" />
  <row Id="9468" PostId="4124" Score="0" Text="Yea to _Pedagogical Patterns_. If you're going to teach patterns, it sure don't hurt to use them. Forces you to &quot;_Put your money where your mouth is._&quot; :)" CreationDate="2018-01-04T17:59:30.157" UserId="104" />
  <row Id="9472" PostId="4124" Score="2" Text="One thing to consider is that many (not all) patterns are established workarounds for weaknesses in the platform of choice. As such they may be language or environment specific." CreationDate="2018-01-05T05:24:26.187" UserId="1537" />
  <row Id="9474" PostId="4124" Score="1" Text="It's a bit more subtle than that. The _solution_ in a pattern is driven by its _context_ and the prevailing _forces_. It is generally a mistake to try to apply a solution blindly. That is why patterns are written like they are. Most of the classic patterns arose in a C++ or Java sort of world. As such they may not be meaningful if you use Scheme, where different patterns would apply. Pattern writers spend a lot of time expounding on the forces, in particular, and those explain why the solution is correct _in the given context_. A pattern is much more than a problem-solution pair." CreationDate="2018-01-05T11:15:30.183" UserId="1293" />
  <row Id="9480" PostId="4124" Score="0" Text="@Buffy I wish I could give you a hundred upvotes for that last comment" CreationDate="2018-01-05T17:45:19.163" UserId="1537" />
  <row Id="9484" PostId="4124" Score="0" Text="Yes GOF focused on the solutions, but the solutions are not the patterns. “You want the computer to do something many times, but if you tell the computer many times, then it takes a long time to type, and is difficult to change (as you have to make the change in many places). Therefore tell the computer once, and tell it how many times to do it. — use for-loop or repeat-x-times” That is a pattern." CreationDate="2018-01-06T11:10:20.687" UserId="204" />
  <row Id="9469" PostId="4126" Score="0" Text="You can show them the more advanced examples without expecting them to reproduce them on a test. That way you open the door for interested students but don't overwhelm everybody else." CreationDate="2018-01-04T21:09:19.947" UserId="2068" />
  <row Id="9471" PostId="4126" Score="0" Text="@KevinWorkman That's a good solution, but I still don't know where to draw the line. Also, I'm not sure if I'm missing other (more important) examples." CreationDate="2018-01-04T21:28:17.053" UserId="27" />
  <row Id="9476" PostId="4126" Score="0" Text="@BenI : when n is a power of 2, bit-masking does the trick at very low cost. But the consideration is more relevant for low-level programming languages (buffer management in a micro-controller) than for every-day programming in java." CreationDate="2018-01-05T11:17:40.137" UserId="2103" />
  <row Id="9477" PostId="4126" Score="0" Text="@BenI : music may be an interesting example.  What is the note when your finger is on the 8th fret of the G string ? [mod 12]" CreationDate="2018-01-05T11:23:29.240" UserId="2103" />
  <row Id="9493" PostId="4126" Score="1" Text="To save time, you could use a clock. Ignore the computer, and show that 5min - 10min = 55min. Then show how this can be useful. We can not distinguish between 55 and -5 (5 to), but we can at least have negative numbers." CreationDate="2018-01-06T16:29:02.683" UserId="204" />
  <row Id="9541" PostId="4126" Score="0" Text="&quot;*early enough along in the curriculum that they still focus on programming*&quot; seems to presuppose a linear curriculum structure of (a) programming; (b) other areas of CS as they relate to programming; (c) other areas of CS in their own right. Is that an intended implication? Why should elementary number theory not be taught before programming?" CreationDate="2018-01-10T17:21:21.173" UserId="1219" />
  <row Id="9542" PostId="4126" Score="0" Text="@PeterTaylor You are speaking in hypotheticals, and you are not wrong, but in practice I have never encountered (or even heard of) any program that goes in any order other than your a -&gt; b -&gt; c." CreationDate="2018-01-10T17:25:43.573" UserId="27" />
  <row Id="9573" PostId="4126" Score="0" Text="@BenI., the course I studied had number theory in parallel with an introduction to Java, and although I can't remember the exact lecture-by-lecture sequencing it's possible that modular arithmetic had been introduced in the number theory course before numeric operators in the Java course." CreationDate="2018-01-11T08:51:51.217" UserId="1219" />
  <row Id="9485" PostId="4129" Score="0" Text="I learned a lot of programming from my homework for other subjects.  In high school,  it was physics and social studies problems. In university, it was digitizing video and computing center of mass and energy transfer for athletes performing various activities" CreationDate="2018-01-06T15:53:23.790" UserId="1537" />
  <row Id="9497" PostId="4130" Score="0" Text="The question is a bit outside our scope, but answers might be useful to other visitors here. Your English is fine, by the way." CreationDate="2018-01-06T17:23:39.193" UserId="1293" />
  <row Id="9498" PostId="4130" Score="1" Text="And welcome to CSEducators Forum. There is a lot here that you can use to further your studies in CS." CreationDate="2018-01-06T17:45:44.277" UserId="1293" />
  <row Id="9502" PostId="4135" Score="3" Text="Welcome to CSEducators. While your link is probably helpful, can you say some more about what can be found there and why you think it will be helpful. We value longer answers more than such short ones, so that visitors can learn more before navigating away. Short answers are more likely to be ignored, but thanks for contributing." CreationDate="2018-01-08T00:57:48.430" UserId="1293" />
  <row Id="9503" PostId="4139" Score="0" Text="Hello! Welcome to [cseducators.se]! Thank you for sharing your thoughts here. To me, this doesn't really answer the question, which asks for &quot;problems and exercises.&quot; Can you please edit to try to better address the question?" CreationDate="2018-01-08T17:24:58.260" UserId="58" />
  <row Id="9504" PostId="4139" Score="0" Text="I'm also not sure how this answers the question.  Can you edit the answer to clarify this a little?  The downvotes will be removed if the link is clear." CreationDate="2018-01-08T17:56:55.773" UserId="27" />
  <row Id="9505" PostId="4139" Score="3" Text="This view of programming seems too narrow. It is relevant, at most, to programming in languages &quot;close&quot; to machine code. It would be harmful to those learning Scheme or Haskell, for example. Students can learn to think from the start at a higher level than &quot;boxes with numbers&quot;." CreationDate="2018-01-08T18:11:08.710" UserId="1293" />
  <row Id="9506" PostId="4139" Score="0" Text="Oh, also --! I hope you won't be deceived by first appearances; we're actually quite a warm community.  I hope that we will hear much more from you, and welcome to [cseducators.se]." CreationDate="2018-01-08T21:33:06.863" UserId="27" />
  <row Id="9517" PostId="4143" Score="91" Text="This [stack exchange question](https://cseducators.stackexchange.com/q/4143/2311) is quite motivating." CreationDate="2018-01-10T11:10:36.803" UserId="2311" />
  <row Id="9536" PostId="4143" Score="0" Text="Possible duplicate of [Analogy for teaching recursion](https://cseducators.stackexchange.com/questions/17/analogy-for-teaching-recursion)" CreationDate="2018-01-10T16:17:42.003" UserId="3812" />
  <row Id="9609" PostId="4143" Score="1" Text="Please do not attempt to answer the question in the comments. Answers in the comment section break mechanisms that are vital to how SE works such as voting, editing, and accepting. In addition, comments are meant not to be permanent. Please do not engage in extended discussion in the comments, comments are meant for requests for clarification or suggested improvements to the question. This conversation has been [moved to chat](http://chat.stackexchange.com/rooms/71597/discussion-on-question-by-ben-i-what-are-good-examples-that-actually-motivate-t)." CreationDate="2018-01-12T18:17:56.480" UserId="58" />
  <row Id="9623" PostId="4143" Score="0" Text="Mergesort is one algorithm that's very easy to understand recursively, but a bit harder to get if you do it iteratively." CreationDate="2018-01-13T10:58:48.267" UserId="3745" />
  <row Id="9635" PostId="4143" Score="2" Text="@Pureferret I was expecting that to link to StackOverflow... you trolled me!" CreationDate="2018-01-14T01:25:13.213" UserId="719" />
  <row Id="9637" PostId="4143" Score="1" Text="How to motivate them?  &quot;If you don't study recursion, you're going to fail the test on recursion and also do bad on the parts of the semester exam that are on recursion.&quot;" CreationDate="2018-01-14T07:29:16.637" UserId="3132" />
  <row Id="9663" PostId="4143" Score="11" Text="@RonJohn This is the worst teaching approach ever." CreationDate="2018-01-15T13:49:49.807" UserId="602" />
  <row Id="9664" PostId="4143" Score="1" Text="@m93a Some people are motivated by fear of failure." CreationDate="2018-01-15T14:00:02.233" UserId="3132" />
  <row Id="9665" PostId="4143" Score="8" Text="@RonJohn Yes, fear motivates some, but this kind of motivation will never make them like or enjoy the subject. Good programmers are creative and think for themselves – obeying your rules will never teach them the skill of problem-solving, which is crucial. Furthemore, the point of teaching is preparing students for real-life problems. By not showing scenarios where recursion is beneficial, you would teach them nothing, as they wouldn't recognise recursion as a good tool." CreationDate="2018-01-15T14:15:22.953" UserId="602" />
  <row Id="9667" PostId="4143" Score="0" Text="@m93a the question was about *motivation*.  A teacher can say, &quot;here are important real world examples&quot; until he's blue in the face, but **that's not motivation**.  Recursion was interesting *to me* as a student because some algorithms were &quot;cleaner&quot; to implement that way.  Of course I also thought, &quot;this is all academic, since it'll just blow the stack when the problem gets realistically big.&quot;  So... &quot;wanting to keep my grades up&quot; is why I **really** learned recursion, and have *rarely* used it since." CreationDate="2018-01-15T14:30:54.397" UserId="3132" />
  <row Id="9708" PostId="4143" Score="1" Text="Love is a better motivator than fear." CreationDate="2018-01-19T15:59:36.507" UserId="1074" />
  <row Id="10597" PostId="4143" Score="0" Text="How about introducing everything through the lens of recursion? Addition of 'n' numbers for example? What's the point? Take a detour into Fibonnaci and show how the &quot;recurrence relation&quot; led to a closed form solution - perhaps they can come up with one for something simple too? The NO recursion and NO iteration and some points bonus? Also a good seguey would be showing how recursiveness and &quot;computability&quot; are sort of connected and why was it &quot;natural&quot; to be recursive at one point and then our move to iterative..." CreationDate="2018-03-15T19:24:14.880" UserId="4677" />
  <row Id="14406" PostId="4143" Score="0" Text="At my university, the first language we were taught was Haskell, a pure functional language where literally everything is recursive (no loops, everything is immutable, no side-affecting code). Teach them such a language, and in particular solve problems that use useful recursive data structures such as trees. Show them how simple and effective recursion can be - this will become especially apparent to those of them who are more (pure-)mathematically inclined. Get them to start thinking with portals - they will start to see recursive solutions all the time, and then they will have 'got it'." CreationDate="2019-02-22T20:51:23.550" UserId="6652" />
  <row Id="17159" PostId="4143" Score="0" Text="Wondering about this »Fibonacci can be done faster... iteratively« What's your preferred O(log(n)) version of fibonacci, especially if you don't use heavy artillery math like generating functions?" CreationDate="2020-10-11T15:14:38.327" UserId="8837" />
  <row Id="17164" PostId="4143" Score="0" Text="@Rusi I was unaware of the log-n recursive version, so thank you for bringing that to my attention!!  Though if we're not so concerned with clarity and simply want efficiency, we may as well use the O(1) version, which is certainly not recursive in the slightest.  :D" CreationDate="2020-10-12T19:06:16.430" UserId="27" />
  <row Id="17271" PostId="4143" Score="1" Text="`fib = 1 : 1 : zipWith(+) fib (1 : fib)`. Here's an O(n) solution, recursive, for generating a list of Fibonacci numbers (because it generates a list, O(n) is the most efficient possible time complexity). AS someone who has also learned Haskell, it's enjoyable to see how elegant some algorithms are when written in a recursive way." CreationDate="2020-11-19T20:13:33.030" UserId="8728" />
  <row Id="17733" PostId="4143" Score="0" Text="This [blog post](https://computethought.blog/2019/11/11/a-case-of-recursion/) has something to say on it." CreationDate="2021-02-20T11:34:39.697" UserId="204" />
  <row Id="9515" PostId="4144" Score="1" Text="I think you've got it.  Actually, that's the *only* example on this page (so far) that can't be answered with just, &quot;Okay, so what?  That's just as easy or easier without any recursion.&quot;" CreationDate="2018-01-10T05:44:36.963" UserId="1103" />
  <row Id="15541" PostId="4144" Score="1" Text="Permutations may be tricky to do iteratively, but a common iterative approach for &quot;next permutation&quot; involves using an array, not anything that resembles a stack." CreationDate="2019-09-16T06:30:31.177" UserId="8428" />
  <row Id="9512" PostId="4145" Score="0" Text="Bonus points if you use card instructions to implement the passing out of cards.  ;)  Actually, that would probably get a LOT more interest than just passing out the cards in the usual manner and then beginning the exercise." CreationDate="2018-01-10T05:37:41.947" UserId="1103" />
  <row Id="9527" PostId="4145" Score="1" Text="When you noted `base case` I was expecting to see a follow-up with induction which didn't occur. So now I have to ask, when you say base case are alluding to induction or it is just a coincidence of words?" CreationDate="2018-01-10T13:40:49.397" UserId="2516" />
  <row Id="9528" PostId="4145" Score="2" Text="Recursion and induction are related, of course. So the use of `base case` seems pretty natural to me. You need a base case to avoid infinite recursion, just as you need a base case to avoid infinitely recursive definitions when using induction." CreationDate="2018-01-10T13:52:01.060" UserId="1293" />
  <row Id="9555" PostId="4145" Score="1" Text="I don't agree that studying the base case, winding phase and unwinding phase is motivating at all! It feels like overly-abstract gibberish. The point is not to study how recursion works abstractly, the point is to demonstrate how it's useful. Passing cards around also feels too artificial to be a meaningful demonstration." CreationDate="2018-01-10T23:57:04.907" UserId="1275" />
  <row Id="9558" PostId="4145" Score="1" Text="I think you missed the point. The phases and the base case are essential to know and understand. You need a set of tailored exercises that solidify the knowledge of all those parts to be sure the student gets it. The instructor also needs to be explicit about how each exercise uses the parts. With an incomplete understanding it is harder to be an effective program designer. This is especially true in languages that do effective tail recursion elimination." CreationDate="2018-01-11T00:10:42.700" UserId="1293" />
  <row Id="9632" PostId="4145" Score="0" Text="Excercise 3 looks like it would have one mark too few?" CreationDate="2018-01-13T23:04:42.680" UserId="653" />
  <row Id="9634" PostId="4145" Score="0" Text="That depends on whether you want to &quot;count&quot; the base case or not. If you do, the base case should also mark the card." CreationDate="2018-01-13T23:21:00.190" UserId="1293" />
  <row Id="9513" PostId="4146" Score="0" Text="That doesn't seem to directly answer the question, as you *don't* solve such things with recursion." CreationDate="2018-01-10T05:39:27.087" UserId="1103" />
  <row Id="9516" PostId="4146" Score="3" Text="I prefer Quicksort for demonstrating recursion. I learned merge sort back in the days when it would be done non-recursively using sequential I/O streams and O(1) RAM, and I've in fact found it useful in an embedded system for storing records stored on a flash chip (the flash chip had more than enough space to hold two copies of all 5,000 records, but the system had less than 3840 bytes of RAM)." CreationDate="2018-01-10T07:28:31.940" UserId="2073" />
  <row Id="9543" PostId="4146" Score="2" Text="@Wildcard Uhh, what? From Wikipedia: `&quot;A minimax algorithm is a recursive algorithm for choosing the next move in an n-player game&quot;`" CreationDate="2018-01-10T17:31:07.233" UserId="2068" />
  <row Id="9545" PostId="4146" Score="0" Text="@KevinWorkman I meant the part about heuristics and such, but I see your point.  Makes sense." CreationDate="2018-01-10T19:13:40.877" UserId="1103" />
  <row Id="9546" PostId="4146" Score="0" Text="@Wildcard Yeah, my point is that things like heuristics and alpha-beta pruning are more advanced topics that the basic recursive algorithm leads to. Programming is extremely interconnected, and I think the more connections you make from the basics to the more complicated stuff, the better." CreationDate="2018-01-10T19:15:52.160" UserId="2068" />
  <row Id="9588" PostId="4146" Score="1" Text="@Wildcard: I had a Tic-Tac-Toe assignment I still remember in a first-year CS course.  The week after the assignment, our instructor asked who had used recursion to solve it.  IIRC, I was the only person to put up their hand.  If there was a move that forced a win, my program made it.  Otherwise it would play the first (or one of, I forget) the moves that would lead to a draw against best play.  I remember adding a random-first-move option so it wouldn't spend a couple seconds fully solving the game before making a move on an empty board :P" CreationDate="2018-01-11T18:15:40.867" UserId="1654" />
  <row Id="9511" PostId="4147" Score="1" Text="I don't have problems thinking of recursive methods, but I do struggle to see how this will help. From a code POV, it will look something like: `for (s in sheets) { switch (s.region) { a: region[a].append(s) ...} }; parallel for (r in region) { for (s in r) { switch (s.name[0]) {...} } }`, and the students will still see it as imperative, though it can be written in a recursive form more easily." CreationDate="2018-01-10T05:37:23.150" UserId="3472" />
  <row Id="9514" PostId="4147" Score="4" Text="Hmmm, I'm not entirely certain that students would grasp that sorting on more than one key by sorting first on one key and then on another key actually IS an example of recursion.  That sounds a little funny even to me." CreationDate="2018-01-10T05:41:01.127" UserId="1103" />
  <row Id="9557" PostId="4147" Score="1" Text="You just proposed an iterative approach." CreationDate="2018-01-11T00:08:33.820" UserId="1275" />
  <row Id="9560" PostId="4147" Score="0" Text="@immibis How so? I'm not seeing how breaking a big problem repeatedly into smaller subsections, fully solving the small problems, and recombining at the end is iterative. It's basically a mergesort." CreationDate="2018-01-11T01:13:22.750" UserId="27" />
  <row Id="9561" PostId="4147" Score="1" Text="@BenI. Putting the forms into 4 piles is an iterative loop. Putting the forms from those 4 piles into 26*4 piles is just two nested loops. It's not recursive because you are just saving up all the work from one step until you're done with that step. See muru's comment." CreationDate="2018-01-11T01:53:27.987" UserId="1275" />
  <row Id="9564" PostId="4147" Score="0" Text="@immibis I see that others agree with you from the upticks, but nevertheless, I still see it as subdividing and then re-merging, which is recursive. (FWIW, I am [not alone](https://en.wikipedia.org/wiki/Sorting_algorithm#Popular_sorting_algorithms) in calling this a [merge sort](https://stackoverflow.com/a/105983/4151129).) If anything, I might describe it as a recursive bucket sort." CreationDate="2018-01-11T02:50:24.433" UserId="27" />
  <row Id="9568" PostId="4147" Score="0" Text="Oh now I see what you were getting at. For some reason it seems hard to understand your example." CreationDate="2018-01-11T04:20:41.647" UserId="1275" />
  <row Id="9569" PostId="4147" Score="0" Text="@immibis Do you see any way to fix my description?  Apparently I'm being unclear to many folks, but I'm unsure about how." CreationDate="2018-01-11T04:23:46.950" UserId="27" />
  <row Id="9570" PostId="4147" Score="0" Text="Perhaps it's because the intuitive way to do this is non-recursive (it's essentially a breadth-first search made with two nested loops)." CreationDate="2018-01-11T04:36:24.580" UserId="1275" />
  <row Id="9578" PostId="4147" Score="1" Text="@BenI. I think the major problem of the algorithm is the fixed recursion depth of only two levels. If you had done something like &quot;*split by 4 regions. Every pile higher than 10 sheets, split by first letter of name. Every pile higher than 10 sheets, split by second letter of name. Every pile still higher than 10 sheets…*&quot; the recursive approach (with &quot;*small enough pile*&quot; as base case) would have been clearer. Using different things (4 regions and 26 letters) in the two first steps didn't exactly help either." CreationDate="2018-01-11T13:14:12.030" UserId="660" />
  <row Id="9579" PostId="4147" Score="0" Text="@Bergi Thank you!!!  I re-wrote it significantly to try to make it more obvious.  Is it better now?" CreationDate="2018-01-11T15:05:46.867" UserId="27" />
  <row Id="9584" PostId="4147" Score="0" Text="Thanks, much better. However the core part of the recursion (&quot;*Repeat the procedure as many times as*&quot;) still doesn't stand out over the clever sorting algorithm, so I'm not sure the students will grasp the difference between &quot;recursion&quot; and &quot;divide-and-conquer&quot;." CreationDate="2018-01-11T16:24:15.710" UserId="660" />
  <row Id="9510" PostId="4148" Score="5" Text="This is a nice, clear example of recursion, but is it a good *motivating* example for the entire process?  The iterative version (such as the simple `for` loop) is both more efficient and simpler to write." CreationDate="2018-01-10T03:32:18.357" UserId="27" />
  <row Id="9520" PostId="4149" Score="2" Text="Welcome to CSEducators. We hope to see you again. Note that we value longer posts over such short ones, especially posts that are just links that require navigating away from the site for explanation. It would be good if you could give a longer explanation of the curve, its algorithm, or why you think it is important pedagogically." CreationDate="2018-01-10T11:33:59.300" UserId="1293" />
  <row Id="9544" PostId="4149" Score="0" Text="Whenever I see Koch snowflake it reminds me that in a math course we were asked to prove that snowflake curve is infinite but the area it encloses is finite." CreationDate="2018-01-10T19:03:39.443" UserId="3888" />
  <row Id="9556" PostId="4149" Score="1" Text="The Sierpinski Triangle may also be a good one. To draw the triangle, draw 3 triangles (in the right places)." CreationDate="2018-01-10T23:58:19.247" UserId="1275" />
  <row Id="9681" PostId="4149" Score="1" Text="Fractals are the last thing I consider &quot;motivating&quot;..." CreationDate="2018-01-16T05:49:25.113" UserId="823" />
  <row Id="10211" PostId="4149" Score="0" Text="@mehrdad but they make cool t-shirts!" CreationDate="2018-02-28T03:19:11.413" UserId="1537" />
  <row Id="9521" PostId="4150" Score="1" Text="Welcome to CSEducators. We hope you come back often. Could you expand your first paragraph a bit to give at least a hint about _which_ recursive techniques." CreationDate="2018-01-10T11:37:51.110" UserId="1293" />
  <row Id="9518" PostId="4151" Score="10" Text="Welcome to CSEducators. Come back often. I'll also note that this is recursion over a tree, not just a linear structure. Nice." CreationDate="2018-01-10T11:31:44.810" UserId="1293" />
  <row Id="9522" PostId="4151" Score="27" Text="I think this is the best approach. Show recursive functions by processing recursive data structures (here: the folder structure)!&#xA;Other classical examples (like Fibonacci or Factorial) often trigger a reaction like &quot;Nice, but why do I need that?&quot; by the students. But every computer user has seen recursive data strucures at least once in their life (e.g. folders). Showing them that such structures can be processed elegantly by recursive functions gives often the desired &quot;wow&quot;effect." CreationDate="2018-01-10T11:43:34.630" UserId="2158" />
  <row Id="9524" PostId="4151" Score="16" Text="+1. Depth-first tree traversal is the simplest example I can think of where the recursive approach is truly easier to understand than the iterative approach. And even students who are not familiar with trees will probably be familiar with folders in a filesystem." CreationDate="2018-01-10T12:40:46.237" UserId="3873" />
  <row Id="9530" PostId="4151" Score="4" Text="There's a good chance an iterative programmer will already know how to do this without recursion, by use of a stack" CreationDate="2018-01-10T14:09:36.573" UserId="3693" />
  <row Id="9531" PostId="4151" Score="1" Text="I think a tree approach will work well, but perhaps getting the elements of a binary tree in different orders (preorder, inorder, and postorder)" CreationDate="2018-01-10T14:27:07.367" UserId="3693" />
  <row Id="9533" PostId="4151" Score="16" Text="Be aware that students nowadays may be more familiar with the various phone &amp; tablet operating systems, which can hide the complexity of their underlying file system. Obviously it can depend on your exact circumstances, but it wouldn't shock me if the upcoming generation ends up knowing about &quot;computers&quot; in a quite different way than I do, as the interface to how they use them is really quite different. Depending on what the audience is familiar with, you may find more luck traversing a graph of social media &quot;friends&quot; than a file system." CreationDate="2018-01-10T14:59:46.140" UserDisplayName="user3880" />
  <row Id="9534" PostId="4151" Score="2" Text="Another classical example for a recursive function: Raytracing with reflection. Requires some (very) basic knowledge of geometry and linear algebra. I am using that in one of my classes for CS students (who, indeed, have the required math background) as a kind of &quot;fun&quot; project." CreationDate="2018-01-10T15:06:16.010" UserId="2158" />
  <row Id="9553" PostId="4151" Score="1" Text="@phflack My experience is that students that do not yet understand recursion are also bad at appropriate use of data structures. YMMV." CreationDate="2018-01-10T23:26:01.613" UserId="990" />
  <row Id="9582" PostId="4151" Score="1" Text="This was literally how I discovered recursion many years ago!" CreationDate="2018-01-11T15:34:47.183" UserId="3911" />
  <row Id="9585" PostId="4151" Score="2" Text="As a (very) amateur programmer that just writes scripts for a data analysis, recursion has always baffled me and I've never had to implement it thus far. But I instantly understood it with this example. So here's at least one piece of anecdotal evidence that it works for a beginner." CreationDate="2018-01-11T16:45:27.097" UserId="3914" />
  <row Id="9660" PostId="4151" Score="1" Text="@PeterCooperJr. I think you're being silly; phones haven't *replaced* other computers for *any* generation, and any high-school-age kid these days is going to at least have experience with using Microsoft Office, which implies experience with saving files on a traditional file system. Pretty much the only people who are *only* familiar with phone and tablet OSes are a handful of tech-illiterate old folks whose families bought them a tablet because they thought it'd be easier to get the hang of (there's such a person in my family)." CreationDate="2018-01-15T09:23:24.253" UserId="3960" />
  <row Id="9622" PostId="4152" Score="0" Text="Interesting starting point for discussion.  It bears mentioning that a much more effective way to *actually* understand an article is to clear up every *word* you encounter that you don't understand, *when* you encounter it, and not go on past a misunderstood word *at all.*  But that's not an example of recursion (just the most important rule of study)." CreationDate="2018-01-13T07:22:36.500" UserId="1103" />
  <row Id="9547" PostId="4154" Score="0" Text="Welcome to CSEducators. We hope to see you back again." CreationDate="2018-01-10T19:32:24.393" UserId="1293" />
  <row Id="9548" PostId="4154" Score="3" Text="There doesn't seem to be an example here responding to the question. Are you saying none are necessary? Can you clarify?" CreationDate="2018-01-10T19:33:03.960" UserId="1293" />
  <row Id="9610" PostId="4154" Score="0" Text="I agree with Buffy. This does not appear to actually answer the question. If you want to discuss the question's premise, feel free to do so in the chat room I mentioned in my comment on the question." CreationDate="2018-01-12T18:25:50.033" UserId="58" />
  <row Id="9644" PostId="4154" Score="0" Text="I think the brief answer gave the structure of why recursion is useful based on what computers do well. This goes to the fundamental reason to teach it rather than more and more examples of it." CreationDate="2018-01-14T19:07:37.423" UserId="3958" />
  <row Id="9572" PostId="4155" Score="0" Text="Now all we need is a motivating example for using a tree structure." CreationDate="2018-01-11T08:35:44.867" UserId="1055" />
  <row Id="9589" PostId="4155" Score="0" Text="Anything where you need a stack data structure to implement iteratively is a potential candidate, including the https://en.wikipedia.org/wiki/Ackermann_function (which has the advantage of not needing a data structure as input.)" CreationDate="2018-01-11T18:17:09.443" UserId="1654" />
  <row Id="9593" PostId="4155" Score="0" Text="@StigHemmer Lookup over ordered sets (e.g. std::map) or sets with string keys (usually in the form of a trie), abstract syntax trees, network flow (minimum spanning trees), pathfinding (really, almost anything involving graphs will have a tree somewhere), hierarchical clustering, minimax, suffix trees...  It's like asking when you'd use an array, or a variable; I'm almost not sure where to start.  Of course, some of these also have non-tree-based ways to do them, and the exact functions will differ from the binary search tree example, but they'll all use recursion somewhere." CreationDate="2018-01-11T18:40:06.773" UserId="827" />
  <row Id="9554" PostId="4156" Score="1" Text="Welcome to [cseducators.se]. This is a breathtaking answer.  There is much to think about in here!" CreationDate="2018-01-10T23:29:57.453" UserId="27" />
  <row Id="9566" PostId="4157" Score="0" Text="I remember using the concept several decades back when it was reasonable for a hobbyist with a soldering iron to put together a &quot;state of the art&quot; home computer. In industry, I have needed to be aware of it occasionally and handle it rarely. I still have to look it up when I need it, after decades in industry. But ... the concept is important so you can recognize when you need to look it up again." CreationDate="2018-01-11T03:01:23.693" UserId="1537" />
  <row Id="9605" PostId="4157" Score="0" Text="Endian is named after the end of an egg that the lillyputians eat their eggs from, precisely because it does not matter. If code is written well, it does not matter. All you need is an awareness of the problem, and how not to depend on it." CreationDate="2018-01-12T06:51:17.527" UserId="204" />
  <row Id="9559" PostId="4158" Score="0" Text="This is a really interesting first answer! Welcome to [cseducators.se], @cse! I hope to see you around more!" CreationDate="2018-01-11T00:52:51.180" UserId="58" />
  <row Id="9577" PostId="4158" Score="0" Text="You can do the naive way easily with recursion as well though :D" CreationDate="2018-01-11T12:48:22.253" UserId="3907" />
  <row Id="9594" PostId="4158" Score="0" Text="@Koekje Well, you wouldn't want to spend too much time on an algorithm that would never work in reality.  With the recursive approach, you've only wasted about 10 minutes of your life writing the naive version. :-)" CreationDate="2018-01-11T18:56:06.887" UserId="827" />
  <row Id="9595" PostId="4158" Score="0" Text="@Koekje anything done with recursion could be done iteratively (through a stack data type stored in heap), and anything done iteratively can be done with recursion (as is typically done in languages without mutable variables). The real point is where is recursion more _elegant_ (especially for beginners, especially if you're teaching them a language which supports mutable variables - which 99% popular languages do - R and MATLAB (I may be wrong as I don't know them at all) seem to be the only exception in [TIOBE](https://www.tiobe.com/tiobe-index/)'s index)." CreationDate="2018-01-11T19:06:28.080" UserId="3896" />
  <row Id="9597" PostId="4158" Score="0" Text="@cse Yes I know. Generally with method calls behind the scenes a stack is operating anyway, so the recursion will indirectly be translated to an iterative approach. The point I was trying to make, but failed to do, is that for me it seems like you could interpret the answer as recursion being a whole different beast, automagically opening up a vastly improved way to  solve the Sudoku. I do not however see how recursion is more elegant with languages containing mutable variables. Isn't it the other way around? Why are most functional languages built on using recursion?" CreationDate="2018-01-11T19:42:08.177" UserId="3907" />
  <row Id="9603" PostId="4158" Score="0" Text="@Koekje Sorry, the opposite. In languages with only non-mutable variables, you _must_ use recursion for everything, even a simple `for` loop. The question is where could recursion be useful in a regular imperative or OOP language." CreationDate="2018-01-12T00:11:44.700" UserId="3896" />
  <row Id="9633" PostId="4158" Score="0" Text="Isn't the naive approach 9^81 instead of 10^81?" CreationDate="2018-01-13T23:09:26.463" UserId="653" />
  <row Id="9682" PostId="4158" Score="0" Text="That's not how you solve sudoku. It's not recursive. It's iterative and even that's not true. There are algorithms, which are neither iterative nor recursive." CreationDate="2018-01-16T06:29:50.697" UserId="150" />
  <row Id="9711" PostId="4158" Score="0" Text="@PaŭloEbermann True. You're going from 111... to 9999..., not 000... to 999..." CreationDate="2018-01-19T18:42:34.810" UserId="3896" />
  <row Id="9719" PostId="4158" Score="0" Text="@ItamarG3 [This](https://play.rust-lang.org/?gist=84f488360abe78ff6a74e9301727081d&amp;version=undefined) is my implementation of my algorithm. How is it not recursive?" CreationDate="2018-01-21T05:00:49.307" UserId="3896" />
  <row Id="9562" PostId="4159" Score="0" Text="Hi @jaia! Welcome to [cseducators.se]! I hope you're able to get some useful answers :)" CreationDate="2018-01-11T02:15:15.420" UserId="58" />
  <row Id="9565" PostId="4159" Score="2" Text="Are you asking about how to explain the language changes? Or how to explain the new features to people who've never seen python before? Also, why isn't using python 2 an option?" CreationDate="2018-01-11T02:55:43.360" UserId="58" />
  <row Id="9571" PostId="4159" Score="0" Text="A bit of both, but mostly how to explain the new features to students with no programming experience at all. (In this particular class, most students do have some Python 2 experience, but I'm thinking about the future.) And it was the main instructor's decision." CreationDate="2018-01-11T05:02:04.697" UserId="3897" />
  <row Id="9604" PostId="4159" Score="1" Text="I had this problem the other day. I told a pupil type `range(10)` into the interactive shell (to see what it is), but it now replies `range(0,10)`. When in the past it showed a list `[0,1,2,3,4,5,6,7,8,9]`. This made it possible to see that it could be replaced by a list." CreationDate="2018-01-12T06:47:59.123" UserId="204" />
  <row Id="9613" PostId="4159" Score="1" Text="A range is exactly that - a definition of a beginning and an end point. The 2.7 default behavior made it look as if it were a list, and confused the issue.  To new programmers, there is no &quot;change&quot;, it is simply how things are.  Only those with prior expectations will be confused." CreationDate="2018-01-12T21:42:06.497" UserId="1537" />
  <row Id="9616" PostId="4159" Score="1" Text="@pojo-guy Good point. The only problem is that explaining it that way makes it look like there are two fundamentally different ways to do for loops. And you can't directly examine what the range function does. But maybe you should make your comment an answer." CreationDate="2018-01-12T23:46:59.367" UserId="3897" />
  <row Id="9626" PostId="4159" Score="1" Text="Yes, with the old behaviour, it was obvious that a list could stand in place of a range. Is there a way to make this connection with python 3 (to make it easier to **learn**)?" CreationDate="2018-01-13T11:31:03.587" UserId="204" />
  <row Id="10098" PostId="4159" Score="0" Text="@ctrl-alt-delor, Don't think of Python3 as &quot;new&quot; and Python2 as &quot;old.&quot;  They are different languages, and the developers still are coming up with new versions of both of them." CreationDate="2018-02-16T21:14:07.593" UserId="1269" />
  <row Id="10101" PostId="4159" Score="0" Text="@jameslarge I know. It is true that python 3 is a newer language though. I also, mostly, prefer python3 (for an exception see my comment above)." CreationDate="2018-02-17T09:57:02.930" UserId="204" />
  <row Id="9576" PostId="4160" Score="0" Text="Quite similar, but I tend to use little endian = little end first, big endian = big end first. Seems to stick with the people I have explained it to." CreationDate="2018-01-11T12:47:26.483" UserId="3907" />
  <row Id="9567" PostId="4161" Score="0" Text="Excellent, helpful answer. Welcome back! :)" CreationDate="2018-01-11T03:24:13.950" UserId="27" />
  <row Id="9574" PostId="4162" Score="0" Text="Welcome to [cseducators.se]! This is a very interesting answer." CreationDate="2018-01-11T11:15:26.070" UserId="150" />
  <row Id="9662" PostId="4163" Score="0" Text="Thank you for coming back to improve your answer! I hope that you'll continue to share your knowledge here at [cseducators.se]." CreationDate="2018-01-15T13:14:29.787" UserId="58" />
  <row Id="13928" PostId="4163" Score="0" Text="Whatever language they are *coding* in, their understanding/definition of *it* is recursive." CreationDate="2018-11-14T21:20:24.643" UserId="2485" />
  <row Id="9674" PostId="4164" Score="0" Text="This is the best answer for motivating recursion, in my opinion." CreationDate="2018-01-15T17:12:16.907" UserId="3971" />
  <row Id="9675" PostId="4164" Score="0" Text="@justhalf Welcome to [cseducators.se]. I hope we see you around here often. I don't like Tower of Hanoi puzzle as a project because the work, or the solution to it, cannot be reused. Yet, when presented well, it can show the power of recursion and motivate students to explore the technique and develop the mental muscles to use recursion when appropriate." CreationDate="2018-01-15T17:22:24.217" UserId="104" />
  <row Id="9676" PostId="4164" Score="0" Text="Which is exactly what the question is about! =)&#xA;And I said your answer is great, not just the Tower of Hanoi." CreationDate="2018-01-15T18:32:07.283" UserId="3971" />
  <row Id="9600" PostId="4165" Score="0" Text="&quot;First, if you only work on one computer architecture then endianness is automatic and of little consequence&quot; I have to disagree with that. When I write disassemblers on Intel which use little endianness and the code coming out is little endian and [Intel Architecture Software Developer Manuals](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf)  make references in big endian, then not knowing this will ruin your day. Continued" CreationDate="2018-01-11T22:45:06.550" UserId="2516" />
  <row Id="9601" PostId="4165" Score="0" Text="I can't remember how much of a problem it was because after I figured it out I was able to abstract it away in a function, but for disassemblers of little endian processors I would not say &quot;of little consequence&quot; :)" CreationDate="2018-01-11T22:45:47.127" UserId="2516" />
  <row Id="9580" PostId="4166" Score="0" Text="This is not only a gorgeous problem, but would also work very well in an Objects-first curriculum." CreationDate="2018-01-11T15:24:03.390" UserId="27" />
  <row Id="9581" PostId="4166" Score="0" Text="Oh, and welcome to [cseducators.se].  I hope you'll join us in our mission here!" CreationDate="2018-01-11T15:26:09.377" UserId="27" />
  <row Id="9592" PostId="4167" Score="0" Text="This some interesting hand-waving and analogy, but does nothing to change the fact that `prod *= i;` in a loop is just as easy to write, and runs faster (unless the compiler optimizes your recursion back into a loop).  The problem has no stack-like state that needs to be preserved for back-tracking, so recursion isn't helpful or necessary for factorial.  I know you didn't mention Fibonacci, but recursive Fib is even more dumb because it takes O(Fib(n)) time instead of O(n) time for a `a+=b; b+=a;` loop. Recursive Factorial doesn't make the complexity class worse, so it's not as bad an example." CreationDate="2018-01-11T18:39:25.140" UserId="1654" />
  <row Id="9596" PostId="4168" Score="0" Text="They definitely don't know `xrange` or anything about functional programming. Depending on the class, they either have never programmed before at all or have a rudimentary background." CreationDate="2018-01-11T19:37:30.583" UserId="3897" />
  <row Id="9598" PostId="4169" Score="1" Text="Welcome to CSEducators. I like this answer. If you want to improve it you could add a link or two, especially to a writeup of Ackerman's function. Better yet, explain a bit about why it is important." CreationDate="2018-01-11T20:21:54.717" UserId="1293" />
  <row Id="9611" PostId="4169" Score="0" Text="This list of possible algorithms doesn't really add anything to the already existing answers. Can you add some depth so that your answer *adds* to the other answers rather than simply restating them?" CreationDate="2018-01-12T18:28:04.303" UserId="58" />
  <row Id="9661" PostId="4169" Score="0" Text="Well, better show recursion on example where the recursive approach is the _obviously_ simplest solution to a problem.&#xA;Not everybody comes quickly to a solution to the Hanoi problem, if ever. Same for sorting." CreationDate="2018-01-15T09:59:07.387" UserId="2103" />
  <row Id="9607" PostId="4170" Score="0" Text="Now that is a cool story. Welcome to CSEducators. There is a lot here that might interest you." CreationDate="2018-01-12T13:16:05.557" UserId="1293" />
  <row Id="9608" PostId="4170" Score="1" Text="You didn't quite state this, but your answer brings up the possibility of seeding the field by simply utilizing recursion in front of the class at some prior time. The way I envision it, I would point it out, but leave it largely unexplained until we got to the proper unit.  This would serve to let them know that the possibility existed and feed their curiosity naturally, so that when we later get to the unit, they would be interested in exploring that oddity.  (If you like that, feel free to integrate it; it would also give a classroom tie-in, which you are currently missing.)" CreationDate="2018-01-12T13:18:44.920" UserId="27" />
  <row Id="9614" PostId="4172" Score="1" Text="Welcome to [cseducators.se]! How will the example of water illustrate to students why they need to *learn* recursion?" CreationDate="2018-01-12T23:18:31.310" UserId="27" />
  <row Id="9618" PostId="4172" Score="1" Text="To add to what Ben said, this same task could be accomplished with a `while` loop. Why would this example help students see the necessity of recusion?" CreationDate="2018-01-13T01:12:34.100" UserId="58" />
  <row Id="9804" PostId="4173" Score="0" Text="The thing which is confusing you isn't the implementation but the name. `range` doesn't return a range in the sense of an object which represents a continuous subset of the real line. It returns an iterable/enumerable object which can be used to use foreach loops instead of C-style for loops for fixed start and end points." CreationDate="2018-01-23T17:26:11.867" UserId="1219" />
  <row Id="9814" PostId="4173" Score="0" Text="Exactly. The 2.7 implementation is not a &quot;range&quot; in the strict sense of the word, so you have to know the library to use it.  The 3.0 implementation is exactly a &quot;range&quot; in the strictest sense of the word, so anyone can read the code and see what it's doing." CreationDate="2018-01-24T05:03:51.977" UserId="1537" />
  <row Id="9628" PostId="4174" Score="0" Text="Thanks a lot for sharing! I am sure it will help me a lot next time I teach this course." CreationDate="2018-01-13T16:50:26.137" UserId="1873" />
  <row Id="9629" PostId="4177" Score="1" Text="Are **you** familiar with `C++`? In case your're not the better question would be: *what other programming Language should we learn beside Java?* Eg: the automobile industry is using *plain `C`* because `C++` didn't hold its promises regarding speed (either developing nor execution time)  and safety." CreationDate="2018-01-13T17:07:30.930" UserId="1256" />
  <row Id="9630" PostId="4177" Score="0" Text="After some thinking I believe you cannot get a good answer from here because  we all live in our *filter bubble*. I personally know nobody doing `C++` for a living. Some other might know only people coding it and nothing else. So what you're asking for is a *research* about the current importance of `C++` in the current industry which most likely non of us has done (yet)..." CreationDate="2018-01-13T17:45:51.220" UserId="1256" />
  <row Id="9631" PostId="4177" Score="0" Text="I disagree. The question seems to be about why to teach C++. That is certainly relevant here. I've authored C++ books, by the way, and many members, though not particularly active, are experts in C++ and its instruction." CreationDate="2018-01-13T19:17:03.183" UserId="1293" />
  <row Id="9641" PostId="4177" Score="3" Text="It is not that C++ is fast (to make if fast all sorts of manual optimisations need to be done), but that Java is slow. Java is slow because of virtual machine, and because of memory layout. e.g. for a linked list, it is impossible in java to ensure that the payload is proximate to the linked list, therefore a java implementation will suffer many more cache misses. Another thing that java does not have is proper tail call optimisation. However while it is easy to list short comings in Java, I would find it impossible to recommend C++. The only time to use C++, is to make a contract last forever" CreationDate="2018-01-14T15:28:00.720" UserId="204" />
  <row Id="9649" PostId="4177" Score="1" Text="@ctrl-alt-delor this simply isn't true. If you want to layout your arrays in memory manually in Java, then you can (it's been almost 15 years since this feature - mem-mgmt - was added to the main Java implementation). At the same time, JVM's are positively encouraged to recompile code (for 20 years now!) to fix problems like this. They tend to be pretty good at it." CreationDate="2018-01-15T00:15:27.850" UserDisplayName="user31" />
  <row Id="9652" PostId="4177" Score="0" Text="Memory allocation?  That's just scratching the surface.  The C++ language is _enormously_ more complicated than the Java language.  Just for example, take a look at the documentation for [std::enable_if](http://en.cppreference.com/w/cpp/types/enable_if) and see if you can design a non-trivial exercise for your students that requires them to use it.  Or, just try (I dare you!) to learn anything about the [Boost libraries](http://www.boost.org/) by reading their `.h` files." CreationDate="2018-01-15T02:29:38.047" UserId="1269" />
  <row Id="9654" PostId="4177" Score="0" Text="One thing you can do with typical tool-chains for C, for C++, for Rust, and for many other programming languages, but _not_ with typical Java tool-chains:  You can write projects that create _native executable code_. That covers a lot of territory including; code that links with code written in other languages, code that directly calls the operating system, loadable modules and device drivers that run _in_ the operating system.  You can write your own operating system.  Or, you can write embedded, &quot;bare metal&quot; code that runs with no operating system at all." CreationDate="2018-01-15T02:54:21.260" UserId="1269" />
  <row Id="9655" PostId="4177" Score="1" Text="Because one day you will want to get a job at a company that doesn't use Java, so we're going to start exposing you to new languages now, so you won't be stuck thinking in Java?" CreationDate="2018-01-15T03:11:14.907" UserId="1275" />
  <row Id="9645" PostId="4178" Score="0" Text="Overall very good,  I'd add that c++ implementations of low level code like the guts of xalan/xerces xml libraries tend to be twice as fast as their java counterparts. On the other hand there are certainly places where java is comparable in throughput to c++. You might point out that the jvm is written in c/c++" CreationDate="2018-01-14T19:32:43.367" UserId="1537" />
  <row Id="9638" PostId="4179" Score="1" Text="*&quot;C++ gives students an opportunity to learn about pointers, pointer arithmetic, and memory management. You could also get into casting and bit-operations, which forces the students to learn about data representation. &quot;* These are concepts of *plain `C`*. You don't need `C++` to demonstrate them. But Yes, it's hard to get a pure `C` compiler (for free) these days..." CreationDate="2018-01-14T12:11:16.267" UserId="1256" />
  <row Id="9640" PostId="4179" Score="0" Text="@TimothyTruckle Fair enough :)  I mentioned I was not a C++ programmer.  Most of what I teach is in Java, so those concepts were guesses on my part.  Buffy's answer is undoubtedly far better in terms of what concepts should probably be focused on.  My point to OP was more about how to justify (and set up) a class for students." CreationDate="2018-01-14T14:49:50.197" UserId="27" />
  <row Id="9646" PostId="4179" Score="0" Text="In my experience,  people start to really understand programming after they learn their third language. C++ is sufficiently similar to java that there is carryover,  but different enough to increase the breadth and depth of their skills." CreationDate="2018-01-14T19:36:36.320" UserId="1537" />
  <row Id="9653" PostId="4179" Score="0" Text="@TimothyTruckle, GCC, with the right command-line options, can be made to obey and enforce any of several different versions of the C standard. (https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards.)" CreationDate="2018-01-15T02:40:11.943" UserId="1269" />
  <row Id="9656" PostId="4179" Score="0" Text="@TimothyTruckle What's wrong with GCC or LLVM, the quintessential free C compilers?" CreationDate="2018-01-15T03:16:23.247" UserId="1275" />
  <row Id="9657" PostId="4179" Score="0" Text="@immibis I don't know about LLVM though, but being pedantic I'd say that GCC is a C++ compiler you can configure to behave like a C compiler. And there is the problem: you have to actively do it..." CreationDate="2018-01-15T06:37:33.923" UserId="1256" />
  <row Id="9678" PostId="4179" Score="0" Text="@TimothyTruckle G++ is a C++ compiler and GCC is a C compiler..." CreationDate="2018-01-15T21:37:21.467" UserId="1275" />
  <row Id="9679" PostId="4179" Score="0" Text="@immibis and I thought it stands for [gnu compiler collection](https://gcc.gnu.org/)" CreationDate="2018-01-15T22:10:45.827" UserId="1256" />
  <row Id="9680" PostId="4179" Score="0" Text="@TimothyTruckle Well by that logic GCC is a Fortran compiler, not C or C++. GCC is both the GNU Compiler Collection, *and* the GNU C Compiler included in that collection." CreationDate="2018-01-15T22:22:14.607" UserId="1275" />
  <row Id="9668" PostId="4181" Score="1" Text="@Buffy sorry.  I assumed that CS Educators all know the light-switch analogy." CreationDate="2018-01-15T14:33:12.263" UserId="3132" />
  <row Id="9670" PostId="4181" Score="1" Text="@Buffy ok.  I added (a hopefully clear) explanation." CreationDate="2018-01-15T14:38:58.020" UserId="3132" />
  <row Id="9672" PostId="4181" Score="2" Text="@Buffy interesting. This was *Standard Knowledge* 35 years ago when students had to learn pointer arithmetic and take at least one class in Assembly." CreationDate="2018-01-15T14:49:12.283" UserId="3132" />
  <row Id="9673" PostId="4181" Score="1" Text="Welcome to CSEducators. Come back often." CreationDate="2018-01-15T14:52:30.670" UserId="1293" />
  <row Id="13479" PostId="4181" Score="1" Text="Using 0 and 1 for binary states is unrelated to the mathematical values of 0 and 1. We could instead use &quot;nothing&quot; and &quot;something&quot; and the entire field of logic would remain correct. This is why programming now favors `true` and `false`, instead of &quot;a non-zero integer&quot; and &quot;a zero integer&quot;. It disambiguates logical evaluations from mathematical ones and prevents developers mistakenly assuming one for the other." CreationDate="2018-09-18T06:37:12.860" UserId="2164" />
  <row Id="13480" PostId="4181" Score="0" Text="Maybe as a simpler example: while the logic (of an electrical device) links 0 to 0V, the same does not apply to e.g. an abstract logical statement (&quot;all bald men wear hats&quot;). 0 does not bind to any particular integer value. Similarly, setting a temperature switch to 0 does not inherently mean that it's now 0° (before you argue that a temperature switch is still electrical: non-electrical switches exist too!). There are only fringe cases in which the logical 0 corresponds to a mathematical 0. The logical 0 is not defined by the mathematical 0, their fringe correlation is coincidental." CreationDate="2018-09-18T06:39:47.337" UserId="2164" />
  <row Id="20153" PostId="4181" Score="0" Text="I use the three light switches in my room to show binary counting... never occurred to me to use it for array indexes.  Bravo.  :-)" CreationDate="2022-05-31T14:16:10.220" UserId="12011" />
  <row Id="9683" PostId="4182" Score="0" Text="Maybe it would be better to spend the time on teaching them better design concepts and such." CreationDate="2018-01-17T10:48:52.287" UserId="1293" />
  <row Id="9684" PostId="4182" Score="0" Text="@Buffy there isn't nearly enough time for that." CreationDate="2018-01-17T11:52:59.213" UserId="150" />
  <row Id="9692" PostId="4182" Score="0" Text="Do you mean revision control (most people seem to get this terminology wrong, there are several different but related things: revision control, configuration control, source control, and version control. They are all different). I think it is a good idea, they can keep all of there files in it; not just source code. I have been using active-code from rune-stone, it have a simple revision control tool. Strictly inlier, commit on run. The pupils like it. It allows then to undo mistakes." CreationDate="2018-01-17T19:19:32.163" UserId="204" />
  <row Id="9697" PostId="4182" Score="0" Text="IMHO, version control is best when it's invisible. GIT'S learning curve makes it less than favored,  but it is widely used and many useful tools are only available via pull from github. My preferred version control is subversion. To a user it looks like a directory structure with betraying." CreationDate="2018-01-18T02:34:20.677" UserId="1537" />
  <row Id="9685" PostId="4183" Score="2" Text="Welcome to [cseducators.se]!  You've come to the right place :) Can you give a few more details?  How often will the course meet?  Are there any additional goals beyond &quot;introductory programming&quot;?" CreationDate="2018-01-17T12:57:08.510" UserId="27" />
  <row Id="9686" PostId="4183" Score="0" Text="Thanks Ben :)&#xA;I updated the post with more information" CreationDate="2018-01-17T13:58:58.630" UserId="3982" />
  <row Id="9690" PostId="4183" Score="0" Text="For refrence, we've [already discussed the issue of how some kids will see block-based programming as &quot;not real programming&quot;](https://cseducators.stackexchange.com/q/860/58)" CreationDate="2018-01-17T14:55:10.503" UserId="58" />
  <row Id="9787" PostId="4183" Score="0" Text="Python is used for AI and machine learning research, and I have interfaced with enterprise systems written in python. It is not to be laughed at." CreationDate="2018-01-23T03:11:29.813" UserId="1537" />
  <row Id="14259" PostId="4183" Score="0" Text="Commenting on update 2. That is expected as the kids were in different stages of development 10-15 crosses the boundary a bit. If you do it again, you could try to split the group at around 12, but give each kid the option of the Scratch group or the Python group. You can be a bit deeper with the latter. But you can do &quot;real&quot; things in Scratch, actually." CreationDate="2019-02-12T01:10:06.653" UserId="1293" />
  <row Id="14270" PostId="4183" Score="0" Text="@Buffy Thanks for your suggestion. I actually managed to get enough funding to start a robotics course for the same age group using Lego Mindstorm. I'll make sure to post an update on how that goes." CreationDate="2019-02-13T22:46:43.133" UserId="3982" />
  <row Id="9687" PostId="4184" Score="0" Text="I am familiar with both languages. However, giving the kids a choice might not be the best idea because I don't think they have a good tech background besides the smartphone-using experience. I updated the question with more details about that." CreationDate="2018-01-17T14:03:59.013" UserId="3982" />
  <row Id="9688" PostId="4184" Score="3" Text="Actually, their choice needn't be strictly rational. If you were to see brighter faces for one and scornful looks for the other it might sway your choice. You want them excited, not just accepting." CreationDate="2018-01-17T14:06:27.070" UserId="1293" />
  <row Id="9689" PostId="4184" Score="0" Text="Actually, even for Python I would base my course on this Coursera course from Rice University: https://www.coursera.org/learn/interactive-python-1&#xA;They make a simple game in every lesson. So I'm not completely dismissing the idea." CreationDate="2018-01-17T14:22:56.297" UserId="3982" />
  <row Id="9691" PostId="4185" Score="0" Text="Welcome to CSEducators. I hope you get good answers to your question and come back for more in the future." CreationDate="2018-01-17T17:50:54.020" UserId="1293" />
  <row Id="9693" PostId="4185" Score="1" Text="Can you translate  “upperclassmen” for the international audience. I am from England and have no idea what it means. (may be a foot note, with age etc.)" CreationDate="2018-01-17T19:24:49.167" UserId="204" />
  <row Id="9695" PostId="4185" Score="1" Text="You may also be interested in [this question](https://cseducators.stackexchange.com/questions/494/deep-learning-teaching-resources)." CreationDate="2018-01-17T22:13:47.413" UserId="27" />
  <row Id="9696" PostId="4185" Score="0" Text="The definition is loose, but upperclassmen are generally 11th and 12th graders (16 - 18 years old), but sometimes include 10th graders." CreationDate="2018-01-17T23:58:25.167" UserId="3990" />
  <row Id="21812" PostId="4185" Score="0" Text="A machine learning course is a learning course for machines. Which machines exactly would attend such a course?" CreationDate="2024-03-18T01:04:25.610" UserId="14351" />
  <row Id="9842" PostId="4186" Score="0" Text="Processing is Java based. If that puts a knot in your stomach, the Processing Foundation has extended their library to work with Python and Javascript." CreationDate="2018-01-24T21:04:20.620" UserId="2040" />
  <row Id="9876" PostId="4186" Score="1" Text="I'm happy to see Processing mentioned here. I teach students in the same age range as OP's, and I this year I had to replace a teacher that had been using Pascal as an introductory language, which the students hated. I finished the main topics in Pascal and used Processing as a pain reliever.&#xA;&#xA;I'm planning on using Processing (python) as the introductory language this year, and the links you shared are going to help me decide and convince my partners." CreationDate="2018-01-27T15:05:25.230" UserId="4204" />
  <row Id="9944" PostId="4186" Score="0" Text="@AntonioJunior  and Kevin Workman I've created [a Stack Exchange chat room](http://chat.stackexchange.com/rooms/72445/discussion-on-answer-by-kevin-workman-programming-language-for-teenagers), in case y'all want to move over there. All the existing comments have been migrated over there, so I've deleted them." CreationDate="2018-01-30T14:46:08.327" UserId="58" />
  <row Id="9698" PostId="4187" Score="0" Text="The course will be taught in high school. May I ask what math prerequisites would be needed for those topics you listed in your answer?" CreationDate="2018-01-18T09:54:25.313" UserId="3952" />
  <row Id="9699" PostId="4187" Score="0" Text="@scaaahu: It's mainly linear algebra that comes up in machine learning. A familiarity with vectors and working with them (such as the dot product, gradient of a vector) and some calculus (differentiation and partial derivatives) would be helpful. If you didn't want to get bogged down with the details, you could probably explain what you needed as you taught it, but certainly the vectors pop up *everywhere* so an awareness would be helpful." CreationDate="2018-01-18T15:10:08.163" UserId="2" />
  <row Id="9704" PostId="4188" Score="0" Text="Would you mind providing links to the relevant Kahn Academy lessons? Screenshots would also be useful because of the visual nature of the question." CreationDate="2018-01-18T19:15:07.700" UserId="58" />
  <row Id="9718" PostId="4189" Score="0" Text="This is very interesting. Indeed I can focus my course on real-time applications and libraries that should link with other languages." CreationDate="2018-01-20T17:25:04.257" UserId="1873" />
  <row Id="9707" PostId="4190" Score="0" Text="Very interesting point about adversarial examples; students might also find examples like [this paper](https://arxiv.org/pdf/1710.08864.pdf) interesting in which deep neural nets were fooled by one pixel changes. It really does make it clear how neural nets don't really see things the way we do (and perhaps makes driverless cars and such sound far more dangerous, if such small changes can fool them!)" CreationDate="2018-01-19T14:02:38.580" UserId="2" />
  <row Id="9709" PostId="4190" Score="1" Text="@Aurora0001 Thanks for the reference about the single pixel difference. I know about it but could not find it." CreationDate="2018-01-19T17:07:47.617" UserId="2516" />
  <row Id="9710" PostId="4192" Score="0" Text="Welcome to CSEducators. We are always glad to see a new contributor." CreationDate="2018-01-19T17:37:30.543" UserId="1293" />
  <row Id="9712" PostId="4192" Score="2" Text="I can't emphasize enough the part about lost work.  Virtually every week, someone's laptop breaks, and all of their work gets lost." CreationDate="2018-01-19T20:08:37.703" UserId="27" />
  <row Id="9713" PostId="4193" Score="1" Text="Welcome to [cseducators.se].  You've found the right community :) Do these kids have any programming background?  Or is this just a general population?" CreationDate="2018-01-19T20:10:13.623" UserId="27" />
  <row Id="9714" PostId="4193" Score="0" Text="@BenI. general population, high school math can be assumed." CreationDate="2018-01-19T22:11:51.957" UserId="4002" />
  <row Id="9721" PostId="4193" Score="0" Text="Have you looked at Khan Academy's offering?" CreationDate="2018-01-21T21:56:18.713" UserId="21" />
  <row Id="10239" PostId="4193" Score="0" Text="There are two zero-knowledge demonstrations, &quot;Two balls and the color-blind friend&quot; and &quot;Ali Baba's Cave,&quot; described in the relevant Wikipedia article.  The first can be easily demonstrated in a classroom. https://en.wikipedia.org/wiki/Zero-knowledge_proof" CreationDate="2018-03-05T19:22:16.313" UserId="3524" />
  <row Id="10278" PostId="4193" Score="0" Text="@Buffy It's impossible to write a tag wiki until the edit to create the tag has been accepted." CreationDate="2018-03-09T15:09:43.943" UserId="124" />
  <row Id="9735" PostId="4196" Score="0" Text="+1 for the last para.  Especially if OP's course teaches &quot;don't just copy/paste answers from code sites (like SO) when doing homework&quot;." CreationDate="2018-01-22T07:43:30.760" UserId="4039" />
  <row Id="9723" PostId="4197" Score="22" Text="What does not feel correct about the box metapher? It's the closest to &quot;variable = memory cell&quot; we got. What other concepts (besides names) do Scratch variables use?" CreationDate="2018-01-21T22:50:34.630" UserId="660" />
  <row Id="9754" PostId="4197" Score="2" Text="As the placeholder text says, &quot;Use comments to ask for more information or suggest improvements. **Avoid answering questions in comments**&quot; (emphasis mine). I've moved the comments [to chat](http://chat.stackexchange.com/rooms/72042/discussion-on-question-by-golo-roden-how-to-explain-the-concept-of-a-variable-to) because they have value, but further answers in the comment section will be removed and will not be moved to chat." CreationDate="2018-01-22T13:01:03.537" UserId="58" />
  <row Id="9821" PostId="4197" Score="0" Text="@Bergi, you typically *don't* pass the box, unless you start talking about references or pointers (which I suspect is not what you want to start with). In such analogy you would *open* the box, and pass the content of the box as the result." CreationDate="2018-01-24T13:11:52.160" UserId="4136" />
  <row Id="9824" PostId="4197" Score="1" Text="I can relate almost exactly to your daughter's predicament, because when I was her age my older brother was struggling to explain simple variables in algebra to me. The mutability of a variable is the thing I couldn't wrap my head around at the time. I feel like that's the key concept to communicate, but I'm still struggling with finding a way to explain it that my 9-year-old self would have understood. The accepted answer is definitely a good example, but I'm not totally convinced I would have picked it up. Hopefully your daughter is smarter than I was ;)" CreationDate="2018-01-24T14:28:41.093" UserId="4141" />
  <row Id="9840" PostId="4197" Score="0" Text="@aioobe Well that's exactly what's happening in a function call as well. We don't pass a variable as an argument, we pass the value that the variable holds." CreationDate="2018-01-24T20:27:38.480" UserId="660" />
  <row Id="9849" PostId="4197" Score="0" Text="The box analogy seems confusing asf to me. I do not have a logical brain though, I am more of a creative." CreationDate="2018-01-25T03:39:21.393" UserId="3413" />
  <row Id="9850" PostId="4197" Score="0" Text="@Bergi, well, then I assume the question in your original comment (&quot;What does not feel correct about the box metapher?&quot;) is answered :-) Also, note that not all languages have pass-by-value semantics. Pass-by-reference or mixes thereof is quite common." CreationDate="2018-01-25T06:46:09.340" UserId="4136" />
  <row Id="9851" PostId="4197" Score="0" Text="@aioobe I'd say this is why the box analogy is perfect: it can express both notions" CreationDate="2018-01-25T06:53:11.743" UserId="660" />
  <row Id="9854" PostId="4197" Score="2" Text="(I don't understand why my comment asking for more information was removed, so I'll try to rephrase it.) Why do you think you need to *explain the concept* of a variable? Playing around with examples might be more natural for a 9-year-old, understanding comes later." CreationDate="2018-01-25T10:44:34.767" UserId="4101" />
  <row Id="9856" PostId="4197" Score="0" Text="@JiK That's how I personally learn best, perhaps that qualifies as a full answer" CreationDate="2018-01-25T13:19:44.500" UserId="4141" />
  <row Id="9871" PostId="4197" Score="0" Text="When I first came across algebra at age 10 the thing that confused me wasn't that X and Y could be names for abstract things; it was that I had done lots of puzzles in which X and Y represented digits in a number, so if X=2 and Y=3 then XY=23. No one explained to me that the things the letters stood for were quite different trom the things I thought they stood for, and that the notation XY wasn't decimal notation, it was multiplication. Very often in teaching, it's not getting the right idea instilled that's difficult, it's getting the wrong idea exorcised." CreationDate="2018-01-26T19:00:56.400" UserId="2936" />
  <row Id="9893" PostId="4197" Score="0" Text="Can you clarify why you say &quot;'it's not easy to grasp any more&quot; regarding the second way? That's exactly what I was thinking when I started programming (at about 11) and it felt quite easy to grasp. Even easier than the more correct box analogy." CreationDate="2018-01-28T19:25:36.673" UserId="963" />
  <row Id="9905" PostId="4197" Score="0" Text="Where I live, we have the concept of a &quot;joker&quot; in a deck of cards which can be treated as any card. Play some games with joker (or jack), then explain the concept through joker being a variable, able to take any value." CreationDate="2018-01-29T11:08:33.257" UserId="4224" />
  <row Id="10596" PostId="4197" Score="0" Text="I've usually compared to a piece of paper for storing some information: You can keep writing what you know about it on a piece of paper or just change it. Different variables are like different pieces of paper/post-its. You just track stuff along. However, I've found it easier to teach this with &quot;typed languages&quot; than untyped ones - since it's confusing for a variable to be a string and int both in the context. But some find that easier..." CreationDate="2018-03-15T19:20:40.533" UserId="4677" />
  <row Id="13961" PostId="4197" Score="0" Text="A variable *is* a box or scratch pad. It exists during program execution. Program texts contain variable names. What does &quot;doesn't feel correct&quot; mean?" CreationDate="2018-11-22T22:45:35.633" UserId="2485" />
  <row Id="9737" PostId="4198" Score="1" Text="A good variation of this, is that its a box with a number or sentence in it, and each box has a label saying whats in it. Then you can use the metaphor to ask further questions. &quot;The Box X has some oranges in it, and 2 oranges in your hand. If you know there are 10 oranges all together, how many oranges in box X ? (  X + 2 = 10 )" CreationDate="2018-01-22T08:11:17.973" UserId="4043" />
  <row Id="9818" PostId="4198" Score="1" Text="@Shayne Scratch is an object oriented system, so there are objects (including values such as string and numbers), and there are variables which have names and refer to objects. You would have to unlearn the box metaphor once you try to put the same object into two boxes. This causes constant confusion in Java where references to objects are passed by value, so people get taught that 'primitive' variables act like boxes and 'reference' variables are different, despite the physical behaviour being identical." CreationDate="2018-01-24T11:50:52.383" UserId="1498" />
  <row Id="9855" PostId="4198" Score="0" Text="@PeteKirkham have a box labeled A with an orange in it. have two more boxes, labeled B and C, and put a note reading &quot;A&quot; into each. two notes, one orange." CreationDate="2018-01-25T11:18:28.827" UserId="3806" />
  <row Id="9865" PostId="4198" Score="1" Text="That would correspond to a different case, such as in C++ where you can have `a` as a pointer and `b` and `c` references to `a` (putting an apple in `a` would cause `b` and `c` to refer to the apple, not the original orange)" CreationDate="2018-01-26T08:37:57.183" UserId="1498" />
  <row Id="9722" PostId="4199" Score="6" Text="I would not introduce the concept of sameness (object identity) of persons at the same time. Every variable has its own value and can change on its own, it is not necessarily an object reference. Also I think we can (and should) introduce variables without the concept of scopes (the same name used to label different variables in different contexts)." CreationDate="2018-01-21T22:47:10.887" UserId="660" />
  <row Id="9725" PostId="4199" Score="7" Text="With my wife, I have been using the names of *animals*. Obviously, my wife is not a child, but a quite intelligent woman, but her background in mathematics and statistics makes some aspects of variables in programming counter-intuitive for her, and this analogy has helped. I emphasize the name being of an animal (specifically, a turtle, since we’re practicing with a Logo-style turtle module) because *animals for the most part don’t know anything about the names we assign to them.* This helps emphasize that an object exists independently of names, and can have multiple names refer to it." CreationDate="2018-01-22T02:25:20.593" UserId="1246" />
  <row Id="9726" PostId="4199" Score="6" Text="It helps her remember that the turtle we called `louis`, and then passed into a function, is the same turtle that function just calls `turtle`, and that the turtle itself doesn’t really care what you call it." CreationDate="2018-01-22T02:28:09.293" UserId="1246" />
  <row Id="9750" PostId="4199" Score="2" Text="Not that I agree with this necessarily but I would point out another point of view. When training as a teacher we were told that it was not necessarily best to advance a child's education like this. For your daughter, she will probably be able to understand this but in future years she will have to relearn this at school and may become disinterested or disenfranchised entirely. I respect your drive to teach your daughter and I'm sure she is enjoying it but I would bare in mind that in a few years, this may not have been what was best for her." CreationDate="2018-01-22T11:09:34.343" UserId="4054" />
  <row Id="9775" PostId="4199" Score="5" Text="@stuartstevenson While I note that you said you don't necessarily agree with that philosophy, the idea of delaying the introduction of a concept usually taught at a later age *horrifies* me. The answer is *never* to restrict an interested student, but to get them different / better instruction if they've moved beyond the herd. Example: I moved from a city to a rural town in 6th grade, and hardly learned anything for 4 years because there was no option but &quot;here's what everyone else is doing this term&quot;. Yes, I was often bored, but few would argue that my previous teachers did me a disservice." CreationDate="2018-01-22T20:49:17.807" UserId="794" />
  <row Id="9799" PostId="4199" Score="1" Text="Names are references, not variables. Yes, in some modern languages, most or all variables contain references, but this is not the same, and it is a subtly or not-so-subtly different concept which would likely make things more difficult for the child... for example, humans usually never change their name; you have the &quot;identity&quot; stuff muddling stuff, etc." CreationDate="2018-01-23T16:34:59.303" UserId="652" />
  <row Id="9801" PostId="4199" Score="1" Text="“In CS, a variable can actually vary” – I'd rather say in _imperative programming_, a variable can actually vary. CS per se doesn't need that." CreationDate="2018-01-23T16:54:40.550" UserId="1157" />
  <row Id="9830" PostId="4199" Score="0" Text="@stuartstevenson bored and disenfranchised now, or bored and disenfranchised later? I had this problem all through my childhood, the older I got the better I was able to self motivate. My kids have it much better, each school they have been in so far has had programs that try to tailor to the kids level. Early on I honestly feared that when when they moved on to middle school/high school the same sorts of programs wouldn't exist and being forced into a more traditional classroom would be too hard to adjust to. Seems my worry was for naught. (well until college.)" CreationDate="2018-01-24T16:20:49.237" UserId="3891" />
  <row Id="9867" PostId="4199" Score="0" Text="I disagree with the bit about variables in mathematics not varying - if you have: x = 2y, you can draw a graph that shows how x and y vary in conjunction with one another." CreationDate="2018-01-26T17:48:18.143" UserId="4195" />
  <row Id="9869" PostId="4199" Score="0" Text="Actually, such a statement just defines a relationship between two values. There is nothing necessarily implied about _varying_ in it. It is _you_ that varies the values, meaning mostly that you decide to explore several (or all) pairs in the relationship. A variable in, say Java, is quite a different thing." CreationDate="2018-01-26T17:56:43.963" UserId="1293" />
  <row Id="9770" PostId="4200" Score="0" Text="A variable in algebra is quite unlike a variable in computing. In your fill in the blanks, only one value will be &quot;correct&quot;. It can't vary. This will become extremely confusing later and is often a stumbling block for new programmers who know algebra already." CreationDate="2018-01-22T19:22:07.540" UserId="1293" />
  <row Id="9773" PostId="4200" Score="1" Text="@Buffy it never was for me.  ¯\\_(ツ)_/¯  It was long enough ago that I don't recall if I was aware of graphing functions where variables did vary within a single expression, saw a programming variable changing as equivalent to `x` having different values in each problem in a set of questions, or something else." CreationDate="2018-01-22T19:55:10.057" UserId="1411" />
  <row Id="9811" PostId="4200" Score="0" Text="@Buffy I disagree that it's confusing. X can be anything in Dan's example. Only one value actually makes it true. I think that's kind of the entire point." CreationDate="2018-01-24T00:09:14.410" UserId="990" />
  <row Id="9847" PostId="4200" Score="0" Text="Op's kid is &quot;heavily interested in science, robots, computers&quot;. Shouldn't they start at the beginning and learn algebra? (+1) IME learning equations that solve for X was easy. It's expressions that I don't like, because there's no solution when there's more than one variable. If they understand mathematical expressions, wouldn't they understand variables in computing? AFAIK, you definitely need to understand what X means in an equation before you even touch expressions." CreationDate="2018-01-25T02:41:16.423" UserId="4158" />
  <row Id="9752" PostId="4201" Score="0" Text="Thanks for sharing your experience. Would you mind sharing as well how old you were when you started learning programming, and if it was completely self-taught?" CreationDate="2018-01-22T12:53:24.780" UserId="3982" />
  <row Id="9844" PostId="4201" Score="1" Text="@diaa to be quite honest, I'm not sure at what age exactly I started - especially because, when I did start, it was pretty on and off. I guess I probably started programming more seriously at...12? 13? but I've been programming since at least several years before that. I used Khan Academy alone to teach myself when I started out, and then used codecademy to switch to python (and a little later found out about stack exchange/stack overflow, which was super helpful). So - if that counts as self-taught, yes? I never took a class to teach me." CreationDate="2018-01-24T21:11:37.333" UserId="919" />
  <row Id="9816" PostId="4202" Score="0" Text="I kind of want the metaphor to involve putting the sign on a different chest. (first the sign meant one chest, then the sign meant a different chest, the chest can vary, this is called 'variable assignment' )" CreationDate="2018-01-24T11:33:56.730" UserId="1498" />
  <row Id="9778" PostId="4204" Score="1" Text="Not many explanations are &quot;magic&quot; for any student of any age. An explanation should be more of a &quot;conversation&quot; than an &quot;answer&quot; so that the learner can reveal what they still don't get and the teacher can refine the explanation, filling in the needed bits until the A-Ha experience. This is why &quot;The Perfect Lecture&quot; is an oxymoron." CreationDate="2018-01-22T21:42:15.350" UserId="1293" />
  <row Id="9727" PostId="4205" Score="2" Text="Hi Jonny! Welcome to [cseducators.se]! Can you please elaborate on your answer, adding information about *why* you think a box is such an effective analogy? Maybe some examples of situations where this box analogy works well?" CreationDate="2018-01-22T02:30:27.250" UserId="58" />
  <row Id="9756" PostId="4205" Score="0" Text="Your answer is simple and to the point. Good for kids. longer -&gt; Imagine your lunchbox is a variable. Each day you go to school your friends ask &quot;What do you have for lunch?&quot; You open your lunchbox and look inside. &quot;Today I have an egg sandwich.&quot; &lt;- The lunchbox acts as a variable in that what is inside it can change......................... You could further work on this analogy to show how it might not change (kid refuses to eat egg sandwich and parents refuse to give alternative) or you could show how you can add things to a variable (add fruit the next day or sweets or something). etc etc" CreationDate="2018-01-22T13:10:32.777" UserId="4060" />
  <row Id="9765" PostId="4205" Score="0" Text="Actually, this is the memory model for C.  In Python and JavaScript, what is actually stored is the location of the item in memory, which allows the variable to &quot;find&quot; its object and send messages to it." CreationDate="2018-01-22T17:38:45.430" UserId="21" />
  <row Id="11736" PostId="4205" Score="0" Text="@TryHarder: love the lunchbox analogy. It got me thinking about the variable itself in a very abstract way. I don't think my daughter cares much for her lunchbox but she knows whats in it! Also, looking at the variable as a container has my head spinning." CreationDate="2018-03-21T20:41:59.337" UserDisplayName="user4027" />
  <row Id="9739" PostId="4206" Score="0" Text="When I learn programming as a kid on the C64, the book I used , used the 'a variable is a box with a name like X or $Y that you put things in to remember'. I understood it instantly. Its a good metaphor" CreationDate="2018-01-22T08:14:12.603" UserId="4043" />
  <row Id="9744" PostId="4206" Score="0" Text="+1 I also like the use of a box as a variable stand-in. It lends it's self to further analogy.  All variables (boxes) have a type (maybe colour code them).  They need to be declared (added to the program), and then they can hold anything that fits that type of box. So you can put characters, words and sentences in a red 'String' box. You can put numbers in your blue 'Integer' box, and you can put either in your purple 'Variant' box. You can explain arrays with a box of boxes, collections and lists with boxes that are just grouped together, and constants with locked boxes and so on and so on." CreationDate="2018-01-22T10:08:23.887" UserId="4049" />
  <row Id="9753" PostId="4210" Score="3" Text="Can you elaborate on *how* you'd explain it? I'm not sure what you mean by &quot;as something that keeps changing&quot;" CreationDate="2018-01-22T12:57:26.103" UserId="58" />
  <row Id="9733" PostId="4211" Score="1" Text="[This discussion](https://cseducators.stackexchange.com/questions/27/should-assembly-language-be-taught-in-an-introductory-course-or-soon-after?rq=1) could be useful." CreationDate="2018-01-22T06:57:39.873" UserId="182" />
  <row Id="9767" PostId="4211" Score="0" Text="We teach little man computer, to help teach how computers work. Don't teach x86 it is too complex. LMC is a good first assembler (not a real CPU, but a simulation for learning). A good real CPU, for those that want one is ARM, but better to use high level, unless creating a compiler / dispatcher / memory manager." CreationDate="2018-01-22T18:32:07.740" UserId="204" />
  <row Id="9923" PostId="4211" Score="0" Text="I guess it would be really useful to the retro-gaming industry. Retro-gaming industry has been really popular lately due to nostalgia. I think that writing an emulator requires a knowledge of assembly." CreationDate="2018-01-29T20:05:29.937" UserId="4230" />
  <row Id="9740" PostId="4212" Score="2" Text="No kids are fin at abstract reasoning, and theres evidence in the literature that confirms that (Think about it: Kids learn to speak ex-nihilo other than some rudimentary wetware to jumpstart grammar learning). The trick is to just not use jargon to explain jargon. &quot;A box to put a number or sentence in&quot; works fine." CreationDate="2018-01-22T08:16:53.690" UserId="4043" />
  <row Id="9757" PostId="4212" Score="1" Text="There is plenty of evidence to suggest that kids are not good at abstract reasoning. &quot;Developmental psychologist Jean Piaget argued that children develop abstract reasoning skills as part of their last stage of development, known as the formal operational stage.&quot; This seems related https://www.sciencedirect.com/science/article/pii/S1878929314000516 and excerpt taken from https://www.goodtherapy.org/blog/psychpedia/abstract-thinking" CreationDate="2018-01-22T13:21:09.870" UserId="4060" />
  <row Id="9790" PostId="4213" Score="0" Text="Thank you everyone for your up votes, I'm still dumbfounded that I managed to get enough reputation to comment in this community from one comment overnight. Thanks again guys, hope my answer help(ed/s) :)" CreationDate="2018-01-23T05:47:39.467" UserId="4036" />
  <row Id="9745" PostId="4214" Score="4" Text="Also, some practice of assembly makes the notion of pointer (location containing an adress) really obvious." CreationDate="2018-01-22T10:20:45.750" UserId="2103" />
  <row Id="9780" PostId="4214" Score="3" Text="I remember having a big gray area between hardware and software before learning assembly. I think being able to trace your code all the way to the physical objects it controls is important." CreationDate="2018-01-22T22:15:05.183" UserId="4088" />
  <row Id="9768" PostId="4216" Score="0" Text="Actually, you get in trouble with the Python and Ruby people saying a variable (name) has a type. It isn't that the type is dynamic, it is that only the value to which it then refers has a type. Any name can refer to any value, but a value has an unchangeable type." CreationDate="2018-01-22T18:43:52.043" UserId="1293" />
  <row Id="9796" PostId="4216" Score="0" Text="For future reference, the difference between static and dynamic typing. In some languages (Java...) type checking is done prior to execution (statically), usually by the compiler, but possibly by another tool. In other languages (Python...) that isn't possible in general, so typing is done at run time (dynamically). Statically typed languages are necessarily more verbose than a similar dynamically typed one as more type information usually needs to be included by the programmer. There are exceptions. Standard ML, for example, can statically type most programs without any type notations. Cool." CreationDate="2018-01-23T14:37:36.067" UserId="1293" />
  <row Id="9817" PostId="4216" Score="0" Text="Python is &quot;dynamic&quot; but &quot;strongly-typed&quot; so you can't add 4 + &quot;fred&quot;. JavaScript is &quot;dynamic&quot; and &quot;weakly-typed&quot; so converts types in expressions and causes endless confusion." CreationDate="2018-01-24T11:49:34.513" UserId="4131" />
  <row Id="9791" PostId="4218" Score="1" Text="The messiness depends on the assembly. ARM is less messy than x86, and arguably more useful too." CreationDate="2018-01-23T08:28:39.460" UserId="1219" />
  <row Id="9884" PostId="4218" Score="4" Text="Arm assembler is still pretty messy, it just has different types of mess to x86." CreationDate="2018-01-28T03:40:22.997" UserId="1287" />
  <row Id="9763" PostId="4219" Score="7" Text="IMHO this is the best answer, since it explicitly addresses a way of thinking that is suited for a 9 year old child. Hence accepted :-)" CreationDate="2018-01-22T17:21:16.650" UserId="4017" />
  <row Id="9772" PostId="4219" Score="4" Text="Most of the other answers are technically correct but focus too much on details that are not relevant to a 9-year-old beginner programming level. The names analogy is great for when you start talking about references though. But I think that variables are conceptually different from references, so the box analogy is far less confusing." CreationDate="2018-01-22T19:41:54.497" UserId="4079" />
  <row Id="9777" PostId="4219" Score="0" Text="&quot;Role&quot; is fairly abstract ...I think it's the White House (or rather the Oval Office, but that's perhaps not known to a 9 year old) which contains the current president: [&quot;And finally, be sure to include the full address of the White House to make sure your message gets to us as quickly and directly as possible:&#xA;&#xA;The White House&#xA;1600 Pennsylvania Avenue NW&#xA;Washington, DC 20500&quot;](https://www.whitehouse.gov/get-involved/write-or-call/)" CreationDate="2018-01-22T21:05:47.030" UserId="1675" />
  <row Id="9779" PostId="4219" Score="15" Text="This got protected, so I can't create an answer. I think `my_age` a the perfect variable that any 9 year old can immediately grasp.  It's also a good lead in to classes later `me.age` `you.age` `class person {int age}`" CreationDate="2018-01-22T22:02:45.623" UserId="4088" />
  <row Id="9805" PostId="4219" Score="2" Text="Terrific answer. This also transitions well to the concept of pointers. Who is the president of the senate? You could *reference* the role of the vice president, or you could use the *name* (value) of the vice president. Both are correct now, but only one will still be correct a decade from now." CreationDate="2018-01-23T18:59:02.887" UserId="4115" />
  <row Id="9807" PostId="4219" Score="13" Text="President? Surely &quot;teacher&quot; is an easier concept for a child to grasp? At that age, don't they get a new one every year, juts as presidents change in your example? Or, if they have one teacher per subject, explain how the current teacher variable value changes as the subject, or classroom changes? This might all vary by country but I think that school related concepts are easier to grasp than abstract concepts like &quot;leader&quot; of a &quot;country&quot; - whatever that is when you are 9" CreationDate="2018-01-23T19:38:03.057" UserId="4116" />
  <row Id="9839" PostId="4219" Score="1" Text="@Mawg That a 9-year-old could easily have multiple teachers muddies the waters, so to &quot;localize&quot; things, you could go with &quot;Principal&quot;, of which there is only one in the entire school at any given time.  When I was 9, I knew that Lyndon Johnson was President.  (I was just a tad too young to know *why* he'd gotten the job in the first place, which happened when I was 2.)" CreationDate="2018-01-24T19:36:54.397" UserId="2208" />
  <row Id="9841" PostId="4219" Score="4" Text="Your last sentence, put another way:  When we say that `x` is 40, what we really mean is that `x` is 40 ***right now***." CreationDate="2018-01-24T20:57:12.793" UserId="1824" />
  <row Id="9848" PostId="4219" Score="1" Text="There are a few comments as to a better subject to convey mutability (leaders, teachers), but if something more immediate is warranted, I think you could do well with `day` - if you work on the program every day, this var will be different until the end of the week, when it becomes something it was already.  `Day` also leads to `hour`, `minute` and `second`, which means that you'll be writing a clock in no time." CreationDate="2018-01-25T03:06:38.470" UserId="4159" />
  <row Id="9870" PostId="4219" Score="1" Text="@gunfulker Yes! - so many confusing answers - just work through some simple examples with variables such as: currentYear, birthYear, age. &#xA; Then expand it with: legalDrivingAge, yearLearnDriving, etc, etc." CreationDate="2018-01-26T18:03:45.307" UserId="4195" />
  <row Id="9874" PostId="4219" Score="1" Text="+1 I struggled a lot with this in particular trying to engage my 10 year old niece. This is a great way of thinking about it, and is now going to be my go-to. Using 'teacher' as the variable word works too, in the sense of &quot;Who is your 'teacher'? My 'teacher' is ____.&quot; I feel she'd grasp the concept that 'teacher' is something that can change, even though 'teacher' holds someone's name to it" CreationDate="2018-01-26T22:08:08.477" UserId="4200" />
  <row Id="9894" PostId="4219" Score="0" Text="@Chuck there are some things that should be kept away from a 9-yo child and pointers might be one of them. Of course after guns, drugs, violent TV/fiction... and C++." CreationDate="2018-01-28T19:29:42.137" UserId="963" />
  <row Id="9900" PostId="4219" Score="1" Text="The first time my coding club members encountered variables is with the the player's score. It's so intuitive it barely needs explanation. Honestly I think there's a whole heap of over thinking going on here in the question and answers." CreationDate="2018-01-29T04:10:38.507" UserId="4085" />
  <row Id="9951" PostId="4221" Score="0" Text="You beat me to this because of this question's protected status! Score is arguably the best way to teach a kid about a variable. In fact, the &quot;score&quot; is a variable you use every day, all the time. Watch a basketball game, and ask what the Celtic's score is repeatedly throughout the game, the score changes, but it's still the score. It's a number, it changes, people talk about &quot;the score&quot;, it's shown on the screen, etc. Perfect example. Much less nebulous than &quot;a box&quot; that has a number in it. My second example would be &quot;Mad Libs&quot;." CreationDate="2018-01-30T18:37:44.797" UserId="4082" />
  <row Id="9760" PostId="4223" Score="1" Text="Welcome to [cseducators.se]! It would be preferable to include some of the examples from the resources you refer to in your answer." CreationDate="2018-01-22T15:55:18.067" UserId="150" />
  <row Id="9769" PostId="4224" Score="0" Text="The box analogy has serious problems. Suppose I have 20,000 boxes? How do I find the one I want? The answer leads you deeper and deeper into harder to understand issues. Can I put the same shape into two different boxes? Is it really the &quot;same&quot; shape (value) then?" CreationDate="2018-01-22T19:20:30.560" UserId="1293" />
  <row Id="9774" PostId="4224" Score="0" Text="There may be a better way to explain this, but I think this will cover all the bases at her level and have her still understand it." CreationDate="2018-01-22T19:59:43.580" UserId="4068" />
  <row Id="9776" PostId="4224" Score="0" Text="I worry about explanations that don't smoothly extend to deeper explanations and that need to be &quot;undone&quot; before a student can move forward. I don't think the early explanation needs to be deep or complete, but it needs, at least, to be extensible. That is why I raise the issue of lots of boxes and several variables referring to the same value. If you explanation fails there, it just fails. Even a kid can raise those same questions and eventually a bright (or even random) one will. Never set up a situation in which you need to &quot;unteach&quot; anything to move forward." CreationDate="2018-01-22T20:50:17.703" UserId="1293" />
  <row Id="9788" PostId="4224" Score="1" Text="@Buffy I don't see any problems with the box metapher. If we have multiple boxes, we label them to distinguish them - just like we do give names to variables. And if we have really many of them, we need to put some structure on it, be it scoped names or arrays (rows of boxes). Regarding &quot;same shapes&quot;, that's where most physical analogies break down. But first we would need to define the terms &quot;same&quot; and &quot;value&quot; anyway. In fact, before introducing references/pointers/objects, we do have multiple distinct but *equal* values in the boxes indeed - and some magical cloning device." CreationDate="2018-01-23T03:20:40.127" UserId="660" />
  <row Id="9761" PostId="4225" Score="2" Text="Welcome to [cseducators.se]! Your answer seems to be tying together many concepts, which are just slightly related to variables. It wouldn't make it simpler for a 9 year old." CreationDate="2018-01-22T16:10:39.760" UserId="150" />
  <row Id="9781" PostId="4230" Score="2" Text="And then you can show them all the footguns, giving them an appreciation for memory-safe languages!!" CreationDate="2018-01-22T22:34:49.093" UserId="3896" />
  <row Id="9782" PostId="4230" Score="0" Text="But don't you agree that C usually requires higher overhead from the programmer to produce something interesting compared the Python? I think teens like to see the fruit of the efforts quickly. Even as an adult who used C for years, I wouldn't consider solving a problem in C over python unless the performance was an issue." CreationDate="2018-01-22T23:19:59.983" UserId="3982" />
  <row Id="9785" PostId="4230" Score="1" Text="@diaa Of course C usually requires higher overhead to produce something interesting, but this is a beginners programming course for teens. The concept of arrays and pointers are complicated for teens. C is a great teaching tool for learning programming. It's the same as when teaching basic math, the concept of &quot;showing your work&quot; rather than jumping straight to an answer. C is showing your work, Python is jumping to the answer." CreationDate="2018-01-23T02:26:33.033" UserId="4082" />
  <row Id="10143" PostId="4230" Score="1" Text="I think maybe it's time for __me__ to learn __C__. Even if I don't move from there to __C++__. Good answer and good resources." CreationDate="2018-02-23T00:13:34.770" UserId="104" />
  <row Id="15474" PostId="4230" Score="0" Text="Forgive me, but you should check out modern C++ it has proved over and over again to be the best first language and unlike many misunderstandings it is not an object-oriented language only to explain why let's say that modern cplusplus does not use pointers anymore which is the greatest complaints about teaching C for beginners yet it keeps the understanding of how the machine works there are many papers published about the advantage of using C plus plus as a first language" CreationDate="2019-08-27T06:19:11.987" UserId="3417" />
  <row Id="15476" PostId="4230" Score="0" Text="@Elkady I'm not sure if you're making a joke. Pointers have not been removed from &quot;modern C++&quot;. No one thinks C++ is object oriented. In a beginners course, there should be negligible differences between C and C++." CreationDate="2019-08-27T18:37:09.900" UserId="4082" />
  <row Id="15569" PostId="4230" Score="0" Text="@Gorchestopher H I will say again then that you should check out modern C++. I did not say pointers were removed, I said they are no longer used. C++ is a general language and thus it keeps all the options including C-like syntax but it provides modern ways for programming. For example, you under normal circumstances, how would you justify using C-stings instead of modern string class? or still building &amp; using using linked-lists instead of a vector (which by the way if far more efficient) ...etc.   Modern C++ code look a good deal like Javascript or even Java code. No pointers whatsoever." CreationDate="2019-09-17T01:56:54.263" UserId="3417" />
  <row Id="15570" PostId="4230" Score="0" Text="to clarify: when I say &quot;normal circumstances&quot; I refer to a problem that you  can code without pointers whichever other high-level language you choose yet you would use pointers in C++. this no longer exist." CreationDate="2019-09-17T02:05:52.560" UserId="3417" />
  <row Id="15822" PostId="4230" Score="0" Text="@Elkady To clarify myself, at the entry level I'm not opposed to teaching C++ or old-school C to essentially the same effect. Pointers are very handy for teaching the concept of &quot;reference vs value&quot;. Even if they're not used, or not recommended to be used, it's a great teaching tool." CreationDate="2019-11-06T14:38:11.767" UserId="4082" />
  <row Id="15837" PostId="4230" Score="0" Text="I understand, But this is no more in modern C++. We use references instead.  The beauty of it is that you don't have to change the function call if you switched your function from pass-by-value to pass-by-reference.  And there is no more &quot;loosing your address&quot;." CreationDate="2019-11-07T16:39:11.147" UserId="3417" />
  <row Id="15838" PostId="4230" Score="0" Text="Example: I can write my function as :" CreationDate="2019-11-07T16:39:37.013" UserId="3417" />
  <row Id="15839" PostId="4230" Score="0" Text="Void myfunc (int param). //pass by value.  Or.  Void myfunc (int &amp;param) // pass by reference.  In bother cases the function is called using an int variable. The the parameter param is used inside the function as an int not a pointer" CreationDate="2019-11-07T16:42:05.800" UserId="3417" />
  <row Id="15840" PostId="4230" Score="0" Text="Finally in modern programming, even if we want to use pointers we should use &quot;smart pointers&quot; not the old c style pointers. Smart pointers ensure there we don't get memory leaks" CreationDate="2019-11-07T16:45:51.483" UserId="3417" />
  <row Id="15444" PostId="4234" Score="0" Text="This answer would be probably better suitable as a comment to the question." CreationDate="2019-08-19T20:04:33.553" UserId="8339" />
  <row Id="9800" PostId="4235" Score="0" Text="Welcome to CSEducators. Your profile indicates a lot of interests. For this answer it would be good if you would expand it. Which exercises do you think are especially relevant to the question and why. (We value longer answers more than shorter ones here)." CreationDate="2018-01-23T16:53:21.927" UserId="1293" />
  <row Id="9803" PostId="4235" Score="0" Text="I'd be happy to try to expand on it but I'm not quite sure what information I can provide that isn't redundant to the website. They are all novice level activities that are tangible and help students reach that &quot;a-ha&quot; moment. I could copy/paste one of the activities I particularly like as an example perhaps?" CreationDate="2018-01-23T17:10:01.087" UserId="4106" />
  <row Id="9858" PostId="4236" Score="1" Text="I really like how this example shows abstraction in a fairly intuitive way, without having to directly define it" CreationDate="2018-01-25T13:33:07.587" UserId="4141" />
  <row Id="9862" PostId="4236" Score="0" Text="Yes, but as a first cut the definition of abstraction is pretty simple: A simple name for a complex thing so that the name can be used instead of the complexity." CreationDate="2018-01-25T18:53:31.147" UserId="1293" />
  <row Id="9806" PostId="4237" Score="5" Text="I would love to upvote this; it's probably a great answer!  But it brings up one very important housekeeping issue.  Can you describe enough of the approach so that, even if the link goes dead, this answer won't also go dead?  (There is an &quot;edit&quot; link just under your answer that you can use.)" CreationDate="2018-01-23T19:00:41.000" UserId="27" />
  <row Id="9815" PostId="4237" Score="2" Text="Welcome to Stack Exchange. This is a [question and answer site](/tour), not a link collection. Please take a minute to familiarize yourself with [how to answer](/help/how-to-answer). “There's an answer in this video” [is not an answer](https://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer)." CreationDate="2018-01-24T08:00:47.667" UserId="124" />
  <row Id="13051" PostId="4239" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79519/discussion-on-question-by-rcpinto-how-to-teach-image-processing-and-computer-gra)." CreationDate="2018-06-28T19:30:09.813" UserId="58" />
  <row Id="21810" PostId="4239" Score="0" Text="Let's not do the theory of the empty set." CreationDate="2024-03-18T01:00:33.073" UserId="14351" />
  <row Id="9877" PostId="4241" Score="0" Text="Im' not  Python programmer, but I'd expect an equivalent to a &quot;do { answer=input(&quot;Do you wish to continue?&quot;) } while (answer == &quot;yes&quot;)&quot;, or even &quot;while (answer = input(&quot;....&quot;) == yes);&quot;" CreationDate="2018-01-27T15:45:18.610" UserId="1537" />
  <row Id="9886" PostId="4241" Score="1" Text="@pojo-guy python does not have `do …while`, and combining assignment into a predicate has been shown to cause much confusion in professional programmers (I would expect the same for beginners)." CreationDate="2018-01-28T10:50:06.127" UserId="204" />
  <row Id="9928" PostId="4241" Score="1" Text="Do you need `answer`?  `while input( &quot;Do you wish to continue?&quot; ) == &quot;yes&quot;: ...`" CreationDate="2018-01-30T03:27:52.207" UserId="4030" />
  <row Id="9977" PostId="4241" Score="0" Text="The reason you teach the 1st before the 2nd is because it is the logical result of a flowchart. You loop if the answer is yes, so, you enter the loop if the answer is yes, then you continue till it is not yes. The 2nd example is an optimization of the 1st." CreationDate="2018-01-31T19:29:16.963" UserId="4082" />
  <row Id="9978" PostId="4241" Score="0" Text="@GorchestopherH you have precisely said a reason why the 2nd is better. We are not in the 1960s any more. We now have structured programming, and don't use flow chart. What is more there is no reason that a flow chart can not model ether of these two programs." CreationDate="2018-01-31T19:38:20.600" UserId="204" />
  <row Id="9979" PostId="4241" Score="0" Text="@ctrl-alt-delor I may have slightly mis-read this, I thought you were asking for a reason to teach one *before* the other, not *instead*. Certainly the second is better, but since the second logically &quot;follows&quot; the first, I would say that the first is a good introduction to the second, regardless of the decade we are in. Also, the existence of structured programming doesn't mean flowcharts are obsolete, especially for teaching purposes..." CreationDate="2018-01-31T20:00:03.790" UserId="4082" />
  <row Id="9980" PostId="4241" Score="0" Text="@GorchestopherH you may want to contribute to this question on teaching flowcharts https://cseducators.stackexchange.com/q/3696/204  (I have been convinced that pseudo code is useful in teaching, but not flowcharts, except when teaching machine code, or human processes: how to tread a patent: check airway …)" CreationDate="2018-01-31T20:14:59.220" UserId="204" />
  <row Id="10156" PostId="4242" Score="0" Text="Of course you don't write whole programs in asm.  You write hot loops or functions in asm and call them from C.  Modern compilers are fantastic at *large-scale* optimization, making &quot;brittle&quot; asm that takes advantage of lots of things that happen to be true after inlining / constant-propagation.  Doing this around some hand-tuned code (small enough to be updated in future) can give great results.  Compilers definitely miss local optimizations sometimes.  Often you can use intrinsics to manually vectorize or something, if the missed-optimization was auto-vectorization related, though, not asm." CreationDate="2018-02-23T06:43:35.317" UserId="1654" />
  <row Id="10157" PostId="4242" Score="0" Text="As you point out, actually hand-writing in asm tunes only for current microarchitectures, so in my experience the best thing to do when performance tuning with future-proofing in mind is to read the compiler output, and if the compiler didn't make optimal asm, tweak the source to hand-hold it into finding a more optimal way to compile (See [my Collatz conjecture answer on SO](https://stackoverflow.com/a/40355466/224132)).  Then you have nice asm with your current compiler for your current hardware.  Some future compiler can hopefully make different asm if needed for future hardware." CreationDate="2018-02-23T06:48:24.723" UserId="1654" />
  <row Id="9819" PostId="4243" Score="1" Text="This is a very interesting idea. Thanks for taking the time to answer, and welcome to [cseducators.se]!" CreationDate="2018-01-24T12:32:30.517" UserId="58" />
  <row Id="9910" PostId="4243" Score="1" Text="This gave me some ideas: The solitaire game with the jumping marbles, but as a grid https://cdn.pixabay.com/photo/2016/03/31/18/35/solitaire-1294487_960_720.jpg Tactile touch screen (may be not available yet) https://i.ytimg.com/vi/JelhR2iPuw0/maxresdefault.jpg" CreationDate="2018-01-29T14:14:10.287" UserId="204" />
  <row Id="9838" PostId="4246" Score="0" Text="I just had a look, I went to the examples. I see sliders, I see buttons. I slide sliders, I press button. But that is it, nothing happens. Am I doing something wrong?" CreationDate="2018-01-24T18:53:56.757" UserId="204" />
  <row Id="9846" PostId="4246" Score="0" Text="Most of the models have a &quot;Setup&quot; button then a &quot;Go&quot; button. I assume you're talking about the climate simulation which comes up first on the web version - it works if you press those two in order. (Typical code written by scientists ;-)" CreationDate="2018-01-25T02:10:20.187" UserId="4131" />
  <row Id="9853" PostId="4246" Score="0" Text="Thanks I tried that last time, this time it worked (different models, so that may be a factor)." CreationDate="2018-01-25T10:32:01.270" UserId="204" />
  <row Id="9835" PostId="4247" Score="0" Text="Not the firs program, but the first program is like one I have seen early in a course. The error I made is just an example of why you may need to re-edit." CreationDate="2018-01-24T18:33:49.293" UserId="204" />
  <row Id="9836" PostId="4247" Score="0" Text="Could you add some advice as to how to introduce loops? (in python). I like to start with a `forever` loop in scratch. But python does not have them. [May be this is a new question]" CreationDate="2018-01-24T18:37:41.927" UserId="204" />
  <row Id="9837" PostId="4247" Score="0" Text="What you have is fine, but it is a lot for a first program. In python you can say while true:, of course. You can also write a function that just loops forever and call it. Since you write it, you can have it expect a lambda expression. (Caveat - I haven't worked out the details of this and tried to integrate it early, but I think it would work.) Python is pretty flexible." CreationDate="2018-01-24T18:52:56.643" UserId="1293" />
  <row Id="9832" PostId="4248" Score="1" Text="Welcome to [cseducators.se]. Take a look around, I expect you'll find lots of places to contribute. :)" CreationDate="2018-01-24T17:46:53.647" UserId="27" />
  <row Id="9859" PostId="4249" Score="0" Text="I'd need more practical examples of the maths tasks you'll need to do, equations, statistics, 2D/3D graphs and so forth. I learnt all my maths by programming graphs, because you change variables and you get instant feedback for your input. If you can find a colorful image generation program, it's good to do some images. FooPlot is very basic. you should know how to write sines/cosines/and change their amplitudes and frequencies and also graph squares/powers. My own self learnign of maths was 1/making birdsongs and synths on Reaktor 5 builder, 2/Milkdrop for winamp making images 3/Unity3D" CreationDate="2018-01-25T14:28:28.263" UserId="4174" />
  <row Id="9873" PostId="4249" Score="0" Text="I can give you a pdf of the course book thst Twente provided, there are problem sets on the end of each chapter. Also Guided problem sets and the old exams" CreationDate="2018-01-26T20:45:14.410" UserId="4137" />
  <row Id="9831" PostId="4250" Score="0" Text="Welcome to [cseducators.se].  This is a great first answer, and we're always glad to have CS educators join us here.  :)  It sounds like you'll have a lot to contribute.  Feel free to ping me if you need any help navigating around while you get started.  (Just add another comment to this answer and start typing `@b` and my name should pop up.)" CreationDate="2018-01-24T17:44:52.010" UserId="27" />
  <row Id="9901" PostId="4252" Score="0" Text="The necessary material surely depends on the syllabus of the CS degree. I don't remember ever needing probability or combinatorics (which I assume is what you mean by &quot;*counting*&quot;). Could you be more specific about the requirements?" CreationDate="2018-01-29T09:32:10.673" UserId="1219" />
  <row Id="9906" PostId="4252" Score="0" Text="Courses in finite/discrete math often include at least elementary combinatorics and some probability. I'm surprised yours had no need of it at all." CreationDate="2018-01-29T12:10:28.207" UserId="1293" />
  <row Id="9857" PostId="4256" Score="1" Text="That's a decent visual explanation. I feel like it would be understandable to a young learner, even if they're not strong in the math department, because it's less abstract than simply trying to explain the concept of a variable. Personally I'd approach it with only the blue cup for starters, to keep it as simple as possible. Once they've got a basic understanding of that, then introduce other variables like the red or clear cups, or shift it to something other than numbers. Bonus points for the &quot;You are the program&quot; bit :)" CreationDate="2018-01-25T13:27:59.533" UserId="4141" />
  <row Id="9861" PostId="4257" Score="0" Text="Welcome to CSEducators. I think that was a great answer. Come back often." CreationDate="2018-01-25T16:53:43.893" UserId="1293" />
  <row Id="10155" PostId="4259" Score="0" Text="I'm not an educator (except on SO) but I don't think it's very plausible to get to SSE / AVX (x86 SIMD) in 1 day if starting from scratch, with students who don't yet know about registers and instructions / control flow.  A lot of SO questions have code with `jmp foo` / `foo:`  (i.e. jump over whitespace in the source to the next block of code).  IDK if that's sometimes left over from moving blocks around, but very often there's a lack of understanding that execution continues to the next instruction on its own unless you specifically stop it. (Maybe branchless / SIMD code is actually easier?)" CreationDate="2018-02-23T06:38:18.863" UserId="1654" />
  <row Id="9872" PostId="4261" Score="1" Text="Unfortunately this view of OO needs work. If Animal is abstract or an interface then ok. But the sound an animal makes is not a good use of polymorphism (by inheritance anyway). Better it is a good use of programming by composition, which OO also supports in fantastic ways. An animal _has a_ sound which is another object type. You can find better descriptions of OO and polymorphism given in many answers on this site. Have a look around. (Note that I've taught OO since about 1985)" CreationDate="2018-01-26T20:37:12.150" UserId="1293" />
  <row Id="9883" PostId="4263" Score="0" Text="Welcome to CSEducators. Thanks for an interesting question. I hope you've had some time to look around here." CreationDate="2018-01-28T01:33:16.830" UserId="1293" />
  <row Id="9885" PostId="4263" Score="1" Text="For domain change, are you referring to space to frequency?" CreationDate="2018-01-28T10:27:21.440" UserId="204" />
  <row Id="9985" PostId="4263" Score="0" Text="@Buffy Yes... great project!" CreationDate="2018-02-01T01:38:46.253" UserId="3842" />
  <row Id="9986" PostId="4263" Score="0" Text="@ctrl-alt-delor Yes, of course." CreationDate="2018-02-01T01:39:13.090" UserId="3842" />
  <row Id="9996" PostId="4263" Score="1" Text="@Totera I have put this information into the question." CreationDate="2018-02-01T09:52:18.440" UserId="204" />
  <row Id="9895" PostId="4264" Score="0" Text="`I would start with the lossless algorithms` seconded. JPEG is essentially `quantization + sampling + classical lossless techniques + transform`" CreationDate="2018-01-28T19:59:03.067" UserId="757" />
  <row Id="9896" PostId="4264" Score="1" Text="`I mention these 3 as I know this has been done` do you happen to have a reference for this? I bet it'd be an entertaining read." CreationDate="2018-01-28T19:59:58.370" UserId="757" />
  <row Id="9902" PostId="4264" Score="0" Text="@TobiaTesan Sorry it was a long time ago, and I don't remember." CreationDate="2018-01-29T10:02:22.860" UserId="204" />
  <row Id="9990" PostId="4264" Score="0" Text="Thanks, I can't deal with maths behind JPEG, but run-length encoding and visual perception are surely within the reach of my students." CreationDate="2018-02-01T02:15:50.377" UserId="3842" />
  <row Id="9888" PostId="4265" Score="2" Text="This is a really thorough answer. Thank you for taking the time to write it!" CreationDate="2018-01-28T12:58:04.670" UserId="58" />
  <row Id="9891" PostId="4265" Score="0" Text="Also note how in the final step [the DCT matrix is traversed diagonally](http://dspguide.com/graphics/F_27_14.gif), in order to facilitate RLE." CreationDate="2018-01-28T15:43:38.043" UserId="757" />
  <row Id="9987" PostId="4265" Score="0" Text="Thanks, excellent explanation of JPEG, but way too complex for my class (first year)." CreationDate="2018-02-01T02:03:27.803" UserId="3842" />
  <row Id="9992" PostId="4265" Score="0" Text="This explanation is targeted at the teacher. If you don't understand how it works, you can't teach it even on a basic level." CreationDate="2018-02-01T06:33:42.063" UserId="1536" />
  <row Id="9897" PostId="4268" Score="1" Text="This kind of thinking doesn't scale. The whole purpose of using a meaningful boolean condition in a loop declaration is so that someone (who could well be yourself!) maintaining the code later can determine at a glance the approximate behavior and purpose of the loop. Writing loops this way forces you to later read every line of code to figure out even the most basic of behaviors; inner  `break` statements can be arbitrarily nested, and thus arbitrarily complex." CreationDate="2018-01-29T00:45:53.037" UserId="27" />
  <row Id="9898" PostId="4268" Score="0" Text="@BenI.  I see student struggling to write loops, because they're thinking about too many things at once.  Scaling is and should be their last concern when first learning loops.  However, your point is taken, in that we should teach scaling, though perhaps not before the basic concepts of loops." CreationDate="2018-01-29T01:10:11.350" UserId="3799" />
  <row Id="9899" PostId="4268" Score="0" Text="Interesting point, and you may be right. I teach sophomores, so they have already written loops before they see me.  Perhaps this could be a viable approach at the start." CreationDate="2018-01-29T01:24:50.677" UserId="27" />
  <row Id="9903" PostId="4268" Score="0" Text="While I don't like the resulting code. I do like the idea of starting with an infinite loop, and then transforming it, to have an exit condition. I have also had problems explaining `while True`." CreationDate="2018-01-29T10:12:00.860" UserId="204" />
  <row Id="9904" PostId="4269" Score="0" Text="This question is related, but different https://cseducators.stackexchange.com/q/4241/204" CreationDate="2018-01-29T10:42:40.227" UserId="204" />
  <row Id="9909" PostId="4269" Score="8" Text="Since languages are defined recursively, it is pretty hard to teach them strictly linearly so that _nothing_ ever needs to be passed forward. This is one (not the most important) reason for a Spiral approach to teaching in which topics are first introduced in a simple way and then returned to later, both reviewing and deepening the knowledge." CreationDate="2018-01-29T13:24:06.377" UserId="1293" />
  <row Id="9919" PostId="4269" Score="0" Text="You could instead use `for(;;)` as your infinite loop example if you want to start with `for` loops.  It might be easier to explain that an &quot;infinite&quot; loop is one that doesn't have an exit condition at the top." CreationDate="2018-01-29T19:09:56.693" UserId="753" />
  <row Id="9921" PostId="4269" Score="0" Text="@IllusiveBrian python does not have `for(;;)`, and as you say I just have to explain that it has no exit condition, so then have to explain exit condition. Though a different approach of saying that the `;` are separators, we will look at what goes in the gaps latter, my be preferable. As there is nothing for the students to try to ignore. It is easier to ignore nothing. Unfortunately this is not an option in python." CreationDate="2018-01-29T19:37:16.960" UserId="204" />
  <row Id="9936" PostId="4269" Score="0" Text="In my school, we started with C and for loop was forbidden. You dont need it so dont use it." CreationDate="2018-01-30T13:11:43.843" UserId="2833" />
  <row Id="9997" PostId="4269" Score="1" Text="I started in a language that only had &quot;goto&quot;. All other structures can be expressed and are ultimately executed in that paradigm." CreationDate="2018-02-02T03:26:19.593" UserId="1537" />
  <row Id="9998" PostId="4269" Score="0" Text="@pojo-guy Back to to low-level first or high-level first. see https://cseducators.stackexchange.com/q/3696/204" CreationDate="2018-02-02T09:45:20.357" UserId="204" />
  <row Id="10005" PostId="4269" Score="0" Text="@ctrl-alt-delor Yep, it's a conumdrum. In an ideal world you would teach both simultaneously.  I can already see the steam coming from the ears of prospective future programmers though." CreationDate="2018-02-02T16:03:16.480" UserId="1537" />
  <row Id="9907" PostId="4270" Score="0" Text="You are correct that we should not do it all at once. While I have not mentioned, the other thinks that could be interleaved, please do not take this of evidence that I would not interleave other learning." CreationDate="2018-01-29T13:10:36.907" UserId="204" />
  <row Id="9908" PostId="4270" Score="0" Text="I have added a section to question to explain the problem." CreationDate="2018-01-29T13:17:03.063" UserId="204" />
  <row Id="9929" PostId="4271" Score="0" Text="I've seen `for`-loops introduced after seing a lot of examples of `while`-loops with a counter that is incremented once per loop, and seing the utility of a more compact way to do that." CreationDate="2018-01-30T09:38:33.740" UserId="4234" />
  <row Id="9932" PostId="4271" Score="0" Text="Makes sense. I was thinking that with an ideal language I would teach iteration before conditional. Conditional code is over used, in most programs that I have seen. I have also done a proof that you can do any thing (Turing complete) without conditionals, so long as you can loop. (also you only need 2 loops: the super loop and the container iterator). Try it for a challenge." CreationDate="2018-01-30T10:13:38.950" UserId="204" />
  <row Id="9911" PostId="4272" Score="1" Text="This doesn't really sure like an answer to the question (beyond the first sentence). Can you please add a more direct answer to the question as asked?" CreationDate="2018-01-29T14:38:55.877" UserId="58" />
  <row Id="9912" PostId="4274" Score="1" Text="The Amazon link at the US site is: https://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/ and yes, Structural Induction is a big win." CreationDate="2018-01-29T15:28:18.887" UserId="1293" />
  <row Id="13760" PostId="4274" Score="0" Text="Other proof techniques like what?  :D  (But really?)" CreationDate="2018-11-02T19:41:46.887" UserId="1103" />
  <row Id="13761" PostId="4274" Score="1" Text="@Wildcard, [proof by intimidation, proof by eminent authority](http://mfleck.cs.illinois.edu/proof.html), etc. ;) More seriously, there are proofs by contradiction and by construction in CS, but proof by structural induction is the natural fit when so many proofs are precisely about structures which are defined recursively." CreationDate="2018-11-02T19:52:59.383" UserId="1219" />
  <row Id="9913" PostId="4275" Score="1" Text="This is a very interesting answer. Welcome to [cseducators.se]! My only suggestion is that it might be helpful for you to draw a more direct connection between the question and the answer." CreationDate="2018-01-29T15:33:06.253" UserId="58" />
  <row Id="9914" PostId="4275" Score="1" Text="I really like this perspective, and I hadn't quite thought about it stated so simply and cleanly before.  (I also don't generally teach absolute beginners, so I don't have a ton of experience having to clarify this particular idea.)  This also puts a nice punctuation mark on Bryan R.'s [observation](https://cseducators.stackexchange.com/a/4271/27), &quot;I prefer to teach `while` loops as part of my unit on `if`/`else` statements since the syntax and thought process are virtually identical.&quot;" CreationDate="2018-01-29T15:54:27.007" UserId="27" />
  <row Id="9915" PostId="4275" Score="0" Text="While I agree that this is how they are usually implemented. This is back to the structured/un-structured high/low level argument, that you were not here for. (yes I said usually: for example on the ARM — the most popular ≥ 32bit cpu on the planet at this time — conditional and iteration are implemented different at the very low level. For a backward conditional branch of a loop the branch predictor assumes that the branch will happen. For a forward conditional of an if it is assumed not to happen. Arm also has conditional instructions. )  But thanks for contributing." CreationDate="2018-01-29T16:09:36.330" UserId="204" />
  <row Id="9916" PostId="4275" Score="1" Text="&quot;*The only difference between an IF-Else and a Loop of any kind is whether you branch downward or back to the top*&quot; just isn't true.  DO...WHILE and LOOP...UNTIL and FOR X UNTIL Y STEP Z are nothing but (very useful) syntactic sugar laid over TEST and BRANCH." CreationDate="2018-01-29T16:45:12.863" UserId="3132" />
  <row Id="9918" PostId="4275" Score="0" Text="@RonJohn What you said is exactly what I got out of what user4226 posted. He also said that both if/else and all of the loop constructs are just test and branch.  What are you saying that is different?" CreationDate="2018-01-29T17:09:31.883" UserId="27" />
  <row Id="9920" PostId="4275" Score="0" Text="@BenI. I directly quoted this part that isn't true.  Specifically, &quot;**whether you branch downward or back to the top**&quot;  Then I explained why.  Maybe I didn't do a good enough job, though: you can have loops that check the condition at the top (WHILE...DO) and you can have loops that check the condition at the bottom (DO...WHILE).  However, C and it's derivatives don't have DO...WHILE, so it seems to have fallen out of favor.  I agree with everything else that user4226 (and Bryan R) wrote." CreationDate="2018-01-29T19:17:07.513" UserId="3132" />
  <row Id="9922" PostId="4275" Score="0" Text="@RonJohn Oh, I see.  The quibble was about whether the jump upwards was as a result of the test, or whether it was an unconditional jump.  It still seems to reduce to the same basic idea: loops involve a jump backwards while `if`s involve a jump forwards." CreationDate="2018-01-29T19:39:27.803" UserId="27" />
  <row Id="9924" PostId="4275" Score="0" Text="@BenI. Correct, that's my disagreement.  Here's what I'm talking about:  https://en.wikipedia.org/wiki/Do_while_loop and https://en.wikipedia.org/wiki/While_loop" CreationDate="2018-01-29T20:36:42.033" UserId="3132" />
  <row Id="9933" PostId="4275" Score="0" Text="@RonJohn Hm, C most certainly has a DO...WHILE construct. Did you mean that Python does not have it?" CreationDate="2018-01-30T10:45:50.280" UserId="4236" />
  <row Id="9942" PostId="4275" Score="0" Text="@pipe you're absolutely right.  It's been a while since I've used C, and forgot about it." CreationDate="2018-01-30T14:30:31.423" UserId="3132" />
  <row Id="9945" PostId="4275" Score="3" Text="The importance of this answer is that it emphasizes underlying concepts. I think it can *help*, not only hurt, to teach this first - *un*structured control in various forms, and then teach structured control. That presents an excellent opportunity to teach **why** structured control is preferable. IOW, more or less follow the history -- the history itself evolved the way it did for good reasons. It's not just about teaching the use of a particular language; it's about teaching what's going on - *why* we do things the way we do. The various iteration constructs did not fall from the sky." CreationDate="2018-01-30T15:31:34.910" UserId="4241" />
  <row Id="10020" PostId="4275" Score="0" Text="We do iterations, not for the pleasure to do so, but as a way to compute some results (say average of an array). Unstructured control is what the computer can do, at its lower level. But what we do goes from &quot;divide sum by size&quot; then &quot;compute sum by adding all values&quot; then &quot;use a variable with initial value 0 and add each values&quot;, and &quot;range over all array elements&quot; and &quot;use an index starting from 0 etc&quot; (if we dont have a foreach loop over collections) and LAST use a for/while/if-goto loop. We jump from the sky." CreationDate="2018-02-07T10:13:37.567" UserId="2103" />
  <row Id="9930" PostId="4277" Score="0" Text="Some good ideas, however I am looking for advice on order to teach loops in a non-ideal language." CreationDate="2018-01-30T10:02:00.060" UserId="204" />
  <row Id="9965" PostId="4279" Score="0" Text="&gt;&quot;ask the right question&quot; thats what i meant =)" CreationDate="2018-01-31T10:41:35.970" UserId="1868" />
  <row Id="9931" PostId="4280" Score="0" Text="nice answer. As I think that conditionals are over used, I would prefer this: `user_wishes_to_continue = (answer == &quot;yes&quot;)`" CreationDate="2018-01-30T10:05:41.227" UserId="204" />
  <row Id="10059" PostId="4280" Score="0" Text="`raw_input` vs `input` I don't get it. Was this true in python 2? I don't remember. In python3 I get `name 'raw_input' is not defined`." CreationDate="2018-02-11T12:57:24.953" UserId="204" />
  <row Id="10060" PostId="4280" Score="0" Text="It’s true for python 2; with regular old “input” it tries to interpret the input as a python expression" CreationDate="2018-02-11T13:02:30.100" UserId="4233" />
  <row Id="9943" PostId="4282" Score="0" Text="@NunoGilFonseca, if you explain more about the cultural context, you may get more answers related to your situation.  I seem to recall that you are in Portugal, but the top answers are all contextualized within the US or UK." CreationDate="2018-01-30T14:44:28.607" UserId="27" />
  <row Id="9949" PostId="4282" Score="0" Text="&quot;In this paper, we present TMOSS, a tool that analyzes the intermediate steps a student takes to complete a programming assignment. We find that students who exhibit excessive collaboration typically deviate from the standard work pattern, use fewer class tutoring resources than their peers, and perform worse on assessments.&quot; .....I'm antisocial, don't like to work with others on group assignments, and tend to almost always do poorly on the first exam (nerves) and then rebound. Are you seriously claiming that people like me are without doubt cheaters?" CreationDate="2018-01-30T18:05:33.503" UserId="1906" />
  <row Id="9959" PostId="4282" Score="0" Text="Certainly not, and that is the reason you don't accuse anyone based on statistics. But you might have characteristics that cheaters do, as might I. But statistics can be used to improve instruction, and that seems to be the focus of the cited paper." CreationDate="2018-01-30T21:41:42.960" UserId="1293" />
  <row Id="9966" PostId="4282" Score="0" Text="As long as both writers fully understand and can explain what's in the paper, does it really matter if they use the same words because they figured it out together? I'd think the goal of education is understanding, not writing unique pieces." CreationDate="2018-01-31T12:44:57.100" UserId="4246" />
  <row Id="9969" PostId="4282" Score="0" Text="I understand that it is not the intention of the paper, but I have difficulty with the use of &quot;collaboration&quot; and &quot;plagiarize&quot; as used here. Collaboration is openly cooperating, plagiarism is stealing and claiming that other's work is our own. Combining these two words in this way is oxymoronic." CreationDate="2018-01-31T13:27:13.010" UserDisplayName="user4104" />
  <row Id="9973" PostId="4282" Score="0" Text="@mickeyf it reminds me of that counterfeiter who reproduced famous paintings so well the end-result was nearly indistinguishable without advanced forensic techniques. In the case of art, uniqueness is part of the value. Can we really say that for good code? The end result is two beautiful paintings or two functioning pieces of well-written code. I personally think the world would be better off with more good code. In the end, you can't force people to be good at anything so trying to identify at-risk students seems rather pointless. You can either do the job or not." CreationDate="2018-01-31T15:47:50.667" UserId="4246" />
  <row Id="10270" PostId="4282" Score="0" Text="A preprint of the paper can be found at http://stanford.edu/~cpiech/bio/papers/tmoss.pdf" CreationDate="2018-03-07T21:38:04.897" UserId="827" />
  <row Id="9972" PostId="4283" Score="0" Text="Whose time are they really wasting by not teaching themselves skills they need in the workplace anyway?" CreationDate="2018-01-31T15:42:54.750" UserId="4246" />
  <row Id="9935" PostId="4284" Score="0" Text="Hmmm. If `programShouldRun` is a variable then this isn't specifically an infinite loop. It may turn out to be, but that depends on the future possible value of the variable. Constants are possible in Python, but a deeper concept and language specific, of course." CreationDate="2018-01-30T12:25:12.820" UserId="1293" />
  <row Id="9937" PostId="4284" Score="0" Text="Yeah, that's definitely possible, though on the other hand that could be used as a lead-in to the difference between an infinite loop and one that eventually terminates. &#xA;&#xA;&quot;Up until now we've said that `programShouldRun` is always `True`, but what do you think happens if we set it to `False` at the bottom of the loop?&quot; &#xA;&#xA;Alternatively: &quot;So, this program runs forever, but we want to exit when [thing we are looking for]. Does anyone have any idea about how we'd go about fixing that?&quot;" CreationDate="2018-01-30T13:27:09.620" UserId="4239" />
  <row Id="9938" PostId="4284" Score="0" Text="But don't miss the point that the question was about _classifying_ loops. An infinite loop should clearly say, semantically or syntactically, that &quot;this loop is infinite&quot;. Controlling it specifically with a variable says just the opposite. It is about the meaning of the code, not just about how it plays out. Students (and professionals) often write infinite loops by mistake, forgetting to change a condition in some way. Your technique works only in a language that can clearly specify a constant value. For example an alternate symbol for True." CreationDate="2018-01-30T13:49:38.143" UserId="1293" />
  <row Id="9939" PostId="4285" Score="0" Text="I don't know if it is still true, but at a time in the past, Dartmouth College had an Honor Code that sounds, if I remember correctly, quite a bit like what you say above, especially your fourth point." CreationDate="2018-01-30T13:53:56.030" UserId="1293" />
  <row Id="9946" PostId="4285" Score="1" Text="For rule 2, how does that work without being too onerous? When I try to solve a new problem (at work, not school) I can end up opening dozens (hundreds?) of tabs searching for hints or answers. The majority are not useful (disregarded in seconds) but some are (or more often bits combined from several sources will enable me to develop my own solution). How do you not end up with pages and pages of links, and how are they of any use to you? What goal does this actually accomplish?" CreationDate="2018-01-30T16:27:47.537" UserId="1859" />
  <row Id="9947" PostId="4285" Score="0" Text="@mattumotu I have no answer for you, other than I never have received more than about 15 sources on anything. I suppose that my students  naturally prioritize a little bit, and omit items below a certain threshold of helpfulness. They haven't asked me for clarification about this, either, I'm afraid. I wish I could give you a more precise answer, I can only say that it hasn't been a problem in practice for me." CreationDate="2018-01-30T16:38:08.167" UserId="27" />
  <row Id="9948" PostId="4285" Score="0" Text="@BenI. ok thanks, could just be the difference between classroom and work. (for one I assume you teach them something(!) often I just get a new problem, sometimes no context!)" CreationDate="2018-01-30T16:42:41.667" UserId="1859" />
  <row Id="9968" PostId="4285" Score="0" Text="You should be able to weed out the people who copy without understanding by asking them explain their code and the concepts behind it. Since you're only doing this for cases where there is doubt, it shouldn't take that much extra effort." CreationDate="2018-01-31T12:49:40.987" UserId="4246" />
  <row Id="9970" PostId="4285" Score="0" Text="@G_V Everyone explains their code to me, even the kids for whom there is no doubt." CreationDate="2018-01-31T13:50:26.797" UserId="27" />
  <row Id="9971" PostId="4285" Score="0" Text="@BenI. So what is the effective difference between someone who initially writes the code and understands how it works and someone who understands how it works? Seems like a waste of time trying to differentiate between these types of students, since in the workplace they need to write code anyway. I'm someone who learns better by looking at solutions to complex problems and then applying the concepts extracted to new situations. The end result is someone who can translate an understanding of abstract concepts to working code." CreationDate="2018-01-31T15:41:33.597" UserId="4246" />
  <row Id="9974" PostId="4285" Score="0" Text="@G_V There is no difference from my perspective. And I don't worry myself too much over that form of &quot;cheating&quot;." CreationDate="2018-01-31T17:30:18.967" UserId="27" />
  <row Id="9953" PostId="4286" Score="3" Text="You make a decent point in your answer, but at least to me, the abstract quoted by the OP reads like it's using &quot;excessive collaboration&quot; as an euphemism for &quot;having your friend do your schoolwork&quot;. I don't think you'd consider *that* kind of &quot;collaboration&quot; to be beneficial for learning." CreationDate="2018-01-30T19:09:38.940" UserId="1439" />
  <row Id="9954" PostId="4286" Score="0" Text="Of course, depending on what levels you teach at - say, for an AS degree or other &quot;trade school&quot; level teaching - you may find that having students work only alone effectively &quot;breaks&quot; them for the job market.  The college I work for had a reputation of putting out AS graduates that really knew how to program in multiple languages... but they had lots of problems working with other programmers, etc. and sharing code back and forth, using various branches from a versioning system, etc." CreationDate="2018-01-30T19:33:59.183" UserId="662" />
  <row Id="9961" PostId="4286" Score="0" Text="This is an answer by Stack Exchange standards. It's called a [frame challenge](https://meta.stackexchange.com/q/263661/216712), or the question can be called an [XY-problem](https://meta.stackexchange.com/q/66377/216712)." CreationDate="2018-01-30T23:20:44.213" UserId="981" />
  <row Id="9967" PostId="4286" Score="0" Text="@IlmariKaronen - If both people can explain the concepts and show a good understanding of what they had to learn, where is the issue? It's only really a problem for the school if people copy work without having understanding, because people get the same titles and diplomas." CreationDate="2018-01-31T12:47:18.237" UserId="4246" />
  <row Id="9981" PostId="4287" Score="0" Text="Welcome to CSEducators. An interesting metaphor." CreationDate="2018-01-31T20:15:50.590" UserId="1293" />
  <row Id="9989" PostId="4289" Score="1" Text="I like a lot of Meyers work.  He's good at hitting the conceptual level in a platform agnostic manner" CreationDate="2018-02-01T02:14:59.613" UserId="1537" />
  <row Id="9962" PostId="4292" Score="0" Text="Can you please summarize or add some important excerpts from the link? We want the answer to still be valuable even if the link dies." CreationDate="2018-01-31T02:38:59.313" UserId="58" />
  <row Id="9982" PostId="4293" Score="0" Text="Agree, I will also add. Copyright infringement is often confused with plagiarism. However they are very different: Copyright infringement is using someone else's work without there permission. Plagiarism is using someone else's work and claiming it to be your own (usually, but not only in academia). Thus plagiarism is a type of fraud, where as Copyright infringement is copyright infringement (some would say theft, but theft is to deprive someone of something, so clearly it is not that)." CreationDate="2018-01-31T23:43:37.697" UserId="204" />
  <row Id="9983" PostId="4293" Score="1" Text="@ctrl-alt-delor Copyright infringement _is_ theft. If nothing more than taking away the creator's right to decide what is done with their creation. Of course, usually, the infringement involves reducing the owner's potential income from the sale or licensing of their work. Again, theft." CreationDate="2018-01-31T23:46:39.460" UserId="104" />
  <row Id="9984" PostId="4293" Score="1" Text="As much as buying a competitors product is theft. Or stealing a gold by running faster than anyone else. I am not saying it is not illegal to breach copyright. I am not even saying that is in not un-ethical. I am just saying that it is not theft. Theft is a very poor metaphor." CreationDate="2018-01-31T23:51:52.963" UserId="204" />
  <row Id="9988" PostId="4293" Score="0" Text="+1 Shucks, now I have to stop annotating code fragments lifted from the public domain with the tag &quot;blatantly plagiarized from &lt;insert url here&gt;&quot;" CreationDate="2018-02-01T02:09:47.070" UserId="1537" />
  <row Id="9991" PostId="4293" Score="0" Text="@pojo-guy Not really, but now you know what to _include_ in the assessments later. :D. Plagiarism exists, just not between collaborators. Such a notation doesn't signal a student _at-risk_ either, that student has already crossed the line." CreationDate="2018-02-01T02:31:06.923" UserId="104" />
  <row Id="9993" PostId="4293" Score="0" Text="The idea of owning a piece of a math concept is laughable to me. Imagine a world where arrays or binary search trees are someone's private property and you have to credit them every time you use them. Imagine owning the concept of 'chair', the royalties you'd receive would be amazing." CreationDate="2018-02-01T09:03:14.120" UserId="4246" />
  <row Id="9994" PostId="4293" Score="1" Text="@G_V I believe they call that a _patent_, and yes some people get laughably rich from _owning_ such things. Think GIF file format, MP3 encoding, RSA encryption." CreationDate="2018-02-01T09:04:57.237" UserId="104" />
  <row Id="9995" PostId="4293" Score="0" Text="@GypsySpellweaver If what you've created is so easily reproduced that you'd need an army to prevent it from being recreated for cheaper than you can produce it yourself, it's probably not beneficial to anyone else to protect such &quot;ownership&quot; of concepts that exist in objective reality. In a world where only one guy would be allowed to make chairs, most people would end up never seeing one and they'd be really expensive." CreationDate="2018-02-01T09:08:27.597" UserId="4246" />
  <row Id="16531" PostId="4294" Score="0" Text="I agree that the best way to write programs is the way any sensible person would do it, given enough experience, and all the paradigms are just marketing gone wrong. We want to somehow impart experience and insight directly, but that is impossible. Pronouns have become a minefield, so hopefully anthropomorphizing will slowly disappear." CreationDate="2020-05-29T10:35:52.423" UserId="5349" />
  <row Id="10003" PostId="4296" Score="0" Text="Welcome to the site. Hope you can contribute more. However can you translate the quote at the start." CreationDate="2018-02-02T15:41:22.107" UserId="204" />
  <row Id="10004" PostId="4296" Score="0" Text="I don't agree 100%, however there is a lot of interesting ideas in the answer. Do you know if there is any evidence that teaching in chronological order is of benefit. And a warning. If it is a benefit, then we need to get our history right. OO was invented around 1960 (smalltalk), it also had the first mouse and windowing system." CreationDate="2018-02-02T15:45:53.600" UserId="204" />
  <row Id="10008" PostId="4298" Score="0" Text="See this for english A-level (level-3, below 1st year undergrad) spec. It has some modules that it calls decision maths. This spec has been superseded the new one does not seem to have these modules." CreationDate="2018-02-04T09:27:14.287" UserId="204" />
  <row Id="10012" PostId="4298" Score="0" Text="@ctrl-alt-delor Are you missing a link from this comment?" CreationDate="2018-02-04T17:40:58.420" UserId="27" />
  <row Id="10014" PostId="4298" Score="0" Text="sorry here is the link http://www.aqa.org.uk/subjects/mathematics/as-and-a-level/mathematics-6360 (I also not I said English A-level. Which as what I meant the Maths A-level in England. However in England “English A-level” means an A-level in literature and/or language, in the native language of English." CreationDate="2018-02-04T21:59:44.900" UserId="204" />
  <row Id="10015" PostId="4298" Score="0" Text="I self-studied two modules (well, one and a half, because I couldn't find any materials for the other half) of &quot;discrete maths&quot; as part of Further Maths A-level, and some &quot;discrete maths&quot; in the first year of undergraduate CS. They were about completely unrelated topics. Given the ambiguity of the word &quot;*school*&quot;, which of the two courses would be relevant to this question?" CreationDate="2018-02-05T09:26:42.587" UserId="1219" />
  <row Id="11722" PostId="4298" Score="1" Text="Let me note here that MathEducators has several questions on discrete mathematics, some of which are relevant here: https://matheducators.stackexchange.com/questions/tagged/discrete-math. MathEducators in general overlaps with this site on all similar questions. Check it out." CreationDate="2018-03-21T16:39:20.503" UserId="1293" />
  <row Id="10016" PostId="4301" Score="0" Text="I agree about de-stressing low reward features. However, they can't be neglected entirely as students (and professionals) still need to read the code of others who might not exhibit such &quot;sanitary&quot; practices." CreationDate="2018-02-06T15:17:25.160" UserId="1293" />
  <row Id="10017" PostId="4301" Score="0" Text="I would add that it is also heavily tested on the AP CS A test, where they love to introduce off-by-one errors and tricky ending conditions." CreationDate="2018-02-06T16:58:32.427" UserId="27" />
  <row Id="10018" PostId="4302" Score="0" Text="Provide the interface, and have them implement it (May be in breach of competition rules, may not work with the existing system)." CreationDate="2018-02-07T09:35:09.050" UserId="204" />
  <row Id="10019" PostId="4302" Score="1" Text="What value is it to them? How will it make the program better? (Don't tell be it is a rule; That is what good programs look like; Show me why it makes the program better.)" CreationDate="2018-02-07T09:37:22.820" UserId="204" />
  <row Id="10024" PostId="4303" Score="4" Text="You may be late to our &quot;party&quot; and I haven't noticed you here before, but you are giving some great answers. I'd offer you a party hat if I had one. Oh, I do, +1." CreationDate="2018-02-07T12:55:01.093" UserId="1293" />
  <row Id="10026" PostId="4303" Score="1" Text="@Buffy hehe, thank you. This isn't my usual haunt but I can't resist a good question." CreationDate="2018-02-07T14:30:59.050" UserId="1401" />
  <row Id="10040" PostId="4303" Score="4" Text="This just might be the most useful answer I've seen in the last 3 months." CreationDate="2018-02-08T13:28:39.923" UserId="150" />
  <row Id="16146" PostId="4303" Score="0" Text="A nice solution and in the &quot;video&quot; you made it even better than in the &quot;code&quot;, as I think the &quot;video&quot; has a better indentation." CreationDate="2020-02-08T21:47:41.920" UserId="8651" />
  <row Id="16147" PostId="4303" Score="1" Text="@OlaStröm thank you. I realized the advantage of that form late and wanted to tack it on. After decades at this I'm still learning new tricks : )" CreationDate="2020-02-08T22:01:18.507" UserId="1401" />
  <row Id="16154" PostId="4303" Score="0" Text="Wow--what a great suggestion for demonstrating a for loop." CreationDate="2020-02-13T15:23:29.617" UserId="4689" />
  <row Id="17184" PostId="4303" Score="0" Text="This is a nifty idea, but some IDEs can't highlight the distinct parts of the for-loop, even when split into separate lines in the source file. For example, I tried this in the Dev-C++ debugger and it only highlights the initializer part on any interation." CreationDate="2020-10-22T01:01:56.060" UserId="8137" />
  <row Id="17185" PostId="4303" Score="0" Text="@DanielR.Collins consider filing a bug. Feel free to link them to this answer to demonstrate the desired behavior. Wish all debuggers highlighted for loops correctly, regardless of line breaks." CreationDate="2020-10-22T01:28:38.590" UserId="1401" />
  <row Id="17186" PostId="4303" Score="0" Text="@candied_orange: This open-source IDE doesn't have support like that." CreationDate="2020-10-22T02:07:44.707" UserId="8137" />
  <row Id="17187" PostId="4303" Score="0" Text="@DanielR.Collins consider using an IDE that has support. Or, since it’s open source, supporting it yourself." CreationDate="2020-10-22T12:33:08.367" UserId="1401" />
  <row Id="20071" PostId="4303" Score="0" Text="What we really need is debuggers to learn that a single line of code can contain several independent items (statements)." CreationDate="2022-05-23T08:27:57.277" UserId="12150" />
  <row Id="10023" PostId="4304" Score="0" Text="@PeterTaylor added Why studying CS in the first place to the question." CreationDate="2018-02-07T11:04:26.387" UserId="204" />
  <row Id="10050" PostId="4304" Score="1" Text="I am a SW engineer, not an educator. I wonder: Would it be helpful to challenge the assumptions? &quot;I don't use a computer.” Do you use a smart phone, tablet, or game system? You are actually using very powerful computers. &quot;I won't use a computer in my job.” The technician who does a smog check on my car uses a computer. When I shop, the person at the register uses a computer. The person who walks my neighborhood to read water meters uses a handheld computer. Shuttle and delivery drivers making use of navigation systems use computers. Etc, etc. Computers are ubiquitous these days." CreationDate="2018-02-08T19:34:36.590" UserId="1940" />
  <row Id="10057" PostId="4304" Score="0" Text="@njuffa I think that could be an answer. With a little work, a good one." CreationDate="2018-02-09T09:41:21.620" UserId="204" />
  <row Id="10100" PostId="4304" Score="1" Text="@ctrl-alt-delor, Most of those people will never _program_ computers.  Not even when a complete programming language is built-in to the word-processor that they use every day.  IMO, you should accept Buffy's answer.  Beyond the three R's, the only reason we learn _anything_ in school is because learning makes us better people.  Learning, in and of itself, is a valuable life skill, and school is where we learn how to learn." CreationDate="2018-02-16T21:40:46.007" UserId="1269" />
  <row Id="10029" PostId="4306" Score="0" Text="I see what you're saying. However the problem remains: I am asking how can I *motivate* the students to try and make their code more abstract.&#xA;&#xA;Don't get me wrong, I'll definitely use &quot;Tell. Don't ask.&quot; . But that's not exactly the problem." CreationDate="2018-02-07T16:43:21.963" UserId="150" />
  <row Id="10037" PostId="4306" Score="0" Text="@ItamarG3 better?" CreationDate="2018-02-08T06:05:23.540" UserId="1401" />
  <row Id="10038" PostId="4306" Score="0" Text="Yes. The answer in itself is better, though I personally don't quite agree. But it definitely is better. Thanks :P. A point to note is, again, I am not their **teacher**, I am a mentor. I don't teach them, I guide them while they do independent work." CreationDate="2018-02-08T06:07:46.147" UserId="150" />
  <row Id="10039" PostId="4306" Score="2" Text="@ItamarG3 I've been on teams where I was just another coder, had no authority other than being known as a good guy to ask questions, and I still found myself &quot;teaching&quot;. If you have a similar ability to influence them please take it just as seriously as a teacher would. This field is less than 100 years old. We're all still learning. Please help where you can. Your menties may just write code that drives my car some day." CreationDate="2018-02-08T06:16:40.510" UserId="1401" />
  <row Id="10033" PostId="4307" Score="3" Text="Nice answer. We teach coding (even to students who won't become professional programmers) for the same reason we teach finger-painting (even to students who won't become professional artists). It allows them to express themselves, it lets them think in different ways, and some of them **will** become professional programmers or artists." CreationDate="2018-02-07T19:14:26.080" UserId="2068" />
  <row Id="10025" PostId="4309" Score="0" Text="I encourage you to fill out your answer. Short answers like this tend to get ignored, or worse. Help future readers draw the correct inferences that you see yourself." CreationDate="2018-02-07T14:11:24.547" UserId="1293" />
  <row Id="10027" PostId="4309" Score="0" Text="Your students would need to be aware of the the issues around using iterators -- attempts to modify the underlying collection, copied elements, etc." CreationDate="2018-02-07T15:07:30.640" UserId="3840" />
  <row Id="10028" PostId="4310" Score="0" Text="I think your answer has validity, but I also note that most university curricula do, actually, have a discrete math course that is required of CS majors. It may be taught either by mathematicians (less programming) or by computer scientists (hopefully, more). In a similar vein, some university programs require at least some Calculus, usually from the math department. There are tradeoffs, of course. At a minimum, courses from the math department may give an alternate way of looking at problems - a good thing." CreationDate="2018-02-07T15:17:05.893" UserId="1293" />
  <row Id="10030" PostId="4310" Score="0" Text="Welcome to [cseducators.se]! Your answer is quite interesting; If you could expand just a bit more upon your answer, it would surely be of higher quality." CreationDate="2018-02-07T16:45:50.643" UserId="150" />
  <row Id="10116" PostId="4312" Score="0" Text="Instead of site wide display changes that affect all clients (which you can do with careful search/replace) I'd instead focus on providing different views for different clients dynamically - print view, high contrast (for vision disability), screen reader compatible,  etc." CreationDate="2018-02-20T02:03:07.350" UserId="662" />
  <row Id="10041" PostId="4316" Score="1" Text="Welcome to Computer Science Educators! Whilst this may theoretically answer the question, [it would be preferable](//meta.stackoverflow.com/q/8259) to include the essential parts of the pages you linked here, and provide the link for reference." CreationDate="2018-02-08T16:25:31.533" UserId="150" />
  <row Id="10043" PostId="4317" Score="0" Text="I have other more substantial examples I can share/post if required for clarification." CreationDate="2018-02-08T16:52:05.803" UserId="3840" />
  <row Id="10044" PostId="4317" Score="0" Text="Say more about what you mean by &quot;outcomes&quot;. The code may be different, but is either necessarily to be preferred, especially in the context of a programming contest?" CreationDate="2018-02-08T16:57:47.897" UserId="1293" />
  <row Id="10045" PostId="4317" Score="0" Text="Is x! = 0 supposed to be x != 0?" CreationDate="2018-02-08T17:30:52.713" UserId="1401" />
  <row Id="10046" PostId="4317" Score="0" Text="@CandiedOrange yes it should read x != 0" CreationDate="2018-02-08T17:40:15.743" UserId="3840" />
  <row Id="10047" PostId="4317" Score="0" Text="Fixed, I hope. MathJax was formatting oddly." CreationDate="2018-02-08T17:46:29.333" UserId="1293" />
  <row Id="10048" PostId="4317" Score="0" Text="@buffy the outcomes I refer to is not the code, rather the thinking process or paradigm the students use to solve problems. I am attempting to ascertain if an early objects approach helps to create or establish a different perhaps more effective way to solve problems. The example posted above is just the intro, the next few questions in the competition show a more pronounced effect. Indeed most EO students seem to get farther through the test.  Do you have any similar experience?" CreationDate="2018-02-08T17:47:25.507" UserId="3840" />
  <row Id="10055" PostId="4317" Score="0" Text="&quot;Objects late&quot;  causes students to learn to write FORTRAN programs in Java." CreationDate="2018-02-09T03:36:03.413" UserId="3524" />
  <row Id="10380" PostId="4317" Score="0" Text="Anecdotal evidence from one source (not high enough standard to consider an answer) - my wife. When she was in high school, she was initially taught using Borland Pascal, without introducing the objects of the Borland frameworks.  When she moved to a new high school the next year, she was unable to even begin to grasp how the object modeled event driven screens of the (then) modern UI worked.  In contrast, her object first peers had no problem picking up command line programming when it was introduced later. I'd call that a difference in outcome." CreationDate="2018-03-11T00:13:11.283" UserId="1537" />
  <row Id="12059" PostId="4317" Score="0" Text="In the contest context, the first code example is quite clearly overengineered. Literally half of the code is a useless boilerplate. Of course, there are advantages to the object based approach, but they are all about things like maintainability and extendability: completely irrelevant in the competition environment. Also, object-based approach may easily be a red herring: you may start modelling the domain first, instead of determining what computation you need and which parts of the domain are really relevant." CreationDate="2018-04-14T12:32:12.307" UserId="4884" />
  <row Id="10049" PostId="4318" Score="1" Text="&quot;You tend to do what you have most practice doing.&quot; Indeed." CreationDate="2018-02-08T18:59:13.190" UserId="3840" />
  <row Id="10051" PostId="4319" Score="2" Text="Welcome to CSEducators. It would be good if you would register here and come back often. The question is intriguing and the problem is an important one." CreationDate="2018-02-08T21:26:13.203" UserId="1293" />
  <row Id="10052" PostId="4319" Score="0" Text="Here's some modern, ongoing research.  It's more about teaching faster/better, but it is clear that success motivates and failure demotivates (unless it is followed quickly by success)  [Stanford Seminar - Learning to Code: Why we Fail, How We Flourish - YouTube](https://www.youtube.com/watch?v=mkzHIhKaUX4)" CreationDate="2018-02-08T22:50:40.450" UserId="3799" />
  <row Id="10053" PostId="4319" Score="0" Text="How old are your students? What languages and topics are you trying to teach them?" CreationDate="2018-02-09T01:31:20.930" UserId="2068" />
  <row Id="10238" PostId="4321" Score="0" Text="Good answer. Short term goals and a connection to the instructor is important. Also, in CS, you are likely to be able to provide some examples of programmers/engineers/hackers that a young student would want to emulate. A lot of the motivation in technical courses was the professor or relative who I knew to be a practical joker who would pull of awesome pranks with their technical aptitude. Not a lot of kids spend their weekends winding their own tesla-coils without someone they want to impress." CreationDate="2018-03-05T19:09:08.000" UserId="4082" />
  <row Id="10241" PostId="4321" Score="0" Text="@GorchestopherH What a vivid image that is!" CreationDate="2018-03-05T23:31:11.033" UserId="27" />
  <row Id="10067" PostId="4324" Score="2" Text="As an engineer, I like $\cdot, +, \oplus, \overline{A}$, but this is because it what I learned first. Also, the associative, distributive laws from multiplication and addition hold, so that intuition carries over. Using programming notation (C, Java, Verilog, for example) you need to distinguish between bitwise and logical operators, which adds unnecessary confusion" CreationDate="2018-02-12T06:02:52.923" UserId="1582" />
  <row Id="10176" PostId="4324" Score="0" Text="Good grief teach them that names are arbitrary." CreationDate="2018-02-24T01:52:36.023" UserId="2485" />
  <row Id="10062" PostId="4325" Score="3" Text="Middle school was when I was introduced to multiple notations for things like multiplication and division.  I don't recall anyone in my class having trouble with the concept." CreationDate="2018-02-11T21:37:47.840" UserId="2781" />
  <row Id="10073" PostId="4325" Score="1" Text="I've never taught that age level, nor was I a particularly good student then. Hence my hesitation. Thanks for clarifying." CreationDate="2018-02-12T13:36:37.660" UserId="1293" />
  <row Id="10061" PostId="4326" Score="2" Text="Be a bit careful with the second concept, though, if the students ever get near the C programming language, where &quot;true&quot; - &quot;true&quot;  and &quot;true&quot; + &quot;true&quot; can be true or false. i.e. both 1 and -1 are &quot;true&quot;, as is 2. Only 0 is false." CreationDate="2018-02-11T19:46:10.250" UserId="1293" />
  <row Id="10065" PostId="4326" Score="0" Text="@Buffy I don't think even a first-year student would try to add boolean values in C instead of using || (or even cascaded if statements)." CreationDate="2018-02-12T04:42:10.313" UserId="1275" />
  <row Id="10070" PostId="4326" Score="0" Text="@Buffy you can do it in C, but I would not recommend it. You have to normalize after every operation. Same as when doing it by hand. `int booleanNormalise( int a ) {return !!a; }`. Works on most Cs, not sure if guaranteed to work. It is a long time since I was a C language lawyer." CreationDate="2018-02-12T11:04:47.400" UserId="204" />
  <row Id="10110" PostId="4326" Score="1" Text="@immibis You would be surprised what people will do. First year students and veteran programmers alike. I have traced many bugs to that very concept: using the addition operator in Boolean logic because they learned Boolean algebra so well. I've even seen it done with `tinyint` in MySQL." CreationDate="2018-02-19T05:54:50.407" UserId="104" />
  <row Id="10111" PostId="4326" Score="0" Text="@ctrl-alt-delor Rather than create a function to make it look legitimate, why not not not inline, and admit that it's a gludge? Shows exactly what's being done, without having to make a function, (probably will be optimized out during compilation anyway) and having to remember what `booleanNormalize` does every time it's encountered. Save several _bytes_ of file space as well." CreationDate="2018-02-19T05:58:45.427" UserId="104" />
  <row Id="10113" PostId="4326" Score="0" Text="@GypsySpellweaver same reason as always. Because it documents what the code does. Consider the alternative: You have to normalize after every operation. Same as when doing it by hand. To normalize you can do `!!a` where `a` is an integer, that represents a boolean value." CreationDate="2018-02-19T10:51:14.837" UserId="204" />
  <row Id="10102" PostId="4327" Score="0" Text="`^` is not same as `&quot;=`. The first is bitwise, and works on `int`s. The second works on `bool`s (and is only true/false)." CreationDate="2018-02-17T10:29:38.067" UserId="204" />
  <row Id="10103" PostId="4327" Score="0" Text="@ctrl-alt-delor you missed the &quot;in a purely boolean world&quot; part, which is the context in which the statement holds true.  It's a way of helping them to intuitively understand the operation. When we start doing this with logic gates, the difficult transition becomes understanding that the signals are themselves bits, not the action of the XOR gate. That part remains intuitive." CreationDate="2018-02-17T14:39:17.697" UserId="27" />
  <row Id="10104" PostId="4327" Score="0" Text="Oh I get it. For `bool` type, that is single bit, `!=` and `^` are the same. (Oh and I just noticed my typo in the comment above.)" CreationDate="2018-02-17T17:23:30.690" UserId="204" />
  <row Id="10112" PostId="4327" Score="0" Text="@ctrl-alt-delor Your Dvorak keyboard does make for interesting typos. :) Always a joy to translate the puzzle to see what you _meant_ to type." CreationDate="2018-02-19T06:13:10.453" UserId="104" />
  <row Id="18447" PostId="4328" Score="0" Text="I like these too but they are harder to work with on the modern web/computer based learning systems." CreationDate="2021-11-26T06:34:16.627" UserId="11279" />
  <row Id="10117" PostId="4330" Score="0" Text="The dungeon game works very well. Actually any tile-based game does. I would recommend that you take a look at GreenFoot.org because the &quot;design&quot; lab is much more impactful if your students can realize the designs.  GreenFoot will let you test your object design quickly. If you pre-plan your exercise you can introduce a great deal of OO material." CreationDate="2018-02-20T17:42:53.393" UserId="3840" />
  <row Id="10118" PostId="4330" Score="0" Text="If you are looking some something small and quick - take a look at Greenfoot Kara. You can guide your class through re-creating it, from design to implementation in controlled stages." CreationDate="2018-02-20T17:47:06.033" UserId="3840" />
  <row Id="10119" PostId="4330" Score="0" Text="You can also introduce UML components to help focus on the design work" CreationDate="2018-02-20T17:49:30.290" UserId="3840" />
  <row Id="10075" PostId="4331" Score="0" Text="There are some things very much like this at https://greenroom.greenfoot.org. Search the resources. You could use one of them as a source of ideas." CreationDate="2018-02-12T22:00:58.820" UserId="1293" />
  <row Id="10076" PostId="4332" Score="1" Text="Welcome to [cseducators.se]! I hope we hear more from you in the future. Would you mind adding a link for PEP/8 for those who don't know what it is?" CreationDate="2018-02-13T03:47:54.113" UserId="27" />
  <row Id="10077" PostId="4332" Score="1" Text="What is PEP/8? We use little man computer." CreationDate="2018-02-13T11:35:14.760" UserId="204" />
  <row Id="10078" PostId="4332" Score="1" Text="FWIW, as an mentor for assembly language on codementor.io for the last 6 months, I see primarily MIPS MARS/QtSim and x86/x64. Otherwise I have seen a few using Atmel chips (for Arduino), and ARM, and once each of Manchester Baby, PIC, Motorola 6800, and PEP/9 but not 8." CreationDate="2018-02-13T15:29:08.540" UserId="3799" />
  <row Id="10083" PostId="4333" Score="0" Text="X86 assembly is not too bad either, it is (deliberately) very COBOL like. Your old 4004 calculator code will still run on an i9." CreationDate="2018-02-13T21:23:05.327" UserId="1537" />
  <row Id="10189" PostId="4333" Score="0" Text="@pojo-guy: user-space x86 is fairly human-friendly, especially in 32 or 64-bit mode.  (16-bit has less flexible addressing modes, so not all registers can be used for pointers, and segmentation is often actually used).  But writing a kernel for x86 requires dealing with segmentation, or &quot;meaningless&quot; boilerplate to init segment registers if you don't understand it.  x86 is human-friendly if you know it well, but it has a lot of quirks, especially privileged instructions." CreationDate="2018-02-26T03:02:46.250" UserId="1654" />
  <row Id="10190" PostId="4333" Score="0" Text="Also, no, https://en.wikipedia.org/wiki/Intel_4004 is a totally different architecture than 8086.  It has sixteen 4-bit registers.  Perhaps you meant you could run 8086 code on a modern x86?  That's true, except that a 64-bit OS can't natively run in virtual-8086 (vm86) mode, so you need either a virtual machine, or to boot actual DOS, or a 32-bit kernel to run 16-bit code natively, or an emulator like DOSBOX.  And most old 8086 code uses DOS or BIOS system calls which have to be emulated under modern OSes.  Anyway, yes it's interesting that you *could* boot DOS on a modern PC." CreationDate="2018-02-26T03:07:28.500" UserId="1654" />
  <row Id="10191" PostId="4333" Score="1" Text="@pojo-guy: And BTW, stackoverflow gets a lot of questions about 16-bit x86 code, the bulk of which are from people taking courses that use emu8086.  Most of us who follow the x86 and assembly tags thing this is a poor choice, because there are lots of quirks to the DOS  `int 0x21` and BIOS ABI, and so on.  And that x86 without instructions like `movzx` or shift counts other than 1 and `cl` is harder.  Segmentation is easy to learn if you already know asm, but it's just very confusing if you don't.  Also, emu8086's built-in assembler kinda sucks, e.g. doesn't error on ambiguous operand-size." CreationDate="2018-02-26T03:13:25.447" UserId="1654" />
  <row Id="10192" PostId="4333" Score="0" Text="@PeterCordes Agreed - segmentation sucks, and the DOS legacy stuff definitely doesn't help." CreationDate="2018-02-26T03:51:29.703" UserId="1537" />
  <row Id="10079" PostId="4334" Score="1" Text="They should have done significant digits in maths class. e.g. “Write your answer to 3 significant digits” They spend a significant time on this." CreationDate="2018-02-13T17:23:33.883" UserId="204" />
  <row Id="10081" PostId="4334" Score="0" Text="If they're doing this level of math, a little exponentiation won't hurt them. If memory serves correctly, this is 10th grade physics. Exponents are introduced in 5th to 6th grade, and polynomial functions occupy most of 7th through 9th grades." CreationDate="2018-02-13T18:29:15.490" UserId="1537" />
  <row Id="10080" PostId="4335" Score="0" Text="Add to this, floating point processors since at least the '90s have always converted float to double, easily costing any efficiency they may think to have gained by using the smaller float." CreationDate="2018-02-13T17:57:02.143" UserId="1537" />
  <row Id="10093" PostId="4335" Score="2" Text="@pojo-guy, Can you provide a reference for that (floating point processors since at least the '90s have always converted float to double). Or, do you just mean up-conversion in mixed-type operations? aFloat + aDouble, for example." CreationDate="2018-02-15T14:03:12.833" UserId="1293" />
  <row Id="10094" PostId="4335" Score="0" Text="I'll have to dig up the specs on the 80387 and 68881 math co-processors.  It's been a few decades." CreationDate="2018-02-15T15:31:32.853" UserId="1537" />
  <row Id="10097" PostId="4335" Score="0" Text="Chapter 2.1 of the 80387 programmers manual - &quot;Eight individually-addressable 80-bit numeric registers, organized as a register stack&quot;, and MC68881 reference manual &quot;8 general purpose floating point registers, each supporting a full 80 bit extended precision real data format&quot; . The processors had no facilities for handling &quot;float&quot;, apart from converting to and from extended precision." CreationDate="2018-02-15T16:38:23.107" UserId="1537" />
  <row Id="10123" PostId="4335" Score="1" Text="Modern processor architectures usually have dedicated facilities for single-precision and double-precision computation (x86: see multiple variants of SSE and AVX). Single-precision computation typically provides significant performance advantages (in particular on GPUs) via higher throughput of functional units, lowered bandwidth requirements, and also provides energy savings. Now: Significant research into computing with mixed precision, where most computation is done in single precision and only final refinements in double precision, e.g. work by Stan Tomov and Jack Dongarra." CreationDate="2018-02-21T17:46:34.280" UserId="1940" />
  <row Id="10124" PostId="4335" Score="0" Text="So the reason one could state for defaulting to double precision is: It is a convenient way to side-step various fairly difficult to understand (and possibly distracting) issues with numerical analysis in a *teaching* environment. Once the students get to the university level, it will be important to understand these issues." CreationDate="2018-02-21T17:50:45.057" UserId="1940" />
  <row Id="10125" PostId="4335" Score="0" Text="@njuffa It sounds like you're hinting at a frame-challenging answer to the question.  If so, have you considered creating an answer?" CreationDate="2018-02-21T20:22:34.743" UserId="27" />
  <row Id="10082" PostId="4337" Score="0" Text="Nice answer! (Better than mine, really.) Welcome to [cseducators.se].  Take a look around and post some answers; as a CS Instructor, I'm sure you'll have a lot to contribute here. And once you have 20 rep, feel free to come by [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) to introduce yourself :)" CreationDate="2018-02-13T20:37:12.460" UserId="27" />
  <row Id="10095" PostId="4338" Score="0" Text="... and never use floating point to represent money.  At 11 million dollars plus or minus you start losing the pennies, and your company's accountant will feed you to the alligators slowly." CreationDate="2018-02-15T15:38:08.663" UserId="1537" />
  <row Id="10096" PostId="4338" Score="1" Text="@pojo-guy Actually money is one of the most complex data types. It has both place and time dimensions. It means something different today than in 6 months and it means something different in the US and the EU.  An early chapter in https://martinfowler.com/books/ap.html explains the complexity." CreationDate="2018-02-15T15:45:27.390" UserId="1293" />
  <row Id="10084" PostId="4341" Score="0" Text="My question is specifically about avoiding showing the mantissa. They wouldn't understand that." CreationDate="2018-02-14T07:50:30.040" UserId="150" />
  <row Id="10087" PostId="4341" Score="2" Text="@ItamarG3, If your students really are incapable of understanding what floating point numbers are, then IMO you might as well just say, &quot;Because I _told_ you to,&quot; and leave it at that." CreationDate="2018-02-14T17:50:51.257" UserId="1269" />
  <row Id="10088" PostId="4341" Score="2" Text="P.S., as other answers have pointed out, you don't have to explain _binary_ floating point.  Decimal is easier to understand, and if you talk about decimal, then &quot;exponent&quot; just means, &quot;move the decimal point this many places to the right or left.&quot;" CreationDate="2018-02-14T17:53:41.060" UserId="1269" />
  <row Id="10099" PostId="4343" Score="0" Text="Yes, a new language, and a better one. Think anew about how you teach it." CreationDate="2018-02-16T21:27:21.060" UserId="1293" />
  <row Id="13460" PostId="4344" Score="0" Text="In many resource-constrained settings, like GPGPU work (or just GPU work in general), using floats is necessary. We're using 16-bit floats and 16-bit ints in a lot of circumstances to reduce memory pressure and increase execution speed. If you're writing a website, go ahead and use doubles. If you're writing a game, simulator / numerical modeling, etc., or anything heavy on GPU usage, use the smallest data type that meets the needs of the application." CreationDate="2018-09-13T15:35:11.473" UserId="1777" />
  <row Id="10106" PostId="4346" Score="0" Text="Because you use the same algebra rules, as if it is a $+$, because it is a $+$. Except $1=2$. See my answer on previous question. and $1\cdot1 = 1$ etc all as expected. But for $+$ it is as expected if $1=2$" CreationDate="2018-02-18T18:36:35.090" UserId="204" />
  <row Id="10108" PostId="4348" Score="0" Text="&quot;...12 possible inhabitants of the Cartesian cross product...&quot; This is what you would explain to an 11 year old?" CreationDate="2018-02-19T01:55:57.317" UserId="27" />
  <row Id="10109" PostId="4348" Score="0" Text="Yes, you could simply list them." CreationDate="2018-02-19T02:09:29.740" UserId="3799" />
  <row Id="10115" PostId="4348" Score="1" Text="All well and good, except the concept being taught is __Boolean logic__ not set theory. There are only ever _two_ possible answers using any operations. In addition, `AND` has 4 possible combinations of inputs, and `OR` _also_ has 4 possible combinations of inputs. Not a good time to explain the difference between Cartesian cross products and set union." CreationDate="2018-02-19T18:23:15.580" UserId="104" />
  <row Id="10128" PostId="4351" Score="0" Text="Welcome to [cseducators.se]. Having input from the student's perspective can be quite helpful. Hope we see you around here often. Since you _have_ survived the education process and graduated, can you now give specific examples that would have made a difference in how you, and your classmates, viewed the subject and what would have encouraged you to persevere and learn?" CreationDate="2018-02-22T00:30:24.983" UserId="104" />
  <row Id="10144" PostId="4351" Score="0" Text="@GypsySpellweaver thanks for the feedback but im not sure I understood your request quite well. Can you explain more or be more specific" CreationDate="2018-02-23T03:53:09.140" UserId="4323" />
  <row Id="10145" PostId="4351" Score="0" Text="Can you edit your answer to include some specific examples that would have been helpful to you. Examples for what could be made out of something you learned or how something you learned has an everyday life usage. Things that you didn't know then, but have found or discovered since graduation. As you have graduated recently your memory of classwork is still moderately fresh, and can still connect things taught in class to things in your life now. Some of us have been out of school so long that the memories are mostly cobwebs. Fresh eyes are helpful." CreationDate="2018-02-23T04:04:12.720" UserId="104" />
  <row Id="10162" PostId="4351" Score="0" Text="@GypsySpellweaver Its clear now, I will try to write some useful ones." CreationDate="2018-02-23T14:18:49.403" UserId="4323" />
  <row Id="10120" PostId="4352" Score="1" Text="Welcome to [cseducators.se]! Could you make this answer a little more detailed? I was not aware that Khan Academy covered much discrete math, but a link to relevant sections would be very helpful to future visitors." CreationDate="2018-02-21T02:14:00.093" UserId="27" />
  <row Id="10121" PostId="4352" Score="0" Text="@BenI. Thanks for the feedback. I was talking about basic math skills as he mention in his question. For Discrete Math dunno if it has a branch dedicated to it, I never searched for it. But Im sure they have something on Number theory I will put the link in the answer" CreationDate="2018-02-21T12:57:22.597" UserId="4323" />
  <row Id="10122" PostId="4353" Score="1" Text="I guess I'm confused. Your first example doesn't seem to allow other robot actions unless &quot;waiting_condition&quot; is quite complex. It reads like a blocking wait. The second example doesn't  seem to have any break at all, unless an exception (or similar) happens elsewhere. Can you clarify? Do I need to get the RobotC specs to understand this?" CreationDate="2018-02-21T17:36:55.077" UserId="1293" />
  <row Id="10126" PostId="4353" Score="0" Text="I confess that I am also a bit confused about what you're asking." CreationDate="2018-02-21T20:25:32.083" UserId="27" />
  <row Id="10127" PostId="4353" Score="1" Text="It looks more like you're trying to create event-driven functionality using flow-control statements. It also looks like you are trying to take the vestigial components of one program and extend them into something more than they can do. When the tool no longer serves your purposes, find a better tool." CreationDate="2018-02-22T00:04:16.773" UserId="104" />
  <row Id="10129" PostId="4353" Score="0" Text="I'm looking for the right example and practice tasks to create a guided inquiry cycle that will optimize student understanding of loop and conditional constructs using this platform. I'm also looking for greater insight (or something in the literature) to understand how this paradigm and context affects students new to CS." CreationDate="2018-02-22T03:00:07.293" UserId="765" />
  <row Id="10130" PostId="4353" Score="0" Text="Gypsy helps me understand what to look for; the tasks that students come up with are state-based and event-driven. An example task might be, &quot;after a button is pushed, drive forward until a line taped on the floor is reached, then follow the line to the right.&quot; Students who first learn about loops and conditionals using this approach (I think) conceive of loops and conditional differently than the students who first learn about loop and conditional structures, say, traversing and conditionally altering image pixels." CreationDate="2018-02-22T03:00:12.733" UserId="765" />
  <row Id="10131" PostId="4353" Score="0" Text="@BennettBrown Would you care to join the [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom) to discuss this question some?" CreationDate="2018-02-22T03:19:10.133" UserId="104" />
  <row Id="10132" PostId="4353" Score="0" Text="Some of the stuff in @GypsySpellweaver's answer (from the chat, really) should really be integrated directly into this question." CreationDate="2018-02-22T11:45:36.363" UserId="27" />
  <row Id="10134" PostId="4353" Score="0" Text="@BennettBrown Typically, instructors set up an exercise scaffold that the students can work with to complete their tasks.  The scaffold allows the students to experience some aspect of the environment without the risk of going off the rails.  Additionally, the instructor can use the scaffolding to focus on the learning objectives and hide distracting details or mechanics.  This can be done by creating a library that is more readily usable by your students to accomplish set tasks." CreationDate="2018-02-22T15:24:04.980" UserId="3840" />
  <row Id="10135" PostId="4353" Score="0" Text="@BennettBrown In your example waitUntilDistanceSensorLessThan(200)  the robot is performing an action (moving)  external to the code (that is the software is not continuously sending a move_forward command), and receiving input from the sensor regarding distance that is being continuously checked. You (probably) cannot perform any actions until you arrive at your destination.  If you wish to have some means of controlling the robot while it is travelling you would need to integrate the check for request with the sensor loop." CreationDate="2018-02-22T15:32:31.773" UserId="3840" />
  <row Id="10136" PostId="4353" Score="0" Text="@BennettBrown Because your robot is performing asynchronous actions  (moving, sensors, etc.) you are seeing code examples in the form of &quot;do this forever&quot; while(true), as these are common techniques in these kinds of environments.  These ideas are worth exploring with your students as part of your class and will help provide a context for why the code is structured as it is." CreationDate="2018-02-22T15:36:36.967" UserId="3840" />
  <row Id="10137" PostId="4353" Score="0" Text="@BennettBrown A good example for the basis the asynchronous nature of the robots is to place a &quot;pit&quot; or &quot;non-detectable obstacle&quot; between it and the sensor limit. The robot will never reach its goal (sensor check) and can't be stopped (motor is running).  Both of these things are happening on H/W circuits that are independent of the S/W instructions. &#xA;It occurs to me that the designers probably already have some form of support for &quot;interrupting&quot; the execution of your running program -- as these kinds of errors are common." CreationDate="2018-02-22T15:41:20.347" UserId="3840" />
  <row Id="10139" PostId="4353" Score="0" Text="@MrBradley Maybe you can collect these comments and work them into your answer. I believe that these are good points, and information that apply to the question's objective. Comments _are_ subject to being cleaned up, and the list is often collapsed (I had to expand the list just to see the ones I new were here), while an answer does not suffer from those issues." CreationDate="2018-02-22T16:53:06.667" UserId="104" />
  <row Id="10171" PostId="4353" Score="0" Text="While &amp; until are sequential control structures orthogonal to concurrent behaviour control. While vs until is a sequential programming semantics issue. Do not teach concurrent programming until sequential programming is understood. &quot;Busy waiting&quot; (your empty loop) is a notion that is part of the complex topic of concurrent execution model semantics &amp; implementation. Learn &amp; use the underlying concurrency model of particular libraries/languages for concurrent behaviour control." CreationDate="2018-02-23T22:04:18.140" UserId="2485" />
  <row Id="10133" PostId="4357" Score="1" Text="I think the 'while' and 'do until' examples need to have the termination condition flipped ...? The first does a task **while** a condition _remains_ true, the other does a task **until** the condition _becomes_ true." CreationDate="2018-02-22T15:14:58.713" UserId="3840" />
  <row Id="10138" PostId="4357" Score="0" Text="@MrBradley If the &quot;examples&quot; you refer to involve the motor movement, then they were copied as-is from the referenced web site. If you're referring to a different section, then I don't understand what you think should be &quot;flipped&quot;." CreationDate="2018-02-22T16:41:55.053" UserId="104" />
  <row Id="10140" PostId="4357" Score="0" Text="the first code block following while vs until above." CreationDate="2018-02-22T20:03:21.277" UserId="3840" />
  <row Id="10141" PostId="4357" Score="0" Text="@MrBradley with the possible exception of Python, which I don't know, the two loops are correctly written." CreationDate="2018-02-22T20:53:39.880" UserId="104" />
  <row Id="10170" PostId="4357" Score="0" Text="@philipxy If either one has its test reversed then they they become operationally equivalent except for the timing of the test. The example then looses its demonstration of opposite effects for the same test condition." CreationDate="2018-02-23T21:56:17.043" UserId="104" />
  <row Id="10172" PostId="4357" Score="0" Text="Thanks. From your comment it seems the intro to the examples does not make clear what is being demonstrated. From the intro one expects them to show the same thing in two ways. I suspect you are trying to show something like 'if we use one structure in a way that would be equivalent, but isn't because it doesn't invert the test, then we don't get something equivalent'. But that's vacuous, tortuous &amp; torturous. Of course maybe that sentence is a straw man, but I'm not sure that an intro that explicitly says what you are trying to demonstrate can be otherwise." CreationDate="2018-02-23T22:45:17.407" UserId="2485" />
  <row Id="10173" PostId="4357" Score="0" Text="@philipxy included in the answer is _The while loop exits when the test condition is false (fails), the untilloop exits when the test condition is true (passes)._ Seems explicit to me" CreationDate="2018-02-23T22:50:47.273" UserId="104" />
  <row Id="10174" PostId="4357" Score="0" Text="@philipxy Actually, what that example is _demonstrating_ is the typical syntax of both statements in languages which _do_ have both available." CreationDate="2018-02-23T22:59:49.907" UserId="104" />
  <row Id="10161" PostId="4360" Score="0" Text="As ctrl-alt-delor commented much earlier, the key to understanding float vs. double is the number of significant digits.  More specifically, students should learn that computer arithmetic is *finite-precision* arithmetic." CreationDate="2018-02-23T12:42:57.160" UserId="3524" />
  <row Id="10146" PostId="4361" Score="0" Text="Excellent answer. Welcome to [cseducators.se]. I hope we see you around more. We have a few questions that broach the subject of [tag:assembly] language level thinking here as well. Maybe you will find them interesting and worth answering." CreationDate="2018-02-23T04:16:48.020" UserId="104" />
  <row Id="10184" PostId="4361" Score="0" Text="@GypsySpellweaver: I had a look at some of the questions, but I don't know much about teaching asm to people who don't get it.  I literally don't understand why people find asm hard to learn, because it wasn't for me.  It's like building a robot; you put some pieces together to create a machine that does something useful one step at a time.  I know some people &quot;don't get it&quot;, but I don't know how to put myself inside their head to understand why not, or if there's something you could tell them that would let them think about asm (and how computers work) in a useful way." CreationDate="2018-02-26T02:03:54.967" UserId="1654" />
  <row Id="10188" PostId="4361" Score="0" Text="It was worth a try anyway." CreationDate="2018-02-26T02:45:39.810" UserId="104" />
  <row Id="10163" PostId="4364" Score="6" Text="Sorry, but I'm not sure I understand the question. What are you asking? Can you summarize it in one or two sentences?" CreationDate="2018-02-23T18:18:28.347" UserId="2068" />
  <row Id="10164" PostId="4364" Score="0" Text="Possibly related: https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program" CreationDate="2018-02-23T18:22:26.440" UserId="2068" />
  <row Id="10165" PostId="4364" Score="0" Text="Welcome to CSEducators. A thought provoking question - assuming it _is_ a question." CreationDate="2018-02-23T19:57:45.097" UserId="1293" />
  <row Id="10167" PostId="4364" Score="1" Text="It would be great, also, if you would register for the site and come visit with the regulars in the chatroom: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2018-02-23T21:14:25.300" UserId="1293" />
  <row Id="10177" PostId="4364" Score="0" Text="I've voted to close this question because, as other commenters have mentioned, it's not very clear what you're asking. As far as I can tell, you're asking about what good predictors of programming sucess, which is quite broad. As @Buffy mentioned, we'd be happy to help you clarify in [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom)." CreationDate="2018-02-24T02:51:25.013" UserId="58" />
  <row Id="10485" PostId="4364" Score="0" Text="Maybe this will answer your question: https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve" CreationDate="2018-03-13T16:35:34.667" UserId="204" />
  <row Id="10166" PostId="4366" Score="1" Text="Let me note that the &quot;other&quot; question here is specifically about programming. There is a lot more to CS than programming. Most CS folk do program, but there are a lot of other things. Say, theory." CreationDate="2018-02-23T20:22:34.360" UserId="1293" />
  <row Id="10178" PostId="4369" Score="1" Text="Why not let them practice so they notice the difference between a variable and a value?   We all learn by doing mistakes.  Also, consider using examples with numeric values." CreationDate="2018-02-24T10:18:27.127" UserId="2103" />
  <row Id="10194" PostId="4369" Score="0" Text="Do they notice after testing? Why did I get the word “reply” appear in the log?  …" CreationDate="2018-02-26T13:02:50.163" UserId="204" />
  <row Id="10179" PostId="4371" Score="0" Text="+1 I love how you have re-cast the issue so that it puts the students into a good light. This is both a good approach, and a dignified and loving one." CreationDate="2018-02-24T14:44:17.880" UserId="27" />
  <row Id="10180" PostId="4371" Score="0" Text="Thanks. I note that a lot of issues like this are much more subtle than they appear at first glance. It is usually worth a second/deeper look before jumping to conclusions about ability, and other things. I've said many times here that &quot;Your students are not like you.&quot;" CreationDate="2018-02-24T17:21:46.577" UserId="1293" />
  <row Id="10187" PostId="4374" Score="0" Text="Maybe things are different in the JavaScript world, but I tend to read up on any Java or Python library I'm considering taking a dependency on, including not just their documentation but also their test code and issue tracker.  That's how I get assessments like [&quot;_It's definitely not an early alpha any more, but I'm not sure that people will get much joy out of using it in production_&quot;](https://github.com/Lukasa/hyper/issues/288)  So your question seems a bit strange to me: you want them to make their own decision about libraries for a (to them) large project, but to do it really quickly?" CreationDate="2018-02-26T02:42:36.210" UserId="1102" />
  <row Id="10193" PostId="4374" Score="0" Text="@JeffreyBosboom somewhere in the middle. I'd like them to start learning how to make these decisions. That's the important bit. On the other hand, thwre isn't infinite time." CreationDate="2018-02-26T05:33:11.103" UserId="150" />
  <row Id="10181" PostId="4377" Score="3" Text="Welcome to CSEducators. You show a sophisticated view of teaching that I hope you will bring back here often." CreationDate="2018-02-25T23:29:35.317" UserId="1293" />
  <row Id="10182" PostId="4377" Score="1" Text="Agreed. Welcome to our community!" CreationDate="2018-02-25T23:53:29.773" UserId="27" />
  <row Id="10183" PostId="4377" Score="1" Text="Thank you, Buffy and Ben, I am excited to be here!  I hope to learn a lot!" CreationDate="2018-02-26T00:04:13.540" UserId="4338" />
  <row Id="10185" PostId="4377" Score="1" Text="Now this is the kind of answers we need on this site. And six years of teaching might not qualify as &quot;research&quot; in you lexicon, but most research is based on experiential data, whether it's acknowledged or not. Along with Buffy and Ben, I'm glad to see another thoughtful voice in on our site. __Welcome__" CreationDate="2018-02-26T02:11:36.680" UserId="104" />
  <row Id="10195" PostId="4378" Score="0" Text="These are some points I hadn't thought of. Thanks" CreationDate="2018-02-26T17:32:24.523" UserId="150" />
  <row Id="10213" PostId="4379" Score="5" Text="&quot;How do you teach something when you don't know it yourself?&quot; .... &quot;badly&quot; ? (I just wanted to tell a joke). But joke aside, the best teachers imo are those who have enough knowledge about the subject to be able to &quot;distill&quot; the important things from it, and to give enough different point of views on it to help those who may not understand the first few tries to explain it. This requires &quot;deep enough&quot; knowledge of the subject matter." CreationDate="2018-02-28T09:22:35.800" UserId="1002" />
  <row Id="10214" PostId="4379" Score="3" Text="This is the fundamental condition of teaching. There are always class members who get it more than you do. Your task, life-long, is to accept that, cope with that, and still provide teaching value, even to those students." CreationDate="2018-02-28T09:48:44.000" UserId="3202" />
  <row Id="10215" PostId="4379" Score="0" Text="Related: https://academia.stackexchange.com/questions/86953/can-i-learn-the-course-material-for-the-first-time-while-im-teaching-it" CreationDate="2018-02-28T10:14:28.247" UserId="3173" />
  <row Id="10222" PostId="4379" Score="0" Text="Did you consider giving your students an opportunity? As students, we presented quite a few lectures ourselves. This is especially powerful with hands-on lectures. Especially with CS, you're pretty likely to find a couple students that are already pretty good at things you're lacking in :)" CreationDate="2018-03-02T08:45:36.620" UserId="1816" />
  <row Id="10223" PostId="4379" Score="0" Text="When I have had very small class, or small part of learning, then I model how to learn. We all learn together." CreationDate="2018-03-02T13:51:19.647" UserId="204" />
  <row Id="10224" PostId="4379" Score="0" Text="When I was at uni. Two things happened. One annoyed me: The first the teacher was one/two ahead, this encouraged me to try to overtake. However for me it was learning at 2nd/3rd language. The other the project/tutor, told me I could not make a one bit digital to analogue converter (only 2 analogue components: speaker, and a capacitor), as he was a digital specialist. This encouraged be to do it anyway." CreationDate="2018-03-02T14:21:24.760" UserId="204" />
  <row Id="10204" PostId="4380" Score="0" Text="-1  for using Firstly, Thirdly  instead of First, Second, ...  and for jumping from Firstly to Thirdly. Sorry, it's a pet peeve of mine" CreationDate="2018-02-27T17:19:23.613" UserId="4350" />
  <row Id="10205" PostId="4380" Score="0" Text="@QuoraFeans If you read carefully, I have a &quot;secondly&quot;. Doesn't have a huge header, but I do specify that there is a &quot;second stage&quot;..." CreationDate="2018-02-27T17:33:23.373" UserId="150" />
  <row Id="10217" PostId="4380" Score="1" Text="This. This is really key, and the other answers are helpful as well. As a physician, I have had to teach medical students, residents, and PAs/CRNPs. Imagine the harm I could cause trying to bluff my way through teaching them about an illness. You either know it or you don't; when you don't, you say, I'll get back to you about that, and then read about it yourself until you understand it. It's no different for any subject at any level; the students deserve to learn." CreationDate="2018-03-01T01:50:20.103" UserId="4372" />
  <row Id="10201" PostId="4381" Score="4" Text="With respect to your aside about undergraduate degrees in CS, the first taught course in CS was a post-graduate Diploma at the University of Cambridge in 1953; Cambridge introduced an undergraduate &quot;Part II&quot; in 1970 as the third year of a science degree; expanded it to two years in 1978 (following one year of maths or science); and to &quot;three&quot; years (really 2.5, because half of the first year was still science) in 1989. Even today they don't have a full three year course of just CS, although it's up to 2.75 years. Source: http://www.cl.cam.ac.uk/downloads/books/CambridgeComputing_Ahmed.pdf" CreationDate="2018-02-27T13:06:03.540" UserId="1219" />
  <row Id="10212" PostId="4381" Score="2" Text="_&quot;Learning how to learn is likely more important than any specific topic.&quot;_ This." CreationDate="2018-02-28T09:17:42.573" UserId="3194" />
  <row Id="10196" PostId="4382" Score="15" Text="I would add to this &quot;Leverage what your students know that you don't&quot;. A few years back, my daughter's high school was brand new, and setting up their video and media program. The teacher was a good teacher but a complete novice in the video production world. My daughter had been working on a live webcast team since 7th grade, and had risen to the level of technical director by 11th grade. She pretty much set up the entire program, freeing the teacher to learn and take care of non-technical concerns like budgets and school politics." CreationDate="2018-02-26T19:14:13.700" UserId="1537" />
  <row Id="10197" PostId="4382" Score="0" Text="Also if you're creating your own multiple choice tests be prepared to get challenged. It is very easy to think you're writing a distractor answer that is false only to have students prove to you that it's also true." CreationDate="2018-02-27T01:11:48.157" UserId="1401" />
  <row Id="10202" PostId="4382" Score="1" Text="Ben you said everything I would have said.  Great answer.  I'll add two things: if teaching code, be sure to write all exercises yourself before you assign them to students (or even concurrently in class - and I do this even if I &quot;know&quot; the language); use a timer to give yourself five or even 10 minutes during class when you need it to find your bearings or wrap your mind about what you're going to do next.  Tell your students that if they hit the wall while your timer is set they should investigate their problem independently (or get help from others) and that you'll be with them shortly." CreationDate="2018-02-27T14:21:00.053" UserId="4338" />
  <row Id="10203" PostId="4382" Score="1" Text="@JudyOakley Partial answers are considered answers here on SE, and you have two great pieces there.  I'm particularly interested in your last bit; could you flesh that out?  I don't quite understand what you mean, but it gives me a nagging sensation that there's a trick I could start enacting right away to make life better for me and my students." CreationDate="2018-02-27T16:25:01.000" UserId="27" />
  <row Id="10218" PostId="4382" Score="2" Text="`in a high school for gifted students` ... are you Charles Xavier?" CreationDate="2018-03-01T14:53:25.687" UserId="4381" />
  <row Id="10219" PostId="4382" Score="10" Text="@Hankrecords Yes, yes I am." CreationDate="2018-03-01T16:27:46.870" UserId="27" />
  <row Id="10231" PostId="4382" Score="0" Text="I will add an answer to the post, but one other point is to make effective use of scaffolding for your assignments. This will help you as a new teacher contain the types of problems and questions students will run into as you become more familiar with the material." CreationDate="2018-03-03T14:39:34.643" UserId="3840" />
  <row Id="10198" PostId="4383" Score="0" Text="Welcome to [cseducators.se]! This is a really interesting answer! I hope to see you around the site more :)" CreationDate="2018-02-27T03:42:49.203" UserId="58" />
  <row Id="10199" PostId="4384" Score="0" Text="Those are good additions. Welcome to [cseducators.se]!" CreationDate="2018-02-27T11:39:01.800" UserId="27" />
  <row Id="10200" PostId="4384" Score="0" Text="Your profile suggests you aren't registered here. I hope you do register and come back often." CreationDate="2018-02-27T12:34:16.157" UserId="1293" />
  <row Id="10209" PostId="4385" Score="5" Text="Good on you for even noticing the fact that he's creating opportunities. Often HS students don't take the time to think about the larger context of what their teachers are really doing for them. I don't fault them for that; they're young! But in my experience, the kids who *do* notice are pretty special kids. :)" CreationDate="2018-02-28T01:32:40.227" UserId="27" />
  <row Id="10210" PostId="4385" Score="2" Text="Also, _welcome_ to [cseducators.se]. Having students here is quite helpful. Hope you can find other questions where your perspective can be helpful. Thank for joining the site." CreationDate="2018-02-28T02:27:37.247" UserId="104" />
  <row Id="10207" PostId="4386" Score="0" Text="Good point. Trying to brazen your way out of a bad situation is almost always noticed by students. The teacher's reputation will be diminished. Life is much easier when you don't have to insist that you are perfect." CreationDate="2018-02-28T01:03:24.437" UserId="1293" />
  <row Id="10216" PostId="4389" Score="1" Text="&quot;There must be only one object of this class&quot; can be interpreted as a warning to the class users to use one UserSystem in an instance of an Application. If a program only needs one UserSystem, the program could allocate and use a static one. Converting it to a singleton restricts its reuse." CreationDate="2018-02-28T11:19:24.180" UserId="2103" />
  <row Id="10220" PostId="4389" Score="0" Text="The singleton pattern you want as a solution to this problem is now consisted an antipattern. The preferred mechanism is to use a bean factory and scope the class as singleton. The correct fix would be to annotate the class with (at)Singleton or (at)Global (or whatever annotation your preferred bean factory prefers)" CreationDate="2018-03-02T02:01:23.643" UserId="1537" />
  <row Id="10225" PostId="4389" Score="0" Text="I nearly go what **you** wanted. I read “There must be only one object of this class” and Identified that as a problem, I was then looking for where the code was not re-entrant. As @pojo-guy says singleton is considered harmful. What if I want two or more objects of this class, E.g. I am implementing authentication domains. It is not this classes responsibility. It is the responsibility of the factory." CreationDate="2018-03-02T14:31:04.700" UserId="204" />
  <row Id="10226" PostId="4389" Score="0" Text="Singleton considered harmful aside. Don't make them guess. Tell them read the comment. Ask how do I implement the comment in code? So we can remove comment." CreationDate="2018-03-02T14:33:02.510" UserId="204" />
  <row Id="10227" PostId="4389" Score="0" Text="@pojo-guy a pattern is not an implementation. Singleton is an anti-pattern (no matter the implementation)." CreationDate="2018-03-02T14:38:55.600" UserId="204" />
  <row Id="10228" PostId="4389" Score="0" Text="@ctrl-alt-delor  There are places for Singleton, as any pattern. However, it is badly overused. It should only be used when it simplifies the code.  https://stackoverflow.com/questions/12755539/why-is-singleton-considered-an-anti-pattern" CreationDate="2018-03-02T16:59:29.577" UserId="1537" />
  <row Id="10229" PostId="4389" Score="1" Text="@pojo-guy I agree only use when it makes the code simpler, consider first factory-pattern (so never). The only use is as a temporary kludge, on a class that does not work if there is more than one instance. (So not because we **want** one instance, but because we **can not** safely create more than one instance. Because of badly implemented class.)" CreationDate="2018-03-02T23:39:21.647" UserId="204" />
  <row Id="10230" PostId="4389" Score="0" Text="Singleton should be built specifically to enforce thread safety features,. Annotating as singleton is using a factory, since it is the factory that understands the annotation and enforces the singleton in that case." CreationDate="2018-03-03T02:42:23.107" UserId="1537" />
  <row Id="10268" PostId="4389" Score="0" Text="When asking design issues questions, you may want to make your questions....er...more specific? Any of those answers from your students could be design problems. If you want them to identify if the class' declaration is appropriate, why not simply ask for a appropriate declaration for a class that is to only have one instance?" CreationDate="2018-03-07T19:48:45.353" UserId="4082" />
  <row Id="10221" PostId="4391" Score="0" Text="The Java doc is almost always out of date irl, so novices might read it,  but the more experienced the programmer,  the less likely they are too read it or to give it credence." CreationDate="2018-03-02T02:03:41.667" UserId="1537" />
  <row Id="11644" PostId="4391" Score="0" Text="This is very interesting. Indeed my question is open-ended. It could be good as a low-weight homework exercise, but in exams, I should rephrase it more clearly." CreationDate="2018-03-17T19:04:55.700" UserId="1873" />
  <row Id="14701" PostId="4393" Score="0" Text="This is probably the best approach for students totally unfamiliar with Javascript. I usually do this, and then refer back to the docs if I'm having trouble with the API." CreationDate="2019-04-16T00:55:12.800" UserId="6869" />
  <row Id="10364" PostId="4402" Score="0" Text="Thank you for your links.  I am looking for resources to teach the standards.  The Indiana website did provide a cross-reference to resources.  These websites will be very useful." CreationDate="2018-03-10T15:54:05.480" UserId="3219" />
  <row Id="13518" PostId="4404" Score="0" Text="As someone who had read all the Tolkien books, *Atlas Shrugged*, and *A Connecticut Yankee in King Arthur's Court* by the age of 14, all I can say is, I hope this internet thing turns out to be better than reading books. Because the folks who built the internet all learned from books, if it doesn't work, it will be a one-way trip." CreationDate="2018-09-24T21:25:58.800" UserId="5349" />
  <row Id="10234" PostId="4406" Score="2" Text="You never got properly greeted when you joined us in January.  Welcome to [cseducators.se], and I hope we hear much more from you." CreationDate="2018-03-05T14:27:18.987" UserId="27" />
  <row Id="10235" PostId="4406" Score="0" Text="@BenI. Thanks! This is an interesting channel, I hope it thrives." CreationDate="2018-03-05T17:40:25.017" UserId="4082" />
  <row Id="10236" PostId="4408" Score="0" Text="Welcome to [cseducators.se]! This answer is wonderful. If you can give an explanation\example regarding this tool from a teaching perspective, it would be considerably  better. Either way, welcome. I sure hope we'll see more quality content from you :)" CreationDate="2018-03-05T18:22:52.680" UserId="150" />
  <row Id="10237" PostId="4408" Score="0" Text="Sure, I can expand the answer." CreationDate="2018-03-05T18:25:11.200" UserId="4401" />
  <row Id="10266" PostId="4410" Score="1" Text="Depends: Are you trying to facilitate learning, or measure ability. If the First then see Carol Dwekes work, and give grades of “Not passed yet” or “60% so far”. If the second, then do an entrance exam, but the grade in a box, and re-issue on graduation (you don't want to affect what you are measuring)." CreationDate="2018-03-07T19:08:29.337" UserId="204" />
  <row Id="10243" PostId="4411" Score="0" Text="*&quot;Remember that your job is not grading students, but educating them.&quot;* + 1000" CreationDate="2018-03-05T23:55:38.063" UserId="2068" />
  <row Id="10251" PostId="4413" Score="1" Text="Jenny, thanks for checking back in, and glad to know we helped you! Could you integrate some of this information into the question or into comments on the question? While very lovely, this isn't an answer." CreationDate="2018-03-06T21:08:56.770" UserId="27" />
  <row Id="10246" PostId="4415" Score="0" Text="Hmmm. We college/university teachers may not, in fact, be the monsters you seem to imply we are. I also think that students in their future will tend to value those who show human qualities rather than keeping strictly to rules that have no exceptions (robot qualities). Yes, I was seen as a very demanding teacher, but I was, at least after I learned to be, always kind and understanding. I don't, however, disagree with all you say here." CreationDate="2018-03-06T17:11:48.240" UserId="1293" />
  <row Id="10247" PostId="4415" Score="0" Text="@Buffy To the unprepared student, the harsh reality of most post-secondary credit systems *will* hit like a train. Students regularly fail and drop out of university courses taught by the most benevolent, most talented, least-monstrous professors possible because they will ill prepared, and didn't take their tests seriously." CreationDate="2018-03-06T17:45:49.647" UserId="4082" />
  <row Id="10248" PostId="4415" Score="0" Text="Perhaps, but treating them badly (IMO) now so that they will be prepared to be treated badly later doesn't seem like the best solution. There must be a better way. However, our chat room is a better place for this kind of discussion: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2018-03-06T17:59:06.977" UserId="1293" />
  <row Id="10249" PostId="4415" Score="0" Text="@Buffy I can continue in chat, but I'd like to state that I don't believe anything I'm suggesting, nor the OP's current test practices constitutes treating them badly." CreationDate="2018-03-06T18:17:55.550" UserId="4082" />
  <row Id="10259" PostId="4415" Score="0" Text="Thank you @GorchestopherH for your response.  I agree with a lot of what you say.  I try to walk the thin line of being kind to my students and developing relationships with them, while at the same time preparing them for the harsh realities of life in secondary education.  I also do not think this constitutes treating them badly, nor do I think this in any way implies that college/university professors are monsters.  I know you guys took this to the chat room, so if you have a response I'll be glad to join you there." CreationDate="2018-03-07T13:14:22.050" UserId="4338" />
  <row Id="10261" PostId="4415" Score="0" Text="@JudyOakley In chat it was boiled down to a difference of opinion. Some feel it is cruel to treat classes at different levels differently. If you feel this way, then I'd recommend against test corrections. Test corrections will not exist throughout their entire academic career, and if you can't ween the students off, then stay away. You **do** need a way to encourage students to learn concepts they they are deficient in, this does not have to be in the form of test corrections." CreationDate="2018-03-07T16:23:26.577" UserId="4082" />
  <row Id="10252" PostId="4416" Score="1" Text="Can you provide some further context? Without more context, this question is pretty broad and hard to answer well." CreationDate="2018-03-07T02:58:53.873" UserId="58" />
  <row Id="10253" PostId="4416" Score="4" Text="I have a 4 year old and this seems rather ambitious, but I commend the effort!" CreationDate="2018-03-07T03:09:12.463" UserId="4401" />
  <row Id="10256" PostId="4416" Score="6" Text="Pre-school meaning that they're just learning to hand-write letters, and can't reliably read words?" CreationDate="2018-03-07T09:33:05.740" UserId="27" />
  <row Id="10257" PostId="4416" Score="0" Text="This is a really interesting question." CreationDate="2018-03-07T09:34:58.660" UserId="27" />
  <row Id="10260" PostId="4416" Score="0" Text="@BenI. yes, exactly" CreationDate="2018-03-07T14:08:57.787" UserId="4407" />
  <row Id="10265" PostId="4416" Score="1" Text="I recommend the following textbook: https://www.amazon.ca/Peek-Boo-Friends-Parragon-Books/dp/1472305922/ While not explicitly a text on cryptographic hash functions, it can demonstrate the concept of a blockchain to preschoolers. Each page has a window back to the previous page, and forward to the next page, these windows allow verification that the current page indeed follows the previous, allowing the student an early appreciation for blockchain suitable for a preschooler." CreationDate="2018-03-07T19:04:09.827" UserId="4082" />
  <row Id="10267" PostId="4416" Score="2" Text="I don't thing that hashing and block chains are the same thing, however block chains will use hashes." CreationDate="2018-03-07T19:12:10.293" UserId="204" />
  <row Id="10273" PostId="4416" Score="0" Text="I'm sticking with my textbook recommendation. Perhaps the author will consider re-titling it &quot;A Course in Pre-Blockchain Theory for Toddlers&quot;." CreationDate="2018-03-08T12:03:23.320" UserId="4082" />
  <row Id="10419" PostId="4416" Score="0" Text="Are preschoolers really going to understand any math you show them? In my memory, they barely even know about numbers at that age. You'd probably have to go to a physical analogy if you wanted the kids to understand. Would that be reasonable to you, given that you did specifically ask for a hash function?" CreationDate="2018-03-12T02:45:06.497" UserId="4538" />
  <row Id="21294" PostId="4416" Score="0" Text="Why do you think that teaching blockchains to young children might be a good idea?" CreationDate="2023-06-06T10:06:08.433" UserId="10594" />
  <row Id="10254" PostId="4417" Score="0" Text="Have they been introduced to CSS?" CreationDate="2018-03-07T03:20:12.890" UserId="4401" />
  <row Id="10255" PostId="4417" Score="0" Text="@JedSchneider Yes, they have. It's in their stylesheets where they consistently use absolute positioning. Also, when I ask them to avoid it, they can't seem to do it unless I effectively feed them the code. And in that case, they're just copying what I say, not learning anything." CreationDate="2018-03-07T03:32:21.827" UserId="58" />
  <row Id="10258" PostId="4417" Score="0" Text="In my experience, even feeding them code eventually takes root.  And some students have to be fed in this way for a long time before that light goes on in their heads.  If you can, continue to patiently remind and explain." CreationDate="2018-03-07T12:46:19.823" UserId="4338" />
  <row Id="10263" PostId="4417" Score="1" Text="Perhaps the students were introduced to the absolute positioning properties too early? It's very hard to learn to do something in-place-of something else you already know how to do. If course time permits, maybe you need to re-introduce the topic of layout with some very simple examples, such as those on this page: https://www.w3schools.com/css/css_positioning.asp" CreationDate="2018-03-07T18:44:26.330" UserId="4082" />
  <row Id="10262" PostId="4418" Score="0" Text="Great points here. Show the students why absolute positioning isn't great for the web where the viewport could be any set of dimensions." CreationDate="2018-03-07T18:29:32.743" UserId="4082" />
  <row Id="10271" PostId="4418" Score="0" Text="I just tried this page in responsive design mode. It is a mess, unless you trick the server into thinking you are on a phone. If it thinks you have a desktop, then in assumes that you have a wide (&gt;1024) screen. The style sets min-width multiple times. I am going to look in to setting the browser name to some phone permanently to trick the server." CreationDate="2018-03-07T23:42:43.733" UserId="204" />
  <row Id="10272" PostId="4423" Score="0" Text="I'm not sure that addition is a reasonable assumption for the pre-school set, though this would be great in middle or upper elementary school!" CreationDate="2018-03-08T11:10:43.160" UserId="27" />
  <row Id="10276" PostId="4423" Score="0" Text="ROT13 popped into my head when I read the question." CreationDate="2018-03-08T19:00:43.197" UserId="2516" />
  <row Id="10283" PostId="4425" Score="28" Text="Please notice that the SI prefix &quot;kilo&quot; is always written with a lowercase &quot;k&quot;. Personally, I am used to seeing &quot;kB&quot;, even when it strictly isn't a SI prefix." CreationDate="2018-03-09T19:08:08.357" UserId="4421" />
  <row Id="10286" PostId="4425" Score="0" Text="In the millions of lines of code I've read `n×2^(m×10)` is actually incredibly rare. Think about where it actually makes sense: when dealing with very time-consuming algorithms which might be slightly faster (such as PGP) or when certain that your data will align with storage layout (such as database internals). Making text fields n×1024 characters long is just cargo culting." CreationDate="2018-03-09T20:09:02.907" UserId="2972" />
  <row Id="10294" PostId="4425" Score="41" Text="[xkcd](https://xkcd.com/394/)" CreationDate="2018-03-09T21:09:25.697" UserId="806" />
  <row Id="10355" PostId="4425" Score="6" Text="Ram is soled in kiB, Mib, GiB and hard disks in kB, MB, GB. Both often labelled kB, MB, GB. So it is not always about programming." CreationDate="2018-03-10T10:06:05.403" UserId="204" />
  <row Id="10357" PostId="4425" Score="1" Text="When standards are unclear it is best to just tell them that. Just like there is this problem with $\subseteq \subset \subsetneq$ in maths, different people use the middle one for either the left or the right. Our maths professor told us about this problem and then stated how he is going to use them in the future. Which is then personal preference" CreationDate="2018-03-10T10:32:37.203" UserId="4473" />
  <row Id="10451" PostId="4425" Score="15" Text="What I find amusing is that the power-of-two version (The one that's clearly what is usually desired) has no justification whatsoever for the use of the &quot;Kilo&quot; prefix--it's just that some arbitrary power of two happens to come fairly close to some arbitrary power of 10 so we ignore the difference for the convenience of being able to say &quot;K&quot; (or &quot;M&quot; or &quot;G&quot;) because &quot;0x0200&quot;abyte is too hard to say." CreationDate="2018-03-12T16:08:42.747" UserId="1399" />
  <row Id="10460" PostId="4425" Score="1" Text="@BillK I was going to say the same thing - we religiously fight for K=1024 and we completely forget that &quot;kilo&quot; was &quot;invented&quot; long time before computers, and associating it with 1024 was nothing but a steal - convenient but highly improper. If 2^10 was, say, 1256, then for sure we wouldn't call it a &quot;kilo&quot; byte." CreationDate="2018-03-12T20:11:14.573" UserId="4582" />
  <row Id="10476" PostId="4425" Score="5" Text="Byte is not an SI unit. The SI unit for quantity is the mole. 1 GB is approximately 1.66 femtomole bytes" CreationDate="2018-03-13T10:38:59.633" UserId="1394" />
  <row Id="10516" PostId="4425" Score="1" Text="@l0b0 There is an actual reason for using 1024 byte fields. Because the number of bits you need to address the bytes allows up to 1024 bytes. Using 1000 is fine, but your address space allows 24 more bytes so why don't you use them? So 1024 is an &quot;binary even&quot; number for a reason, not just cargo cult." CreationDate="2018-03-14T08:33:21.477" UserId="4631" />
  <row Id="10517" PostId="4425" Score="1" Text="@allo What do you mean &quot;allows up to 1024 bytes&quot;? You're going to have to specify what you are referring to if you're making such a claim, otherwise it's still cargo cult." CreationDate="2018-03-14T08:38:04.167" UserId="2972" />
  <row Id="10518" PostId="4425" Score="0" Text="Lets say you have a string of 1024 bytes. Then you can use 10 bits to address any character in this string. Make it 1025 bytes and you need 11 bits. Make it 1000 bytes and you got some addresses left over. Most the time the constraint on the address length is harder than on the field itself. So making it 1024 is quite nice when you need at least 1000 bytes while avoiding to need 1025 is a good idea." CreationDate="2018-03-14T08:40:50.267" UserId="4631" />
  <row Id="10525" PostId="4425" Score="1" Text="This question requires correction. The linked IEC doc says nothing about KB. Please remove the false premise or otherwise eliminate this confusion, which only serves to further muddy an already unclear situation." CreationDate="2018-03-14T15:21:27.373" UserId="4429" />
  <row Id="10556" PostId="4425" Score="0" Text="When the largest memory was 32k it wasn't as confusing.  To anyone who entered the computing biz before about 1990 K=1024 and M= 1,048,576 (when describing RAM/disk storage size).  But this is confusing when a 64K RAM is  65,535 bytes, and also confusing when 64kHz is 64,000 Hz.  IBM decided to change the notation back maybe 1990, and most of the rest of the industry went along, some (the old big iron crowd) grudgingly, some (the new consumer computer biz) more happily." CreationDate="2018-03-14T21:53:37.087" UserId="4511" />
  <row Id="10603" PostId="4425" Score="1" Text="Teach them that both exist, explain WHY both exist, and tell them that people will likely be incredibly inconsistent as to which one they mean." CreationDate="2018-03-16T11:58:25.003" UserId="3196" />
  <row Id="15864" PostId="4425" Score="0" Text="KiB = 1024 Bytes &gt; KB = 1000 Bytes &gt; Kib = 1024 bits &gt; Kb = 1000 bits" CreationDate="2019-11-13T23:42:12.957" UserId="8611" />
  <row Id="18328" PostId="4425" Score="0" Text="Read this: https://stackoverflow.com/a/69679309/217867" CreationDate="2021-10-22T15:30:59.757" UserId="11127" />
  <row Id="10284" PostId="4426" Score="4" Text="Kilobyte was coined far before the 1,000 byte kilobyte in 1998. IEC really just made a mess of things." CreationDate="2018-03-09T19:09:23.550" UserId="2076" />
  <row Id="10285" PostId="4426" Score="51" Text="Yes, but kilo = 1000 goes back to 1795: https://www.etymonline.com/word/kilo- So non-geeks have some precedence here, perhaps. But more important: If you teach them just the one thing as the &quot;correct thing&quot; you are setting them up for confusion later. The world is messy. Teachers shouldn't pretend it isn't. Being dogmatic isn't very helpful." CreationDate="2018-03-09T19:12:03.737" UserId="1293" />
  <row Id="10290" PostId="4426" Score="0" Text="@GorchestopherH 2 x 2^30 = 2,147,483,648  It takes creative rounding to get that to 2.2TB.  It would be more like 7.4% for &quot;free&quot;." CreationDate="2018-03-09T20:33:18.477" UserId="4425" />
  <row Id="10314" PostId="4426" Score="1" Text="@Buffy but kilo SI is always small k. Large K is not kilo." CreationDate="2018-03-10T00:54:55.243" UserId="4429" />
  <row Id="10317" PostId="4426" Score="2" Text="@Sentinel: Except when set in all caps, say, in a C macro name under normal macro naming convention..." CreationDate="2018-03-10T01:17:10.567" UserId="1327" />
  <row Id="10318" PostId="4426" Score="1" Text="Or in spoken conversation, where capitalization is hard to indicate without awkward sentence structure. I'll let my answer stand as is, I think." CreationDate="2018-03-10T01:19:12.153" UserId="1293" />
  <row Id="10328" PostId="4426" Score="6" Text="Also kB/KB doesn't help with MB, GB, TB which a) are much more relevant b) have much bigger differences." CreationDate="2018-03-10T02:20:46.373" UserId="673" />
  <row Id="10335" PostId="4426" Score="30" Text="&quot;Sadly, the dual meanings is likely due to manufacturers trying to avoid confusion in the minds of unsophisticated customers&quot; More likely it is advertisers wanting their product to sound larger than it really is. Why advertise a 3TB hard drive using the correct 1TB=1024*1024*1024*1024 bytes when you can advertise a 3.3TB hard drive using the lawyer approved 1TB=1000*1000*1000*1000 bytes. 3.3 is bigger than 3, right?" CreationDate="2018-03-10T05:10:40.677" UserId="3900" />
  <row Id="10340" PostId="4426" Score="28" Text="@Readin Or, as I see it more often, a 3TB drive that actually has 2.7TB of total storage." CreationDate="2018-03-10T05:43:50.963" UserDisplayName="anon" />
  <row Id="10347" PostId="4426" Score="0" Text="@MaciejPichota Correct. But the question is specifically about kilo." CreationDate="2018-03-10T07:31:51.343" UserId="4429" />
  <row Id="10420" PostId="4426" Score="0" Text="@NicHartley It can equally well be argued that that is because *you* are misinterpreting what a TB is.." CreationDate="2018-03-12T04:17:49.063" UserId="1275" />
  <row Id="10427" PostId="4426" Score="4" Text="@immibis Oh, for sure. It's just two different standards. Of course, it's still an unfair representation, because they know full well that their users' computers will use the base-2 versions, so when they're expecting their computer to say 3 terabytes, they'll actually get 2.7." CreationDate="2018-03-12T05:25:36.950" UserDisplayName="anon" />
  <row Id="10472" PostId="4426" Score="1" Text="@NicHartley I know Windows does that (calculate in TiB then display as TB). Does OSX do that? Does Linux do that? How about industrial control systems that also use hard drives? I wouldn't say the manufacturer is lying, I'd say Windows is lying." CreationDate="2018-03-13T02:16:37.887" UserId="1275" />
  <row Id="10546" PostId="4426" Score="0" Text="@immibis For the record with Linux if you look at ls(1) you'll see: *`--block-size=SIZE    scale sizes by SIZE before printing them; e.g., '--block-size=M' prints sizes in units of 1,048,576 bytes; see SIZE format below`* and *`The SIZE argument is an integer and optional unit (example: 10K is 10*1024).  Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).`* I don't know about other tools off hand I just remember it typically being 2^10. On one of my smaller disks in this box: *`Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors`* (fdisk output)." CreationDate="2018-03-14T20:47:11.640" UserId="4650" />
  <row Id="10547" PostId="4426" Score="0" Text="@immibis As for the syscall stat(2): *`off_t     st_size; /* Total size, in bytes */   blksize_t st_blksize;     /* Block size for filesystem I/O */&#xA;blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */`* All in all the idea of having more than just the 2^10 version was a terrible idea." CreationDate="2018-03-14T20:49:46.710" UserId="4650" />
  <row Id="10558" PostId="4426" Score="0" Text="@Pryftan 512B isn't any of the above units. At best it's 0.5 KiB. But who wants to be mixing powers-of-10 fractions with power-of-1024 units? How much is 0.1 KiB?" CreationDate="2018-03-14T22:28:07.047" UserId="1275" />
  <row Id="10559" PostId="4426" Score="0" Text="@immibis: 0.5 is an exact base-ten representation of a power-of-two fraction." CreationDate="2018-03-14T22:33:23.193" UserId="2073" />
  <row Id="10570" PostId="4426" Score="0" Text="@immibis 2^10 == 1024. 1024/2 is what? And what is the size of a sector (though it's not a requirement)? 512 is what? 2^9. Nothing I suggested is amiss." CreationDate="2018-03-15T02:47:56.540" UserId="4650" />
  <row Id="12294" PostId="4426" Score="0" Text="I believe Mac OS X uses powers of 10 for disk space. I don't know about Windows/Linux." CreationDate="2018-05-04T19:10:37.357" UserId="3700" />
  <row Id="15378" PostId="4426" Score="0" Text="@Buffy. I don't think you can reasonably say that the scholars who came up with the metric system *weren't* geeks." CreationDate="2019-07-23T23:19:55.083" UserId="1060" />
  <row Id="21781" PostId="4426" Score="0" Text="@SilverWolf In MacOS, versions 10.5 and eariler used decimal prefixes with binary meaning, like Windows still does now. However, Apple fixed this in versions 10.6 and beyond so that the decimal prefixes shown to the user actually mean decimal units." CreationDate="2024-03-11T18:46:06.093" UserDisplayName="user14314" />
  <row Id="10320" PostId="4427" Score="2" Text="(Highly?) relevant question from StackOverflow: https://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement" CreationDate="2018-03-10T01:28:23.123" UserId="899" />
  <row Id="10360" PostId="4427" Score="9" Text="@tonysdg Maybe (Highly?er) relevant answer from Software Engineering: https://softwareengineering.stackexchange.com/a/118793/275869" CreationDate="2018-03-10T14:41:36.900" UserId="104" />
  <row Id="10395" PostId="4427" Score="0" Text="Comments are for suggesting improvments on the question or requesting more information; feel free to continue this discussion [in chat](https://chat.stackexchange.com/rooms/74339/discussion-on-question-by-yotam-salmon-is-it-bad-to-force-my-students-not-to-ret)." CreationDate="2018-03-11T13:11:28.100" UserId="58" />
  <row Id="10575" PostId="4427" Score="0" Text="Early or late returns, or both.  Mid-block returns, and returns from loops and nested if statements are smells, and why they should be avoided can be explained in easy terms of hiding the intent (loops should terminate when items are found, deeply nested conditions should be made early checks or the mainline logic)" CreationDate="2018-03-15T05:42:43.977" UserId="4657" />
  <row Id="20067" PostId="4427" Score="1" Text="If this a question about teaching. Or about whether structured programming is a good idea. Whether `goto` is considered harmful. Whether you should be able to have an idea of what you code does if folded (folding= collapsing the view of functions / selection / iterations, into a single line)." CreationDate="2022-05-20T20:33:21.573" UserId="204" />
  <row Id="10308" PostId="4428" Score="5" Text="I think that caveat is more important than calling it a &quot;caveat&quot; may suggest. I'm of the opinion that clear and understandable code is priority #1 (well, maybe #2 after _working_ code), and all other rules can be bent to that aim. But if you do want to have a general principle about early returns, I definitely agree that allowing and even encouraging them seems like a better choice than forbidding them, for exactly the reasons you describe." CreationDate="2018-03-09T23:16:51.510" UserId="1357" />
  <row Id="10319" PostId="4428" Score="3" Text="I'd also like to add a caveat -- this answer makes a lot of sense in a high school context, where the language is probably high-level (Python, Java, etc.) with managed memory. In lower-level languages (e.g., C), returning late may make for [much cleaner and more readable code](https://stackoverflow.com/a/245761/5003848)." CreationDate="2018-03-10T01:27:38.607" UserId="899" />
  <row Id="10321" PostId="4428" Score="1" Text="@tonysdg, I don't find the code you link to very compelling. I can make it much cleaner and more understandable with no goto statements at all. For example, within the limits of formatting here, a part of it could be: `if (!doB()) {undoB(); undoA(); return;}` (undoing both B and A)" CreationDate="2018-03-10T01:36:30.670" UserId="1293" />
  <row Id="10322" PostId="4428" Score="0" Text="@Buffy: The second comment on that answer says the very same thing actually :) I guess I personally find the format in that link to be very clean -- it reminds me of unwinding a stack -- but I see your point. I'll also point to [this answer](https://stackoverflow.com/questions/24451/is-it-ever-advantageous-to-use-goto-in-a-language-that-supports-loops-and-func/24476#24476) on a separate question -- the answer and its comments have (IMO) thought-provoking points about the pros and cons of various forms of control flow (`return` and `goto` included). Probably out of scope for high school tho." CreationDate="2018-03-10T01:50:44.337" UserId="899" />
  <row Id="10338" PostId="4428" Score="2" Text="Modern optimizers are pretty sharp about implementing return early even when you don't do it in your code. The efficiency argument is not as strong as it was when I was learning." CreationDate="2018-03-10T05:20:15.283" UserId="1537" />
  <row Id="10414" PostId="4428" Score="1" Text="I was taught never to return early.  Then in javascript I realized returning undefined or empty lists early let me scrap all the error cases at the beginning.  This cleaned up my code.  Then I started using early return cases for edge cases that didn't follow the main flow.  Such as `if isSpecialCase(input)) { return handleSpecialCase(input); }`.  Not sure what other uses I will find later, but I think the problem the teacher is trying to address is very disorganized code by beginners which isn't bad intent by any means." CreationDate="2018-03-11T20:16:37.957" UserId="2526" />
  <row Id="10440" PostId="4428" Score="0" Text="@DavidZ After priority #1 (working code), isn't just about any design pattern and rule we have ever heard about just a means to fulfill priority #2? Thus not only _can_ rules be bent, but they _should_ be bent to that aim if it clears up code. Of course, whether your own code is clear is not always easy to judge, so we have rules to give people objecive criteria they can hang on to." CreationDate="2018-03-12T13:22:23.623" UserId="4234" />
  <row Id="10453" PostId="4428" Score="1" Text="Some languages virtually require it. It's not possible to write idiomatic Go, for instance, without returning early. Or understandable Go, for that matter." CreationDate="2018-03-12T17:11:29.663" UserId="4575" />
  <row Id="10480" PostId="4428" Score="0" Text="function foo() { if (!foo_enabled()) { return false; } /* lots and lots of code here */ } &#xA;What could be more readable then this?" CreationDate="2018-03-13T14:36:29.883" UserId="4614" />
  <row Id="14369" PostId="4428" Score="0" Text="Revisiting this almost a year later, it occurs to me that you can only really make this case in languages that support some construct like `finally` that can be executed unconditionally. (Some other features that provide this sort of functionality are Python's context managers, C#'s `IDisposable`, and Java's `try`-with-resources.) Without that, single return will likely serve you well in situations where you need to release a resource. Students should be made aware of that reality, at minimum." CreationDate="2019-02-20T01:34:53.847" UserId="981" />
  <row Id="20068" PostId="4428" Score="0" Text="You say: &quot;If you return only at the end, say `return result;` then … You have to understand it 'as a whole'. &quot;. I would argue the opposite for exactly the same reason. If you have `returns`/`goto`s nested in `if`s, then you have to understand all levels of the indentation at the same time. However, I agree with &quot;Of course if you always write three statement methods, this won't occur.&quot;, but you are still left with these nested returns to trip you up." CreationDate="2022-05-20T20:37:57.937" UserId="204" />
  <row Id="10377" PostId="4429" Score="3" Text="Incorrect, unfortunately. Different operating systems report differently. Specifically the fruity ones." CreationDate="2018-03-10T23:43:14.113" UserId="4076" />
  <row Id="10403" PostId="4429" Score="0" Text="Incorrect, fortunately. Decent operating systems report sizes correctly, with GB = 1 billion bytes. The fruity ones started it." CreationDate="2018-03-11T18:02:38.917" UserId="4529" />
  <row Id="10503" PostId="4429" Score="4" Text="@gnasher729: Given that allocation units are multiples of 512 bytes on just about every operating system, reporting disk utilization in units of 1024 bytes makes a lot more sense to me than reporting in base ten units." CreationDate="2018-03-13T23:06:24.350" UserId="2073" />
  <row Id="10304" PostId="4430" Score="0" Text="Not seen many decimal based computers recently so Kb when referring to computer isn't ambiguous" CreationDate="2018-03-09T22:05:29.447" UserId="4433" />
  <row Id="10323" PostId="4430" Score="3" Text="@Neuromancer Whether it's ambiguous or not has nothing to do with decimal based computers..." CreationDate="2018-03-10T01:57:01.230" UserId="1275" />
  <row Id="10351" PostId="4430" Score="0" Text="@smithkm Show me where k small k is ambiguous." CreationDate="2018-03-10T07:38:26.403" UserId="4429" />
  <row Id="10368" PostId="4430" Score="1" Text="@Neuromancer Kb means... Maybe kb. Oh, the speed of telephone modems that were common until the early 2000s was given in kb/s." CreationDate="2018-03-10T20:40:42.720" UserId="738" />
  <row Id="10550" PostId="4430" Score="0" Text="@rexkogitans It was Kbps for Kilobits per second. Of course some networking utilities would scale it to bytes and that would be KB/s (usually something like that) but the modems were Kbps just like now it might be Mbps or Gbps (and so on). Or if you're extremely unlikely yes Kbps. (Perhaps some wrote it as kbps though)" CreationDate="2018-03-14T21:22:55.487" UserId="4650" />
  <row Id="10293" PostId="4431" Score="0" Text="This was the answer I was looking for when I read the question. Was surprised to see the top-voted one did not mention kibibytes, which is really at the heart of the answer here." CreationDate="2018-03-09T20:58:41.000" UserId="4427" />
  <row Id="10316" PostId="4431" Score="54" Text="Beyond just teaching both, you need to teach that **k/kilo** can mean either depending on context/who's using it. Just because kibble exists doesn't mean people like or actually use it." CreationDate="2018-03-10T01:14:41.910" UserId="1327" />
  <row Id="10352" PostId="4431" Score="7" Text="If you cover bits and bytes, you should also at least briefly mention that a &quot;kilobit&quot; is nearly always 1000 bits (because networking) and a &quot;kilobyte&quot; is nearly always 1024 bytes (because everything-except-for-networking)." CreationDate="2018-03-10T07:45:11.747" UserId="1896" />
  <row Id="10356" PostId="4431" Score="31" Text="1MiB is ≈5% bigger that 1MB, 1GiB is 7.4% bigger that 1GB, and 1TiB is nearly 10% bigger than 1Tb." CreationDate="2018-03-10T10:14:53.753" UserId="204" />
  <row Id="10383" PostId="4431" Score="1" Text="@ctrl-alt-delor, still nowhere near 8x." CreationDate="2018-03-11T04:14:25.843" UserId="4514" />
  <row Id="10384" PostId="4431" Score="17" Text="I was always taught that the base is binary, an 8-bit word is a Byte, a 16-bit word is two Bytes and, following binary convention 1KB is 1024 Bytes, 1MB is 1024 KB, 1GB is 1024 MB, 1TB is 1024 GB - and in binary, the base unit of computing, it makes perfect sense. I have always found the attempted adoption of SI usage an incorrect and unnecessary confusion. That said, as an educator, a student will need to understand the confusion." CreationDate="2018-03-11T04:16:36.450" UserId="4513" />
  <row Id="10387" PostId="4431" Score="57" Text="*&quot;Should I teach that 1 KB = 1024 bytes or 1000 bytes?&quot;* **Yes.** :-)" CreationDate="2018-03-11T06:01:56.497" UserId="823" />
  <row Id="10392" PostId="4431" Score="5" Text="@Willtech - an octet is 8 bits.  An Apple ][+ has 7 bit bytes." CreationDate="2018-03-11T09:29:15.320" UserId="1676" />
  <row Id="10417" PostId="4431" Score="4" Text="@Kevin and for those of us older than ethernet, kilobits are binary https://electronics.stackexchange.com/questions/95389/why-are-eeprom-sizes-measured-in-k-or-kbit-and-not-kbyte-or-byte" CreationDate="2018-03-11T22:38:41.533" UserId="1498" />
  <row Id="10418" PostId="4431" Score="6" Text="I'd also teach to **read the context**: &quot;four kay&quot; being for things like block sizes or amounts of memory is *almost always* going to mean 4096. If someone colloquially says &quot;sixty-four kay of flash&quot; when talking about a microcontroller, that means 65536 bytes (maybe missing some). If someone says &quot;2 gigs of memory&quot; when talking about RAM, that means 2 GiB. By way of contrast, I've never heard an Ethernet frame quoted as being &quot;1.5 kay&quot;, or &quot;9 kay&quot;, because that would be misleading/confusing. Mass storage is the thing at fault here." CreationDate="2018-03-12T00:41:54.687" UserId="4535" />
  <row Id="10423" PostId="4431" Score="2" Text="@Willtech There used to be reasons why 1024 byte powers were convenient, but they no longer apply with more advanced technology that is capable of dividing by 1000." CreationDate="2018-03-12T04:27:52.847" UserId="1275" />
  <row Id="10424" PostId="4431" Score="3" Text="@immibis has how RAM is manufactured changed? It is still binarily addressable in structure." CreationDate="2018-03-12T04:33:35.767" UserId="4513" />
  <row Id="10425" PostId="4431" Score="4" Text="@Willtech RAM is only a small slice of the things that are measured in bytes, and most other things (such as hard drives) have no reason to have power-of-two sizes. Modern systems are also much more able to deal with NPOT sizes - for example we no longer want to hard-wire address decoders using the minimal number of gates. By the way, modern memory chips actually include spare rows to automatically replace faulty ones, so that proves they can make any number of rows (because the total isn't a power of two)." CreationDate="2018-03-12T04:46:45.950" UserId="1275" />
  <row Id="10428" PostId="4431" Score="0" Text="@immibis When we invent technology like PAE, that doesn't justify limiting paging to 01110111001101011001010000000000 bytes." CreationDate="2018-03-12T05:30:35.057" UserId="4513" />
  <row Id="10429" PostId="4431" Score="0" Text="Alright, most addressing is probably in hex values but it is compatible with binary." CreationDate="2018-03-12T05:48:33.740" UserId="4513" />
  <row Id="10432" PostId="4431" Score="1" Text="You should teach a generalization of @R.. 's excellent comment: *&quot;Just because an standard exists doesn't mean people like or actually use it.&quot;*. I **wish** they had taught me that. Then I would still encourage them to use standards whenever practical (instead of [reinventing the wheel](https://xkcd.com/927/)), even if it means jumping through a couple of hoops." CreationDate="2018-03-12T08:35:16.230" UserId="994" />
  <row Id="10433" PostId="4431" Score="5" Text="Just to add to this though, prepare your students for the fact that they will almost certainly never find anyone using the word &quot;kibibyte&quot; in the real world. I've been working in software for 20+ years, as well as spending years building my own PCs, and I've never once seen it used. Occasionally I've seen people write &quot;KiB&quot; - and it's always read as &quot;kilobytes&quot;. Even that is a small minority of cases though." CreationDate="2018-03-12T09:14:02.343" UserId="1864" />
  <row Id="10444" PostId="4431" Score="0" Text="I have a 2TB hard drive. The capacity from hardware properties shows 1907601MB which doesn't add up with either formats. Why is that?" CreationDate="2018-03-12T14:07:38.237" UserId="4563" />
  <row Id="10454" PostId="4431" Score="3" Text="@FisNaN: 1907601 MiB * 1048576 B/MiB = 2000264626176 B; the hardware properties are using the wrong prefix" CreationDate="2018-03-12T17:17:28.983" UserId="4418" />
  <row Id="10458" PostId="4431" Score="0" Text="Congratulations on going over 100 up votes. I think that is a first here." CreationDate="2018-03-12T19:42:18.577" UserId="1293" />
  <row Id="10468" PostId="4431" Score="6" Text="And while your students may never even use one, it may be instructive, as an example of just how confusing the terminology can get, to note that a 1.44 &quot;megabyte&quot; floppy disk is neither 1000*1000*1.44 nor 1024*1024*1.44, but in fact 1000*1024*1.44 bytes." CreationDate="2018-03-12T23:46:46.973" UserId="4588" />
  <row Id="10474" PostId="4431" Score="0" Text="@NickT, we say “one and a half kay” for the size of a packet all the time. But we’re talking about the amount of memory needed to hold it, not the actual transmission, so maybe that makes the difference." CreationDate="2018-03-13T08:00:49.250" UserId="4514" />
  <row Id="10475" PostId="4431" Score="2" Text="@ClementCherlin Actually, floppies were simply 1440 KiB; as much KiB's as they could fit on the disk. Hard disks and flash memory still have blocks the size of some-power-of-two of bytes, and an integer multiple of those for the total capacity." CreationDate="2018-03-13T09:55:44.177" UserId="4603" />
  <row Id="10484" PostId="4431" Score="1" Text="@prl 1518 B and 1522 B (+4 for VLAN tags in 802.3ac) are common for Ethernet frames, when you say &quot;one and a half kay&quot;, to which are you referring? Sure, once you establish either and are exclusively using it, abbreviate, but to a new person/group, they'll have no idea." CreationDate="2018-03-13T15:59:17.713" UserId="4535" />
  <row Id="10512" PostId="4431" Score="0" Text="@NickT, 1.5 KB is enough memory to hold either size." CreationDate="2018-03-14T01:37:03.917" UserId="4514" />
  <row Id="10514" PostId="4431" Score="0" Text="@prl punch 1536 into the wrong MTU field and you just slowed your network by 10-20%" CreationDate="2018-03-14T03:26:50.270" UserId="4535" />
  <row Id="10515" PostId="4431" Score="0" Text="@NickT, again, I’m talking the amount of memory needed to contain a packet, not what is in the packet." CreationDate="2018-03-14T04:43:03.850" UserId="4514" />
  <row Id="10543" PostId="4431" Score="0" Text="I would say that technically, KiB means 1024 bytes and kB means 1000 bytes, but a more informal convention exists to use KB (or kB?) for 1024 bytes." CreationDate="2018-03-14T19:18:39.970" UserId="4621" />
  <row Id="10552" PostId="4431" Score="1" Text="@JohnPeyton: Uppercase &quot;K&quot; has been widely recognized as unambiguously meaning 1024, at least in contexts that would support using a lowercase &quot;k&quot; when appropriate, for 40+ years; the notion that there's anything wrong with that notation is far more recent." CreationDate="2018-03-14T21:35:40.503" UserId="2073" />
  <row Id="10554" PostId="4431" Score="2" Text="@supercat I'm not sure I would admit that such usage is unambiguous, given that the prefix has been defined as meaning 1000 for centuries. And the same applies to the prefixes M, G, etc., which have no such case distinction to help." CreationDate="2018-03-14T21:39:33.603" UserId="4621" />
  <row Id="10557" PostId="4431" Score="1" Text="@JohnPeyton: When has the uppercase version been defined as a prefix meaning 1000, other than in contexts where lowercase would have been unavailable?  I agree the larger prefixes have always been a problem, though I'm a bit curious as to why there's only now an interest in changing them?  If someone had proposed new terms in the 1970s, that would have been much more useful than redefining the terms after decades of use." CreationDate="2018-03-14T22:07:15.740" UserId="2073" />
  <row Id="10640" PostId="4431" Score="2" Text="Moreover, teach that the 1 kB = 1000 B and 1 KiB = 1024 B is the _official standard_ (by ISO, etc.) for the usage of these prefixes but there still exist a lot of _non-standard_ usages in relation to kB (usually given as &quot;KB&quot;), especially in older products and legacy systems. And if ambiguity can be a problem to say that one should either specify that kB = 1000 B or to stick with KiB ( = 1024 B) (and the higher MiB, GiB, etc.) exclusively as that one is unambiguous even if not a nice decimal factor (though you SHOULD know your powers of 2! :) )." CreationDate="2018-03-17T08:47:13.100" UserId="4693" />
  <row Id="10641" PostId="4431" Score="4" Text="But in the interests of getting standards used and adopted, _firmly discourage_ them from _using_ kB/KB _themselves_ to mean 1024 B, _even if others are doing so_. They should _only_ know this usage for _understanding others' work_, NOT for using it in their own! The way to break the habit is to get the next generation doing the right thing so they replace the old dogs and push bad practices into the history bin where they belong." CreationDate="2018-03-17T08:48:40.130" UserId="4693" />
  <row Id="11647" PostId="4431" Score="0" Text="@JimmyB My point is that the &quot;megabyte&quot; used in the description &quot;1.44 megabyte floppy disk&quot; is neither power-of-ten nor power-of-two, but a combination of both. The reasons why a high-density 3.5&quot; floppy disk has that particular size are not relevant to this discussion. The inconsistent use of terminology is. See http://mathworld.wolfram.com/Megabyte.html" CreationDate="2018-03-18T14:44:47.993" UserId="4588" />
  <row Id="11656" PostId="4431" Score="1" Text="@ClementCherlin Ah, yes, 1440 KiB is neither 1.44 MiB nor 1.44MB, but either ~1.41MiB or ~1.47 MB." CreationDate="2018-03-19T10:37:03.647" UserId="4603" />
  <row Id="21789" PostId="4431" Score="0" Text="@Willtech `and in binary, the base unit of computing, it makes perfect sense. I have always found the attempted adoption of SI usage an incorrect and unnecessary confusion.` The conventional units have meant base 10 for a long time and mean base 10 in almost every other field, and trying to use the same prefixes to mean something different is what causes confusion. Something that &quot;makes perfect sense&quot; to industry insiders isn't likely to make sense to people unfamiliar with the innards of computers, so I think that the base 2 units should have been introduced from the beginning." CreationDate="2024-03-12T10:59:03.367" UserDisplayName="user14314" />
  <row Id="21854" PostId="4431" Score="0" Text="@000 Then why are blocks in bytes of 8-bits?" CreationDate="2024-03-25T18:13:44.917" UserId="4513" />
  <row Id="10287" PostId="4433" Score="1" Text="The consensus seems to be that disk size is the nearest simple approximation *lower than* n×1000^m. So 2.057×10^12 bytes would be *advertised as* 2 TB, not 2.1 TB." CreationDate="2018-03-09T20:15:37.257" UserId="2972" />
  <row Id="10459" PostId="4433" Score="4" Text="I'd note the prefixes rarely (basically never) have their binary meaning with units other than *bytes*. A megapixel is 1 million pixels, a megabit is a million bits." CreationDate="2018-03-12T19:51:46.570" UserId="4579" />
  <row Id="10638" PostId="4433" Score="1" Text="The filesystem megabyte being $2^{20}$ bytes - maybe.  Sometimes in the same OS you'll see &quot;megabytes&quot; (including decimal precision) being $10^6$ in some of the tools and $2^{20}$ in others.  Most often in command line tools vs GUI tools, but I know of an OS where even different OS-provided GUI tools disagree on this..." CreationDate="2018-03-17T02:31:44.557" UserId="1301" />
  <row Id="17767" PostId="4433" Score="1" Text="@davidbak is right. It depends on OS also. In 2009, Apple switched to standards-based prefixes for filesystems etc, to match disk drive manufacturers, i.e. GB = 10^9 bytes. https://eshop.macsales.com/blog/1852-snow-leopard-changes-they-way-we-look-at-gigabytes-and-megabytes-and-kilobytes-as-well/   Ubuntu changed in 2010 https://wiki.ubuntu.com/UnitsPolicy  When will Windows catch up with reality?" CreationDate="2021-03-10T21:11:47.537" UserId="10229" />
  <row Id="21790" PostId="4433" Score="0" Text="@nealmcb I'm glad I'm not the only one who's been ticked off by this. I've always found it odd when Windows displayed something like `100.71 MB (105,600,322 bytes)` and was never able to figure out why this was the case until I learned about the whole fiasco with binary vs. decimal units." CreationDate="2024-03-12T11:11:49.783" UserDisplayName="user14314" />
  <row Id="10456" PostId="4434" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/74396/discussion-on-answer-by-sentinel-should-i-teach-that-1-kb-1024-bytes-or-1000-b). Discussion is for chat, not for comments, and any further discussion in the comments will be deleted." CreationDate="2018-03-12T17:30:36.780" UserId="58" />
  <row Id="10354" PostId="4436" Score="5" Text="I've never seen, in a similar timeframe, MiB etc. used for RAM. KB/MB/GB/TB as concerned with RAM always is 1024-based." CreationDate="2018-03-10T08:52:12.820" UserId="652" />
  <row Id="10367" PostId="4436" Score="8" Text="If you're using upper-case *K* for *kilo*, you're wrong. (I have seen people mixing up millimetre with megamolar.)" CreationDate="2018-03-10T20:24:10.837" UserId="1060" />
  <row Id="10463" PostId="4436" Score="2" Text="I think I'd sooner say/write &quot;binary megabyte&quot; for MiB than &quot;mebibyte&quot;, but the abbreviation would be OK." CreationDate="2018-03-12T21:05:46.920" UserId="2208" />
  <row Id="10530" PostId="4436" Score="0" Text="@MontyHarder: From a pronunciation standpoint, how about em-byte?" CreationDate="2018-03-14T15:59:44.977" UserId="2073" />
  <row Id="10544" PostId="4436" Score="0" Text="@supercat &quot;em-byte&quot; sounds like an abbreviation of megabyte. It therefore doesn't resolve the ambiguity the way MiB does.  I find MiB a useful abbreviation (the &quot;i&quot; infix represents &quot;b_i_nary&quot;), but the word &quot;mebibyte&quot; itself is not coming out of my mouth smoothly, if at all." CreationDate="2018-03-14T19:23:51.457" UserId="2208" />
  <row Id="10545" PostId="4436" Score="0" Text="@MontyHarder: I don't mind the written form MiB nearly as much as the pronunciation.  The pronunciation of &quot;Blvd.&quot; is &quot;boulevard&quot;, not &quot;bull-vid&quot;.  One might have to tweak a pronunciation rule slightly to say that if letters are pronounced for both the prefix and the unit [e.g &quot;kay-gee&quot; for mass or &quot;kay-em&quot; for distance], then the power-of-ten prefix applies.  I think &quot;bits&quot; and &quot;bytes&quot; are usually pronounced as words, however, rather than as &quot;bee&quot;." CreationDate="2018-03-14T20:16:56.837" UserId="2073" />
  <row Id="10549" PostId="4436" Score="0" Text="@supercat If I speak one part of the actual word I will speak it all; so I'd say kilobyte but I'd not say Kbyte like that (more so Kbyte I'd pronounce kilobyte). I'd pronounce KB as the two letters individually. Maybe you're not saying that but in case you are that's how I would do it. I commend anyone who actually goes further than the binary way but I just can't for whatever reason. I'm not sure it's that I'm stubborn (although that's part of it).  Even then MiB looks awful to me. Unfortunately language is meant to communicate and the double standards here complicate matters but what to do?" CreationDate="2018-03-14T21:18:13.747" UserId="4650" />
  <row Id="10551" PostId="4436" Score="0" Text="@Pryftan: I would pronounce 65,536 bytes as sixty-four kay-bytes, and a 32768Hz signal as thirty-two kay-hertz.  The use of a pronounced letter only for the prefix indicates, at least to my ear, a meaning different from pronouncing the metric prefix." CreationDate="2018-03-14T21:27:46.260" UserId="2073" />
  <row Id="10553" PostId="4436" Score="0" Text="@supercat Fair enough. I'm not saying you're wrong, of course; I'm just saying how I would do it. I'm unsure how I would pronounce your examples but possibly literally the way you wrote them. In any event I never say K-bits or M-bits; I either say kilobits or megabits or Kb/Mb (or whatever). Similarly Mbps I say megabits per second. And I thought the mess was bad enough; apparently it's even more confusing. Such is life when you have unwise standard changes (in one version of *`accept(2)`* Linus cited another example this one being a blunder of POSIX and how they tried to save face)." CreationDate="2018-03-14T21:35:50.987" UserId="4650" />
  <row Id="15376" PostId="4436" Score="0" Text="@TRiG: I'll grant you that in reference to where I used &quot;K&quot; for &quot;kilo-&quot; but apparently &quot;K&quot; for &quot;kebi-&quot; is correct under both IEC and JEDEC nomenclature." CreationDate="2019-07-23T21:35:23.277" UserId="4434" />
  <row Id="15377" PostId="4436" Score="0" Text="k for kilo; Ki for kibi, yes. Odd, but true. (Not kebi, though. That's some Anime character.) Incidentally, I'm happy to see I'm not the only person happy to reawaken year-long conversations." CreationDate="2019-07-23T23:14:39.530" UserId="1060" />
  <row Id="10415" PostId="4437" Score="7" Text="I agree but before providing a proper discussion with my students, I'm providing a proper discussion here which was my intention in the first place (instead of getting simple _one or the other_ answers)." CreationDate="2018-03-11T20:32:59.927" UserId="4340" />
  <row Id="21451" PostId="4437" Score="0" Text="it sucks when nobody knows what measuring unit we're using in the system that we've already built and it somehow already works" CreationDate="2023-10-05T18:44:16.417" UserId="13911" />
  <row Id="10339" PostId="4438" Score="16" Text="+1 A function that won't fit in one screen of text is usually too long and needs to be broken up (except when it isn't)" CreationDate="2018-03-10T05:21:01.093" UserId="1537" />
  <row Id="10442" PostId="4438" Score="1" Text="It's also important to teach them about coding standards, and that those standards will probably dictate which one they must use." CreationDate="2018-03-12T13:52:30.793" UserId="1069" />
  <row Id="10446" PostId="4438" Score="0" Text="@DoctorJones I wouldn't say &quot;probably,&quot; as a lot of shops won't have something like this formally documented. ;) And unless you're working on something that's life and death, a standard to this level of detail is probably too heavy weight. But yes, they should be aware that it's possible." CreationDate="2018-03-12T15:30:41.870" UserId="981" />
  <row Id="10376" PostId="4441" Score="9" Text="Note that while KB as 1000 may be flat wrong, it's also necessary to teach that a lot of people do this wrong, and thus students must never trust KB to mean 1024 without further knowledge of the context." CreationDate="2018-03-10T23:39:03.223" UserId="4076" />
  <row Id="10391" PostId="4441" Score="1" Text="@Peter Agreed 100% A broad discussion of history and context in a way that is interesting and entertaining would help differentiate a mediocre from a decent education." CreationDate="2018-03-11T08:33:14.047" UserId="4429" />
  <row Id="10421" PostId="4441" Score="2" Text="In what way is number 3 &quot;the only useful definition&quot;?" CreationDate="2018-03-12T04:19:22.397" UserId="1275" />
  <row Id="10467" PostId="4441" Score="0" Text="@BenI. '@Sentinel Please remember to assume good intentions and to adhere to our [Be Nice](https://cseducators.stackexchange.com/help/be-nice) policy. I've moved this discussion [to chat](https://chat.stackexchange.com/rooms/74412/discussion-on-answer-by-sentinel-should-i-teach-that-1-kb-1024-bytes-or-1000-b), where you can continue it in a respectful fashion, remembering that we're all reasonable human beings who are here to discuss teaching together." CreationDate="2018-03-12T23:38:39.523" UserId="58" />
  <row Id="10508" PostId="4441" Score="1" Text="@immibis - it was said to be &quot;the only useful definition ***in software engineering***&quot;. Because of the binary nature of computer architecture and software, it's probably correct. Outside of discussions about computers and particularly software, it is most likely not correct." CreationDate="2018-03-14T00:34:48.620" UserId="4625" />
  <row Id="10531" PostId="4441" Score="4" Text="@KevinFegan: The only situations I can think of where using an uppercase K for 1000 should not be viewed as being simply wrong would those where a lowercase &quot;k&quot; is unavailable, e.g.some situations involving signage or limited character sets." CreationDate="2018-03-14T16:01:30.813" UserId="2073" />
  <row Id="17771" PostId="4441" Score="0" Text="Can you cite any sources for claim #3 that KB &quot;has always meant 1024 bytes&quot;? That sort of clarity has certainly not been my experience over my 5 decades in the industry." CreationDate="2021-03-13T01:13:24.593" UserId="10229" />
  <row Id="10325" PostId="4442" Score="0" Text="Sorry, not convincing in most cases. Three helpers is no more infeasible than three code blocks. Nor is is more or less likely to call them in the wrong order vs to order the blocks wrongly. You are closer, though, if the helpers require excessive args or return values, but then, I suspect the code is already so obfuscated that abstracting out this structure doesn't help you much. Probably it need a complete rethinking rather than just throwing more code in one function. Your &quot;Do thing...&quot; sections should probably be factored out, for example. I trust you that code like this exists frequently." CreationDate="2018-03-10T02:00:50.557" UserId="1293" />
  <row Id="10329" PostId="4442" Score="3" Text="@Buffy: Expanded and revised.  But regardless of your personal opinion, it should be emphasized that Linus won't accept pull requests which use helper functions.  So if you plan to submit code to Linux or Git, you *must* use the `goto` cleanup method even if you hate it." CreationDate="2018-03-10T02:31:10.673" UserId="1896" />
  <row Id="10330" PostId="4442" Score="0" Text="The structure of the code is this. It is a nest of shells (3 or 4 depending). Each shell, say the &quot;do C&quot; shell tries something that might fail. If it fails it cleans up after _itself_ and may signal a containing shell. The &quot;do B&quot; shell has the same structure except that it contains the &quot;do C&quot; shell. It tries something and cleans up after _itself_  if needed and passes error codes to outer any shell (including failure of &quot;do C&quot;). If you code it that way it is much simpler. You don't have to think about much but getting each level correct. That is what you are trying to achieve here, I think." CreationDate="2018-03-10T02:43:51.587" UserId="1293" />
  <row Id="10331" PostId="4442" Score="0" Text="Moreover it doesn't contradict the &quot;return as early as you can&quot; idea. Each shell can do that, of course, if no cleanup is needed, but an outer shell can't return until a contained shell does. But that is just the same as occurs when one function calls another. I won't try to stand between you and Linus, of course." CreationDate="2018-03-10T02:49:11.003" UserId="1293" />
  <row Id="10332" PostId="4442" Score="6" Text="&quot;but an outer shell can't return until a contained shell does&quot; - Don't you see that the `goto` statements functionally *are* returns?" CreationDate="2018-03-10T03:44:53.727" UserId="1896" />
  <row Id="10333" PostId="4442" Score="1" Text="I also took the liberty of writing a *real* example, which I think makes it very clear that helper functions would be much harder to read." CreationDate="2018-03-10T04:04:22.350" UserId="1896" />
  <row Id="10334" PostId="4442" Score="0" Text="Welcome to [cseducators.se]. I like you post, for what it is. Unfortunately it doesn't actually _answer_ the question. It seems more like a discussion about the the need/usability of single/multiple returns in functional code. Can you edit this to use your information to answer the OP's question about teaching/forcing a single `return` in a subroutine. I believe there could be some gold in these hills, it just has to be mined and refined." CreationDate="2018-03-10T04:38:42.413" UserId="104" />
  <row Id="10343" PostId="4442" Score="1" Text="@GypsySpellweaver: I do believe I *did* discuss that, in both the first and last paragraphs.  Perhaps if I had not been repeatedly pestered about the viability of this technique, that would have made up a larger component of this answer.  Nevertheless, it does appear to answer the question as asked from where I sit.  Do you have any specific and actionable suggestions?" CreationDate="2018-03-10T06:42:28.663" UserId="1896" />
  <row Id="10344" PostId="4442" Score="0" Text="Is it wrong to force the _students_ (not active professional team programmers) to only use one `return`? Or is it wrong to allow the students to use multiple `return`s in an understood manner, possibly subject to guidelines from the instructor?" CreationDate="2018-03-10T06:47:33.377" UserId="104" />
  <row Id="10345" PostId="4442" Score="1" Text="@GypsySpellweaver: This is a false dichotomy, as my answer explains in great detail.  There are situations where multiple returns are appropriate and situations where single return is appropriate." CreationDate="2018-03-10T06:49:00.153" UserId="1896" />
  <row Id="10346" PostId="4442" Score="0" Text="Simple, and much improved because of it. Now the bulk of the answer _explains_, and supports your answer. Keeping aware of what the students will find _in the wild_ is important, giving them a firm foundation to build on is better than _teaching the test_, as is all too often done in some subject and schools recently." CreationDate="2018-03-10T06:55:52.407" UserId="104" />
  <row Id="10348" PostId="4442" Score="1" Text="Indeed, welcome to [cseducators.se]. Pestered or no, this is really a wonderful answer. I hope we hear more from you." CreationDate="2018-03-10T07:32:39.173" UserId="27" />
  <row Id="10370" PostId="4442" Score="4" Text="It is wrong to talk to students about a single vs multi return policy without explaining that it depends on the language. This answer makes clear that single returns are an established `c` pattern. One that should not be dictated to any of these other languages that have their own construct for cleaning up resources." CreationDate="2018-03-10T21:12:06.330" UserId="1401" />
  <row Id="10437" PostId="4442" Score="0" Text="&quot;converting the above example into a flag-based design will result in an excess of if statements, which are too numerous here already.&quot;  Too numerous for whom?  You have a nesting conditional structure, which can *and should* be represented neatly with &quot;if&quot; statements.  Instead your code has deliberately obfuscated that structure, which makes it harder to maintain.  If there was a performance benefit then perhaps you could justify it, but there isn't.  Thank you though for a great example of an anti-pattern - I will use this myself for people I mentor, to literally show them how not to do it." CreationDate="2018-03-12T11:50:35.983" UserId="1864" />
  <row Id="10535" PostId="4442" Score="0" Text="I prefer to avoid &quot;helper functions&quot; as described in this answer. Instead I try to take a different approach _where viable_; that is, to have a function or functions that do the work _only_ do the work. They are called from a memory management function that only does the setup and the cleaning up.  I can return early or do anything else in the work function, and when I do, the clean-up is handled as part of the return from the function instead of the function explicitly having to clean up after itself, worker function or not." CreationDate="2018-03-14T16:24:16.723" UserId="993" />
  <row Id="10592" PostId="4442" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/74580/discussion-on-answer-by-kevin-is-it-bad-to-force-my-students-not-to-return-early)." CreationDate="2018-03-15T17:34:22.123" UserId="58" />
  <row Id="20955" PostId="4442" Score="0" Text="I'd like to point out that is basically implementing your own `finally` functionality, which is a sound approach in a language that lacks an explicit implementation of one. The reason to avoid `goto` is because of *misuse* of the feature, and in a language that lacks a replacement for a proper use, you really have no better option. I'm glad we have higher level languages that have made `goto` unnecessary with their own features, but C is a different beast from a time before we knew how to do that." CreationDate="2023-02-10T01:33:48.470" UserId="981" />
  <row Id="10469" PostId="4445" Score="0" Text="@immibis '@Lynob If you'd like to continue this discussion, plase do so [in chat](https://chat.stackexchange.com/rooms/74414/discussion-on-answer-by-lynob-should-i-teach-that-1-kb-1024-bytes-or-1000-byte). But, if you simply believe the answer is incorrect, [downvote and move on](https://meta.stackexchange.com/a/186084/303538)." CreationDate="2018-03-12T23:51:51.287" UserId="58" />
  <row Id="10385" PostId="4446" Score="6" Text="This answer begs the question." CreationDate="2018-03-11T04:26:55.507" UserId="4514" />
  <row Id="10408" PostId="4446" Score="0" Text="@prl If you are meaning dodge the question (answering a different question), then you are partly correct. I am trying to extend on other answers. And to give some advice on “How”, where the question was “Which”." CreationDate="2018-03-11T19:33:56.880" UserId="204" />
  <row Id="10434" PostId="4446" Score="1" Text="IMO this is the best answer, but it could be slightly improved by explicit mention of *style*. I.e. in the same way that there are different styles for citing papers, or for delimiting lists (vide Oxford comma), there are different styles for formatting numbers. In an IEC publication post-2000 you can assume that house style will be SI / *bi. Other organisations / publishers may use other styles." CreationDate="2018-03-12T09:56:41.913" UserId="1219" />
  <row Id="10473" PostId="4446" Score="0" Text="Pretty good answer. Two nitpicks: 0) For all the prefixes (k, M, Mi, Gi, etc.), use roman type, not italic; I suggest using `\text{}`. 1) Ki must have a capital K." CreationDate="2018-03-13T05:02:35.717" UserId="891" />
  <row Id="10477" PostId="4446" Score="0" Text="@Nayuki “The first letter of each such prefix is therefore identical to the corresponding SI prefixes, except for &quot;K&quot;, which is used interchangeably with &quot;k&quot;, whereas in SI, only the lower-case k represents 1000.” — https://en.wikipedia.org/wiki/Binary_prefix" CreationDate="2018-03-13T11:32:23.743" UserId="204" />
  <row Id="10478" PostId="4446" Score="0" Text="@nayuki feel free to do the other formatting: Italic → roman." CreationDate="2018-03-13T11:34:48.507" UserId="204" />
  <row Id="10502" PostId="4446" Score="0" Text="@ctrl-alt-delor: The fact that there is no SI uppercase &quot;K&quot; SI prefix means that it can unambiguously represent 1024, especially if it's pronounced &quot;kay&quot; rather than &quot;kill-o&quot;.  IMHO, use of lowercase k for 1024 is and always has been sloppy." CreationDate="2018-03-13T23:03:10.323" UserId="2073" />
  <row Id="10504" PostId="4446" Score="0" Text="@Supercat, I would agree if it was unambiguous that £100m = 10p ($100m =  10¢). If also does not scale to M, G, T …" CreationDate="2018-03-13T23:09:44.937" UserId="204" />
  <row Id="10529" PostId="4446" Score="0" Text="@ctrl-alt-delor: I agree that the use of uppercase M for 1E6 and lowercase m for 1E-3, and lowercase mu for 1E-6, along with the fact that uppercase Mu looks like an uppercase M, means there's no M-like letter available for anything else.  From a pronunciation standpoint, using letter names for powers of two, &quot;e.g. 4 em-bytes&quot;, &quot;2 gee-bytes&quot;, or even &quot;1.44 kilo-kay bytes&quot; [the floppy size], would seem good.  The only problem is with the written form." CreationDate="2018-03-14T15:59:20.430" UserId="2073" />
  <row Id="10532" PostId="4446" Score="0" Text="@supercat If you have a compose key, then you can type µ by pressing &lt;kbd&gt;compose&lt;/kbd&gt;&lt;kbd&gt;m&lt;/kbd&gt;&lt;kbd&gt;u&lt;/kbd&gt;, or on this site by typing `$\mu$`  to get $\mu$" CreationDate="2018-03-14T16:03:27.420" UserId="204" />
  <row Id="10540" PostId="4446" Score="0" Text="@ctrl-alt-delor: That's great for representing micro; my point is that all of the &quot;M-ish&quot; characters are used up for SI prefixes, leaving none for a power-of-two prefix." CreationDate="2018-03-14T17:52:28.160" UserId="2073" />
  <row Id="10548" PostId="4446" Score="0" Text="Note that the SI prefix is k (not K) whereas 1024 bytes is ordinarily represented as 1KB (1KiB if we must)." CreationDate="2018-03-14T21:01:06.113" UserId="4513" />
  <row Id="10536" PostId="4447" Score="0" Text="Some languages make one style prevalent over the other.  Some other languages are more flexible and different coding styles can be used.  What you do there can be defined either by the style, or the algorithm itself - you do what is cleanest." CreationDate="2018-03-14T16:26:14.903" UserId="993" />
  <row Id="20069" PostId="4447" Score="0" Text="@Baldrickk your comment, says the same as the answer. Except that it encourages the messy in the middle approach. Mix and match will lead to errors." CreationDate="2022-05-20T20:41:24.497" UserId="204" />
  <row Id="10393" PostId="4448" Score="0" Text="Welcome to CSEducators. You pose an interesting dilemma. I wonder why you have included the struggling-students tag here. Is it just that they are struggling with formalism, or more generally? You might add a bit to your question on that." CreationDate="2018-03-11T11:20:23.743" UserId="1293" />
  <row Id="10483" PostId="4448" Score="0" Text="Semantics, but saying &quot;stressing too much&quot; implies that it isn't acceptable, because it's &quot;too much&quot;." CreationDate="2018-03-13T15:15:40.837" UserId="4082" />
  <row Id="10642" PostId="4448" Score="0" Text="Consider that in most programming languages this formal definition of set is not what is implemented. A set differs from a collection in that it eliminates repetition, and may be either ordered our unordered. Student who get it ignore the formalism,  and those who depend on the formalism are led astray." CreationDate="2018-03-17T13:39:52.373" UserId="1537" />
  <row Id="10381" PostId="4450" Score="0" Text="I am reminded of [One's Final Words from ST:Voy (YouTube Video)](https://www.youtube.com/watch?v=yGOYjj2JCN0&amp;t=53s)  Though hopefully not at all for the same reason, if the student gives the same response as what we see from Seven of Nine Tertiary Adjunct of Unimatrix Zero One over the next ten seconds, that effect just might be precisely the best that you can hope for..." CreationDate="2018-03-11T02:38:54.760" UserId="1676" />
  <row Id="10399" PostId="4453" Score="1" Text="Personally, I find the extra indents much harder to read (consult also the [kernel style guide on indentation](https://www.kernel.org/doc/html/v4.10/process/coding-style.html#indentation), which *de facto* bans this because there are too many levels of indentation).  But I do agree that this might be pedagogically useful, to help students understand what the gotos are for and why we use them.  I just can't imagine seeing it &quot;in the wild.&quot;" CreationDate="2018-03-11T17:16:47.677" UserId="1896" />
  <row Id="10404" PostId="4454" Score="0" Text="Welcome to [cseducators.se]! This is quite a useful answer. I hope we'll see more contributions from you in the future!" CreationDate="2018-03-11T18:27:19.803" UserId="150" />
  <row Id="10407" PostId="4454" Score="0" Text="Thanks. [This comment will self destruct after some time has passed.]" CreationDate="2018-03-11T19:25:08.887" UserId="4076" />
  <row Id="10461" PostId="4457" Score="0" Text="+1. You absolutely need to teach the formal definition, or the &quot;rules&quot;, and not just examples. Rule first, then examples. Maybe I misread the other answers to this question, but I agree that you have to know *why* an integer is an &quot;integer&quot;, or *why* a set is a &quot;set&quot;, or how a class is defined. If you don't know the rules, you may never know how they work &quot;in the wild&quot;. How many examples of a set would you have to see before you infer the single sentence that defines a set?" CreationDate="2018-03-12T20:19:57.300" UserId="4082" />
  <row Id="11780" PostId="4457" Score="0" Text="@Gorchestopher I disagree; initally presenting a bunch of definitions to students without good context can  make examples hard to reason with. It depends on the base ability of the students, of course. Some just need the formal definitions and nothing more." CreationDate="2018-03-24T02:52:33.277" UserId="2040" />
  <row Id="11855" PostId="4457" Score="0" Text="@Soupy Not presenting the &quot;rules&quot; leads to blind memorization. Sure, it *feels* warm and cozy to say you teach by &quot;examples&quot; and &quot;hands on&quot;, etc. but for many basic concepts and definitions, you really do need to know the rules. Expecting students to infer what a &quot;set&quot; or a &quot;constructor&quot; is with only examples is more of a riddle than a teaching style." CreationDate="2018-03-28T01:11:05.027" UserId="4082" />
  <row Id="10438" PostId="4458" Score="0" Text="Welcome to [cseducators.se]! This is a wonderfully detailed answer! I hope we'll see more contributions from you in the future." CreationDate="2018-03-12T12:20:55.430" UserId="150" />
  <row Id="10441" PostId="4459" Score="0" Text="Why don't you come by [The Classroom (the site's chat room)](https://chat.stackexchange.com/rooms/59174/the-classroom)?" CreationDate="2018-03-12T13:32:41.437" UserId="150" />
  <row Id="10481" PostId="4460" Score="1" Text="At the cost of the remaining 95% of the class failing tests and not understanding the material? And I find your statement that &quot;I know the bare minimum that is required for a teaching job&quot; very, very insulting." CreationDate="2018-03-13T14:37:15.657" UserId="150" />
  <row Id="10488" PostId="4461" Score="1" Text="And welcome to CSEducators. Bring your teacher here, too. You pose a common dilemma for students that is both thought provoking and fraught." CreationDate="2018-03-13T19:31:18.637" UserId="1293" />
  <row Id="10489" PostId="4462" Score="5" Text="Welcome to CSEducators. Can you provide a reference to the research you note at the start?" CreationDate="2018-03-13T19:37:25.453" UserId="1293" />
  <row Id="10490" PostId="4462" Score="2" Text="I don't &quot;accept this as true&quot; at all, and I've never seen anything to indicate as such.  However, I love being proved wrong.  Can you back that assertion up?" CreationDate="2018-03-13T20:10:48.607" UserId="27" />
  <row Id="10495" PostId="4462" Score="2" Text="I'm with @BenI.  I don't believe &quot;they cannot&quot;.  I've seen it happen too many times in my classroom - a high school student struggles and struggles to learn programming.  They don't come naturally to it.  It takes them three times as long to do projects.  They have to be told/shown correct syntax over and over.  They have no logic skills.  But they work hard.  They stay at lunch.  They stay after school.  They WANT to be a programmer.  And they eventually, slowly, become one.  I, too, would like to see the research you note - what does Formal Operations mean to a 7 year old?" CreationDate="2018-03-13T20:47:48.977" UserId="4338" />
  <row Id="10505" PostId="4462" Score="1" Text="I also don't agree with “too late”, but may be it is easier if you start young. It is not true that, the opposite of easier is impossible." CreationDate="2018-03-13T23:14:39.267" UserId="204" />
  <row Id="10510" PostId="4462" Score="3" Text="I've downvoted because this question 1) doesn't seem specific to Computer Science education, 2) is not a good fit for our Q&amp;A system, as it seems more like a prompt for discussion than an question, and 3) is not &quot;based on actual problems that you face&quot; (or if it is, please give more context to your specific problem)." CreationDate="2018-03-14T00:48:11.907" UserId="58" />
  <row Id="13078" PostId="4462" Score="0" Text="@Buffy I added two links to source material, but the changes are stuck in Review Purgatory." CreationDate="2018-07-11T13:22:21.077" UserId="5349" />
  <row Id="13079" PostId="4462" Score="1" Text="@ScottRowe Actually, you should add those as an answer, with explanation, and let the OP's statement stand on its own. (Or in comments, as the question is closed.) To be honest, I wasn't convinced that they didn't change the OP's intent." CreationDate="2018-07-11T13:28:42.593" UserId="1293" />
  <row Id="13080" PostId="4462" Score="0" Text="@Buffy OK. But as a Closed question, I am unable to add an answer. In any case, you might want to see this, with the bar charts of cognitive development by age: [Jeff Kramer - Keynote Address slides](http://www.grise.upm.es/htdocs/rearviewmirror/conferencias/cseet03/keynotes/Jeff_Kramer_CSEET03.pdf)" CreationDate="2018-07-11T15:56:14.613" UserId="5349" />
  <row Id="17692" PostId="4462" Score="1" Text="@scottrowe your link is broken. And [this page](http://wp.doc.ic.ac.uk/jk/) has a large no. of keynotes. (and I'm interested and in the minority that is inclined to believe this claim)" CreationDate="2021-02-11T12:14:31.220" UserId="8837" />
  <row Id="17697" PostId="4462" Score="0" Text="@Rusi thank you for the high estimate you have of me, but the conference proceedings is not 'my' link. It is too bad when useful things go away. Maybe we need some kind of permanent repository for everything that is worth keeping? A sort of Library of Progress. (If pro is the opposite of con, what is the opposite of progress?) To me, the claim that it takes time to get good at things is pretty well indisputable, and the one about us having limited lifetimes (and paying taxes) is as well, but you can see that this question was not considered worthy. Good luck proving your hunch." CreationDate="2021-02-12T15:56:31.120" UserId="5349" />
  <row Id="20808" PostId="4462" Score="0" Text="I still feel that this Question raises valid issues that should not be ignored. It would be good if the references were added." CreationDate="2022-10-04T15:11:28.060" UserId="5349" />
  <row Id="10520" PostId="4463" Score="0" Text="It is amazing how many people get this distinction wrong, and how people can write correct code which, when you press them, their understanding contradicts completely! As always when this discussion crops up, I'll cite how much I love function definitions in FORTRAN, where you can explicitly state `IN`, `OUT`, or `INOUT`, and nobody has to worry about implicit semantics." CreationDate="2018-03-14T11:18:08.420" UserId="1333" />
  <row Id="10555" PostId="4464" Score="0" Text="As a &quot;lone ranger&quot; myself -- though it's less that I _don't want to_ and more that I'm just terrible at and not used to it -- this is incredibly useful. Thanks!" CreationDate="2018-03-14T21:43:02.073" UserDisplayName="anon" />
  <row Id="10576" PostId="4464" Score="2" Text="Working in a team does not necessarily mean working as close together as when team programming. Somebody who likes to work on his own for some reason (and CS people will often need to work alone later) can do so and still be a productive member of the team, just by contributing parts which can be done solo. There are different personality types and different learning types and both have categories for &quot;lone rangers&quot;. It is no good idea to force them too much to work in a way which is less efficient for them, if it is not absolutely needed." CreationDate="2018-03-15T10:02:39.597" UserId="4631" />
  <row Id="10498" PostId="4465" Score="6" Text="This is a bit too much of the &quot;stick&quot; approach. Try the carrot. Dip it in sugar first." CreationDate="2018-03-13T22:53:57.727" UserId="1293" />
  <row Id="10527" PostId="4465" Score="6" Text="Intentionally restricting the work of the most productive team members is only likely to drive them to drop the class.  *Functional* engineering organizations fully use the capability of all of their members -  once you create a system that *by design* does not, you model a dysfunctional organization with an official path where little happens, an unofficial one where all the real work gets done, and a huge tension in between." CreationDate="2018-03-14T15:40:44.580" UserId="1308" />
  <row Id="10583" PostId="4465" Score="0" Text="@ErikAlapää, your last sentence was unkind and has no place here." CreationDate="2018-03-15T13:05:48.093" UserId="1293" />
  <row Id="10585" PostId="4465" Score="1" Text="@Buffy, why don't we let Judy Oakly decide for herself if she was offended? Perhaps I was too harsh, I just think university should be a safe haven from aggressive leaders. I pay by taking student loans, I get to learn in my way." CreationDate="2018-03-15T13:30:19.820" UserId="4665" />
  <row Id="10586" PostId="4465" Score="0" Text="@Erik, I wasn't offended, just a bit surprised that someone who didn't know me at all would say that. I was going to let it slide, but now that you have addressed me directly, here I am. For one thing I teach high school, not university. My students are usually 15-year-old boys, who still need a lot of guidance. I'm sure you can relate. And I have a tendency to come across harder than I am. My students tell me I'm the best teacher they ever had, because I value relationships and strive to be open and allow extreme flexibility in the classroom.  Continued..." CreationDate="2018-03-15T13:50:22.527" UserId="4338" />
  <row Id="10587" PostId="4465" Score="0" Text="@Erik, what I wrote about monitoring the students to avoid LR syndrome was for 90% of them who NEEDED that sort of supervision. Yes, they had gone rogue in a previous semester, but they wrote CRAPPY code! That was why they needed the team! The other 10% were indeed stars, so I left them alone and voila, a couple of Dream Teams emerged who did amazing and wonderful things.  My original question was not intended to look for ways to squelch superstars, but how to manage those who don't need to go rogue, just yet, for various reasons.  I think if you re-read it you will see that." CreationDate="2018-03-15T13:53:53.697" UserId="4338" />
  <row Id="10588" PostId="4465" Score="0" Text="@JudyOakley You are probably a better teacher than I ever was, I have done some teaching as a high school temp and as a math PhD student many years ago. I also teach some in my current work. I just wanted to state that university is all about freedom and knowledge, and, to a lesser extent, high school also is." CreationDate="2018-03-15T14:01:26.490" UserId="4665" />
  <row Id="10589" PostId="4465" Score="0" Text="I think it makes a *huge* difference that this is at the high-school level vs. university, and your actions make more sense in that context.  I would be extremely adverse to the behavior in this answer in a university setting." CreationDate="2018-03-15T14:04:33.853" UserId="4668" />
  <row Id="10590" PostId="4465" Score="1" Text="@Erik and Iron, I will make myself more clear in future questions where the context of HS vs. Univ. matters.  Thank you both for your comments." CreationDate="2018-03-15T14:28:57.367" UserId="4338" />
  <row Id="10491" PostId="4468" Score="2" Text="I agree that group/paired programming can be frustrating to stars, and I certainly don't wish to squelch their enthusiasm and creativity.  But I, as a teacher, am evaluated on, among other things, inclusion of group projects.  Indeed, student collaboration is one of the overarching goals of my district.  So it's THERE, whether I, or they, like it or not.  And mustn't we all, at some point, be able to work with others, even if it is frustrating, or slows us down?  How many Knuths are there in the world?  Who are ALLOWED/ENCOURAGED to work alone, because they are superstars?  Not many." CreationDate="2018-03-13T20:26:03.267" UserId="4338" />
  <row Id="10492" PostId="4468" Score="0" Text="That being said, I do think it is important that we (CS educators) allow superstars to define their own paths when appropriate.  I always have a couple, and they are a joy to watch.  Balance.  In everything." CreationDate="2018-03-13T20:26:33.320" UserId="4338" />
  <row Id="10493" PostId="4468" Score="3" Text="I agree with @JudyOakley here. Student's need more in their education than technology. The workplace demands it. So does being successful in many Colleges and certainly in Grad School. Your introverts aren't well served by letting them hide and your superstars aren't well served by letting them work in too narrow a range. Some education is hard. But _what_ is hard is different for everyone." CreationDate="2018-03-13T20:29:56.907" UserId="1293" />
  <row Id="10541" PostId="4468" Score="0" Text="Since the original question was predicated on the assignment being a group project, this answer is not on topic." CreationDate="2018-03-14T18:11:37.827" UserId="3178" />
  <row Id="10542" PostId="4468" Score="0" Text="@LeeMosher Interesting point. Personally, I think that answers like this should be okay. In light of your observation, though, [I created a meta](https://cseducators.meta.stackexchange.com/questions/379/frame-challenging-questions-on-cseducators) to find out if the rest of the community feels the same way." CreationDate="2018-03-14T19:13:31.553" UserId="27" />
  <row Id="10568" PostId="4468" Score="2" Text="@JudyOakley The core issue with (school) group projects that everyone overlooks is that you will _never_, in any other arena, face such a broad range of ability levels.  Lone-ranger programmers are often just skilled at what they're doing, and would rather not deal with people behind them in knowledge. (After all, not everyone is cut out to be a teacher.) These programmers tend to do well in classes, then go on to Google/Microsoft/Facebook where they work quite happily in teams with other skilled people.  Further, top companies usually have an &quot;individual contributor&quot; role made [cont'd]" CreationDate="2018-03-15T02:47:28.350" UserId="664" />
  <row Id="10569" PostId="4468" Score="0" Text="... for highly-skilled programmers who would rather manage their own projects. I understand the desire to encourage teamwork in school, but I would strongly suggest allowing people to work independently if they feel that strongly about it.  Or, if absolutely required, let people choose their teammates, and the problem will sort itself out." CreationDate="2018-03-15T02:47:33.330" UserId="664" />
  <row Id="10572" PostId="4468" Score="0" Text="I'd like to point out that current thought among the companies that are hiring the &quot;superstars&quot; is that people who can code are a dime a dozen, and what they really need are people that can both understand the code _and communicate it_. Forcing high-fliers into group interaction is not crippling them (they will have plenty of other opportunities to expand their coding), it is an attempt to teach something they badly, badly need to learn." CreationDate="2018-03-15T03:59:52.537" UserId="4656" />
  <row Id="10581" PostId="4468" Score="0" Text="I was also the kind to do most of the work in a duo, while I was still explaining what I have done to the other. I like this idea. It's basically choosing on what you focus at the moment, teamworking or polishing technical skills. At the age of university, we're old enough to understand that team skill exists and must be polish but we can also have the right to polish further our expertise." CreationDate="2018-03-15T12:31:14.457" UserId="1375" />
  <row Id="10582" PostId="4468" Score="0" Text="@LoganPickup we could also need someone  who can code, manage his project, write the specification, communicate perfectly and live right next to the company without child or husband/wife. But this is of course happens pretty much never, you have to do with what you have, and that's why they're things like screening in interview, organization, coding standard, project manager, technical leader to help for that." CreationDate="2018-03-15T12:34:27.360" UserId="1375" />
  <row Id="10591" PostId="4468" Score="0" Text="@Walfrat Yes, companies would like a perfect employee; that's not my point. My point is that communication and collaboration skills are becoming _more_ valuable than coding skills, so long as you have at least _some_ coding skills. This is a hard requirement for any kind of agile development, for instance." CreationDate="2018-03-15T14:32:14.610" UserId="4656" />
  <row Id="10494" PostId="4469" Score="0" Text="Our curriculum is so old it still teaches the waterfall process.  And since it is still there, it can still be on the final exam, which I don't write.  But I could still contrast with Agile...thanks for the idea." CreationDate="2018-03-13T20:31:39.090" UserId="4338" />
  <row Id="10501" PostId="4469" Score="0" Text="Might be time to look at the curriculum, then. Even IBM is agile now." CreationDate="2018-03-13T23:00:23.663" UserId="1293" />
  <row Id="10507" PostId="4469" Score="0" Text="“The process is like going over a waterfall“ — A miss quote of the original use of the term waterfall to refer to the method." CreationDate="2018-03-13T23:40:56.557" UserId="204" />
  <row Id="10511" PostId="4469" Score="0" Text="@Buffy I am bound to the curriculum until it is officially modified by the state.  We are still using Visual Studios 2010.  But I can certainly augment as I see fit." CreationDate="2018-03-14T01:34:50.840" UserId="4338" />
  <row Id="10560" PostId="4469" Score="0" Text="Many companies still (mis)use waterfall. It has the advantage that it ensures there is a high level vision, but the disadvantage that managers have got their hands on it and ruined it like they are trying to do to agile." CreationDate="2018-03-14T23:41:06.613" UserId="1537" />
  <row Id="10562" PostId="4469" Score="0" Text="Original waterfall was actually &quot;agile&quot;. The intent (before MBA's got their hands on it) was an illustration that the sooner you fix errors, the less they cost to fix. Code well, know where you plan to go, and fix issues early - pretty much the definition of Agile." CreationDate="2018-03-15T00:21:04.213" UserId="1537" />
  <row Id="10563" PostId="4469" Score="0" Text="@pojo-guy, sorry, but that is a misrepresentation of agile process. Agility is about responding to change, not about getting it all absolutely correct at the start (which is impossible in a changing world). You are confusing/obfuscating the issues, rather than offering useful commentary." CreationDate="2018-03-15T00:25:06.723" UserId="1293" />
  <row Id="10564" PostId="4469" Score="0" Text="Waterfall, as intended, was also about responding quickly to change." CreationDate="2018-03-15T00:25:50.603" UserId="1537" />
  <row Id="10566" PostId="4469" Score="0" Text="No, it was not. The sorts of things you do in waterfall, even iterative waterfall (which came later) make responding to change expensive by enabling early commitment. You are twisting words." CreationDate="2018-03-15T00:30:16.313" UserId="1293" />
  <row Id="10567" PostId="4469" Score="0" Text="I can agree to disagree - as you pointed out, this side discussion is really out of scope for this question." CreationDate="2018-03-15T00:35:20.120" UserId="1537" />
  <row Id="10496" PostId="4470" Score="3" Text="you are right on the money, and in a good classroom environment, these things will happen organically.  In my current project, which initiated this question, I've had two groups go &quot;Dream Team&quot; on me and implement far and above their specifications.  This has, in turn, fueled other teams to want to &quot;get finished so we can try to do that&quot;.  It's awesome and amazing.  I don't know if I could formalize it in the future...but I can maintain a classroom that fosters openness and curiosity so that students feel free to do such." CreationDate="2018-03-13T21:00:07.280" UserId="4338" />
  <row Id="10497" PostId="4470" Score="3" Text="Of the two you have this feels like the better of the two. As a former *high-flyer* I'd find this a challenge to be met." CreationDate="2018-03-13T21:00:36.800" UserId="104" />
  <row Id="10500" PostId="4470" Score="1" Text="I would still try something different. Homogeneity doesn't let them grow. One option is to make your superstars tutors or teaching assistants. If your project has roles, give them a non-programming role, since they won't learn much from just programming if they already excel there. Or a tester role. Or a tool builder role. But best if they can also learn to work with others. As a tool builder the rest of the team becomes their customer, similar for tester. They have to interact, but can't just take over." CreationDate="2018-03-13T22:59:28.260" UserId="1293" />
  <row Id="10509" PostId="4470" Score="3" Text="@Buffy That should be another answer, no?" CreationDate="2018-03-14T00:40:57.023" UserId="27" />
  <row Id="10533" PostId="4470" Score="3" Text="@Buffy I disagree. Most companies set up homogeneity in order to complete the most complex projects. Pairing the high fliers is realistic and will help them grow, technical-skill-wise (AKA the point of the class). You're severely underestimating the skill-ceiling of programming. No human has ever reached a point where they are unable to continue learning programming. There are plenty of other classes to teach the skills you are suggesting, and practice them." CreationDate="2018-03-14T16:10:11.457" UserId="2719" />
  <row Id="10571" PostId="4470" Score="0" Text="As a computer science student, I have no interest in sinking countless hours into a lab class (which at my university are usually worth 1-2 credits despite always having a heavy workload). Should I be put into a class like this, I would do my best to sandbag and fake incompetence so that I don't get put on such a &quot;dream team&quot; and get a C- in the class for not exceeding expectations enough." CreationDate="2018-03-15T03:55:01.787" UserId="4655" />
  <row Id="10506" PostId="4471" Score="0" Text="Beware the _Self-fulfilling Prophecy_." CreationDate="2018-03-13T23:24:06.663" UserId="104" />
  <row Id="13072" PostId="4471" Score="0" Text="Pondering this one. Obviously in individual cases people overcome adversity and become great at things. But those cases are not the general template of education, and the plural of Anecdote is not Employment. the way I deal with this is to simply see every student as an individual, and every case as if it was the first time I had ever encountered it. I do not know how to generalize education, perhaps from inadequate training. But I have lots of patience." CreationDate="2018-07-10T16:48:36.027" UserId="5349" />
  <row Id="13073" PostId="4472" Score="0" Text="Students are all individuals but education seems to be a collective effort. Not sure how to resolve that, except to teach individually." CreationDate="2018-07-10T16:51:02.087" UserId="5349" />
  <row Id="10574" PostId="4473" Score="3" Text="&quot;Get the high performer writing automated tests.&quot; - or other tooling. Writing tooling that saves time for other contributors is a nice skill to have, it suits lone rangers well (since the tooling is often smaller in scope and suitable for a single person), and naturally forces personal interaction - their peers have now become their _clients_." CreationDate="2018-03-15T04:09:22.303" UserId="4656" />
  <row Id="10522" PostId="4474" Score="0" Text="Learn to live with it. You can't teach a one legged person to run 100 meters, although they can still become an athlete. You can't force a student who has no interest in being part of a group into having interest in a group activity. And you can't force people with a bad history together to work in close quarters ." CreationDate="2018-03-14T12:08:49.823" UserId="1537" />
  <row Id="10523" PostId="4474" Score="0" Text="These problems are not the same, not even on the same scale. They certainly don't have the same solution." CreationDate="2018-03-14T12:53:40.193" UserId="1293" />
  <row Id="10524" PostId="4474" Score="0" Text="@Buffy how do you know unless you ask? In my case, autism wasn't even a legal diagnosis at the time, and in my daughter's case the teacher had no inkling of why she suddenly went LR." CreationDate="2018-03-14T13:54:00.710" UserId="1537" />
  <row Id="10538" PostId="4474" Score="0" Text="@pojo-guy I see better where you're coming from. OP has indicated in a comment that she is also evaluated on student teamwork. Obviously, there are a lot of headwinds, but if you were the teacher in that position, how would you attempt to approach students such as yourself? We don't need to achieve total success in one project. Baby steps can still be important in the development of a student. But how would you encourage such baby steps in ways that don't dehumanize or invalidate the student? In some ways, you may be the best person here to answer this question so far." CreationDate="2018-03-14T17:09:04.463" UserId="27" />
  <row Id="10561" PostId="4474" Score="0" Text="@BenI. Evaluating the teacher on my ability to work in a group would have been exactly analogous to evaluating the track coach on his ability to take a one legged student and get him to sprint 100 yards, except the missing leg was more visible. I know it's how some super-social bureaucrat who wouldn't know a copybook from a class decided to evaluate teachers, but it's unreasonable and unrelated to either the teacher's skill or the student's learning." CreationDate="2018-03-15T00:13:42.027" UserId="1537" />
  <row Id="10565" PostId="4474" Score="1" Text="I'm a wee bit in love with this answer now. Thanks so much for sharing your perspective here. The answer may not have a ton of upvotes, but you've given at least one classroom teacher a lot to think about here." CreationDate="2018-03-15T00:27:38.290" UserId="27" />
  <row Id="10528" PostId="4476" Score="3" Text="&quot;make your superstars tutors or teaching-assistants&quot; indeed.  By entirely relieving them of responsibility for the *resulting code*, and making their assignment instead the progress of their classmates, you can create a positive environment.  In contrast, a situation where they are responsible for the technical outcome, but restricted from achieving that in the most direct manner, is inevitably going to result in tension." CreationDate="2018-03-14T15:46:33.033" UserId="1308" />
  <row Id="10573" PostId="4476" Score="0" Text="You can also have a project planning session, where the students themselves are given the chance to assign their own roles. Having someone responsible for unit tests, code review, interface definition, etc. it also valuable in a mixed group (as well as high-level positions like tutor for the high-fliers)." CreationDate="2018-03-15T04:06:23.233" UserId="4656" />
  <row Id="10578" PostId="4479" Score="0" Text="Welcome to [cseducators.se]! I like the project based on combined class assignments!" CreationDate="2018-03-15T10:45:34.503" UserId="150" />
  <row Id="11652" PostId="4481" Score="0" Text="I use the command line interface to teach programming.  You might say, &quot;How old-fashioned?&quot;  To this I would say no.   Companies who subsequently hire our students have given me very positive feedback on this practice.  The command line interface is programmable, extensible, and it's low-overhead." CreationDate="2018-03-18T21:45:44.123" UserId="21" />
  <row Id="11896" PostId="4481" Score="1" Text="I'd like to point out that many of these objections can be fixed with a text editor/IDE that closely integrates with an interactive environment. For example, Emacs allows you to evaluate code directly in the text file you are editing using a variety of languages. These include Python, Scheme, Clojure, Common Lisp, Haskell, and  many others." CreationDate="2018-04-02T20:22:09.857" UserId="2040" />
  <row Id="10584" PostId="4482" Score="3" Text="I have occasionally lied to students about some technical detail, but always, immediately, in the next sentence, tell them I lied so that they can note it and follow up when the truth is available. But you have to warn them, ethically. Misconceptions can be hard to erase and the follow up might be missed for one reason or another. So, if you lie, do it _honestly_. You should never put a student in the position of needing to _unlearn_ something." CreationDate="2018-03-15T13:20:20.043" UserId="1293" />
  <row Id="11643" PostId="4483" Score="0" Text="If you are asking about personality traits, I'd say curiosity is the best.  Why does this do that? How can I make it do this other thing?  What happens when I change this?  If you are looking for a skills list, the answer that **ctrl-alt-delor** provided is a good start" CreationDate="2018-03-17T16:18:40.780" UserId="662" />
  <row Id="10593" PostId="4485" Score="0" Text="Of course, one hopes that the prof knows that she/he over simplified. Still, I'd warn the students at the time that I'm lying/simplifying/..." CreationDate="2018-03-15T17:39:42.287" UserId="1293" />
  <row Id="10600" PostId="4485" Score="0" Text="“For every complex problem there is an answer that is clear, simple, and wrong.” -- H.L. Mencken.  There are too many Java tyros out there---some of them writing real-world, commercial code---who do not understand the difference between an instance and a variable.  Telling them that Java &quot;passes objects by reference&quot; may be easier than telling them the deeper truth, but it does not help them in the long run." CreationDate="2018-03-16T02:31:54.243" UserId="1269" />
  <row Id="10601" PostId="4485" Score="0" Text="Wait, so, what's the joke?" CreationDate="2018-03-16T02:53:37.790" UserId="27" />
  <row Id="10618" PostId="4485" Score="1" Text="@BenI., Read all the way down to the last sentence on the page. Niklaus Wirth... Call by name... Call by value..." CreationDate="2018-03-16T13:26:14.347" UserId="1269" />
  <row Id="10608" PostId="4487" Score="0" Text="This seems not dissimilar from braille, actually." CreationDate="2018-03-16T12:31:48.920" UserId="27" />
  <row Id="10633" PostId="4487" Score="0" Text="Conceptually. However, what you want the student to grasp is the connection between sight and math as similar to brain and braille. It’s not that much different. You want the student to *think* how to get it done and what one needs to know/learn for that to happen. Appealing to that knowledge center fosters learning a lot better IMHO." CreationDate="2018-03-16T20:10:52.073" UserId="4677" />
  <row Id="10599" PostId="4488" Score="0" Text="This other question may also be relevant https://cseducators.stackexchange.com/q/2787/204" CreationDate="2018-03-15T20:45:01.430" UserId="204" />
  <row Id="10620" PostId="4488" Score="0" Text="@CAD you dredged up some bad memories there, because when I graduated and went to work, my weakest skills were in revision control, unit testing, and batch file syntax (DOS). Revision control we didn't even use, our builds weren't long enough to need batch files, and unit testing was something usually skipped in the heat of &quot;getting it working&quot;.  I was mortified to learn that I didn't know so much!  And remembering those feelings of being &quot;let down&quot; by my instructors - why didn't they tell me? - inspires me to make sure I incorporate these things - or at least mention them - in my coursework." CreationDate="2018-03-16T14:00:19.467" UserId="4338" />
  <row Id="11745" PostId="4488" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/74897/discussion-on-answer-by-ctrl-alt-delor-which-non-programming-skills-help-make-a)." CreationDate="2018-03-22T00:53:37.050" UserId="58" />
  <row Id="10637" PostId="4489" Score="1" Text="Talk about inversion of control .. excellent answer!" CreationDate="2018-03-17T00:46:52.480" UserId="1537" />
  <row Id="12300" PostId="4490" Score="0" Text="Have you done this with other class objects, e.g. `class Foo { int x; string s; }` and `changeFoo(Foo x){ x.t = &quot;Hello World!&quot;; }`? $100 says that your original Foo now contains the string `&quot;Hello World!&quot;`" CreationDate="2018-05-04T20:51:41.283" UserId="1244" />
  <row Id="12301" PostId="4490" Score="1" Text="@Draco18s Okay, and I'm not sure what the point is? I'm only talking about changing the reference of the argument. Are you trying to say that your code proves that Java is pass-by-reference? Because it doesn't." CreationDate="2018-05-04T21:48:21.987" UserId="2068" />
  <row Id="13631" PostId="4490" Score="0" Text="You make a great point! I think I need to incorporate it into my answer. In any case, I just voted yours up above mine. :-)" CreationDate="2018-10-09T15:43:59.800" UserId="283" />
  <row Id="10627" PostId="4494" Score="0" Text="Google for RAII." CreationDate="2018-03-16T18:35:01.167" UserId="1269" />
  <row Id="11654" PostId="4494" Score="1" Text="Your difficulty is thinking about in-memory *data structures* only.   Chose examples where the objects provide a service, and have something to do when they are &quot;leaving&quot; (sending a shutdown notification  through the network, for example)." CreationDate="2018-03-19T09:46:31.877" UserId="2103" />
  <row Id="11655" PostId="4494" Score="0" Text="@MichelBillaud I did not understand. Can you expand?" CreationDate="2018-03-19T09:47:36.767" UserId="1873" />
  <row Id="11657" PostId="4494" Score="0" Text="@ErelSegal-Halevi  I mean, trees, graphs, etc. are merely containers for data, and can be built from basic containers from the standard library. So no surprise you can have RAII managing their destruction. Now a &quot;Logger&quot; object writing to a file. It should write a message when it is closed. Explicitely or by the destructor." CreationDate="2018-03-19T11:06:10.250" UserId="2103" />
  <row Id="10611" PostId="4495" Score="0" Text="This idea sounds very interesting and fun. I am trying to work out the details." CreationDate="2018-03-16T12:38:55.707" UserId="1873" />
  <row Id="10614" PostId="4495" Score="0" Text="hmm... on second thought, I think this requires explicit deletion by the programmer, rather than a destructor in the clas.." CreationDate="2018-03-16T13:10:37.553" UserId="1873" />
  <row Id="10628" PostId="4495" Score="2" Text="Releasing the memory occupied by a `Foobar` instance is not the responsibility of the class's destructor.  The destructor gets called _before_ the memory is released.  It's responsibility is to release _other_ resources---to free other objects, to close open files, etc.---that were &quot;owned&quot; by the `Foobar` object." CreationDate="2018-03-16T18:39:12.780" UserId="1269" />
  <row Id="13843" PostId="4495" Score="0" Text="I can imagine the simulation being updated with buffers and not needing deletion at all, however, it might be possible to design the class that represents the game board (or a chunk of the board) to free memory in its destructor leaving no need for an explicit delete operation, just an operation to break the game loop and let main() end." CreationDate="2018-11-10T04:03:14.580" UserId="6113" />
  <row Id="10609" PostId="4496" Score="0" Text="Good. It will also let them see that destructors are not only for memory management. But, don't the file-stream objects of the STL close the file automatically when they go out of scope?" CreationDate="2018-03-16T12:33:14.717" UserId="1873" />
  <row Id="10612" PostId="4496" Score="0" Text="Yes, if you use such an object, since it has its own destructor. But you can open files otherwise. Any resource held should be released in a destructor if it can't be immediately released. See: http://www.learncpp.com/cpp-tutorial/8-7-destructors/. So your problem (illustrating...) gets harder if everything you use is already properly built. Actually, you can allocate anything for any purpose. Release it in the destructor. Oh. And don't call any destructor twice (implicitly or otherwise). Very bad bug." CreationDate="2018-03-16T12:39:03.180" UserId="1293" />
  <row Id="10616" PostId="4496" Score="0" Text="@Buffy What OS does not write until close? I know that the file is not **guaranteed** written until you call flush or close. 2nd setting a pointer to null in C++ **WILL NOT** call the destructor; you have to use `delete`. It is not a garbage collected language. Unless you use smart pointers, with the appropriate code." CreationDate="2018-03-16T13:20:33.677" UserId="204" />
  <row Id="10617" PostId="4496" Score="0" Text="If STL does this, then what about a class that uses `malloc`/`new`?" CreationDate="2018-03-16T13:21:59.537" UserId="204" />
  <row Id="10619" PostId="4496" Score="0" Text="@ctrl-alt-delor, I was just describing how to make the object go out of scope, nothing more. I understand that setting to null doesn't invoke the destructor. I don't understand the most recent comment." CreationDate="2018-03-16T13:26:29.590" UserId="1293" />
  <row Id="10631" PostId="4496" Score="0" Text="Reword of my most resent comment, as @Buffy pointed out that it dose note make sense: If STL does all the file stuff, then how about a class that uses `malloc` or `new` in the constructor, you will need `free` or `delete` in the destructor." CreationDate="2018-03-16T19:26:40.580" UserId="204" />
  <row Id="10607" PostId="4497" Score="0" Text="Cute. A bit devious, but cute. Good catch." CreationDate="2018-03-16T12:28:05.263" UserId="1293" />
  <row Id="10610" PostId="4497" Score="0" Text="Is it common to call destructors directly in C++?" CreationDate="2018-03-16T12:35:54.577" UserId="1873" />
  <row Id="10613" PostId="4497" Score="0" Text="@ErelSegal-Halevi You've got me, I could be barking up the wrong tree. I'm a Java guy.  I assumed that they were C++'s way to deallocate objects and that they had to be called, just like constructors.  Upon examining the question now, it seems like I was mistaken about that part.  However, [this](https://stackoverflow.com/questions/16720201/calling-destructor-explicitly) appears to be an interesting case when a destructor should be manually called.  However, it might be out of scope of your course." CreationDate="2018-03-16T12:39:54.393" UserId="27" />
  <row Id="10621" PostId="4497" Score="0" Text="Normally the delete operator on a pointer invokes the destructor. It is rare (very) that destructors are invoked directly." CreationDate="2018-03-16T14:03:28.070" UserId="1293" />
  <row Id="10632" PostId="4497" Score="0" Text="@Buffy but you suggest that going out of scope, causes the destructor to be called, and that setting pointer to null, causes it to go out of scope. Only calling delete, or being automatic (stack semantics) and going out of scope will cause destructor to run (and object to be freed)." CreationDate="2018-03-16T19:30:28.787" UserId="204" />
  <row Id="10623" PostId="4499" Score="0" Text="Thanks for your answer. My tests are indeed designed to help my students learn, and I know their importance. Re-phrasing my syllabus by pre-fixing every item on a list by &quot;Make sure you understand ...&quot; doesn't seem like a useful document to me, and it prevents my students to learn how to actually do that by themselves. The abundance of homeworks (that looks *like* what they will have at the exam) and the fact that I highlight the core ideas repeatedly, to me, makes that your answer suggest that study guide aren't so useful in this context." CreationDate="2018-03-16T18:03:58.347" UserId="2877" />
  <row Id="10624" PostId="4499" Score="2" Text="@Clément That was information that I didn't have when I wrote the answer.  Letting them know that the test questions will strongly resemble the homework questions could, indeed, serve the same purpose.  In effect, you've already created a detailed study guide for the students. You just need to call their attention to it." CreationDate="2018-03-16T18:22:47.953" UserId="27" />
  <row Id="10622" PostId="4501" Score="0" Text="Thanks for your answer. In my class, students take notes by hand, and the most important ideas are listed in the outline I give at the beginning of the class. I like the idea of the collaborative writing of notes, that I read as &quot;publishing a study guide is indeed useless&quot;." CreationDate="2018-03-16T17:59:36.010" UserId="2877" />
  <row Id="10625" PostId="4501" Score="0" Text="This sort of study guide helps with learning, but helps less with the reduction of student anxiety (unless the teacher carefully reads and &quot;blesses&quot; the study guide that the students produce.)" CreationDate="2018-03-16T18:25:07.150" UserId="27" />
  <row Id="10626" PostId="4501" Score="0" Text="Yes, agreed. That was my intention @BenI." CreationDate="2018-03-16T18:32:10.473" UserId="1293" />
  <row Id="10629" PostId="4503" Score="0" Text="No worries, this is a great question. And I'm very interested to see the answers, because I've struggled with the same thing." CreationDate="2018-03-16T18:43:24.053" UserId="27" />
  <row Id="10636" PostId="4504" Score="0" Text="I don't know what the grokking part of the brain is, but maybe that's what I'm doing too?, see my answer below." CreationDate="2018-03-17T00:45:11.337" UserId="4338" />
  <row Id="11658" PostId="4505" Score="0" Text="I'm not discussing code dumps.  I'm discussing giving the students one possible answer to the exercise I've given them.  While I appreciate all the effort you put in to preparing your answer you've sort of misread my question." CreationDate="2018-03-19T12:38:01.770" UserId="4689" />
  <row Id="11671" PostId="4505" Score="0" Text="@OnorioCatenacci And I believe you've misread my answer. By &quot;code dump&quot; I simply mean handing them a code solution without any explanation. The point I'm making in this answer is that the code is the least important part. The most important part is outlining **the process** of coming up with an answer in the first place." CreationDate="2018-03-19T16:12:15.587" UserId="2068" />
  <row Id="10635" PostId="4506" Score="1" Text="That is a great point, @CT, that some students, if given a study guide, will study only the study guide!  But isn't that better than if they didn't study at all?  And it's interesting to hear you say you thought in-class reviews were helpful.  I know some people feel very differently.  Another question, perhaps?" CreationDate="2018-03-17T00:17:43.777" UserId="4338" />
  <row Id="11653" PostId="4506" Score="1" Text="Thanks for that really interesting return of experience. I was definitely looking for that kind of feedback." CreationDate="2018-03-18T22:03:51.767" UserId="2877" />
  <row Id="11857" PostId="4506" Score="1" Text="@JavaJive that's a good point and I'm not sure if the answer.  IME, other students complain about classes not being hard enough -&gt; they were not &quot;forced&quot; to study -&gt; didn't retain course material -&gt; upset because now they need to know the course material for either a subsequent class or an interview.  My opinion is in CS especially, students must learn to find answers and form their own study plan.  Study guides, etc train them to expect a study guide, get the grade, move on, without giving much thought on learning how to learn themselves." CreationDate="2018-03-28T05:16:22.870" UserId="4467" />
  <row Id="11651" PostId="4510" Score="0" Text="Welcome to [cseducators.se]! Those resources might be great, but if you could include, in your answer, what they contain, they would be far more useful" CreationDate="2018-03-18T19:05:23.383" UserId="150" />
  <row Id="11665" PostId="4513" Score="0" Text="Can you further describe percentage grading? From your description, there seems to be a similar impact to assignment skipping in either case. Even when using percentage grading, it would appear that assignment scores are still &quot;cumulative&quot; in the sense that they are added together. It appears that the only real difference between the two methods is that the weighting applied is by the point total of the assignment, not some external applied weight." CreationDate="2018-03-19T13:52:43.790" UserId="4082" />
  <row Id="11668" PostId="4513" Score="0" Text="@GorchestopherH: Usually with percentage grading, a student gets a 0 for not doing an assignment and the effect of this might be less predictable. Possibly not, of course, depending on other factors, but predictability is a good thing for students, IMO." CreationDate="2018-03-19T14:37:15.640" UserId="1293" />
  <row Id="11669" PostId="4513" Score="1" Text="If the assignment component of your course represents 800 total points, and you have an assignment worth 100 of those points. You forfeit 100 points of 800, or 12.5% of your assignment grade. How is this significantly different than getting 0 on one of 8 assignments, each worth 12.5% of your assignment grade? It's possible that I just don't have a good definition of what makes these methods distinct, every grading system I've experienced has been some kind of hybrid." CreationDate="2018-03-19T15:31:35.623" UserId="4082" />
  <row Id="11670" PostId="4513" Score="0" Text="Edited and I hope clarified. See the end." CreationDate="2018-03-19T15:41:49.910" UserId="1293" />
  <row Id="11813" PostId="4515" Score="0" Text="There is one true language, and it is mathematics. You cannot even precisely &amp; clearly explain what any of the programs in any of the languages do without giving a rule to translate a program into math. That math of the semantics is the simplest possible way to explain what any program is doing. (The primary notion is of a mapping.) It is only, sadly, because languages &amp; programming are taught [sic] *without* explicit semantics that reminscent variations in other languages are even sought for clarification. Forget analogies, explain what is actually going on." CreationDate="2018-03-27T02:42:47.727" UserId="2485" />
  <row Id="11851" PostId="4515" Score="1" Text="I think you're very much in danger of wandering into the realm of the sesquipedalian. Saying that mathematics is the one true language may be true (if a tad reductive) but it's hardly helpful. By the way I don't think I've ever seen anyone use the adverb *sic* in reference to his or her own words." CreationDate="2018-03-27T18:41:52.593" UserId="4689" />
  <row Id="11856" PostId="4515" Score="0" Text="I used relevant technical &amp; everyday terms appropriately. You say you want to &quot;teach&quot; effectively. Then you could google based on my comment." CreationDate="2018-03-28T02:27:03.223" UserId="2485" />
  <row Id="12659" PostId="4515" Score="0" Text="If others see this question, this [blog post](https://cacm.acm.org/blogs/blog-cacm/228006-teaching-two-programming-languages-in-the-first-cs-course/fulltext) has some relevance." CreationDate="2018-05-23T16:15:46.790" UserId="4689" />
  <row Id="14441" PostId="4515" Score="0" Text="@philipxy Very little of programming today is math. Screen aesthetics occupies 50% or more of an application's budget. Even machine learning, which at its core is statistical modeling, has been reduced to &quot;use this library to construct a neural net, and use a particular function from that library to apply the bias function&quot;. Sadly, I spend a lot of my time chasing scope errors in the definition of Spring beans." CreationDate="2019-03-01T04:11:35.123" UserId="1537" />
  <row Id="11662" PostId="4516" Score="0" Text="Glad to see you follow what I'm asking @Buffy.  I was beginning to despair of anyone understanding exactly how different FP is from the imperative OO, C Family languages that dominate these days." CreationDate="2018-03-19T13:36:05.167" UserId="4689" />
  <row Id="11744" PostId="4516" Score="0" Text="With static methods, the linq namespace, and lambda expression support, you can go pretty far with c# to show FP principles, at least through applicative FP concepts. These might be segways into teaching more lisp-y ideas in their current language proficiency before introducing the ideas in scheme." CreationDate="2018-03-22T00:48:58.257" UserId="4401" />
  <row Id="11664" PostId="4517" Score="0" Text="Is there any reason why grading by percentages cannot just as easily implement the concept of rework?" CreationDate="2018-03-19T13:45:05.340" UserId="4082" />
  <row Id="11666" PostId="4517" Score="0" Text="@GorchestopherH, I would say rework is &quot;easier&quot; with points because students can more readily see how it will affect their grade and be more likely to engage in it, and there's not as much calculation required on the teacher's part." CreationDate="2018-03-19T13:53:21.753" UserId="4338" />
  <row Id="11672" PostId="4517" Score="0" Text="I suppose the trade-off here is that you put the work in up-front to ensure that the merit system for an individual assignment directly fits into the merit system for the course in general, which saves your students from having to do any calculating to figure out where they stand." CreationDate="2018-03-19T16:25:31.030" UserId="4082" />
  <row Id="11673" PostId="4517" Score="0" Text="Yes, and that &quot;up-front&quot; work can evolve over several semesters.  But the students love it." CreationDate="2018-03-19T18:51:17.403" UserId="4338" />
  <row Id="11667" PostId="4518" Score="2" Text="While you have some great material in here, and this is absolutely applicable to the realm in which I operate, this really doesn't apply too well to the question being asked." CreationDate="2018-03-19T14:34:59.770" UserId="4082" />
  <row Id="11675" PostId="4518" Score="0" Text="Welcome to CSEducators. It would be good if you would actually register for the site (or log in, if registered) so that it is easier to keep in contact." CreationDate="2018-03-19T19:01:08.690" UserId="1293" />
  <row Id="11674" PostId="4519" Score="0" Text="Hi and welcome to the site. It would be good if you would register for the site (or log in) so that it is easier to keep connected." CreationDate="2018-03-19T18:59:45.930" UserId="1293" />
  <row Id="11676" PostId="4519" Score="0" Text="Why do you say Windows Forms and ASP.NET are &quot;essentially the same thing&quot;? Windows Forms, as far as I'm aware, uses all explicitl code to manage UI elements. ASP.NET leverages templating engines to generate HTML pages. ASP.NET has also grown to include MVC, Razor, and Web API, and I believe they are more common than raw ASP.NET now. The inclusion of communicating via web requests also necessitates a much stricter separation between presentation and logic. I would not call them even nearly &quot;the same.&quot;" CreationDate="2018-03-20T01:49:17.807" UserId="981" />
  <row Id="11677" PostId="4519" Score="9" Text="Could you not provide the necessary bells and whistles for them? Provide them with some standard CSS to use and tell them not to deviate from it. Apologies if this constitutes a full answer..." CreationDate="2018-03-20T02:28:45.503" UserId="3413" />
  <row Id="11678" PostId="4519" Score="0" Text="@EdmundReed I think you could certainly make an answer out of that. One answer does suggest providing the *entire* presentation layer, but your more specific suggestion of providing a CSS stylesheet still allows them to build the presentation layer and neatly solves the OP's specific problem." CreationDate="2018-03-20T02:31:09.160" UserId="981" />
  <row Id="11682" PostId="4519" Score="34" Text="&quot;so I am at a loss as to why all of this is so interesting to the students&quot;. I can answer this. There is immediate gratification when you change the styling. Change 1 line, refresh the page, immediate results. It's easy to work by always changing small things and see the page evolve constantly from absolutely crap to something that actually looks good. Now compare this to writing a procedure to insert a record in a database. You can't easily split this in tiny chunks you can test separately. so they have to work more before getting results." CreationDate="2018-03-20T08:21:10.267" UserId="4722" />
  <row Id="11683" PostId="4519" Score="15" Text="If you are just trying to teach core programming concepts, and don't want students to be distracted by a GUI, which you yourself avoided by learning in command line programming, have you tried teaching them in command line programming? The GUI can come when they need to learn about the GUI." CreationDate="2018-03-20T09:03:15.770" UserId="1853" />
  <row Id="11685" PostId="4519" Score="6" Text="The look and feel of things is an essential part of human interaction and engagement. This is as true for your teaching practice as it is for the end result of any assignment. While it may not be within the scope of your course to teach this, I still think it's important that students understand how the css feed into the code - and how the manipulation of one can impact the behaviour of the other." CreationDate="2018-03-20T12:11:03.410" UserId="4067" />
  <row Id="11689" PostId="4519" Score="6" Text="As others have said it's easier and more gratifying to create visual changes than writing code that works in the background, this doesn't apply to only students either. If you've ever been a developer for a company that needs to appease shareholders you'll know what it's like to spend months rewriting an entire site architecture to increase maintainability and reuse and receive little praise, but then reskin a few buttons on the homepage and you've saved the day." CreationDate="2018-03-20T13:24:18.787" UserId="4723" />
  <row Id="11714" PostId="4519" Score="0" Text="Creating something visually beautiful is a powerful motivator for many people (if not for most programmers who tend to prefer logical/conceptual beauty). Perhaps you could use this in your class instead of fighting it? Also, if they're ever going to design forms in the &quot;real world&quot; they'll have to look nice as well..." CreationDate="2018-03-21T10:11:38.367" UserId="2167" />
  <row Id="11727" PostId="4519" Score="0" Text="It's never to early to tell your kids about automated testing." CreationDate="2018-03-21T17:30:31.310" UserId="990" />
  <row Id="11749" PostId="4519" Score="0" Text="I suppose you could always try to impress upon them that there's no marks for spending hours fussing over the details of their program's appearance, but their success in the course relies on them focussing on the code." CreationDate="2018-03-22T08:51:04.470" UserId="4751" />
  <row Id="11755" PostId="4519" Score="1" Text="“I am at a loss as to why all of this is so interesting to the students” Someone answered regarding &quot;immediate satisfaction&quot;, I will answer this concern about work and business purposes. Most of the software I develop for my clients is graphical (e.g. Android or iOS apps). Every time I see GUIs by other people, who do not care about UI guidelines, consistently sized icons, margins or fonts it drives me insane. It's painful to use a GUI where things are not aligned properly. **Customers notice, end users notice as well.** They will consider your work better because it works *and looks* right." CreationDate="2018-03-22T17:54:12.817" UserId="963" />
  <row Id="11742" PostId="4520" Score="0" Text="Windows Forms don't require an MVC approach. You might be thinking about WPF." CreationDate="2018-03-21T22:11:16.720" UserId="4746" />
  <row Id="11696" PostId="4523" Score="1" Text="From my own ancient experience your first set of guidelines might carry more weight thn the simpler set (this isn't a new problem, I got bogged down in look&amp;feel 20+years ago in Pascal)" CreationDate="2018-03-20T15:12:50.940" UserId="1127" />
  <row Id="11709" PostId="4523" Score="9" Text="I really like this answer compared to the others, as it doesn't restrict student freedom or expression. If the students have a good UI and get a bad grade on the assignment, it teaches them a lot about requirements prioritization." CreationDate="2018-03-20T18:56:10.283" UserId="2719" />
  <row Id="11747" PostId="4523" Score="4" Text="If only students were the only ones distracted. I've worked on websites, and I can tell you that during prototyping most non-technical persons (notably managers and clients) will focus on the appearance of the draft and completely ignore the underlying functionality :/" CreationDate="2018-03-22T08:14:20.120" UserId="1848" />
  <row Id="11753" PostId="4523" Score="0" Text="@MatthieuM. See the link on [bike shedding](https://en.wiktionary.org/wiki/bikeshedding) in the answer." CreationDate="2018-03-22T16:05:07.587" UserId="2068" />
  <row Id="11756" PostId="4523" Score="0" Text="@MatthieuM. but the appearance is *their* interface. Developers use APIs, end users use the UI. If your software does wonders but the interface is terrible, end users will not be satisfied." CreationDate="2018-03-22T17:56:20.240" UserId="963" />
  <row Id="11759" PostId="4523" Score="0" Text="@AndreaLazzarotto: The key word there was *prototype* (and I'm not talking about API, but functionality). During the *designing* phase, polishing each and every page is a colossal loss of time, as most will be scraped anyway. The underlying issue, I think, is that thinking about the functionality requires building up an abstract model, which takes more effort especially for non-technical people, so they focus on the immediate. A tick can be making the pages looking *obviously* like drafts, with squiggly borders and a &quot;post-it&quot; theme, to make it obvious it's a throw-away interface." CreationDate="2018-03-22T18:15:13.513" UserId="1848" />
  <row Id="11761" PostId="4523" Score="2" Text="@MatthieuM. I see. In my case we usually show the mockups made by the graphic designers to the clients first, *then* we show them an interactive version of the program even if the UI is half-baked or still ugly. So they know upfront what they will eventually get." CreationDate="2018-03-22T19:25:39.647" UserId="963" />
  <row Id="11762" PostId="4523" Score="0" Text="`Students tend to focus on the stuff they can see` -- yeah, this isn't limited to students. From product managers to CTOs, this is the same everywhere." CreationDate="2018-03-22T20:14:35.977" UserId="177" />
  <row Id="12372" PostId="4523" Score="0" Text="I would make the functional requirements pass/fail, and leave it at that.  If they miss a piece of functionality, use that as the opportunity to tell them if you think it was because they wasted time on the bells and whistles." CreationDate="2018-05-09T10:50:40.603" UserId="1874" />
  <row Id="11679" PostId="4524" Score="16" Text="One of the bells and whistles I've learned NEVER to leave out, even in supposedly &quot;throwaway&quot; scripts, is *complete usage information* for a command line tool when run with `--help` as an argument.  Actually, I usually write that usage message *first,* which forces me to design the script to be usable before I start implementing it.  Boy do the sysadmins I work with love me for it." CreationDate="2018-03-20T05:45:24.983" UserId="1103" />
  <row Id="11697" PostId="4524" Score="4" Text="@Wildcard This is why I love Python's `argparse` and similar libraries. Lets you set up your command-line arguments *and* get the help built-in!" CreationDate="2018-03-20T15:55:40.853" UserId="654" />
  <row Id="11700" PostId="4524" Score="3" Text="@JAB and they're often easier than parsing it yourself, so there's nearly zero reason not to" CreationDate="2018-03-20T16:15:15.013" UserId="3898" />
  <row Id="11684" PostId="4525" Score="1" Text="Actually not. There are fixed due dates, even when re-work is allowed. One rule might be that if you don't meet the deadline you don't get to do re-work. Variations are possible, such as a minimum score on the first version. Without re-work, however, deadlines can be as firm as in any other system. The scheme doesn't have to make it hard on the instructor and there are techniques for easing the pain on marking re-work. For example, the old work is turned in with the new, and all in a folder. You can have students mark changes between versions." CreationDate="2018-03-20T10:39:12.737" UserId="1293" />
  <row Id="11688" PostId="4525" Score="1" Text="If there are fixed due dates for both and rework is allowed for both, then there really is no difference beyond perception" CreationDate="2018-03-20T13:23:26.773" UserId="4417" />
  <row Id="11712" PostId="4527" Score="1" Text="+1 Some serious work goes into making bells and whistles useful. PyTorch is an example of a tool whose distinguishing feature is its use off &quot;bells and whistles&quot; to make programming machine learning systems easier to manage." CreationDate="2018-03-21T02:40:27.520" UserId="1537" />
  <row Id="11733" PostId="4527" Score="0" Text="I agree with the sentiment of this answer, and it's why I recommend [Processing](https://processing.org/) in many of my other answers here. This is especially useful for beginner classes. But at some point you need to go beyond the visual, at which point you'll need to solve this problem one way or another." CreationDate="2018-03-21T19:07:03.083" UserId="2068" />
  <row Id="11757" PostId="4527" Score="0" Text="+1 because it's unexpected that something visually nice would come out from Comic Sans MS. :P Seriously though, embracing seems a more viable strategy than forbidding." CreationDate="2018-03-22T17:59:16.057" UserId="963" />
  <row Id="11758" PostId="4527" Score="4" Text="See also python's turtle module for another environment which can make these: https://docs.python.org/3/library/turtle.html" CreationDate="2018-03-22T18:04:17.090" UserId="3189" />
  <row Id="11701" PostId="4528" Score="1" Text="Keep in mind that a portfolio is meant to be a showcase of tangible projects. Classes, homework, assignments, tests, personal reflections, etc don't fit the common definition of a portfolio." CreationDate="2018-03-20T17:57:23.377" UserId="2719" />
  <row Id="11692" PostId="4529" Score="0" Text="A colleague (and member here) reminds me offline that student's should't put solutions to their labs in their portfolio. Maybe he will expand that to a full answer. If it is permitted then labs can't really be reused from year to year, which is truly a complication for both the professor and the student. If not allowed, it cuts down on the projects available for inclusion, but the prose is the most important thing anyway, I think." CreationDate="2018-03-20T14:35:56.500" UserId="1293" />
  <row Id="11702" PostId="4529" Score="1" Text="I would imagine lab answers in portfolios would only be used for cheating, since I'm sure no actual recruiter would look at them. Unless they are hiring homework solvers." CreationDate="2018-03-20T18:06:10.490" UserId="2719" />
  <row Id="11691" PostId="4530" Score="0" Text="Well in my case in particular I'm teaching professional developers who already know C#; I'm attempting to teach them Scheme.  So it's not quite as dire as trying to teach people who've never coded two languages at the same time. :)" CreationDate="2018-03-20T14:15:21.590" UserId="4689" />
  <row Id="11748" PostId="4530" Score="1" Text="@OnorioCatenacci, if they're already familiar with .Net, maybe you should teach them F# before Scheme?" CreationDate="2018-03-22T08:27:16.693" UserId="1219" />
  <row Id="11693" PostId="4531" Score="0" Text="While I generally agree, the issue really only becomes a _problem_  when students neglect what they are meant to do, rather than when they want to go beyond the requirements. Of course, spending too much time on ephemera is a problem in its own right." CreationDate="2018-03-20T14:39:13.887" UserId="1293" />
  <row Id="11694" PostId="4531" Score="1" Text="@Buffy Hence &quot;Perhaps enforce this by making students show you their work when they are finished so that you can give them permission to start adding extra functionality.&quot;. If they have to prove that they have done what they are supposed to before they are allowed to work on other things then it's harder for them to neglect things. Naturally the viability of this varies with the environment (i.e. it's easier with pre-college/pre-uni environments). The time taken to check students' work would have to be factored into lesson time as well." CreationDate="2018-03-20T14:45:52.990" UserId="1538" />
  <row Id="11695" PostId="4531" Score="1" Text="Yes. Interaction and advice are always a good thing." CreationDate="2018-03-20T14:52:48.223" UserId="1293" />
  <row Id="11698" PostId="4532" Score="3" Text="What you say is certainly true about most employers (startups possibly excepted), but a kinder approach to students should be explored first, I think. The carrot is normally preferred to the stick, as long as the lesson is properly learned." CreationDate="2018-03-20T15:57:37.613" UserId="1293" />
  <row Id="11699" PostId="4532" Score="2" Text="And Welcome to CSEducators. Your profile indicates experience. It might be good to expand your post a bit about how your experience relates and reinforces your answer. Normally longer answers have higher &quot;value&quot; here." CreationDate="2018-03-20T15:59:58.740" UserId="1293" />
  <row Id="11720" PostId="4533" Score="3" Text="&quot;Have you tried giving the &quot;distracted&quot; students poor grades?&quot; That's unethical, students should be graded based on how well they achieve the task/demonstrated the required skills, not how &quot;distracted&quot; they get. If they spend 2 hours tweaking colours but do everything the coursework/task/exam requires, then the fact they spent 2 hours tweaking colours is irrelevant and should not impact their grade." CreationDate="2018-03-21T15:19:12.750" UserId="1538" />
  <row Id="11760" PostId="4533" Score="0" Text="@Pharap #1, the question has nothing to do with an ethical response, the OP asked for motivational techniques. #2,  you are making an assumption as to how that class is graded. it's only unethical if the class only bases grades on performance and not on participation as well. If the instructor tells the students they will take points away for being off-topic, then that's how it goes" CreationDate="2018-03-22T18:32:39.770" UserId="4729" />
  <row Id="11774" PostId="4533" Score="0" Text="But where does it end? Is briefly staring out the window off-topic? Is going to the toilet off-topic? What if the student has already completed all the work? Should they be banned from tweaking the colours on a finished program? Should they be banned from doing work for another class (since that's definitely off-topic)?" CreationDate="2018-03-23T19:48:05.347" UserId="1538" />
  <row Id="11792" PostId="4533" Score="0" Text="If the task has clearly defined guidelines AND clear instructions not to deviate from those guidelines, then it is entirely up to the teacher to enforce the with grading. I don't see that as unethical, but that would be for the school board to decide if there was enough complaint." CreationDate="2018-03-24T16:31:41.463" UserDisplayName="user4725" />
  <row Id="11711" PostId="4535" Score="0" Text="Welcome to CSEducators and thanks for your post. I think that illustrating by starting with a Scheme program and showing it in some other language is probably the best path for this sort of thing, rather than the opposite. That way the new language has cleaner code and if the translation is &quot;messy&quot; it can illustrate the power of the new paradigm. Showing messy Scheme would be counterproductive." CreationDate="2018-03-20T19:34:23.967" UserId="1293" />
  <row Id="11746" PostId="4536" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/74898/discussion-on-answer-by-kevin-workman-what-should-be-included-in-student-portfol)." CreationDate="2018-03-22T00:56:32.597" UserId="58" />
  <row Id="11725" PostId="4539" Score="0" Text="Welcome to CSEducators and thanks for this perspective. Come back often." CreationDate="2018-03-21T17:30:04.637" UserId="1293" />
  <row Id="11752" PostId="4539" Score="0" Text="I'd soften this by making the interface available and a requirement that it not be changed.  As written there could be a lot of questions about the interface requirement, and a lot of straining over getting it right so it's not something you get marked down on.  Simply provide the interface, require them to use it, and mark them down if it's not used or if it's broken." CreationDate="2018-03-22T15:49:08.760" UserId="4738" />
  <row Id="11751" PostId="4540" Score="0" Text="I think this is the best approach.  Provide them with requirements that the interface provided is used and not changed." CreationDate="2018-03-22T15:47:25.590" UserId="4738" />
  <row Id="11737" PostId="4541" Score="1" Text="Possible duplicate of [Avoid students being distracted by bells and whistles](https://cseducators.stackexchange.com/questions/4519/avoid-students-being-distracted-by-bells-and-whistles)" CreationDate="2018-03-21T20:47:01.160" UserId="104" />
  <row Id="11740" PostId="4541" Score="1" Text="What age group are we talking about? What language and frameworks are you using?" CreationDate="2018-03-21T21:49:24.617" UserId="2068" />
  <row Id="11754" PostId="4541" Score="0" Text="Could you edit the question to explain why the completely obvious answer of &quot;*Getting a poor mark for submitting a non-working program*&quot; is not adequate?" CreationDate="2018-03-22T17:34:22.300" UserId="1219" />
  <row Id="11782" PostId="4541" Score="0" Text="when you put a number to certain tasks...some folks will look for the shortest route. you know, rig the system with its own rules. I got students who do this. I just let them be. focus on the rest." CreationDate="2018-03-24T06:36:22.067" UserId="2605" />
  <row Id="11743" PostId="4543" Score="0" Text="Parito's numbers are an approximation (From observation), 89% is close-ish to 80%. And not a measurement, but was fixed in advance." CreationDate="2018-03-21T23:45:59.797" UserId="204" />
  <row Id="11783" PostId="4545" Score="0" Text="I am not sure why this was down voted since I came to post the above. The above mentioned qualities are essential for any programmer who is serious about taking their game to the next level.&#xA;&#xA;Especially the patience part is mandatory." CreationDate="2018-03-24T06:41:48.203" UserId="2605" />
  <row Id="11750" PostId="4547" Score="0" Text="Welcome to [cseducators.se]! You add an interesting view. I hope we'll see more great content from you in the near future!" CreationDate="2018-03-22T10:47:30.873" UserId="150" />
  <row Id="11766" PostId="4547" Score="0" Text="In my experience, &quot;perfect&quot; is more often than not the enemy of &quot;good enough&quot;.  There seems to be a consensus that software is &quot;good&quot; if the answers to both of the following are &quot;yes&quot;. 1. Did you build the thing right? 2. Did you build the right thing? I think an argument could be made that UI tweaking is, in this case, not the &quot;right thing&quot; -- because it's not what the &quot;customer&quot; wants." CreationDate="2018-03-23T14:53:12.210" UserId="2501" />
  <row Id="11767" PostId="4547" Score="0" Text="However, there does seem to be a mismatch between the course goals and the technologies in play.  If the focus is really on core programming concepts, the students should probably be writing command-line programs, not WinForms and/or Web apps. That mismatch *may* be due to instructor bias ... but it could very well also be a poorly designed course." CreationDate="2018-03-23T14:56:49.717" UserId="2501" />
  <row Id="11794" PostId="4547" Score="0" Text="ItamarG3 : Thank you for the feedback and the welcome. I hope so too.&#xA;@David : I disagree with the argument that UI teaking is not what the customer wants, but I'll admit there's a possibility. &#xA;On the other hand, I agree with your second comment. And combining your two possibilities, it's also probable that the course could have been poorly designed DUE to instructor bias. Maybe prior hands-on experience with .NET programming has the OP resort to relying on WinForms/ASP to teach fundamentals instead of other languages." CreationDate="2018-03-26T06:51:06.370" UserId="2854" />
  <row Id="11795" PostId="4547" Score="0" Text="On a different note, I do not see why programming basics are being taught with such high level framework-based languages. If the course is about the languages themselves, then shouldn't there already be a CS 1001 course (I mean a basic one) where students are taught these fundamentals? If that responsibility also lies with the OP, then maybe we can start off with some &lt;insert basic language here&gt; programming in the first few weeks of the course before moving on to ASP .NET." CreationDate="2018-03-26T06:54:25.050" UserId="2854" />
  <row Id="11763" PostId="4548" Score="0" Text="This is a gorgeous answer, and well-deliniated. I know I've said this before, but I really hope we get to hear more from you." CreationDate="2018-03-23T03:44:11.883" UserId="27" />
  <row Id="11764" PostId="4548" Score="0" Text="I always love to read things from the _voice of experience_. I second Ben I. in hoping to see more of your work here." CreationDate="2018-03-23T04:12:28.600" UserId="104" />
  <row Id="11768" PostId="4549" Score="1" Text="Note: after the `}`, `objectRefernece` will have the same state as at the start of the code. The new object that you created, is assigned to a local reference. (In most/all C like languages)" CreationDate="2018-03-23T15:15:54.937" UserId="204" />
  <row Id="11769" PostId="4549" Score="0" Text="I think your strategy of just waiting for a bit, is a good one (wait time: Wait until you feel that the uncomfortable silence has gone on way to long, then wait a bit longer.)" CreationDate="2018-03-23T15:19:20.850" UserId="204" />
  <row Id="11771" PostId="4549" Score="0" Text="Are you saying that students say &quot;uh!&quot; because they've figured it out for themselves, or because you've stared at them for 20 seconds? I've never heard the term &quot;two-alternative selection&quot; before- are you just talking about `else` blocks here?" CreationDate="2018-03-23T16:15:45.327" UserId="2068" />
  <row Id="11772" PostId="4549" Score="0" Text="TY to @ctrl-alt-delor for pointing out the local variable. I missed it in my original answer, but have corrected it." CreationDate="2018-03-23T16:51:36.780" UserId="1293" />
  <row Id="11773" PostId="4549" Score="0" Text="So we have 2 problems: a local variable shadowing another one (got it today in another context with some attributes declarations copied when introducing an abstract parent class), and an apparently &quot;missing else&quot; ?" CreationDate="2018-03-23T17:33:09.530" UserId="2103" />
  <row Id="11776" PostId="4549" Score="0" Text="&quot;testing if&quot; is not what an if does. It evaluates a condition then if that's true then it executes some code. (An if-else executes a branch per test result.) &quot;Testing if&quot; &amp; &quot;testing whether&quot; *don't even have any clear everyday meanings*. So it is hopeless &amp; ill-considered to refer to them. PS You might find out about the roles of assertions, invariants &amp; contracts in programming." CreationDate="2018-03-24T00:17:50.900" UserId="2485" />
  <row Id="11785" PostId="4551" Score="0" Text="If you remove the local declaration, then you have a once pattern. A once method only does something the first time it is called. Often used to create an `init` method (for late initialisation), the init method is called at the top of every method. It is responsible for doing it once. I struggle to see a use case for a local shadow variable." CreationDate="2018-03-24T09:30:43.900" UserId="204" />
  <row Id="11786" PostId="4551" Score="1" Text="I think it is really just a case of poor coding. It looks like the poster missed something. It is certainly a poor example for teaching the `if` structure to a novice." CreationDate="2018-03-24T09:39:45.937" UserId="1293" />
  <row Id="11793" PostId="4553" Score="0" Text="Welcome to CSEducators. You seem to have had a terrible educational experience. I'm sorry that happened. It should not have happened. There _are_ educators who try to assure that it doesn't happen, but it seems we failed you. I think we need to hear more from you." CreationDate="2018-03-25T09:51:23.247" UserId="1293" />
  <row Id="11822" PostId="4554" Score="4" Text="Just a heads-up. Be prepared for ridiculous amounts of giggling at the phrase &quot;Big O&quot;." CreationDate="2018-03-27T08:52:58.253" UserId="4751" />
  <row Id="11844" PostId="4554" Score="1" Text="To my great relief, @AJFaraday, there was no giggling when I used the term in the classroom.  Maybe they are still too naive.  Small gifts." CreationDate="2018-03-27T16:57:19.403" UserId="4338" />
  <row Id="11852" PostId="4555" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/75164/discussion-on-answer-by-buffy-how-do-you-teach-big-o-to-high-schoolers-with-vary)." CreationDate="2018-03-27T21:19:45.370" UserId="76" />
  <row Id="11854" PostId="4555" Score="0" Text="Related: [Bubble Sort: An Archaeological Algorithmic Analysis](https://users.cs.duke.edu/~ola/papers/bubble.pdf) is an interesting read about the origins of the algo, and it's popularity as a teaching example." CreationDate="2018-03-27T22:41:31.940" UserId="1654" />
  <row Id="11810" PostId="4557" Score="1" Text="What in the world did your roommate do that was so inefficient?  I am having trouble imagining." CreationDate="2018-03-26T22:35:37.127" UserId="27" />
  <row Id="11819" PostId="4557" Score="0" Text="@BenI. It's a singly-linked list *going from MSB to LSB*.  Carry propagates in the other direction!!  Presumably there were getter / setter functions that took an integer digit position, and traversed the list each time for each access to each digit, in an extended-precision multiply!  So element access is O(n), and a slow O(n) at that." CreationDate="2018-03-27T04:19:02.770" UserId="1654" />
  <row Id="11820" PostId="4557" Score="0" Text="If indexing is from the LSB, it might walk the list once to get length, then walk it again to reach the right element.  That's only increasing the constant factor, so the whole linked-list storage scheme only raises the complexity class by a factor of `n`, but what a huge constant factor.  Pointer chasing has latency that out-of-order execution can't hide easily, vs. array indexing with non-data-dependent offsets." CreationDate="2018-03-27T04:27:36.293" UserId="1654" />
  <row Id="11831" PostId="4557" Score="2" Text="FWIW, here's the alg my roommate came up with: Loop a counter from 1 to the length of the first number (n). For each value, start at the beginning and iterate to the correct spot in the linked list (n*n).  Do a second interior loop for the second number (n^3) and then iterate to the correct spot in the linked list (n^4).  Finally, iterate to the correct spot to put the information in the answer's linked list (n^5).  The reason it was so inefficient is because he didn't walk to the next node in those linked lists - he started over at the beginning each time.  Which Big-O helps analyze awesomely" CreationDate="2018-03-27T13:21:26.883" UserId="4777" />
  <row Id="11806" PostId="4558" Score="0" Text="You forgot to account for the time not spent in the gim, when you walk." CreationDate="2018-03-26T21:39:08.580" UserId="204" />
  <row Id="11808" PostId="4558" Score="1" Text="If it takes time to put on shoes for walking, are you assuming that we are teleporting barefoot?" CreationDate="2018-03-26T22:15:58.983" UserId="4782" />
  <row Id="11817" PostId="4558" Score="0" Text="@NomadMaker: If the teleport takes longer, putting on shoes is off the critical path; you can do it while the teleport warms up and still have time to program the destination.  So the teleport time to arrive properly shod is `max(teleport_warmup,  shoes)`." CreationDate="2018-03-27T04:09:40.510" UserId="1654" />
  <row Id="11818" PostId="4558" Score="0" Text="@Richard: do you find this example leaves students confused when they *don't* have the exact function, just a complexity class?  Do they end up thinking they always need to know the constants before they can drop them, or something?  Hopefully that isn't a problem, but worth asking.  (I'm not a CS teacher other than on SO, but answering SO questions exposes me to a firehose of questions from people who failed to understand stuff I thought was obvious... as well as the rarer interesting questions about tricky stuff.)" CreationDate="2018-03-27T04:14:16.613" UserId="1654" />
  <row Id="11843" PostId="4558" Score="0" Text="I wonder if it would be helpful to graph the ratio of the actual time or resource requirement to the big-O function.  While working with quotients analytically is apt to be rather troublesome, if f(x) is O(g(x)), and f(x) and g(x) are positive everywhere, then it will possible to identify an x0 and y0 such that the graph never enters the region where x&gt;x0 and f(x)/g(x)&gt;y0." CreationDate="2018-03-27T16:15:55.863" UserId="2073" />
  <row Id="11845" PostId="4559" Score="1" Text="Funny you should mention this.  A student came to me yesterday during lunch and did the very same analysis on the board to make sure she understood the concept." CreationDate="2018-03-27T16:59:45.973" UserId="4338" />
  <row Id="11846" PostId="4559" Score="0" Text="@JavaJive This is so simple that everyone can think of it. That alone already makes it useful for teaching, IMO." CreationDate="2018-03-27T17:10:10.567" UserId="154" />
  <row Id="11829" PostId="4560" Score="0" Text="While drawing asymptotic behaviour is fine, you should be careful to include that making an asymptotic claim from a drawing is a dangerous exercise that shouldn't be attempted unless the student knows what that means!" CreationDate="2018-03-27T13:00:55.127" UserId="154" />
  <row Id="11859" PostId="4560" Score="0" Text="In the table of results, I would add a sample how the time grow for each complexity. For instance base the fact that at n=100 O(n) take 1s and show us the time that it represent, people will understand that much better." CreationDate="2018-03-28T12:02:48.570" UserId="1375" />
  <row Id="11847" PostId="4563" Score="0" Text="Not imploring. The reason for registering is that you (a) get to edit your posts for clarification, and (b) avoid others editing them beyond your recognition. Also, you could consider it to be a curtesy to those who want to assist you. You can still be anonymous, as I am. One question that we suspect was written by yourself was closed simply because we couldn't be sure of your intent and didn't know how to improve it. It became a kind of cruft. But you may not even see this comment, not being registered and therefore notified of its existence." CreationDate="2018-03-27T17:42:58.323" UserId="1293" />
  <row Id="11853" PostId="4564" Score="1" Text="&quot;A test where they run out of time is essentially invalid and does not help me.&quot; On the contrary. This can certainly be informative of the level of learning of your students. I would ask you to consider who/what your tests are for. &quot;When I hear, right from the start, lots of page-flipping, I know it will not end well.&quot; Then why not intervene right then? Why persist knowing that &quot;it will not end well&quot;? How have you reacted in those moments? I fear this is another case of an anonymous question that would benefit for OP's improving thereof but will never receive it..." CreationDate="2018-03-27T21:31:06.243" UserId="76" />
  <row Id="11864" PostId="4564" Score="0" Text="Not sure if this is deserving of a full answer, but have you thought about rearranging your questions in order of difficulty? That is, put the questions you think will be easiest first, and the ones you think will be hardest last. This would help the students who panic and forget about test taking strategy, while having no real impact on the other students." CreationDate="2018-03-30T02:34:16.333" UserId="732" />
  <row Id="11849" PostId="4565" Score="3" Text="I think your tl;dr focuses on the wrong part. The OP's root problem is that the test-takers don't appropriately budget their time. It's true that open book tests have an additional component that needs to be budgeted for, but people can fall victim to poor time management even in closed-book exams." CreationDate="2018-03-27T17:59:21.963" UserId="1703" />
  <row Id="11850" PostId="4565" Score="1" Text="@NuclearWang Open book just exacerbates the problem, though. Every minute page turning is a minute _not_ spent thinking. Without the crutch of the book, you have a better shot at a more comprehensive solution - namely _active learning_" CreationDate="2018-03-27T18:03:06.463" UserId="1293" />
  <row Id="11869" PostId="4565" Score="0" Text="@Buffy Open-Book means that you're testing people on how to actually write useful things, instead of mindlessly regurgitating information.  To use your example above of Physics, A closed-book/closed-notes test forces people to remember the dozens of physical constants that are necessary, instead of just letting them plug the numbers in where necessary." CreationDate="2018-03-30T21:42:02.180" UserId="4810" />
  <row Id="11870" PostId="4565" Score="1" Text="@StackTracer, it is possible, of course, to create exam questions in which the book is essentially irrelevant, but don't discount the _perverse incentive_ that open book exams may create for the student's study/learning process. Also, the original question seems to suggest (at least) that the questions being asked did depend on information not learned." CreationDate="2018-03-31T11:25:03.087" UserId="1293" />
  <row Id="11861" PostId="4567" Score="1" Text="I'm sorry, but I think you are trying to put it all on the students, rather than taking responsibility for teaching them properly. _Sink or Swim_ is a pretty brutal teaching philosophy. Admonishing them to &quot;Be Professional&quot; is about as valuable, in itself, as &quot;Be Moral.&quot; You shouldn't be mystified. You should find ways to learn about your students, just as they should learn about the material. Memorization, in particular, may be (at least a bit) less important than you think. I program at a high level, but Google is my co-pilot, for example. Pressure is a mind killer for some. Try to avoid it." CreationDate="2018-03-29T14:37:15.880" UserId="1293" />
  <row Id="11865" PostId="4568" Score="0" Text="No, you shouldn't have answered this. [“There's an answer on this site over there” is not an answer](https://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an-answer). The content of this site may make a good answer, but just stating its existence does not answer the question." CreationDate="2018-03-30T04:54:25.857" UserId="124" />
  <row Id="11866" PostId="4568" Score="0" Text="Actually, a more complete answer would have been fine. But as @Gilles suggests, simple links are not highly valued here. If you can say more about the example and why it works and with whom, it will find better acceptance. But &quot;Go look over there&quot; isn't considered a &quot;real&quot; answer here. be as complete as you can be. Explore the site and see which answers get up-voted. They generally contain good explanations.  You can edit your answer, of course, and down-votes can then be withdrawn." CreationDate="2018-03-30T12:49:56.567" UserId="1293" />
  <row Id="11868" PostId="4568" Score="0" Text="Your comment above with the link was very appreciated. Thank you." CreationDate="2018-03-30T16:53:20.363" UserId="283" />
  <row Id="11872" PostId="4569" Score="0" Text="I'll note that this question is also useful to instructors who are developing curriculum for novices." CreationDate="2018-04-01T12:50:27.777" UserId="1293" />
  <row Id="11873" PostId="4569" Score="0" Text="Possible duplicate of https://cseducators.stackexchange.com/questions/212/is-it-more-effective-to-teach-low-level-languages-before-high-level-ones-or-vice" CreationDate="2018-04-01T14:06:57.373" UserId="27" />
  <row Id="11881" PostId="4569" Score="8" Text="High and low level are non-binary. Python, R etc are higher than C. C I just above assembler. Saying that C is high level, is out of date. Much like most curriculums." CreationDate="2018-04-01T22:00:39.160" UserId="204" />
  <row Id="11904" PostId="4569" Score="0" Text="As somehow this is the big deterrent to learning lower level languages. I'd like to know who, teaching an introductory programming course, actually ends up in a place where their students *actually* need to learn memory management?" CreationDate="2018-04-04T21:06:07.887" UserId="4082" />
  <row Id="11909" PostId="4569" Score="1" Text="I view this as separate from the possible dupes on the grounds that it's about giving direction to others on leaning programming. The answers do far seem to be, in the main, of reasonable quality with evidences to support the answer. It seems like a natural extension to [this question](https://cseducators.stackexchange.com/q/754/104)." CreationDate="2018-04-06T00:08:24.260" UserId="104" />
  <row Id="11883" PostId="4570" Score="0" Text="I trust that compute capacity **does not** return a value, but sets an instance variable. (or else is poorly abstracted). Wow this answer is double plus good." CreationDate="2018-04-01T22:47:44.130" UserId="204" />
  <row Id="11884" PostId="4570" Score="0" Text="Don't think narrowly @ctrl-alt-delor. It needn't be either. It could set off a long chain fo messages that does interesting  things in a database or over a network or readies the available weapons for the alien invasion, or ... There is more to life than getters and setters." CreationDate="2018-04-01T22:52:51.613" UserId="1293" />
  <row Id="11885" PostId="4570" Score="0" Text="say no to getters and setter, but yes to command query separation." CreationDate="2018-04-01T22:56:53.707" UserId="204" />
  <row Id="11894" PostId="4570" Score="1" Text="There's often a confusion between learning comp. programming and learning the low level elements of a computer.  Actually it more about learning to analyze what you want and figure how to have the bloody thing doing it with providing a description in whatever language you have." CreationDate="2018-04-02T17:43:28.573" UserId="2103" />
  <row Id="12088" PostId="4570" Score="0" Text="Could you provide an example of &quot;global optimization&quot; that can be done in a high level language and not in the low level language? &quot;Describing what to do instead of how to do&quot; sounds well in hand-waving, but I fail to translate that to any practical examples, except for maybe &quot;true&quot; generics (as opposed to duplicating code, either by hand or using templates), but that also can be optimized. Usually, there are to problems: (1) In reality, the optimization is done at the low level anyway, (2) The computation model, even in supposedly high level languages, tends to be very constrained." CreationDate="2018-04-18T07:35:13.653" UserId="4884" />
  <row Id="12090" PostId="4570" Score="0" Text="@Frax I wonder if you are confusing what the programmer does with what the compiler can do. With today's fast hardware and sophisticated compilers the relationship between the original program and the compiled version can be anything but simple. Yes, the compiler (usually) produces the low level code that is actually executed, but it need &quot;look&quot; nothing like the original notations. In particular, a JIT compiler might not even compile some branches of a switch if it knows (from the current execution) that those branches can't be taken. This reduces page faulting and cache misses, etc." CreationDate="2018-04-18T12:36:18.587" UserId="1293" />
  <row Id="12091" PostId="4570" Score="0" Text="No, I don't confuse it. I'm merely saying that low-level languages are also capable of global optimization, and the end code may differ from original just as wildly. In the same time, the translation from high- to low-level is often pretty strict. The only language I can think of in which you actually describe &quot;what you want to get&quot; instead of &quot;how to get it&quot; is SQL, but it has  a very limited application. I'll be happy to see an example of high-level construct allowing a global optimization that can't be done on the low-level code." CreationDate="2018-04-18T15:16:07.970" UserId="4884" />
  <row Id="12092" PostId="4570" Score="0" Text="The issue isn't that it is _theoretically_ impossible to do the optimizations. It is that it can't _feasibly_ be done by a person. A compiler can execute tens of millions of instructions to improve the run-time performance of the resulting code by around 1%. No person can effectively match that. You can, in fact, get a doctorate in CS for a dissertation that shaves around 1% off of the run time by doing very sophisticated, say, graph analysis on the program. For reference, another language that lets you say _what_, without saying _how_, is Prolog. But OO programs can _hide_ a lot of the how." CreationDate="2018-04-18T16:48:26.413" UserId="1293" />
  <row Id="12094" PostId="4570" Score="1" Text="@Buffy, confronting manual optimizations with compiler optimizations is a false alternative, unless you write in asm. For JIT, I found [this question](https://stackoverflow.com/questions/4516778/when-is-java-faster-than-c-or-when-is-jit-faster-then-precompiled), though it really refers only low-level optimizations. But I didn't find a good example of a global optimization that would be bound to high-level language. And actually, Prolog is my example of a language that looks like saying just _what_, but in practice says also big part of _how_." CreationDate="2018-04-19T09:30:42.367" UserId="4884" />
  <row Id="13122" PostId="4570" Score="0" Text="Don't mix languages/paradigms for beginners! My experience (and others) is that learning the first language takes a year or so (a programming course, then something like data structures or other more in-depth work), the second takes you half a year, the next ones a few weeks. The first year is critical. And what they have to learn is &quot;the computer does as told, not what is reasonable&quot;, &quot;need to break down the task&quot;, &quot;a variable isn't what a mathematician calls such&quot;. Hopefully the syntax and any mysterious overhead (the junk in Java's &quot;Hello, world!&quot; for example) is reduced to a minimum." CreationDate="2018-08-03T12:19:43.880" UserId="5219" />
  <row Id="13123" PostId="4571" Score="0" Text="Java is a complete mess (some types are objects and behave a certain way, others aren't; you are playing with pointers to the objects and nobody says so), and has lots of mysterious stuff for the beginner that makes no sense (class, ...). Better use a clean language like Python 3." CreationDate="2018-08-03T12:22:31.450" UserId="5219" />
  <row Id="11910" PostId="4572" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/75602/discussion-on-answer-by-elkady-for-a-beginner-is-it-better-to-start-with-c-or-a)." CreationDate="2018-04-06T06:33:20.893" UserId="58" />
  <row Id="11897" PostId="4578" Score="0" Text="I can post a video some of this in action too. It wouldn't be with Java, however, limiting its usefulness for this specific question." CreationDate="2018-04-02T20:23:08.143" UserId="2040" />
  <row Id="11903" PostId="4579" Score="0" Text="Why does a beginner need to bother with the &quot;heap&quot; when learning recursion, looping, conditional logic, or variables? C *can* be tricky, but in a beginners course, it is certainly not." CreationDate="2018-04-04T20:38:19.870" UserId="4082" />
  <row Id="11905" PostId="4579" Score="1" Text="Once you want to create a large object such as a list or an array, you are into malloc/free and the heap. You don't stuff that big stuff onto the stack." CreationDate="2018-04-04T23:07:42.490" UserId="21" />
  <row Id="11993" PostId="4579" Score="0" Text="Not all lists or arrays are large enough to require heap usage. For the purpose of a beginners course, you can certainly, as an instructor, ensure your students don't have to bother with this." CreationDate="2018-04-10T13:46:18.580" UserId="4082" />
  <row Id="11912" PostId="4582" Score="0" Text="The first day I started programming I was surely a beginner, I was 13, I started with C/C++ (I was using iostream, string and vector but it was basically C: no classes, only structs). Growing up I started appreciating the differences between C and C++ and refining the knowledge of both. I think there is no real need to start with something like “scratch”, unless someone is really young. Probably the best thing would be to start with scratch at, maybe, 3-6, and then gradually move to a real programming language. But i have no experience in that, only my personal one." CreationDate="2018-04-06T10:29:33.413" UserId="4818" />
  <row Id="11918" PostId="4585" Score="0" Text="This is somewhat related to https://cseducators.stackexchange.com/questions/4410/what-are-the-tradeoffs-of-allowing-students-to-submit-test-corrections, though not exactly the same." CreationDate="2018-04-06T16:38:49.193" UserId="1293" />
  <row Id="11919" PostId="4585" Score="1" Text="You can look at time stamps, especially on school computers, on code they forgot to submit, to make sure it was really an honest mistake. (I don't know how hard it is to fake time stamps on personal computers.)" CreationDate="2018-04-06T19:47:31.853" UserId="283" />
  <row Id="11930" PostId="4585" Score="2" Text="@EllenSpertus It's about as easy to &quot;adjust&quot; the clock on a personal computer as it is to adjust the alarm clock on the dresser. Timestamps from _other_ controlled hardware is useless, and even from school controlled is sometimes questionable." CreationDate="2018-04-08T17:35:29.650" UserId="104" />
  <row Id="12074" PostId="4585" Score="0" Text="If this is for larger projects as you say, then why not have multiple submissions as part of the project completion process?  Peer code reviews, you do the final review, students get one more submission if they want when you are done...." CreationDate="2018-04-16T18:39:13.977" UserId="662" />
  <row Id="11975" PostId="4588" Score="0" Text="What you are talking about sounds a lot like Competency-Based Education. Is that what you are intending to do?" CreationDate="2018-04-09T22:37:53.027" UserId="1931" />
  <row Id="11979" PostId="4588" Score="1" Text="@RobertColumbia, that certainly sounds like what I am describing (after looking up the definition), although I wasn't aware of the term." CreationDate="2018-04-09T23:16:39.243" UserId="4338" />
  <row Id="11980" PostId="4588" Score="0" Text="Two of the principles that often define Competency-Based Education are an ability to resubmit work (or turn in work late) with a (perhaps corresponding) increase in the quality of work required. Instead of allowing students to squeak by with a C- or even lower on a few assignments, students are required to get an A (or sometimes an A or a B) on *everything*, but have extended opportunities to try and retry to *get* that A or B." CreationDate="2018-04-09T23:26:23.760" UserId="1931" />
  <row Id="11927" PostId="4589" Score="0" Text="Should the question be taken from the perspective of a grading TA? (I ask because you did not mention this in the prompt)" CreationDate="2018-04-08T15:31:58.827" UserId="27" />
  <row Id="11928" PostId="4589" Score="1" Text="@BenI. My intention was to ask independent of my personal perspective, as 1) I think this may be an issue some course designers could encounter and hence focusing on my perspective is unhelpful for the general public. 2) I'm aware of how I can use information for course designers to provide suggestions to the course designer. Hence, I don't think any accommodation to my perspective would help. But good that you mention it." CreationDate="2018-04-08T15:34:34.077" UserId="154" />
  <row Id="11948" PostId="4589" Score="9" Text="In grad school, I destroyed two perfectly fine laptops by running computationally-intensive tasks on them that they weren't capable of handling. Please be respectful to your students: if they're telling you that their computers are overheating, there is a very real possibility that some of your students will see their laptops become unusable because of the assignments." CreationDate="2018-04-09T15:16:40.403" UserId="1360" />
  <row Id="11969" PostId="4589" Score="0" Text="I added an answer (now deleted) to get a cheap 80 dollar add on too allow running this stuff on extra hardware.  I was downvoted because of the incredible cost.  $80.  Really?" CreationDate="2018-04-09T20:15:15.613" UserId="4854" />
  <row Id="11971" PostId="4589" Score="2" Text="@Vorsprung I was the downvoter, because I don't like the idea of offloading the costs to students, and because that product could be discontinued. If you undelete it, I'd be happy to edit+retract my vote." CreationDate="2018-04-09T20:31:04.787" UserId="58" />
  <row Id="11977" PostId="4589" Score="1" Text="@Vorsprung for someone who is on the breadline yes, \$80 can be an issue. Worst thing could be that those (no matter how few) for whom \$80 is actual money switch to a different course." CreationDate="2018-04-09T23:10:17.570" UserId="757" />
  <row Id="11985" PostId="4589" Score="0" Text="After doing whatever you find here, don't forget to make sure your IT department knows their laptops have problems..." CreationDate="2018-04-10T10:17:04.130" UserId="1275" />
  <row Id="11988" PostId="4589" Score="0" Text="@immibis I think the laptops are fine. If the laptops would actually be damaged, the students would have mentioned it explicitly. And in any case, the students would let IT know if there are problems with the laptops." CreationDate="2018-04-10T10:45:39.283" UserId="154" />
  <row Id="11926" PostId="4590" Score="4" Text="The main problem here is of course that the costs may scale badly wrt to the number of students. But this is a good overview of this option, thanks." CreationDate="2018-04-08T15:28:29.470" UserId="154" />
  <row Id="11935" PostId="4590" Score="0" Text="Kindly add the FloydHub as well - one of my student used it recently and its not as powerful as AWS, but maybe fit somewhere for some assignments." CreationDate="2018-04-09T01:11:57.467" UserId="2537" />
  <row Id="11938" PostId="4590" Score="3" Text="@TalhaIrfan Please, don't add every single cloud service to this answer." CreationDate="2018-04-09T07:48:07.687" UserId="4236" />
  <row Id="11949" PostId="4590" Score="2" Text="I second this approach. As a current graduate student, last semester I took a parallel computing class that had all CPU parallelization assignments done (via SSH) on a computing cluster at our university, and all GPU parallelization assignments done on a Google Cloud instance using an Nvidia Tesla K80.  The GCloud credits were more than enough to cover usage time during the course.  I think @Aurora0001 has the most appropriate solution." CreationDate="2018-04-09T15:38:20.650" UserId="4856" />
  <row Id="12058" PostId="4590" Score="0" Text="Google Cloud Platform gives $300 for a year for all new users. It also offers some [grants for universities](https://cloud.google.com/edu/)." CreationDate="2018-04-14T11:46:14.883" UserId="4884" />
  <row Id="11925" PostId="4591" Score="0" Text="While I understand the advice given in the first paragraphs, I was already aware of this and think that has been one of the problems. This might be a good time to mention that I'm not the one responsible for designing the assignment, but a concerned grading assistant. Of course, this doesn't make your advice less valuable, merely less useful to me in particular. As for 'scaling down', that would be difficult. Deep learning only gives reasonable results on large datasets, as far as I'm aware. I do think that perhaps 'scaling _out_' might be possible: circumvent the actual computations, somehow." CreationDate="2018-04-08T15:26:54.243" UserId="154" />
  <row Id="11937" PostId="4591" Score="0" Text="@Discretelizard Sure, deep learning only gives good results on initial training on large datasets. Then the industry found a workaround for that and transfer learning is the main way of making working nets. This is completely doable with standard laptops." CreationDate="2018-04-09T06:30:22.787" UserId="4667" />
  <row Id="11947" PostId="4593" Score="1" Text="The idea of using clould computing (and even Azure specifically) is already covered by Aurora0001's answer. For that reason, I've downvoted." CreationDate="2018-04-09T14:38:49.577" UserId="58" />
  <row Id="11981" PostId="4593" Score="4" Text="Furthermore, you shouldn't rely on the students being eligible for a free trial offer, since they may have already used it up. Rather, you, as the instructor, should apply for an instructional grant from Microsoft." CreationDate="2018-04-10T00:24:02.093" UserId="897" />
  <row Id="11968" PostId="4594" Score="1" Text="I teach my students their job will not be writing working perfect programs at first shot, but trying to understand and fix problems in programs that should work but don't. So, using good naming practices from start will help and actually require much less work." CreationDate="2018-04-09T20:13:54.533" UserId="2103" />
  <row Id="11984" PostId="4594" Score="1" Text="Make them code something, forget it for 6 months, and then alter it to add new functionnalities. After 6 months, even your code, is not yours anymore. Add to the mix a bit of unit mixing (milliseconds / seconds / meter, etc), and they'll understand that coding clearly is mandatory for any code that will stay around." CreationDate="2018-04-10T07:39:10.690" UserId="4871" />
  <row Id="11989" PostId="4594" Score="3" Text="@Thierry why make them wait 6 months? Just ask them to make sense of code written by the last bunch of students 6 months ago." CreationDate="2018-04-10T10:48:52.647" UserId="2894" />
  <row Id="11990" PostId="4594" Score="2" Text="You could, but i find it of greater value that you do not understand your own code 6 months later, when you wrote it, you understood it perfectly, and you found it was understandable enough at that time. With code from someone else, you could always argue that you wouldn't have written it the way it was, and that your way would have been better." CreationDate="2018-04-10T11:42:35.083" UserId="4871" />
  <row Id="11991" PostId="4594" Score="3" Text="@Thierry  and MichelBillaud Please avoid answering the question in a comment. Answers in comments will be deleted as mentioned in [this meta post](https://cseducators.meta.stackexchange.com/a/390/58)." CreationDate="2018-04-10T12:04:13.817" UserId="58" />
  <row Id="12014" PostId="4594" Score="0" Text="Give them an example of code with horrible names and go over the process of improving the names. Maybe even do other refactoring like moving code into new functions and give that function a good name. Allow your students to propose names for everything." CreationDate="2018-04-11T07:48:42.937" UserId="3745" />
  <row Id="12018" PostId="4594" Score="0" Text="The first homework should be to review [_the_ guide to unmaintainable code on this matter](http://mindprod.com/jgloss/unmainnaming.html) ;)" CreationDate="2018-04-11T08:15:23.663" UserId="4892" />
  <row Id="12022" PostId="4594" Score="0" Text="Related : [Coding Without Comments](https://blog.codinghorror.com/coding-without-comments/).  Good naming conventions mean the code should generally read clearly without using comments.  Suggest to students that they do their best to adjust their naming conventions to eliminate the need for comments as much as possible." CreationDate="2018-04-11T12:22:50.640" UserId="2976" />
  <row Id="11953" PostId="4596" Score="0" Text="get/set methods may or may not be useful for introducing students to programming, but they are an integral part of OO:  They allow an object to encapsulate its properties and provide a consistent contract for them (such as guaranteeing the value is never null).  If getters and setters are doing nothing but reading and writing a private field… well, they’re doing it wrong." CreationDate="2018-04-09T17:14:21.263" UserId="1153" />
  <row Id="11954" PostId="4596" Score="3" Text="@VGR, the consistent contract is actually not dependent, externally, on knowing that a field exists. A mutator updates the state of the computation, somehow, not necessarily the state of a variable. Get/Set leads to an improper, overly mechanistic view. It forces low-level thinking when OO is about high-level thinking. If a mutator exists for logical reasons and later, when you build the class, the best implementation is a field, then it isn't a problem. The problem arises when you think about objects as bundles of fields, rather than bundles of behavior." CreationDate="2018-04-09T17:18:59.637" UserId="1293" />
  <row Id="11955" PostId="4596" Score="0" Text="It's worth noting that the naming conventions for Java are [officially documented](http://www.oracle.com/technetwork/java/codeconventions-135099.html). And there is a convention for pluralizing class names: non-instantiable classes that provide static utility methods for producing or manipulating instances of the singular form of the class name." CreationDate="2018-04-09T17:30:27.723" UserId="4437" />
  <row Id="11974" PostId="4596" Score="0" Text="@VGR get/set for private members is a common practice because the idea is that you don't want to change client code if you change a variable was accessed. Properties somewhat solve this issue, but again, require you to wrap any of these potential &quot;changers&quot; in a property to do so.  Funnily enough the only language that managed to get this right(and most everything else wrong) was Matlab. There are only properties in matlab, and to change access you can define get and set later at any time eg `get.foo()` and `set.foo()`. This is what all Java style languages should do IE C# and Kotlin." CreationDate="2018-04-09T20:43:23.457" UserId="3168" />
  <row Id="11997" PostId="4596" Score="1" Text="I find point 6 a bit too strong and accept/write abbreviations if they are well known, either in the problem or solution space. I really prefer `HttpProxy` over `HyperTextTransportProtocolProxy`. ☺" CreationDate="2018-04-10T15:09:58.843" UserId="847" />
  <row Id="11998" PostId="4596" Score="2" Text="I know this might be a bit controversial but the idiom of using `i` as a loop counter has been around so long and used so widely, I think it's a bad idea to try to teach people not to use it.  It's something the students will see in practice and if it isn't 'normal' to them, it will be harder to grok real production code.  This form is the exception for loops now in Java; I it's not worth the trouble to try to change this.  The loop counter becomes invisible if you follow the idiom and abnormal for loops are apparent.  It's like the sign of an electron (negative): it's too late to change now." CreationDate="2018-04-10T16:18:29.753" UserId="2087" />
  <row Id="12000" PostId="4596" Score="0" Text="@TKK and others. The referenced document is very old (1999), unmaintained, and probably obsolete. Note that the libraries from Oracle don't follow many of those suggestions. In particular, not all methods have verb (phrase) names." CreationDate="2018-04-10T20:25:58.947" UserId="1293" />
  <row Id="12001" PostId="4596" Score="0" Text="@Buffy As a professional Java developer, I can attest that it remains relevant. It's incomplete (for example, the plural class names I mentioned) but still a very good starting point." CreationDate="2018-04-10T20:32:26.597" UserId="4437" />
  <row Id="12003" PostId="4596" Score="0" Text="@JimmyJames The `i` idiom _has_ been around a long time, and I have programmed where it was essentially mandatory. Ever since moving to a language that allowed names longer than one character, however, I have avoided that idiom for the threadbare tradition that it is. I don't even use single character names in one-off loops I type at the command line. If an anonymous, short, indexer is needed, at least use `lcv` for _loop control variable_." CreationDate="2018-04-11T00:08:21.163" UserId="104" />
  <row Id="12019" PostId="4596" Score="0" Text="get/set is wrong in many ways, but is common practice (but still wrong). Some covered here. The first has been mentioned it makes you view an object as a data structure. Next if you have a get it should be a noun phrase, so not `getHeight`, but `height`. 3rd to many setters, will make it impossible to create simple or effective concurrent code (You would need a lot of potentially buggy lock code, and the running code will spend most of its time waiting on these locks). Concurrent programming is easy, when data is immutable." CreationDate="2018-04-11T08:31:54.197" UserId="204" />
  <row Id="12023" PostId="4596" Score="2" Text="@GypsySpellweaver I've honestly never really understood why people have a problem with using `i` this way.  Do people look at the for loop and wonder what the `i` variable is about?  Frankly when people use something else, I find it distracting.  In Java, the `:` (&quot;in&quot;) syntax should be preferred anyway." CreationDate="2018-04-11T13:39:39.797" UserId="2087" />
  <row Id="12025" PostId="4596" Score="1" Text="@GypsySpellweaver With `lcv` you create worse code than with `i` because every reader except you will wonder what `lcv` means.  `i`, `j`, `k` as index variable names are around even longer, because they are often used in formulas/mathematics. Even before any programming languages/computers. So that's a quite strong idiom." CreationDate="2018-04-11T14:02:48.267" UserId="847" />
  <row Id="12033" PostId="4596" Score="1" Text="Speaking as someone who writes code for a living, in multiple languages, it is very important to write code that is idomatic to the language, because every other user of that language is doing likewise.  This means, in Java, you have getters and setters - by the way, these refer to &quot;properties&quot; of the class - they need not refer to the fields in the class.  Teaching `foo()` as the accessor for the `foo` property over `getFoo()` will handicap those students who go on to code commercially." CreationDate="2018-04-12T08:17:47.337" UserId="4899" />
  <row Id="11950" PostId="4597" Score="1" Text="&quot;This leaves me with variable naming only for the purpose of clarity.&quot; - This is exactly right, and the reason programmers are strongly encouraged - when not forced - to follow naming conventions for the language. If you want to give an example to your students, show them two snippets of code: one with proper names and the same snippet but with meaningless single-character names. The reasoning will become obvious when they see it." CreationDate="2018-04-09T15:54:00.233" UserId="4858" />
  <row Id="11951" PostId="4597" Score="0" Text="@Strikegently That sounds like a nice little answer in the making.  You should flesh that out :)" CreationDate="2018-04-09T16:04:15.430" UserId="27" />
  <row Id="11958" PostId="4597" Score="4" Text="&quot;*There is good reason for this; deeply clean and clear code also has very few bugs.*&quot; -- Yes, but the bugs you _do_ end up with are much harder to root out, because they're based on mistaken assumptions, and those are incredibly difficult to spot. That doesn't mean it's bad to write clean code; I'm just salty that I spent four hours last night trying to figure out why a function was giving me the &quot;wrong&quot; result when I passed the parameters in the wrong order." CreationDate="2018-04-09T18:11:27.983" UserDisplayName="anon" />
  <row Id="11960" PostId="4597" Score="4" Text="@NicHartley I dunno. Mismatched params will exist in clean or dirty code, and I think it's easier to catch the the mistake in `(firstName, lastName, middleName)` than `(name, name2, result)`. I mean, the only reason you even know the second one is out of order is because I just told you." CreationDate="2018-04-09T18:17:21.440" UserId="1578" />
  <row Id="11986" PostId="4597" Score="2" Text="One good argument for considering the human audience: copare the number of times code is written to the number of times it's read." CreationDate="2018-04-10T10:20:57.120" UserId="992" />
  <row Id="11987" PostId="4597" Score="1" Text="@Angew I've made that argument to students, but I haven't found that it has much traction. The kids are still writing labs that will essentially be read only once, and they have a tough time imagining the costs of poorly written code in a large code base over time." CreationDate="2018-04-10T10:37:01.193" UserId="27" />
  <row Id="11996" PostId="4597" Score="1" Text="They're two things that make me struggling with naming : my english, including knowledge of the specific field (functional or technical) and  my overall design. Because naming one method is generally easy, however naming all classes correctly need that the design is good, and that is not easy. If you design approprietly before hand, naming because way easier." CreationDate="2018-04-10T14:58:22.737" UserId="1375" />
  <row Id="11956" PostId="4599" Score="3" Text="&quot;*The names of variables should define the information they contain*&quot; - depending on the programming language, it could also be the name **and type** in the variable declaration." CreationDate="2018-04-09T17:37:56.587" UserId="660" />
  <row Id="12026" PostId="4599" Score="0" Text="@Bergi, Given that we are talking about Java which is strongly typed, I strongly disagree that you should include the type of the data in the name. I've frequently seen identifiers like 'studentList' because the data structure happens to be a list, Even if a Collection is all that is required. When the code is refactored to make the variable another type of Collection, maybe a Set, the variable is never renamed. That said **Units**, if not guaranteed by the data type, should be part of the variable name e.g. 'timeInSeconds'" CreationDate="2018-04-11T15:50:57.623" UserId="4110" />
  <row Id="12027" PostId="4599" Score="0" Text="@Stormcloud No need to disagree with me, I never said you should include the type in the name :-) I meant that the combination of name and type should define the information the variable contains, so you can keep the type separate from the name. It's irrelevant whether the language is strongly typed or not, it depends on the variable declaration syntax or how easy you can infer the type in the given context. `List students = something;`, `var studentList = something;` and `var students = List(something);` would all be fine." CreationDate="2018-04-11T16:02:10.223" UserId="660" />
  <row Id="11982" PostId="4601" Score="0" Text="I've downvoted because having patience and being understanding are things which you should be doing anyways. They're relevant to all teaching questions, and so this answer isn't specific to this question." CreationDate="2018-04-10T05:24:00.773" UserId="58" />
  <row Id="11983" PostId="4601" Score="0" Text="@thesecretmaster, true it's not a difference of kind so much as degree. I'll try to clarify in my answer that it's going to take on the order of years to learn this, so a level of patience is called for *above and beyond what would normally be expected*." CreationDate="2018-04-10T05:44:11.743" UserId="3898" />
  <row Id="11992" PostId="4601" Score="0" Text="Thanks for editing, I've retracted my downvote. I think the advice you're giving is good, but it doesn't seem like a complete answer to me -- this alone, without the other answers, wouldn't really answer the question." CreationDate="2018-04-10T13:11:22.543" UserId="58" />
  <row Id="11994" PostId="4604" Score="1" Text="Hi Wes! Welcome to [cseducators.se]! This is a great first answer, and I hope to see you around the site more :)" CreationDate="2018-04-10T14:19:45.633" UserId="58" />
  <row Id="12004" PostId="4604" Score="0" Text="I _really_ like the third set. It's truly amazing how soon one can forget what they just did once they've had to refocus on something else. Sure beats waiting 6 months for their thinking to get lost and the names to become important." CreationDate="2018-04-11T00:18:22.777" UserId="104" />
  <row Id="12017" PostId="4605" Score="9" Text="Some of it is teaching order: Do `foreach` before generalised `for`. Foreach is easier, and will be used 80% of the time in there future programs, so teach it first. Same for container classes. This is related to should I start high or low. Well start as you mean to go on. Students will value and use what they learn first." CreationDate="2018-04-11T08:11:30.053" UserId="204" />
  <row Id="12034" PostId="4605" Score="0" Text="Have something with a good reason to use more advanced constructs. With respect to premature optimization it may actually be a reasonable idea to use a few variables instead of an array, so your current premise may be wrong. Not every neat data structure must be used and people have different programming styles. To teach them to use an array show them a task which cannot be (reasonably) solved by introducing more and more variables." CreationDate="2018-04-12T08:56:08.323" UserId="4631" />
  <row Id="12067" PostId="4605" Score="0" Text="People that progress from simple things at a slower pace, tend to practice the simple things more and better..." CreationDate="2018-04-14T21:23:57.950" UserId="2389" />
  <row Id="12120" PostId="4605" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/76480/discussion-on-question-by-java-jive-what-are-healthy-productive-ways-to-encoura)." CreationDate="2018-04-24T00:44:06.830" UserId="58" />
  <row Id="19638" PostId="4605" Score="0" Text="Two things. 1, you can't teach curiosity. 2, if the students aren't capable of grasping programs where the constructs you're trying to show them are actually useful, then perhaps you are teaching them to run before they can walk?" CreationDate="2022-04-29T06:48:36.200" UserId="9075" />
  <row Id="12002" PostId="4606" Score="0" Text="&quot;The reason for this is that ultimately I want to teach them to be OO programmers and when they get a new problem, I want them to think in a thoroughly OO way&quot; - isn't FRP the hot new paradigm nowadays?" CreationDate="2018-04-10T23:40:42.080" UserId="1275" />
  <row Id="12024" PostId="4606" Score="1" Text="**This!**  Why is the OP teaching bounded *for* before *foreach*?" CreationDate="2018-04-11T13:43:29.347" UserId="4896" />
  <row Id="12036" PostId="4606" Score="2" Text="What you said is true if you want to build software devs or web dev that knows just enough for what their aim is to, but that doesn't include embedded dev for instance. If you don't understand the low level approach, I don't feel like people should use more advanced features. Or if they do use those collection they have to code them in the first place to understand how they work." CreationDate="2018-04-12T10:06:46.503" UserId="4900" />
  <row Id="12068" PostId="4606" Score="1" Text="@YCN-: I personally love the low level stuff, but I think this advice sounds reasonable.  Getting to the point of understand how different collections work (like sorted maps vs. plain hashes vs. simple `std::vector`) requires some algorithm knowledge, and understanding efficiency is only truly possible with some computer architecture (caches) and assembly language (and how source compiles to asm).  Leaving these topics for later in the spiral makes sense: by the time you get to the implementation details and low level stuff, students will be ready to understand it better." CreationDate="2018-04-15T00:22:23.233" UserId="1654" />
  <row Id="12045" PostId="4609" Score="3" Text="I volunteer teaching 12-14 y/os and this a running theme: Yes, you can make a giant if/elif/elif/.../else block... but *I'm lazy,* so here is a much faster way to do it. By casting it in that way (and ensuring they are comfortable with using it), they tend to move over pretty quick." CreationDate="2018-04-12T22:50:53.420" UserId="807" />
  <row Id="12031" PostId="4610" Score="1" Text="Time pressure probably helps even more than peer pressure. ;)" CreationDate="2018-04-11T23:32:42.093" UserId="981" />
  <row Id="12007" PostId="4611" Score="0" Text="Hi Frax! Welcome to [cseducators.se]! This is an interesting answer that I certainly wouldn't have thought of myself. I hope to see you around the site :)" CreationDate="2018-04-11T01:07:41.257" UserId="58" />
  <row Id="12114" PostId="4612" Score="0" Text="As much as i enjoyed your answer I have to express my profound disagreement with your last paragraph. Proper naming is about maintainability which is the most important/expensive in software's lifetime. &quot;it works&quot; has no value if it can't be maintained effortlessly and cheaply. This is real life. And since a good part of good programming is good habits it pays to get into that habit." CreationDate="2018-04-22T20:36:51.553" UserId="3417" />
  <row Id="12115" PostId="4612" Score="0" Text="Another comment about your last paragraph: I'm not sure what you meant by &quot;machine code&quot;. If you really meant machine code (i.e. 1s &amp; 0s circa 1940s) then i'd add that assembly language emerged from this as the need for naming the 1s &amp; 0s instructions to make them easier to read and debug. It stared by being programmers' written abbreviations on paper for given sets of 10&amp;0s do and evolved into today's assembly language" CreationDate="2018-04-22T20:43:53.780" UserId="3417" />
  <row Id="12116" PostId="4612" Score="0" Text="@Elkady Other than using hex more often than binary, your interpretation of machine code is correct. Not all machine code has been converted to assembly, yet has been producing quality software without &quot;good naming&quot;. Yes, names help coders, and where common conventions exist, following them improves the ease of maintenance. As to the OP's question, re: importance of good naming to quality software - it is still a red herring. Good names don't make bad code good and bad names don't make good code bad." CreationDate="2018-04-22T21:45:05.950" UserId="104" />
  <row Id="12117" PostId="4612" Score="0" Text="you'll get no argument from me. I see it was a matter of interpreting what &quot;good code&quot; means. Neither is wrong, just different views / schools of thought that was/is debated infinitly for ages." CreationDate="2018-04-22T22:51:05.703" UserId="3417" />
  <row Id="12118" PostId="4612" Score="0" Text="Good software is a living thing. Good naming makes good software evolution easier, at lower cost." CreationDate="2018-04-23T14:44:28.470" UserId="2103" />
  <row Id="12016" PostId="4613" Score="0" Text="On why you may have been voted down (you seem to have been voted down, why I think this is): This question seems more about training than education. Computer science is about enduring principles, not fad of the month, and products. Though every fad will contain many enduring principles (for they are enduring)." CreationDate="2018-04-11T08:05:13.963" UserId="204" />
  <row Id="12032" PostId="4613" Score="0" Text="The intent is for course development, or really course improvement since I have taught the class a few times. Given I teach professional, just theory doesn’t meet their needs. That said, I can see the point of responses being ephemeral." CreationDate="2018-04-12T00:25:04.160" UserId="4886" />
  <row Id="12044" PostId="4613" Score="0" Text="This seems like a fine question to me.  I don't personally have an answer, but it certainly seems within scope.  I hope you get some great answers." CreationDate="2018-04-12T17:26:20.517" UserId="27" />
  <row Id="12811" PostId="4613" Score="0" Text="Are you asking for big data sets, or for the tools. I heard of some organisation that has collected some big data sets for educators. Can't remember who. I am in UK, I was at a CAS meeting in Guildford (that may be where I heard it, maybe)." CreationDate="2018-06-16T10:05:16.130" UserId="204" />
  <row Id="12824" PostId="4613" Score="0" Text="Revised to include big data sets for education." CreationDate="2018-06-16T16:57:42.600" UserId="4886" />
  <row Id="12069" PostId="4614" Score="0" Text="*I don't see a way to sort these names by using individual variables.*  Hard-coded sorting network where every compare-and-swap is specified separately (hopefully with the compare+swap wrapping in a function call).  A sorting network for 17 elements can be only 71 comparators according to https://en.wikipedia.org/wiki/Sorting_network, so 20 elements is at least plausible to write out in the source code, and I think there are sites online that can generate them.  Anyway, totally implausible for beginners to actually come up with, but in other contexts it's not totally unreasonable." CreationDate="2018-04-15T00:32:07.823" UserId="1654" />
  <row Id="12035" PostId="4616" Score="1" Text="Excellent first question. I thought you were going someplace really open-ended right up until the end. :) Also, welcome to [cseducators.se]. Why in the world haven't we seen more of you until now?" CreationDate="2018-04-12T09:55:14.583" UserId="27" />
  <row Id="12037" PostId="4616" Score="1" Text="The first clause if from keystage-3 (≈11year old to 14 year old). For keystage2 (&lt; 11year old) “at least on of which is textual” is missing. So I assume that this is about &gt;11 year olds." CreationDate="2018-04-12T11:10:06.417" UserId="204" />
  <row Id="12038" PostId="4616" Score="1" Text="Have a look at cs-unplugged. They have a lot of resources for teaching computer science without a computer, and suitable for specialist and non-specialist teachers." CreationDate="2018-04-12T11:12:04.920" UserId="204" />
  <row Id="12042" PostId="4616" Score="2" Text="Do you really want to focus _just_ on programming or on Computing more generally. There is much more to computing than programming, which is only a tool for a larger purpose." CreationDate="2018-04-12T16:28:50.347" UserId="1293" />
  <row Id="12046" PostId="4616" Score="0" Text="Thanks guys. CS Unplugged looks really interesting. Buffy, I was thinking more in terms of *programming* than *computing*. I do agree with your comment, but don't expect too many problems establishing which CS concepts should be taught in school. With programming, I'm struggling to define what is and isn't generally useful. I'm also concerned that the Banana Gorilla Jungle Problem will make it difficult to teach a useful subset of any current language, but that's a separate issue." CreationDate="2018-04-13T02:13:08.070" UserId="4898" />
  <row Id="12051" PostId="4617" Score="0" Text="I deleted my last comment as it came across differently to what I'd intended, sorry. I really appreciate this answer, and upvoted it, as it contains a lot of useful, relevant information. That said, the issue really is to do with programming specifically, rather than computational thinking, which is much more general. The issue we're having is that every child will spend five years learning to program (typically with Python or JS), and most will not become professional programmers, and it is not obvious what programming skills they need. We don't really know what an ideal outcome looks like." CreationDate="2018-04-13T02:52:08.137" UserId="4898" />
  <row Id="12052" PostId="4617" Score="0" Text="@CarlSmith Don't think of programming as the goal, think of is as the vehicle. Learning to program engages a different mental mode of analysis that is useful in _any_ endeavor. Read the entire [paper from Wing](https://drive.google.com/file/d/1hRnNjUTyBwQu3kadX3unljw-iCZKEuk0/view?usp=sharing), not just my excerpts, and it _might_ help with the &quot;teaching programming to non-programmers&quot; issue. Programming is replacing the now absent courses on rhetoric." CreationDate="2018-04-13T03:40:00.410" UserId="104" />
  <row Id="12047" PostId="4618" Score="0" Text="The question regards children aged between 10 and 16. I was actually corrected on that point though. The children are 11 when they start programming. I don't think this answer really addresses the question." CreationDate="2018-04-13T02:17:16.810" UserId="4898" />
  <row Id="12053" PostId="4618" Score="0" Text="I edited  my answer to stick a little bit more to the question." CreationDate="2018-04-13T08:25:50.373" UserId="4900" />
  <row Id="12054" PostId="4618" Score="0" Text="&quot;to study computer science from age 4&quot;, I don't really see the difference you do between computer science and programming, to me that's only to side of the very same coin." CreationDate="2018-04-13T08:27:11.090" UserId="4900" />
  <row Id="12039" PostId="4620" Score="0" Text="Welcome to [cseducators.se].  We're always glad to get more educators. I hope we hear more from you in the future!" CreationDate="2018-04-12T12:43:35.873" UserId="27" />
  <row Id="12043" PostId="4622" Score="0" Text="I think the purpose behind the emphasis given by the UK curriculum isn't programming as such, rather that learning to program creates mental patterns of analysis useful to life, as well as education." CreationDate="2018-04-12T17:23:03.680" UserId="104" />
  <row Id="12049" PostId="4622" Score="0" Text="The idea of focussing on *applications* is interesting, and I especially like the idea of integrating the stuff students are studying in other subjects. I'm not sure this answers the exact question asked, but I understand it's not a simple question, and that it's difficult to even know where to begin. Other answers wonder quite far from the specific issue, so I'll mark this as correct." CreationDate="2018-04-13T02:39:12.593" UserId="4898" />
  <row Id="12062" PostId="4624" Score="2" Text="Long ago, I enrolled in a &quot;Comparative Programming Langauges&quot; class that required me to write at least one program in each of; Pascal, Lisp, SNOBOL, Prolog, Forth, and OPS5.  Even if I never had used any of those languages in a paying job, I still would have ranked that class among the most important that I ever attended." CreationDate="2018-04-14T17:05:41.337" UserId="1269" />
  <row Id="12064" PostId="4624" Score="3" Text="In the University I graduated from, the bachelor CS studies (3 years) required people to submit code in about 8-10 languages, including Haskell and Prolog  (+ stuff like html and sql). For me it was one of the best things there, though pretty tough for some." CreationDate="2018-04-14T17:34:35.130" UserId="4884" />
  <row Id="12070" PostId="4624" Score="1" Text="Very much this. Back in school (1980s) the CS curriculum started using Pascal, and to acquaint ourselves with a completely different programming paradigm, we had to chose either Common Lisp or Prolog. I chose Common Lisp, and it was instrumental in drastically expanding my computational thought process (and was a lot of fun to boot). I never used Lisp in a professional capacity later other than for some Emacs customization. I also took a &quot;Comparative Programming Languages&quot; class, but it didn't require submitting code, so had much less of an impact." CreationDate="2018-04-15T02:05:37.020" UserId="1940" />
  <row Id="12075" PostId="4626" Score="1" Text="I suppose gathering pre-written questions from random internet sites is out?" CreationDate="2018-04-16T19:12:30.943" UserId="104" />
  <row Id="12079" PostId="4626" Score="0" Text="@Ben, are you giving your exams on paper?" CreationDate="2018-04-16T21:37:06.430" UserId="4338" />
  <row Id="12080" PostId="4626" Score="0" Text="@JavaJive Yes, in deference to the AP test." CreationDate="2018-04-16T22:06:34.530" UserId="27" />
  <row Id="12564" PostId="4626" Score="0" Text="@JavaJive, you have to assume that past exams are common knowledge, however you do them," CreationDate="2018-05-18T13:14:22.183" UserId="5219" />
  <row Id="12072" PostId="4629" Score="6" Text="Huge +1 for learning LaTeX, and I'll add Markdown to the list." CreationDate="2018-04-16T18:07:40.437" UserId="30" />
  <row Id="12073" PostId="4629" Score="0" Text="@RyanNutt Thanks. It’s been a game-changer for me. I couldn’t imagine writing exams without it now. Markdown too is fantastic." CreationDate="2018-04-16T18:13:12.640" UserId="76" />
  <row Id="12083" PostId="4629" Score="6" Text="+1 for &quot;Don't trick students&quot;, &quot;Exams are not surprise parties&quot; and LaTex, would give multiple upvotes if I could ;)" CreationDate="2018-04-17T14:32:00.753" UserId="1086" />
  <row Id="12565" PostId="4629" Score="0" Text="@Polygnome, I second that!" CreationDate="2018-05-18T13:16:12.490" UserId="5219" />
  <row Id="12076" PostId="4630" Score="0" Text="You can save future time by thinking language agnostic in questions too. Most concepts carry over from one language to several others." CreationDate="2018-04-16T19:14:18.097" UserId="104" />
  <row Id="12082" PostId="4630" Score="0" Text="@GypsySpellweaver True, although I'm just teaching Java right now. When I've taught other languages I have gone back to other banks and converted between languages. Makes it way easier." CreationDate="2018-04-17T13:11:40.117" UserId="30" />
  <row Id="12078" PostId="4631" Score="0" Text="Also, welcome to the [cseducators.se] community.  We're always glad to have more CS teachers in these parts.  Take a look around and [say hi in the chat](https://chat.stackexchange.com/rooms/59174/the-classroom). :)" CreationDate="2018-04-16T20:15:42.610" UserId="27" />
  <row Id="12102" PostId="4631" Score="0" Text="word/letter/letter combo frequency analysis?" CreationDate="2018-04-19T14:38:39.330" UserId="662" />
  <row Id="12569" PostId="4632" Score="0" Text="Re: 6 questions: A photocopier shop near here has sets of exams reaching back some 10 years (yes, some are photocopies of copies handed down by generations; i.e., 20 terms worth for some courses)... A better argument is if they are able to review 6 or more exams, then they know enough to pass." CreationDate="2018-05-18T13:23:34.040" UserId="5219" />
  <row Id="12084" PostId="4634" Score="0" Text="With respect to point 3, Dijkstra's algorithm has an additional use for a dictionary: if you make them implement their own priority queues, a dictionary is very useful for updating the priority of a key." CreationDate="2018-04-17T16:07:30.710" UserId="1219" />
  <row Id="12087" PostId="4636" Score="0" Text="I had a very similar issue working with Android projects, and really didn't find any satisfactory solutions. I'm eager to see the answers people come up with." CreationDate="2018-04-18T03:40:14.900" UserId="27" />
  <row Id="15627" PostId="4637" Score="0" Text="Being competent in C++, and starting with C++, are two very different stories." CreationDate="2019-09-30T07:44:19.430" UserId="2103" />
  <row Id="15628" PostId="4637" Score="0" Text="@MichelBillaud, of course they are different, but what is your point? I'm explicitly referring to the basic C++ here." CreationDate="2019-09-30T13:23:46.230" UserId="4884" />
  <row Id="15631" PostId="4637" Score="0" Text="what is 'Basic C++&quot; ?  C with classes?" CreationDate="2019-09-30T16:29:28.467" UserId="2103" />
  <row Id="15634" PostId="4637" Score="0" Text="Not necessarily, though that depends on exact interest. If one wants to write GUI applications, some classes and OOP are unavoidable. However, one can start with just solving algorithmic problems, and for that classes (meaning: defining classes) aren't necessary or very useful. However, some STL classes are very handy and would be a pity not to use them." CreationDate="2019-09-30T22:34:39.163" UserId="4884" />
  <row Id="15635" PostId="4637" Score="0" Text="As I wrote in the answer, I don't think C++ is a good language for learning Object and Object Oriented programming, due to the implementation being much too sensitive to low-level details. It is good as being close-to-metal (and, more importantly, OS API and ABI) as C, yet with some handy abstractions and stronger typing that C lacks." CreationDate="2019-09-30T22:34:41.343" UserId="4884" />
  <row Id="12095" PostId="4643" Score="0" Text="We've never had a question like this before. I'm pretty sure that this is within our scope, though. (We'll see if others agree.) In any case, welcome to [cseducators.se]!" CreationDate="2018-04-19T11:40:06.177" UserId="27" />
  <row Id="12096" PostId="4643" Score="0" Text="@BenI. In my opinion, this question would be much better suited to [softwarerecs.se]. There's nothing about this question that's specific to CS or education." CreationDate="2018-04-19T11:47:00.883" UserId="58" />
  <row Id="12097" PostId="4643" Score="3" Text="@thesecretmaster It would certainly be on-topic there, but I would think this would also be okay here on the principle that [Don't migrate for the sake of migration. We only migrate questions because they are off-topic on the original site. It is perfectly possible for a question to be on-topic on multiple sites, but that is not a reason to migrate it elsewhere, unless the OP requests migration. As a general rule, if someone asks a question here, and it's on-topic here, it should stay here.](https://meta.stackexchange.com/questions/10249/what-is-migration-and-how-does-it-work/10250#10250)" CreationDate="2018-04-19T13:00:29.973" UserId="27" />
  <row Id="12098" PostId="4643" Score="0" Text="In any case, if there's a discussion to be had, it should probably be moved to meta." CreationDate="2018-04-19T13:01:00.703" UserId="27" />
  <row Id="12099" PostId="4643" Score="0" Text="@thesecretmaster I also worry about the relevance here. Perhaps Software Recommendations would be a better fit." CreationDate="2018-04-19T13:11:54.463" UserId="1293" />
  <row Id="12100" PostId="4643" Score="1" Text="hi All.. This is question is not entirely on software recommendation. It is more on tools for creating online lectures that could benefit all educators including computer science educators." CreationDate="2018-04-19T13:18:15.023" UserId="4929" />
  <row Id="12101" PostId="4643" Score="0" Text="This is what you get when you cut everything up. Was teaching about categorisation, the other day. How tagging is better that hierarchical categorisation systems (though hierarchies of tags, can be good). Don't cut up into categories, just tag it. These sites are half and half. They have tags, but are cut up into categories." CreationDate="2018-04-19T13:32:09.333" UserId="204" />
  <row Id="12103" PostId="4643" Score="0" Text="@BenI. I agree. It is a software recommendation in the context of education. It fits in both places appropriately." CreationDate="2018-04-19T14:50:25.170" UserId="76" />
  <row Id="12104" PostId="4643" Score="1" Text="As one point, I don't like the idea of having to go somewhere else to know what you are talking about (the YouTube link). Secondly, if I knew what the video was, I still need to know what _you_ want to achieve. I cannot give an answer that's good for you if I don't know the end result desired. (That also helps others decided if they think an answer is _good_ or not.) Please update the question to explain what your goal is, explicitly rather than _Something similar to ..._" CreationDate="2018-04-19T17:06:47.383" UserId="104" />
  <row Id="12105" PostId="4643" Score="2" Text="[This might help, it's ideas on how to do Khan Academy style videos](https://www.onlineuniversities.com/blog/2012/04/de-mystifying-khan-academy-screen-capture-for-educators/)" CreationDate="2018-04-19T18:07:55.247" UserId="1784" />
  <row Id="12108" PostId="4643" Score="1" Text="I added screencasting to the title because that's what the video appeared to be doing. If that focus is too narrow, @Gaurav, please do let me know and/or remove it yourself." CreationDate="2018-04-19T19:11:32.570" UserId="76" />
  <row Id="12110" PostId="4650" Score="1" Text="Why is it hard to show that factoring is in NP? Long multiplication is clearly in P, and that's the most expensive part if the certificate consists of both factors." CreationDate="2018-04-19T21:29:52.190" UserId="1219" />
  <row Id="12112" PostId="4650" Score="0" Text="It just requires an argument whereas the other parts are almost obvious. It also is complicated by the dual definitions of NP." CreationDate="2018-04-19T21:35:53.090" UserId="1293" />
  <row Id="12124" PostId="4655" Score="0" Text="Which test? Is it 5051?" CreationDate="2018-04-26T13:46:59.327" UserId="174" />
  <row Id="12125" PostId="4655" Score="0" Text="@ncynik No, the 5651, linked in my question." CreationDate="2018-04-26T13:48:27.637" UserId="830" />
  <row Id="12127" PostId="4658" Score="2" Text="I'm not sure that worth an answer on his own but I would try to insist on your last point : writing proper specific component (be Data Manipulation or Graphic components) that behave perfectly is in fact hard/very time consuming, and that's why it is always recommanded to search before rolling it's own." CreationDate="2018-04-26T15:00:02.420" UserId="1375" />
  <row Id="12131" PostId="4658" Score="8" Text="Experience working with new CS grads suggests exactly the opposite of (3). So much so that this is one of the main disadvantages of ever teaching these things." CreationDate="2018-04-26T18:08:35.207" UserId="4437" />
  <row Id="12140" PostId="4658" Score="0" Text="@TKK, are you saying that new grads who know how to implement their own data structures are prone NOT to use built-ins?  If so, can you conjecture on why that is true?  Are they over confident?  Are they trying to be heroes?" CreationDate="2018-04-27T11:38:21.987" UserId="4338" />
  <row Id="12145" PostId="4658" Score="5" Text="@JavaJive I think the simple explanation is that if a student has only been taught to write code, of course their inclination will be to solve every problem by writing code. From my informal surveys of CS grads, the skill of identifying suitable third party solutions (features, quality, licensing, etc.) is not something that is taught at all. It comes down to whether you're primarily teaching an academic subject or a trade skill." CreationDate="2018-04-27T16:39:22.947" UserId="4437" />
  <row Id="12146" PostId="4658" Score="2" Text="This reminds me of all the questions on SO where a student is implementing a C++ vector class. Someone will *always* comment &quot;Why don't you just use `std::vector`?&quot;. When I point out that this is just an exercise in learning how data structures work, they'll say that it's a stupid exercise." CreationDate="2018-04-27T22:02:35.087" UserId="1471" />
  <row Id="12152" PostId="4658" Score="1" Text="@Barmar - They have a point." CreationDate="2018-04-28T13:49:47.813" UserId="3948" />
  <row Id="12160" PostId="4658" Score="0" Text="@JiveDadson the only point they have is that it's annoying to do that in C++, but that's not a valid point on the general principle. :P" CreationDate="2018-04-28T20:50:16.070" UserId="963" />
  <row Id="12161" PostId="4658" Score="4" Text="BTW, the answer is quite simple actually. If you want to *teach* computer science, students **must** learn implementations of data structures and also they have to know fundamental algorithms. If they don't, they won't be able to call them &quot;computer scientists&quot;... rather, they might call themselves &quot;amateur coders&quot;." CreationDate="2018-04-28T20:52:03.967" UserId="963" />
  <row Id="12171" PostId="4658" Score="1" Text="@AndreaLazzarotto that's... a bold claim. An overwhelmingly large portion of people who receive CS education do not need to know the answer to this question for their career, except to pass interviews (which  is ironic). This won't be as true if someone wants to go into academia." CreationDate="2018-04-29T17:54:24.180" UserId="177" />
  <row Id="12172" PostId="4658" Score="0" Text="@enderland no, it's not bold. There is a minimum threshold of knowledge if you want to be called &quot;computer scientist&quot;, and **fundamental** data structures are included. Most people who work as programmers are *not* computer scientist and it's fine. Even among developers, some are not (for instance, they can be engineers or they can have other backgrounds). You are confusing &quot;working in IT&quot; with &quot;being a computer scientist&quot;. You might work in healthcare, but you are not a doctor if you do not know how a kidney works." CreationDate="2018-04-29T18:45:55.410" UserId="963" />
  <row Id="12173" PostId="4658" Score="0" Text="@AndreaLazzarotto: Nobody is saying that a computer scientist shouldn't know about &quot;fundamental data structures&quot;. The debate is over the value of rolling your own design and implementation. Would you require someone to write their own &quot;fundamental I/O routines&quot; to be called a computer scientist? Implement their own math library? No; you expect people to use the standard libraries. Decades ago, being able to write your own linked list from scratch was a critical skill because they often weren't in the standard library. Today, the value of that exercise is less clear." CreationDate="2018-04-30T03:43:24.433" UserDisplayName="user2681" />
  <row Id="12175" PostId="4658" Score="0" Text="&quot;fundamental IO routines&quot;? That would be a useful practice, honestly, but luckily we have engineers for those matters. BTW whatever you &quot;expect&quot; from people, implementing the standard data structures is an essential step in understanding how they work in practice, how space is used in memory and so on. Computer scientists are going to need more advanced, custom data structures in their jobs... And how are they going to implement them if they don't even know the basics?" CreationDate="2018-04-30T10:48:40.283" UserId="963" />
  <row Id="12176" PostId="4658" Score="0" Text="@Hurkyl as a nice anecdote, while working on an iOS app in Swift I just realized the iOS SDK does not provide stacks and queues. I am going to implement them myself, obviously, but this is only possible because I *did* study them while attending university." CreationDate="2018-04-30T12:52:26.193" UserId="963" />
  <row Id="12195" PostId="4658" Score="0" Text="@AndreaLazzarotto There are computer scientists, and there are real programmers. You can take a kid off the street and turn him into a real programmer in six months. Or you can take a CS grad and spend at least a year unschooling him before you can even start to make him a real programmer. I don't know of any other professional field where the education system has failed more disastrously." CreationDate="2018-04-30T23:05:55.097" UserId="4437" />
  <row Id="12196" PostId="4658" Score="0" Text="ROTFL yeah sure." CreationDate="2018-04-30T23:37:37.173" UserId="963" />
  <row Id="15308" PostId="4658" Score="0" Text="Isn't reimplementing stacks and queues a total waste of time? Can't you find a library for this?" CreationDate="2019-07-17T21:30:14.027" UserId="2103" />
  <row Id="12121" PostId="4659" Score="6" Text="Nice. Emphasize that you aren't teaching them a particular language or library. You are teaching them _how to think_." CreationDate="2018-04-26T13:17:49.153" UserId="1293" />
  <row Id="12123" PostId="4659" Score="0" Text="A subpiece of the last point is that while the structures are the same, the names and interface of the same structure may be different between languages.  It's a lot simpler to understand that Java HashMaps and C# Dictionaries work basically the same way and accomplish basically the same thing if you understand how a Map works." CreationDate="2018-04-26T13:42:47.283" UserId="753" />
  <row Id="12129" PostId="4659" Score="1" Text="Another thing you might want to add is that the students might one day have to work in a programming language where the data structure they need is not built-in and they will be forced to implement it on their own." CreationDate="2018-04-26T15:08:19.350" UserId="1577" />
  <row Id="12132" PostId="4659" Score="3" Text="`&quot;The implementations that the students provide are never at the quality of the built-in language implementation&quot;` Don't be so sure of that. The standard library versions frequently have to be super-generic in order to work with all the functions defined over them, and to work with any datatype.  It's not that unusual for an implementation tuned to its specific use-case to be able to outperform them." CreationDate="2018-04-26T23:06:23.630" UserId="827" />
  <row Id="12159" PostId="4659" Score="0" Text="@Ray Yes, I totally agree with that!  If you remove the requirement for generic, you often come up with something easier to implement and more efficient. But generally there is a lot of people and time spent on the generics in languages, so for that reason it is hard to beat." CreationDate="2018-04-28T19:09:13.127" UserId="174" />
  <row Id="12122" PostId="4660" Score="2" Text="That is a great point about the complexity of the data structure API.  And yes, C# is the same. ArrayList (https://msdn.microsoft.com/en-us/library/system.collections.arraylist(v=vs.110).aspx) having 40+ functions." CreationDate="2018-04-26T13:20:49.087" UserId="174" />
  <row Id="12128" PostId="4660" Score="4" Text="using libraries is not only about saving time, it is also to reduce the source of bugs in the application and improving maintenability, unless you're writing your own library, you won't put the same effort in rolling your own component while developping a business application than those who have written proper livrary. In the big scheme you could eventually resume all to &quot;it save time&quot; but I think it's worth to develop it a little." CreationDate="2018-04-26T15:01:55.997" UserId="1375" />
  <row Id="12130" PostId="4660" Score="1" Text="I don't think &quot;never write own containers again&quot; is necessarily something to take away. Rather, they should learn how to *properly* implement those structures. That way, if they want to implement a structure for a language that doesn't have such a library, they can." CreationDate="2018-04-26T16:41:08.257" UserId="4570" />
  <row Id="12135" PostId="4660" Score="1" Text="@Walfrat True, but it's a bit beside the point. After all, the question is about reasons to _not_ use library code. Added some mention about libraries being tested and patched though," CreationDate="2018-04-27T10:59:46.003" UserId="4884" />
  <row Id="12136" PostId="4660" Score="0" Text="@mbomb007 Added &quot;perhaps&quot;, and something about learning general patterns of writing containers. But the point is, the experience is important even though there is a fair chance of actually never writing a container again. I mean, I don't think &quot;you should learn it because you may need to write that very structure&quot; is a valid point." CreationDate="2018-04-27T11:04:05.350" UserId="4884" />
  <row Id="12174" PostId="4660" Score="2" Text="+1 for all points, but especially &quot;appreciating complexity&quot;. I have seen some horrible use of built-in/library code where – because it's &quot;just a simple call&quot; – the user clearly has no idea of what complexity lies beneath. While it's not impossible to gain that appreciation _without_ having had a stab at writing your own implementation, doing so (I think) helps enormously." CreationDate="2018-04-30T09:39:22.343" UserId="1372" />
  <row Id="12126" PostId="4662" Score="0" Text="Thanks! I'm not actually taking the test (I'm a college CS professor), but I am working with some high school teachers who would like to take the test." CreationDate="2018-04-26T14:19:41.947" UserId="830" />
  <row Id="12326" PostId="4662" Score="2" Text="Since it's not an answer, could this stuff be integrated into the question?" CreationDate="2018-05-07T14:40:58.050" UserId="27" />
  <row Id="12133" PostId="4664" Score="0" Text="One option is to extract an interface (formal or informal) from a library class and have the students implement (and use) their implementation. Then switching to the standard class will be fairly painless. It interface need not even be complete - just enough to be useful." CreationDate="2018-04-26T23:54:41.573" UserId="1293" />
  <row Id="12134" PostId="4664" Score="0" Text="That also works perfectly well, if not better. Perhaps making it an requirement to switch between the two and retain functionality (if possible) would make for a good inheritance exercise while also teaching design and implementation. Good addition!" CreationDate="2018-04-26T23:58:03.137" UserId="4951" />
  <row Id="12138" PostId="4664" Score="0" Text="I love this idea.  Good one." CreationDate="2018-04-27T11:34:29.807" UserId="4338" />
  <row Id="12147" PostId="4664" Score="0" Text="&quot;In my 400-level Operating Systems course, our first assignment was fibonacci in C&quot; - I'm not sure I'm following the example. It seems that you describe how mismatched your courses were from real-life... but C is for beter or worse lingua franca of system programming - with dose of assembler where required and maybe with C++ thrown in here and there. Maybe in 20 years we will move to Rust or something but as far as OS goes C/C++ has no practical alternative. Assuming you had no exposure to C/C++ Fibbonaci doesn't seem that bad of Hello World..." CreationDate="2018-04-28T08:51:48.467" UserId="673" />
  <row Id="12148" PostId="4664" Score="0" Text="Let me explain: a 400 level course is a senior level course, as in we don’t need “Hello World” anymore. My main point being that OP’s pupils will likely receive subpar education from their future educators, and that the better of a job he does at teaching them, the less likely they’ll absorb the poor habits of unmotivated professors. I feel though that you may have missed this but I am speaking from my own experiences, where I’ve felt underprepared due to my own professors and OP has a chance to break that cycle for his students. Is that a bit clearer?" CreationDate="2018-04-28T11:35:24.820" UserId="4951" />
  <row Id="12149" PostId="4664" Score="0" Text="I can amend my answer for clarity but I felt that a senior level course teaching a Hello World type application is pretty clearly a waste of time. I felt like it was safe to make such an assumption given everyone’s experience with CS here as well." CreationDate="2018-04-28T11:39:33.017" UserId="4951" />
  <row Id="12150" PostId="4668" Score="0" Text="What is the answer? It depends strongly on the potential for cache misses." CreationDate="2018-04-28T13:27:03.923" UserId="3948" />
  <row Id="12154" PostId="4668" Score="1" Text="I think the question is _when_ to teach common data structures implementation.  I doubt you can explain to novices why extensible arrays (ArrayList, vector,...) have an amortized O(1) cost for add() with the capacity-doubling strategy for reallocation." CreationDate="2018-04-28T15:35:40.290" UserId="2103" />
  <row Id="12162" PostId="4668" Score="0" Text="@JiveDadson You shouldn't use array lists for inserts or additions to the front, only the end.  You shouldn't use linked lists when you want to index to the middle often like list.get(500), use an array list for that.  I once fixed a program that was taking 8+ hours to insert-sort into an arrayList by simply changing the list type to a linked list, then it took seconds (I actually re-wrote it correctly later, but the initial speed difference from just changing the collection type was staggering)" CreationDate="2018-04-29T00:44:32.867" UserId="1399" />
  <row Id="12163" PostId="4668" Score="0" Text="@MichelBillaud the above comment to jive becomes amazingly clear if you have implemented a linked list and an array list, they are trivial for even a beginner to implement and doing so is extremely educational.  I admit that waiting to implement a sorted tree or hash map might be more useful if you've had a year or so of practice)" CreationDate="2018-04-29T00:49:12.157" UserId="1399" />
  <row Id="12170" PostId="4668" Score="0" Text="Educational and valuable, but definitely not trivial." CreationDate="2018-04-29T16:15:21.307" UserId="2103" />
  <row Id="12182" PostId="4668" Score="0" Text="@MichelBillaud I can hardly come up with something easier to implement if the educator controls the feature set! An ArrayList is just a wrapped array--expose get/size(trivial) and add.  Add is only non-trivial in that you need to re-allocate the array when it grows, using a fixed size makes it trivial as well.  A LinkedList is the most simple node-based structure. In both cases picking a data type (string or int) removes all generic considerations.  Honestly, can you give me any simpler non-demo classes to teach?  Even common demo classes like Employee/Employer/Store are more complicated." CreationDate="2018-04-30T16:08:40.013" UserId="1399" />
  <row Id="12216" PostId="4668" Score="0" Text="if it has a fixed size, it is not an ArrayList, but an array. I agree wrapping an array into an array is rather easy, but where's the beef ? My point is, implementing such structures require some programming skills, that have to be developed before going into it. And they'd benefit from writing interesting exemples that use ready made structures, before they are able to reimplement them." CreationDate="2018-05-01T21:14:08.993" UserId="2103" />
  <row Id="12218" PostId="4668" Score="0" Text="The 1 to N  association between Store and Employee is easy to implement if you have Lists/Sets/Extensible arrays... in your toolbox. add, find, remove..." CreationDate="2018-05-01T21:23:27.640" UserId="2103" />
  <row Id="12219" PostId="4668" Score="0" Text="@MichelBillaud our only disagreements is that I think it's easier (or at worse as easy) to implement an array list (with a fixed size, say) and then use that to implement your store/employee example.  One of the greatest features of this order is that you discover new requirements in your own code as you proceed (The need for an extendable Array list, for example) and that you learn about building a usable class interface.  I guess my only point is that there is a huge benefit to real, reusable classes to build on as soon as possible, and these two are so easy that it seems to be a no-brainer." CreationDate="2018-05-01T21:44:56.990" UserId="1399" />
  <row Id="12157" PostId="4669" Score="1" Text="Actually, it doesn't seem like profiling. It seems like using their own performance to try to get a handle on future performance. And your final caveat is important. Ganas. I find the movie _Stand And Deliver_ to be inspiring in situations like this. Go watch it again. Aspire to be as good as Jaime Escalante as a teacher." CreationDate="2018-04-28T17:33:05.697" UserId="1293" />
  <row Id="12158" PostId="4669" Score="0" Text="I had to look up ganas.  Thank you for teaching me a new word.  And I've never seen the movie.  It is now on my list." CreationDate="2018-04-28T18:47:39.960" UserId="4338" />
  <row Id="12153" PostId="4670" Score="2" Text="No references,  so this is a comment not an answer. A lot of Tremont in CS is what it is for historical reasons, and not related to the way things really work today. I'd say have the discussion. My seven year old is comfortable with &quot;we cali it X because that's how it used to work,  but it works differently now.&quot;. If students in an operating systems course haven't already figured this much out,  they don't belong in the OS course IMHO." CreationDate="2018-04-28T14:14:12.137" UserId="1537" />
  <row Id="12155" PostId="4670" Score="0" Text="Before the 1990's each process in Unix had only one thread, so they were the same thing. No one had bothered to add threads to Unix, because in Unix: Processes are cheep; `select` works, so event driven is easy; we have a windowing system (that runs in a different process), so no need to have each application manage its own windowing operations in a separate thread." CreationDate="2018-04-28T17:13:08.673" UserId="204" />
  <row Id="12156" PostId="4670" Score="1" Text="Yes tell them, but work it in to a discussion, on the difference between threads and processes." CreationDate="2018-04-28T17:15:15.283" UserId="204" />
  <row Id="12165" PostId="4670" Score="0" Text="Thanks to both of you! Its a good idea to work it in to a discussion on difference between the two." CreationDate="2018-04-29T06:04:45.727" UserId="2537" />
  <row Id="12978" PostId="4670" Score="1" Text="The &quot;process&quot; in &quot;process scheduling&quot; is an abstraction. What is called a &quot;thread&quot; in Linux is a process and what is called a &quot;process&quot; in Linux is a process. Just as in Java there are two kinds of variables--&quot;variables&quot; &amp; &quot;objects&quot;." CreationDate="2018-06-21T21:45:50.107" UserId="2485" />
  <row Id="12457" PostId="4674" Score="0" Text="You may be able to formally define and show correctness of that set of methods, but you can't prove they are minimal.  In fact, it turns out that `push` and `tryPop` (and optionally, `blockingPop`) are a much more useful public API for a stack or queue." CreationDate="2018-05-13T03:25:12.477" UserId="5163" />
  <row Id="12461" PostId="4674" Score="0" Text="@BenVoigt Right, I removed the &quot;minimal&quot; part. Regarding &quot;useful&quot;: Of course, one could say e.g. that `top` can be emulated with `tryPop` and `push` (or `isEmpty` is just `top==null` or so). (And whether the operation should be blocking is another dimension of the design space). The main point was that 1. there could be a set of methods that resembles the operations that one can apply to a *real* stack (e.g. a deck of cards), and 2. the set of methods should be small, formal, and sufficient in order to navigate through the *state space* of the object that they operate on." CreationDate="2018-05-13T13:44:34.663" UserId="2393" />
  <row Id="12462" PostId="4674" Score="0" Text="Well the problem with separating `isEmpty`, `top`, and `pop` operations is the TOCTOU window.  Even before students start using parallel algorithms, it's useful to start thinking in operations that won't break in an interruptible context." CreationDate="2018-05-13T16:14:19.877" UserId="5163" />
  <row Id="12530" PostId="4674" Score="0" Text="&quot;Importance of clean interfaces&quot; is completely lost on people trained to &quot;write assignment, get grade, next&quot;." CreationDate="2018-05-17T20:33:59.133" UserId="5219" />
  <row Id="12540" PostId="4674" Score="0" Text="@vonbrand Agree. I'm not sure how to convey this importance to CS learners. I think that the idea of Classes being DataTypes being part of an *Algebra* might help, as well as thinking about what is the *minimal* set of methods that is necessary to operate properly. (This could be aligned to the language. Roughly: In Java, I tend to *always* write *only* `interfaces` to flesh out the structure (even if there may be an `abstract` class that implements some convenience methods). But that's a broad topic, and likely discussed in other questions in more detail." CreationDate="2018-05-17T23:40:53.877" UserId="2393" />
  <row Id="12177" PostId="4677" Score="3" Text="Code on SO is not necessarily &quot;sloppy&quot;. Often the type, and other information is &quot;noise&quot; and the OP has created an [MCV example](https://stackoverflow.com/help/mcve)." CreationDate="2018-04-30T13:29:07.943" UserId="104" />
  <row Id="12179" PostId="4677" Score="0" Text="Code on SO is not _necessarily_ sloppy, but it is _sometimes_ sloppy, IMO, and not just when it has been simplified for posting or answering.  The problem is that SO is perceived by beginners as the be all/end all for programming, and they will copy code from there with absolutely no question.  They have not developed the sophistication of a filter based on education and experience." CreationDate="2018-04-30T14:11:58.837" UserId="4338" />
  <row Id="12181" PostId="4677" Score="6" Text="Maybe they need to be introduced to the [Code Review](https://codereview.stackexchange.com/) stack as well. That ought to give them a view to the differences between clear/muddy code. (Code golf serving as examples of _muddy_.)" CreationDate="2018-04-30T14:16:14.983" UserId="104" />
  <row Id="12184" PostId="4677" Score="3" Text="Write up some really ugly code using var &amp; object, maybe taking your lead from @Ben I.'s example. As a pop quiz, have them write up documentation for what it actually does, describing the role, lifetime, etc of every object and variable. And this is a time-limited quiz, of course. Next week, give them the same code quiz but with meaningful names and identified types." CreationDate="2018-04-30T17:25:01.877" UserDisplayName="user4104" />
  <row Id="12189" PostId="4677" Score="0" Text="Does `Object x` really do type inference in C#?!" CreationDate="2018-04-30T21:43:45.393" UserId="660" />
  <row Id="12192" PostId="4677" Score="0" Text="I wrote some code to verify this but can't figure out how to put it in a comment.  Yes, if I create an Object and assign it an integer, when I call the number's GetType, it returns System.Int32.  If I create an Object and assign it a string and call GetType, it returns System.String.  Same with a programmer-defined class." CreationDate="2018-04-30T22:07:13.757" UserId="4338" />
  <row Id="12193" PostId="4677" Score="2" Text="@JavaJive, IIUC `GetType` gets the type of actual, runtime _value_, so it obviously has to work. That is different from type inference, which is about type of _variable_." CreationDate="2018-04-30T22:21:27.750" UserId="4884" />
  <row Id="12194" PostId="4677" Score="0" Text="Btw, is VB unavoidable? Perhaps that's just prejudice, but my experience with it (with Xojo, but basic syntax is the same) was rather a struggle. The syntax is overloaded with clutter, and on the my list of least readable and intuitive languages it lands very high. I think it also forces people to declare types (with long names) whether it makes sense or not, which may actually work against you (typing is mostly frustrating and not useful). Maybe I'll elaborate in an answer." CreationDate="2018-04-30T23:00:47.533" UserId="4884" />
  <row Id="12199" PostId="4677" Score="0" Text="@Frax, VB is unavoidable because it is the required language for progarmming I in my state." CreationDate="2018-05-01T11:57:31.993" UserId="4338" />
  <row Id="12205" PostId="4677" Score="1" Text="If you declare an `Int32` as `Object`, you've just boxed a value type, which is terrible sloppy coding with real performance implications. If you declare an `Int32` as `var`, all you've done is shift the reader's focus on the parts of the code that actually matter, as opposed to making your C# read like Java. FWIW you shouldn't even need to mention `var` until you're ready to get into anonymous types and LINQ. Also, hover the mouse over `var`, the IDE tells you what the compiler type is. `var` has NOTHING to do with `Object` whatsoever. And it's NOT dangerous, even less &quot;sloppy&quot;." CreationDate="2018-05-01T19:09:05.277" UserId="4992" />
  <row Id="12224" PostId="4677" Score="0" Text="Object does not infer types. You can try assing an int to an object variable and then assing an string to the same variable, and it has no problem with it. On the other hand, if you declare with var and assign an int, it is an int, you won't be able to assign a string to it. Using var everywhere is not that bad, really. Object is very bad, because you lose all the static checks, the intellisense, and performance is worse, in particular with value types. So, do not treat Object and var as similar.  Also, x and y are not good variable names, I get it is an example, give good example to students." CreationDate="2018-05-02T00:33:29.127" UserId="1337" />
  <row Id="12228" PostId="4677" Score="0" Text="You confirmed that use of var is up for contention, including a link to the discussion, then you immediately say that they **must** use the type &quot;because using `var` is 'sloppy'&quot; (exlcuding previous comment discussion concluding using `object` is actually **wrong** not &quot;sloppy&quot;).. So you don't actually *believe* that there is a choice in the industry and you're trying to **force your belief** on your students rather than provide all the information.  This is not a good approach." CreationDate="2018-05-02T09:13:50.480" UserId="2455" />
  <row Id="12233" PostId="4677" Score="0" Text="Step 1: make the students understand the downsides of down-casting. Step 2: Show the students that using Object forces the use of of down-casting. Additionally: explain var vs object and the run-time performance impact of boxing and type checking" CreationDate="2018-05-02T10:45:09.757" UserId="5004" />
  <row Id="12239" PostId="4677" Score="0" Text="I don't know enough about C# or Visual Studio : still, couldn't you use IDE features for autocompletion or refactoring that work much better (or at all) when every variable is properly defined? Or display warnings when typing `Object x = new Horse(&quot;Silver&quot;);`?" CreationDate="2018-05-02T12:50:47.033" UserId="2021" />
  <row Id="12254" PostId="4677" Score="0" Text="I bet you could come up with a good assignment where you give them some bad code to start with (compiles but has run time errors) and tell them to implement x feature starting from that code base (and oh by the way, fix any errors they find)... then let them figure out why it's bad all on their own, when they have a headache trying to debug it." CreationDate="2018-05-02T14:45:33.827" UserId="1407" />
  <row Id="12267" PostId="4677" Score="0" Text="@EricDuminil, as far as I know, the IDE is not fine-grained enough to allow you to define what types of variable declarations are acceptable.  But I will look into it.  That's a great idea." CreationDate="2018-05-02T21:46:06.373" UserId="4338" />
  <row Id="12268" PostId="4677" Score="1" Text="@freedomn-m, As an educator, I must have certain expectations in my classroom.  However, in no way do I want to &quot;pull the wool&quot; over my students' eyes.  They know about the controversy surrounding var because I told them and asked them to read about it.  They can meet my expectations and still form opinions.  If they wish to abandon my teaching later, then that is their prerogative." CreationDate="2018-05-02T21:54:19.737" UserId="4338" />
  <row Id="12202" PostId="4678" Score="0" Text="Variables can be used either to represent values or containers.  One could use a value of type `Horse` which identifies a `Horse` just about anyplace one could value of type `Animal` that identifies a `Horse`, but a *container* of type `Horse` which will always a `Horse` any time it's not null is very different from a container of type `Animal` which *initially* identifies a `Horse`, but might later identify a `Dog`." CreationDate="2018-05-01T16:53:43.643" UserId="2073" />
  <row Id="12203" PostId="4678" Score="0" Text="@supercat, sorry, not sure how you are using the term _container_ here. Are you contrasting reference (i.e. heap) values from others?" CreationDate="2018-05-01T17:26:19.403" UserId="1293" />
  <row Id="12204" PostId="4678" Score="0" Text="If I say `int x=someComputation();` and never write to `x`, then within its scope `x` would be synonymous with the value yielded by that call to `someComputation`.  If instead I say, `int x=0;` and later within a loop say `x+=someOtherComputation;`, then there would be no particular value with which `x` would be associated throughout its scope.  Instead `x` would be used as a place to store computations which are performed throughout its lifetime." CreationDate="2018-05-01T18:21:47.070" UserId="2073" />
  <row Id="12206" PostId="4678" Score="0" Text="@supercat, If you have some way to specify that x is a constant (const in C++, final in Java, etc) then yes. Otherwise the system will treat both the same and it is only your intention that makes them different." CreationDate="2018-05-01T19:52:42.773" UserId="1293" />
  <row Id="12209" PostId="4678" Score="0" Text="The system will treat both the same, true.  On the other hand, programs are usually intended to be read not just by computers but also by people." CreationDate="2018-05-01T20:11:37.120" UserId="2073" />
  <row Id="12210" PostId="4678" Score="0" Text="@supercat, that isn't the point. If the restriction can't be communicated nor enforced it doesn't _really_ exist. The next person to read the program won't understand it or be bound by your intention during maintenance. The code itself should express your intention. Comments can help a bit, but they have to be read and agreed to. Make the code express the intention." CreationDate="2018-05-01T20:14:43.553" UserId="1293" />
  <row Id="12186" PostId="4679" Score="0" Text="I remember when C♯ and Java were like this. Containers were containers of Objects (except arrays)." CreationDate="2018-04-30T17:27:45.653" UserId="204" />
  <row Id="12200" PostId="4679" Score="0" Text="I think point #2 is one of the most important, and it's one that I wish language designers would pay more attention to.  If there are two things a piece of code might plausibly be intended to mean, and if a slight adjustment would make the intent unambiguous, having a language require that a programmer be explicit in both cases may be better than having it allow one to be implicitly assumed.  From a teaching perspective, though, I think the issue is probably that if one fixes all the underlying problems that could lead to compile errors, one may be close to having a working program, and..." CreationDate="2018-05-01T16:46:51.780" UserId="2073" />
  <row Id="12201" PostId="4679" Score="0" Text="...this in turn wants causes students to want to reach the point of having their program compile successfully as soon as possible.  What's important for them to learn is that there are ways of making programs compile successfully without fixing their real problems, but if one uses such approaches the real problems will still remain." CreationDate="2018-05-01T16:50:30.227" UserId="2073" />
  <row Id="12257" PostId="4679" Score="0" Text="@ctrl-alt-delor I remember when golang was like that... oh, wait..." CreationDate="2018-05-02T14:59:37.213" UserId="1790" />
  <row Id="12178" PostId="4680" Score="0" Text="Yes, the overuse of Object/var are different situations, but in my experience the tendency for new(-ish) programmers to resort to their use in laziness is about the same.  I do mention to them that a style guide will probably be present in their careers and that they should plan to conform to it.  Having a written one for my classroom would be good practice for that.  Maybe I'll get them to write it!" CreationDate="2018-04-30T14:03:51.830" UserId="4338" />
  <row Id="12180" PostId="4680" Score="0" Text="Often enough the style guide is _not_ about making the program, in its initial state, better, or the programmer's job any easier. It is, however, about making the &quot;clarity&quot; clearer for any programmer who later deals with that code, including the author. Few rules in style guides are based on rules in the language, but rules in the praxis of the author(s) of the guide." CreationDate="2018-04-30T14:13:06.083" UserId="104" />
  <row Id="12197" PostId="4680" Score="0" Text="`foreach (Foo foo in foos)` is somewhat equivalent to `foreach (Foo foo in foos.Cast&lt;Foo&gt;())`. It will throw `InvalidCastException` not filter by actual type like `OfType&lt;T&gt;`." CreationDate="2018-05-01T08:59:31.003" UserId="4984" />
  <row Id="12225" PostId="4680" Score="0" Text="Why write your own style guide?  Use the one that is official to the language." CreationDate="2018-05-02T00:38:56.497" UserId="1537" />
  <row Id="12227" PostId="4680" Score="0" Text="@pojo-guy, that's a fair point (when one exists), but it would create copyright problems with the subsetting, and dumping a full style guide which talks about features you won't mention for 3 months is not ideal." CreationDate="2018-05-02T07:31:11.293" UserId="1219" />
  <row Id="12187" PostId="4683" Score="0" Text="I am/was a professional programmer too, and I always use types when I declare.  The only place I think var is justified is when working with LINQ queries and their results (foreach var...).  Efficiency now causes headaches later." CreationDate="2018-04-30T18:15:55.380" UserId="4338" />
  <row Id="12188" PostId="4683" Score="0" Text="@JavaJive That's fine... it's ultimately a matter of debate. But honestly, as a mildly rebellious student myself I would have chafed under required &quot;vars&quot; if there isn't an airtight case for them (which there isn't). Then again, I don't know much about teaching so I can't say when you should lay down the law and when you should back off." CreationDate="2018-04-30T18:26:58.653" UserId="4976" />
  <row Id="12207" PostId="4689" Score="4" Text="Congratulations on asking a HNQ on our site. And welcome to CSEducators." CreationDate="2018-05-01T20:08:03.733" UserId="1293" />
  <row Id="12208" PostId="4689" Score="0" Text="See the final note on this answer for the origin of the Animal-&gt;Dog example and why it fails. https://cseducators.stackexchange.com/a/4678/1293" CreationDate="2018-05-01T20:10:37.380" UserId="1293" />
  <row Id="12215" PostId="4689" Score="0" Text="Honestly, inheritance in Python/Java/C#/etc. is a tool often used to get around the fact that they don't have templates or mixins (like C++). Genuine need for inheritance (implying late binding and dynamic dispatch) is *far* less common than you would think. But if those are sufficient, then the only real example you need is `namedtuple`..." CreationDate="2018-05-01T20:50:22.790" UserId="823" />
  <row Id="12217" PostId="4689" Score="15" Text="As a student, I didn't understand inheritance as anything other than an academic exercise, until I started looking at GUI toolkits, with classes like BaseView, GridView, ListView, OrderedListView, etc; and started making my own extensions of these things, that it really made sense." CreationDate="2018-05-01T21:15:00.463" UserId="4997" />
  <row Id="12223" PostId="4689" Score="2" Text="Inheritance is important,  but not as important as interfaces. While I disagree with the assertion that inheritance is a way to get around the absence of templates that c++ offers,  I agree that it is over emphasized in teaching OO programming. 90% of the objects you will make outside of a GUI  are descended only from Object." CreationDate="2018-05-02T00:25:59.327" UserId="1537" />
  <row Id="12226" PostId="4689" Score="0" Text="@Patch I also want to welcome you to [cseducators.se]. Take a look around the site; I suspect you'll find it quite useful.  Also, this sort of question is a perfect fit here." CreationDate="2018-05-02T01:48:05.337" UserId="27" />
  <row Id="12230" PostId="4689" Score="0" Text="You all should look at Eiffel. It does inheritance properly. You will then see that mixins, and interfaces are just a special case of inheritance." CreationDate="2018-05-02T09:39:00.357" UserId="204" />
  <row Id="12231" PostId="4689" Score="0" Text="I have no idea, where the idea of inheritance being mainly a GUI thing, comes from. As just one counter example look at your computer it has many devices: a printer, a pointing device, a keyboard, a temperature senser, a light senser, a microphone, a network, a gps, a clock. These all examples of abstract classes (probably implemented it C with no class keyword, but still inheritance)." CreationDate="2018-05-02T09:44:30.460" UserId="204" />
  <row Id="12235" PostId="4689" Score="0" Text="@ctrl-alt-delor those are examples of a common interface, not inherited behaviour. The chances of a GPS driver and your printer driver having any code in common are fairly low, given they most likely won't be written by the same company." CreationDate="2018-05-02T10:55:46.777" UserId="1498" />
  <row Id="12238" PostId="4689" Score="2" Text="@pojo-guy: Interfaces are a variation on inheritance. Assuming you know neither, inheritance is easier to understand than interfaces. The use case for interfaces is rather complex, compared to the use case for inheritance. Regardless of which will be used more often in a professional context, education should follow a logical progression that makes every step as light as it can be." CreationDate="2018-05-02T12:46:58.537" UserId="2164" />
  <row Id="12259" PostId="4689" Score="0" Text="Do you mean inheritance as OOP concept, or as practical tool used in Python? I'd say these are quite separate things. Mostly because Python is duck-typed, so it usually doesn't make sense to define interfaces in code, and so OOP looks differently than in, say, Java. I assume the first, and I think I can write an answer addressing both, but it would be best if you clarify in the question what kind of inheritance (interface vs implementation) you are concerned about." CreationDate="2018-05-02T16:21:26.820" UserId="4884" />
  <row Id="12262" PostId="4689" Score="0" Text="@PeteKirkham No a GPS is not a printer. A laser printer **is a** printer, a ink-jet printer is a printer, … The point is not that every thing is a device. But that all printers are printers, and all GPS are GPS. (However, and this is a totally different argument, though still inheritance, all devices are files)." CreationDate="2018-05-02T17:03:46.090" UserId="204" />
  <row Id="12278" PostId="4689" Score="3" Text="The best thing you can probably teach about inheritance is to avoid it until it makes absolutely perfect sense (and probably even then).  The reason it's hard to find a good teaching example of inheritance is because it's very difficult to find models that really should use inheritance. In the end I've regretted every non-trivial use of inheritance, some trivial ones work out pretty well though.  What I've found is that if there is any question whatsoever, choose composition/encapsulation, even if the objects easily pass the &quot;is a&quot; test." CreationDate="2018-05-03T19:51:49.280" UserId="1399" />
  <row Id="12286" PostId="4689" Score="0" Text="@ctrl-alt-delor I think we're at cross purposes. The printer is made by e.g. Canon and the GPS e.g. by SiRFstarII. The devices will not have any code in common (except possibly licensing the same embedded USB stack). The drivers will again probably not have anything in common beyond messaging stacks. The interface the OS uses to the driver will work for any USB driver instance, and then layer on top a specialised interface to the device type. At what layer do you think there is inheritance of behaviour from shared code?" CreationDate="2018-05-04T09:01:17.653" UserId="1498" />
  <row Id="12287" PostId="4689" Score="0" Text="@PeteKirkham Yes we are at cross purposes. 1) I run Gnu/Linux, so there is a lot of shared code between drivers. 2) Just because there is no shared code. Does not mean there is no inheritance. Inheritance is a concept independent of implementation. Back to point 1. Just because the OS that you use is badly implemented, does not prove the point that inheritance is only used for GUI. I write embedded systems. There is inheritance at every layer." CreationDate="2018-05-04T09:20:03.820" UserId="204" />
  <row Id="12288" PostId="4689" Score="0" Text="@ctrl-alt-delor I was under the impression linux drivers were mostly written in C and therefore there is no possibility of inheritance, only calling shared libraries of code. When did OO languages become common in linux driver development?" CreationDate="2018-05-04T09:56:23.810" UserId="1498" />
  <row Id="12291" PostId="4689" Score="1" Text="@PeteKirkham Linux and Unix is written in `C`. However it is OO. Just as you can write structured assembler, you can write OO `C`. It is not as easy. But that is what is done. Unix is an OO operating system. It even has garbage collection." CreationDate="2018-05-04T12:23:53.840" UserId="204" />
  <row Id="12310" PostId="4689" Score="0" Text="@ctrl-alt-delor - X-Windows is also written in an object-oriented style using C." CreationDate="2018-05-05T13:53:21.063" UserId="961" />
  <row Id="12560" PostId="4689" Score="0" Text="@nexus_2006, for me it clicked in operating systems (yes, written in C of all languages). There are lots of commonalities to abstract out as classes in there. And it is done. E.g. Linux is a giant OO program." CreationDate="2018-05-18T12:45:27.617" UserId="5219" />
  <row Id="19637" PostId="4689" Score="0" Text="I once [answered](https://stackoverflow.com/a/14924652/697630) a similar question in SO. Then I realized it is simpler to answer when you think in terms of interface inheritance, because class inheritance is far too less intuitive and it is harder to find good examples of it." CreationDate="2022-04-29T05:12:02.820" UserId="11997" />
  <row Id="12214" PostId="4691" Score="14" Text="*&quot;This leads to poor design. If, when you create a variable you think of it as an Animal (or in a statically typed language declare it so) then later, when you assign a Dog object to the same variable you, the programmer have to remember that it is now a dog so that it can accept the sit() method that wasn't implemented in Animal.&quot;* Are you sure you're doing this right? If you wanted a variable pointing to a dog, you'd declare it as a `Dog`. When all you want is an `Animal`, you don't *want* to call `sit()` on it." CreationDate="2018-05-01T20:42:55.180" UserId="823" />
  <row Id="12220" PostId="4691" Score="0" Text="@Mehrdad it is pretty hard to avoid the problem. Suppose you have a list of different kinds of Animal. Some Dogs, some Kangaroos, etc. When you retrieve them from the list all the compiler knows is that they are Animal. If you only ever want to send messages defined in Animal then you are fine, but not otherwise. However, If you don't add methods in subclasses then the issue never arises. The complete public interface of any such object is defined in Animal. Over a very short run of code it may be easy to distinguish and remember. Not so much over a long program." CreationDate="2018-05-01T22:13:31.783" UserId="1293" />
  <row Id="12221" PostId="4691" Score="2" Text="@Buffy if your goal is consistent interfaces you'd use an interface and have each animal implement that instead of using inheritance..." CreationDate="2018-05-01T23:07:10.197" UserId="177" />
  <row Id="12222" PostId="4691" Score="0" Text="@ElysianFields, this is Python, not Java. Python doesn't have interfaces, though you can simulate them. The rule for interfaces is if you implement an interface don't add additional public methods to the class. If you do, you will wind up with the same problem of having to know the same concrete type of each object even when it is referenced by an interface typed variable (or in Python by an untyped variable)." CreationDate="2018-05-01T23:25:43.827" UserId="1293" />
  <row Id="12236" PostId="4691" Score="5" Text="At my university, they went with Point-&gt;LineSegment-&gt;Triangle-&gt;Quadrilateral inheritance...I got into major fight with professor when trying to argue with him that he is scarring the minds of students." CreationDate="2018-05-02T11:43:31.503" UserId="4918" />
  <row Id="12237" PostId="4691" Score="0" Text="@ArturBiesiadowski Good for you. This mental abomination actually goes back, at least, to the original Turbo Pascal documentation in which Circle extends Point. All you need to do is &quot;add&quot; a radius field, of course. It was further promulgated in a few text books. I won't name the authors, and hope that later editions thought a bit deeper about the issue. Taking the &quot;easy&quot; way out in defining a class often leads to terribly hard to decipher code. If you think of objects as &quot;bundles of behavior&quot; not &quot;sets of fields&quot; you do better in thinking about them." CreationDate="2018-05-02T11:52:28.113" UserId="1293" />
  <row Id="12240" PostId="4691" Score="0" Text="@Buffy. &quot;Bad design&quot; is sometimes necessary in the context of education. &quot;Hello world&quot; is a simple example here. One could berate the developer for using a hardcoded string that is not either clearly a const value or a configurable value; but you'd be missing the point of the exercise: showing the simplest of programs. The `Animal -&gt; Dog` example is similalry flawed in a professional context, but it does explain the nature of inheritance rather well. The solution here isn't improving/complicating the example, but rather continuing with even better examples after the chapter on inheritance." CreationDate="2018-05-02T12:58:56.090" UserId="2164" />
  <row Id="12241" PostId="4691" Score="2" Text="@Buffy: Your comment does seem wrong. If you define an `Animal` variable, you should never care about _which_ animal it is. The problem is being created by the developer that decided to declare an `Animal` instead of a `Dog` variable. You say the problem is unavoidable, but I **strongly** disagree here. The problem is the expectation of the developer after needlessly downcasting their type to the subclass. That is developer error, not an inherent design flaw." CreationDate="2018-05-02T13:02:38.447" UserId="2164" />
  <row Id="12244" PostId="4691" Score="0" Text="@Flater the place for discussion is in the Classroom, not here: https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2018-05-02T13:08:22.477" UserId="1293" />
  <row Id="12245" PostId="4691" Score="1" Text="@Buffy: These are direct counters to your explicit assertions. They are not a tangential discussion." CreationDate="2018-05-02T13:12:07.293" UserId="2164" />
  <row Id="12247" PostId="4691" Score="0" Text="Yeah, Buffy, I'm not liking this argument, either.  If you've got Animal, Dog, and Whale classes, and need Sit() and Swim() functions, there's no way you should be programming those methods (or stubs of them) in the base Animal class.  It violates Open/Closed Principle - you'd have to modify the base whenever you add a subclass that needs new functionality." CreationDate="2018-05-02T13:20:53.897" UserId="4777" />
  <row Id="12248" PostId="4691" Score="0" Text="Yes @Flater, and you have fallen into a serious error. Come to the classroom." CreationDate="2018-05-02T13:39:05.957" UserId="1293" />
  <row Id="12250" PostId="4691" Score="1" Text="@Flater: &quot;&quot;Bad design&quot; is sometimes necessary in the context of education.&quot; Hmmm. I question that logic. I try hard not to do things in small programs that might lead students to adopt and reinforce bad habits that will haunt them in large programs. No teacher should ever require un-learning in his/her students. Find a better way." CreationDate="2018-05-02T14:06:09.233" UserId="1293" />
  <row Id="12251" PostId="4691" Score="0" Text="@Buffy: So how do you counter my Hello World example? You're disagreeing without countering the actual example. In a professional context, I would negatively review the output of a hardcoded magic string. But in the context of a Hello World application, a hardcoded magic string is not an issue. You clearly disagree with the latter assertion. So how would you &quot;find a better way&quot; to make a Hello World application while adhering to all relevant professional standards?" CreationDate="2018-05-02T14:09:17.830" UserId="2164" />
  <row Id="12253" PostId="4691" Score="0" Text="@Flater, I don't use &quot;hello world&quot; or anything like it actually. My classes start with students exercising objects with a simple interface. They spend about one day writing things in main that will generate a visualization of the simple program. On the second day they start to write simple classes. It requires quite a bit of prior scaffolding. I define a virtual world in which they program. That world is richer than what Java provides and also guides their thinking as they develop. I don't start from the lowest possible level of abstraction." CreationDate="2018-05-02T14:23:17.810" UserId="1293" />
  <row Id="12265" PostId="4691" Score="0" Text="While I'm all for composition and shallow hierarchies I understand that having pluggable strategies simply moves the principle problems with inheritance to the strategies (instead of having them in the &quot;complex&quot; object). The nice thing is that each of the strategies is surely smaller than the complex object holding them: this paradigm is a neat application of *divide and conquer.* (And provides better testability of the complex object and may have other advantages.)  It is not, however, a principle alternative to inheritance because it still uses it. What am I missing?" CreationDate="2018-05-02T18:43:17.297" UserId="1675" />
  <row Id="12266" PostId="4691" Score="0" Text="@PeterA.Schneider, probably nothing. It is just a better and more controllable form of inheritance. Inheritance should model IS-A quite purely, not just IS-Like. Every strategy has the same interface. Other small objects can also use inheritance but in a purer way as they model different implementations of the SAME concept, not just similar concepts. Modeling the same concept, they exhibit the same behaviors and hence, have the same interface. Cleaner and easier to live with in the long run. And better to teach the correct path to beginners than the exceptional cases." CreationDate="2018-05-02T18:48:11.977" UserId="1293" />
  <row Id="12284" PostId="4691" Score="0" Text="I'm convinced that beginners should not even hear the word &quot;inheritance&quot; until they've learned to model *is-a* relationships with interfaces. If Python lacks interfaces, then Python is not an appropriate teaching language." CreationDate="2018-05-04T06:18:26.827" UserId="676" />
  <row Id="12290" PostId="4691" Score="2" Text="@KevinKrumwiede, too strong. Python is an excellent teaching language, but you have to program it like Python, not like Java. If you follow simple rules in Python you get great results. But the same is true for Java or other languages. Programming naively in any language can lead to design-disaster. And thinking in one language while programming in another seldom leads to good results. Learn your tools, just as any crafts-person should." CreationDate="2018-05-04T11:58:53.473" UserId="1293" />
  <row Id="14088" PostId="4691" Score="0" Text="(Using terms in their generic CS senses:) You (per your first paragraph) eschew interface/abstract inheritance &amp; only promote implementation/concrete inheritance. This is a limited &amp; unusual view that to some extent fundamentally misunderstands what inheritance is &amp; is for. A good book is [Kim's Foundations of Object-Oriented Programming Languages: Types and Semantics](http://www.cs.pomona.edu/~kim/FOOLbook.html). (Unfortunately, Wikipedia identifies (via redirection) &quot;interface inheritance&quot; with &quot;subtyping&quot;, which is wrong, which is in turn identified with subsumption, which is wrong.)" CreationDate="2018-12-19T22:43:53.280" UserId="2485" />
  <row Id="14089" PostId="4691" Score="0" Text="@philipxy, actually, you are completely wrong about what I &quot;promote&quot;. I was merely responding to the OP. In fact, I use and teach abstract/interface inheritance almost exclusively. Actually, &quot;Kim&quot; is professor Bruce, a friend of mine, and I agree that he knows of which he speaks and write. And I'm not sure why you think that interface inheritance isn't sub typing (most OO languages would disagree), although introducing new public elements into a hierarchy is problematic whether you do it in the concrete or abstract hierarchy." CreationDate="2018-12-19T22:54:15.430" UserId="1293" />
  <row Id="14090" PostId="4691" Score="0" Text="Re &quot;promote&quot; I explicitly &amp; clearly was addressing your post. I cannot reconcile &quot;The problem is that these sorts of examples require [...] you to add additional public methods to the subclass.&quot; with your comment or its own restating re &quot;elements&quot;. I referenced a book, I don't want to argue. Suggest you show your answer &amp; these comments to Kim Bruce. Re interface inheritance vs subytyping compare to the &quot;Inheritance (object-oriented programming)&quot; article: &quot;Inheritance should not be confused with subtyping.&quot; &quot;Kim&quot; was a typo related to their home directory ~kim." CreationDate="2018-12-20T00:39:57.073" UserId="2485" />
  <row Id="14091" PostId="4691" Score="0" Text="@philipxy, yes, and my _point_ was that it is a mistake to add public features in subclasses. I'm certainly not promoting it." CreationDate="2018-12-20T00:42:54.550" UserId="1293" />
  <row Id="19328" PostId="4691" Score="0" Text="@ArturBiesiadowski That's a great example of confusion between &quot;has-a&quot; and &quot;is-a&quot;. Please see my answer, and let me know what you think. (If it needs stating explicitly, I agree with you, not your professor.)" CreationDate="2022-02-15T14:10:21.667" UserId="6346" />
  <row Id="12212" PostId="4692" Score="0" Text="@buffy e.g. the doom 3 source https://github.com/dhewm/dhewm3/tree/master/neo I'll try to pull out some inheritance chains later" CreationDate="2018-05-01T20:31:43.237" UserId="4995" />
  <row Id="12292" PostId="4693" Score="2" Text="Seems like there's a blurring of the lines for separation of concerns here. The file info (creator, size, and maybe description) are one thing, the info for image/video has nothing to do with the file, and should be a separate object that _has-a_ file. The file is _not_ the image, the file _holds_ the image." CreationDate="2018-05-04T16:38:02.077" UserId="104" />
  <row Id="12306" PostId="4693" Score="0" Text="Indeed, perhaps `ImageFileInfo` ought to supply `ImageInfo` as a property rather than providing methods acting on the image data. Otherwise, I think this is a somewhat realistic example, though it could do with an example of a virtual function." CreationDate="2018-05-05T12:06:14.863" UserId="1538" />
  <row Id="12324" PostId="4693" Score="0" Text="Oh, Absolutely!  In the real version of my code, a document consists of two objects: a Content class and an IndexCard - with the IndexCard containing metadata for the document itself, and the Content class containing the file (and data like its size, type, extension, etc.)  I was just trying to simplify it down to a bite-sized example of how inheritance can be used well, and in a way that students wouldn't think of as &quot;Eh, this is just theoretical stuff we'd never need to use.&quot;" CreationDate="2018-05-07T13:49:46.447" UserId="4777" />
  <row Id="17824" PostId="4693" Score="2" Text="Originally I upvoted this, but in hindsight I think this is a good case of where &quot;composition over inheritance&quot; should be applied. Virtual functions aren't being used, so I'm not convinced this is a good use of inheritance. I think it could be a good example if there was a clear use case for virtuality, but without that it seems that there's no reason to favour inheritance over composition." CreationDate="2021-03-26T21:09:29.467" UserId="1538" />
  <row Id="20956" PostId="4693" Score="0" Text="If you want to bring up all sorts of exciting issues around inheritance, add a `SoundFileInfo` class.  Sound files have a duration but not dimensions: should `MovingImageFileInfo` inherit from both `SoundFileInfo` and `ImageFileInfo` (which brings up the diamond problem) or be its own thing (which leads to code duplication)?" CreationDate="2023-02-10T01:59:36.320" UserId="2781" />
  <row Id="12232" PostId="4694" Score="8" Text="I don't really care for Minecraft, but I like this answer a lot. One thing that bothers me with those standard `Animal=&gt;Dog` examples is that it's trying to explain an abstract concept with a slightly less abstract example - but _to what end_ does an `Animal` even need a `MakeNoise()` function? Instantly obvious with a &quot;real life&quot; example like this: A sound effect needs to be played when the player is close. Also it's very easy to make some screenshots to illustrate concepts, which can make those olde lecture slides more interesting and easier to understand." CreationDate="2018-05-02T10:05:27.680" UserId="5003" />
  <row Id="12234" PostId="4694" Score="3" Text="Yep. I think looking at game related examples is a very good idea because OO is important for game design and it is easy to imagine the code being actually used. I think the block example can get quite complex though. Maybe just define some game objects with a shared draw method, an image etc. Add something like health in the mix and you're done. OP could take a look at http://py.processing.org/ and you can even easily draw stuff. Maybe idk snow that turns into rain after a couple of seconds of falling? (position, speed, lifetime, image) and rain falls faster than snow" CreationDate="2018-05-02T10:55:13.883" UserId="5005" />
  <row Id="12242" PostId="4694" Score="0" Text="@R.Schmitz `but to what end does an Animal even need a MakeNoise() function?` As a simple example, imagine hiring a zookeeper who is so new to the profession that he can't recognize which animal it is. But you can already task him to **feed** the animals (assume that all animals eat the same food for now). That would be an argument for `Animal` having a `Feed(Food food)` method, since the zookeeper trainee is incapable of distinguishing specific descendants from the `Animal` class. Rudimentary examples are obviously flawed when you look with enough detail, but it's a fair first example, imo." CreationDate="2018-05-02T13:06:36.053" UserId="2164" />
  <row Id="12249" PostId="4694" Score="3" Text="@Flater I have to admit I'm a bit confused now. I thought it's pretty clear that that was a rhetoric question. Even if you take it as a literal question, your example for `MakeNoise()` isn't about `MakeNoise()` at all. And then, the actual example is another _slightly less abstract example_ /[spherial cow](https://en.wikipedia.org/wiki/Spherical_cow), when my whole point was that I like this answer because it is 100% concrete." CreationDate="2018-05-02T14:00:40.643" UserId="5003" />
  <row Id="12252" PostId="4694" Score="0" Text="@R.Schmitz: Are we really going to stumble over the name of the fictional example method used? I was quite clear about referring to a `Feed(Food food)` method. `the actual example is another slightly less abstract example` Because the majority of programming which follows modern day conventions (i.e. a concrete example of programming) is often so loaded with conventions and design patterns that students can't see the wood for the trees. Failing to understand that basic examples are simplified and not pedantically correct to the atom is a failure to understand the purpose of the example." CreationDate="2018-05-02T14:13:35.117" UserId="2164" />
  <row Id="12255" PostId="4694" Score="2" Text="@Flater _stumble over the name_? I'll just assume you meant to change more than the name, because `Feed` is a _really_ bad name for a function which is supposed to produce animal noises. What I like about this answer is how it uses exactly a _concrete example of programming_, which can easily demonstrate how - to keep with your metaphor - some trees together make up part of a _real_ wood/forest." CreationDate="2018-05-02T14:55:19.563" UserId="5003" />
  <row Id="12256" PostId="4694" Score="0" Text="@R.Schmitz: Did you actually read my comment? I'd expect that arguing the validity of my comment comes _after_ actually reading the comment. You seem to completely miss the message but somehow know that it's not correct anyway. You argued that there is a lack of concrete examples, and yourself added the `MakeNoise` method name (which was not the direct topic of conversation). I gave you an actual concrete example. I have no idea what you're getting caught up on. It feels like trolling behavior." CreationDate="2018-05-02T14:57:48.917" UserId="2164" />
  <row Id="12258" PostId="4694" Score="1" Text="@Flater I did not engage your cheap stabs like &quot;Failure to understand...&quot; or the first half of this comment now and I will continue to do so, because _that_ feels like trolling behaviour to me. For the second part of your comment: We probably just apply different definitions of &quot;concrete&quot; here. For me, it's not concrete because you didn't get that from actual code used in production - I really don't see any remarkable difference to the standard `Animal=&gt;Dog` or `Person=&gt;Employee` examples mentioned by OP. You will have another reasoning why you think it _is_ concrete." CreationDate="2018-05-02T15:46:07.280" UserId="5003" />
  <row Id="12270" PostId="4694" Score="0" Text="GUIs are another case where OO is frequently used and important. You can make Swing components with a complete custom look by overriding `paintComponent`." CreationDate="2018-05-03T01:12:22.340" UserId="1275" />
  <row Id="12272" PostId="4694" Score="1" Text="&quot;Minecraft can do this because of all of those basic methods that subclasses inherit and override.&quot;&#xA;&#xA;Actually, many game frameworks do *not* use inheritance in this way because it doesn't work very well.  Instead, they use composition.  For example, games might have cars, boats and amphibious boats... which is easy to do with composition and difficult to do with inheritance." CreationDate="2018-05-03T04:19:45.730" UserId="5018" />
  <row Id="12273" PostId="4694" Score="0" Text="In the practical example, a object might have a health component, that handles 'take damage' messages that fires a 'death' message to other components that might spawn objects in the game world that can picked up (or straight to inventory).&#xA;&#xA;The spawn object component probably has the relevant settings (e.g. object, probability etc.) so can work for many different types without having to be specialized.&#xA;&#xA;Not saying you can't use inheritence as described (not familiar with minecraft myself), and it *is* used in game engines for various reasons, just sharing some experiance.  See Unity3D." CreationDate="2018-05-03T04:22:28.587" UserId="5018" />
  <row Id="12274" PostId="4694" Score="0" Text="@NPSF3000 Pretty decent comparison. I used Minecraft, as a) there's an educational version and b) a lot of students are probably familiar with it. Health and damage certainly *works*, though its pretty rare for different entity types to need to override that method. (And Unity is my jam ;)" CreationDate="2018-05-03T07:25:42.520" UserId="1244" />
  <row Id="12279" PostId="4694" Score="0" Text="@NPSF3000 Exactly, In fact I don't think minecraft uses inheritance for the blocks because of this, IIRC all blocks have attributes and you just test the attribute.  Inheritance, as usual, would make the design much more inflexible, inconvenient and difficult.  Sometimes you might have very general categories like &quot;GroundBlock&quot; and &quot;AirBlock&quot; to say which you can or can't walk through, but I don't think minecraft even does this (I haven't programed MC plugins in 5+ years, but that's how I remember it)" CreationDate="2018-05-03T19:58:20.170" UserId="1399" />
  <row Id="12280" PostId="4694" Score="0" Text="@BillK I do Minecraft moddibg, I know what I'm talking about. The example function isn't straight from the code, but it is similar to three that do exist (the sample being a kind of merged amalgam). Can or can't walk through a block involves...somewhere around four different functions. [Here](https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/ores/block/BlockSifter.java) is a real example. Seven overridden functions." CreationDate="2018-05-03T20:34:42.643" UserId="1244" />
  <row Id="12281" PostId="4694" Score="0" Text="The important ones in this case are `onBlockActivated` (so that a GUI can be opened) as well as `has` and `createTileEntity` (so that the game knows that special extra class data is needed that can't be stored in a block singleton). Or we could look at [this class](https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/ores/block/ore/BlockHardOreBase.java) that has 13 overridden methods (including `getDrops` which is close to the example in my answer). The important ones are `createBlockState`, `getStateFromMeta` and `getMetaFromState` to handle variant info." CreationDate="2018-05-03T20:44:58.957" UserId="1244" />
  <row Id="12282" PostId="4694" Score="0" Text="Ahh, you are talking about the modding layer, that makes sense.  I was saying Notch didn't use OO as a primary part of his design, attributes work much better.  I am, however, a little surprised that this mod uses overrides for event notification--We figured out how terrible that was in  the AWT days.  Last time I checked Bukkit had the ability to submit a class with annotated methods to auto-create listeners which I thought was a truly brilliant way to avoid all the problems inherent with extending/overriding!" CreationDate="2018-05-03T21:41:04.337" UserId="1399" />
  <row Id="12283" PostId="4694" Score="0" Text="@BillK Oh, no, Notch/Mojang uses it too. I just can't link to any *vanilla source code* as sharing that is against the EULA. ;) There are 167 vanilla subclasses of `Block`, eight entire *packages* for subclasses of `Entity` (arrows, snowballs, zombies, pigs...the player...), 80 subclasses of `Item`, and tons and tons of others. Admittedly some of the block ones don't need a subclass (`BlockBone` for example, only has a constructor that only calls methods that return `Block` and could have been done in init; e.g. `Block bone = new Block().setHardness(2.0F)`), but the majority are legitimate." CreationDate="2018-05-03T22:05:09.673" UserId="1244" />
  <row Id="12260" PostId="4695" Score="2" Text="The problem with person-&gt;employee-&gt;manager is that it can be difficult to evolve an Employee into a Manager. This is a frequent use case, but the methods (behaviors) open to a Manager are different from those of an Employee and certainly of the general Person. This is thinking of classes as a &quot;classification&quot; system, rather than way to define &quot;bundles of behavior&quot;. It is the public methods (the behaviors) that make a class what it is. Likewise thinking of objects as bundles of data (rather than behaviors) leads to lots of poor designs. Make Manager a _Trait_ of employee, not a subclass." CreationDate="2018-05-02T16:59:05.367" UserId="1293" />
  <row Id="12263" PostId="4695" Score="1" Text="@Buffy Well, it appears to me that the problems you describe are inherent to the very concept of (true, as opposed to mere interface) inheritance. Paradigms have shifted away from this pattern towards composition for many reasons, yours among them, but these examples are what (true) inheritance is about, like it or not. If one wants to teach it, one has to teach these concepts together with the caveats. [As an aside, evolving an employee into a manger is relatively easy in a program, compared to the pesky reality...]" CreationDate="2018-05-02T18:12:21.507" UserId="1675" />
  <row Id="12264" PostId="4695" Score="1" Text="I disagree. I think they are just a consequence of shallow thought and poor design. However, if they are poorly taught the situation won't improve. Work for change. Bad design isn't compulsory." CreationDate="2018-05-02T18:15:45.137" UserId="1293" />
  <row Id="12285" PostId="4696" Score="0" Text="`var` is absolutely necessary in some contexts with anonymous types, which AIUI was one of the motivations for introducing it. My answer to this question also mentions a situation (`foreach` loops) where getting into the habit of using `var` always will allow the detection of problems at compile-time rather than runtime." CreationDate="2018-05-04T07:37:11.507" UserId="1219" />
  <row Id="12261" PostId="4698" Score="1" Text="I don't see the need for the `Saver` class here, and when that is gone, there is no inheritance in that example. In statically typed languages `Saver` would be an interface and not a class and in Python (the language used by the OP) the `Saver` class simply doesn't make sense. Python programmers would just remove it. Duck-typing at work." CreationDate="2018-05-02T17:03:16.687" UserId="847" />
  <row Id="12271" PostId="4698" Score="0" Text="This doesn't save any code, it just moves it around." CreationDate="2018-05-03T03:57:38.007" UserId="1275" />
  <row Id="17826" PostId="4698" Score="0" Text="@BlackJack Firstly, inheriting an interface is still inheritance. Secondly, one could argue that duck typing removes the need for _any_ inheritance. Similarly, you could argue that having function objects renders inheritance redundant. As it happens, inheritance is typically implemented by what is effectively a structure full of function pointers. _But none of that answers the OP's question._" CreationDate="2021-03-26T21:21:54.137" UserId="1538" />
  <row Id="17827" PostId="4698" Score="0" Text="I recommend bolding that last line. **The ability to add new saving strategies without needing to modify existing code is exactly why this is a good example of inheritance.** This is also an excellent example to use for introducing the students to dependency injection, and an exaple of the strategy pattern (where the strategy here is how the data is saved)." CreationDate="2021-03-26T21:24:36.797" UserId="1538" />
  <row Id="12289" PostId="4699" Score="1" Text="Exceptions work differently to most class hierarchies - they are ontological and the type is important, whereas in most OO it's the behaviour that is important. They feel more like how you'd use types in functional languages for pattern matching than pure objects." CreationDate="2018-05-04T10:06:37.440" UserId="1498" />
  <row Id="12269" PostId="4700" Score="3" Text="Welcome to [cseducators.se]. I'd suggest that you take the time to go through the [Tour](https://cseducators.stackexchange.com/tour) and see how this site (like other Stack Exchange sites) is different than most fora you've likely used before. The title of the question asks for a simple &quot;yes/no&quot; answer, while the body seeks input for making the decision. The former doesn't do well here since either answer is &quot;valid&quot; and mostly opinion-based. The latter is kind of like a &quot;tell me what you think&quot; which also does poorly. We'd love help you to make this a good question, to get you useful answers." CreationDate="2018-05-02T22:27:03.287" UserId="104" />
  <row Id="17825" PostId="4705" Score="0" Text="While I like the idea, this only works if you actually understand logic gates. Thinking back to when I was taught programming in college, I don't think any of the class had ever heard the words &quot;logic gate&quot; (unless perhaps they played Minecraft)." CreationDate="2021-03-26T21:11:00.550" UserId="1538" />
  <row Id="12312" PostId="4712" Score="0" Text="Note: it is very difficult to learn OO from learning C++. Even from Java or C# it is difficult. It is much easier to learn OO from Eiffel, and then to learn C++, Java and C#. Yes easier to learn all 4 with Eiffel first, than to just learn C++.  This is because Eiffel is closer to the OO concept. It has a one to one relationship between the language and OO. E.g. To make an abstract/deferred class: in C++ make all constructors protected, or make at least one method pure-virtual (=0), or ...; In Eiffel put the word `deferred` before `class`." CreationDate="2018-05-06T11:30:04.223" UserId="204" />
  <row Id="12313" PostId="4712" Score="2" Text="@ctrl-alt-delor Well, if you want to be a language warrior, then maybe Smalltalk/Squeak is even better. But I disagree. Other languages can effectively teach OO. The reason that it is difficult in C++ is the same reason that everything is difficult in C++. It is a complex language and its object model is especially complex. It is much better suited to things like Templates in which the Standard Template Library is (or at least was) completely implemented using compiler tricks with no run-time effect at all. Objects on the stack vs on the heap is a very big deal, conceptually and operationally." CreationDate="2018-05-06T13:42:31.537" UserId="1293" />
  <row Id="12314" PostId="4712" Score="0" Text="@Buffy `public static void main` (java and C# are not much better. well may be a lot better, but still can you explain “hello world” program without having to explain access modifiers, OO, return types / functions, main. And we have not even got started. One thing good that can be said about C++ is that it the only language (that I know of), that allows static checking of dimensions ( $f=ma$  ($N=gms^2$)), to be implemented. Oh no, is the feature that allows the Barton–Nackman trick still in the language?" CreationDate="2018-05-06T15:29:39.417" UserId="204" />
  <row Id="12315" PostId="4712" Score="0" Text="@ctrl-alt-delor,Don't use &quot;hello world&quot; and don't judge a language based on trivialities. Infants learn language without everything needing to be explained." CreationDate="2018-05-06T15:33:06.963" UserId="1293" />
  <row Id="12316" PostId="4712" Score="0" Text="By “hello world”, I mean the first program, there is a lot of stuff that needs explaining or ignoring. This is very unsatisfactory, for the learner or teacher. Once you have learnt OO, then it is much easier to learn the `C` based OO languages (Java, C++, C#). I can program all of them, and have done I am not saying that any of them are bad languages. I am only saying that they are not a good first (OO) language." CreationDate="2018-05-06T15:38:06.273" UserId="204" />
  <row Id="12318" PostId="4712" Score="0" Text="@ctrl-alt-delor, AIUI F# also allows static checking of dimensions, and extrapolating from that I expect that Haskell also would." CreationDate="2018-05-07T07:36:51.667" UserId="1219" />
  <row Id="12320" PostId="4712" Score="0" Text="@PeterTaylor thanks. It is such a useful feature. So good to know where else it is used." CreationDate="2018-05-07T09:13:36.453" UserId="204" />
  <row Id="12319" PostId="4713" Score="0" Text="Note that in STEM subjects, Oxbridge tutorials/supervisions build on lectures rather than standing alone. (I hear that in arts subjects it's far more common to skip lectures and just go to supervisions)." CreationDate="2018-05-07T07:39:17.403" UserId="1219" />
  <row Id="12322" PostId="4713" Score="0" Text="@PeterTaylor. Yes, but that is still for an economic reason, not an educational one. Even Oxford has to scale up these days. I don't know what they would do with four students. With 20-100 students lectures are OK, if not very personalized. Combine them with tutorials and you add value. But if you don't have to scale up, why use those sorts of solutions? Just do what's best for your students." CreationDate="2018-05-07T09:56:28.463" UserId="1293" />
  <row Id="12323" PostId="4713" Score="0" Text="I'm not saying that OP should deliver a lecture to one person. What I *am* saying is that Oxford tutorials are not a good example because (in STEM subjects) they exist in a context where the majority of the teaching is by lecture, which is precisely what you're saying that OP should avoid." CreationDate="2018-05-07T10:05:53.987" UserId="1219" />
  <row Id="12325" PostId="4713" Score="0" Text="@PeterTaylor, you are missing an important point, or I am. Are you suggesting that since Oxford has had to scale up education to teach, say, 60 students in a class in STEM subjects and so uses lectures for _efficiency_ that someone with only 4-5 students should _not_ use tutorial only? I'm pretty sure that the professor who teaches 60 in lecture is likely _not_ the one that also runs 15 tutorials twice a week. Use lecture as appropriate, but STEM shouldn't be the deciding factor. Scale is. Use what is best for the students." CreationDate="2018-05-07T14:06:05.563" UserId="1293" />
  <row Id="12327" PostId="4713" Score="0" Text="&quot;*Are you suggesting that since Oxford has had to scale up education to teach, say, 60 students in a class in STEM subjects and so uses lectures for efficiency that someone with only 4-5 students should not use tutorial only?*&quot; No. I'm saying that if the answer argues for using tutorial only, the example it uses as an illustration should be a situation in which the tutorial is at least predominant, and ideally the illustration would be a tutorial only example. Otherwise it's like using C# as an example of a functional language: you can write functional code in C#, but that's not the same thing" CreationDate="2018-05-07T14:52:24.297" UserId="1219" />
  <row Id="12328" PostId="4713" Score="0" Text="(And as a completely off-topic aside on &quot;*I'm pretty sure that the professor who teaches 60 in lecture is likely not the one that also runs 15 tutorials twice a week*&quot;: the lectures are centralised and the tutorials are not, but the fellow who delivers the lectures may well take the corresponding tutorials for students from his/her college)." CreationDate="2018-05-07T14:54:53.943" UserId="1219" />
  <row Id="12333" PostId="4714" Score="0" Text="The second example in the wikipedia article (two balls) is actually easier and also very convincing." CreationDate="2018-05-07T22:10:58.477" UserId="1293" />
  <row Id="12329" PostId="4715" Score="0" Text="Hmmm. Actually, so does the wikipedia article you reference in the question." CreationDate="2018-05-07T21:32:53.263" UserId="1293" />
  <row Id="17627" PostId="4715" Score="0" Text="Finding Waldo is an interesting game to teach Zero Knowledge Proofs." CreationDate="2021-02-03T20:29:25.333" UserId="10070" />
  <row Id="12338" PostId="4717" Score="34" Text="I just learnt that interfaces can contain code - looks like my lecturer went with the lie route! I’m doing the 1st year of a degree." CreationDate="2018-05-08T01:02:57.290" UserId="2247" />
  <row Id="12339" PostId="4717" Score="71" Text="CS is the art of applying abstractions. You're not &quot;lying&quot;, you're *abstracting* away the unnecessary details (for now, of course)." CreationDate="2018-05-08T01:09:39.410" UserId="899" />
  <row Id="12342" PostId="4717" Score="12" Text="Actually it was true until *default methods* were added." CreationDate="2018-05-08T05:05:36.547" UserId="1275" />
  <row Id="12343" PostId="4717" Score="37" Text="And it's not &quot;not entirely true&quot;, it's just plain untrue. Instead of saying something so obviously untrue, I would consider &quot;except for default methods, which we'll get into later, interfaces can't contain any code&quot; or &quot;interfaces can't contain any code, with one exception that we'll cover later&quot;." CreationDate="2018-05-08T05:05:57.343" UserId="1275" />
  <row Id="12344" PostId="4717" Score="3" Text="If you want to be *really* pedantic, interfaces could contain code way back when (Java 1.1, I think) by means of putting it in a static inner class." CreationDate="2018-05-08T06:31:18.497" UserId="1219" />
  <row Id="12345" PostId="4717" Score="2" Text="Everything you have learnt anywhere is somekind of &quot;lie to children&quot;" CreationDate="2018-05-08T06:58:11.983" UserId="3448" />
  <row Id="12347" PostId="4717" Score="1" Text="@PeterTaylor Given that we're being *really* pedantic: that would be a 'static nested class'. If it's static, it's not an inner class." CreationDate="2018-05-08T09:12:15.423" UserId="5059" />
  <row Id="12349" PostId="4717" Score="23" Text="@Tim Honestly, it's very likely that that wasn't deliberate. Many educators don't quite keep up with technology. I still see many treat C++11 as some new fangled thing that'll never catch on, same with anything that was added to Java after 6. And from what I can tell at least in India, many students are _still_ taught with Borland C++." CreationDate="2018-05-08T10:13:42.717" UserId="5061" />
  <row Id="12350" PostId="4717" Score="0" Text="@Cubic: Yep, Turbo C++ from the 80s using a DOS emulator! Good times." CreationDate="2018-05-08T10:41:20.120" UserId="4731" />
  <row Id="12352" PostId="4717" Score="3" Text="Maybe you can mention in the beginning that not all things that you explain are exactly such but you simplify them for easy understanding." CreationDate="2018-05-08T11:46:57.300" UserId="4140" />
  <row Id="12357" PostId="4717" Score="1" Text="Perhaps instead of explaining the what, explain the why? Something along the lines of &quot;Interfaces are used to define common behaviors between all of their implementors, but because the details can greatly differ they usually do not contain code&quot; Then you could show an example how default methods can be used to do something like &quot;add if not present&quot; but the add method and contains method must be defined by the implementor." CreationDate="2018-05-08T19:38:38.260" UserId="5081" />
  <row Id="12364" PostId="4717" Score="3" Text="I tend to couch things in terms of &quot;mostly&quot; and &quot;sometimes&quot; and &quot;depending on exactly what version of...&quot;, especially in areas of flux (ie, teaching Linux admin and referencing Debian 8, Ubuntu 16.04, Debian 9, and Ubuntu 18.04 and initialization, the use of `ip` vs `ifconfig` and `route`, etc.)  I think the Science Of Discword explained it - this Discworld wiki gives a nice summary of &quot;Lies to Children&quot;, which this is qualifying as... https://wiki.lspace.org/mediawiki/Lies-To-Children" CreationDate="2018-05-09T00:14:46.553" UserId="662" />
  <row Id="12379" PostId="4717" Score="1" Text="&quot;unlike abstract classes, interfaces cannot contain any code&quot; - My CS1 professor said the same. Problem is, I had my OCJP when I took his class. I told him about `default` in Java 8, which he did not know about. He later added an asterisk and a small footnote explaining the Java 8 update and adding &quot;generally...&quot; to his statement. I thought it was a good solution." CreationDate="2018-05-09T13:08:19.950" UserId="4858" />
  <row Id="12395" PostId="4717" Score="2" Text="I suggest the formulation &quot;For now, please assume that...&quot;" CreationDate="2018-05-09T16:37:16.517" UserId="5101" />
  <row Id="12398" PostId="4717" Score="0" Text="Do definitions and signatures not count as code?" CreationDate="2018-05-09T18:06:02.657" UserId="5105" />
  <row Id="12403" PostId="4717" Score="1" Text="@KyleDelaney In a sense they are, but in many contexts such as this one or when counting lines of code they are not (typically)." CreationDate="2018-05-09T20:37:06.637" UserId="5107" />
  <row Id="12409" PostId="4717" Score="0" Text="You can *omit* whatever you want (# @title rant). But never lie to anyone about anything if your goal is the exchange of knowledge." CreationDate="2018-05-10T00:56:34.200" UserId="4158" />
  <row Id="12413" PostId="4717" Score="1" Text="Why not say, &quot;Interfaces cannot contain **state**&quot; or &quot;interfaces cannot contain fields?&quot; That's the real difference between them and abstract classes. Maybe also say, &quot;They usually don't contain code.&quot;" CreationDate="2018-05-10T04:09:01.427" UserId="2888" />
  <row Id="12421" PostId="4717" Score="2" Text="This is an example of: https://en.wikipedia.org/wiki/Lie-to-children" CreationDate="2018-05-10T13:49:08.513" UserId="5122" />
  <row Id="12427" PostId="4717" Score="1" Text="&gt;Macleod and Ross wrote: &quot;Playing devil's advocate is in itself a challenging notion for many learners, who may, especially in their early years of higher education, be conditioned by what Stewart and Cohen call 'lies to children' to expect simple and unambiguous questions and equally simple answers.&quot;&lt; ... *Only you can prevent millennials.*" CreationDate="2018-05-10T19:10:57.293" UserId="4158" />
  <row Id="12428" PostId="4717" Score="0" Text="Dangit, I meant declarations, not definitions. Common mistake." CreationDate="2018-05-10T19:43:41.473" UserId="5105" />
  <row Id="12431" PostId="4717" Score="4" Text="The Lie-to-Children paradigm is pervasive in education. In elementary school you learn that the sky is blue. In high school you learn that the sky appears blue because the atmosphere is blue. At university, you learn that the atmosphere filters out non-blue light to a greater extent than blue light. In grad school, you are led to wonder what the defintion of &quot;blue&quot; was anyway, the historical context of defining the sky as blue, and what the likely social, economic, and political ramifications of a non-blue sky would be. During your PhD, you claim that the sky is mauve and defend your model." CreationDate="2018-05-10T21:38:07.137" UserId="1931" />
  <row Id="12432" PostId="4717" Score="0" Text="Start the year with a disclaimer.  'Coding is a living art.  I will tell you some things cannot be done - then someone will come along and DO them!  And that's great.  Every impossibility is a challenge!  Just bear with me, let me teach you stuff that definitely CAN be done for now.'" CreationDate="2018-05-10T21:57:15.270" UserId="5132" />
  <row Id="12441" PostId="4717" Score="0" Text="Do you forbid code using topics not yet covered in class? Plenty of my programming classes wouldn't allow functions until covered for example... &quot;You CAN do that... but you're not allowed to in submitted code until/unless it's covered in class&quot;" CreationDate="2018-05-11T19:24:49.460" UserId="3220" />
  <row Id="12442" PostId="4717" Score="0" Text="Don't &quot;lie&quot; to your students: they are little bit older than 5. Either put a disclaimer that &quot;technically you can do this but we would not cover that right now&quot; or update your course (Yes CS stuff changes really fast). I don't know how your students but we were checking everything our professors told us and if we would find out that she/he doesn't know his stuff... Well.. the fact that &quot;he doesn't know anything&quot; passed from year to year was the least of the problems. Some students were complaining to university management about such &quot;professors&quot; and university took an action on one of such." CreationDate="2018-05-11T19:38:23.167" UserId="2105" />
  <row Id="12445" PostId="4717" Score="0" Text="Why do you want to stick with &quot;cannot&quot; instead of saying something like &quot;should not&quot;?  Is it to stick with a textbook or other teaching materials that aren't up to date?  It seems like a bad practice to me.  If a student later comes across this and remember what you said it will make them wonder what else you told them isn't &quot;entirely true&quot; either." CreationDate="2018-05-12T05:45:34.407" UserId="5154" />
  <row Id="12447" PostId="4717" Score="2" Text="Some lies are okay, some other lies aren't. For example, professors I know have taught students that reading the value of an uninitialized local variable in C and C++ will evaluate to &quot;whatever garbage was in that place in memory&quot;. That's a *disastrous* lie if you are teaching these languages seriously. Regarding the Java interfaces thing, I'd say the lie is generally harmless." CreationDate="2018-05-12T12:03:03.587" UserId="2793" />
  <row Id="12448" PostId="4717" Score="0" Text="Whenever you're lying, however, remember that your students *look up to you.* I've seen a lot of students who live by the words of their teachers for many years after graduation, and they may even dismiss new information that contradicts what their teacher said (until someone with *much higher authority* tells them otherwise). That's my strongest reservation when it comes to lying." CreationDate="2018-05-12T12:05:47.943" UserId="2793" />
  <row Id="12459" PostId="4717" Score="2" Text="*&quot;Is it better to lie to students or to be pedantic when teaching Intro CS?&quot;* Porque no los dos? :-)" CreationDate="2018-05-13T05:01:30.120" UserId="823" />
  <row Id="12460" PostId="4717" Score="1" Text="An insignificant inaccuracy can save a lengthy explanation." CreationDate="2018-05-13T09:14:09.380" UserId="5166" />
  <row Id="12466" PostId="4717" Score="1" Text="It's better to lie - and don't make a note of it - at the time. This is true of all teaching. As you go deeper into it, you can revisit, and expose, those lies." CreationDate="2018-05-13T23:14:15.207" UserId="4067" />
  <row Id="12487" PostId="4717" Score="0" Text="Related: [CppCon 2015: Kate Gregory “Stop Teaching C&quot;](https://www.youtube.com/watch?v=YnWhqhNdYyk)" CreationDate="2018-05-15T06:43:12.833" UserId="4892" />
  <row Id="12574" PostId="4717" Score="0" Text="@AlexanderM The issue isn't being willing to update my course. It's not wanting to confuse students by introducing more information than is needed. Intro CS classes tend to have high drop-out/failure rates, so I don't want to front load content that stronger students can get in later courses." CreationDate="2018-05-18T14:53:59.113" UserId="283" />
  <row Id="14448" PostId="4717" Score="0" Text="_functional interfaces were added with Java 1.8_ — **Corollary:** Java's &quot;functional interfaces&quot; are not interfaces. (This looks like an example of the [red herring principle](https://ncatlab.org/nlab/show/red+herring+principle).)" CreationDate="2019-03-02T16:50:04.617" UserId="3718" />
  <row Id="17110" PostId="4717" Score="0" Text="I love this question! Have you seen https://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD480.html ? Particularly the para starting : &quot;This disastrous blending&quot;...  I'm also sad to see from [meta](https://cseducators.meta.stackexchange.com/questions/481/users-shouldnt-be-told-theyre-asking-the-wrong-question) that you're considering dropping out of here. I wish — if only because this is a very dear-to-me question! — that you'll stay to discuss this (though yes, it's true for serious important questions SE is particularly badly misfitted)" CreationDate="2020-09-28T07:35:52.830" UserId="8837" />
  <row Id="18149" PostId="4717" Score="1" Text="my God this is a genius question that needs to be asked for the teaching of maths, physics, chemistry, biology etc. there are so many lie vs pedantic cases there" CreationDate="2021-08-19T19:08:28.360" UserId="10440" />
  <row Id="20395" PostId="4717" Score="0" Text="&quot;such as that, unlike abstract classes, interfaces cannot contain any code.&quot; but why would you need to say that?" CreationDate="2022-06-10T05:11:36.347" UserId="11932" />
  <row Id="12346" PostId="4718" Score="80" Text="Note that it's not just CS where this applies.  Physics professors should prefix any discussion of friction with &quot;This is the greatly simplified version of things.  If you want more detail, plan to get your doctorate in the subject.&quot;" CreationDate="2018-05-08T09:08:01.743" UserId="2781" />
  <row Id="12348" PostId="4718" Score="13" Text="Some say `public static void main(String[] args)` is the most powerful spell of all. The results are only limited by your imagination!" CreationDate="2018-05-08T09:22:54.090" UserId="1142" />
  <row Id="12351" PostId="4718" Score="64" Text="`public static void main(String[] args)` is the entrypoint for a frictionless, perfectly spherical Java program" CreationDate="2018-05-08T10:42:05.177" UserId="4731" />
  <row Id="12355" PostId="4718" Score="37" Text="Assume a spherical cow.jar in a vacuum." CreationDate="2018-05-08T16:02:11.653" UserId="5027" />
  <row Id="12356" PostId="4718" Score="1" Text="Related: [lie-to-children](https://en.wikipedia.org/wiki/Lie-to-children), &quot;a simplified explanation of technical or complex subjects as a teaching method for children and laypeople&quot;." CreationDate="2018-05-08T17:28:21.007" UserId="5077" />
  <row Id="12358" PostId="4718" Score="0" Text="+1 for a great answer, and props for figuring out how to add a Harry Potter reference!" CreationDate="2018-05-08T19:57:27.757" UserId="899" />
  <row Id="12362" PostId="4718" Score="4" Text="@LightnessRacesinOrbit: Java programs are never frictionless, but in their natural state with mass approaching infinity, they do approach becoming perfectly spherical." CreationDate="2018-05-08T23:43:44.407" UserId="1327" />
  <row Id="12365" PostId="4718" Score="2" Text="@PabloH I much prefer the Discworld version :)  It includes &quot;Lies to Wizards&quot;.  Being made by a computer. https://wiki.lspace.org/mediawiki/Lies-To-Children" CreationDate="2018-05-09T00:17:33.387" UserId="662" />
  <row Id="12393" PostId="4718" Score="13" Text="@Mark Mathematics, also. We definitely don't want to say things to first graders like, &quot;In studying addition we are really looking at an Abelian group (which will later be extended to a field by adding a second operator). Some of you may be questioning whether it's truly a group and what the cardinality of the underlying set is, due to your current understanding of numbers. So we will answer those questions by expanding our discussion to countably infinite sets and additive inverses.&quot;" CreationDate="2018-05-09T16:01:05.637" UserId="939" />
  <row Id="12394" PostId="4718" Score="5" Text="It may not be a bad idea to be pedantic *once*, as an explanation for why you aren't always going to go into detail. It also gives you a way to derail a student who wants to dig into the details at an inappropriate moment - they can check back during office hours (or whatever) if they want more detail." CreationDate="2018-05-09T16:10:18.140" UserId="5100" />
  <row Id="12396" PostId="4718" Score="0" Text="@PabloH has the correct idea.  My own preference is _abstraction_ in the CS sense, alternatively:  &quot;A _Wittgenstein's ladder_ is a simplified explanation of a technical or complex subject that is used as a teaching tool, despite being technically wrong.&quot; (cf wikipedia)" CreationDate="2018-05-09T17:16:58.150" UserId="3390" />
  <row Id="12411" PostId="4718" Score="0" Text="@JollyJoker And your computer memory and processing speed." CreationDate="2018-05-10T03:27:48.790" UserId="981" />
  <row Id="12436" PostId="4718" Score="0" Text="@ToddWilcox There is an algebraic structure called near-ring where addition does not need to be an Abelian group, https://en.wikipedia.org/wiki/Near-ring . Or was the idea that one lies to students that addition must be commutative?" CreationDate="2018-05-11T14:30:43.043" UserId="5145" />
  <row Id="12507" PostId="4718" Score="1" Text="&quot;don't lie in such a way that the student later needs to unlearn something&quot; -- Most important sentence in this answer, and often violated." CreationDate="2018-05-16T09:24:08.970" UserId="842" />
  <row Id="12508" PostId="4718" Score="0" Text="&quot;I'll also note that infants learn to speak a native language without everything being explained to them before they begin&quot; -- True. But: that takes years (decades, even) and regularly fails to produce speakers/writers with full command of their native tongue. Neither is really acceptable in (CS) education." CreationDate="2018-05-16T09:25:42.967" UserId="842" />
  <row Id="12512" PostId="4718" Score="0" Text="I broadly used the term &quot;black magic&quot; for parts of the boilerplate in a program people don't need to understand yet, but are asked to blindly copy for now." CreationDate="2018-05-16T15:40:52.183" UserId="2879" />
  <row Id="13097" PostId="4718" Score="0" Text="+1 My boggart is a professor that leaves out details and makes no mention of the omission." CreationDate="2018-07-25T19:07:26.223" UserId="5481" />
  <row Id="14662" PostId="4718" Score="0" Text="@ToddWilcox if you know a first grade teacher who knows abstract algebra, I'd love to meet them." CreationDate="2019-04-08T07:28:52.783" UserId="3529" />
  <row Id="16434" PostId="4718" Score="0" Text="I wonder if an honest lie is a lie at all :D This is another topic, but I like the way you put it in catchy terms. I also like the overall attitude towards (learning) human beings which is evident in your text. +1! @Buffy" CreationDate="2020-05-03T05:41:53.160" UserId="9097" />
  <row Id="20394" PostId="4718" Score="0" Text="It's funny, learning charms at Hogwarts is what I tell my students that programming is emphatically not, and that there is an underlying logic and structure to programming languages, which they should aim to learn....  But that they can't learn it all at once so they have accept some boilerplate at the start, but they shouldn't be comfortable with that in the long run.  I would say &quot;never lie&quot;, you don't need to be pedantic to avoid lying, you just don't need to tell all the truth at once." CreationDate="2022-06-10T05:06:15.820" UserId="11932" />
  <row Id="12337" PostId="4720" Score="2" Text="Welcome to CSEducators. Say a bit more, please. Does the instructor actually give a visual signal to indicate &quot;fuzzy truth&quot;? That would be cool, I think." CreationDate="2018-05-08T00:55:58.107" UserId="1293" />
  <row Id="12340" PostId="4720" Score="0" Text="Welcome to [cseducators.se]. It is always helpful to have the insightful feedback from students on questions, and answers, posted here. Often what the instructors &quot;thinks&quot; they are passing on is not the same as what the students &quot;think&quot; they mean. Knowing when it is _not_ working is just as important as knowing when it does work. I hope we will see more of your words on the site. Glad you could join us." CreationDate="2018-05-08T01:16:42.273" UserId="104" />
  <row Id="12341" PostId="4720" Score="7" Text="I actually do sometimes visibly cross my fingers or use a crossed fingers  icon on a slide." CreationDate="2018-05-08T01:22:11.087" UserId="283" />
  <row Id="12359" PostId="4721" Score="2" Text="I think this is a good answer but probably not one that should be applied to other contexts. For example, one shouldn't preface a lie to one's spouse with &quot;for the purposes of our marriage&quot;. ;-)" CreationDate="2018-05-08T20:49:49.493" UserId="283" />
  <row Id="12408" PostId="4721" Score="0" Text="@EllenSpertus I figured this being CS educators and not interpersonal or something along those lines, the context would limit the scope of the answer enough" CreationDate="2018-05-10T00:53:23.987" UserId="2050" />
  <row Id="12450" PostId="4721" Score="1" Text="For the purposes of this website..." CreationDate="2018-05-12T17:06:07.927" UserId="1636" />
  <row Id="12354" PostId="4722" Score="9" Text="Welcome to [cseducators.se]. Great suggestion. I hope we'll see more ideas from you on the site." CreationDate="2018-05-08T13:54:53.767" UserId="104" />
  <row Id="12371" PostId="4722" Score="5" Text="Good suggestion, it gracefully deals with a huge problem in 2 words :)&#xA;&quot;As a rule&quot;/&quot;As a general rule&quot; could also be used in the same place." CreationDate="2018-05-09T10:41:43.800" UserId="5062" />
  <row Id="12397" PostId="4722" Score="2" Text="This is good. I was advanced for my course and when teacher &quot;lied&quot; I thought it was because they didn't know better. If they said &quot;generally speaking&quot; it peaked my curiosity to look at it further." CreationDate="2018-05-09T17:34:26.410" UserId="5103" />
  <row Id="12400" PostId="4722" Score="3" Text="The phrase &quot;generally speaking&quot; is great, because it invites a student to treat something applies in the cases that are going to follow, but discourages excessive inferences that might lead the student astray." CreationDate="2018-05-09T19:12:25.857" UserId="2073" />
  <row Id="12430" PostId="4722" Score="1" Text="+1 I'd suggest &quot;should not&quot; over &quot;do not&quot; - that way it begins to act as a red-flag to highlight a potentially bad programming practice.   There will be times it may be the right thing to do, but it then leads the students to check that code carefully and encourage them to justify their actions if/when they do so." CreationDate="2018-05-10T20:31:43.360" UserId="2818" />
  <row Id="12353" PostId="4723" Score="0" Text="&quot;...choose your battles and let sleeping monsters lie&quot;. OTOH, if the road ahead is twisty and has obstacles it is good to put up a warning sign. If students think it is going to be easy, they may wind up blaming their own skills when it turns out harder than they expected. In fact, the topic at hand may be inherently difficult, even for the professionals." CreationDate="2018-05-08T12:37:31.213" UserId="1293" />
  <row Id="12360" PostId="4723" Score="0" Text="When my instructor crosses fingers I will keep an eye out and often find the exception to the rule during my work after the lecture. This leads to complete understanding(and excitement) on my part.&#xA;&#xA;When I know an instructor prefers to lie vs announce a half-truth I watch their speech and body language for signs that they are lying so I can keep it in mind for my studies later.&#xA;&#xA;I simply prefer to not have that extra strain on my attention during a lecture. (this is all my personal experience as a past and current student)" CreationDate="2018-05-08T20:51:28.520" UserDisplayName="user5052" />
  <row Id="20525" PostId="4725" Score="0" Text="@NOTCSEducator, fyi, the link &quot;moved to chat&quot; in your comment points to https://chat.stackexchange.com/rooms/71/the-h-bar , which seems to be something completely different..." CreationDate="2022-07-06T12:46:12.797" UserId="652" />
  <row Id="12415" PostId="4726" Score="1" Text="You could also say up front that the course will be teaching Java 1.5 (or whatever fixed version).  Then extensions in newer versions can be covered in the last lecture." CreationDate="2018-05-10T06:34:31.683" UserId="5115" />
  <row Id="12429" PostId="4726" Score="0" Text="My only concern is that 'for now' is invariably an invitation to some smart-alec to do it." CreationDate="2018-05-10T20:24:17.443" UserId="2818" />
  <row Id="12433" PostId="4726" Score="15" Text="@JamesSnell Speaking as a lifelong smart-alec I can assure you that I need no invitation. Pretending no one is hiding behind the curtain will only result in me pulling on your drapes. However, a &quot;don't worry about that for now&quot; and a conspicuous wink will put a smile on my face and keep my butt in my seat." CreationDate="2018-05-11T10:01:25.953" UserId="1401" />
  <row Id="12363" PostId="4727" Score="2" Text="I spent a fruitless year trying to figure out prolog in 1985. When I finally got something working (towers of hanoi) , I redid it in pascal in half the lines and about 15 minutes, and I understood what I had written. I have never looked at prolog again." CreationDate="2018-05-08T23:44:32.073" UserId="1537" />
  <row Id="12366" PostId="4727" Score="0" Text="Why would you use it as 'programming language' (instead of a tool to teach aspects of logic and logic formulas, ... )? When I started my studies, we had two different subjects, one was programming and another was logic. In the ladder we solved (simple but complex for us) logic problems with logic programming." CreationDate="2018-05-09T05:38:13.173" UserId="5089" />
  <row Id="12361" PostId="4729" Score="0" Text="I agree wholeheartedly with your conclusion, but am not sure I agree with (6). There are compelling reasons to use teaching languages -- there aren't many jobs available writing Racket, but [HTDP](http://www.htdp.org/) is rightly lauded as a curriculum that teaches concepts applicable across a wide range of languages, and its use of Scheme is highly defensible: Becoming fluent in languages with a wide range of concepts, even when not actively used outside academia, makes it far easier to learn mainstream languages that adopt those concepts in the future (as is happening today with lambdas &amp;c)." CreationDate="2018-05-08T21:06:55.540" UserId="5084" />
  <row Id="12375" PostId="4729" Score="1" Text="As a third party, it seems to me that Charles' point addresses &quot;*Why teach a student something that won't get them hired?*&quot;. I would also note that I interpreted &quot;*Not that I find that agreeable but that is reality*&quot; as referring specifically to the previous sentence rather than to the whole paragraph." CreationDate="2018-05-09T12:37:11.890" UserId="1219" />
  <row Id="12380" PostId="4729" Score="0" Text="I modified a word to make it (hopefully) match your intentions more clearly.  (Feel free to roll back if I erred)  I think we were all reading that sentence the way @PeterTaylor did." CreationDate="2018-05-09T13:44:54.527" UserId="27" />
  <row Id="12386" PostId="4729" Score="1" Text="Peter interpreted my objection correctly -- the argument seemed to apply not just to Prolog, but to *any* programming language not currently in widespread use outside academia. Features from academia make it into commercial languages over time -- see the introduction of lambdas to widespread commercial use in Java 8, CSP in Golang, etc; people who learned academic languages with those features would be better prepared to use those today, even if those languages do not themselves have commercial value." CreationDate="2018-05-09T15:14:31.413" UserId="5084" />
  <row Id="12387" PostId="4729" Score="0" Text="(See also the &quot;Blub Paradox&quot; from Paul Graham's &quot;Beating the Averages&quot;, discussing the importance of teaching high-level concepts. Particularly, the argument that *programming languages are not merely technologies, but habits of mind as well, and nothing changes slower* is something that informs my position re: importance of exposure to a broad range of paradigms early)." CreationDate="2018-05-09T15:17:38.080" UserId="5084" />
  <row Id="12391" PostId="4729" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/77249/discussion-between-charles-duffy-and-guy-coder)." CreationDate="2018-05-09T15:21:22.080" UserId="5084" />
  <row Id="12499" PostId="4729" Score="0" Text="If common use in industry were the core requirement for choosing a language to teach, we'd all still be programming COBOL and FORTRAN. The BASIC and PASCAL languages both started as teaching languages. They were widely used in industry for a time, and their descendant offspring Visual Basic keeps their legacy alive." CreationDate="2018-05-15T17:07:13.383" UserId="1537" />
  <row Id="18211" PostId="4730" Score="0" Text="The problem is people naturally act (and think) procedurally (and object orientation is a natural extension), non-procedural (functional, logical, string matching, ...) languages are against all we've learnt about problem solving since we were toddlers. Recursion is a another case in point." CreationDate="2021-08-30T01:08:43.580" UserId="5219" />
  <row Id="12368" PostId="4731" Score="2" Text="To be fair, students &quot;losing confidence&quot; can be a good thing - if it leads them to being critical of everything they learned, they can *do better*. It can also help them learn in the first place, by making things more interesting. But that's probably a minority (at least in modern school systems); most people will carry their misconceptions to the grave (or the next serious project where this lie actually matters :P)." CreationDate="2018-05-09T07:27:29.093" UserId="1816" />
  <row Id="12443" PostId="4731" Score="0" Text="@Luaan, your comment is a good example of false information (a lie).  No, it is *not* a good thing to make your students lose confidence." CreationDate="2018-05-12T02:55:00.093" UserId="1103" />
  <row Id="12446" PostId="4731" Score="1" Text="@Wildcard That's why the *if* is there - I'm not saying you should try it on purpose (or keep teachers that are horrible). It's more like a final consolation than a study plan :) But I guess it could be worded differently - it's a good thing if students don't take their teacher as an authority. That doesn't mean quite the same thing as &quot;ignore that stupid old fart&quot; - a teacher that isn't afraid to admit he doesn't understand or know something is a great bonus. Not assuming everything you say is right just because you're a teacher really leads to *more* confidence." CreationDate="2018-05-12T08:16:57.867" UserId="1816" />
  <row Id="12444" PostId="4732" Score="0" Text="This doesn't *quite* answer the question." CreationDate="2018-05-12T02:56:01.780" UserId="1103" />
  <row Id="12451" PostId="4732" Score="3" Text="This is also what the asker is trying to ask about, whether this is ok. And frankly, I disagree with you. We should *not* be teaching children that atoms are the smallest unit; the only reason we do is because that was the state of the art a long time ago. It's not  anymore, and we should stop saying it. Physics in particular is rife with this problem. Students get taught Newtonian gravity as a &quot;Law of Gravity&quot; then hear &quot;Newton was Wrong, Einstein said so&quot; and this decreases trust in science. We should be saying &quot;This was the Newtonian Approximation, it's good enough in most cases.&quot;" CreationDate="2018-05-12T18:09:16.223" UserId="5158" />
  <row Id="12500" PostId="4732" Score="1" Text="This *is* a direct answer to her question.  My belief is that &quot;simplifying a subject to make it easier to learn&quot; is not a lie. So don't feel guilty about it." CreationDate="2018-05-15T18:13:32.973" UserId="5072" />
  <row Id="12502" PostId="4732" Score="0" Text="@JKreft Yes, &quot;Newtonian Approximation&quot;, fine - that probably *is* better." CreationDate="2018-05-15T18:40:19.633" UserId="5072" />
  <row Id="12503" PostId="4732" Score="1" Text="Y'all do what you want, but if someone (especially someone that doesn't know calculus) learns &quot;Law of Gravity&quot; and wants to talk to me about it I'm happy to talk. At no point in that conversation will I feel a need to tell them that they are wrong because Einstein. Computer Science is hard enough for most people - don't erect barriers to these students learning, getting a good grade, then *wanting* to learn more." CreationDate="2018-05-15T18:41:34.637" UserId="5072" />
  <row Id="12511" PostId="4732" Score="2" Text="It's not that they want to talk to you about it. It's that they go out of class and say &quot;I was just taught today that everything I thought I knew about gravity was wrong and my middle school teacher lied to me/didn't know better.&quot; It turns them off of learning more. As I said, Physics is *especially bad* about being taught as if the last hundred years of advances didn't exist and then re-teaching them &quot;Oh, all that stuff is out of date&quot;. It inhibits learning." CreationDate="2018-05-16T13:28:39.327" UserId="5158" />
  <row Id="15284" PostId="4732" Score="0" Text="+1 to Lying To Children.  These are college students, though, so don't say &quot;I'm lying to you&quot;.  Say, &quot;This is the first approximation needed for Comp Sci 101.  You'll learn more next year.&quot;" CreationDate="2019-07-05T02:29:29.130" UserId="3132" />
  <row Id="12369" PostId="4734" Score="5" Text="Welcome, this is a very good question. It fits well here. We don't care who you are (it is not “a site for educators of computing”, it is “a site about education of computing”). I will not answer, except to say that I think there is far too much measuring ability, and not enough educating, in school (and universities). You can not make something grow by measuring it, you have to feed it. see work of Carol Dweck. e.g. https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve" CreationDate="2018-05-09T10:28:51.400" UserId="204" />
  <row Id="12376" PostId="4734" Score="5" Text="*&quot;...so I attribute* ***all*** *of my learning to ...&quot;* Wow, that's a strong statement.  Colleagues are wonderful, but don't be afraid to take *some* credit.  You also took the time and put in the effort to actually learn the things." CreationDate="2018-05-09T12:39:58.420" UserId="27" />
  <row Id="12404" PostId="4734" Score="0" Text="In my CS course, collaboration is allowed and even encouraged... as long as parts are attributed correctly." CreationDate="2018-05-09T22:32:13.507" UserId="1086" />
  <row Id="12382" PostId="4736" Score="1" Text="This is a great answer, and gives some insight as to some of the reasons and motivations that are worth looking into closer. I don't plan on weaponizing what you've said here, I'm just looking for good leads to discuss with faculty and try and come up with some potential new approaches to try. This answer satisfies that fairly well. Thanks!" CreationDate="2018-05-09T14:50:24.317" UserId="813" />
  <row Id="12412" PostId="4736" Score="0" Text="This is a great answer. &quot;...it can be difficult to determine who the chief contributors are so as to provide appropriate rewards (and sanctions, of course).&quot; - if the students already have a foundation in version control (say, Git) then this task is fairly straightforward." CreationDate="2018-05-10T03:36:15.433" UserId="4513" />
  <row Id="12418" PostId="4736" Score="0" Text="+1 That may well be the first time I've seen someone use the word grok according to its initial definition." CreationDate="2018-05-10T11:24:17.750" UserId="2894" />
  <row Id="12383" PostId="4737" Score="0" Text="Mentioning that these goals sometimes conflict each other is definitely worth noting... That's an important perspective to keep, that sometimes you have to stroke a balance between them." CreationDate="2018-05-09T14:51:31.307" UserId="813" />
  <row Id="12385" PostId="4738" Score="1" Text="I admire the flexibility in how you conduct your labs... The labs in our curriculum are very structured, and using sites like StackOverflow is a big no-no. I'd love the opportunity to change and allow students more flexibility in solving the problems, but one good question is how you encourage the students who have a good understanding of the material to share their knowledge with other students instead of simply completing the assignment and leaving." CreationDate="2018-05-09T14:56:16.243" UserId="813" />
  <row Id="12384" PostId="4739" Score="1" Text="I've also noticed the pattern of the &quot;second population&quot; of students, and am constantly trying to think about ways to encourage students to go further to understand... I think it's due to students simply focusing on getting their assignments done as quickly as possible due to other priorities. Addressing that might even deserve a question of its own." CreationDate="2018-05-09T14:53:28.737" UserId="813" />
  <row Id="12424" PostId="4740" Score="3" Text="From my experience of training adults to get jobs as programmers over the last few years, the equation looks much more like: bool hireableCandidate = computerFluency AND generalBusinessKnowledge AND multipleHighLevelLangs AND databaseDesign AND sqlExperience AND dataAccessProgramming AND windowsProgramming AND otherOSexperience AND webProgramming AND unitTesting AND pairProgramming AND teamSkills AND *-- System halted: Candidate Lifetime exceeded --*" CreationDate="2018-05-09T18:08:37.450" UserId="5106" />
  <row Id="12410" PostId="4741" Score="0" Text="I also think these theories you mentioned at the bottom) are important, but in the production environment, its cost may be too high, you know. Some interviewer sometimes asks the interviewee to give reasonable test case(at least in Chinese)." CreationDate="2018-05-10T01:50:48.477" UserId="5065" />
  <row Id="12977" PostId="4741" Score="0" Text="You have a limited notion of &quot;functional programming&quot;. Also ironically you give unnecessarily procedural semantics for Prolog. I agree the poster's &quot;fundamentists&quot; are misreading &quot;programs&quot; as &quot;programming&quot;." CreationDate="2018-06-21T21:38:45.633" UserId="2485" />
  <row Id="12419" PostId="4744" Score="2" Text="Quantum computers are supposedly Turing complete, and no more. So just different algorithms, to take advantage of the hardware." CreationDate="2018-05-10T12:25:15.053" UserId="204" />
  <row Id="13117" PostId="4744" Score="0" Text="Take a peek at an off-the-beaten-path language like FORTH. It intertwines data and code." CreationDate="2018-08-02T18:25:56.040" UserId="5219" />
  <row Id="12399" PostId="4747" Score="1" Text="I wouldn't correct mid presentation. But it might be worth touching on a few things after they're done." CreationDate="2018-05-09T19:09:04.900" UserId="30" />
  <row Id="12401" PostId="4748" Score="1" Text="I hadn't considered having students send an update. What's nice is that they wouldn't  have to say if I pointed out the mistake or if they discovered it through subsequent research." CreationDate="2018-05-09T19:17:37.943" UserId="283" />
  <row Id="12402" PostId="4748" Score="0" Text="@EllenSpertus, yes. Exactly my point. They learned, they passed on the learning. Copacetic. In fact they might learn something even if they didn't err and might want to add it to the written report. The questions they get might induce changes." CreationDate="2018-05-09T19:19:19.077" UserId="1293" />
  <row Id="12440" PostId="4749" Score="0" Text="Good idea. Unfortunately, there isn't usually time for follow-up presentations, but email works." CreationDate="2018-05-11T17:24:30.077" UserId="283" />
  <row Id="12420" PostId="4750" Score="0" Text="Is this something that the other CS faculty at your university are also concerned about, or is this question purely abstract? Which is to say, is this about what *you* should do, or about what your *department* should do?" CreationDate="2018-05-10T12:47:04.400" UserId="27" />
  <row Id="12422" PostId="4750" Score="0" Text="This is a nationwide problem. Its mainly something that is &quot;bugging me&quot;. I have no responsibility regarding this issue. Although I didn't wrote that in the question, I was not suggesting the use of a test to eliminate the candidates (i read a lot about the “geek gene”). I see it as a formative thing like: &quot;Hum, I guess you are not 100% fitted for this but do as you wish!&quot;.  When I posted the question, I was already expecting the &quot;politically correct&quot; answers. The problem is real (at least here) and no one seems to care." CreationDate="2018-05-10T14:06:37.280" UserId="1144" />
  <row Id="12437" PostId="4750" Score="0" Text="Is there no other aspect to the selection process? In the UK the candidate normally submits a written statement about themselves (and why they are applying) as well as an interview." CreationDate="2018-05-11T15:22:01.777" UserId="1874" />
  <row Id="12438" PostId="4750" Score="1" Text="@JeffUK Unfortunately, no! The only aspect that counts is the student's grades... Here, the student selects the University (and the program) when s/he applies, and not the opposite. Actually, on a given day in September, all the Universities are informed about the list of students that will enroll in their programs by a National Agency. The Universities have ZERO control." CreationDate="2018-05-11T16:49:09.810" UserId="1144" />
  <row Id="12510" PostId="4750" Score="1" Text="@NunoGilFonseca then I guess your only option is to dissuade them from applying.  See &quot;Is CS a good choice for me&quot; here http://ualr.edu/computerscience/prospective-students/frequently-asked-questions/#u2 I've seen others being more blunt about &quot;Just because you like playing computer games, doesn't mean this is the right course for you&quot;" CreationDate="2018-05-16T12:25:42.383" UserId="1874" />
  <row Id="15981" PostId="4750" Score="0" Text="+1 for this question. I also could have asked the same thing (at an open-admissions U.S. community college)." CreationDate="2019-12-23T04:58:42.363" UserId="8137" />
  <row Id="12405" PostId="4751" Score="1" Text="Great first post here. Welcome to [cseducators.se]! Can you site any of that evidence? It would be great to see." CreationDate="2018-05-09T23:53:56.320" UserId="27" />
  <row Id="12407" PostId="4751" Score="1" Text="@BenI. Thank you! Just added some references." CreationDate="2018-05-10T00:52:32.117" UserId="5109" />
  <row Id="12414" PostId="4751" Score="0" Text="Thanks for that link! That's a great example of one way to do it! I appreciate the research as well!" CreationDate="2018-05-10T04:21:01.467" UserId="813" />
  <row Id="12416" PostId="4752" Score="0" Text="I sure understand that it's not up to some agency to decide what the students should learn, but we are talking about approx. 2500 students per year... Don't you think that something should be done... Well, in the end, they may use this experience to realize that CS is not for them and move forward, but again approx 25% wrong choices? Maybe we should blame marketing and the TV shows for providing a wrong idea about CS..." CreationDate="2018-05-10T11:06:28.800" UserId="1144" />
  <row Id="12423" PostId="4752" Score="1" Text="I'd love to hear more about that US Supreme Court Case from 1971, any references?" CreationDate="2018-05-10T15:33:06.690" UserId="3677" />
  <row Id="12439" PostId="4752" Score="2" Text="@KellyS.French Reference added to answer." CreationDate="2018-05-11T17:20:45.393" UserId="104" />
  <row Id="12417" PostId="4753" Score="1" Text="I sure agree with what you said! And yes, the demand is also high here. The thing is: in Portugal; you select who will be admitted in a program having into account their high school grades. You can never ask them why do they want to do it. But, hey, I'm fine, I choose CS, because I like, and am very happy with my choice, the thing is that every year approx. 2500 students make a bad choice!" CreationDate="2018-05-10T11:15:15.800" UserId="1144" />
  <row Id="12475" PostId="4753" Score="1" Text="I've had a student struggling in my Linux Admin I class (so about halfway through a 2 year degree OR at the end of a 1 year certificate) who couldn't follow a simple list of directions (1 - download ISO image at ... 2 - Burn ISO image using GUI utilities, etc).  Asked him why he was having problems, he had some literacy issues.   I asked him why he got into the IT field, he said &quot;because my high school guidance counselor told me it would be working inside instead of roofing like my dad&quot;." CreationDate="2018-05-14T17:52:39.517" UserId="662" />
  <row Id="12478" PostId="4753" Score="0" Text="Maybe he will find enlightenment somehow. All who struggle are not lost. Some have a longer and harder path than others. As teachers we do what we can, but success doesn't lie behind every bush." CreationDate="2018-05-14T18:33:09.440" UserId="1293" />
  <row Id="12449" PostId="4757" Score="0" Text="Welcome to [cseducators.se]! This is a very interesting question. Could you perhaps explain, in more details, what mathematical background the students **do** have?" CreationDate="2018-05-12T13:34:18.837" UserId="150" />
  <row Id="17754" PostId="4757" Score="1" Text="Since this is a (discrete) math question, it would likely fit better on SE Math Educators." CreationDate="2021-03-04T02:52:11.230" UserId="8137" />
  <row Id="12452" PostId="4759" Score="0" Text="Welcome to CSEducators. You seem to be simply asking for opinions, rather than how to teach. We try to put more emphasis here on how to do things. Maybe the situation about FP will change." CreationDate="2018-05-12T23:49:22.320" UserId="1293" />
  <row Id="12453" PostId="4759" Score="0" Text="Thanks, can you suggest a better place for this type of question?" CreationDate="2018-05-12T23:50:28.693" UserId="5161" />
  <row Id="12454" PostId="4759" Score="0" Text="The ACM SIGCSE mailing list might be a start. Membership required, though." CreationDate="2018-05-12T23:52:04.053" UserId="1293" />
  <row Id="12455" PostId="4759" Score="0" Text="Part of the problem is probably based on employ-ability. Wages might be higher in functional programming positions, but a high wage only applies when there is a job to be had. Check out the current SO [Developer Survey results](https://insights.stackoverflow.com/survey/2018/#technology-programming-scripting-and-markup-languages)" CreationDate="2018-05-13T00:59:56.553" UserId="104" />
  <row Id="12456" PostId="4759" Score="2" Text="I don't really think employ-ability would be affected.  Learning FP first would make you better at any language, because you would more instinctively avoid shared mutable state, better encapsulate effects in the type system, etc.  Also, few people end up working exclusively in the languages they learned in school.  Learning new languages on the fly is par for the course in a programming job.  This is more about what fundamental techniques are the right ones to learn first." CreationDate="2018-05-13T02:15:15.557" UserId="5161" />
  <row Id="12458" PostId="4759" Score="1" Text="It's probably because functional programming is still an esoteric skill, so there are a limited number of people who can do and teach it well." CreationDate="2018-05-13T03:57:16.237" UserId="1537" />
  <row Id="12465" PostId="4759" Score="1" Text="We should note this related question: https://cseducators.stackexchange.com/q/3558/1293" CreationDate="2018-05-13T18:58:24.213" UserId="1293" />
  <row Id="12575" PostId="4760" Score="0" Text="True, but no student is going to go straight from CS 1 to a job interview or industry; nor would I expect them to do independent programming in which the oversimplification misled them, before taking a more advanced class or doing additional reading. In upper-division classes, I am much more rigorous." CreationDate="2018-05-18T14:58:56.543" UserId="283" />
  <row Id="12594" PostId="4760" Score="2" Text="You are not in control of when your students take initiative to make use of what you teach them." CreationDate="2018-05-19T10:41:52.927" UserId="2389" />
  <row Id="12473" PostId="4761" Score="0" Text="Good points about the inertia and meeting expectations for entry-level positions.  I wonder if it still might be beneficial to teach both paradigms in introductory courses, so that when it comes to learning basic data-structures, like implementing a red-black tree, the student can implement the tree in a language like ML or Haskell, where inductive types are simply defined in a few lines of code, as opposed to implementing the tree in C or Java, where it would be much more verbose and the functionality of the tree would be obfuscated by the mechanics of the language." CreationDate="2018-05-14T17:20:25.010" UserId="5161" />
  <row Id="12476" PostId="4761" Score="2" Text="I think a bad idea. Students can wind up thrashing mentally. Paradigms, if they truly are are distinct. Their mental models can conflict. Give students a solid base in one before you try to teach them to &quot;think different&quot;. Then you can be more clear about the advantages of each." CreationDate="2018-05-14T18:28:06.287" UserId="1293" />
  <row Id="14106" PostId="4761" Score="0" Text="&gt;&gt;&gt; I'll note that C++ was derived from Dijkstra's ideas primarily (via Simula), whereas Java's core concepts come from Alan Kay. &#xA;&#xA;Hm. Can you give an example?" CreationDate="2018-12-28T18:11:09.010" UserId="6387" />
  <row Id="14107" PostId="4761" Score="0" Text="@paus, I don't understand what you desire.  Stroustrup explicitly mentions Simula in his writings as a major influence. Java, like Smalltalk (inspired by Kay) is a class-based language with objects on the heap." CreationDate="2018-12-28T18:13:40.697" UserId="1293" />
  <row Id="14108" PostId="4761" Score="0" Text="So, you mean the difficulty of understanding for high-level abstractions of programming, not choosing right programming language?" CreationDate="2018-12-28T18:27:02.647" UserId="6387" />
  <row Id="14109" PostId="4761" Score="1" Text="I think that most of the students have an experience like the following: &quot;Once we tried to write something with our friends in the class on C++/Python/PHP, as hard as we could, and based on our experience we got it right&quot;. Although all my generation started from BASIC and Pascal, I don't think that they had an impact on the understanding of deeper principles, they only gave basic concepts. Other stuff we had to drink from industrial languages, not educational ones." CreationDate="2018-12-28T18:34:35.920" UserId="6387" />
  <row Id="14112" PostId="4761" Score="0" Text="&gt;&gt;&gt;  I'll note that C++ was derived from Dijkstra's ideas primarily (via Simula), whereas Java's core concepts come from Alan Kay. ---------- Nope. In Java there is no such OOP like in Smalltalk. There is an implementation like in Simula77/C++. In Ruby we have something like Kay's ideas - objects are trying to send messages to each other." CreationDate="2018-12-29T08:11:40.160" UserId="6387" />
  <row Id="14113" PostId="4761" Score="0" Text="@paus, sorry, but you are wrong about Java. True that Ruby has a more pure implementation. But in Java, like smalltalk, objects are on the heap (not the stack) and are accessed via reference variables. And yes, objects send messages to one another. Java has a C-like substrate of non-objects but its objects are like those of Smalltalk, not those of Simula or C++. In C++ to get behavior like smalltalk (virtuality) you need to create an explicit pointer to an object (usually on the heap). You are missing something, I think." CreationDate="2018-12-29T11:31:17.090" UserId="1293" />
  <row Id="14115" PostId="4761" Score="0" Text="@Buffy Java has the same table of methods like in C, and the search for the called method is done through it. Not like &quot;I'm getting any message but for some responding 'I'm not able to do it'&quot;. Heap there or not - it's the detail of the runtime implementation. But how exactly the processing of messages is done - this is the implementation of the very principle of objectness and highly impact the idiomatics. And it's a huge gap between Java and SmallTalk, unlike Java and C, where the difference in the smartness of pointers. And Java has Simula-like OOP, with less poor implementation than in C++" CreationDate="2018-12-30T12:11:05.830" UserId="6387" />
  <row Id="14116" PostId="4761" Score="0" Text="@paus, Finally, I see the problem. You are, in essence, saying that since Java _variables_ have type that it is not &quot;Smalltalk like&quot;. True that Smalltalk has untyped variables, but that isn't the central issue. The &quot;table of methods&quot; to which you refer, in Java only tells the runtime how to find a method, but _NOT what the method is_. The method itself is resolved at runtime through the object, not through the reference. It permits a more efficient runtime and earlier (compile time) error discovery. See: https://cseducators.stackexchange.com/a/5133/1293." CreationDate="2018-12-30T13:35:37.587" UserId="1293" />
  <row Id="14117" PostId="4761" Score="0" Text="But having programmed in all of these languages, the mental model of programming in Java is the same as that of Ruby and very unlike that of C++ or Simula. Of course, the Ruby programmer need to take a bit more care that programs don't fail at runtime. But compile time method resolution is possible in Simula, and is not in Java. You cannot, in principle, know by reading a Java program which method will be executed except in those cases in which you know the most specific type of the object. That is what polymorphism gives you. There isn't &quot;one&quot; table of methods, there are several." CreationDate="2018-12-30T13:39:46.770" UserId="1293" />
  <row Id="14118" PostId="4761" Score="0" Text="But Ruby still needs a way to do resolution. In this case, something like a hash map rather than a table will do the job. So the essential difference is whether an offset into a table (owned by the object) or a key into a map is used for resolution. That isn't really very different." CreationDate="2018-12-30T14:04:16.100" UserId="1293" />
  <row Id="14121" PostId="4761" Score="0" Text="@Buffy polymorphism is available in C++ too. The gist is not to know which method is called. The gist is in how NOT to know. You are unconditionally sending messages to the object, which only decides how to react to them. There is no any other way to check whether the object responds or not to the message - only through sending an additional message like &quot;describe what you are and what you can&quot;. In languages with the table of methods resolving is done by the compiler without any involvement of the object.  In Ruby, you can intercept the call of the method, what is Smalltalk-like in some sense." CreationDate="2018-12-30T22:19:24.680" UserId="6387" />
  <row Id="14122" PostId="4761" Score="0" Text="@paus, yes, I know about C++. But you need to use an explicit pointer to object to achieve it. Let me repeat, the table used in Java only defines where the object can find the method. If you use the same code but it refers to different objects the table will be different as it is part of the object. The compiler can't resolve to the actual method. Only the object itself knows where its methods are and the object doesn't exist until runtime. And the reference to the object doesn't contain the most explicit type of the object. It is a runtime resolution, not compile time. You are missing that." CreationDate="2018-12-30T22:27:58.113" UserId="1293" />
  <row Id="14133" PostId="4761" Score="0" Text="@Buffy In Smalltalk, the message is a string with names of the methods and names of the parameters. The object can forward it as a whole to another object, for example, and add a couple of parameters along the way. The closest analogy for that in C++ - RPC and other protobuf. I wrote the similar lib to connect independent parts of the program. In dynamically-typed languages, it's done by transferring the table, where keys are names of params. Objects are pointers in Java, they're only in heap.  The closest analogy in C++ - shared_ptr, but syntax overhead won't' make you happy." CreationDate="2019-01-02T21:14:58.750" UserId="6387" />
  <row Id="14134" PostId="4761" Score="0" Text="@paus. This reads like a very naive view of how an interpreter might work. You seem to have some serious misconceptions about how languages are translated and executed." CreationDate="2019-01-02T21:34:17.417" UserId="1293" />
  <row Id="14135" PostId="4761" Score="0" Text="@Buffy which one is &quot;interpreter&quot; among them? What exactly do you mean?" CreationDate="2019-01-02T21:42:40.580" UserId="6387" />
  <row Id="12468" PostId="4762" Score="4" Text="Possible duplicate of [How can we teach good naming practice for students learning Java?](https://cseducators.stackexchange.com/questions/4594/how-can-we-teach-good-naming-practice-for-students-learning-java)" CreationDate="2018-05-14T12:06:04.097" UserId="1293" />
  <row Id="12469" PostId="4762" Score="0" Text="@Buffy your question seems to be about teaching students to use good names. My question is about teachers using good names (choosing languages, and libraries etc.)." CreationDate="2018-05-14T12:06:07.637" UserId="204" />
  <row Id="12470" PostId="4762" Score="0" Text="I note that this isn't a research question. In fact it would likely be considered unethical to do the experiment as you would be subjecting some students to practices that you already think might be worse than others. This sort of thing makes ed research very tricky. You aren't allowed to disadvantage someone just to learn something." CreationDate="2018-05-14T13:14:12.680" UserId="1293" />
  <row Id="12474" PostId="4762" Score="1" Text="@Buffy so instead we continue to subject all pupils to a practice that we think may be worse. That is logic (should the members of the ethics board do a CS course?)." CreationDate="2018-05-14T17:49:19.420" UserId="204" />
  <row Id="12477" PostId="4762" Score="0" Text="You are misconstruing my words. Please stop. If you think something is an improvement, use it. If you later get evidence otherwise, stop it." CreationDate="2018-05-14T18:29:45.733" UserId="1293" />
  <row Id="12484" PostId="4762" Score="4" Text="I do not see this as a duplicate of the question about teaching naming practices. As the OP has stated this is about the names already assigned in existing libraries, and language bases, and how those names affect the students' learning." CreationDate="2018-05-14T23:15:09.503" UserId="104" />
  <row Id="12976" PostId="4762" Score="1" Text="You need to teach them that names mean nothing. That includes disabusing them of the notion that names mean something. Names label things." CreationDate="2018-06-21T21:20:58.297" UserId="2485" />
  <row Id="12987" PostId="4762" Score="0" Text="@philipxy can you elaborate? Are you saying that because the compile just sees the names as labels then so should we? This is a valid point of view, but if we see it that way then we should act on our belief and use truly abstract sequential names, and not think about them. `aaaaaaaa`, `aaaaaaab`, `aaaaaaac`, etc." CreationDate="2018-06-22T11:06:54.727" UserId="204" />
  <row Id="12995" PostId="4762" Score="1" Text="Names are labels. In general we can infer nothing from the names of things. (This has nothing to do with implementation, which has nothing to do with the meanings of programs.) In everyday life we are used to names frequently also being descriptive of their referents. But this cannot be relied on. Nor can it be in a technical context. All we can rely on is definitions, axioms, theorems &amp; sound reasoning. Understanding this is fundamental to competent technical work. People must be actively disabused of their naive expectations. French toast is not toast. `=` is not equality if `not (NaN=NaN)`." CreationDate="2018-06-22T19:13:11.333" UserId="2485" />
  <row Id="12996" PostId="4762" Score="1" Text="... Nevertheless mnemonic names are helpful. And memorability is with respect to the structure/organization of the system/metaphor they apply to. So poorly chosen collections of names are hard to remember. But this applies to all use, not just learning." CreationDate="2018-06-22T19:13:18.063" UserId="2485" />
  <row Id="13000" PostId="4762" Score="0" Text="I can not make any sense from philipxy's comments, but if anyone else can. Then please help by leaving a comment, with explanation/translation." CreationDate="2018-06-22T20:12:45.010" UserId="204" />
  <row Id="13001" PostId="4762" Score="1" Text="What is the first thing you don't understand?" CreationDate="2018-06-22T20:13:51.480" UserId="2485" />
  <row Id="13003" PostId="4762" Score="1" Text="It is not clear what you want to ask. Ok, &quot;Would [beginner?] learning be improved, if the language/libraries chose better names?&quot; isn't a case of &quot;how do we teach good naming&quot;. But it is true by definition of &quot;better&quot; &amp; is a case of &quot;would use [by everyone] be improved if people chose better names?&quot;--also vacuous, begging &quot;what is good naming?&quot; 4 (!) other phrases (title, &quot;wondering if&quot;, &quot;this is about&quot; &amp; a comment) don't clarify how this is not vacuous or just a special case or how it is not actually what you mean to ask. Please replace the 5 by 1 clear question. And of what use is an answer?" CreationDate="2018-06-22T20:25:46.760" UserId="2485" />
  <row Id="12471" PostId="4766" Score="4" Text="I see two errors here. People can think functionally just as they can procedurally. It just takes education and practice. And practice. It is a different way of thinking but accessible to all. Secondly, functional programmers in Lisp or Haskel (other choices...) don't, in fact, build everything from scratch. There are sophisticated libraries for functional languages just as for the others. CLOS for Common Lisp is one example. In fact, the ability to do meta programming in functional languages, just becoming possible in Java, permits very powerful constructs to be built and leveraged." CreationDate="2018-05-14T16:24:15.340" UserId="1293" />
  <row Id="12472" PostId="4766" Score="1" Text="I have to agree with Buffy, the toolchains for FP are just as, if not more sophisticated, than the ones for imperative programming.  In fact, because of the ease of, i.e. composing monads or using higher-kinded types, you often have to do a lot less of the grunt-work yourself in FP than in OOP." CreationDate="2018-05-14T16:29:46.023" UserId="5161" />
  <row Id="12479" PostId="4766" Score="0" Text="See, for example: https://www.amazon.com/Art-Metaobject-Protocol-Gregor-Kiczales/dp/0262610744/. If you want to make someone very happy, buy the hardcover. Hmmm. I actually have one of those." CreationDate="2018-05-14T19:39:34.863" UserId="1293" />
  <row Id="12480" PostId="4766" Score="0" Text="Also see various writings by Paul Graham. e.g. Hackers and Painters. Here is his blog: http://paulgraham.com/articles.html." CreationDate="2018-05-14T19:44:30.363" UserId="1293" />
  <row Id="13113" PostId="4766" Score="0" Text="I don't think the reason FP isn't taught has anything to do with composability. It's just inertia. And *maybe* also related to the way incoming students already think." CreationDate="2018-08-01T02:01:20.510" UserId="1275" />
  <row Id="12481" PostId="4767" Score="0" Text="The SIGCSE list might be a better place for this one. I'm guessing someone there knows." CreationDate="2018-05-14T20:47:15.187" UserId="1293" />
  <row Id="12483" PostId="4767" Score="0" Text="Actually, perhaps I could reach out to Matthew Hertz directly and invite him to write a response." CreationDate="2018-05-14T21:00:41.123" UserId="27" />
  <row Id="12492" PostId="4768" Score="1" Text="With modern hardware, the way the system actually works is so different from traditional understanding, that I think it's actually counterproductive to think about it.  From superscalar architectures to branch prediction and multi-core platforms, the way a CPU works internally is now very complex.  I think it's better to let the computer engineers think about how the hardware will work and have computer scientists focus on writing well-designed, maintainable software, especially given the increasingly platform-independent nature of software development." CreationDate="2018-05-15T12:04:52.323" UserId="5161" />
  <row Id="12493" PostId="4768" Score="1" Text="This blog by Raymond Chen (a C developer working on the Windows OS at Microsoft) is informative:  https://blogs.msdn.microsoft.com/oldnewthing/20140613-00/?p=743.  The branch predictor will completely change the expected execution of your code anyway, so best just not to try to anticipate the hardware behavior and focus on the quality of the software." CreationDate="2018-05-15T12:13:06.170" UserId="5161" />
  <row Id="12494" PostId="4768" Score="1" Text="@AaronM.Eshbach You mean the Software Engineers? Computer Scientists shouldn't be particularly focused on writing software well-designed, maintainable software unless that is their area of focus/research. Computer Scientists *should* be focused pretty squarely on understanding complex interactions, algorithms, and computation. Branch prediction and superscalar architectures are great areas of modern interplay between CS and engineering." CreationDate="2018-05-15T13:09:25.550" UserId="27" />
  <row Id="12495" PostId="4768" Score="1" Text="Perhaps Software Engineering would be the more appropriate discipline.  There wasn't really a Software Engineering major when I attended university, so I don't know what that covers.  At the school I attended, Computer Engineers took a blend of hardware and software courses (including Digital Design and working with FPGAs, etc.) while Computer Scientists took almost entirely software courses, with some basic education on K-maps and the like." CreationDate="2018-05-15T13:13:58.293" UserId="5161" />
  <row Id="12496" PostId="4768" Score="0" Text="@AaronM.Eshbach Yeah, my major was not dissimilar. But things seem to be improving on this front. More schools are offering legitimate SE degrees, which really has blossomed into its own distinct field. I'm hopeful that this shift should be freeing CS majors to spend more time engaging in theory." CreationDate="2018-05-15T13:19:10.053" UserId="27" />
  <row Id="12485" PostId="4769" Score="0" Text="After reading the referenced page I'm not sure that it, the fictitious example or the article, _does_ explain the core principles of blockchain as a concept. It helps understand how _Bitcoin_ works on top of a blockchain, but not even what a &quot;blockchain&quot; is. With prior knowledge of blockchain it _might_ be helpful. It is _clear as mud_ without that prior knowledge, however." CreationDate="2018-05-15T01:29:50.957" UserId="104" />
  <row Id="12486" PostId="4769" Score="0" Text="My Spidey-sense is tingling. There's probably a great lab in there, somewhere, but that article was not clear at all. I'd be interested in what others have to say." CreationDate="2018-05-15T02:44:15.277" UserId="27" />
  <row Id="12553" PostId="4769" Score="0" Text="I'll note for posterity that this appeared on May 17, 2018: http://smbc-comics.com/comic/explain" CreationDate="2018-05-18T10:48:49.750" UserId="1293" />
  <row Id="12488" PostId="4770" Score="3" Text="The problem is, when you read `turtle.left(30)`, you have 2 possible understandings : move it 30 units to the left, or change its direction (anti-clockwise).  You have to remember which on is the correct interpretation, which causes an extra cognitive load (we already have to remember the left from the right :-)). So it has a negative impact. Could be avoided with better names." CreationDate="2018-05-15T07:58:11.990" UserId="2103" />
  <row Id="12489" PostId="4770" Score="0" Text="@MichelBillaud As I understand it, the turtle cannot *move* left, any more than a car can. That means &quot;left&quot; can only mean &quot;turn&quot; not &quot;move&quot;. The *mental model&quot;, or metaphor, is incompletely developed if the choice of move or turn arises from the command &quot;left&quot;." CreationDate="2018-05-15T09:12:59.720" UserId="104" />
  <row Id="12491" PostId="4770" Score="0" Text="@GypsySpellweaver the students have no idea that a sprite on the screen can only go forward. What is constrainning it? Yes there is an incomplete metaphor. But we have to start at the beginning. I can see that a way around the problem, is to take them to the playground, and have them pretend to be a turtle. Have some instructions printed, that they can hold. As for words not mattering I have one thing to say to that: Correct horse battery staple." CreationDate="2018-05-15T10:45:24.407" UserId="204" />
  <row Id="12497" PostId="4770" Score="0" Text="@GyspySpellweaver moving to the *left of the screen*, if you are not lucky enough to have a real robotic turtle on the floor. It is a *simulation* only." CreationDate="2018-05-15T13:21:11.457" UserId="2103" />
  <row Id="13033" PostId="4770" Score="0" Text="@GypsySpellweaver should we likewise, in literacy class, give examples of poor punctuation, spelling and grammar, because they will see it in the real world." CreationDate="2018-06-25T17:13:01.657" UserId="204" />
  <row Id="13034" PostId="4770" Score="0" Text="@ctrl-alt-delor If you were teaching those who would become copy editors, or that would have to deal professionally with updating/changing the work of others in that field, then __yes__ you should. The experience and exposure will help them." CreationDate="2018-06-25T17:54:29.623" UserId="104" />
  <row Id="13035" PostId="4770" Score="0" Text="@GypsySpellweaver So should we give them this bad copy every lesson, and tell them that this is best practice? Or some lessons, where we ask them to correct it?" CreationDate="2018-06-25T18:04:14.967" UserId="204" />
  <row Id="13036" PostId="4770" Score="0" Text="@ctrl-alt-delor Once the course (back to CS) has covered &quot;best practice&quot; for naming, and a library is used that does cause student confusion for lack of same, then it becomes a _teaching moment_ to emphasise the &quot;why&quot; for using naming conventions as well as practice for sussing out what it's supposed to do despite the confusing name. Changing the past (rewriting a common library) is difficult to do. Teaching from past mistakes to create a better future is likely to be a more fruitful, and efficient, use of instructor energies." CreationDate="2018-06-25T19:43:57.707" UserId="104" />
  <row Id="13040" PostId="4770" Score="0" Text="@GypsySpellweaver I think we are in agreement. However I am not asking if I should re-write the libraries. I am asking if there is research on the effect (of using bad names, in a beginner class: first lesson of programming). This will tell us what to do: What libraries to choose, should we write a language/library for training/education. But I am not asking these questions here now." CreationDate="2018-06-26T07:44:15.087" UserId="204" />
  <row Id="12505" PostId="4772" Score="0" Text="Welcome to the site, nice to see you. Nice to see you starting to teach early, it is a good way to learn (about the subject, and about people)." CreationDate="2018-05-16T08:29:27.617" UserId="204" />
  <row Id="12506" PostId="4772" Score="0" Text="I proof read your question, and did a few minor edits (punctuation — mostly sentences too long, and 2 spelling errors — you probably hit the wrong key)." CreationDate="2018-05-16T08:31:31.453" UserId="204" />
  <row Id="13347" PostId="4775" Score="0" Text="&quot;But what if you want to implement something like a video game? Mutation is an integral part of programs like those.&quot; – I believe that is a common misconception. &quot;Super Monao Bros&quot; is a Jump&amp;Run Clone in Haskell. I once read an interesting blog series about Purely Functional Retrogames. Idris as a language is not only purely functional (no side-effects) but also total (always terminates, i.e. no endless recursion, no endless loops, and thus not Turing-complete), and one of the example programs is an Asteroids clone. [Note: technically speaking, Idris does not forbid writing non-terminating …" CreationDate="2018-09-05T12:46:07.263" UserId="945" />
  <row Id="13348" PostId="4775" Score="0" Text="… programs, it just makes no guarantees about type-safety if you do. This is unlike other dependently-typed languages, where you are not allowed to write non-terminating programs, and thus often have to jump through hoops to get the compiler to realize that your programs is actually terminating in all cases.]" CreationDate="2018-09-05T12:46:33.223" UserId="945" />
  <row Id="12513" PostId="4776" Score="0" Text="What levels did you teach? I wrote my first functions in Logo in primary school, and I didn't learn mathematical functions until high school. Surely I can't be the only one. And students _do_ have a difficulty with math functions that doesn't apply to computer functions, namely, the fact that in math, different algorithms that compute the same result for every input are the same function." CreationDate="2018-05-17T12:17:45.180" UserId="124" />
  <row Id="12524" PostId="4776" Score="0" Text="Perhaps you didn't see functions formally, but you were intimately acquainted with the fact that `2 + 2` is always `4`." CreationDate="2018-05-17T19:45:14.690" UserId="5219" />
  <row Id="12525" PostId="4778" Score="0" Text="Today's tiny Arduino is much larger than the big computer we had here when I was a student... even my old cellphone has more oomph." CreationDate="2018-05-17T20:14:43.093" UserId="5219" />
  <row Id="12538" PostId="4778" Score="0" Text="Might be an interesting project to replace Wiring with a Lisp/Scheme derivative.  Anyone done that yet?  Will it fit any Atmel AVR?" CreationDate="2018-05-17T23:11:00.237" UserId="59" />
  <row Id="12563" PostId="4778" Score="0" Text="I've got Maxima (a largeish Common Lisp program) running on my cellphone. It is far from the largest application there..." CreationDate="2018-05-18T13:03:27.647" UserId="5219" />
  <row Id="12576" PostId="4778" Score="1" Text="Contemporary mobile phones have more compute+memory than not-to-distant supercomputers (Cray YMP, et.al.).  Whereas an Arduino chip might have only 2k of RAM." CreationDate="2018-05-18T14:59:34.033" UserId="59" />
  <row Id="14911" PostId="4778" Score="1" Text="Added: I would not be surprised if a lack of appreciation for the disadvantages of functional programming might be a significant contribution to increasing global CO2 emissions, due to inefficient use of vast amounts of data center hardware." CreationDate="2019-05-03T21:52:39.870" UserId="59" />
  <row Id="12555" PostId="4779" Score="0" Text="Scheme is &quot;sort of&quot; functional. Sure, it has a functional core, but it is very much procedural too." CreationDate="2018-05-18T12:20:02.887" UserId="5219" />
  <row Id="12693" PostId="4779" Score="0" Text="You might be interested in scala, a functional sibling to Java that compiles to the JVM." CreationDate="2018-05-30T00:10:29.177" UserId="21" />
  <row Id="12536" PostId="4781" Score="5" Text="**Please avoid answering the question in the comments**. Comments are for suggesting improvments or changes to the question, not for discussion (which can be had [in chat](https://chat.stackexchange.com/rooms/59174/the-classroom)) or answers. Answers or discussion in the comments will be reguarly cleaned." CreationDate="2018-05-17T22:22:05.660" UserId="58" />
  <row Id="12656" PostId="4781" Score="7" Text="This is... **wrong**.  You can't *teach* someone to *enjoy*." CreationDate="2018-05-23T03:26:52.687" UserId="3132" />
  <row Id="13198" PostId="4781" Score="2" Text="@RonJohn: You can't _force_ someone to enjoy. But you can teach them how to find the joy in doing something. As a simple example to prove the principle, young children can often be motivated to do something by claiming that they're not able to do it. While that is very basic reverse psychology, it proves that you can change someone's experience with the same &quot;chore&quot; by reframing it for them." CreationDate="2018-08-22T13:42:12.320" UserId="2164" />
  <row Id="13199" PostId="4781" Score="0" Text="@Flater you can teach me how *some people* will enjoy salesmanship, and you can teach me the usefulness of selling, but you'll never teach **me** to **enjoy** selling." CreationDate="2018-08-22T14:08:39.510" UserId="3132" />
  <row Id="13200" PostId="4781" Score="0" Text="@RonJohn: OP was not explicitly asking for a _surefire_ way to teach _literally anyone_ to enjoy programming. That is warping the question to suit your answer." CreationDate="2018-08-22T14:25:45.133" UserId="2164" />
  <row Id="13201" PostId="4781" Score="0" Text="@Flater OP's student might see all the money earned by programmers and want that, but still might not be temperamentally suited to being a programmer.  (I'm not a fan at all of CP4E.)" CreationDate="2018-08-22T14:29:28.050" UserId="3132" />
  <row Id="13202" PostId="4781" Score="0" Text="@RonJohn: It seems you have mlisunderstood the context for this question. Motivation (such as financial earnings) is not the same as enjoyment. I have no idea why you're bringing up being temperamentally suited for programming - that is not part of the question at any rate." CreationDate="2018-08-22T14:32:03.700" UserId="2164" />
  <row Id="13203" PostId="4781" Score="0" Text="@Flater the last sentence of the question is &quot;*What can I do in order for another person to **experience the feeling** that programming is an activity you can do for **fun and recreation**?*&quot;  Some people can never experience it." CreationDate="2018-08-22T14:51:11.250" UserId="3132" />
  <row Id="13204" PostId="4781" Score="0" Text="@RonJohn: I have already responded to that argument several comments ago. Your comments are not forming a coherent discussion, there is no benefit to continuing this." CreationDate="2018-08-22T15:10:58.070" UserId="2164" />
  <row Id="13205" PostId="4781" Score="0" Text="@Flater you say I didn't address the question, so I quote the Question.  Nothing you've written has addressed that." CreationDate="2018-08-22T15:14:32.190" UserId="3132" />
  <row Id="13206" PostId="4781" Score="0" Text="@RonJohn: I have already responded to that argument several comments ago." CreationDate="2018-08-22T15:16:43.953" UserId="2164" />
  <row Id="12517" PostId="4783" Score="8" Text="Ad *How many people do you know who are also interested in programming, outside of work, obviously?*: The majority of people who publish their code on GitHub, SourceForge etc., who attend Hackathons or developer conferences, spend their leisure time in hackspaces, record IT-related podcasts. Off the top of my head I came up with 6 people, three of whom I know personally. 99 % of the time they are not paid for it." CreationDate="2018-05-17T15:07:29.173" UserId="4022" />
  <row Id="12552" PostId="4783" Score="1" Text="Yes, there are a lot of people who do programming in their leisure time and put things on github and so on. But many do it only because it is a valuable, sometimes the only counting thing which matters during an application, or as part of learn something new.&#xA;Personally, most of my stuff I have on Github is not their because I enjoyed the work on it, but because I liked the Reward and Acknowledgement from the Community around it." CreationDate="2018-05-18T10:35:16.183" UserId="1581" />
  <row Id="12582" PostId="4783" Score="1" Text="&quot;Personally, most of my stuff I have on Github is not their because I enjoyed the work on it, but because I liked the Reward and Acknowledgement from the Community around it.&quot; I program for enjoyment and don't care about recognition. When I publish a Github library, creating something that helps other people is a side effect of doing something I enjoy or writing something for my own use. I've also genuinely never met a programmer who has stated their reason for programming is for reward or recognition until now." CreationDate="2018-05-18T22:10:13.737" UserId="1538" />
  <row Id="12586" PostId="4783" Score="3" Text="@Pharap Indeed, that's clearly seen by the gigantic amounts of code on GitHub that clearly isn't targeted at the general (programming) public - it's just some code somebody wrote to either play around with something or to solve their very specific problem. As silly as it might sound, people have different motivations - some are in it for the coding fun, some for the end results, some just to try something new (and get feedback if they're lucky), some for recognition... You can't really generalise much. Different people often do the same thing for different reasons :)" CreationDate="2018-05-19T07:32:48.893" UserId="1816" />
  <row Id="12601" PostId="4783" Score="1" Text="To highlight DP's point one only needs to visit codegolf.SE" CreationDate="2018-05-20T00:28:58.863" UserId="1607" />
  <row Id="12587" PostId="4784" Score="0" Text="And the main purpose of you as a teacher is to prevent them from going too deep too soon. Too many people want to learn programming while making a game &quot;kind of like GTA, but bigger and better!&quot; Unless you already know that particular person loves challenges bigger than them, this is a very quick way to lose all interest. You might find that finding relatively simple goals is surprisingly difficult - people aren't quite used to that anymore. They expect to go through 20 years of education and then do something great and amazing, rather than going over obstacles one at a time." CreationDate="2018-05-19T07:35:53.553" UserId="1816" />
  <row Id="12528" PostId="4785" Score="36" Text="I resonate quite a lot with this answer. Programming itself doesn't interest me, and it's my day job. What *does* interest me is creating *interesting things* using programming." CreationDate="2018-05-17T20:24:52.490" UserId="719" />
  <row Id="12543" PostId="4785" Score="5" Text="This is an awesome answer.  So many people don't seem to get that programming is a skill, just like woodworking, blacksmithing, or writing.  What matters is not the process, but the end result.  Once someone realizes this, it changes how they approach learning to program, and usually makes it far easier." CreationDate="2018-05-18T00:35:11.830" UserId="2523" />
  <row Id="12544" PostId="4785" Score="0" Text="@ChrisCirefice - sometimes you can even get your art groove on using code. I did a little thing with strings of text and an image, and making each character the color of a corresponding pixel in the image, much like the big Apple posters with the employees, etc.  I also did it a year or two before Apple :)  Actually won a national poster competition with the one I did for our graduates one year..." CreationDate="2018-05-18T01:39:01.877" UserId="662" />
  <row Id="12546" PostId="4785" Score="8" Text="My favorite part of programming is the &quot;aha&quot; moment when my code finally works. And that moment is so much more satisfying if the thing that works is something I'm really excited about" CreationDate="2018-05-18T05:05:03.853" UserId="4734" />
  <row Id="12548" PostId="4785" Score="7" Text="What I do when I get 15 year old school short-term interns at work is perk their interest. Often it's games like World of Warcraft or FIFA or something. Writing a web scraper or an API client with them to do statistics on something they have intimate knowledge of is great. When EA had an online platform for FIFA I built a little league calculator to use with all his friends' account names, and it would compute funny stats like how often someone dominated a game but lost anyway because sometimes a game is just like that. Those things  are very well received." CreationDate="2018-05-18T09:14:00.357" UserId="3380" />
  <row Id="12549" PostId="4785" Score="9" Text="@AustinHemmelgarn That's far from generic. I really enjoy programming for the sake of programming, I rarely care much about the end result. The shape and flow of the code matters. Just as a woodworker would enjoy physically working with the tools and material, shaping the wood with their hands." CreationDate="2018-05-18T09:32:19.683" UserId="4236" />
  <row Id="12550" PostId="4785" Score="1" Text="@pipe And if you talk to really experienced carpenters, or smiths, or even writers, you will find individuals who feel the same way.  That mentality is a common one among artisans, but it's one that's hard to foster with skills like programming where partially complete products are rather abstract in comparison to more physical skills, and progress is hard to quantify.  Note that I am not saying programmers shouldn't take pride in their work or enjoy it (I do so myself), just that it's a case where results matter more than exact technique used." CreationDate="2018-05-18T10:23:51.213" UserId="2523" />
  <row Id="12580" PostId="4785" Score="2" Text="If the OP's son likes Minecraft, you can create [**Redstone Circuits**](https://minecraft.gamepedia.com/Redstone_circuit) (logic gates, clocks, computers, you name it). I found that incredibly motivating. I didn't think this warrants its own answer, though. I'm okay if you put it in this one." CreationDate="2018-05-18T18:53:49.620" UserId="4570" />
  <row Id="12584" PostId="4785" Score="1" Text="To accompany this answer, I'd recommend a beautiful video set to Alan Watts' words, [Life is Not a Journey](https://youtu.be/qHnIJeE3LAI).  I find it to be a very useful kick-in-the-pants to remind me to think the way Kevin is recommending." CreationDate="2018-05-19T00:14:05.210" UserId="812" />
  <row Id="12602" PostId="4785" Score="0" Text="You could also quite easily make your own, at-home version of Ludum Dare. Pick a weekend -- ideally one _without_ school -- sit down, and make a game." CreationDate="2018-05-20T00:30:19.777" UserDisplayName="anon" />
  <row Id="12619" PostId="4785" Score="0" Text="Have a look for something he enjoys. Could I suggest trying out Sonic Pi?" CreationDate="2018-05-21T14:03:59.467" UserId="4751" />
  <row Id="12590" PostId="4786" Score="0" Text="Interestingly, I've been programming since about 6 years old, and still loving it 24 years later, but... I've *always* hated puzzles. The brilliant thing about programming is that the challenge doesn't have a pre-planned solution that you're trying to find - and for me, programming assignments that work like classical puzzles are just awful. Puzzle games that give you a bit more freedom are still fun, though (e.g. anything by Zachtronic :P). I think this freedom is essential for learning programming - the fact that 10 people can solve the problem 10 different ways and they're correct." CreationDate="2018-05-19T07:49:32.207" UserId="1816" />
  <row Id="12600" PostId="4786" Score="0" Text="@Luaan I suppose that makes sense. How do you feel about math, though?" CreationDate="2018-05-19T22:44:21.553" UserId="5105" />
  <row Id="12605" PostId="4786" Score="0" Text="For the most part, I see it as an essential tool. I did have lots of fun with some disciplines, though, and I usually tend to go the way of understanding the ideas rather than trying to remember formulas/algorithms. But I learn everything that way, I avoid memorising whenever I can :D So e.g. when I need to do division on paper, I don't remember the process they taught us - but it takes me just a minute or two to reconstruct it based on what I know about numbers. I can't even remember the volume of a sphere off the top of my head, but I can do integrals so it takes about 5s to get there :D" CreationDate="2018-05-20T06:57:22.700" UserId="1816" />
  <row Id="12611" PostId="4786" Score="1" Text="@Luaan Sometimes I say programming is like math but you have the freedom and the power to make variables equal whatever you want." CreationDate="2018-05-21T02:13:35.467" UserId="5105" />
  <row Id="12541" PostId="4788" Score="1" Text="This. I didn't have any real experience with Prolog (i.e. used it only during programming in logic courses), but the main thing I remember was the constant struggle to keep the painfully imperative execution model under control. Actually, in my mind Prolog is simply an imperative language with a back-tracking based syntax designed to look like programming in logic, and with extremely obscured semantics for pointers/references." CreationDate="2018-05-17T23:58:12.197" UserId="4884" />
  <row Id="12579" PostId="4789" Score="5" Text="Wait, I'm not supposed to enjoy programming? Guess I must be doing something wrong then... Otherwise, you're correct that when it comes to programming, sometimes the goal is more important than how you get there (the specific language or tool used)." CreationDate="2018-05-18T18:06:31.713" UserId="2618" />
  <row Id="12581" PostId="4789" Score="0" Text="@Llewellyn A whole bunch of previous comments got deleted. Anyway, point is that the fun bit is working out how to do something *with* programming. Just writing for-loops on a napkin is not so much fun. :)" CreationDate="2018-05-18T20:39:26.477" UserId="1864" />
  <row Id="12588" PostId="4789" Score="4" Text="Don't take people's fun away :P After all, plenty of people enjoy études, practising over and over until they're second nature. Just because you don't like it doesn't mean nobody does - though just as certainly, just because you do doesn't mean you should expect everyone to have the same fun with your learning approach. Teachers cannot teach the same way they learned themselves - that will only help the few pupils who enjoy the same approach. And I certainly know lots of programmers who don't care about results at all (usually for the worse, mind you), just building crazy object hierarchies..." CreationDate="2018-05-19T07:40:13.150" UserId="1816" />
  <row Id="12610" PostId="4789" Score="1" Text="@Luaan Sure - if it really does float your boat then cool. But the OP is wondering why his son can't get into it, and sees it just as &quot;work&quot;. For me, that says the kid needs a target which will make it fun." CreationDate="2018-05-20T19:40:02.340" UserId="1864" />
  <row Id="12631" PostId="4789" Score="2" Text="I'd argue that you are fundamentally wrong. The concept of intrinsic motivation is basically about doing things *'for the sake of themselves'*. Studies have shown intrincally motivated people delivering way better results than extrinsically motivated people. Therefor neglecting the fun of it ist most probably the wrong way." CreationDate="2018-05-22T09:30:33.057" UserId="5280" />
  <row Id="12633" PostId="4789" Score="0" Text="@PaulKertscher Then your opinion is that the OP's son should drop programming because he will never get good results, right? The OP's son is clearly *not* intrinsically motivated right now, so he needs some way to find it fun. Intrinsic motivation is by definition intrinsic to the person, so you can't change that. It's not neglecting the fun, it's recognising that for this person *it is not fun*. Studies have shown that *teaching* with a way of applying what you've learnt delivers way better results, and a fun application gets you past this." CreationDate="2018-05-22T09:56:48.777" UserId="1864" />
  <row Id="12634" PostId="4789" Score="0" Text="@Graham No, I'm not saying that, at least I did not intend it, but I see how my can be read that way. I was reading your statement *&quot;You are not supposed to enjoy programming&quot;* as a general statement, reducing programming to a tool and denying that there is a benefit in enjoying it. Anyway, for the specific situation of the OP, I see that it might be useful concentrating on the results rather than the process." CreationDate="2018-05-22T10:06:44.160" UserId="5280" />
  <row Id="12657" PostId="4789" Score="0" Text="@PaulKertscher I've met too many people who ranted about code quality in lieu of producing features. I've *been* that guy. Enjoying the process is fine, but one shouldn't confuse the means with the end." CreationDate="2018-05-23T12:55:35.440" UserId="1790" />
  <row Id="12774" PostId="4789" Score="0" Text="I think I understand what you're trying to say. We want features not code. However, I've seen to many programs that recognize palindromes whose source was itself a palindrome. Maybe I'm not supposed to enjoy programming but I do anyway. I don't think I'm alone." CreationDate="2018-06-10T13:50:34.023" UserId="1401" />
  <row Id="12592" PostId="4790" Score="1" Text="Many techno-religious &quot;debates&quot; are perpetrated by people who just like to argue. Or people who picked a side and now are looking for any opportunity for a political fight (destroy the enemy, bring up your own side). You might see them as people who enjoy the process too much - I see them as people who don't enjoy the process. Otherwise they'd love to play around with the different approaches, rather than arguing about them (*especially* in the unproductive &quot;my team is better than your team&quot; way). But definitely, you must love the result at least as much as the process :)" CreationDate="2018-05-19T08:04:10.760" UserId="1816" />
  <row Id="12571" PostId="4791" Score="1" Text="`All you need is pure C++ compiler` - C++ is the reason why I struggled hard in the beginning. Too far from anything tangible, too many unimportant things (to the final result) to think about. If someone suggested me Python then, the history could be drastically different. You want children to give minimal effort for maximal results, not have them walk a minefield." CreationDate="2018-05-18T13:56:29.410" UserId="5144" />
  <row Id="12585" PostId="4791" Score="1" Text="C++ is quality food for the brain.Or, maybe I am just that sadistic." CreationDate="2018-05-19T02:40:18.023" UserId="5224" />
  <row Id="12591" PostId="4791" Score="1" Text="I've made a list of games of progressively increasing complexity that I wanted to make when I was a kid, and it was great fun to follow that. There's so many ways to get from simple to complex, and so many things you can tinker with in even the very simple games... Today, for projects like this, there's essentially no CPU/RAM limit - you can just keep tinkering, and learning more experiences about the things that don't quite scale well etc. You can reuse loads of the work you've already done, experiment with so many ways to make things more awesome..." CreationDate="2018-05-19T07:54:30.580" UserId="1816" />
  <row Id="12599" PostId="4791" Score="0" Text="@Luaan Hmm. I am nineteen, so never really had the troubles of low memory. I am using computer literally from the time I could walk, but I honestly don't remember what I did on a computer then, but it surely wasn't coding. My first Laptop had 2GB of RAM and a 512MB graphic card. But, I agree, it is fun tinkering with old projects. Though most of my code prior to 2015 is redundant. I had never heard of complexity or clean code then, so I essentially most of my games used direct methods instead of optimal ones." CreationDate="2018-05-19T19:30:22.290" UserId="5224" />
  <row Id="12604" PostId="4791" Score="1" Text="I've learned not to tell people their code is &quot;suboptimal&quot; while they're still having fun - that just tends to make them annoyed (and bored). The best place to explain about deduplication, abstraction etc. is when they already have a codebase that suffers from not having those things - at that point, it's a solution to their (growing) problem rather than an annoyance. Lately I've been having problems with doing too much abstraction and planning in my home projects, and they suffer immensely - returning to a more straight approach helped me focus on having fun making games :)" CreationDate="2018-05-20T06:52:44.317" UserId="1816" />
  <row Id="12606" PostId="4791" Score="0" Text="@Luaan Ha! I am mostly brutal and tell people that their code sucks. Then, I try to improve it." CreationDate="2018-05-20T07:18:55.793" UserId="5224" />
  <row Id="12572" PostId="4795" Score="1" Text="Getting very good at something (esp. in comparison to others) that you can see is helpful to people can spark the passion. Especially when you integrate your unique strengths into it. As a parent, I'd rather try to detect my kid's talents and help them realize their potential in a way to make them independent and happy going to work each day." CreationDate="2018-05-18T14:05:04.760" UserId="5144" />
  <row Id="12557" PostId="4796" Score="3" Text="The path of your daughter is very similar to that of my son. His first &quot;programming&quot; attempts were in Minecraft (code blocks). Now he is learning on FreeCodeCamp. We tried to learn Unity several times. First we did the ball game tutorial. Then he told me he wants to build a small platformer. I wrote the code for it so that he will can tinker with it. It didn't happen, unfortunately (I feel that Unity is intimidating him by its complexity). Next Sunday, I'm going to explain to him, how every part of this simple platformer works. I also showed him LÖVE framework, Qubicle, and Scratch." CreationDate="2018-05-18T12:36:28.630" UserId="4022" />
  <row Id="12589" PostId="4796" Score="0" Text="@DP_ I've had the same experience with Unity. It's a great tool/framework, but... maybe a bit too powerful for just having fun programming and learning. At the same time, the downloadable content doesn't fit together well enough to be a good learning experience on its own. I've been experimenting with writing a simpler &quot;gamedev&quot; experience for newcomers to programming that allows them to follow from simpler approaches to more complex approaches, but I'm not sure it'd actually help anyone who doesn't learn the same way I do :P And sometimes it's really hard to notice a big jump in complexity :)" CreationDate="2018-05-19T07:45:43.873" UserId="1816" />
  <row Id="12558" PostId="4797" Score="0" Text="I'm not sure your examples illustrate a difference between functional and imperative programming.  Your verb-phrases would all be function names, the only difference is that in FP, instead of mutating the state of &quot;my location&quot;, &quot;dinner&quot;, and &quot;the dishes&quot;, the functions would return the &quot;my new location&quot;, &quot;the cooked dinner&quot;, and &quot;the washed dishes&quot;.  If you wanted to do those things in order and pass the groceries we bought at the store into &quot;cook dinner&quot; and the dishes from dinner into &quot;do the dishes&quot;, we just use composition." CreationDate="2018-05-18T12:38:13.267" UserId="5161" />
  <row Id="12562" PostId="4797" Score="1" Text="@AaronM.Eshbach, you *can* model it that way, but it is a world away from how you naturally *think* about it. &quot;I have a bunch of functions that input a whole world and spit out another&quot; isn't the way we think, we think of changing an tiny corner of a (mostly unchanging, totally irrelevant) world, one step at a time." CreationDate="2018-05-18T13:01:31.833" UserId="5219" />
  <row Id="14809" PostId="4797" Score="1" Text="You could say that most of the world around us might as well be a vast collection of global constants and methods that we either are not aware of at all or at least not allowed to run. Finding something that actually *responds* is probably most of a baby's first 2 years of existence. So Procedural makes sense in that way. And, we don't just line up grocery shopping, cooking and washing dishes and push one button and walk away with a full belly and clean new kitchen, we have to push and pull every object and verify that every dish is clean. Not to mention biting the inside of your mouth (bug)." CreationDate="2019-04-24T11:23:29.947" UserId="5349" />
  <row Id="15646" PostId="4797" Score="1" Text="It always seems not good to me when assertions are made about &quot;we&quot; as in all humans; evidence suggests that for any imaginable feature differing options exist. The correspondence between sequential thoughts and state transitions holds only at a very initial level and I believe it's the root of the difficulty so many students meet. Furthermore speaking simply from *my* point of view what you say is not true, I think functionally. In my very first moments with programming I was surprised that C did not behave like Haskell, which I didn't know: I would have appreciated to be shown it existed." CreationDate="2019-10-06T19:06:15.413" UserId="6546" />
  <row Id="12559" PostId="4798" Score="0" Text="Better management can solve this problem. Two quick ideas. First, each student should be told up front that each is responsible for all. Second, the assignment shouldn't be such that they can &quot;divide up the work&quot; and each do _their half_ only. Group work should be done cooperatively, not individually. You may need to teach them how to do this, of course. Don't assume that it will be natural for them any more than you assume that other ideas in the course will be grokked automatically." CreationDate="2018-05-18T12:43:49.127" UserId="1293" />
  <row Id="12561" PostId="4798" Score="0" Text="They were supposed to *work together*, but just divided up the assignments: I do the first half, you do the rest." CreationDate="2018-05-18T12:58:19.027" UserId="5219" />
  <row Id="12568" PostId="4798" Score="0" Text="_Demands_ aren't likely to be adhered to. You have to teach them how, and also insist on it. But it has to be clear from the beginning. If your scheme permits splitting the work then the student has a valid grievance and shouldn't be penalized. But the choice of assignment itself need not be amenable to splitting, and the instruction can emphasize cooperation. You may also need better communication with the students so that when the inevitable problems occur (student drops out) you have time to make corrections." CreationDate="2018-05-18T13:20:47.457" UserId="1293" />
  <row Id="12570" PostId="4798" Score="0" Text="@Buffy, I mostly gave up on that decades ago. Any group work is graded in part by what they turn in, and in part by individual assessment of their understanding of what was turned in." CreationDate="2018-05-18T13:28:56.447" UserId="5219" />
  <row Id="12578" PostId="4803" Score="0" Text="Teaching Scheme from first principles to developers that already know C# will require them to unlearn quite a bit regardless.  I'm not sure that showing them the C# version is that harmful--especially if one sticks to very isolated code fragments of C#" CreationDate="2018-05-18T17:43:25.087" UserId="4689" />
  <row Id="12593" PostId="4804" Score="1" Text="Just because you find something interesting or not doesn't mean other people do. It's a subjective thing. For most people I know, seeing a little person move on the screen according to their input is far more interesting than dealing with the proper pattern of allocating memory. The latter might come later, as they master the high level concepts, or it might not. I love digging both ways - all the way from understanding the electronics (and building my own CPU from TTL chips) to playing around with lambda calculus. Each of these interests came at its own time, they weren't &quot;pre-existent&quot;." CreationDate="2018-05-19T08:10:11.490" UserId="1816" />
  <row Id="12598" PostId="4808" Score="1" Text="Nice answer, and welcome to [cseducators.se]!" CreationDate="2018-05-19T12:55:14.123" UserId="27" />
  <row Id="12629" PostId="4808" Score="0" Text="Thanks for the idea of making skins. That could make an exercise for using GIMP too." CreationDate="2018-05-22T01:42:13.117" UserId="5202" />
  <row Id="12630" PostId="4808" Score="0" Text="Brian: If you are considering skins, I've expanded my reply slightly and added another png file to the location I gave. I gave students the smaller file to modify to make their skin and the larger labeled version as a printout for reference." CreationDate="2018-05-22T08:01:52.460" UserId="5255" />
  <row Id="12622" PostId="4816" Score="0" Text="I was vacillating between closing for off-topic and purely opinion-based, but off-topic won out.  How is this related to CS Ed?" CreationDate="2018-05-21T17:11:37.580" UserId="27" />
  <row Id="12623" PostId="4816" Score="0" Text="@BenI. If anything, it seems more like a question for [parenting.se]. Thought it's need some help there as well (I think)." CreationDate="2018-05-21T17:17:41.373" UserId="104" />
  <row Id="12624" PostId="4816" Score="0" Text="@GypsySpellweaver It wouldn't be accepted there, either.  It's still POB" CreationDate="2018-05-21T17:19:04.427" UserId="27" />
  <row Id="12627" PostId="4816" Score="0" Text="Asking kids these sort of questions do much harm. Yes we need direction, but we also need to be flexible. Watch this video on mindset. https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve" CreationDate="2018-05-21T21:08:18.293" UserId="204" />
  <row Id="12779" PostId="4816" Score="0" Text="My favorite way to answer this question is: &quot;Older&quot;. I've been a successful code monkey for decades in many different fields and I still don't know what I want to be. And of course many people would debate whether I've grown up." CreationDate="2018-06-10T14:31:32.107" UserId="1401" />
  <row Id="12654" PostId="4821" Score="0" Text="How are you planning on contacting these students in the first place? In my anecdotal experience, most of the students who have no idea what computer science is have never taken a computer science course before entering college as a computer science major." CreationDate="2018-05-22T21:36:21.510" UserId="2068" />
  <row Id="12655" PostId="4821" Score="0" Text="I don't expect that they have necessarily taken any courses. Making the information available is part of the problem. It would be possible to devise (part of) a course, perhaps, but I don't expect that." CreationDate="2018-05-22T22:15:43.067" UserId="1293" />
  <row Id="12658" PostId="4827" Score="0" Text="I see that you are new to the SE network.  I'm glad that you've joined, and you are still welcome to contribute to our community, but please be aware of the [be nice](https://cseducators.stackexchange.com/help/be-nice) policy.  We keep a high standard on civil discourse here. Offensive language and name calling are not tolerated, even if the message is otherwise useful." CreationDate="2018-05-23T13:42:02.240" UserId="27" />
  <row Id="12660" PostId="4829" Score="1" Text="As you say, it is strongly negatively biased. While it may be a good solution for the institution, helping them manage resources, it is not as good for the individual. My personal bias would be in the other direction: making it an effective way to guide students, rather than to exclude them." CreationDate="2018-05-24T12:34:13.220" UserId="1293" />
  <row Id="14271" PostId="4831" Score="0" Text="This answer doesn't explain why Octal is important, it only talks about other base systems in general. Therefore I don't see its relevance to the question." CreationDate="2019-02-14T14:05:46.063" UserId="4028" />
  <row Id="14272" PostId="4831" Score="0" Text="@RolandIllig, yes, perhaps. I intend to provide a bit of background on the larger issue as a service to classroom teachers." CreationDate="2019-02-14T14:11:48.470" UserId="1293" />
  <row Id="12671" PostId="4832" Score="0" Text="Get snap lock locks (that do not need a key to lock them)." CreationDate="2018-05-25T11:20:54.950" UserId="204" />
  <row Id="12672" PostId="4832" Score="0" Text="Have you done symmetrical encryption first?" CreationDate="2018-05-25T11:21:18.923" UserId="204" />
  <row Id="12663" PostId="4833" Score="0" Text="That is an utterly brilliant example." CreationDate="2018-05-24T18:19:17.630" UserId="27" />
  <row Id="12664" PostId="4833" Score="0" Text="But from one of the halves, it would be easy to deduct the shape of the other half. This would make it easy for someone to think that the private key can be derived from the public key, which is not possible." CreationDate="2018-05-24T19:04:49.217" UserId="58" />
  <row Id="12665" PostId="4833" Score="1" Text="That is why the overall shape has to be secret. The public half only shows the &quot;tear&quot;. It can't be a standard sheet to start with. It might even be just a torn out &quot;hole&quot; in the original sheet." CreationDate="2018-05-24T19:19:47.707" UserId="1293" />
  <row Id="12668" PostId="4834" Score="0" Text="That sounds more like two complementary private keys than a private key and a public key. The second key, non-shop owner, would have to be hung up somewhere for anyone to use, not just the selected employee." CreationDate="2018-05-25T05:12:25.857" UserId="104" />
  <row Id="12669" PostId="4836" Score="1" Text="Welcome to CSEducators." CreationDate="2018-05-25T10:29:26.243" UserId="1293" />
  <row Id="12670" PostId="4836" Score="0" Text="There are commercial companies that give free training. They do this to shift products. The freedom of open-source and Free Software, will cause the price to tend toward zero, therefore they have to charge for training. Using training as a marketing tool to promote a product that you could download and not pay for, is a waste of money." CreationDate="2018-05-25T11:19:24.850" UserId="204" />
  <row Id="12680" PostId="4837" Score="0" Text="University professorship sounds like a dream with some constraints, whereas companies in industry sound more like a lot of constraints with some nice stuff.&#xA;As Arts&amp;Métiers is really close to where I live, I will probably try to attend a meeting there if there is one in the near future, thanks for the advice, I didn't know this organization :)" CreationDate="2018-05-27T22:24:55.843" UserId="5308" />
  <row Id="12681" PostId="4837" Score="1" Text="It is one of the top Engineering schools in France. You are lucky to be close. I don't, however, really know if they have what you are looking for, but can probably provide direction. Good luck in your searches." CreationDate="2018-05-27T22:54:16.957" UserId="1293" />
  <row Id="12683" PostId="4842" Score="0" Text="At the times, the feedback loop (punch-cards / submit / get the result) was so slow that tracing examples by hand was seen as a viable option for the debugging, even for complicated programs. And trying the modified version. Took lot of time, but was faster than wasting the next compilation batch for remaining stupid mistakes." CreationDate="2018-05-28T09:19:05.673" UserId="2103" />
  <row Id="12684" PostId="4842" Score="0" Text="&quot;At the risk of sounding like the old guy reminiscing about the good old days that were not really so good&quot; =&gt; Hand check the program before running it. https://blogs.msdn.microsoft.com/alfredth/2007/06/22/programming-proverbs-21-hand-check-the-program-before-running-it/" CreationDate="2018-05-28T09:23:04.330" UserId="2103" />
  <row Id="12687" PostId="4842" Score="0" Text="@MichelBillaud, yes, how painful it was. Though I also seem to remember that _desk checking_ was something we recommended to students, but didn't actually do ourselves. We were infallible, of course, or thought it to be so. ;-)" CreationDate="2018-05-29T12:50:31.123" UserId="1293" />
  <row Id="12688" PostId="4842" Score="0" Text="Actually, unit test does the job" CreationDate="2018-05-29T16:42:27.380" UserId="2103" />
  <row Id="12689" PostId="4847" Score="0" Text="This doesn't seem to be about CS education at all... Am I mistaken?" CreationDate="2018-05-29T20:57:13.087" UserId="150" />
  <row Id="12690" PostId="4847" Score="0" Text="This is about how best to teach and explain a CS concept..." CreationDate="2018-05-29T21:11:42.963" UserId="3778" />
  <row Id="12691" PostId="4847" Score="1" Text="Would you mind adding some examples of the functions you're talking about? I also think @ItamarG3 may have been noticing that you seem to be asking for the concept to be explained to you, and not to be asking for ways to teach a concept you already know. That's not necessarily a bad thing though." CreationDate="2018-05-29T21:15:01.393" UserId="58" />
  <row Id="12692" PostId="4847" Score="0" Text="thanks! Here's the docs for the sphero; https://sphero.docsapp.io/docs/Production%2010-05-2017/12-advanced-concepts#keywords-async-and-await. It has some examples" CreationDate="2018-05-29T21:44:20.223" UserId="3778" />
  <row Id="12695" PostId="4847" Score="2" Text="**JavaScript ≇ Java _ₗᵢₜₑ_ !** In JavaScript **`void`** is not a __type__, it is an unary operator which evaluates to **`undefined`**. In addition, **_every_** function in JavaScript returns _something_, even if that is **`undefined`**. An **`async`** function will *return* a **`Promise`**, even if that function has a **`return`** statement in it which _returns_ a regular value. __So__, what is the real question/problem you need answered/addressed?" CreationDate="2018-05-30T02:57:07.840" UserId="104" />
  <row Id="12701" PostId="4847" Score="0" Text="I've thought about this question a bit more, and it really seems like a programming question rather than a teaching question. That's why I've voted to close as off-topic. If it is a teaching question, please [edit] it to clarify. If not, you might have better luck asking on Stack Overflow." CreationDate="2018-05-30T11:16:51.753" UserId="58" />
  <row Id="12705" PostId="4847" Score="2" Text="A function that has no return value, is not a function. It is a procedure. However the `C` family (C, C++, Java, C#, JS, ;..) of languages call them all functions by mistake. A good was to distinguish is with good names. Verb phrases for procedures (no-return), adjectives if returning boolean, nouns if returning something else. Not foolproof, as any fool can use bad names." CreationDate="2018-05-30T14:50:25.717" UserId="204" />
  <row Id="12717" PostId="4847" Score="0" Text="@GypsySpellweaver, I know that async methods return promises, but promises don't count as true return methods. This is the concept I am struggling to explain- if you look at the docs here; https://sphero.docsapp.io/docs/12-advanced-concepts#keywords-async-and-await you can see that it says you can't return values with async functions, and you shouldn't use them with it. What is the distinction, and how can I explain it?" CreationDate="2018-05-31T04:07:52.407" UserId="3778" />
  <row Id="12718" PostId="4847" Score="0" Text="@ctrl-alt-delor the unfortunate thing is in JS, as far as I can tell, all methods are called functions? so where is the distinction? I want to help students create async functions with Sphero, and want to make a clear distinction. What is that distinction?" CreationDate="2018-05-31T04:08:41.823" UserId="3778" />
  <row Id="12721" PostId="4847" Score="0" Text="That distinction is a red herring: it does not exist. To repeat: _ALL_ functions (methods) in JS _return_ something, whether or not the programmer tells it to, and whether or not the caller uses it. The docs are not 100% correct: Point #2 is advice, not compiler law, Point #3's title does not match its text. A compile error is given when `await` is used inside a function not declared `async` but an `async` function can return a value and be valid to the compiler." CreationDate="2018-05-31T05:47:47.800" UserId="104" />
  <row Id="12725" PostId="4847" Score="0" Text="@GypsySpellweaver, Depends whether you are talking about computer science education or job training.  If you're talking about computer science, then &quot;procedure&quot; and &quot;function&quot; have accepted meanings, independent of any particular programming language." CreationDate="2018-05-31T16:09:36.873" UserId="1269" />
  <row Id="12726" PostId="4847" Score="0" Text="@jameslarge The fact that procedure and function have a distinct, and separate, meaning in computer science is why the distinction is a red herring in JavaScript. JavaScript does not implement &quot;procedures&quot; _everything_ is a &quot;function&quot; and will always return _something_, even if nothing is specified, or if the return value is disregarded. The programmer can code it like a procedure, and call it like a procedure, but in JS it is still a &quot;function.&quot;" CreationDate="2018-05-31T17:17:19.770" UserId="104" />
  <row Id="12694" PostId="4849" Score="2" Text="Hi Thobias! Welcome to [cseducators.se]! I'm interested in seeing what sorts of answers you get to this question. It think it may be a bit broad to be covered in a single answer, but we'll see how it goes. If you're interested in discussing this question (or CS Education generally), feel free to stop by [our chat room](https://chat.stackexchange.com/rooms/59174/the-classroom)." CreationDate="2018-05-30T00:46:34.320" UserId="58" />
  <row Id="12696" PostId="4849" Score="0" Text="Why would the pedagogical *methods* change when the subject changes? Of course, the details of how to implement a method will vary between disciplines, and instructors for that matter. Still, methods that work for language instruction, history, medicine, social sciences, etc., should work just as well for Computer Science." CreationDate="2018-05-30T06:12:22.590" UserId="104" />
  <row Id="12698" PostId="4849" Score="0" Text="I do think learning &amp; teaching in IT differs drastically from other sciences/languages.  Especially concerning available tools, finding help, access possibilities and the advantage of IT to directly see an impact (&quot;Hello World&quot; etc)." CreationDate="2018-05-30T08:39:56.517" UserId="1761" />
  <row Id="12699" PostId="4849" Score="1" Text="Also, it is very easy to educate yourself in IT / play around with things. Playing around with (e.g.) the russian alphabet probably does not have a lot of educational value." CreationDate="2018-05-30T08:51:26.977" UserId="1761" />
  <row Id="12700" PostId="4849" Score="0" Text="Agree with @Cribber. Computer programming is about learning how to solve problems, down to very precise details. Learning specific syntax, &quot;grammar&quot; of programming langages is &lt; 1% of the difficulty, so there's very little analogy to do with learning a foreign language, the culture of the country and its literature." CreationDate="2018-05-30T08:54:46.637" UserId="2103" />
  <row Id="12706" PostId="4849" Score="0" Text="@thesecretmaster I will thank you very much. I loved all the answers thank you very much. I think I have finally found my place in CS! LOL. I have been wondering about this for quite a while." CreationDate="2018-05-30T15:39:23.377" UserId="5318" />
  <row Id="12712" PostId="4849" Score="0" Text="I don't think that Neuro-Linguistic Programming (NLP) is a method of foreign language instruction in any context.  Perhaps you have confused some terms?  NLP is a very specific (and now largely debunked) system of influencing mind and thinking created by Richard Bandler and John Grinder." CreationDate="2018-05-30T20:23:52.497" UserId="27" />
  <row Id="12713" PostId="4849" Score="0" Text="No, I haven't. It is widely used to teach languages. Look at Wizard institution of Language teaching and IBL. There are other famous ones that use NLP as a way to teach languages. There is the BBC resources for Language learning that explains some key features. https://www.teachingenglish.org.uk/article/neuro-linguistic-programming-elt. I hope you enjoy @BenI." CreationDate="2018-05-30T21:54:37.040" UserId="5318" />
  <row Id="12716" PostId="4849" Score="0" Text="@ThobiasCerqueira Utterly fascinating! I studied NLP for years, ignoring many of the strongest (and weirdest!) claims by its gurus, and got a ton out of it. Those pseudoscientific claims seemed to sink the whole thing for most people, but some of the core principles have really stuck with me over the years. I'm glad to see that some of the simpler, more straightforward aspects are still being put to good use. Thanks for sharing that!" CreationDate="2018-05-31T03:27:57.823" UserId="27" />
  <row Id="12722" PostId="4849" Score="0" Text="@BenI. You are welcome. I'm glad I was able to provide that insight. I know what you mean with the pseudocientific approach. I have see a ton of them too. I hope this info provide a different insight to teaching approach with that tool." CreationDate="2018-05-31T11:38:47.680" UserId="5318" />
  <row Id="12708" PostId="4851" Score="0" Text="That is the closest answer to what I was asking. Not yet what I was looking for, but very close. I'll wait a bit. If No one else provides with &quot;formal academic teaching paths&quot;, I will mark this one for being straight to the answer. So far I believe there is none in CS. Which is a bit sad, since there are so many people teaching CP and there is no work (to my knowledge) that talks about the subject &quot;Teaching Computer Programming&quot;. Thank you so much!" CreationDate="2018-05-30T16:02:50.340" UserId="5318" />
  <row Id="12710" PostId="4851" Score="0" Text="And just to be clear. Those are methods of teaching you are using. I just wanted to know if there are any main one like stated in the question. Again thank you!" CreationDate="2018-05-30T16:28:40.867" UserId="5318" />
  <row Id="12711" PostId="4851" Score="0" Text="I find that the methods given here are re-framed versions of what the OP originally gave as examples. &quot;Frontal&quot; here is &quot;Communicative&quot; above, &quot;Collaborative&quot; and &quot;Project based&quot; are either &quot;Immersion&quot;, or &quot;NLP&quot; above depending on how guided the programming is. &quot;Guide-and-release&quot; and &quot;Free Style&quot; are more 'mentoring' than teaching, similar the the 'adviser' for a Master's Thesis than an instructor in a classroom." CreationDate="2018-05-30T16:53:50.337" UserId="104" />
  <row Id="12714" PostId="4851" Score="0" Text="@GypsySpellweaver Actually I could only relate to lang. teaching above are &quot;Guide-and-Release&quot;, &quot;Project based&quot; and &quot;Free Style&quot; since they &quot;seem&quot; to be student centered and not teacher centered methods. Maybe due to my oversimplification of the post it may have seemed otherwise. The other methods described seems to be teacher centered teaching. Which is opposed to all the methods I mentioned. But there are others that are teaching centered methods of education. For more -&gt; https://education.cu-portland.edu/blog/classroom-resources/which-is-best-teacher-centered-or-student-centered-education/" CreationDate="2018-05-30T22:15:52.930" UserId="5318" />
  <row Id="12709" PostId="4853" Score="0" Text="Thank you for such a detailed explanation. But if there is any confusion to what I asked I may edit. But English teaching methods is in the question just to demonstrate teaching methods we use and not really a comparison to how teaching methods work in CS(or any with CS). I just wanted to know if you guys had such a thing. Or perhaps work with pedagogical theory oriented goal (ex:different goals for different groups according to their realities). But very interesting what you said. I will look for it. Thank you. I was looking for something like @Cribber's answer." CreationDate="2018-05-30T16:19:23.763" UserId="5318" />
  <row Id="13069" PostId="4853" Score="0" Text="Watch out for *The Deplorable Word*." CreationDate="2018-07-09T14:35:34.853" UserId="5349" />
  <row Id="13116" PostId="4853" Score="0" Text="Check out the books &quot;Software Tools&quot; by Kernighan and Plaugher, &quot;The Practice of Programming&quot; by Kernighan and Pike, &quot;The Elements of Programming Style&quot; by Kernighan and Plaugher, &quot;Programming Pearls&quot; by Bentley, and, last but not least &quot;Beatiful Code&quot; edited by Oram and Wilson. All collections of excellent code to read and learn from." CreationDate="2018-08-02T18:11:54.793" UserId="5219" />
  <row Id="12723" PostId="4854" Score="1" Text="Thank you! This is what I was looking for. I will do some heavy research on it and thank you for being straight to the question and pointing out a method of teaching that works for teaching how to program based on a studied pedagogical principle. How you put it, adapted and used to coding seems VERY good to me. Again Thank you!" CreationDate="2018-05-31T11:47:31.750" UserId="5318" />
  <row Id="12719" PostId="4855" Score="0" Text="An interesting challenge. Let's see what folks come up with :)" CreationDate="2018-05-31T05:30:23.153" UserId="27" />
  <row Id="12720" PostId="4855" Score="0" Text="Don't use _shortcuts_ until you _know_ what they mean. `chmod 0760 &lt;file&gt;` is quite explicit, and unambiguous. Once you _know_ what's being done with that way, then, and only then, should you be willing to trust yourself to use `chmod u+x,o-r &lt;file&gt;`." CreationDate="2018-05-31T05:40:55.123" UserId="104" />
  <row Id="12724" PostId="4855" Score="2" Text="@GypsySpellweaver only that it is **not** a shortcut, but **feature** of the command that is **EXTREMELY** cumbersome to emulate using octal codes." CreationDate="2018-05-31T13:48:22.207" UserId="5326" />
  <row Id="12727" PostId="4855" Score="0" Text="@GypsySpellweaver - but if all you want to do is change one permission bit (as the example shows with `chmod o+w`) there is no way to do that using what I call the &quot;numeric method of stating permissions&quot;.  I do test my students on them, mention that they most often appear that way in documentation, etc. I also teach them the `u=rwx,g=rx,o=` way of setting them which is equivalent to the numeric method.  Some folks remember letters better - some folks remember numbers better.  I do my best to teach all of the different ways." CreationDate="2018-06-01T01:22:18.703" UserId="662" />
  <row Id="12730" PostId="4855" Score="0" Text="Actually, the letter &quot;x&quot; means eXecute for files only. And &quot;cross&quot; for directories. So the whole thing is misleading. So, the better thing to do is to _learn_ the exact meaning of the letters in the various contexts, instead of trying to guess.  Same thing for the short options names of basic unix commands." CreationDate="2018-06-01T14:10:47.017" UserId="2103" />
  <row Id="12740" PostId="4855" Score="0" Text="@GypsySpellweaver you sound like von neumann: Assembly language is for the feeble minded, real programmers use machine code." CreationDate="2018-06-02T11:10:42.393" UserId="204" />
  <row Id="12742" PostId="4855" Score="0" Text="@ctrl-alt-delor I must be super feeble minded since I don't even like Assembly, though I've done machine and Assembly. The layers of abstraction available in 3rd gen(+) langs is wonderful. In this case, however, if one way is confusing, use the other which while less simple, less confusing." CreationDate="2018-06-02T17:57:53.157" UserId="104" />
  <row Id="12750" PostId="4856" Score="0" Text="So in other words teach **chown = change owner*ship***?" CreationDate="2018-06-04T10:56:40.827" UserId="1219" />
  <row Id="12731" PostId="4857" Score="1" Text="This is a very clear explanation of the overall topic, but the question was about how to help students remember that the &quot;owner&quot; from `chown` does not refer to the `o` in `chmod`, but rather to the `u`.  How would you do that?" CreationDate="2018-06-01T14:19:08.970" UserId="27" />
  <row Id="12732" PostId="4857" Score="0" Text="Unix has the concept of file ownership.  All files are owned by some user or they are owned by root.  Owners then set permissions for their files as they see fit.  All files in your home directory you create belong to you." CreationDate="2018-06-01T15:26:15.293" UserId="21" />
  <row Id="12733" PostId="4858" Score="2" Text="This is a perfect question. Welcome to [cseducators.se]!" CreationDate="2018-06-01T22:46:28.357" UserId="27" />
  <row Id="12734" PostId="4858" Score="1" Text="It would also be good if you would register for the site so you can become more a part of the conversation here." CreationDate="2018-06-01T23:25:14.037" UserId="1293" />
  <row Id="12980" PostId="4859" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79216/discussion-on-answer-by-buffy-difficulty-of-algorithms-homework-problems)." CreationDate="2018-06-21T22:58:58.500" UserId="58" />
  <row Id="12751" PostId="4864" Score="3" Text="Welcome to CSEducators. Could you edit your question to add a reference to the book? Also, _building_ a chatbot and _using_ a chatbot seem to be two quite different things." CreationDate="2018-06-04T14:20:15.153" UserId="1293" />
  <row Id="12752" PostId="4864" Score="0" Text="This strikes me as far too broad. There are too many questions there, and I'm not sure if the question is even about teaching CS any more than simply building a chatbot. Can you please edit to clarify?" CreationDate="2018-06-04T21:12:20.507" UserId="58" />
  <row Id="12760" PostId="4864" Score="0" Text="CS is the study of computers (sort of), where as you are asking about using computers as a study aid. These are not the same think (Use of a computer in the classroom is not necessarily computer science, and computer science does not necessarily use computers)." CreationDate="2018-06-05T12:25:11.593" UserId="204" />
  <row Id="12753" PostId="4867" Score="1" Text="I've downvoted because of the lack of context. Optimization is a fairly broad topic, so any qualifiers you could add or any indications of textbooks you've looked at would be super hepful." CreationDate="2018-06-04T22:43:16.300" UserId="58" />
  <row Id="12755" PostId="4867" Score="1" Text="@Buffy Thanks for the reply! I am more interested in algorithm optimization techniques." CreationDate="2018-06-04T23:55:46.017" UserId="5344" />
  <row Id="12758" PostId="4867" Score="2" Text="@velutluna Add that information into the question, and hopefully a bunch more information into the question as well, and you will find that your downvotes disappear :) The question is topical, it just needs more information. Also, welcome to [cseducators.se]!" CreationDate="2018-06-05T04:05:28.933" UserId="27" />
  <row Id="12762" PostId="4867" Score="0" Text="Is this a self-learning question, or are you trying to find something to use with your students?" CreationDate="2018-06-05T17:06:20.873" UserId="27" />
  <row Id="12763" PostId="4867" Score="0" Text="I am a student. It is for self-learning." CreationDate="2018-06-06T00:40:29.307" UserId="5344" />
  <row Id="13053" PostId="4867" Score="0" Text="See references in Wikipedia article on [Analysis of algorithms](https://en.wikipedia.org/wiki/Analysis_of_algorithms#References). [&quot;Introduction to Algorithms&quot;](https://en.wikipedia.org/wiki/Introduction_to_Algorithms) is the standard in most college level programming courses. [Big O](https://en.wikipedia.org/wiki/Big_O_notation) is the keyword you want to use when searching." CreationDate="2018-07-03T10:55:44.153" UserId="2516" />
  <row Id="12772" PostId="4868" Score="0" Text="Actually Donald Knuth warned about worrying about optimization prematurely. When you develop an algorithm without much concern for optimization you are proving whether your requirements are valid. Once you've done that you can do tests that prove if optimization is even something you need to consider. Stick with readable code and you can make it as fast as you need to at any time. Sacrifice readable code chasing optimization and, if it turns out you need to change it, you can't, because you can't read it." CreationDate="2018-06-10T13:32:47.873" UserId="1401" />
  <row Id="12773" PostId="4868" Score="0" Text="@candied_orange, actually Knuth was speaking more generally of programming, not specifically what we have come to recognize as &quot;algorithms&quot;, in what we call &quot;The Algorithms and Data Structures&quot; course. In fact, though, it was Tony Hoare who said &quot;Premature optimization is the root of all evil&quot;. The idea is that most programs are sufficiently fast that you are wasting time on optimizing them initially. First run a profiler on the program to see where it is spending resources and then optimize those parts if necessary. I interpret the question here more narrowly, however." CreationDate="2018-06-10T13:49:07.513" UserId="1293" />
  <row Id="12775" PostId="4868" Score="0" Text="On the other hand, Knuth did say &quot;Beware of bugs in the above code; I have only proved it correct, not tried it.&quot; https://en.wikiquote.org/wiki/Donald_Knuth. Also see https://en.wikiquote.org/wiki/C._A._R._Hoare" CreationDate="2018-06-10T13:55:50.027" UserId="1293" />
  <row Id="12776" PostId="4868" Score="0" Text="Hehe, I've said [something similar](https://softwareengineering.stackexchange.com/a/315968/131624): &quot;I write and run tests that prove it works before I suspect it works&quot;." CreationDate="2018-06-10T13:58:35.737" UserId="1401" />
  <row Id="12777" PostId="4868" Score="0" Text="Of course you're free to interpret the question as you like. I'm simply advocating that one of the less theoretical &quot;algorithm optimization techniques&quot; is to just write something simple and readable that meets the requirements first before you give in to making things all weird in the name of speed. That way as you iterate on the problem you only pick up the weirdness you really need." CreationDate="2018-06-10T14:04:04.583" UserId="1401" />
  <row Id="13133" PostId="4869" Score="0" Text="Can you explain the &quot;stop working on tests when it fails part&quot;? I thought if it fails, you fix it until it passes (and then you stop)." CreationDate="2018-08-05T00:52:58.570" UserId="5476" />
  <row Id="13134" PostId="4869" Score="1" Text="@JustBlossom I have amended answer: hope is is clearer. When a test fails (not compilation error). When a test fails, it succeeds to find a problem in the production code. It is not the test that is failing, but the production code, so fix the production code. When the test passes, write a new test." CreationDate="2018-08-05T16:51:14.433" UserId="204" />
  <row Id="13153" PostId="4869" Score="0" Text="Yup, that's clearer. It's kind of like you're stress testing your code and making sure that you're not only testing for what you know will work. Thanks!" CreationDate="2018-08-13T03:42:30.700" UserId="5476" />
  <row Id="13154" PostId="4869" Score="0" Text="Yes, If you write tests that always pass, you are wasting your time (expect that writing the tests makes you think). You could have the same outcome by not writing and running the tests. And if a test never fails, you do not know if it can fail. Therefore write the tests first: so that you think, so that you can test the tests (they fail)." CreationDate="2018-08-13T09:43:37.737" UserId="204" />
  <row Id="12765" PostId="4870" Score="0" Text="Adding more specifics about what you want to learn/be able to do would be very helpful. If you're question is simply &quot;How can I learn everything&quot;, that seems far too broad to be answered in a single answer." CreationDate="2018-06-08T10:25:16.207" UserId="58" />
  <row Id="12766" PostId="4870" Score="1" Text="Yes, your question is too broad. &quot;Computer Science and Electronics&quot; is an incredibly broad range. You need to narrow it down. The best way to do that is to find a person, perhaps at a local school or university who is already an expert and explore with her/him your goals. Imagine that you are entering a vast jungle about which you know nothing. You would be wise to find a guide first. The reason that a university education is valuable (from a learning standpoint) is that others who do understand the goals and how to achieve them can help you with your own goals." CreationDate="2018-06-08T12:06:43.693" UserId="1293" />
  <row Id="12767" PostId="4870" Score="2" Text="I fear that this question here will result in so many &quot;options&quot; that you can't possibly follow them and you will have nothing better than random advice. And expect mastery of even a small part of the landscape to take a long time to achieve. Ten years? More? The best time to plant a tree is 40 years ago. The second best time is now, but it won't seem like a tree for quite a while." CreationDate="2018-06-08T12:09:36.083" UserId="1293" />
  <row Id="12768" PostId="4870" Score="2" Text="What level, experience do you have (you say no degree, but do you have other experience, qualifications)? What are you main goals? I will vote to put on hold, but will be happy to re-open, if you add the specific things asked for." CreationDate="2018-06-08T15:29:57.653" UserId="204" />
  <row Id="12780" PostId="4870" Score="0" Text="I think you should grab a raspberry pi and build you're own Robot or home automation system, you would be able to learn a lot in the process : Shell, C, automation, basic electronics, python, node.js. When you'll have the project done you'll have get through a lot of the main basics of programming, embedded systems, web, and electronics subjects. But to truly progress you should not only follow tutorials but also try to understand stuff and mess around." CreationDate="2018-06-11T10:15:28.673" UserId="4900" />
  <row Id="13109" PostId="4870" Score="0" Text="I narrowed the question in the (edited) last paragraph by citing an example, and wonder if the question can be reopened in its current form." CreationDate="2018-07-31T21:46:53.117" UserId="613" />
  <row Id="12769" PostId="4871" Score="0" Text="Hardware is somewhat less important than it was 40 years ago. Amateur Radio is similarly less relevant nowadays." CreationDate="2018-06-09T21:25:56.440" UserId="1536" />
  <row Id="12770" PostId="4871" Score="0" Text="@YuvalFilmus but if the OP wants to learn about &quot;computers and electronics&quot; then hardware is pretty important. And since Amateurs do much of the experimental programming and hardware design, I think they are just as relevant as they were in Edwin Howard Armstrong's day. 750,000 hams in the US, twice as many in Japan and millions more throughout the world would probably disagree with you." CreationDate="2018-06-09T23:52:50.423" UserId="5349" />
  <row Id="13626" PostId="4875" Score="0" Text="Kobayashi Maru was engaging because it is presented as a survival situation. Maybe if students knew the real stakes of learning, they would see it that way." CreationDate="2018-10-08T20:49:05.743" UserId="5349" />
  <row Id="13620" PostId="4877" Score="1" Text="Dijkstra not Dikjstra" CreationDate="2018-10-07T12:57:50.860" UserId="6033" />
  <row Id="13621" PostId="4877" Score="1" Text="@hkBst, thanks. fixed. I know that, actually. Usually I get it right." CreationDate="2018-10-07T13:02:28.017" UserId="1293" />
  <row Id="13622" PostId="4877" Score="1" Text="@hkBst, welcome to CSEducators, by the way. When you earn 1K rep here you can make such changes yourself." CreationDate="2018-10-07T13:24:33.380" UserId="1293" />
  <row Id="13060" PostId="4879" Score="4" Text="Just wanted to highlight this part: &quot;...don't know how to start- in fact, they don't even know what it's asking&quot;. Part of a class discussion could include breaking down the question as a group. As the question is broken down, it will be easier for students to see paths to solutions. Then they can start to have discussions on how to write/construct the code for the answer." CreationDate="2018-07-05T16:57:25.577" UserId="5476" />
  <row Id="12825" PostId="4880" Score="0" Text="Chat bots and chat systems make great projects to build up and on.  The possibilities of working with both client-server and peer to peer communication either via web protocols (build a RESTful API and demo client) or socket communication, command line, GUI, or browser based interfaces, maybe some networking and sysadmin/database skills, etc." CreationDate="2018-06-17T19:33:30.467" UserId="662" />
  <row Id="12798" PostId="4882" Score="0" Text="I like this answer, though you sort of skirted past the confusion that wolf-revo-cats asked about, which is the somewhat odd mismatch between `chown` and `chmod o...`.  Would you then say that `chown` should have been `chusr`?  Or, more to the point, how would you get folks new to the unix model to avoid getting confused here in the first place?" CreationDate="2018-06-14T12:18:20.580" UserId="27" />
  <row Id="12805" PostId="4882" Score="0" Text="Would you mind editing the answer itself to integrate your strategy for teaching about the mismatch?  The comments down here are considered impermanent, and will eventually be wiped away." CreationDate="2018-06-14T20:45:05.517" UserId="27" />
  <row Id="12806" PostId="4882" Score="0" Text="Done. I'm fairly new here; do the comments get wiped automatically or is that done manually?" CreationDate="2018-06-14T20:52:14.427" UserId="1336" />
  <row Id="12807" PostId="4882" Score="0" Text="It's normally done manually, but the central idea of SE is to create really high quality questions and answers that help future visitors. The comment tool is really just meant to provide an avenue to help improve questions or answers.  The answer should still ultimately end up in the answer :)" CreationDate="2018-06-14T20:58:55.730" UserId="27" />
  <row Id="12793" PostId="4883" Score="2" Text="Hi Scott, I put the question into the header to make the topicality clearer. If I made a mistake, feel free to revert." CreationDate="2018-06-13T15:07:34.123" UserId="27" />
  <row Id="12795" PostId="4883" Score="0" Text="@Buffy Thanks for locating the article and putting it in the question!" CreationDate="2018-06-13T18:36:15.310" UserId="5349" />
  <row Id="12796" PostId="4883" Score="0" Text="You should check out http://kingjamesprogramming.tumblr.com/ Which is &quot;Posts generated by a Markov chain trained on the King James Bible, Structure and Interpretation of Computer Programs, and some of Eric S. Raymond's writings Run by Michael Walker (barrucadu).&quot;" CreationDate="2018-06-13T19:32:00.910" UserId="1879" />
  <row Id="12799" PostId="4883" Score="1" Text="@Adam in the original article, it gave an excerpt of some emitted text, which included something like: &quot; '*The simulacrum is true' -- Ecclesiastes*&quot;" CreationDate="2018-06-14T14:37:58.673" UserId="5349" />
  <row Id="12794" PostId="4884" Score="0" Text="OK, well I might be ignorant about the particulars of Markov Chains, having read about them 30 years ago, so that is fine. But some sort of weighted prediction (more like a tree) is obviously being used to drive the keyboard thing, because I can often type an entire text message just by picking one of the three suggestions for next word on my phone. Pretty good prediction, if you ask me! (Have you used that feature?) The frustrating thing is how the options move position as I type, so I am reaching for the leftmost one and by the time I touch there, it has moved to the center position. Ugh!" CreationDate="2018-06-13T18:31:07.483" UserId="5349" />
  <row Id="12808" PostId="4884" Score="0" Text="Scott, the same thing happens to me!  My fingers aren't fast enough.  Usually the data structure used for predictive typing is a TRIE - here's one article on how to do it in Javascript: [link] (https://medium.com/@dookpham/predictive-text-autocomplete-using-a-trie-prefix-tree-data-structure-in-javascript-part-1-6ff7fa83c74b)" CreationDate="2018-06-15T13:44:06.147" UserId="4338" />
  <row Id="12812" PostId="4887" Score="1" Text="I don't understand what the third point has to do with puzzles. Project Euler has great puzzles, for instance, but they are language-agnostic." CreationDate="2018-06-16T10:45:04.587" UserId="27" />
  <row Id="12813" PostId="4887" Score="1" Text="I'm guessing that you mean, but don't say, you want programs for puzzles where a human user is currently the solver, but that might be amenable to replacing that with an automated or AI solver instead. If that is correct, you might stress it more in the question." CreationDate="2018-06-16T10:59:05.320" UserId="1293" />
  <row Id="12814" PostId="4887" Score="0" Text="This strikes me as too broad, because there's no actual question here or problem to be solved. You're asking for a list of games that fit your criteria. Questions that ask for lists aren't a good fit for the Stack Exchange Q&amp;A format because there's no real question and there's no way to judge the &quot;best&quot; answer, so voting fails to be useful. This question could be improved by adding what you want to use these games _for_, giving us the larger context that you'll be using these games in." CreationDate="2018-06-16T13:10:32.283" UserId="58" />
  <row Id="12817" PostId="4887" Score="0" Text="@thesecretmaster yes it may be a list question, but I think it can work. It is bounded. Only **implementations** that fit the **criteria**. My hope is no find one or two collections." CreationDate="2018-06-16T14:06:40.890" UserId="204" />
  <row Id="12818" PostId="4887" Score="1" Text="@Ben Point 3 allows the view and controller to be re-written, as an AI." CreationDate="2018-06-16T14:08:07.667" UserId="204" />
  <row Id="12820" PostId="4887" Score="0" Text="@ctrl-alt-delor Would you mind adding the concept(s) you're trying to teach using these games?" CreationDate="2018-06-16T15:14:58.523" UserId="58" />
  <row Id="12850" PostId="4891" Score="1" Text="I believe that this question should be closed as too broad. From the help center: &quot;Avoid asking subjective questions where ... you are asking an open-ended, hypothetical question&quot; and &quot;You should only ask practical, answerable questions based on actual problems that you face.&quot; To narrow it down, you could add information about _why_ you want to know this and how it relates to your teaching." CreationDate="2018-06-18T17:58:59.363" UserId="58" />
  <row Id="12853" PostId="4891" Score="5" Text="I agree that the question can be improved as above, but not that it should be closed. Sometimes a question that seems simple turns out not to be - here and in the classroom." CreationDate="2018-06-18T18:14:24.403" UserId="1293" />
  <row Id="12855" PostId="4891" Score="0" Text="Please refrain from using the comments to talk about your experiance with typing. Comments are for suggesting improvments to the question, not discussion of it or answers. Answers in comments or discussion of your experiance learning to type will be deleted." CreationDate="2018-06-18T18:28:30.733" UserId="58" />
  <row Id="12920" PostId="4891" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79132/discussion-on-question-by-student-what-advantages-do-students-have-who-learn-how). Any further comments which are not used appropriatly will be removed." CreationDate="2018-06-20T11:28:23.100" UserId="58" />
  <row Id="12845" PostId="4892" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79042/discussion-on-answer-by-buffy-what-advantages-do-students-have-who-learn-how-to). You're welcome to continue discussing this in chat, but comments are for suggesting improvments to the answer." CreationDate="2018-06-18T16:39:43.710" UserId="58" />
  <row Id="12862" PostId="4892" Score="0" Text="This answer would be improved by more clearly differentiating between _touch typing_ and _homerow_. Typing without looking at the keyboard has nothing to do with how many fingers touch the keys." CreationDate="2018-06-19T05:31:51.730" UserId="5382" />
  <row Id="12896" PostId="4892" Score="2" Text="Don't forget chat software and e-mails." CreationDate="2018-06-19T21:07:12.270" UserId="981" />
  <row Id="12925" PostId="4892" Score="1" Text="@Knetic The clraified question clearly asks for touch typing = nine finger typing, which is almost always homerow typing. - Other interpretations could be &quot;watching the screen instead of your hands&quot; but are quite blurry and hard to test as a course requirement." CreationDate="2018-06-20T13:56:10.587" UserId="5414" />
  <row Id="12851" PostId="4893" Score="1" Text="I've downvoted this answer because looking 'professional' while typing shouldn't be a prerequisite to learning CS. Maybe for the workplace, but not for a classroom." CreationDate="2018-06-18T18:06:31.763" UserId="58" />
  <row Id="12852" PostId="4893" Score="1" Text="Your first two paragraphs seem inconsistent. Do you really mean to say that you wouldn't let a person start CS until they demonstrate somehow that they are competent in typing? That seems too extreme for me and a good way to assure small classes and frustrated (non) students.  I doubt that even Language Arts would make that requirement." CreationDate="2018-06-18T18:10:46.197" UserId="1293" />
  <row Id="12856" PostId="4893" Score="1" Text="Being unable to type and look at the screen at the same time is a pretty big disadvantage.  If I was teaching a college level computer science course I would want students to be prepared.  Perhaps I wouldn't have it as a pre-requisite but would instead paint over the alphabetic keys of all the keyboards?  The point is they should have it eventually and therefore might as well be practicing while working in their other CS classes." CreationDate="2018-06-18T19:58:15.603" UserId="1399" />
  <row Id="12857" PostId="4893" Score="4" Text="@BillK, hmmm. The beatings will continue until morale improves. Right?" CreationDate="2018-06-18T20:08:56.110" UserId="1293" />
  <row Id="12858" PostId="4893" Score="3" Text="I taught college level CS for over 40 years and never once found typing ability to be an issue. However, if I wanted students to do something that they weren't used to, I'd look for some _positive_ inducement to get them to do it, **not** a way to increase their frustrations. If my relationship with them was good (and it was), a simple suggestion in the hallway might be enough. But you get that good relationship by supporting the students, even when they do sub-optimal things. Frustrating them will make them hate me as well as the subject, I suspect. I would have no future influence with them." CreationDate="2018-06-18T20:22:48.883" UserId="1293" />
  <row Id="12859" PostId="4893" Score="0" Text="However, to be fair, I generally agree with the first paragraph of your answer. Typing skills are _helpful_. But so are editing/refactoring skills and thinking skills and interpersonal skills and ..." CreationDate="2018-06-18T20:27:32.970" UserId="1293" />
  <row Id="12876" PostId="4893" Score="0" Text="@ScottRowe, actually you _don't_ have to finish by graduation. If a student never learns anything after they end their formal education, you have failed as a teacher. Giving them good mental habits and an enquiring mind will carry them further than any technical idea. But starting early is good, I agree." CreationDate="2018-06-19T12:22:01.513" UserId="1293" />
  <row Id="12878" PostId="4893" Score="0" Text="@Buffy it comes down to defining the goal, and there are differing views on that. We are probably looking at the same thing from opposite sides." CreationDate="2018-06-19T12:26:05.300" UserId="5349" />
  <row Id="13115" PostId="4893" Score="0" Text="@Buffy I'm sure you are right and that's why I'm a programmer and not an educator.  I was using what had worked for me and trying to figure out a way to apply it to everyone--a pretty bad idea." CreationDate="2018-08-01T21:34:30.650" UserId="1399" />
  <row Id="12861" PostId="4895" Score="1" Text="Welcome to CSEducators. I'm guessing that your experience is pretty common, in the US, at least. When I was a kid typing was pretty unusual as a course - for boys anyway." CreationDate="2018-06-18T23:46:09.083" UserId="1293" />
  <row Id="12864" PostId="4895" Score="2" Text="There is another advantage: smaller error rate: you catch typos faster if you are looking at the screen rather than at the keyboard. I don't know if you lump that together with &quot;efficiency&quot;, but in my view it's a huge time-saver. Those typos often become time-consuming bugs to hunt." CreationDate="2018-06-19T07:46:45.750" UserId="1658" />
  <row Id="12870" PostId="4895" Score="0" Text="@Buffy That's a good point that my experience may be reasonably unique to the US, but is kind of orthogonal to the point I was trying to make." CreationDate="2018-06-19T11:52:13.093" UserId="2523" />
  <row Id="12866" PostId="4897" Score="0" Text="Welcome to CSEducators. Can you document the claim in the second paragraph for future readers?" CreationDate="2018-06-19T10:02:47.140" UserId="1293" />
  <row Id="12871" PostId="4897" Score="0" Text="The cited paper seems to be about something completely different - shoulder surfing" CreationDate="2018-06-19T11:52:27.100" UserId="1293" />
  <row Id="12872" PostId="4897" Score="6" Text="@Buffy: If by *document* you mean *provide evidence,* I have nothing than my own experience to offer (except for the fact that touch typing relies on muscle memory, which seems to be generally accepted). A few similar claims can be found on the Internet, but they are not very trustworthy." CreationDate="2018-06-19T11:52:49.540" UserId="25" />
  <row Id="12873" PostId="4897" Score="0" Text="I'd be surprised it it hasn't had some research applied to it. If the claims are not trustworthy where does that leave us. My suspicion, too, is that it is a correct observation, but gut feeling isn't the same as research. As it stands it is just opinion." CreationDate="2018-06-19T11:54:39.653" UserId="1293" />
  <row Id="12887" PostId="4897" Score="0" Text="@Buffy: 1) See my edit. 2) Regarding the trustworthiness of the claims, I should have written that the sources are not trustworthy. 3) *As it stands it is just opinion.* – Yes." CreationDate="2018-06-19T19:22:40.890" UserId="25" />
  <row Id="12897" PostId="4897" Score="3" Text="@Buffy Evidence of _what_ is still a question, but there has been some research done on the subject. The published paper is [pay-walled](http://psycnet.apa.org/psycinfo/2016-49569-001/). It is discussed, however, in an [article](https://news.vanderbilt.edu/2016/10/18/todays-self-taught-typists-almost-as-fast-as-touch-typistsas-long-as-they-can-see-the-keyboard/) from Research News @ Vanderbilt." CreationDate="2018-06-19T21:07:34.850" UserId="104" />
  <row Id="12910" PostId="4897" Score="0" Text="@GypsySpellweaver: Thanks for the reference. Sadly the research (as reported in Research News) doesn’t go to the interesting part: They compare touch typists and others when benchmarking pure typing skills in an unrealistic manner. They also report that touch typists become slower when composing a message (no surprise here). But they do not compare touch typists and others when composing a message." CreationDate="2018-06-20T05:50:24.603" UserId="25" />
  <row Id="12926" PostId="4897" Score="3" Text="I just opened my IDE and started typing, after 3 letters Intelli-Sense plopped up and I chose the right signature via two cursor down presses. - Programming with a modern IDE is more interacting with a document with mouse, cursors and hotkeys instead of typing a lot of long words. - So touch-hot-keying and fast-document-navigation are probably more useful skills for muscle memory." CreationDate="2018-06-20T13:58:59.720" UserId="5414" />
  <row Id="12953" PostId="4897" Score="2" Text="@Wrzlprmft Motor memory also works for people who don't touch-type. I am a retired software engineer who worked in Silicon Valley industry and never learned how to touch type. I type with my middle fingers mostly, but I don't have to &quot;hunt and peck&quot;. Rather, I have to look down at the keyboard every other word or so, the rest is motor memory, as long as I keep using the same (or very similar) keyboard. My take is that touch typing is a nice-to-have skill but not required to be a successful software engineer. The few times I wished I could touch type was when cranking out lengthy documentation." CreationDate="2018-06-21T02:00:27.903" UserId="1940" />
  <row Id="13007" PostId="4897" Score="1" Text="With the advent of IDEs that you keep having to interact with this is much less of a factor than it used to be.  I do know in the old days I found it harder to program if I didn't have a suitable desk &amp; chair that permitted touch typing--thinking about typing interferes with thinking about what you're writing." CreationDate="2018-06-23T04:37:30.463" UserId="668" />
  <row Id="13009" PostId="4897" Score="1" Text="@Falco Using mouse to control your computer is not very effective. Interrupted though process is big productivity loss (and there are studies for that). Of course, I use mouse/touchpad too, mostly to switch files, but very rarely when editing a single file since using keyboard is so much more effective. After 20 years of using a computer I don't have to think about it at all." CreationDate="2018-06-23T12:44:03.590" UserId="5449" />
  <row Id="13010" PostId="4897" Score="0" Text="@Sulthan maybe that is the biggest difference, I can not remember the last time I really wrote 50 lines of code at once sequentially in a single file... It is usually a few lines here a few lines there, introducing a new variable or method, writing long sequential code in a single file is a rarity for me" CreationDate="2018-06-23T12:50:35.340" UserId="5414" />
  <row Id="13028" PostId="4897" Score="0" Text="@LorenPechtel: Actually, interacting with IDEs makes it *more* necessary to type without looking at the keyboard (because you have to see what the IDE is suggesting on-screen)" CreationDate="2018-06-25T04:27:43.037" UserId="5163" />
  <row Id="13046" PostId="4897" Score="0" Text="@BenVoigt You can look back and forth.  What I'm saying is that with a modern IDE you're not writing much code at once before having to interact with it anyway, thus it's less of a disruption to have to think about the typing." CreationDate="2018-06-26T17:55:10.717" UserId="668" />
  <row Id="12885" PostId="4901" Score="1" Text="In your first four paragraphs you make some claims. Perhaps they are widely held, but perhaps they are just opinions. Can you point to any research to back them up? It would make your argument stronger, of course." CreationDate="2018-06-19T19:11:50.287" UserId="1293" />
  <row Id="12899" PostId="4902" Score="34" Text="A forcefully stated opinion, at least. And if you are a business owner you can hire whom you like, i guess. But this says &quot;This is TRUE because I DEMAND that it is true.&quot; More forceful than convincing. And yes, even in academia I've typed thousands of lines of code (per day) and thousands of lines of tests. I am a touch typist, however, but don't attribute my success to that. Some of your statements above may be supportable, but none are supported by what you say, actually." CreationDate="2018-06-19T22:19:28.390" UserId="1293" />
  <row Id="12901" PostId="4902" Score="2" Text="@Buffy, Again my intention is not to insult or disparage people. It's to make clear how fundamental the skill is to being an effective engineer. I think I've included valid reasons why it's important. Your own experience supports my answer (writing thousands of LOC). I don't think we would be doing any students any good by telling them &quot;proper typing skills aren't required to be effective&quot; which is what the top answers seem to suggest." CreationDate="2018-06-19T22:43:35.053" UserId="5392" />
  <row Id="12902" PostId="4902" Score="38" Text="Actually, you don't give _any_ reasons. Just opinion. Read it critically. If there is research, cite it. Your firmly held beliefs, however, aren't reasons, and certainly not proof." CreationDate="2018-06-19T22:47:55.633" UserId="1293" />
  <row Id="12913" PostId="4902" Score="14" Text="In your answer, you seem to use, interchangeably, &quot;programmer&quot; and &quot;software engineer&quot;. They're not. You also seem to imply all CS students become either one or the other. That's false. You explicitely state that all CS students will have to write thousands of lines of code during their career. That's false. Also, that they will have to do it under a deadline. That's false. You seem to imply using a whiteboard is only for academia and not &quot;real world&quot;. That's false (I've known a  *rockstar tech lead/project manager* in a very real private company who uses whiteboards and kanban *exclusively*)" CreationDate="2018-06-20T08:53:21.373" UserId="994" />
  <row Id="12921" PostId="4902" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79133/discussion-on-answer-by-james-what-advantages-do-students-have-who-learn-how-to)." CreationDate="2018-06-20T11:35:38.197" UserId="58" />
  <row Id="12922" PostId="4902" Score="15" Text="You state that since there are many lines of code to write, touch typing should be a requirement. However, you haven't shown any sort of proof that touch typing is actually the fastest way. I've met plenty of programmers who can type *very fast* and *very accurately* even if they're not touch typists. If someone can effectively write large amounts of error-free code, why would it matter if they're looking at their hands while doing so?" CreationDate="2018-06-20T13:15:31.300" UserId="5071" />
  <row Id="12928" PostId="4902" Score="0" Text="All, I've incorporated feedback from your comments to try to improve the answer. I've relaxed the tone and tried to acknowledge the variety of CS jobs. But overall, I still maintain that effective typing skills are only going to benefit the student in the long run." CreationDate="2018-06-20T14:10:20.267" UserId="5392" />
  <row Id="12935" PostId="4902" Score="3" Text="@xDaizu Nowadays, those terms are pretty interchangeable. Not many places hire &quot;code-monkeys&quot; anymore. Having only the ability to write code is not enough anymore, like it was a few years ago (especially in the 90s and 2000s). You are right about CS students not being either, though. In fact, I think a very significant portion of CS grabs don't write code for a living." CreationDate="2018-06-20T16:28:44.350" UserId="2719" />
  <row Id="12952" PostId="4902" Score="1" Text="Please keep comments to suggestions for improvements to this answer. Any other types of comments will be removed." CreationDate="2018-06-20T19:39:03.457" UserId="58" />
  <row Id="12959" PostId="4902" Score="3" Text="I get this got the check but it does not answer the stated question &quot;CS education benefit&quot;." CreationDate="2018-06-21T11:49:10.067" UserId="4526" />
  <row Id="13017" PostId="4902" Score="0" Text="If you have a different answer to the question, the comments section on this answer is not the place for it. Write your answer as an answer, not as a comment here. Answers in the comments will be removed." CreationDate="2018-06-24T04:58:58.650" UserId="58" />
  <row Id="13020" PostId="4902" Score="5" Text="In the real-world, **coding is more thinking than typing** is completely true, and to a greater degree than in undergraduate coursework.  That doesn't mean that you won't write thousands of lines of code (plus tests), but claiming that productivity of a programmer is solely dependent on how fast they type is just plain ridiculous.  Certainly typing skills are an advantage, but that's because of the level of thinking involved -- when you have an idea you want to get it stored as quickly as possible before you start thinking about the next step." CreationDate="2018-06-24T20:29:42.200" UserId="5163" />
  <row Id="13021" PostId="4902" Score="3" Text="In fact, the value of fast typing is almost totally from improved speed of writing ideas down -- the increased speed of typing code is nice but ultimately unimportant.  So while I agree with your conclusion that acquiring touch-typing skills should be encouraged, I can't upvote your answer due to the blatant wrong ideas you share along the way." CreationDate="2018-06-24T20:30:21.027" UserId="5163" />
  <row Id="13025" PostId="4902" Score="0" Text="With the comments continually sniping on &quot;speed of typing&quot;, while the answer doesn't actually say that, I think part of it should be rewritten to explicitly state that efficiency isn't _just_ speed. I mentioned it in a prior comment that was removed, but I think it's worth adding to the answer itself: The bigger issue is that when thinking about code, you want as few context switches as possible. Usually this is framed as not being interrupted by another person, but having to stop and think about the keyboard instead of the code is another type of context switching that has to be minimized." CreationDate="2018-06-25T00:39:44.587" UserId="3262" />
  <row Id="13026" PostId="4902" Score="4" Text="Sorry, I've know many programmers who were two-fingered typists. They were quite proficient, typing 80 wpm." CreationDate="2018-06-25T02:30:34.180" UserId="5397" />
  <row Id="13027" PostId="4902" Score="0" Text="@kevincline Sounds like they are touch-typists, just not home-row touch-typists.  They'd fall on the &quot;would hire&quot; side of this answer." CreationDate="2018-06-25T03:55:30.160" UserId="3262" />
  <row Id="13029" PostId="4902" Score="0" Text="The disabled can be hired to program just fine without the ability to touch type." CreationDate="2018-06-25T06:10:08.603" UserId="1364" />
  <row Id="13030" PostId="4902" Score="1" Text="@James I agree with regards to being able to type without looking (much) at the keyboard, but I think you should spell out the distinction in your answer between traditional &quot;proper&quot; touch-typing (using the home rows) and what I tend to call &quot;typing by touch&quot; which may use a style closer to hunt-and-peck but is still done without (much) looking at the keyboard and so is likely to be almost as fast as proper touch-typing." CreationDate="2018-06-25T09:33:17.697" UserId="988" />
  <row Id="14154" PostId="4902" Score="0" Text="I have worked in quite a few projects from academic high level project to pretty dumb applications, never has the typing speed been a major factor in how good a developer was. Sure, it's a factor, but in most cases looking for that is optimising at the wrong place when other factors have a much higher impact. If all else is equal it might be something to consider, but if the other &quot;hard&quot; abilities are the same I'd rather look for social skills as a deciding factor than the typing abilities. That's a mechanical trainable skill, every good dev will find a way for it not to be a limiting factor." CreationDate="2019-01-11T14:54:33.333" UserId="3039" />
  <row Id="12917" PostId="4904" Score="1" Text="[Cross-posted](https://cs.stackexchange.com/q/93253/1960)" CreationDate="2018-06-20T10:33:05.233" UserId="1219" />
  <row Id="12918" PostId="4904" Score="9" Text="Most of the good stuff was written in the 1960s." CreationDate="2018-06-20T10:41:48.923" UserId="204" />
  <row Id="12929" PostId="4904" Score="4" Text="It is all footnotes to Dijkstra anyway." CreationDate="2018-06-20T15:03:14.420" UserId="5349" />
  <row Id="12933" PostId="4904" Score="2" Text="More specific examples might help. For example, the book &quot;Clean Code&quot; is still widely accepted as an applicable book today, whereas an &quot;Introduction to Visual Studio&quot; book written in 2008 might not be very useful right now." CreationDate="2018-06-20T16:21:23.940" UserId="2719" />
  <row Id="13018" PostId="4907" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/79281/discussion-on-answer-by-ctrl-alt-delor-what-advantages-do-students-who-learn-how)." CreationDate="2018-06-24T05:08:47.007" UserId="58" />
  <row Id="12924" PostId="4908" Score="0" Text="Testing knowledge is necessarily different from workplace activity. What if college graduation required successful workplace activity for one year? What if college (and High School) consisted of learning and becoming proficient in one or more workplaces - like Internships? This is called Apprenticeship. Used to work just fine..." CreationDate="2018-06-20T13:30:46.253" UserId="5349" />
  <row Id="12937" PostId="4908" Score="0" Text="@ScottRowe There are, in fact, some colleges/universities that require internships and many others that strongly encourage them. The skills they learn from that are usually pretty good in my experience. For a good student it is also a nice path to later employment. Unfortunately, unpaid internships are too often just a way to exploit young people. Especially if those unpaid internships _don't_ give good skills, as some fail to do." CreationDate="2018-06-20T16:40:37.937" UserId="1293" />
  <row Id="12940" PostId="4911" Score="0" Text="Welcome to CSEducators." CreationDate="2018-06-20T17:18:51.623" UserId="1293" />
  <row Id="13013" PostId="4911" Score="0" Text="Using shift-del and shift-ins is massively faster, easier and less error-prone than the ctrl shortcuts for cut / copy / paste, as we learned before computers had a mouse. (Copy is just cut and put back in the same spot, nearly instantaneous, then paste as many copies as you want elsewhere.) Coupled with shift-arrows to highlight, shift becomes the most used key on the keyboard. Faster than any other way." CreationDate="2018-06-23T15:25:21.980" UserId="5349" />
  <row Id="13031" PostId="4911" Score="0" Text="It depends on the keyboard size as there's significantly more hand travel to reach the insert/delete keys compared to control+c/v. On a more compact keyboard I can see there being less of a difference, on an ergonomic (split) keyboard going to insert and delete would take much longer." CreationDate="2018-06-25T14:24:04.677" UserDisplayName="user5416" />
  <row Id="13091" PostId="4911" Score="0" Text="Use two hands if you got em. Hold down Shift with left hand and then use arrows, Ins, Del with right. Very fast." CreationDate="2018-07-18T19:11:51.797" UserId="5349" />
  <row Id="13012" PostId="4912" Score="0" Text="Just think what you could have accomplished if you could type faster?" CreationDate="2018-06-23T15:20:22.613" UserId="5349" />
  <row Id="12989" PostId="4913" Score="0" Text="Yes, I think the key to the question is whether to make something *required* and how. There seems to be a cultural bias (which I share) that we simply make the knowledge available and people undertake their own path through it. In other times and places it is more like: &quot;Learn all this perfectly and then you can decide for yourself once you have mastered it.&quot; It is wrong to not provide a path and expectations, also wrong to force people to do things that they do not need. But we are not omniscient and things are changing fast so we don't know what is best. We all have opinions though..." CreationDate="2018-06-22T12:13:39.817" UserId="5349" />
  <row Id="13022" PostId="4914" Score="0" Text="Actually, your first experience was not pair programming. It was just two people assigned to one task. That isn't at all what pair programming is like. Division of labor is not one of the goals of pair programming and just as you say, it often fails. It often fails in just the way you suggest. But it isn't an example of Pair Programming." CreationDate="2018-06-24T22:55:14.900" UserId="1293" />
  <row Id="13023" PostId="4914" Score="0" Text="Welcome to [cseducators.se]. Input like this is quite useful to instructors trying to develop courses and classes that will help the students _learn_ the material, not just get a grade. I certainly hope we see more of your input and experience on the site. Once you have 20, or more, reputation points you can also join the conversation in [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) which is a chatroom dedicated to this site. It's often quiet, but it can get lively when new questions show up, or things get lively on the site." CreationDate="2018-06-24T22:55:36.177" UserId="104" />
  <row Id="13024" PostId="4914" Score="0" Text="To add to my earlier comment: A common problem is technology generally and programming in particular is what happens when some successful methodology is widely adopted but adopted partially or badly without understanding. You hear things like &quot;X just doesn't work&quot;, when in fact X wasn't really tried. There are many synergistic aspects of some things and when parts are omitted, the synergy isn't there anymore. Your post is, therefore really valuable, though not as a criticism of Pair Programming. Division of Labor often fails to take into account that the work of two must be then integrated." CreationDate="2018-06-25T00:04:12.667" UserId="1293" />
  <row Id="13037" PostId="4914" Score="0" Text="Interesting... I believe my first experience _was intended to be_ pair programming, but I ended up being the driver, and my partners were not skilled enough to be the driver, or even the observer in most cases.  I ended up doing both the driving _and_ the observing (in hopes my partner would learn a thing or two).  It was not well explained, but it was the intention for us to be Pair Programming.  In light of the bad explanation, most students (myself included) took &quot;Pair Programming&quot; to mostly mean, &quot;We only have to do half the work.&quot;" CreationDate="2018-06-26T00:24:47.270" UserId="5453" />
  <row Id="13032" PostId="4915" Score="0" Text="While not directly answering the question, this answer does have a log of value. I suspect that the gap that it discusses, is widened by the use of poor names. The more unlike their native language, the wider the gap will be. Well written python, with good name, can look like english (may be any other language), but with strange punctuation." CreationDate="2018-06-25T17:08:01.933" UserId="204" />
  <row Id="13038" PostId="4916" Score="2" Text="How much control over the setup for the room do you have? How much &quot;authority&quot; do you have for setting rules of conduct within the class? Do you have the ability (and permission), using your own skills or through the &quot;IT Dept.&quot; to customize the installations on the student workstations?" CreationDate="2018-06-26T02:18:35.620" UserId="104" />
  <row Id="13039" PostId="4916" Score="0" Text="@GypsySpellweaver I can change the layout of the room to an extent. The limiting factor is the location of the floor outlets, which are in rows along the floor. I'm stuck with windows as the workstation OS, but I can request that custom software be installed by the IT Dept. However, a request to install software could take a prohibitivly long time (think majority of a school-year)." CreationDate="2018-06-26T02:21:44.383" UserId="58" />
  <row Id="13041" PostId="4916" Score="0" Text="What is the class? Is it intro to programming or something broader or ...?" CreationDate="2018-06-26T09:44:45.390" UserId="1293" />
  <row Id="13042" PostId="4916" Score="0" Text="It's an introduction to programming class" CreationDate="2018-06-26T09:45:38.503" UserId="58" />
  <row Id="13043" PostId="4916" Score="0" Text="Is the solution as simple as looking &quot;down&quot; the rows, rather than &quot;across&quot; them? I.e. turning the configuration 90 degrees, or moving your own position to a side wall?" CreationDate="2018-06-26T10:11:12.860" UserId="1293" />
  <row Id="13044" PostId="4916" Score="0" Text="When I'm standing at the front of the room, I am looking down rows. But when I am walking around the classroom, I'll be walking through rows." CreationDate="2018-06-26T10:52:35.533" UserId="58" />
  <row Id="13045" PostId="4916" Score="0" Text="Then isn't it pretty obvious when students aren't paying attention? Their shoulders would be to you rather than their faces? Or maybe you should face them more, rather than back to them at the board. FWIW, I don't like the general set up of one computer per student other than in lab sessions. Recessing the screens into the desks (expensive) gives everyone a more open view, which is good but won't solve the problem." CreationDate="2018-06-26T10:57:47.303" UserId="1293" />
  <row Id="13093" PostId="4916" Score="0" Text="Does it particularly mater if the people in the class are not always paying attention to your lecture? If that is their choice, let them reap what they sow. Taking personal responsibility and understanding consequences starts in adolescence, but perhaps I'm assuming that the children in question aren't younger than high school aged. If you are worried about &quot;problem children&quot; bothering other, potentially-interested, children; splitting up the desks to discourage interaction is a good idea. Counter this with time where students can freely move around to help each other work on assignments." CreationDate="2018-07-21T02:18:36.530" UserId="2847" />
  <row Id="13114" PostId="4917" Score="0" Text="True, but. If it takes two hours to think through and solve the homework assignment, taking one or ten minutes to type it up for hand in makes no significant difference." CreationDate="2018-08-01T21:00:01.403" UserId="5219" />
  <row Id="13047" PostId="4919" Score="0" Text="Start each class with a stand-up lecture : )" CreationDate="2018-06-27T17:05:05.683" UserId="5349" />
  <row Id="13054" PostId="4921" Score="1" Text="Isn't that an argument *for* starter code? There are so few opportunities within a broader curriculum to give students practice honing that skill, and algorithms is one of the few places where it fits rather naturally, no contortions required. After all, it really does take practice to get decent at it. It is rather like stepping into someone else's brain." CreationDate="2018-07-03T12:05:20.353" UserId="27" />
  <row Id="13055" PostId="4921" Score="0" Text="I'm not sure I agree with everything you say, but it is well thought out and something to consider. Of course, if you let them make mistakes you need other pedagogical tricks to catch them and focus on the mistakes. Likewise, starter code needs to be well thought out for its overall effect and for where in the curriculum you use it. +1" CreationDate="2018-07-03T13:05:08.500" UserId="1293" />
  <row Id="13056" PostId="4921" Score="0" Text="I had an experience where the TA did not explain my mistake to me, so it took a while to figure out, but I never forgot that lesson! I try to find a balance between letting students discover their problems and having them waste time needlessly. I agree on the starter code. I think that it becomes something the students don't look at because they have their face pressed against the windshield trying to go faster, and the more they overlook, the less they learn. Writing the same boilerplate code several times is the only way to learn that stuff." CreationDate="2018-07-03T14:52:02.023" UserId="5349" />
  <row Id="13061" PostId="4921" Score="0" Text="@BenI. I agree 100% about that being a benefit with starter code. But understanding someone else's code and learning an algorithm does seem a bit daunting for some students. Would it be more reasonable to say that it depends on the student or experience level? If the student is struggling just to understand the starter code, then you can take a step back and try looking at the algorithm from scratch? Also - I hope I'm not breaking any rules by asking that question. If I was on StackOverflow, it would be bordering on &quot;a discussion in the comments&quot; which is discouraged." CreationDate="2018-07-05T18:22:31.210" UserId="5476" />
  <row Id="13062" PostId="4921" Score="0" Text="The purpose of comments is to improve the quality of the questions and answers, so I'm happy to report that this would be acceptable on SO as well :) As far as the level of the students, figuring out when it is appropriate to make accommodations, and what accommodations to make, is one of the very toughest problems teachers face. :)" CreationDate="2018-07-05T23:16:12.907" UserId="27" />
  <row Id="13059" PostId="4922" Score="6" Text="copy/pasting code samples from a video is very hard to do.  Also, keep in mind accessibility ...." CreationDate="2018-07-05T16:40:49.410" UserId="662" />
  <row Id="13070" PostId="4922" Score="1" Text="I believe this question is mostly opinion-based. There are many pros and many cons of each. Different people are going to prefer different formats for different topics, at different times. Go with whichever one you enjoy creating more." CreationDate="2018-07-09T17:20:43.960" UserId="2068" />
  <row Id="13075" PostId="4922" Score="0" Text="Make it interactive. and include text, pictures, and video." CreationDate="2018-07-10T23:27:05.363" UserId="204" />
  <row Id="16169" PostId="4922" Score="0" Text="@ivanivan: Most (good quality) development training tends to have a publically accessible repository for the discussed code (e.g. GitHub), and Youtube videos are no different. Code samples very quickly grow beyond something that is easily digestable over the limited space in a blog post anyway - though snippets are more viable there." CreationDate="2020-02-19T15:00:33.477" UserId="2164" />
  <row Id="13057" PostId="4923" Score="0" Text="Instructional blogs/vlogs like this often have a video, it's transcript, and exercises. Check out www.tomorrowsfilmmakers.com for an example." CreationDate="2018-07-04T13:11:58.087" UserId="1537" />
  <row Id="16141" PostId="4924" Score="1" Text="100% agree, it's way harder to find a specific piece of information in a video than it is in written text. Also consider the value of Ctrl+F to find keywords of interest in large documents, while there isn't really a commonly used analogue for searching a video. Short videos on general topics are fine (especially if I don't really know what I'm looking for), but if I'm looking for a specific nugget of information, text will get me there a lot faster." CreationDate="2020-02-07T21:13:21.747" UserId="1703" />
  <row Id="13066" PostId="4929" Score="0" Text="This topic is covered, more or less in other questions with tag [tag:databases]." CreationDate="2018-07-08T17:45:35.733" UserId="1293" />
  <row Id="13067" PostId="4929" Score="0" Text="Stackoverflow also covers this topic. Use tag [tag:database] on that site, among other tags." CreationDate="2018-07-08T17:53:23.587" UserId="1293" />
  <row Id="13068" PostId="4929" Score="0" Text="A google search for [populate database] will turn up several links, including many at stack overflow." CreationDate="2018-07-08T18:00:27.087" UserId="1293" />
  <row Id="13074" PostId="4929" Score="0" Text="see also nosql. SQL is being used less and less. (I have been using couchdb, but not with students)." CreationDate="2018-07-10T23:22:47.390" UserId="204" />
  <row Id="13088" PostId="4929" Score="1" Text="The return to nosql is by no means a given in industry. There is a trade-off between the ease of support for SQL solutions and the raw speed of many nosql solutions. The reasons industry switched to SQL from ISAM, VSAM and other nosql solutions in the 1990's are still valid." CreationDate="2018-07-17T03:14:59.267" UserId="1537" />
  <row Id="13144" PostId="4929" Score="0" Text="If you want to understand &amp; reason per what databases/DBMSs involve &amp; can be then look into Rel. If you prefer an industry stack they can translate per whatever DBMS you are using. Eg some SQL product." CreationDate="2018-08-07T02:27:20.167" UserId="2485" />
  <row Id="13085" PostId="4932" Score="1" Text="Why would you ever write a heapsort algorithm in a coding competition?  The correct answer o that problem is always &quot;use what the programming language provides - it's been thoroughly vetted and will be closer to error free than you could possibly do in the time allowed, and you can focus on the real problem instead of rewriting something Dijkstra solved decades ago.&quot;" CreationDate="2018-07-16T02:52:45.143" UserId="1537" />
  <row Id="13095" PostId="4939" Score="0" Text="It is worth noting that WebSQL [is deprecated](https://www.w3.org/TR/webdatabase/) and not supported properly in many major browsers; IndexedDB replaces it essentially." CreationDate="2018-07-22T08:41:57.843" UserId="2" />
  <row Id="13092" PostId="4940" Score="0" Text="This is an excellent answer. Thank you for citing your sources." CreationDate="2018-07-19T16:00:45.837" UserId="27" />
  <row Id="13094" PostId="4940" Score="0" Text="I like the way you were able to phrase the concept that 'collaboration means doing what is best for the team, not doing tasks physically together&quot;." CreationDate="2018-07-21T14:14:28.450" UserId="1537" />
  <row Id="13098" PostId="4942" Score="1" Text="Good one!! Never thought about it before." CreationDate="2018-07-26T17:53:57.427" UserId="2537" />
  <row Id="13099" PostId="4943" Score="1" Text="Recursion with no base case!  :)" CreationDate="2018-07-27T00:26:57.937" UserId="27" />
  <row Id="13100" PostId="4943" Score="0" Text="Haha point. Can we count the skewness of reflection angle or minimum size as base case? Just a thought came to my mind in reply to your golden point." CreationDate="2018-07-27T04:34:07.280" UserId="2537" />
  <row Id="13102" PostId="4944" Score="0" Text="I assume in my answer that the students &quot;speak&quot; the same language as the UI of the Scratch version they are using and you are the outlier. My answer would change if that is not the case. For example, if you and the UI are in, say, English, and the kids speak Spanish, my answer isn't valid. A three language situation is even harder. I have an answer for the English/Spanish situation. Please clarify." CreationDate="2018-07-31T12:29:39.777" UserId="1293" />
  <row Id="13103" PostId="4944" Score="0" Text="@Buffy - the kids and UI are in the same language, I'm the outlier." CreationDate="2018-07-31T12:30:18.990" UserId="5" />
  <row Id="13104" PostId="4944" Score="0" Text="Thanks. I think my answer is valid, then. Sorry for the extra work it suggests." CreationDate="2018-07-31T12:33:47.073" UserId="1293" />
  <row Id="13107" PostId="4944" Score="0" Text="I knew someone who referred to electronic parts with the word 'puppy', as in: &quot;solder that puppy.&quot;" CreationDate="2018-07-31T15:56:53.850" UserId="5349" />
  <row Id="13108" PostId="4946" Score="0" Text="It is vital to learn correct terms, but what I observe is that another language might not have an exact correlate word, but only a more general one. I find that English has taken many general words from other languages and made them highly specific. For example, 'shampoo' is only for hair-washing in English but in the source language it just means 'soap'. Because many technical words arose in English-speaking contexts, the correct exact match simply might not exist in another language. This would make it hard for other-language speakers to form the correct hierarchies and distinctions." CreationDate="2018-07-31T16:02:15.667" UserId="5349" />
  <row Id="13110" PostId="4947" Score="1" Text="Even though you ask about CS you aren't asking about teaching CS. This question is probably more relevant at Academia: https://academia.stackexchange.com" CreationDate="2018-07-31T23:18:46.573" UserId="1293" />
  <row Id="13111" PostId="4947" Score="0" Text="@Buffy: Re-worded, re-focused, the question." CreationDate="2018-07-31T23:24:16.157" UserId="613" />
  <row Id="13112" PostId="4949" Score="0" Text="Economies of scale/speciallization seems to make sense." CreationDate="2018-07-31T23:57:32.843" UserId="613" />
  <row Id="13271" PostId="4951" Score="0" Text="+1 I think it's worth mentioning that this works even when you're prescribing what steps they need to take. &quot;Now click the blue one under that...Remind me, what's the name for that piece?&quot;" CreationDate="2018-09-03T12:23:55.170" UserId="3876" />
  <row Id="13290" PostId="4951" Score="0" Text="@Bilkokuya So you are directing them what to do, but also asking a question, to make them pay attention to what they are doing. Is that correct?" CreationDate="2018-09-03T22:13:09.313" UserId="204" />
  <row Id="13118" PostId="4956" Score="1" Text="Good insights. Great ideas. You could probably obtain the same &quot;presentation&quot; by picking a problem you do know the solution to, and pretend you have a 5-year-old asking &quot;WHY?&quot; every time something is claimed to be the way." CreationDate="2018-08-03T01:01:50.283" UserId="104" />
  <row Id="13119" PostId="4956" Score="1" Text="@GypsySpellweaver exactly, yes! It's the fact that people *assume you know* when you've never had any reason to know." CreationDate="2018-08-03T01:02:41.083" UserId="919" />
  <row Id="13120" PostId="4956" Score="2" Text="That was one of the points I learned doing GED with adults. They'd outgrown the adolescent inhibitions about seeming foolish, and would ask &quot;why?&quot; Sometimes as much as a 5-yr-old. Gives the instructor insight into what they do, and don't, know and how they _know_ it." CreationDate="2018-08-03T01:05:29.357" UserId="104" />
  <row Id="13121" PostId="4956" Score="1" Text="The best way to learn a subject is to teach it." CreationDate="2018-08-03T01:05:53.840" UserId="104" />
  <row Id="13625" PostId="4956" Score="0" Text="I think we teach a subject best while we are learning it." CreationDate="2018-10-08T20:45:33.970" UserId="5349" />
  <row Id="13124" PostId="4957" Score="1" Text="I think you need to be especially careful here to account for personality. An extremely introverted person might not do well in such an examination, even having contributed to (or created) the work. For group projects I used a (conceptually) related idea. Every project (or a subset if the class was too large) did a presentation of results to the class. Everyone on the team had to take a turn in the spotlight. It pretty much guaranteed that those who contributed less were forced to learn what the team did. Some folks (extreme stutterers, for example) found it hard, but doable." CreationDate="2018-08-03T12:55:42.437" UserId="1293" />
  <row Id="13125" PostId="4957" Score="0" Text="@Buffy, you are absolutely right. But, on the other hand, for such people it is even more important to overcome such, and this is useful training." CreationDate="2018-08-03T13:16:31.577" UserId="5219" />
  <row Id="13126" PostId="4957" Score="1" Text="As long as you are sensitive to the issue and account for it all is good. I just point it out as a caveat." CreationDate="2018-08-03T13:18:38.173" UserId="1293" />
  <row Id="13127" PostId="4957" Score="0" Text="@Buffy, here (informatics engineering at a technical university) we alone (among some dozen of specialities) get 40% of the freshmen with autistic spectrum disorder. We are acutely aware of the problem." CreationDate="2018-08-03T13:22:09.437" UserId="5219" />
  <row Id="13128" PostId="4957" Score="1" Text="My caveat wasn't for you, actually, but for future readers. Not everyone will notice the issue, so I raised it. That is a fairly common practice here since the site isn't intended _just_ for the benefit of the asker of the question, but for future visitors with similar concerns and issues. Hopefully, someone will read this in 4-5 years and still be able to take something from it." CreationDate="2018-08-03T13:29:25.850" UserId="1293" />
  <row Id="13129" PostId="4959" Score="0" Text="I am intrigued how notes on limits can be out of date :)" CreationDate="2018-08-03T17:14:01.817" UserId="1168" />
  <row Id="13130" PostId="4959" Score="1" Text="@Anush lol, fair point. I suppose I mean, they are in probably very few ways the way I'd write those notes now, and they probably have a few errors, as I wrote them while learning about limits (though rewriting them now would require as a refresher, as I cannot remember the last time I actually calculated a limit)." CreationDate="2018-08-03T17:37:44.510" UserId="919" />
  <row Id="21557" PostId="4959" Score="0" Text="Hi. Link to your notes is broken." CreationDate="2023-12-03T16:12:56.140" UserId="10968" />
  <row Id="13145" PostId="4966" Score="1" Text="I assume your intent here is &quot;push them, but not beyond their ability&quot;. Does that seem right?" CreationDate="2018-08-09T13:27:00.703" UserId="1293" />
  <row Id="13837" PostId="4966" Score="0" Text="I think I see what you're trying to get at. You're talking about carefully building a learning curve? I've been a student in classes where nearly everyone was silent and wasn't following along and it's because no one understood what the problem was or what the first step to solving it was." CreationDate="2018-11-09T20:47:17.147" UserId="6113" />
  <row Id="13146" PostId="4967" Score="0" Text="Now if you could just get a replica of memory from the Apollo missions." CreationDate="2018-08-09T22:07:08.317" UserId="104" />
  <row Id="13148" PostId="4967" Score="0" Text="I believe ferrite core memory is what was used through the skylab days" CreationDate="2018-08-10T03:36:59.180" UserId="1537" />
  <row Id="13149" PostId="4967" Score="0" Text="Ferrite core with wire rope. Hand-woven to make the program. Nice photo [here](https://www.zmescience.com/other/great-pics/computer-sent-astronauts-moon/)" CreationDate="2018-08-10T04:05:43.363" UserId="104" />
  <row Id="13155" PostId="4967" Score="0" Text="In one of the lectures I attended as an undergrad we passed round a mercury delay line. It was short enough to pass round, so it can't have been a 35-bit one; I suspect it would have been a 17-bit one. I'm sure a mockup could be made for educational purposes using a tubular lightbulb." CreationDate="2018-08-13T09:57:08.270" UserId="1219" />
  <row Id="13150" PostId="4968" Score="0" Text="I've edited your post to break it up into multiple paragraphs. Note that [walls of text](https://tvtropes.org/pmwiki/pmwiki.php/Main/WallOfText) are pretty hard to read." CreationDate="2018-08-10T23:38:59.953" UserId="2068" />
  <row Id="13151" PostId="4968" Score="1" Text="Watch this first. It is not about programming, but is about learning.&#xA; https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve" CreationDate="2018-08-11T08:44:47.227" UserId="204" />
  <row Id="13152" PostId="4968" Score="0" Text="As a programming teacher, the codingbat about page resonates with me: http://codingbat.com/about.html . I recommend read that, particularly the part about turning big problems into little problems. It’s not C++ but you could start some of the Java or Python problems to build your speed over a week and continue this practice to improve your problem solving speed and proficiency." CreationDate="2018-08-11T12:55:57.580" UserId="2122" />
  <row Id="13168" PostId="4968" Score="0" Text="Dang. I was in the same boat a couple of years ago. One thing that helped me was doing actual projects. I always did poorly on those things where I just had to remember how something worked, but when I started working on open source projects and doing my own stuff everything made so much more sense. Now I can go back and do those same interview/skillbuilder type questions I used to struggle with. Just keep practicing, be patient, and apply what you learn whenever you can." CreationDate="2018-08-16T20:51:58.897" UserId="5476" />
  <row Id="13177" PostId="4974" Score="0" Text="As some one who teaches Linux admin stuff and programming at the tech-degree level I really wish I had a good answer for you.  It really can be a struggle explaining &quot;look, you know X about technology Y, now here's how tech X and W are basically the same thing, how do you think W should work?&quot;  I know that as a long time LAMP guy if you dropped me in a ASP.Net/IIS job I'd flounder for a long time - but I think I'd at least have an idea as to what questions to start asking." CreationDate="2018-08-20T01:48:21.943" UserId="662" />
  <row Id="13156" PostId="4975" Score="0" Text="This seems like a fun and constructive way of working / learning, thank you!" CreationDate="2018-08-13T15:07:46.683" UserId="5586" />
  <row Id="13159" PostId="4975" Score="0" Text="Pair programming takes about 2 weeks to get up to speed, before that it is slower. However I have done pair programming with a pier on very difficult tasks, and we were more effective almost immediately. I suspect that for the OP they will be slower for the first 2 weeks, but because of training value, it will pay have positive value immediately. (note: Pair programming would have been my answer. But Buffy did it first and better.)" CreationDate="2018-08-15T09:26:48.640" UserId="204" />
  <row Id="13157" PostId="4976" Score="1" Text="Welcome to CSEd! You've come to the right place :)" CreationDate="2018-08-14T16:18:02.060" UserId="27" />
  <row Id="13165" PostId="4978" Score="1" Text="Also, a general page about bringing CS50 AP to your school can be found [here](https://docs.cs50.net/2016/ap/resources/teaching/teaching.html)." CreationDate="2018-08-16T14:49:57.707" UserId="5589" />
  <row Id="19305" PostId="4978" Score="0" Text="That CS50 site doesn't seem to exist any more. Has it gone elsewhere?" CreationDate="2022-02-11T21:04:59.553" UserId="6346" />
  <row Id="13160" PostId="4981" Score="3" Text="Welcome to [cseducators.se]. This is a great question, and I believe you'll get some excellent answers. I hope you do, and that you hang around a while as well. Although it's often quiet, you may also wish to pop into the site's [chatroom](https://chat.stackexchange.com/rooms/59174/the-classroom) on occasion." CreationDate="2018-08-15T15:49:33.247" UserId="104" />
  <row Id="13161" PostId="4981" Score="0" Text="You might get some useful information from this related post: [Advice for becoming more confident in programming](https://cseducators.stackexchange.com/questions/4968/advice-for-becoming-more-confident-in-programming)" CreationDate="2018-08-15T18:42:38.303" UserId="2068" />
  <row Id="13162" PostId="4981" Score="0" Text="Once you get into it a bit more, you'll realize that the number of columns does not increase the complexity, only the number and types of keys, and the types of relationships. Most of the columns on any table are &quot;just cargo&quot; from the perspective of database design." CreationDate="2018-08-16T03:13:00.243" UserId="1537" />
  <row Id="13164" PostId="4981" Score="1" Text="@pojo-guy It increases complexity when it takes 5-10 minutes to go through which columns are even an option. :) If I don't know what I can select for, learning all of that takes time, particularly when the columns are in a list view with sections by table. It kinda looks a lot like the Stack Exchange SEDE: https://data.stackexchange.com/stackoverflow/query/new But with more columns." CreationDate="2018-08-16T13:12:26.967" UserId="5592" />
  <row Id="13166" PostId="4981" Score="0" Text="Years of experience here - knowing what to ignore and for how long. Start with the unique indexes and foreign key relationships. Identify root tables and their children. Ignore the other columns until you have the relations under control." CreationDate="2018-08-16T15:41:29.410" UserId="1537" />
  <row Id="13176" PostId="4981" Score="0" Text="For me self-learning needs motivation - I need a problem to solve, a solution to find.  For DB work, I tend to think the key is learning syntax, data types, and how to interpret the question being asked. A database is raw data - how you interpret the question and query the db determines if your data becomes information or not :)" CreationDate="2018-08-20T01:38:02.067" UserId="662" />
  <row Id="13163" PostId="4985" Score="1" Text="Give some more context. What level are you? Why only self-learning as a tag? Why do you think the run time estimates are _not_ rigorous?" CreationDate="2018-08-16T10:45:05.967" UserId="1293" />
  <row Id="13167" PostId="4985" Score="1" Text="I'm not entirely sure what you mean by a &quot;rigorous way.&quot; On the flip side, it seems you're looking for ways to &quot;define&quot; things in CS rigorously, not &quot;learn&quot; CS rigorously." CreationDate="2018-08-16T16:40:55.893" UserId="104" />
  <row Id="13186" PostId="4985" Score="0" Text="I have been asked to review this question (should I close). There are two comments that you need to address. Please improve the question, or it may be closed." CreationDate="2018-08-21T10:47:56.970" UserId="204" />
  <row Id="13213" PostId="4985" Score="0" Text="By &quot;rigorous&quot; I'm assuming you mean in a way that can be formally proven (in the mathematical proof sense) to be correct or incorrect. Most programs which can be rigorously demonstrated to be correct are trivial.  As real world complexities creep in it gets harder and harder to create formal proofs of correctness." CreationDate="2018-08-24T15:23:32.523" UserId="4689" />
  <row Id="13195" PostId="4987" Score="0" Text="What do you do when the manual is broken, has important things missing, not maintained, or new products/technologies don't even get a manual?" CreationDate="2018-08-21T21:48:33.367" UserId="5146" />
  <row Id="13230" PostId="4987" Score="0" Text="I'm not a programmer, though... I don't have any &quot;old projects&quot;... and I'm not sure what you mean in your last paragraph in that section. Why would I go to all the work to create a database from scratch that won't be anywhere near as complex (or in the same syntax) as the one I need to learn to use? This seems like a lot of work for little gain. I'm not actually even sure what you mean by &quot;code based projects&quot;. I'm using the database directly, not trying to implement it into something - imagine something like SEDE here on SE." CreationDate="2018-08-28T02:38:29.010" UserId="5592" />
  <row Id="13231" PostId="4987" Score="0" Text="@KabaKun The suggestion to use MySQL was &quot;If a local install of a server with T-SQL is not possible&quot; The paragraph in question was because I thought, correctly, that you would be using direct DBMS access. Why to use something less complex than the one at work is because you don't design a skyscraper until you can design a flat-level house. You have to have basic knowledge and keep building into larger, more complex projects. &quot;A lot of work for little gain&quot; defines any educational exercise. The &quot;gain&quot; is experience." CreationDate="2018-08-28T04:29:13.637" UserId="104" />
  <row Id="13233" PostId="4987" Score="0" Text="But I don't need to learn how to *build* a database. I just need to learn to *use* one. I don't have access to the system to add, remove, or change content. If all I'm doing is searching the data, I don't need a simpler database to practice with, I just need to know how to determine what types of searches are simple to do so that I can use the actual database for practice." CreationDate="2018-08-29T05:57:39.807" UserId="5592" />
  <row Id="13234" PostId="4987" Score="0" Text="A &quot;simple&quot; search uses one table, retrieves one column, and is selected by one value in one field. Anything else has to build on that. Practice - in some fashion is the only way you will &quot;move to more complex work.&quot; If you cannot understand the big database, use a smaller one. If none of the suggestions here are what you are willing to do, then you'll have to just keep asking your work associates to help." CreationDate="2018-08-29T09:39:57.937" UserId="104" />
  <row Id="13245" PostId="4987" Score="0" Text="I don't think you're really listening to me or reading what I write. The database isn't what I don't understand and implying that &quot;simple&quot; searches are what you say is very unkind. Even initial searches on both of the tutorials I've **completed** start with calling *all* content using `*`. If you're getting frustrated with me, fine, but implying that I'm incompetent because I can't make sense out of very complex SQL calls that use syntax not taught in tutorials is just wrong." CreationDate="2018-08-31T01:56:10.437" UserId="5592" />
  <row Id="13173" PostId="4991" Score="1" Text="seems relevant to me. It is about teaching or learning. It is about computer science, IT, or digital literacy. ☺" CreationDate="2018-08-18T17:13:37.107" UserId="204" />
  <row Id="13179" PostId="4991" Score="0" Text="Is this the first such system you have tried to learn? The first one is going to be gobbledygook, the 2nd one will be a bit familiar, the 3rd will totally make sense and then you can learn any similar system. Same with languages. Same with mathematics, same with... everything. Try learning a different system, then compare and contrast. Find the essential unity behind them, the intention." CreationDate="2018-08-20T15:58:13.897" UserId="5349" />
  <row Id="13175" PostId="4992" Score="1" Text="Practicing with exercises will work just fine (see anybody who is learning to play a musical instrument), but from a motivational perspective I would additionally recommend to immediately try to apply the newly gained knowledge to a relevant problem one actually wants (or at least: needs) to solve." CreationDate="2018-08-19T16:33:04.140" UserId="1940" />
  <row Id="13178" PostId="4998" Score="1" Text="When it was said, &quot;most programming can be looked up&quot; were they referring to things like Open Source, or other pre-written or pre-defined libraries or collections? It would be like saying that most woodworking has already been done, we can just fit together wooden parts, because the power tools are so widely available. Programming is partly about creating the means to do something, and partly about actually doing it. The actually doing will go on, no matter how good the means have become. Deciding what to do and how to use a power tool is still a creative activity." CreationDate="2018-08-20T13:57:49.210" UserId="5349" />
  <row Id="13193" PostId="4998" Score="0" Text="I'm not sure if this is quite on-topic for the site, as written. It seems more like a history question than a problem needing a solution. Perhaps, with the acknowledgment of the difference between practice now and instructor descriptions given by the younger generation, a better question might be about converting classroom practice to accommodate that change." CreationDate="2018-08-21T14:50:31.167" UserId="104" />
  <row Id="13217" PostId="4998" Score="0" Text="Uh... better interfaces, better documentations, powerful PCs.  Need I go on?" CreationDate="2018-08-25T00:31:34.257" UserId="21" />
  <row Id="13547" PostId="4998" Score="0" Text="not only better software, if you give a review for example to mysql or even if you see forks like mariadb these days are wonderful" CreationDate="2018-09-27T03:33:57.583" UserDisplayName="user5980" />
  <row Id="13181" PostId="4999" Score="0" Text="Actually, @ScottRowe, a field grows with the size of its practitioners. Math grows fast also, but there is already so much of it  and so many practitioners that you can't see much of the horizon. Much like the universe itself." CreationDate="2018-08-20T20:03:29.090" UserId="1293" />
  <row Id="13185" PostId="4999" Score="0" Text="@scottrowe I don't think it has changed very fast (Hardware has improved very fast, exponential growth, but software has not always even been positive). see bret victor's future of programming https://www.youtube.com/watch?v=8pTEmbeENF4 it is set in the 1960s, but aimed at people in the 2010s. Why don't we learn, from what has been done before? Why is software getting slower?, using more memory?" CreationDate="2018-08-21T10:44:29.253" UserId="204" />
  <row Id="13187" PostId="4999" Score="0" Text="@ctrl-alt-delor I challenge that we haven't learned from the old stuff. A lot of it is just in the libraries now. You don't need to build a lot of the things today that you needed to in years past. We have faster, bigger machines so that (a) the optimization that every programmer needed to do in the past in every program is now less important and (b) much of it is done by the compiler and associated tools. The problems that we can now solve are  also bigger now and were infeasible in the past." CreationDate="2018-08-21T10:54:01.170" UserId="1293" />
  <row Id="13189" PostId="4999" Score="0" Text="@ctrl-alt-delor I have definitely watched &quot;*The Future of Programming*&quot; and showed it to my students. Bret seems to have disappeared from the public stage, the past few years. I wonder what he is doing now?" CreationDate="2018-08-21T12:34:05.643" UserId="5349" />
  <row Id="13190" PostId="4999" Score="0" Text="@ScottRowe. Sorry, your metaphor fails the smell test. People to teach beginning students starting at a higher level than the absolute base. I have a doctorate and fifty years of experience. I know quite a lot. Do I expect my students to follow my path in every detail to learn what I know. That would be profoundly stupid. And if they did it they would be 70 years behind the curve. You are ignoring the power of abstraction. Sorry. No." CreationDate="2018-08-21T12:35:02.827" UserId="1293" />
  <row Id="13192" PostId="4999" Score="0" Text="I want someone with a doctorate and 50 years experience writing any software that is safety-related, or that holds my personal information. For anything not connected to those two, whatever. Unfortunately, now everything is connected." CreationDate="2018-08-21T13:29:44.863" UserId="5349" />
  <row Id="13182" PostId="5001" Score="0" Text="Hi, and welcome to [cseducators.se]! I gave a few questions for you. (1) Can you link to the original study? And (2), what result did you expect?" CreationDate="2018-08-20T23:39:54.517" UserId="27" />
  <row Id="13191" PostId="5002" Score="2" Text="Piaget's transition from &quot;Pre-operational thought&quot; to &quot;Concrete operational thought&quot; happens around age 11. Concrete operations include the conceptual understanding of Conservation, Reflexivity and Transitivity. These are vital for basic computer programming capability. But the Formal operational abilities to abstract and manipulate things symbolically (not just in a familiar scenario), around age 14, are necessary to be good at programming. Mathematics is the single best training environment for developing these capacities. Without the right training, many adults never gain these abilities." CreationDate="2018-08-21T13:22:51.910" UserId="5349" />
  <row Id="13735" PostId="5002" Score="0" Text="@ScottRowe It would be nice to have your comment as answer." CreationDate="2018-10-29T15:34:46.817" UserId="6109" />
  <row Id="13741" PostId="5002" Score="0" Text="@OBu my experience in giving answers like my comment is that they are not well-received by the community. The author here said he lacked some details, so I provided them, as we are meant to do with comments." CreationDate="2018-10-29T20:48:05.060" UserId="5349" />
  <row Id="13197" PostId="5003" Score="0" Text="Pointers are basically the threshold of understanding where Concrete Operations crosses over to Formal Operations (Piaget's definitions). They are an example of the increased complexity of indirection and symbolic thinking. Some grasp easier than others, for a multitude of reasons." CreationDate="2018-08-22T13:16:44.960" UserId="5349" />
  <row Id="13406" PostId="5003" Score="0" Text="When I first started programming (2002), this was one of the concepts I had a real struggle with. In honesty, I also struggled with the concept of function calls and a whole load of other stuff in the first 2 years! Now, having spent the last 12 years post-degree in a software company, pointers, &quot;reference types&quot;, memory addresses and even arrays/lists and related concepts come naturally. But you're absolutely right to ask this question - why pointers in particular? Is this somehow a threshold of comprehension, like &quot;the wall&quot; for a marathon runner?" CreationDate="2018-09-08T06:47:34.960" UserDisplayName="user5857" />
  <row Id="13196" PostId="5004" Score="0" Text="But sometimes people actually do not get the simple aspect of it. I can't tell you how many times my partner in the Compiler course in college declared *p and then just wrote to it. Boom!" CreationDate="2018-08-22T13:13:31.677" UserId="5349" />
  <row Id="13207" PostId="5004" Score="0" Text="@ScottRowe, part of that is just the denseness of C notations generally. Things that look similar, aren't. C programmers needs to keep a lot of things in their heads simultaneously. See &quot;Miller's Rule of Seven - Plus or Minus Two&quot;." CreationDate="2018-08-22T16:56:17.773" UserId="1293" />
  <row Id="13209" PostId="5004" Score="0" Text="@ScottRowe, Java uses indirection extensively, and intensively. So do other (not all) OO languages. I assume you know that." CreationDate="2018-08-22T18:26:29.080" UserId="1293" />
  <row Id="13216" PostId="5004" Score="0" Text="@ScottRowe @ Buffy  Miller's, _[The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information](http://www.musanim.com/miller1956/)_" CreationDate="2018-08-24T18:44:47.493" UserId="104" />
  <row Id="13220" PostId="5004" Score="0" Text="@ScottRowe The difficulty, pointed out by this answer, is in keeping track of all the parts at once. Understanding _Romeo and Juliette_ may not be hard, but following that script, while tending the baby, cooking dinner, planning the wedding and reaching to answer the phone, just might be a bit much to handle." CreationDate="2018-08-25T23:28:37.213" UserId="104" />
  <row Id="13211" PostId="5005" Score="1" Text="C is a polite veneer over Assembly. C programmers know that a memory location holds a binary number, but that number could *represent* a constant, the location of a variable, a pointer - which might change as the program runs, and so on. C programmers have to know how the machine really works, so they are not confused or mislead that there are different kinds of things in memory. No, there are just bits in memory. The compiler helps you organize that, but it is up to the programmer to know what they *mean* by each type of thing. Like how all living things have DNA as their representation." CreationDate="2018-08-24T14:33:30.687" UserId="5349" />
  <row Id="13224" PostId="5005" Score="0" Text="@ScottRowe you sound like von neumann. He thought that assemblers were for week minded people. I am (have been) a C programmer. I choose names that help me. computers have good memory, I don't. If you think other-wise, then just name your variables a, b, c, d, e, etc." CreationDate="2018-08-26T16:40:19.120" UserId="204" />
  <row Id="13228" PostId="5005" Score="0" Text="No sweat, I am a C programmer too. All I am saying, is that students need to know what is under the hood (bonnet) so to speak. They don't need to have their hands greasy all the time. I can solder, but lightswitches are great." CreationDate="2018-08-27T15:04:27.787" UserId="5349" />
  <row Id="13235" PostId="5005" Score="0" Text="At the time of Von Neumann, these young female math students assembling programs by hand were much cheaper than computer time. Although more error prone, which happened to waste this precious computer time too, so he changed his mind afterall." CreationDate="2018-08-29T13:37:03.007" UserId="2103" />
  <row Id="13214" PostId="5006" Score="0" Text="So, where can i sign up to take a CS CLass from you? :D lol  Seriously though, sounds like you know the material and how to teach and/or instruct." CreationDate="2018-08-24T17:17:35.927" UserId="5146" />
  <row Id="13215" PostId="5006" Score="1" Text="@YetAnotherRandomUser I've been accused of that before, but I'm out of the education scene, and doing random solo developer projects now." CreationDate="2018-08-24T17:48:32.107" UserId="104" />
  <row Id="13219" PostId="5007" Score="0" Text="Maybe it is exception handling that is hard then. To say nothing of cache invalidation and naming things." CreationDate="2018-08-25T23:19:51.420" UserId="5349" />
  <row Id="13221" PostId="5007" Score="1" Text="Challenge accepted" CreationDate="2018-08-26T02:32:45.963" UserId="104" />
  <row Id="13250" PostId="5007" Score="1" Text="Mission accomplished. Singly-linked list coded in C without memory leaks. [Repo](https://github.com/GypsySpellweaver/challenge-linked-list)" CreationDate="2018-08-31T18:09:56.743" UserId="104" />
  <row Id="13511" PostId="5007" Score="0" Text="That's an important coming-of-age achievement in the murky world of pointers and memory management." CreationDate="2018-09-22T15:18:35.717" UserId="21" />
  <row Id="13223" PostId="5008" Score="0" Text="Research backs up that assertion. Seems like a good place to start the teaching." CreationDate="2018-08-26T16:06:08.000" UserId="5349" />
  <row Id="13225" PostId="5008" Score="0" Text="I won't disagree, because I've already agreed. There's one sentence, hidden in my wall of text: _Technically speaking variables are an indirection, but somehow we manage to address that just fine._ I believe that any concept can be apprehended with the correct mental model for it. Conversely, every concept is difficult if the metal model does not mesh with the concepts." CreationDate="2018-08-27T01:11:00.220" UserId="104" />
  <row Id="13256" PostId="5008" Score="0" Text="That backs up what I said. Everything is &quot;fine&quot; until someone puts the word _pointer_ on the table. Then it's suddenly &quot;hard&quot; to do. If you understand memory for variables, and addresses for function calls, then pointers are just more of the same. Don't blame the student, or the concept, blame the presentation. My recent experience with pointers in C, a new language for me, empirically supports my belief." CreationDate="2018-09-02T13:35:18.030" UserId="104" />
  <row Id="13232" PostId="5011" Score="0" Text="A &quot;sword that turns every way&quot; can be hard to handle." CreationDate="2018-08-28T17:15:14.923" UserId="5349" />
  <row Id="13236" PostId="5011" Score="0" Text="Also Pascal courses were modeled after the Fortran initiation they replaced, so the &quot;pointers&quot; chapter that didn't exist in Fortran appeared after the usual chapters (themselves derived from the order of chapters in the first Fortran manual, another story). A reason to consider it as &quot;advanced stuff&quot; (and superfluous, like recursion) because nobody used that in the Fortran course." CreationDate="2018-08-29T13:41:44.303" UserId="2103" />
  <row Id="13237" PostId="5011" Score="0" Text="Interesting, I have not given much thought to Fortran in a while. It was designed for handling mathematical problems, not for writing software. You probably could not write a compiler in Fortran (or SQL for that matter). There must be some sort of recognized distinction between &quot;General Purpose&quot; programming languages, and those designed for Domain Specific purposes. Excel can do a lot of stuff, but you can't write programs with it, despite it having several ways of handling indirection. Access is powerful, but reports are not really programs either. Sequence, Selection, Loop: choose any 3." CreationDate="2018-08-29T17:00:10.707" UserId="5349" />
  <row Id="13244" PostId="5011" Score="0" Text="For exemple, the first Prolog interpreter was written in Fortran." CreationDate="2018-08-30T20:01:13.507" UserId="2103" />
  <row Id="13246" PostId="5011" Score="0" Text="I wish I had more insight into the whole languages issue. Why were 400 High Level languages developed over the past 30 years or so? I am told that some are optimized for some purposes. But the SICP book showed 35 years ago that one can create essentially anything at all pretty easily with Lisp. The fault is apparently not in our CPUs, but in ourselves." CreationDate="2018-08-31T13:12:01.483" UserId="5349" />
  <row Id="13247" PostId="5011" Score="0" Text="There are probably much more high level programming languages, if you count the programming languages designed and implemented by students as en exercise or by programmers for specific needs.&#xA;You can do anything with Lisp, or Fortran, or C or whatever, but sometimes another programming language is more adequate for the job.&#xA;Peter Landin's  paper title &quot;the next 700 programming languages&quot; is an allusion to the estimated number of languages at the time he wrote it (1966), half a century ago." CreationDate="2018-08-31T13:52:43.160" UserId="2103" />
  <row Id="13248" PostId="5011" Score="0" Text="Wow, that was a prophetic title for a book! It seems strange to me that in some areas, like Windows and Office products, one standard tends to take over. Excel is the most used piece of software in the world, I think. But in the area of programming languages, we just seem to create more. What is up with that? It is great to have so many standards to choose from, but isn't that somewhat in conflict with the idea of creating a standard in the first place? Wouldn't cooperating to make a few really great languages be better? Couldn't we create all these domain-specific things with C underneath?" CreationDate="2018-08-31T14:07:47.217" UserId="5349" />
  <row Id="13249" PostId="5011" Score="0" Text="The C programming language has its merits, but is not exactly an example of  a good design for an extensible basis for future programming languages." CreationDate="2018-08-31T14:13:31.453" UserId="2103" />
  <row Id="13238" PostId="5012" Score="1" Text="Welcome to [cseducators.se]! I'm going to put in a real answer tomorrow, but my instinct is that you're currently aimed at material that is far too dense for your time-frame, target age, and stated goals. I have some Finite State Machine games I can point you to when I do a more complete write-up." CreationDate="2018-08-30T04:39:08.937" UserId="27" />
  <row Id="13239" PostId="5012" Score="2" Text="Is there a question here? I can't find one." CreationDate="2018-08-30T10:23:20.473" UserId="1293" />
  <row Id="13243" PostId="5012" Score="0" Text="I think that your second sentence is the focus for the Question (&quot;*... see the subject as fun and interesting*&quot;) so if you edit to make this Question very clear, it will bring Answers geared toward exposure, rather than teaching. It sounds like you have some good ideas, so good luck on making them snap, crackle and pop!" CreationDate="2018-08-30T15:38:54.697" UserId="5349" />
  <row Id="13240" PostId="5013" Score="0" Text="Can you expand on Pieget and Wing (the OP in not a teacher). I don't think you need much (for Pieget, what are the stages? What is the implication of this?)." CreationDate="2018-08-30T12:12:21.300" UserId="204" />
  <row Id="13241" PostId="5013" Score="0" Text="@ctrl-alt-delor. The links are there. Not enough?" CreationDate="2018-08-30T12:27:23.643" UserId="1293" />
  <row Id="13251" PostId="5017" Score="1" Text="Most programming concepts don't have short definitions; I don't see where flashcards would be useful.  Since -- like it or not -- programming is a *lot* like math, and math builds upon itself, biweekly exercises which either adds to or refactor the last excercise's code using the techniques you've recently used is an excellent idea." CreationDate="2018-08-31T20:15:22.320" UserId="3132" />
  <row Id="13315" PostId="5017" Score="0" Text="@RonJohn agreed on programming concepts--but syntax is usually something that can be drilled. I want my students to be able to recognize the import of certain syntax in the way a math teacher would want his/her students to recognize the significance of the sigma symbol for a summation function." CreationDate="2018-09-04T14:12:55.653" UserId="4689" />
  <row Id="13316" PostId="5017" Score="0" Text="Well, C# (and C++ and Java) is hell spawn, so you're right, drilling syntax is probably useful...  #sadface" CreationDate="2018-09-04T14:24:51.020" UserId="3132" />
  <row Id="13254" PostId="5019" Score="2" Text="Hi, Elsayegh88, welcome to [cseducators.se]! You're in the right community, but if you want help, the question will have to be re-formed a little bit. It can be a little confusing as a newcomer, but if you make it one question, and I will help you edit it to bring it to site standards. (You can post as many questions as you want on the site, so there is no need for multiple, unrelated questions within one prompt)" CreationDate="2018-09-01T20:39:18.060" UserId="27" />
  <row Id="13306" PostId="5019" Score="0" Text="I have edited question to address concerns. @Elsayegh88 can you create a new question for the bit I removed (One question per question). Click [`edited …`](https://cseducators.stackexchange.com/posts/5019/revisions) to see edit history (So you can find the bit I deleted)." CreationDate="2018-09-04T08:31:33.653" UserId="204" />
  <row Id="13379" PostId="5019" Score="0" Text="Welcome Again. Some feedback on how to use this site. First let me say that you are doing well. However a nice may to show appreciation is to click on the up-vote buttons. And if there is an answer that solves the problem for you then click the tick ✓ (this can be a much harder decision, as you can only do this for one answer). Some people wait a while, and then tick the answer with highest votes, that they them-self have up-voted." CreationDate="2018-09-06T10:55:14.207" UserId="204" />
  <row Id="13388" PostId="5019" Score="0" Text="i can't up vote answers as i am still less than 15 reputation :)" CreationDate="2018-09-06T13:49:43.003" UserId="5659" />
  <row Id="13398" PostId="5019" Score="1" Text="@Elsayegh88 not anymore :)" CreationDate="2018-09-07T13:53:07.620" UserId="5842" />
  <row Id="13364" PostId="5021" Score="0" Text="I agree with most of this answer, but I'm not sure the last sentence applies to everybody. Different languages are good choices for different people. Plenty of people learn how to program using JavaScript." CreationDate="2018-09-05T16:51:30.663" UserId="2068" />
  <row Id="13376" PostId="5021" Score="0" Text="@KevinWorkman Javascript is not an impossible first language, it is just not an ideal first language. However your can do a lot worse." CreationDate="2018-09-06T08:50:01.577" UserId="204" />
  <row Id="13260" PostId="5023" Score="15" Text="As an extra source of input, have you seen the other question [Real life examples of 0-indexing](https://cseducators.stackexchange.com/q/213/104)? Might be some help there." CreationDate="2018-09-03T02:05:53.543" UserId="104" />
  <row Id="13370" PostId="5023" Score="4" Text="Please avoid adding your answers in the comments. It gets around our quality control systems, for example downvoting and collaborative editing. It also unfairly puts your answer above everyone elses. I've moved these answers-in-comments [to chat](https://chat.stackexchange.com/rooms/82811/discussion-on-question-by-d-w-why-do-we-count-starting-from-zero) for posterity. Please avoid adding future answers in the comment section." CreationDate="2018-09-06T01:19:42.890" UserId="58" />
  <row Id="13415" PostId="5023" Score="4" Text="**Please do not use the comment section to answer the question.** I will be periodically deleting all answers-in-comments. Instead, you're welcome to write up your thoughts as an answer, using the form at the bottom of the page." CreationDate="2018-09-09T00:45:09.873" UserId="58" />
  <row Id="19991" PostId="5023" Score="0" Text="It is actually simple to answer: we start counting from zero instead of one for the same reason that rulers and measuring tapes start from zero instead of one. The &quot;counting&quot; index is the offset from the array's beginning, so it makes sense that the beginning is offset from itself by zero, or in other words, it is where it is." CreationDate="2022-05-18T21:15:57.700" UserId="12078" />
  <row Id="13272" PostId="5024" Score="1" Text="'cardinal numbers, &quot;first&quot;, &quot;second&quot;, &quot;third&quot;'. These are ordinals, not cardinals. Cardinals count amount. Ordinals count order." CreationDate="2018-09-03T12:43:07.563" UserId="5679" />
  <row Id="13274" PostId="5024" Score="0" Text="@Potato44 Yes, they are. What an embarrassing error! Thanks for pointing it out, I'll fix it now." CreationDate="2018-09-03T14:49:40.103" UserId="27" />
  <row Id="13276" PostId="5024" Score="2" Text="Ah, but some of us are willing to say zero-th, also." CreationDate="2018-09-03T14:54:34.190" UserId="1293" />
  <row Id="13439" PostId="5025" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/83029/discussion-on-answer-by-gypsy-spellweaver-why-do-we-count-starting-from-zero)." CreationDate="2018-09-11T17:54:32.510" UserId="27" />
  <row Id="13490" PostId="5025" Score="0" Text="&quot;*If asked at **5:02** minutes into class, the answer will be five minutes. Ask them how long class had been in session five minutes ago, which would be around **0:20** into the class period.*&quot; Can't tell if you're assuming it takes 18 seconds, give or take, to answer the first &amp; ask the second question or if it's a typo. ;^)" CreationDate="2018-09-19T14:18:14.347" UserId="5968" />
  <row Id="13491" PostId="5025" Score="1" Text="@ruffin 18 seconds is an estimate of the dialog time." CreationDate="2018-09-19T15:44:26.730" UserId="104" />
  <row Id="18006" PostId="5025" Score="0" Text="You are correlating continuous time with discrete &quot;buckets&quot; for storing things - completely irrelevant. To counter, I could say &quot;in which minute are we when we are 0:20 into the class?&quot; and the answer would be &quot;the 1st&quot;. So why not index from 1? As for your volume knob, I would assume zero to mean zero volume - that would be an empty array; an array with zero elements. That does not mean the 1st element should be called element zero. Completely irrelevant and I can't believe this got 100+ votes." CreationDate="2021-05-18T01:36:38.320" UserId="10541" />
  <row Id="18008" PostId="5025" Score="0" Text="@youcantryreachingme &quot;How old is the child?&quot; and &quot;Which year is the child in?&quot; also differ by one. It depends on teh question asked. &quot;How many elements in the array?&quot; and &quot;What's the last index of the array?&quot; differ by one. Interestingly enough, if you've used elementary school graphing, zero is also the beginning of each axis, known as the &quot;origin.&quot; That difference between &quot;count&quot; and &quot;index&quot; is included in the opening of the answer. Of course, if you find this answer to not be helpful, for any reason, or none at all, you can still down-vote it." CreationDate="2021-05-18T02:42:21.257" UserId="104" />
  <row Id="18011" PostId="5025" Score="0" Text="@GypsySpellweaver - again - continuous time and continuous axes - irrelevant. The correct answer is Buffy's. See also my &quot;TLDR&quot; comment there. Let's not clog up these comments further by going back and forth." CreationDate="2021-05-18T23:43:06.483" UserId="10541" />
  <row Id="19685" PostId="5025" Score="0" Text="Great answer. You could have mentioned the concepts of &quot;ordinal&quot; vs &quot;cardinal&quot; for &quot;index&quot; &amp; &quot;count&quot;. Together with the answer that quotes Dijkstra, this is pretty much it." CreationDate="2022-05-11T16:35:34.393" UserId="6346" />
  <row Id="13261" PostId="5026" Score="7" Text="The half-intervals decomposing into half-intervals is a nice touch. Dijkstra's explanation does good job of justifying the use of the common scheme within CS as it was becoming a modern science." CreationDate="2018-09-03T06:53:37.377" UserId="104" />
  <row Id="13267" PostId="5026" Score="31" Text="Nice contribution and good insight. You've made this corner of the internet a better place :) Welcome to [cseducators.se]. Take a look around, I'd love to know what else you can add." CreationDate="2018-09-03T12:11:14.367" UserId="27" />
  <row Id="13314" PostId="5026" Score="4" Text="While a good reason to start indexing at 0, it feels much easier and more natural to mentally parse (d) and especially (c) than (a) or (b) - &quot;numbers from x to y&quot; in natural language usually means inclusive of both (or exclusive of both)" CreationDate="2018-09-04T13:34:16.990" UserId="5743" />
  <row Id="13319" PostId="5026" Score="2" Text="Note that adopting the convention more widely helps in a number of other scenarios, not just array indices.  For instance, it [eliminates a whole class of errors in date handling](https://sqlblog.org/2011/10/19/what-do-between-and-the-devil-have-in-common).  If you're doing something like a fee scale for package weights, the exclusive upper-bound also allows measurement result to be independent of the limit specified (ie - if an inclusive upper bound is given as `2.9` but the scale measures as `2.95` you have issues)." CreationDate="2018-09-04T16:21:59.273" UserId="3821" />
  <row Id="13335" PostId="5026" Score="4" Text="@msam: Fully closed or fully open may be &quot;more natural,&quot; but the subtraction property of half-open is extremely important.  The interval [a, a+b) is exactly b elements long, without any pesky +1 or -1 terms.  You simply cannot avoid having +1s and -1s everywhere when you use fully closed or fully open intervals." CreationDate="2018-09-05T01:30:59.653" UserId="1896" />
  <row Id="13338" PostId="5026" Score="11" Text="This also matches the behavior of the modulo operator, the return value of which lies in [0, n). `number_of_values_ending_in_a_particular_digit[x % 10] += 1`" CreationDate="2018-09-05T01:48:00.613" UserId="5767" />
  <row Id="13366" PostId="5026" Score="2" Text="This is a good reason, but I think a more fundamental one is simply hardware: binary registers and memory locations representing unsigned integers have a 0 &quot;all bits off&quot; state. Indexing by one would waste that." CreationDate="2018-09-05T17:14:58.923" UserId="4440" />
  <row Id="13383" PostId="5026" Score="1" Text="Every answer with Dijkstra in it is nice. But......... this answer seems to answer a completely different question, doesn't it? This answer only concerns itself with the openness of intervalls. Neither the quote from Dijkstra nor the rest of the answer has anything to do at all with the actual question - which is, to rephrase a bit, &quot;why do array indices start at 0&quot; (sic)." CreationDate="2018-09-06T12:07:56.493" UserId="652" />
  <row Id="13397" PostId="5026" Score="1" Text="Those reasons don't seem entirely compelling in the argument of 0 vs 1.  For example, in the second point you can argue that sequences starting with 1 don't need negative numbers either, and in the third point, you can argue that sequences starting with 1 also don't use negative numbers for zero-length (although the counter-counter-argument is that they still require reversed bounds, which may be confusing).  And if you know that the lower bound is 1 then the upper bound in form (c) is also the length, no arithmetic required." CreationDate="2018-09-07T00:25:39.607" UserId="5829" />
  <row Id="13400" PostId="5026" Score="1" Text="Good point about the half-open ranges. The other common  case where these come in useful is string manipulation. Having zero-based half-open ranges there makes substring positions and lengths a lot cleaner to work with." CreationDate="2018-09-07T19:49:03.590" UserId="2878" />
  <row Id="13431" PostId="5026" Score="1" Text="What do you mean by &quot;indexing an array of length N as [0, N)&quot;?" CreationDate="2018-09-11T14:12:42.540" UserId="5907" />
  <row Id="18005" PostId="5026" Score="0" Text="&quot;indexing an array of length N as [0, N)&quot; - perhaps I'm not understanding the notation (especially the varied brackets), but surely an array with 0 ... N elements is not of length N?" CreationDate="2021-05-18T01:31:05.890" UserId="10541" />
  <row Id="13268" PostId="5027" Score="3" Text="Welcome to [cseducators.se]! Isn't this just a restatement of OP's third bullet?" CreationDate="2018-09-03T12:16:47.047" UserId="27" />
  <row Id="13269" PostId="5027" Score="0" Text="yes, the pointer (which is the array) contains the 1st element, then you add 1 to get the next element etc. In assembler we were taught indexing to access arrays, so moving to C it all made simple sense." CreationDate="2018-09-03T12:17:57.977" UserId="5677" />
  <row Id="13270" PostId="5027" Score="1" Text="@BenI. My answer addresses the human side of &quot;making it easy&quot;." CreationDate="2018-09-03T12:20:59.200" UserId="1279" />
  <row Id="13303" PostId="5027" Score="0" Text="Welcome to the community, please read the question. The OP states in the question that this explanation is unsatisfactory, for the intended audience." CreationDate="2018-09-04T07:58:52.110" UserId="204" />
  <row Id="13341" PostId="5027" Score="0" Text="Keep in mind that C arrays are rather plain. In many languages, the pointer refers not to the first item, but to things such as the length of the array. And yet both 0-indexed and 1-indexed arrays exist. Indeed, you could use your argument to argue that arrays should start at 1, because that would allow you to store metadata in the &quot;0 offset&quot;." CreationDate="2018-09-05T09:05:23.960" UserId="1816" />
  <row Id="13396" PostId="5027" Score="0" Text="@Luaan If the metadata is at &quot;0 offset&quot; there's no guarantee it's the same number of bytes as each entry. In reality, it's a packed format: `metadata` + N x `array-item`. Only the `array-item`s are guaranteed to each be the same size. The array part is still 0 based." CreationDate="2018-09-06T23:43:02.667" UserId="1279" />
  <row Id="13447" PostId="5027" Score="0" Text="@CJDennis As surprising as it might sound, plenty of languages older than C didn't have this problem at all - e.g. all arrays had the same element size. C became somewhat famous for encouraging these kinds of hardware-specific optimizations (of course, how effective these turned out to be depended entirely on the programmer). Many considered this to be a step back - instruction-by-instruction performance wasn't thought as an end goal in itself. But regardless, this doesn't change that as soon as you need an offset anyway, 0-based arrays are no longer easier to index than 1-based." CreationDate="2018-09-13T10:18:34.287" UserId="1816" />
  <row Id="13282" PostId="5028" Score="1" Text="It would seem that in Barcelona the &quot;first floor&quot; is one floor above the &quot;primary floor&quot;, which name suggest that it is the &quot;origin&quot; for the building's life. The &quot;ground floor&quot; is presumably where garage, storage, utilities, and other facilities exist while regular rooms (kitchen etc.) are on the primary floor. Servants' quarters, are also likely to be &quot;below&quot; the primary floor. The ground floor would, presumably, have an index of -1." CreationDate="2018-09-03T17:41:29.540" UserId="104" />
  <row Id="13305" PostId="5028" Score="2" Text="In one university I have visited, the floor numbers were in feet above sea level. So not even consecutive. (This is also discussed here https://cseducators.stackexchange.com/a/215/204 )" CreationDate="2018-09-04T08:19:36.933" UserId="204" />
  <row Id="13312" PostId="5028" Score="4" Text="The reason for the numbering of floors in Barcelona is due to an old building regulation which dictated no buildings could have more than six floors. To work around this restriction, extra floor names were added so that the maximum numbered floor was always #6. The extra floor names are &quot;Entresuelo&quot; and &quot;Principal&quot; just above the ground floor, and &quot;Atico&quot; and &quot;Sobreatico&quot; just above the sixth floor. (Not all buildings will have all of these floor names)." CreationDate="2018-09-04T12:20:14.587" UserId="4047" />
  <row Id="13328" PostId="5028" Score="1" Text="There's nothing factually incorrect about these examples but it doesn't mean that it's logical.  The first hour of the day on a 12 hour clock starts is 12 (while minutes start at 0) and the second hour starts a 1.  A 24 hour clock starts at 0.  Which makes more sense?" CreationDate="2018-09-04T19:55:20.310" UserId="2087" />
  <row Id="13354" PostId="5028" Score="0" Text="To add a floor counting example, in some parts in Germany counting starts with ground floor (&quot;Erdgeschoss&quot;), then floor 1, in other parts, counting starts with floor 1 at the ground.  (I almost installed a network in the wrong floor)." CreationDate="2018-09-05T15:11:55.077" UserId="5790" />
  <row Id="13355" PostId="5028" Score="0" Text="Next: In Siemens buildings, it is a tradition that the most lower floor gets number 1, so normally the buildings have (at least) one basement so ground level has number 2 in elevators (which is obviously confusing to most guests)- but if the building has more than one basement- it is not easy to know which number has the ground level- not very convenient for guests or imagine fire alarm." CreationDate="2018-09-05T15:13:56.790" UserId="5790" />
  <row Id="13375" PostId="5028" Score="2" Text="*Nothing* Wirthian is inherited from ALGOL-68." CreationDate="2018-09-06T02:35:11.237" UserId="2485" />
  <row Id="13389" PostId="5028" Score="4" Text="+1, but this is only half the answer. The other half is that in the 70's C made the choice to directly support only indexing arrays from 0, as this made the compiler simplest (which was really C's primary design goal). Because C compilers were so simple, they were easy to make and put on any machine, and as a result of this and a few other bits of historical luck, C became super popular. As a result of that, a whole host of other languages took their lead from C." CreationDate="2018-09-06T14:32:56.233" UserId="1139" />
  <row Id="13391" PostId="5028" Score="0" Text="@Philm: The Wiki discussion I linked to has an even more confusing example. At IBM Rochester, they use the same numbering, but the buildings are so tightly interconnected that they look and feel like *one* building. So, you could walk a couple of meters on the ground floor and pass from floor 2 to floor 3 without even noticing, just because you happened to step from a building that has 1 basement to a building that has 2." CreationDate="2018-09-06T14:50:13.667" UserId="945" />
  <row Id="13384" PostId="5029" Score="1" Text="Indeed BCPL seems to be origin of 0-based indexing. We can try to explain to ourselves or to pupils why indexing starts from 0, but the fact is that it only does so in certain languages, and that most of those do so out of historical reasons. This blog shines some light on the origin of 0-indexing: http://exple.tive.org/blarg/2013/10/22/citation-needed/" CreationDate="2018-09-06T12:37:15.973" UserId="5815" />
  <row Id="13385" PostId="5029" Score="0" Text="Nice blog article. I'm amused by the notion that we're more likely to have heard of Eben Upton than of Martin Richards." CreationDate="2018-09-06T13:31:22.613" UserId="2936" />
  <row Id="13386" PostId="5029" Score="1" Text="... It reflects that the author is clearly digging into software history for the first time and is suprised by his discoveries, thinking that perhaps no-one else knows this. However, his conclusions are a bit inconsistent. Zero based indexing in BCPL was an inevitable consequence of having pointers rather than arrays as the fundamental data structuring concept, it wasn't to make array indexing more efficient." CreationDate="2018-09-06T13:38:34.943" UserId="2936" />
  <row Id="13387" PostId="5029" Score="0" Text="Since we're on Computer Science Educators, I might mention that Martin Richards and Steve Bourne between them probably taught me everything I really needed to know about programming -- mainly by example; they both wrote beautiful code." CreationDate="2018-09-06T13:42:50.047" UserId="2936" />
  <row Id="13296" PostId="5030" Score="2" Text="I think the C equivalence of `arr[i]` = `*(arr+i)` follows from its choice of zero-based indexing, not the other way around.  But good point that having pointer arithmetic at all makes zero-based indexing much more natural, and that most still-used languages with 1-based indexing don't have that.  C started as a portable assembly language, so it's totally natural that it works like asm in this regard." CreationDate="2018-09-04T00:04:28.720" UserId="1654" />
  <row Id="13301" PostId="5030" Score="1" Text="@PeterCordes I'm not sure. But I think the fact that the array operator can be used for pointer arithmetic at all (such as `ptr[-5]`) played a role in defining that `ptr[i]` is equal to `*(ptr+i)`." CreationDate="2018-09-04T05:53:55.767" UserId="4461" />
  <row Id="13321" PostId="5030" Score="3" Text="The advantage of zero-based indexing becomes even more apparent when you need to map a 2D matrix to a linear array." CreationDate="2018-09-04T18:13:01.297" UserId="897" />
  <row Id="13390" PostId="5030" Score="2" Text="This is the missing half of Jorg's answer, which together make the **correct** answer. C made the choice to only support indexing arrays from 0, and after it became popular it influenced the design of a lot of other languages. However, its quite likely *most* languages don't force a 0-based index, and some people thinking this is a computer language thing, (or worse yet, a Computer Science thing) is nothing more than myopia." CreationDate="2018-09-06T14:37:01.560" UserId="1139" />
  <row Id="13428" PostId="5030" Score="0" Text="Most index from 0, including BASIC (though I'm sure there's a variant which starts at 1). [Here's a table](https://www.wikiwand.com/en/Comparison_of_programming_languages_(array)#/Array_system_cross-reference_list)." CreationDate="2018-09-10T22:53:19.363" UserId="5898" />
  <row Id="13430" PostId="5030" Score="0" Text="@Schwern Depending on the variant of BASIC arrays start with 0 or 1. However it was typical to start `FOR` loops at 1, not at 0! I just looked into the Acorn Electron manual: Even in BBC Basic (where arrays always started at 0) `FOR` loops were typically starting at 1." CreationDate="2018-09-11T05:16:18.010" UserId="4461" />
  <row Id="13448" PostId="5030" Score="0" Text="@200_success Not really - that's just an entirely *separate* advantage of zero-based indexing. And rarely needs to be explicit in the external interface anyway - that's just again going back to C's pointer arithmetic fetish. How structures are laid out in memory shouldn't be used to design how they're supposed to be used. If you have code-level abstraction, what's the difference between `matrix[0, 0]` and `matrix[1, 1]`? How does it affect your use of `matrix.ToLinear()`? The interface should be meaningful on its own, separate of its concrete implementation." CreationDate="2018-09-13T10:26:34.747" UserId="1816" />
  <row Id="13264" PostId="5031" Score="8" Text="Give your students this simple task and they will find the answer themselves: **Number these ten students, each with a unique number, but you can only use a single digit** - they will quickly come up with the solution to number then 0 to 9 - and that is why we index starting at zero, we don't like waste :-)" CreationDate="2018-09-03T11:46:22.797" UserId="5414" />
  <row Id="13275" PostId="5031" Score="21" Text="Interestingly, all the *early* languages have *one*-based (or *user-defined*) indexing (e.g. Fortran (1957), Algol (1958)), or don't have a notion of &quot;array&quot; at all (Lisp (1957)). Zero-based indexing is a rather *modern* invention." CreationDate="2018-09-03T14:51:44.770" UserId="945" />
  <row Id="13281" PostId="5031" Score="10" Text="Interesting that on rotary telephones 0 (with ten pulses) comes after 9, but then pulsing the line zero times doesn't really work physically." CreationDate="2018-09-03T17:36:39.273" UserId="5349" />
  <row Id="13295" PostId="5031" Score="6" Text="@JörgWMittag: Interesting!  I wonder if designers of early languages were thinking that anyone who knew how computers and binary numbers really worked would just write in assembly language.  Early computers were slow, and early compilers presumably didn't optimize well / at all.  Anyway, this answer is exactly what occurred to me, too: letting an N-bit index address a full 2^N elements.  Power-of-2 buffer/object sizes are a big deal." CreationDate="2018-09-04T00:01:16.903" UserId="1654" />
  <row Id="13297" PostId="5031" Score="2" Text="@PeterCordes, languages have been a search for higher levels of abstraction and the ability to write more complex programs without getting lost in the details of assembler. The assumption was that problems were outgrowing our ability to think about them in low level terms. Languages aren't a placebo for babies, but a tool for experts. For a shock, look at the Google home page. Then use your browser to look at the actual source for that. Now try to duplicate it in assembler. Note that even assembler is a language with _minimal_ abstraction, unlike machine code with none at all." CreationDate="2018-09-04T00:08:07.377" UserId="1293" />
  <row Id="13298" PostId="5031" Score="0" Text="@Buffy: Yes, I understand that's the other motivation for higher-level languages, and why I use `bash` as a shell instead of an interactive assembler where I'd type `mov eax, __NR_fork` / `syscall`.  But I thought 1958 was still early enough in the history of computing that performance might still trump everything for many problems.  I could easily be wrong. &#xA; Having grown up with C (and assembly), 1-based indexing seems totally unnecessary and unnatural *to me*.  I'm not familiar enough with the history of computing and the motivations of early language architects to rule out my guess." CreationDate="2018-09-04T00:15:51.437" UserId="1654" />
  <row Id="13304" PostId="5031" Score="8" Text="@ScottRowe zero had 11 pulses, and one had 2 pulses. This was to stop the equipment reacting to random single pulses." CreationDate="2018-09-04T08:09:54.807" UserId="204" />
  <row Id="13340" PostId="5031" Score="2" Text="@PeterCordes It's one of the reasons so many computer scientists/engineers hated C and Unix - they took the &quot;performance is better than correctness&quot; approach, which was contrary to the prevailing thought &quot;as computer software gets more complex, it's even *more* important to keep things correct&quot;. A correct program that's easy to understand gives you more opportunities for performance improvements too - most of the time when a C program was faster it did so by sacrificing correctness (e.g. ignoring boundary conditions). Dijkstra's lessons on sustainability and quality of software are great intro" CreationDate="2018-09-05T08:59:01.297" UserId="1816" />
  <row Id="13342" PostId="5031" Score="1" Text="@Luaan: I'm not familiar with early C or Unix being unpopular for that reason. Early compilers sucked at optimization, so to make things fast people left out safety checks?  These days optimizing compilers can hoist bounds-checks out of loops if it's the same bounds on every iteration, so you can write safer code (especially with C++ to hide the noise behind `std::vector`).  C makes correctness optional, and makes you do it yourself, but it's still possible to write correct C functions / programs.  These days it's a nice language for writing hot loops, but not great for maintainability." CreationDate="2018-09-05T09:10:20.987" UserId="1654" />
  <row Id="13343" PostId="5031" Score="0" Text="@Luaan: Anyway, I don't see what zero-indexing has to do with correctness in any given language.  zero-indexing isn't *why* C makes unsafe code more easily possible.  Correlation / causation?" CreationDate="2018-09-05T09:12:33.157" UserId="1654" />
  <row Id="13350" PostId="5031" Score="0" Text="@PeterCordes You need to compare early C with languages of the time - C lacked pretty much all the things that other languages used to help you write correct programs. The goal in C was simplicity on the compiler and potentially performance, the trade-off was effort on part of the programmer. Contrast the difference between, say, iterating over an array in a for loop and doing a `map` - in the first case, you've opened yourself to potential incorrectness (out-of-bounds etc.), in the second these don't even make sense. C's design went directly against what those people thought was good design." CreationDate="2018-09-05T13:18:38.540" UserId="1816" />
  <row Id="13351" PostId="5031" Score="1" Text="@Luaan, don't lose track of the fact that C excelled at the task it was actually designed for. Kernighan and Ritchie were, at the time, at Bell Labs looking for a Better Assembler for a &quot;spare&quot; DEC PDP-7 computer they were using to develop Unix. It has the features it has precisely to match instructions in the PDP assembler set. That it was used for other purposes is a fact of history, of course, but for its designed usage it was near ideal. Ritchie wasn't trying to outdo Algol (or COBOL, of course), just do assembler more effectively." CreationDate="2018-09-05T13:25:11.927" UserId="1293" />
  <row Id="13352" PostId="5031" Score="1" Text="@Luaan, however, don't conclude from the above that I think C is a _good_ or even _adequate_ solution for modern programming. I would use it if I were writing device drivers and such, but prefer a safer language with  features such as those described by user Peter Cordes. Even safe auto-typing is a big win. Actually safe anything is a big win, especially memory management." CreationDate="2018-09-05T13:34:01.770" UserId="1293" />
  <row Id="13353" PostId="5031" Score="0" Text="@ctrl-alt-delor - That's certainly not the case for British lines, and wikipedia suggests it wasn't the common system (https://en.wikipedia.org/wiki/Pulse_dialing).  We used to have fun by dialing people's numbers by hitting the hangup button the appropriate number of times.  Well, maybe &quot;fun&quot; is pushing it." CreationDate="2018-09-05T15:06:02.510" UserId="5792" />
  <row Id="13358" PostId="5031" Score="0" Text="@Guyg I did it to defeat the lock (in England), and I had to add one to each number to get it to work." CreationDate="2018-09-05T15:21:19.617" UserId="204" />
  <row Id="13359" PostId="5031" Score="1" Text="@ctrl-alt-delor - I could swear I used to use 1 for 1, 2 for 2, etc, then 10 for zero (also in England).  Some quick Googling seems to confirm this, but I'm happy to be corrected..." CreationDate="2018-09-05T15:29:52.410" UserId="5792" />
  <row Id="13360" PostId="5031" Score="0" Text="@guyg I just tried it, it seems that you are correct. I wonder where I got that idea from." CreationDate="2018-09-05T15:34:41.053" UserId="204" />
  <row Id="13365" PostId="5031" Score="0" Text="@JörgWMittag yes but the thing that was established before arrays/indeces was that numbers themselves start at 0 in binary.  Because numbers start at 0 it is most natural for indexing to start at 0." CreationDate="2018-09-05T16:54:39.030" UserId="5795" />
  <row Id="13419" PostId="5031" Score="6" Text="@JörgWMittag &quot;*Zero-based indexing is a rather modern invention.*&quot;  It's been around since the first assembler." CreationDate="2018-09-09T09:25:28.193" UserId="3132" />
  <row Id="13421" PostId="5031" Score="0" Text="@ctrl-alt-delor IIRC the pulses are when you *lift* the button. There's 1 *pulse* for 1, but you have to press it down first." CreationDate="2018-09-10T02:07:25.790" UserId="3779" />
  <row Id="13453" PostId="5031" Score="1" Text="@PeterCordes Early computers didn't have assemblers, programs were written in machine language directly." CreationDate="2018-09-13T10:51:37.720" UserId="4513" />
  <row Id="13454" PostId="5031" Score="0" Text="This answer addresses the question as I understood it." CreationDate="2018-09-13T10:52:20.257" UserId="4513" />
  <row Id="13464" PostId="5031" Score="1" Text="@Willtech: Wasn't assembly well-established before higher-level languages came along?  Hmm, maybe not, but same difference in machine code directly: you add an offset to a pointer to get a new address.  (At least on machines that *have* normal address registers for indirect addressing, or memory-indirect addressing)  And/or you have indexed addressing modes.  I don't think any hardware ISAs had 1-based indexed addressing, but I don't actually know really early ISAs.  (I know 8-bit ISAs like 8080 have pointer registers, though.)" CreationDate="2018-09-13T17:23:11.137" UserId="1654" />
  <row Id="13473" PostId="5031" Score="1" Text="@PeterCordes Direct machine code programming preceded assembly languages, assembly languages were the first higher level languages. Machine code vs assembly code: https://stackoverflow.com/questions/466790/assembly-code-vs-machine-code-vs-object-code" CreationDate="2018-09-14T23:22:27.140" UserId="4513" />
  <row Id="13474" PostId="5031" Score="1" Text="@Willtech: yes, I know that.  I have a gold badge in the `[assembly]` tag over on SO.  My point was that normal hardware has 0-based indexing / pointer-math, whether you generate machine-code from asm or write the machine code directly.  And my other point was to acknowledge that maybe I should have said &quot;machine code&quot; instead of &quot;assembly&quot; when talking about alternatives to higher-level languages like Fortran, if asm wasn't already widespread before higher-level languages were first being developed." CreationDate="2018-09-14T23:35:09.243" UserId="1654" />
  <row Id="18007" PostId="5031" Score="0" Text="TLDR: 0 is the 1st binary number of relevance to electronics and computing and therefore when talking about sets of binary numbers, we use that valuable precious resource of the zero value in the limited binary number set available when computing was being invented. *This* is the most sensible answer. Because the code will need to *match* a binary 0000 when referencing the 1st element of a set. Kudos." CreationDate="2021-05-18T01:39:34.287" UserId="10541" />
  <row Id="13485" PostId="5032" Score="0" Text="And if I add your SSN to my SSN... how does that translate to the array? Indices are a different level of abstraction than &quot;there's 20 bytes after this pointer that represent an array of `short`s&quot;. You can argue that (e.g.) C chose this way of representing arrays an indices because of performance targets, but that's about all you can argue about that. A lot of the problems in software engineering stem from this way of thinking that just because it's possible to add two numbers together, it makes sense. It may have it's place in the lowest levels of our systems, but not normal application code." CreationDate="2018-09-18T11:20:50.850" UserId="1816" />
  <row Id="13369" PostId="5036" Score="3" Text="We absolutely count from zero. If you want to count sheep hopping over a fence, you initialize the `sheep_count` variable to 0, not 1.  If no sheep appear, you must report that zero value as the count." CreationDate="2018-09-06T00:03:22.583" UserId="1748" />
  <row Id="13450" PostId="5036" Score="0" Text="@Kaz That simply isn't true at all. This should be pretty obvious when you take into account that zero-as-a-number is a rather recent invention compared to natural numbers. People always considered &quot;nothing&quot; as a special case, and it took effort to introduce zero to math in a meaningful way (and at the cost of confusions like division by zero). You may have been *taught* to count from zero, but it certainly isn't natural to humans. If you want to count sheep hopping over a fence, do you initialize `cow_count` to zero first? I hope not :)" CreationDate="2018-09-13T10:38:50.387" UserId="1816" />
  <row Id="13339" PostId="5038" Score="1" Text="I like this.  This is also a useful way of thinking about labels in assembly language (as zero-width).  Addresses and labels don't have any natural width associated with them; that depends on what type of load/store you do.  (The type system in most languages associates an element width with a pointer, but this is why you can't add/subtract `void*` in C.)" CreationDate="2018-09-05T01:54:04.577" UserId="1654" />
  <row Id="13377" PostId="5039" Score="0" Text="Thank you , as i mentioned its the solving problem is my issue! its always the start . from where and how! will make sure to read these links thank you" CreationDate="2018-09-06T10:37:37.720" UserId="5659" />
  <row Id="13399" PostId="5040" Score="0" Text="I'm pretty sure that your &quot;average&quot; web programmer does not know all of the things you suggest.  I just polled four of them from three different companies, and only one had even a notion of what a monad was.  It's a small sample, but I'm fairly certain that if you polled 10,000 web programmers at random, you wouldn't get anywhere close to a simple majority." CreationDate="2018-09-07T17:12:21.380" UserId="27" />
  <row Id="13405" PostId="5042" Score="0" Text="+1 for the _modulus_ operation argument. I also really like the _nice invariants_ one. I always make a point of explaining to my team the importance of &quot;least surprise&quot; in designing and implementing new features (both in terms of UX design and code design). I feel the two concepts share commonality in that one of the aims of _least surprise_ design is to preserve a high quantity of _nice invariants_!" CreationDate="2018-09-08T06:38:55.133" UserDisplayName="user5857" />
  <row Id="13449" PostId="5042" Score="0" Text="You're blinded by what you're used to. `for` loops are looping from `a` to `b`. *Count* is entirely irrelevant! Pascal made this much more explicit in its own loop structures - `for i := 1 to 10` makes this rather obvious. As far as I'm concerned, your code assumes that one variable contains *two* separate meanings that happen to coincide. That's *wrong*; it may be useful for some cases, but you're reusing the same variable to mean two different things. `i` doesn't contain the count because that's it's purpose - it contains it by accident. The same with your buckets example." CreationDate="2018-09-13T10:34:20.710" UserId="1816" />
  <row Id="13465" PostId="5042" Score="0" Text="@Luaan That's the whole point of my post! The multiple meanings don't &quot;happen&quot; to coincide; they are mathematically related, and it is much easier to think about and check for errors if this relation is equal rather than off-by-one. I will admit there are a lot of times where I need to convert array indices to a &quot;1-to-n&quot; system—but almost all of these are to pretty-print things for humans. That is an important consideration—after all, we generally write programs using decimal not hex—however it is also important that code is as easy as possible to review for bugs." CreationDate="2018-09-13T21:55:14.113" UserId="2592" />
  <row Id="13412" PostId="5043" Score="1" Text="This seems like an overly complex way to clean water." CreationDate="2018-09-08T11:16:20.973" UserId="204" />
  <row Id="13446" PostId="5043" Score="0" Text="@ctrl-alt-delor Actually, except for the placement of the tanks, this is not far off from the real process. Water is treated in one tank, then another, then another, and so forth until it is clean. At least in NYC, the last &quot;tank&quot; is really an ecosystem. It is a biocleaning using algae, and many animals eat the algae, many animals eat those animals, and so forth. On the radio, they said it is actually quite beautiful in there." CreationDate="2018-09-13T02:15:09.737" UserId="27" />
  <row Id="13413" PostId="5044" Score="7" Text="But myint[0] isn't nothing, it's something." CreationDate="2018-09-08T22:30:11.703" UserId="27" />
  <row Id="13455" PostId="5045" Score="0" Text="Of course a compiler could optimize this away - this was very common on x86, for example, because of its powerful memory addressing; especially since 486 and Pentium. And of course, just have a look at any modern disassembled code - in most cases, you will not find any direct indexing from the base of the array anyway. Ultimately, in many cases, indexing an array is a relic anyway - for most cases where you see indexing, what you really want is iteration. It's just that many programmers and languages are stuck without distinction between the two." CreationDate="2018-09-13T10:55:05.300" UserId="1816" />
  <row Id="13457" PostId="5045" Score="0" Text="C or many other languages don't have iteration so we really should know what it is and how it works. Modern techniques sometimes are great but sometimes they are simply overcomplicated, less comprehensive compared to [i] and I don't think there is no kind of index accessing behind iterators - we just don't see it any more. So I doubt iterators are really faster than a simple [i]." CreationDate="2018-09-13T11:07:29.373" UserId="5871" />
  <row Id="13461" PostId="5045" Score="0" Text="C was deficient in that regard even in comparison with other languages *of its time*. And no, they're certainly not *less* comprehensive. You need to look at code with fresh eyes - a lot of the crazy doesn't seem crazy anymore when you get used to it. The thing about iterators is that any indexing is strictly an implementation detail - which allows you to give much more freedom to the code that's using them as an interface. If you pass an array, it will always be an array. If you pass an iterable, the implementation can do whatever fits - like using a linked list." CreationDate="2018-09-13T17:00:23.073" UserId="1816" />
  <row Id="13462" PostId="5045" Score="0" Text="Iterators can easily be faster than pointers, and they can be slower than pointers. But they're definitely easier to understand and reason about, and they allow a lot of optimisations that simply aren't possible with &quot;pointers to an array&quot;. Just consider something like map-reduce - it wouldn't be possible if people stuck to the idea that arrays are just a pointer to the first item in an array. Unsurprisingly, it came from the other side of the language spectrum - languages that value abstraction over micro-tweaks." CreationDate="2018-09-13T17:02:48.893" UserId="1816" />
  <row Id="13452" PostId="5046" Score="0" Text="Pascal and Visual Basic (and many other Basics) also preferred natural indices. Using zero-based indexing really has to do with conflating indexing and pointer arithmetic. If I want an array from -10 to 10, why should I index it from 0, right? Let the compiler/library deal with the details. C didn't have indexing at all, *only* pointer arithmetic, so there was little choice. For some weird reason, even today people still count this as C's *advantage*, rather than misfeature. Oh well." CreationDate="2018-09-13T10:49:20.133" UserId="1816" />
  <row Id="13458" PostId="5046" Score="0" Text="I considered including Basic but it was so long since I have used it that I was not sure.  Also, as you hint, it is probably dialect dependent.  I miss the ability to choose the minimum and maximum index.  It is a shame that it has not caught on." CreationDate="2018-09-13T11:39:09.770" UserId="5875" />
  <row Id="13463" PostId="5046" Score="0" Text="Plenty of languages on the &quot;abstraction makes things easier&quot; side of the barrier still support ranges. You just need to give up C-like languages, for the most part (though e.g. C# does have support for arbitrary indexing, it's not really &quot;equal citizen&quot; compared to zero-based)." CreationDate="2018-09-13T17:05:01.083" UserId="1816" />
  <row Id="13451" PostId="5048" Score="1" Text="BCPL, where zero-based indexing probably originated, didn't initialize variables. So that's hardly the right justification. Also, *integers don't start at 0*. Integers don't *have* a start. As for a default in your favorite language (if it even has one), that's entirely arbitrary - zero is convenient in pre-zeroed memory, but before modern memory management, there were no definite default values. A pretty common practice is to always initialize variables with a meaningful value, rather than some &quot;whateverdefault&quot; - e.g. if you want a control variable that counts down, initialize it with count." CreationDate="2018-09-13T10:45:28.927" UserId="1816" />
  <row Id="13482" PostId="5048" Score="0" Text="@Luaan Yeah, this is what I meant by saying that it's arbitrary. I don't agree with BCPL as the origin. In asm when you think of a memory area as an array, you index it with addr+(0*stride), addr+(1*stride), etc" CreationDate="2018-09-18T08:12:04.847" UserId="2800" />
  <row Id="13483" PostId="5048" Score="0" Text="In assembly, you didn't have any abstraction (at first). Indexing an array is already an abstraction - it's a map between &quot;I want the 3rd element of the array&quot; and what's actually needed to get that particular element. The fact that you don't need to know the element size in BCPL (or anything else about the array) is a big difference. Indeed, in assembly, you'd often see very complicated addressing patterns that were tailored to the capabilities of the hardware, rather than the logical structure of the program; in C, if you wanted the next element, you did `element++`." CreationDate="2018-09-18T11:10:01.487" UserId="1816" />
  <row Id="13484" PostId="5048" Score="0" Text="Now, it's true that in C, that actually was a low-level pointer operation. But that's not the purpose of it, that's just a constraint to make the compiler simpler. The meaning is still &quot;the next element&quot; or &quot;the 3rd element&quot;, not &quot;pointer + 0x12&quot;. C is a rather bare language, but it's still way above the abstraction of then-assembly. Meanings started to creep into things that used to be pure procedural code. Of course, it couldn't compare to anything like LISP - the ties to hardware were far too strong for that. But there were things like `0` as pointer value, or what `i++` means." CreationDate="2018-09-18T11:13:18.803" UserId="1816" />
  <row Id="13486" PostId="5048" Score="0" Text="@Luaan This is why I wrote &quot;when you **think** of a memory as an array&quot;. It doesn't matter if the abstraction is a part of a language or your train of thought. BCPL built up on established standards of thinking about a program. I don't really get where are we going, because I feel like you're restating my concepts but phrase them like counter-arguments. If you believe that my answer can be improved, then it appears you need to be more specific." CreationDate="2018-09-18T12:12:31.107" UserId="2800" />
  <row Id="13467" PostId="5051" Score="0" Text="I 100% agree. When I saw this answer for the 1st time, I was totally convinced. However this is not the first time that this answer has been given, and **some** of the older versions, give deeper explanations." CreationDate="2018-09-14T16:53:03.903" UserId="204" />
  <row Id="13432" PostId="5052" Score="4" Text="Actually, not everyone agrees with your first paragraph. Some count centuries starting with year &quot;1&quot; as in 1901 thru 2000. There was a lot of worry about that at the millennium and the danger that systems would fail at the rollover whenever that was. Also, I'll note that the Western calendar doesn't have a year 0. It jumps from 1BCE to 1CE with no 0 in between. Personally, though, The 17th century, being the sixteen-hundreds has always been a pain for me." CreationDate="2018-09-11T16:17:15.313" UserId="1293" />
  <row Id="13433" PostId="5052" Score="0" Text="And then when a student well-actualy's you like that, they fell into your trap and you say, &quot;Wouldn't it make a lot more sense if we started at year 0 and our centuries started at 1900, not 1901? That's 0-indexing.&quot; :P" CreationDate="2018-09-11T16:36:08.820" UserId="5910" />
  <row Id="13434" PostId="5052" Score="0" Text="Hmmm. Well, actually, I was just pointing out an historical fact." CreationDate="2018-09-11T17:13:04.317" UserId="1293" />
  <row Id="13435" PostId="5052" Score="0" Text="@Buffy Surely that is now anachronistic? I never heard a peep about that when the year 2000 was rolling around. It seemed clear enough at the time that the popular understanding is that the centuries go from '00-'99." CreationDate="2018-09-11T17:43:46.053" UserId="27" />
  <row Id="13436" PostId="5052" Score="0" Text="Well, see, https://www.scientificamerican.com/article/when-is-the-beginning-of/" CreationDate="2018-09-11T17:45:32.833" UserId="1293" />
  <row Id="13437" PostId="5052" Score="0" Text="But the technical issue mostly involved using two bytes for a date's year, so the issue was what happens when 99 becomes 00. The fear was that all date computations would fail and take financial systems (etc.) with them." CreationDate="2018-09-11T17:50:05.503" UserId="1293" />
  <row Id="13440" PostId="5052" Score="0" Text="There were other issues with two digit dates, of course. some people on their 100th birthday were suddenly considered infants and their pensions, etc were put on hold along with some other legal problems. I don't know if you are old enough to remember the web in the previous century, but it was common (nearly universal) for a date form to have two digits for year. You entered your birthday as 7/9/88, for example. That has changed now." CreationDate="2018-09-11T17:55:37.740" UserId="1293" />
  <row Id="13469" PostId="5052" Score="0" Text="So in a race the person in 0th place is the winner (gets the gold). The 1st place gets silver, and the 2nd place gets bronze." CreationDate="2018-09-14T17:02:01.107" UserId="204" />
  <row Id="13456" PostId="5053" Score="0" Text="Variables are entirely separate concept from memory; even today, most of the variables you use never make it into memory. As for pointers... pointers are everywhere, yes. Pointer *arithmetic* is a fetish that should have died ages ago. Multiplication *can* be explained in terms of addition, but it doesn't have to. The reason we teach addition first is because it's easy to teach algebraically, while multiplication makes far more sense geometrically - and it so happens that most math teachers are a lot more comfortable with algebra than geometry. But that's an entirely subjective value." CreationDate="2018-09-13T10:55:58.590" UserId="1816" />
  <row Id="13442" PostId="5056" Score="1" Text="Nice first contribution here.  Welcome to [cseducators.se]!" CreationDate="2018-09-12T15:09:01.327" UserId="27" />
  <row Id="13443" PostId="5056" Score="0" Text="@BenI. Thanks! :-) As a fan of 1-based indexing, it really pains me when people speak from their personal preference, and I in particular hate Djikstra's very selective argument. I've been lucky to find the resource I linked a while ago, because it is a much better analysis than anything I could hope to do." CreationDate="2018-09-12T15:55:07.173" UserId="5921" />
  <row Id="13468" PostId="5057" Score="1" Text="I 100% agree. When I saw this answer for the 1st time, I was totally convinced. However this is not the first time that this answer has been given, and some of the older versions, give better explanations." CreationDate="2018-09-14T16:53:50.060" UserId="204" />
  <row Id="13470" PostId="5057" Score="0" Text="As pointed out, other earlier answers mention this, but it is a concise explanation, &quot;in my own words&quot; IMHO." CreationDate="2018-09-14T19:21:01.420" UserId="5930" />
  <row Id="13466" PostId="5059" Score="0" Text="I am not sure that I agree, with all of paragraph 2 (counting from zero), but the base 11 thing is spot on. Why did I never see this. I am going to use base 11 from now on (or at least for a week). Oh no I failed already, I write eleven in base 10. I should have written 10 (that is eleven in base 10). Yes that is what I will do. I will use base 10 from now on." CreationDate="2018-09-14T16:50:47.850" UserId="204" />
  <row Id="13472" PostId="5061" Score="0" Text="Funny, I was going to comment that SICP is basically the inversion of everything the OP asked for. I don't think that any normal person is going to plow through such an arcane intro to &quot;all that computer stuff&quot;. It would be good to have a more accessible book. Tannenbaum's book is from the same era, but has what the OP wants." CreationDate="2018-09-14T20:06:02.610" UserId="5349" />
  <row Id="14086" PostId="5061" Score="0" Text="Would you, please, edit your answer to address what the resources cover, that the OP needs, and where they fall short of the objectives. Give the future readers of your answer what they need to know about the resources as they try to decide which ones they might use for their purposes." CreationDate="2018-12-19T15:02:59.800" UserId="104" />
  <row Id="14233" PostId="5061" Score="0" Text="@ScottRowe You should make an answer with the Tannenbaum book." CreationDate="2019-02-03T03:29:21.343" UserId="27" />
  <row Id="14239" PostId="5061" Score="0" Text="@BenI. &quot;Oh Tannenbaum, Oh Tannenbaum! How graceful are thy Branches!&quot; Couldn't resist." CreationDate="2019-02-05T00:35:00.760" UserId="5349" />
  <row Id="13541" PostId="5062" Score="0" Text="I often have the chance to point out mid-semester that &quot;well, the technology we started the class with is now slated for being deprecated and there is some new stuff to replace it&quot;.  Both programming (was teaching a PHP 5.x based course when PHP 7 was released) and Linux administration/services as new distributions are released.  The IT field and technologies change constantly - if you aren't self-learning to keep up, you end up stagnating and being stuck in an old job...." CreationDate="2018-09-26T16:32:35.750" UserId="662" />
  <row Id="13477" PostId="5064" Score="1" Text="`if a runner goes from the 3 yard line to the 4 yard-line, there is a (4-3) = 1 yard gain. However, if your math teacher assigns problems 3-4 (integers)` The core difference here is that the former denotes the distance between points, and the latter denotes the points themselves. 2017 and 2018 are two distinct years (points), but the timespan (distance) between NYE 2017 and NYE 2018 is _one year_. This does not actually answer why 0-based indexing is used, as you're simply comparing two inherently different things. (_&quot;from 3 to 4&quot;_ vs _&quot;3 and 4&quot;_)" CreationDate="2018-09-18T06:27:43.787" UserId="2164" />
  <row Id="13487" PostId="5064" Score="0" Text="One must use 0 as a base, however." CreationDate="2018-09-18T12:15:52.480" UserId="5930" />
  <row Id="13488" PostId="5064" Score="1" Text="`One must use 0 as a base`. I don't quite agree, 0-indexing is not universally superior to 1-indexing. As I mentioned in my earlier comment, it depends on what you're actually expressing (points, the distance between them, ...). There are many cases where the 0th element is a literal &quot;nothing&quot;, thus precluding 0 from being relevant (especially when pertaining to physical objects)." CreationDate="2018-09-18T13:34:30.113" UserId="2164" />
  <row Id="16918" PostId="5064" Score="1" Text="I think this is what is called a fence-post error: You have questions 3,and 4. These are the posts. It is an error in this case to count the fence panels ($4-3$). You are not measuring the distance between the posts (number of panels), you are counting the posts. See also inclusive and exclusive ranges. Some languages use inclusive lower and exclusive upper, as this choice has **less** problems than other choices." CreationDate="2020-08-30T14:23:57.723" UserId="204" />
  <row Id="16927" PostId="5064" Score="0" Text="Note that in North American football, the &quot;Goal Line&quot; is the same as a zero-yard line, which is zero-based.  For the math problems, you aren't doing problem 2, but if you subtract 4-2 = 2 you get the right answer.  Thinking about 'how' this works is difficult, at least for me, and I have a Ph.D. in Electrical Engineering, focusing on computer simulations using eigen-spaces." CreationDate="2020-08-31T16:45:55.637" UserId="5930" />
  <row Id="20137" PostId="5064" Score="0" Text="The 3-4 is not a subtraction it is a range (inclusive range). It is 3→4 or {3,4}." CreationDate="2022-05-29T17:55:54.347" UserId="204" />
  <row Id="13476" PostId="5066" Score="1" Text="Welcome to [cseducators.se]. Glad you picked this site as the home for your question. While Haskell is _way_ outside my experience, I believe this is the place to find your answers, if any exist that is. I've added some tags, which you can remove if you choose, that might help sort out what others see before opening your question." CreationDate="2018-09-18T00:09:22.420" UserId="104" />
  <row Id="13496" PostId="5066" Score="0" Text="Is http://blog.tmorris.net/posts/20-intermediate-haskell-exercises/ the kind of thing you are looking for?" CreationDate="2018-09-20T01:53:58.113" UserId="5969" />
  <row Id="13501" PostId="5066" Score="0" Text="I suggest that you ask a question like this on the SIGCSE mailing list. While the membership there overlaps with this site, you will reach a lot of additional people who may have answers." CreationDate="2018-09-20T15:31:05.357" UserId="1293" />
  <row Id="13510" PostId="5066" Score="0" Text="@BrentYorgey Those exercises are of the &quot;type tetris&quot; variety, where instances are written without any application or domain context. _Haskell Programming from First Principles_ contains plenty of these. You do learn to write instances from types alone. But there is no stage where abstractions would be identified in domain, nor any idea of how they might be used." CreationDate="2018-09-22T13:14:22.567" UserId="5956" />
  <row Id="13515" PostId="5066" Score="0" Text="I see!  Yes, I am not aware of any collected exercises along those lines." CreationDate="2018-09-23T21:27:18.663" UserId="5969" />
  <row Id="13492" PostId="5069" Score="0" Text="Welcome back! Do you just want a stream of random numbers? If so, I can build an answer off of something like [this](https://crypto.stackexchange.com/a/5543). If not, what data characteristics would be helpful?" CreationDate="2018-09-19T18:43:58.390" UserId="27" />
  <row Id="13493" PostId="5069" Score="0" Text="@BenI., that sounds like overkill. Why aren't pseudo random numbers enough if all you really want is to illustrate the theory." CreationDate="2018-09-19T20:06:07.923" UserId="1293" />
  <row Id="13494" PostId="5069" Score="0" Text="Pseudo random numbers are perfectly fine. I just want them to be coming in a continuous stream, rather than stored on the machine. I think InfoSphere stream is basically an environment you program in, that handles the continuous streams of data in the background. So, you would write code that would start &quot;listening&quot; to the stream (i.e. take a sample) and then compute on what you get during that sample." CreationDate="2018-09-19T21:19:14.307" UserId="294" />
  <row Id="13495" PostId="5069" Score="0" Text="Forgive my ignorance, but I would like to see a description added to the question of the types of operations that the stream processing would perform, especially when you mentioned &quot;stream of words&quot; rather than only numbers. Maybe there is a James Joyce emulator out there. Stream of consciousness, anyone? You could do an Eliza analysis on the stream..." CreationDate="2018-09-19T23:04:46.700" UserId="5349" />
  <row Id="13497" PostId="5069" Score="0" Text="@Buffy If it is easy to use, why would it be overkill? The back-end of it hardly matters, just how easy it is to connect to, no?" CreationDate="2018-09-20T10:23:37.917" UserId="27" />
  <row Id="13498" PostId="5069" Score="0" Text="@BenI. No reason if it is easy, but it didn't seem that way with a quick look." CreationDate="2018-09-20T11:30:21.470" UserId="1293" />
  <row Id="13500" PostId="5069" Score="1" Text="I think I'll just create a giant txt file of numbers (or words, if we want to do a streaming algorithm on word data) and then have the students read it in line by line. To get practice with multiple streams, I can give them several different txt documents. That way, we don't actually need to interface with the internet or rely on an external API, both of which always take resources to learn." CreationDate="2018-09-20T15:10:37.543" UserId="294" />
  <row Id="13502" PostId="5069" Score="0" Text="A source of randomness is `/dev/urandom`." CreationDate="2018-09-20T15:45:28.493" UserId="204" />
  <row Id="13516" PostId="5069" Score="0" Text="Having a file of data or using a PRNG which can re-run the same sequence would improve testability." CreationDate="2018-09-23T22:49:23.360" UserId="5349" />
  <row Id="13506" PostId="5071" Score="1" Text="In my experience, the learning curve for from duck typing to (basic) static, declared types is pretty short. Partly because it is enforced by the compiler and partly since you probably introduced at least the int/float/str types in python." CreationDate="2018-09-21T22:56:04.777" UserId="1879" />
  <row Id="13539" PostId="5071" Score="1" Text="If your students understand basics about programming logic, tehre is nor problem; each language has similarities and differences and they have to understand as many as they can" CreationDate="2018-09-26T15:05:13.120" UserDisplayName="user5980" />
  <row Id="13954" PostId="5071" Score="0" Text="And in the working world I float between Java and PHP.  Gotta admit that at times I miss the  strong typing when working in PHP, and at times I miss the loosey-goosey dynamicness when working in Java." CreationDate="2018-11-19T16:53:35.397" UserId="662" />
  <row Id="13507" PostId="5072" Score="0" Text="I like the distinction of names and values. I had never thought of it like that (I am a Software Engineer / Teacher, and learning to think more like a computer scientist, every day. If you are a computer scientist, then learn to think more like a Software Engineer, both are valuable). However, did you make a small error, I think “having to explicitly type names”, should be “having to explicitly type types”." CreationDate="2018-09-22T10:24:45.573" UserId="204" />
  <row Id="13508" PostId="5072" Score="1" Text="@ctrl-alt-delor. Clearer now. It wasn't an error, but may have been poorly stated." CreationDate="2018-09-22T11:20:03.217" UserId="1293" />
  <row Id="19662" PostId="5076" Score="0" Text="This is merely moving the question to: why is binary using 0/1 and not 1/2" CreationDate="2022-05-04T04:39:29.503" UserId="12015" />
  <row Id="13517" PostId="5077" Score="0" Text="I agree, but the import of the question was whether textbooks or self-created 'books' are currently a useful resource for CS teaching. No one was saying that students should be compelled to read them. For anyone who thinks that they &quot;already understand the subject matter&quot;, perhaps they should consider what Richard Feynman said. No one understands anything, they are only just starting to learn it. Anyone who doesn't want to avail themselves of a ready collection of information to learn more is pretty short-sighted." CreationDate="2018-09-24T21:19:36.480" UserId="5349" />
  <row Id="13522" PostId="5077" Score="0" Text="@ScottRowe: My answer suggests that _providing_ the books but not _requiring_ them is a good approach, which does answer the asked question. The rest of the answer is explaining/justifying that conclusion." CreationDate="2018-09-25T06:05:10.283" UserId="2164" />
  <row Id="13523" PostId="5077" Score="0" Text="@ScottRowe: Also, not everyone learns from reading for reading's sake. There's a difference between having a book as documentation _should you need it_, and using the book to actually learn the basics. Especially in IT, you'll find that a significant amount of learners are hands-on learners, who generally only visit their resources when faced with a problem they can't solve (or are interested in finding a better solution)." CreationDate="2018-09-25T06:06:35.590" UserId="2164" />
  <row Id="13525" PostId="5077" Score="0" Text="Sure. When I first sat down at a PDP-11 terminal or Apple ][ 40 years ago, there were no textbooks available, it was all hands-on. But you can never type fast enough to make all the mistakes other people have already written about. Once people have seen all the walls, they will want to read how to get out of the maze. I hope. At some point, one would just reach for the books first thing. Or, not." CreationDate="2018-09-25T11:43:43.593" UserId="5349" />
  <row Id="13526" PostId="5080" Score="1" Text="Just as a thought experiment, and a bit orthogonal, have you considered whether it might be better to focus more on what you already do well, going deeper, rather than trying to cover things that might turn out to be sketchy? Not every student, even today, needs, or will go on in, AI." CreationDate="2018-09-25T19:42:26.187" UserId="1293" />
  <row Id="13528" PostId="5080" Score="1" Text="Another thought. Would a non-required upper level course with a heavy math requirement be a _bad_ thing? Perhaps as a goad. It might take some lead time so that students have a shot, of course." CreationDate="2018-09-25T20:20:08.987" UserId="1293" />
  <row Id="13531" PostId="5080" Score="1" Text="@Buffy I don't think Calculus is the best use of all of our students' time. Also, if too few students sign up for a class, it gets canceled." CreationDate="2018-09-25T22:14:40.373" UserId="283" />
  <row Id="13527" PostId="5081" Score="0" Text="Are you more interested in set theory per se, or in the programming?" CreationDate="2018-09-25T20:11:03.270" UserId="1293" />
  <row Id="13529" PostId="5081" Score="0" Text="A problem you will have, if they know neither set theory, nor Racket, is that you are trying to advance them simultaneously on two independent axes. That is difficult in principle, as well as in practice." CreationDate="2018-09-25T20:29:17.557" UserId="1293" />
  <row Id="13530" PostId="5081" Score="0" Text="@Buffy I'm more interested in set theory." CreationDate="2018-09-25T20:38:20.663" UserId="27" />
  <row Id="13569" PostId="5081" Score="0" Text="I would be looking at using/creating a library that operates on sets/lists. With operations such as `is_all_in my_collection  (lambda x: x&gt;7) : Boolean`. Some basic operations are `is_all collection lambda: Boolean`, `contains collection lambda: Boolean` (at least one), `is_subset collection collection:Boolean`, `union collection collection: set`, `intersection collection collection: set`. I have used these libraries in many languages, can't remember which." CreationDate="2018-09-29T17:43:21.223" UserId="204" />
  <row Id="13533" PostId="5082" Score="1" Text="But my course isn't about SQL. One of the course goals is to teach a functional programming language, and we are using Racket." CreationDate="2018-09-26T02:40:28.700" UserId="27" />
  <row Id="13544" PostId="5082" Score="0" Text="@beni apparently Racket is a pedagogic language, often used for constructing other languages. So have the students create parts of SQL using Racket, then teach the set theory using the SQL. I don't know of any other language more related to sets and relational concepts than SQL. Do you?" CreationDate="2018-09-26T20:49:35.320" UserId="5349" />
  <row Id="13546" PostId="5082" Score="0" Text="@ScottRowe It's true that Racket allows you to reconstruct Racket until it mimics another &#xA;language,a but you're deep into Scheme if you're doing that. That activity wouldn't be at an introductory level for that language." CreationDate="2018-09-27T02:36:56.033" UserId="27" />
  <row Id="13548" PostId="5082" Score="0" Text="@beni I know that SICP has some data structure definitional stuff, like defining pairs, then creating other things from those, but it seems pretty advanced to me. I think that Lisp, like parts of the Torah, should be off-limits until someone has turned 35." CreationDate="2018-09-27T23:22:34.080" UserId="5349" />
  <row Id="13532" PostId="5083" Score="0" Text="Thank you. We cover some of the topics you mention in our classes on data structures, algorithms, and theory of computation. FWIW, I took 6.034 ~30 years ago. (I assume there have been some changes.)" CreationDate="2018-09-25T22:16:54.680" UserId="283" />
  <row Id="13534" PostId="5083" Score="1" Text="Hi Matthew! Welcome to [cseducators.se]! Thank you for taking the time to write this answer and share your experiance! I hope to see you around the site more." CreationDate="2018-09-26T03:34:02.603" UserId="58" />
  <row Id="13537" PostId="5083" Score="1" Text="Matthew, just out of curiosity - did you ever look into NEAT, and if yes, do you think it's a good algorithm to show both evolutionary approaches to ML and how powerful stochastic is?" CreationDate="2018-09-26T13:00:05.540" UserId="5990" />
  <row Id="13540" PostId="5083" Score="0" Text="Hi Mafii! I've never heard of NEAT before; based on my 1-minute glance on wikipedia, it looks really cool! Seems to take inspiration from classic &quot;genetic algorithms&quot; (which I find interesting but hard to justify teaching when they are so sporadically applied). I think it would be a really cool think to mention/demonstrate but I highly doubt any undergrad AI survey course would be able to get far into it. Static structure neural networks are weird enough!" CreationDate="2018-09-26T15:20:07.677" UserId="5614" />
  <row Id="13536" PostId="5086" Score="0" Text="The things you mention aren't comparable. Complexity isn't like obsolescence. Why should anyone prepare students for a 20th century career?" CreationDate="2018-09-26T11:14:23.570" UserId="1293" />
  <row Id="13543" PostId="5086" Score="0" Text="What sort of students do you teach?  High school?  College?  Adults transitioning careers?  My answer would be a little different depending on your target audience." CreationDate="2018-09-26T18:15:39.300" UserId="27" />
  <row Id="13545" PostId="5086" Score="0" Text="Hi @BenI., I work on mainframe technologies and develop educational and training content for this community." CreationDate="2018-09-27T01:16:33.010" UserId="5613" />
  <row Id="13568" PostId="5086" Score="0" Text="**Educate** you students, then if the fees are high enough, they will **train** them selves to use Cobol. While I agree that teaching language of the day, is not a good strategy, I also think that teaching an old language, because we thing there is a market for these programmers is equally miss-guided. Teach using a good teaching language, don't consider industry languages, until the students can program well (they need to learn at least two languages anyway)." CreationDate="2018-09-29T17:21:51.580" UserId="204" />
  <row Id="13594" PostId="5086" Score="0" Text="Frame challenge: &quot;*the world needs engineers to maintain it*&quot; isn't an appeal to altruism but to ambition. The subtext is &quot;*study this and you'll be guaranteed a stable job*&quot;." CreationDate="2018-10-03T14:30:24.587" UserId="1219" />
  <row Id="13542" PostId="5090" Score="0" Text="Perfect, thank you.  This is exactly the sort of thing that I had in mind.  You have helped to clarify my thinking on this matter!" CreationDate="2018-09-26T18:04:55.730" UserId="27" />
  <row Id="13549" PostId="5091" Score="0" Text="You are being annoyed at the language itself, not the students. It is perfectly valid Python. Variable _name_ has a binding when _greeting_ is called. Use the code above as a lesson about dynamic binding, not a complaint against the student. Write your preferred code and contrast the two. It is an opportunity not a bug here.  I argue that the students have _not_ &quot;messed up&quot;. They just didn't read your mind." CreationDate="2018-09-28T11:26:59.173" UserId="1293" />
  <row Id="13551" PostId="5091" Score="0" Text="If you want the students to use parameters, give them an example where using a parameter is the obvious way to do it." CreationDate="2018-09-28T11:58:04.050" UserId="2103" />
  <row Id="13552" PostId="5091" Score="3" Text="@Buffy I didn't think anyone would imply that I'm annoyed by the students. I stated that it was the code, and I know it's not a bug." CreationDate="2018-09-28T13:26:25.173" UserId="5994" />
  <row Id="13553" PostId="5091" Score="0" Text="@MichelBillaud Could you write up an answer with such an example?  It might help future visitors.  (I would try, but I am not even a little bit of a Pythoner)" CreationDate="2018-09-28T13:45:49.423" UserId="27" />
  <row Id="13563" PostId="5091" Score="0" Text="BTW, if you are trying to teach Python, but don't yet understand it thoroughly, have a look at this question: https://cseducators.stackexchange.com/questions/4379/how-do-you-teach-something-when-you-dont-know-it-yourself. It is a common enough dilemma, but there are solutions to it." CreationDate="2018-09-28T20:05:09.857" UserId="1293" />
  <row Id="13571" PostId="5091" Score="0" Text="If you need to understand why the above happens, and how Python handles top-level statements in any module, see https://stackoverflow.com/questions/18138166/what-is-a-top-level-statement-in-python" CreationDate="2018-09-30T14:09:43.410" UserId="1293" />
  <row Id="13550" PostId="5092" Score="1" Text="This answer is valid even if you _don't_ teach C first. Beginners don't actually need complete, bottom up, explanations of everything, especially a bit of boiler plate. It can be treated as a magic incantation. In the age of Harry Potter, especially." CreationDate="2018-09-28T11:45:12.110" UserId="1293" />
  <row Id="13559" PostId="5092" Score="0" Text="I like this idea but I also don't want to add complexity to an awesomely, simple language like Python. Another part of this is my ignorance to the whole `__name__ == &quot;__main__&quot;`. I have no idea what that is, so I'm failing in that respect. Gotta go look that up now." CreationDate="2018-09-28T19:10:40.163" UserId="5994" />
  <row Id="13562" PostId="5092" Score="1" Text="Every language has its quirks @tazboy. Eventually you get used to that and just live with them. Alternatively, you can work to build better languages. But at some level a program has to connect to the system on which it runs. That results in a lot of those quirks. But for teaching, it is generally fine to ignore the details (while including them) until the student has a better overall grasp. The alternative is to tightly integrate a language and its OS as was done originally with Smalltalk and Oberon. You may think such necessary spells are &quot;Riddikulus&quot; and you'd be correct. Hard to avoid tho." CreationDate="2018-09-28T19:28:05.643" UserId="1293" />
  <row Id="13566" PostId="5092" Score="0" Text="Yeah. I just need to teach that concept in a different way now, which is fine. This is  the first thing I encountered that I wasn't expecting and I'm really enjoying teaching Python. Thanks for info." CreationDate="2018-09-28T22:57:10.470" UserId="5994" />
  <row Id="13554" PostId="5093" Score="0" Text="For reasons that I hope are obvious to you, I would _much_ prefer _driver_ and _navigator_ to _typist_ and _observer_. Especially if you are speaking indirectly of pair programming. Your names give completely the wrong idea about pairing. You make one, the navigator, far too passive, for example. If you think that they are accurate names, I strongly suggest that you investigate further. https://www.amazon.com/Pair-Programming-Illuminated-Laurie-Williams/dp/0201745763/" CreationDate="2018-09-28T14:56:50.573" UserId="1293" />
  <row Id="13555" PostId="5093" Score="0" Text="@Buffy You can call them whatever you want; it is irrelevant to the question at hand." CreationDate="2018-09-28T14:58:23.473" UserId="1879" />
  <row Id="13557" PostId="5093" Score="0" Text="You can also search on this site for &quot;Pair Programming&quot; to get a better sense of what it means." CreationDate="2018-09-28T15:15:17.867" UserId="1293" />
  <row Id="13558" PostId="5093" Score="1" Text="@Buffy After reading some of your responses it seems as though you come off pretty aggressive. I want to hear your answers but I also don't want to because of how it's presented. You had a good suggestion to Adam... but ouch." CreationDate="2018-09-28T19:07:10.817" UserId="5994" />
  <row Id="13560" PostId="5093" Score="0" Text="I'm both an educator and an educator of educators. Names are important. If a name is misleading, don't use it. That is true both in programming and in education. I think it important to point that out, especially on this site. Names are not, in fact, irrelevant. You can also search on this site for &quot;Naming&quot;, for example. One reason that agile development often fails in use is that the people trying it don't understand it and don't even try to apply it correctly. It can be just a buzzword to cover bad practice. Pair Programming means what it means." CreationDate="2018-09-28T19:13:53.407" UserId="1293" />
  <row Id="13561" PostId="5093" Score="0" Text="What you interpret as aggressive is, sadly, a consequence of the short format of comments. I don't have room here for a complete explanation so am forced to give short summaries on occasion." CreationDate="2018-09-28T19:18:59.270" UserId="1293" />
  <row Id="13564" PostId="5093" Score="0" Text="It's not the short format. And it is irrelevant to the op question." CreationDate="2018-09-28T22:08:10.383" UserId="5994" />
  <row Id="13573" PostId="5093" Score="0" Text="@tazboy, the general philosophy here is that the best answers should be useful to a future visitor, not just the OP. A mailing list is perfectly adequate for answering immediate questions. However, the fact that questions and answers here are preserved and searchable, as well as tagged, implies that there is a longer-term goal for this site. Future visitors probably won't have exactly the same problem, but if it is related, then the given answers might help them as well." CreationDate="2018-09-30T14:20:11.287" UserId="1293" />
  <row Id="13579" PostId="5093" Score="0" Text="@Buffy well... wow" CreationDate="2018-09-30T19:18:24.773" UserId="5994" />
  <row Id="13567" PostId="5094" Score="0" Text="Hi bahbooshka, welcome to [cseducators.se]. We always welcome student insights here!" CreationDate="2018-09-29T12:43:46.260" UserId="27" />
  <row Id="13570" PostId="5094" Score="0" Text="Hi. I hope my edits make your post a bit more readable. Welcome to the site." CreationDate="2018-09-30T13:09:42.967" UserId="1293" />
  <row Id="13574" PostId="5094" Score="0" Text="I like your contribution, it is good to see the perspective of a learner. Thanks.&#xA;You can improve your writing by reducing the length of your sentences. &#xA;Try using **subject**-*verb*-**object**, for most sentences. e.g. “**The dog** *chased* **the orange ball**.”." CreationDate="2018-09-30T14:24:33.820" UserId="204" />
  <row Id="13576" PostId="5094" Score="0" Text="Here is my attempt to edit you first paragraph. It is a lot shorter now. It contains **subject**-*verb*-**object**, but also some extensions (using a comma). “**I** *am* **12 years old**. **I** *learned about* **Python**, when I saw a video about a guy getting a wpm of 162 , on a type-race-game. I decided that, **I** *wanted to make* **a type-race-game**. **I** *knew about* **coding**, because my dad taught me HTML, when I was 9, but I did not like it, at this time.” Hope this feedback is useful. Keep learning." CreationDate="2018-09-30T14:26:27.467" UserId="204" />
  <row Id="13577" PostId="5096" Score="0" Text="Do you do Processing in high school? I was thinking about teach p5.js but ended up with Python. Any issues or things you like?" CreationDate="2018-09-30T19:12:26.500" UserId="5994" />
  <row Id="13578" PostId="5096" Score="0" Text="The example was just something simple I could put up for a talking point. Reuse and readability are talking points for sure. Decomposition is a lot easier when it comes to drawing." CreationDate="2018-09-30T19:16:24.297" UserId="5994" />
  <row Id="13580" PostId="5096" Score="0" Text="@tazboy That's the reason why I chose drawings for the first examples." CreationDate="2018-09-30T19:40:01.843" UserId="2103" />
  <row Id="13581" PostId="5096" Score="0" Text="Yeah, that's a great way to start. Did you do this in high school? How far do you go with them?" CreationDate="2018-09-30T19:46:49.793" UserId="5994" />
  <row Id="13584" PostId="5096" Score="0" Text="That a one year professional training program at the university. Processing is used to explain the basics of programming and algorithmic, and then we switch to Java and other languages C#, php,  javascript etc." CreationDate="2018-09-30T19:52:44.543" UserId="2103" />
  <row Id="13590" PostId="5102" Score="0" Text="Is the question _how to do it_ or is it _whether it is a good idea to do it_?" CreationDate="2018-10-03T00:00:41.407" UserId="1293" />
  <row Id="13591" PostId="5102" Score="0" Text="@Buffy well, I think we can safely assume that if it is a bad idea, I would not want to do it, since I am not egoically motivated." CreationDate="2018-10-03T00:04:56.137" UserId="5349" />
  <row Id="13593" PostId="5102" Score="0" Text="I was surprised to read that about 30% of adults over age 25 play video games every day. I can't remember the last time I even saw a video game." CreationDate="2018-10-03T00:38:40.493" UserId="5349" />
  <row Id="13592" PostId="5103" Score="0" Text="Thank you, I read that gamification results were equal for men and women, so that is no issue. As for endorphin hits, you just put my entire learning experience with programming in to perspective! I was doing incremental development and testing, back in college. I never thought of it as mildly addictive before -- yet another thing that was right in front of my face. My goal is just to figure out what the heck online course design really is, and I am not coming up with much except that it takes everything we have always done and makes it visible via a computer screen. Not such a big revolution." CreationDate="2018-10-03T00:29:20.510" UserId="5349" />
  <row Id="13605" PostId="5104" Score="0" Text="Thank you for the real life example, that helps a lot. The statistics for this CSE site suggest that gamification is not particularly helpful at boosting engagement. With 5800 members, only 30 are above 1000 points, and a large number are at 101, which suggests that they came here from other sites only to comment. I bet that the curve for SO looks pretty similar, with the vast majority of the millions of users asking only one Question and then moving on when they got what they needed." CreationDate="2018-10-04T01:35:42.870" UserId="5349" />
  <row Id="13606" PostId="5104" Score="1" Text="Those who joined the site and did nothing, or have asked a question and left with their answer can be ignored, relative to your question. They would be the same as students from other departments stopping by your office to ask a question. (How do I unlock my laptop?) As I understand the question, the gamification would be for increasing the engagement of students already interested in taking your course. Poking around, at random, in the low rep (&lt;300) users for this site, most of whom seem to not be teachers, it seem about 25% visited within a month. [Wish I knew SEDE for better stats. :( ]" CreationDate="2018-10-04T02:44:36.387" UserId="104" />
  <row Id="13604" PostId="5105" Score="0" Text="Well, this is a good way to understand it, thank you." CreationDate="2018-10-04T01:30:46.720" UserId="5349" />
  <row Id="13595" PostId="5106" Score="0" Text="Will you be with them as they &quot;view&quot; this material or is it strictly remote learning?" CreationDate="2018-10-03T16:35:28.383" UserId="1293" />
  <row Id="13596" PostId="5106" Score="0" Text="It will be an in-person presentation, so I will be able to physically view their screens. Though it would be helpful to have a way to see their entries without having to physically go to each person's seat." CreationDate="2018-10-03T18:32:52.233" UserId="5217" />
  <row Id="13597" PostId="5106" Score="0" Text="Someone else my have a direct answer, but I question whether this is the most effective use of face-time." CreationDate="2018-10-03T18:46:40.080" UserId="1293" />
  <row Id="13598" PostId="5106" Score="0" Text="@Buffy, Can you elaborate? I agree that if I'm there in person I should utilize that as much as possible, but I also would like to avoid stalling everyone else's progress to give more one-on-one attention" CreationDate="2018-10-03T18:48:58.533" UserId="5217" />
  <row Id="13599" PostId="5106" Score="1" Text="Search here for &quot;Flip&quot; or &quot;Flipped Classroom&quot;. Do the same at https://academia.stackexchange.com. Use face time only for things that can't be done elsewhere. Pairing, group projects, self teaching, etc. Not lecture, even this sort of at your own speed lecture." CreationDate="2018-10-03T18:53:00.017" UserId="1293" />
  <row Id="13600" PostId="5106" Score="0" Text="Thank you for the recommendation. My reservation to that would be that there is nothing I can do on my part to ensure that people consume any prerequisites I set for the sessions. I can send lectures or other informational content and say that they're necessary for the sessions to be helpful, but my expectation would be that they would still just skim and skip the material or give it only a fragment of their attention" CreationDate="2018-10-03T19:02:30.507" UserId="5217" />
  <row Id="13601" PostId="5106" Score="1" Text="One problem I see with your scheme of letting people work through the material at their own rate (with you present) is that a lot of them will get stuck in different places and have questions. You don't have enough time to get around to all of them in a timely manner, so they will just sit there - stuck - waiting for you to help. There has been research on labs with too few assistants and too many stuck students. I predict the same here." CreationDate="2018-10-03T19:04:15.587" UserId="1293" />
  <row Id="13602" PostId="5106" Score="0" Text="My conception of the session was less of them working through a course with myself present to help, but as a presentation I would lead with brief spurts of interaction that should only take a minute or two to complete. Point taken though" CreationDate="2018-10-03T19:07:25.467" UserId="5217" />
  <row Id="13603" PostId="5106" Score="1" Text="In a flipped classroom you don't need to _guarantee_ that they come prepared other than to have the activities in the room depend on that. With pairing and group work the knowledge can get spread among the students. If someone is &quot;too stuck&quot; point them to the readings. You can also require short written summaries of the readings as a &quot;ticket&quot; to the face sessions. One index card worth of summary is enough." CreationDate="2018-10-03T19:07:34.633" UserId="1293" />
  <row Id="13701" PostId="5110" Score="0" Text="Just tell them that it is caused by **shared mutable state**. The pain of doing this will help you to re-consider your design." CreationDate="2018-10-20T23:49:49.443" UserId="204" />
  <row Id="13608" PostId="5111" Score="0" Text="How would you modify this to deal with the &quot;sometimes&quot; fails for race conditions?" CreationDate="2018-10-04T19:11:04.603" UserId="104" />
  <row Id="13609" PostId="5111" Score="0" Text="@GypsySpellweaver, well, sometimes the bunny does, in fact, do the right thing. And sometimes the turtle is the one who wants a nap." CreationDate="2018-10-04T19:12:57.917" UserId="1293" />
  <row Id="13614" PostId="5111" Score="0" Text="I find the Turtle and Hare comparison really nice as it nicely illustrate that one actor might be “faster” than another one but might take “pauses”. About the Dining Philosophers I would definitely use it to illustrate what a deadlock might be, however I do think that the associated concepts might be a bit difficult to explain to a kid of that age (who would need two forks to eat??? ;) )" CreationDate="2018-10-05T17:57:35.970" UserId="6019" />
  <row Id="13624" PostId="5111" Score="1" Text="@RenaudM., the dining philosophers problem makes more sense if the table is set with _chopsticks_  instead of forks." CreationDate="2018-10-08T18:38:36.293" UserId="1269" />
  <row Id="13717" PostId="5111" Score="1" Text="5 year olds love the stacking hands game, where the players interleave their hands in a stack, then each player when his hand is one the bottom of the stack pulls it out and places it on the top of the stack. The players get faster and faster until there is just crazy slapping as everyone's hands collide. That is a race condition." CreationDate="2018-10-27T02:32:26.940" UserId="1537" />
  <row Id="13611" PostId="5113" Score="1" Text="&quot;Implementing&quot; ArrayList or using the library class ArrayList from Collections?" CreationDate="2018-10-05T10:48:03.327" UserId="1293" />
  <row Id="13638" PostId="5113" Score="0" Text="You can pretty easily do a linked list." CreationDate="2018-10-10T13:17:35.270" UserId="21" />
  <row Id="13639" PostId="5113" Score="0" Text="@ncmathsadist Definitely, but I wanted to introduce generics between array list and linked list, so that we could start off using linked lists with generics. I'm happy with the pair example mentioned below - it went over well in class." CreationDate="2018-10-10T13:49:04.050" UserId="830" />
  <row Id="13612" PostId="5114" Score="0" Text="Pretty close, except that &quot;everyone sitting&quot; is guaranteed to fail here. Instead, have a second &quot;process&quot; remove a chair after the music starts. If the music stops early, everyone sits, otherwise the usual thing. Even this is a bit suspect as one of the two processes (circling, removing) will always fail." CreationDate="2018-10-05T10:58:03.230" UserId="1293" />
  <row Id="13613" PostId="5115" Score="0" Text="Perfect! Thank you! This is a very obvious one. I suppose that's what I get for making slides at night." CreationDate="2018-10-05T11:07:33.473" UserId="830" />
  <row Id="13617" PostId="5116" Score="1" Text="Could you share some more information about the setup that you are rigging yourself into?" CreationDate="2018-10-06T17:44:11.533" UserId="27" />
  <row Id="13619" PostId="5116" Score="1" Text="This sounds like the inverse of a conversation I had a couple of years back. I was demonstrating a hardware solution, and he kept asking what software I was using (it was PowerPoint). Your circumstance calls for a hardware solution." CreationDate="2018-10-07T03:58:43.133" UserId="1537" />
  <row Id="13684" PostId="5116" Score="0" Text="I do this by setting the project as a second monitor as a &quot;second monitor&quot; and extending the desktop, then simply scoot my editor/ide/terminal window over.  Of course, this also means I have to increase the font, etc. but hey, if I can't see it on the screen, neither can my students." CreationDate="2018-10-18T19:57:15.200" UserId="662" />
  <row Id="13616" PostId="5117" Score="1" Text="This would actually work. I would just have to make sure I'll have another screen at the venue. The other reason I need the streaming software is that I wanted to face the audience while I'm typing in my screen. Since typing directly into the projected screen would be awkward and hard." CreationDate="2018-10-06T15:47:04.233" UserId="6029" />
  <row Id="13618" PostId="5117" Score="1" Text="Use a quad video card, one output for your main screen, then two (mirroring each other) for the presentation view. One of the mirrored outputs goes to a monitor facing you, the other goes to the projector. You can do whatever you want with the 4th output." CreationDate="2018-10-07T01:21:12.197" UserId="1537" />
  <row Id="13627" PostId="5122" Score="0" Text="How much support do you get from TAs? In particular, what is the ratio of Student to TA? How long do the students have to complete the project?" CreationDate="2018-10-09T12:58:04.150" UserId="1293" />
  <row Id="13628" PostId="5122" Score="0" Text="This project is considered an exam, so the tas should not help with them. They had five weeks to do the project, considering that the project does not really need anything new from this course but could be done based on what they should have learned the first year." CreationDate="2018-10-09T13:37:56.503" UserId="3908" />
  <row Id="13629" PostId="5122" Score="0" Text="I wasn't asking about how much help the TAs can give. I would like to know the load of the TAs to help me formulate an answer. Based on your comment, is there any way a student can get any questions answered by you or anyone else about the project (other than your permission to coordinate on &quot;theory&quot;)?" CreationDate="2018-10-09T14:17:23.470" UserId="1293" />
  <row Id="13630" PostId="5122" Score="2" Text="Do you have any logs from the autotester? If they all decided to start the project the night before it was due, that's going to end poorly. I find that to be one of the principle sources of low marks for my students. They do not allocate enough time to debug, etc. It may have worked in the past, but now they are expected to write more complicated programs." CreationDate="2018-10-09T15:14:00.680" UserId="1879" />
  <row Id="13632" PostId="5122" Score="3" Text="Have the automated tester and your model solution been well validated? Have you inspected any of the failing submissions by hand to verify that they should fail, and why?" CreationDate="2018-10-09T16:09:59.803" UserId="104" />
  <row Id="13633" PostId="5122" Score="1" Text="Sorry for the delay, I was away for a while. The TA's had instructions not to help with the code. The automated tester accepts successfully all top ten submissions no matter which random seed I tried, and each method call has only one correct answer at all times. I think the problem may have been late starting and then not realizing that the project was not easy as they thought it would be." CreationDate="2018-10-09T20:44:42.533" UserId="3908" />
  <row Id="13636" PostId="5122" Score="0" Text="I have read the problem description carefully. I know how I would solve it with C or Assembly: a big bit array representing the integers from 0 to your specified max. I don't know Java, but apparently C# is similar and I taught that. I do not understand the idea of 'operations', your M parameter. Either the program has consumed and processed all the input or it hasn't. A partially done answer is no answer at all, and if student's algorithms produce different results for values of M insufficient to reach the final result, you can hardly fail them for that. Discard the M parameter and try again." CreationDate="2018-10-09T21:27:22.420" UserId="5349" />
  <row Id="13637" PostId="5122" Score="3" Text="I found the requirement description was difficult to understand - it seemed unnecessarily convoluted and artificial to me. It is possible that the students simply couldn't figure out what was expected, since the final class should have been relatively simple." CreationDate="2018-10-09T23:21:08.277" UserId="1537" />
  <row Id="13640" PostId="5122" Score="1" Text="Did you include any source material about Allen's Interval Algebra? Maybe that was the problem." CreationDate="2018-10-10T22:45:31.827" UserId="5349" />
  <row Id="15703" PostId="5122" Score="0" Text="Does you results mean 72 students received 100 and the rest received 0? If not, what was the distribution of results?" CreationDate="2019-10-16T15:48:46.770" UserId="4301" />
  <row Id="13634" PostId="5123" Score="0" Text="That postmortem is a great idea. I will definitely instruct my TA's to do that in the next week's lab." CreationDate="2018-10-09T20:50:52.910" UserId="3908" />
  <row Id="13635" PostId="5123" Score="0" Text="I saw situations like this in a college course I took in 1984: many students befuddled and unable to develop a working algorithm. We had no automated testing system, and limited access to computer terminals (mainframe environment). As you say, the info about *why* submissions failed is vital to figuring out the OPs problem. Coaching the students in incremental build and test would be valuable." CreationDate="2018-10-09T21:21:59.947" UserId="5349" />
  <row Id="13641" PostId="5123" Score="0" Text="One other potential issue I would add to this answer, somewhat related to the five week issue, is that they just can't fathom the steps necessary to break this problem down. I see this all the time in my CS1 and CS2 courses, even for less complex problems. I would either draw out a suggested timeline (e.g., &quot;complete X method by Friday, Y method by Monday&quot;), or have a check in at some point in time. Depending on the number of TAs you have, you could set up gitlab or something similar for students to check in their code periodically, and the TAs to assess whether they are making progress." CreationDate="2018-10-11T15:15:11.173" UserId="830" />
  <row Id="13642" PostId="5127" Score="1" Text="One of my favorite examples to show my intro students regarding string literals vs expressions is something like &quot;12/12/10&quot; could be representative of the date Dec. 12, 2010, vs 12/12/10 is going to be 0.1." CreationDate="2018-10-12T10:02:19.200" UserId="830" />
  <row Id="13650" PostId="5129" Score="0" Text="This is an incredibly simple and very nice answer. Thank you!" CreationDate="2018-10-14T07:52:40.077" UserId="150" />
  <row Id="13651" PostId="5129" Score="0" Text="@ItamarG3 It also is fun to see how much your students really have thought about the zombie apocalypse... :)" CreationDate="2018-10-14T18:46:18.577" UserId="830" />
  <row Id="13644" PostId="5130" Score="0" Text="This is a really interesting perspective, and something I have never heard in years of schooling. (which perhaps says something about the schooling) I always heard the oft-touted &quot;superclasses define commonalities, subclasses define differences&quot; model. I'm going to have to sit on this and ponder it. If I'm understanding this correctly, your perspective suggests that a non-abstract class should never extend another non-abstract class. Is this correct? Do you have any readings for me to pursue this further?" CreationDate="2018-10-13T22:19:53.980" UserId="830" />
  <row Id="13645" PostId="5130" Score="1" Text="Not exactly. You can extend a class without adding to it's public interface. You can add all of the private methods you like and you can change the behavior - to (hopefully) more specific behavior. So, a Snake can _bite_. A RattleSnake can also _bite_ but it is more serious." CreationDate="2018-10-13T22:22:41.543" UserId="1293" />
  <row Id="13646" PostId="5130" Score="1" Text="Think about whether you gain anything with your hierarchy over having Vehicle and Bicycle completely separate classes. Very little, other than typing (hitting keys), I think. And you avoid most of the traps. It isn't typing (hitting keys) that makes programming hard." CreationDate="2018-10-13T22:25:10.710" UserId="1293" />
  <row Id="13647" PostId="5130" Score="0" Text="A horn is a decorator, as is a signal light, or an arm signal." CreationDate="2018-10-13T22:34:00.557" UserId="1537" />
  <row Id="13648" PostId="5130" Score="0" Text="Well, @pojo-guy, maybe not exactly, but something like that. Use delegation, not inheritance, for such things. But yes, see the Decorator Design Pattern." CreationDate="2018-10-13T22:36:36.560" UserId="1293" />
  <row Id="13649" PostId="5130" Score="0" Text="@Buffy Thank you both for the info. I'm going to ponder it, and I might be back here with more questions." CreationDate="2018-10-13T22:50:58.173" UserId="830" />
  <row Id="13653" PostId="5130" Score="0" Text="@Buffy A rattlesnake can also *rattle*, though." CreationDate="2018-10-15T12:54:46.687" UserId="27" />
  <row Id="13654" PostId="5130" Score="0" Text="@BenI. and if you add that in a subclass then you have a bad design. You need to, then, make ad-hoc decisions about what you have - the very thing OO is designed to make unnecessary. Rethink your hierarchy. A sloppy design will pay you dividends later - in pain." CreationDate="2018-10-15T13:04:45.757" UserId="1293" />
  <row Id="13655" PostId="5130" Score="0" Text="A remarkably bad design Point has a subclass Circle (just add a radius), which has a subclass Cylinder (just add a height). So now, every  cylinder is just a point. If you have a variable w/ type Point, what can you do with it? BTW, in at least one book, this is treated as GOOD design. If you need to know the most specific type of an object, then the hierarchy does you no good at all. It is just noise that you may as well omit. The system can no longer help you and you need it all in your head at every statement." CreationDate="2018-10-15T13:09:32.180" UserId="1293" />
  <row Id="13656" PostId="5130" Score="0" Text="@BenI., maybe think of it this way. Is a snake that _doesn't_ rattle, a more general kind of snake or just a _different_ kind of snake? If your snake hierarchy needs warning sounds add them at the top. Now you can distinguish by behavior, not by interface." CreationDate="2018-10-15T13:59:02.430" UserId="1293" />
  <row Id="13658" PostId="5130" Score="1" Text="It is unfortunate that all the common examples of polymorphism - Animal, Vehicle, Shape, etc. - are flawed. Maybe someone could collect up some good examples instead? There used to be a Question here about that." CreationDate="2018-10-15T21:04:36.213" UserId="5349" />
  <row Id="13659" PostId="5130" Score="0" Text="@ScottRowe, most of those can be made to work for interface polymorphism, but not for concrete (class) polymorphism. Note that the typical hierarchy of the animal kingdom is all abstract concepts. Mammal can't be instantiated, nor can Vertebrate. Only the &quot;leaf&quot; nodes represent actual animals." CreationDate="2018-10-15T21:08:07.133" UserId="1293" />
  <row Id="13662" PostId="5130" Score="0" Text="Actually, there is no need to start at gates and low level stuff. But if you teach OO really really badly your students won't advance very far. My experience is quite long and deep. Note that people teaching functional programming are very unlikely to start at bits and bytes. But in general, if you want to teach something well, learn it _and_ its pedagogy. Don't just try to force fit it." CreationDate="2018-10-15T23:55:44.587" UserId="1293" />
  <row Id="13657" PostId="5133" Score="1" Text="These are all great points, and after some discussions with students today, I think the compile time/run time point is the biggest issue, as my slides are very clear about producing a good mental model on the other points (i.e., a variable of type X references an object of type Y where Y extends X), and _most_ students seem to get that. Eclipse is the IDE of choice starting in CS2, but they don't seem to quite grok what the computer knows when. I'll have to see about squeezing in a longer discussion on that, probably next semester." CreationDate="2018-10-15T17:41:28.590" UserId="830" />
  <row Id="13742" PostId="5133" Score="0" Text="I personally find the term &quot;message&quot; to be both unnecessary and misleading. It doesn't align with my perception of real life at all. I don't send messages to my knife when I want to slice bread. I execute some action on the knife and bread. For me &quot;method call&quot; seems to be closer both to underlying logic and to real life analogy." CreationDate="2018-10-29T21:15:32.310" UserId="4884" />
  <row Id="13743" PostId="5133" Score="0" Text="@Frax, actually you are quite mistaken. I'll add an annex to my answer to explain why." CreationDate="2018-10-30T00:10:11.013" UserId="1293" />
  <row Id="13747" PostId="5133" Score="0" Text="@Frax https://softwareengineering.stackexchange.com/q/46642/275652" CreationDate="2018-10-30T10:32:23.120" UserId="27" />
  <row Id="13748" PostId="5133" Score="0" Text="I don't think I'm mistaken. I know very well how Java methods work. Yet I very much prefer to think about them as abstracted switch statements. The fact is, that in vast majority of cases you know very well what is going to happen, and all that &quot;object is in control&quot; OO-speak is kind of moot. Actually, my Object Programming course presented switch statements and inheritance side-by-side, simply as different solutions to the same problem, with different trade-offs (cheap new methods versus cheap new behaviors)." CreationDate="2018-10-30T18:15:05.660" UserId="4884" />
  <row Id="13675" PostId="5134" Score="0" Text="About #5: $0{\text{ }}log_{2} = \infty$, while $0=1{\text{ }}log_{2}$, so there ends up being some kind of special test for the empty square value or the stored value of zero. The conditionals around that problem makes it likely that choosing color based on cell value would be just as fast, and less error-prone." CreationDate="2018-10-18T01:05:27.400" UserId="104" />
  <row Id="13683" PostId="5134" Score="0" Text="Yes your are correct, the empty cell being 0 is a special case, but as an index works very nicely.  I would hope that the students would see that `array[cellValue]` is cleaner than a `switch` on the the `cellValue` with all the possible cases (`2 4 8 15 ...`). Perhaps you are correct that the students would be more comfortable with the `switch` approach. I had thought of this an a way to demonstrate allocating an `arrray` of constant values." CreationDate="2018-10-18T18:45:47.903" UserId="4301" />
  <row Id="13681" PostId="5135" Score="0" Text="I think that answers to this question would be more useful if you could be explicit about *why* you have this question, or equivalently what the *context* to the question is. Are you, for example, comparing two university courses to decide which to apply for?" CreationDate="2018-10-18T15:29:44.037" UserId="1219" />
  <row Id="13682" PostId="5135" Score="0" Text="@PeterTaylor i am willing to save my valuable time :)" CreationDate="2018-10-18T15:57:57.090" UserId="6062" />
  <row Id="13709" PostId="5135" Score="0" Text="In a nutshell: Computer engineers design computing machinery. Computer scientists study the possibilities of what can be accomplished by using computing machinery." CreationDate="2018-10-24T20:55:53.693" UserId="1269" />
  <row Id="13676" PostId="5137" Score="0" Text="I think this is a fine exercise to use in that it will avoid any preconceived notions of how the `object` should act based on its name. I does, indeed, form a good touch-point if used. Unfortunately, for me, it doesn't seem to directly address the OP's current problem. It can probably help to avoid the problem in the next term however, so it does have value." CreationDate="2018-10-18T01:39:18.823" UserId="104" />
  <row Id="13677" PostId="5137" Score="0" Text="@GypsySpellweaver I respectfully disagree, I think it's immediately practical. OP already acknowledged that they need to reteach at this point, which is why I went for a clarifying nuts and bolts example." CreationDate="2018-10-18T02:28:55.817" UserId="27" />
  <row Id="14179" PostId="5137" Score="1" Text="@BenI. This example is a good point. I did used to use the common example of an abstract Shape class that has various concrete subclasses (e.g., Oval, Rectangle), and then a data structure that contains Shape objects and prints out the name of the shape, area, etc. It does give some good intuition about how it all works." CreationDate="2019-01-15T19:22:09.540" UserId="830" />
  <row Id="13704" PostId="5138" Score="0" Text="I think having 4 public `move` methods is cleaner than using a single one with a string parameter. At least use an `Enum`!" CreationDate="2018-10-24T01:53:31.540" UserId="5963" />
  <row Id="13706" PostId="5138" Score="0" Text="@SolomonUcko I don't agree about the cleanliness in the public facing methods, though I am referencing private methods, so we're not far off there. I absolutely agree about the Enum. Thanks for pointing that out! Fixed that, and I also noticed when I went in that my code wasn't formatting.  Apparently we now need 8 spaces to start a code block??  In any case, that's fixed now, too." CreationDate="2018-10-24T12:45:12.387" UserId="27" />
  <row Id="13707" PostId="5138" Score="0" Text="I'd say that using an `Enum` parameter is better than using multiple methods, which is better than using a `String`. Sorry for the tone of my previous comment, I was in a bit of a hurry." CreationDate="2018-10-24T13:26:30.357" UserId="5963" />
  <row Id="13669" PostId="5141" Score="0" Text="Thanks Buffy, The rotation solution is particularly inefficient. However, in this case the problem size is small and is a don't care because it need only be fast enough for the human player not to be kept waiting. . Premature optimization is rarely a good thing. - Fritz" CreationDate="2018-10-17T19:01:15.297" UserId="4301" />
  <row Id="13671" PostId="5141" Score="0" Text="I actually encourage students to look on line for help and/or solutions. I  ask only that they cite the link where they found the code. And, in doing so, that they  assume responsibility for the code. Tough luck if it doesn't work. I also tend to introduce some structure not found in the online solutions so that students must, at least, adapt what they find to the requirements." CreationDate="2018-10-17T21:01:08.090" UserId="4301" />
  <row Id="13674" PostId="5141" Score="0" Text="Actually, I wasn't optimizing. I just think that brute force assignment is the _simplest_ solution here." CreationDate="2018-10-17T22:44:43.500" UserId="1293" />
  <row Id="13686" PostId="5143" Score="1" Text="It depends how much she knows about statistics? If she is basic in statistic you could describe the importance of arrays by describing how you could store the values of a probability distribution function numerically in an array or something similar to this example. But if she knows about advanced statistical analysis (e.g. machine learning) you could give her some more advanced examples." CreationDate="2018-10-18T22:10:27.057" UserDisplayName="Alone Programmer" />
  <row Id="13688" PostId="5143" Score="0" Text="Oh I Didn't know about CSEducators, I will try to post there too.&#xA;&#xA;@AloneProgrammer It's a little more complicated, the student is in a 2 year formation to integrate a 3 year formation ( French academic system). After this 5 cumulated years she will have the equivalent of a master degree. So at this moment, she only knows about basic statistics" CreationDate="2018-10-19T06:45:10.680" UserDisplayName="Med" />
  <row Id="13689" PostId="5143" Score="1" Text="Surely she must understand the value of being able to store a data series, and calculate its properties? Something as simple as calculating the mean might be a useful first step." CreationDate="2018-10-19T17:20:59.307" UserId="6074" />
  <row Id="13692" PostId="5143" Score="0" Text="Maybe it's too simple and she need something more difficult, to see how computing is a good way to solve the problem. That's what I'm wondering because I taugh  the basics ( find max/min, count how many times the value 'x' is in the list, how many elements verify a condition, etc...) in order to make her more at ease manipulating datas. Maybe it's because I didn't link it to some sort of mathematical problem  that she can't see about the use of lists/arrays..." CreationDate="2018-10-19T22:36:50.817" UserId="6077" />
  <row Id="13708" PostId="5143" Score="0" Text="Re, &quot;...there’s somewhere an array (or an object) which stores your username, password,...&quot; IMO, there's quite a difference between how you use an array (members are addressed by numeric index, all have the same type), and an object (members accessed by name, non-homogeneous types.)" CreationDate="2018-10-24T20:52:27.887" UserId="1269" />
  <row Id="13710" PostId="5143" Score="0" Text="A much better example of an array---one with which any statistician should be intimately familiar---would be a range of cells in a spreadsheet." CreationDate="2018-10-24T20:59:30.270" UserId="1269" />
  <row Id="13691" PostId="5144" Score="0" Text="Welcome to CSEd! That's a nice first post :)" CreationDate="2018-10-19T19:07:21.677" UserId="27" />
  <row Id="13693" PostId="5144" Score="0" Text="Good point about coding experience will help her find a job. It's true, but I would like to show her that's it a real plus for her everyday life at her futur job." CreationDate="2018-10-19T22:50:54.093" UserId="6077" />
  <row Id="13694" PostId="5145" Score="0" Text="She is at an age where she can't really see how important it is to have general knowledge." CreationDate="2018-10-19T22:53:16.497" UserId="6077" />
  <row Id="13696" PostId="5145" Score="0" Text="I would think second year university is old enough, actually. Perhaps she is too focused, generally." CreationDate="2018-10-19T22:55:26.110" UserId="1293" />
  <row Id="13697" PostId="5145" Score="0" Text="It's french system known as CPGE ( Classes Préparatoires aux Grandes Ecoles) with a lot of maths and physics, a few computer science, and a LOT of pressure. As computer science is not seen as a prerequisite or important subject for her, that maybe why she can't see why I focus so much on making her being at ease with lists/arrays" CreationDate="2018-10-19T22:59:02.753" UserId="6077" />
  <row Id="13695" PostId="5146" Score="0" Text="Maybe in the next lessons, as we have finished to learn lists basic, nex step is to take a big problem and split it in simplier problems which she know how to solve, divide and conquer ;)&#xA;I plan to make her code a little tic tac toe game which can be a more fun way to manipulate lists." CreationDate="2018-10-19T22:54:46.813" UserId="6077" />
  <row Id="13698" PostId="5147" Score="0" Text="Very well thought out answer, thanks. It sounds like it might raise motivation in general, but lagging students would have even more 'evidence' that the cause is lost? You also noted my point that I don't want people to find ways to game the system. Learning is not a game." CreationDate="2018-10-20T00:12:37.227" UserId="5349" />
  <row Id="13705" PostId="5147" Score="1" Text="Students already do their best to game the education system. In a gamification system, maybe it's more.in the open" CreationDate="2018-10-24T03:37:37.413" UserId="695" />
  <row Id="13702" PostId="5150" Score="0" Text="Simplicity itself." CreationDate="2018-10-23T01:01:16.057" UserId="104" />
  <row Id="13703" PostId="5152" Score="0" Text="I will try this" CreationDate="2018-10-23T22:11:27.447" UserId="6077" />
  <row Id="13716" PostId="5156" Score="0" Text="Hi, IramShah, welcome to CSEd!  I'm afraid that this question was closed because it's off-topic for our site, which focuses on how to teach effectively within a computer science classroom.  I see that you already received a pretty good answer as well, so hopefully you have gotten the help that you need." CreationDate="2018-10-27T02:26:49.017" UserId="27" />
  <row Id="13719" PostId="5156" Score="0" Text="Yes I got the answer actually am confused or want to clear about topic." CreationDate="2018-10-27T03:37:17.417" UserId="6071" />
  <row Id="13723" PostId="5157" Score="0" Text="Something that reads from stdin and writes to stdout (I am hopelessly dating myself here) is a good exercise. Next thing you know, they'll be dealing with stream processing of big data." CreationDate="2018-10-28T01:10:39.410" UserId="5349" />
  <row Id="13729" PostId="5157" Score="0" Text="@ScottRowe Hmm, yes. In fact they will eventually be dealing with IoT concepts and aggregating data from multiple sensor &quot;things&quot;." CreationDate="2018-10-28T19:11:21.160" UserId="6112" />
  <row Id="13731" PostId="5157" Score="0" Text="And you didn't even need to throw &quot;the book&quot; (Structure and Interpretation of Computer Programs) at them!" CreationDate="2018-10-28T21:57:09.093" UserId="5349" />
  <row Id="17188" PostId="5157" Score="0" Text="If you want to make shell-script-y (a la @ScottRowe) &#xA; **PLUS** functional code you could use/assune a tool like google-fire https://github.com/google/python-fire/blob/master/docs/guide.md . (not that I recommend it!! Just sayin'...  )" CreationDate="2020-10-23T04:31:29.037" UserId="8837" />
  <row Id="13715" PostId="5159" Score="0" Text="Exactly, I use pytest though, it's simpler. pytest errors out if there is unexpected output when importing the module. The  problem is not in detecting their mistakes, those are pretty obvious, the real problem is that they persistently don't get it!" CreationDate="2018-10-27T01:18:23.530" UserId="6112" />
  <row Id="13713" PostId="5160" Score="0" Text="In some languages you can index of lots of thing, including a range of negatives or an enumeration type." CreationDate="2018-10-27T00:44:48.387" UserId="1293" />
  <row Id="13718" PostId="5160" Score="0" Text="Okk but I try to gave negavtive index in c++ then its show error.is this an other way to gave negative index ??" CreationDate="2018-10-27T03:35:19.307" UserId="6071" />
  <row Id="13721" PostId="5160" Score="0" Text="What are you trying to achieve with the negative index?" CreationDate="2018-10-27T18:43:18.683" UserId="6109" />
  <row Id="13722" PostId="5160" Score="0" Text="I am a student and all teachers tell us only about positive index in array. So there is a question in my mind that is it possible to gave negative index if yes the. How is it possible" CreationDate="2018-10-27T20:21:55.863" UserId="6071" />
  <row Id="13724" PostId="5160" Score="0" Text="In COBOL, array indexes start at 1. Then the compiler, under the covers, converts the index to a zero based offset from a base pointer." CreationDate="2018-10-28T02:17:21.920" UserId="1537" />
  <row Id="13725" PostId="5160" Score="0" Text="So its mean if I want to gave negative index number that start from -1 then firstly I should set compiler as I want ??" CreationDate="2018-10-28T03:46:16.313" UserId="6071" />
  <row Id="13726" PostId="5160" Score="0" Text="it means it's up to the language to decide what the index number really means. E.g. in python, lists can have an index like my_list[-1] - which is the last element in the list." CreationDate="2018-10-28T12:42:51.800" UserId="6109" />
  <row Id="13727" PostId="5160" Score="2" Text="Hi @IramShah, welcome to [cseducators.se]! I'm afraid that I had to close this question, as it is off-topic for the site. CSEd is mostly for teachers, and it is about how to teach CS concepts. So a question about classroom practice would be topical here. However, I see that you already received a good answer, so I hope that you also got the help that you need!" CreationDate="2018-10-28T18:22:51.460" UserId="27" />
  <row Id="13730" PostId="5160" Score="0" Text="Ok............." CreationDate="2018-10-28T19:20:50.457" UserId="6071" />
  <row Id="13753" PostId="5160" Score="0" Text="“Everything has to start somewhere”: if it starts at zero, then it can not start at a negative number, in the same way that it can not start at 42 (because it starts at zero)." CreationDate="2018-10-31T17:40:27.260" UserId="204" />
  <row Id="13738" PostId="5161" Score="1" Text="Re, &quot;...this makes address calculation very easy...&quot; That is a reason why arrays can be more efficiently implemented if the range of allowed indices is contiguous, but it does not explain why that range should not include any negative numbers." CreationDate="2018-10-29T19:51:28.357" UserId="1269" />
  <row Id="13739" PostId="5161" Score="2" Text="Re, &quot;...you might destroy other variable's content.&quot;  That is a reason why you should not use out-of-bounds array indices, but it does not explain why negative numbers should be out-of-bounds." CreationDate="2018-10-29T19:51:39.343" UserId="1269" />
  <row Id="13740" PostId="5161" Score="1" Text="There is no _strong_ reason why negative numbers typically are not allowed.  Probably the best reason is, Many languages, for simplicity's sake, only allow the programmer to specify the size of an array, rather than allowing the programmer to specify a starting and ending index. If you want to choose one starting index that will make everybody happy, there are not very many reasonable choices.  Some programmers will grumble if you choose 0.  Some will grumble if you choose 1.  _Everybody_ will grumble (and, nobody will use your language) if you choose any other number." CreationDate="2018-10-29T20:01:12.527" UserId="1269" />
  <row Id="13749" PostId="5161" Score="2" Text="Consider &quot;The principle of least surprise&quot;. Or, minimum grumbling. Maybe negative indices would refer to imaginary data? Probably appropriate for quantum computing." CreationDate="2018-10-31T12:14:08.547" UserId="5349" />
  <row Id="13714" PostId="5162" Score="2" Text="I've tried something like that but without the physical object. Scenario: we're both working late in the electronics lab and I forgot my calculator. I call out to you, Hey Fred, what's the square root of 4? You return the result of the computation, It's 2! I called the function by name, Fred, passed a value and waited for a returned value. The function didn't care what problem I was solving, and I the caller didn't care how the answer was computed." CreationDate="2018-10-27T01:13:27.627" UserId="6112" />
  <row Id="14531" PostId="5162" Score="0" Text="That's a great suggestion @Buffy!  Thanks for sharing that answer!" CreationDate="2019-03-18T16:20:15.037" UserId="4689" />
  <row Id="13720" PostId="5163" Score="0" Text="I am sure to draw fire from the community by talking about *Software* in terms of real-world things, instead of explaining it as a closed, hermetic universe entirely consisting of concepts unrelated to anything the students have encountered before." CreationDate="2018-10-27T14:39:01.587" UserId="5349" />
  <row Id="13728" PostId="5163" Score="1" Text="Bingo! And no, you won't get flak from me for mixing electronics and software. I deal in embedded systems and a system diagram can be any of pure hardware, pure software or a mix (e.g. state machine, FPGA)." CreationDate="2018-10-28T18:59:34.863" UserId="6112" />
  <row Id="13887" PostId="5165" Score="0" Text="Simple, but exactly what i was looking for" CreationDate="2018-11-12T09:16:04.400" UserId="6077" />
  <row Id="13736" PostId="5168" Score="1" Text="That's a fascinating approach! Is this your first time using it?  What are the ages of the students?" CreationDate="2018-10-29T15:37:21.060" UserId="27" />
  <row Id="13737" PostId="5168" Score="1" Text="@BenI. I'm doing this for seven years now with good success. This year one colleague of mine switched from java to the same concept because of the good results. &#xA;The students are first semester students in Germany at a university of applied science, many without little to no background in cs and no programming experience (yes, this is Germany in 2018 :-( )." CreationDate="2018-10-29T15:39:38.433" UserId="6109" />
  <row Id="13751" PostId="5168" Score="0" Text="Wow--you _are_ ambitious :)  Teaching any new developer C seems like a recipe for, well, bad outcomes.  :)  Glad to see that my intuition seems to be quite wrong." CreationDate="2018-10-31T15:11:26.663" UserId="4689" />
  <row Id="13752" PostId="5168" Score="3" Text="@OnorioCatenacci The good thing about C is, that it uses nearly no magic behind the scenes and you can understand the behaviour once you understood how a computer works. But you have to give the students time to learn, you should not hurry." CreationDate="2018-10-31T17:02:20.147" UserId="6109" />
  <row Id="13750" PostId="5170" Score="0" Text="Thanks for the feedback but that's not really what I'm asking for." CreationDate="2018-10-31T15:10:22.953" UserId="4689" />
  <row Id="13768" PostId="5175" Score="0" Text="I think I must have missed something. How would this help the students understand why a Bicycle *can* fit into a Vehicle variable, but String cannot?" CreationDate="2018-11-03T15:45:19.967" UserId="27" />
  <row Id="13754" PostId="5176" Score="3" Text="Excellent first question here.  Welcome to [cseducators.se]!" CreationDate="2018-11-02T13:49:08.900" UserId="27" />
  <row Id="13755" PostId="5176" Score="1" Text="number is not the foundation of all of the other stuff. It is just on interpretation of a sequence of bits. It is no more real than any other. Therefore consider starting at some other place." CreationDate="2018-11-02T16:52:48.683" UserId="204" />
  <row Id="13756" PostId="5176" Score="0" Text="This may be of use https://csunplugged.org/en/topics/binary-numbers/ or https://classic.csunplugged.org/binary-numbers/" CreationDate="2018-11-02T16:54:21.990" UserId="204" />
  <row Id="13757" PostId="5176" Score="0" Text="What other number bases do we use, in everyday life?" CreationDate="2018-11-02T16:55:16.420" UserId="204" />
  <row Id="13762" PostId="5176" Score="7" Text="I'm not convinced that understanding base two numbers is a &quot;basic 21st century skill.&quot;  It is an _essential_ thing to know if you want to understand how electronic circuits can perform mathematical and logical functions, but you can write an awful lot of computer software these days without even having a strong understanding of base 10, let alone other place-value number systems." CreationDate="2018-11-02T21:34:06.707" UserId="1269" />
  <row Id="13763" PostId="5176" Score="0" Text="Different symbols may work well, but it also might help to use a verbose notation like `0b11` = `0d3`. By making use of prefixes it could make it easier to grasp that those are the same value just written in different ways." CreationDate="2018-11-03T02:16:08.337" UserId="6131" />
  <row Id="13764" PostId="5176" Score="4" Text="If you talk about 11 and 11 with grownups who are math literate, there will still be confusion. You need an indication of the base if you're mixing bases: a little subscript *b* or *d* or something: $11_b$ versus $11_d$." CreationDate="2018-11-03T03:55:49.127" UserId="1748" />
  <row Id="13770" PostId="5176" Score="0" Text="[Vaguely relevant joke](https://m.imgur.com/II5W6Pl)" CreationDate="2018-11-04T00:38:04.973" UserId="1607" />
  <row Id="13771" PostId="5176" Score="1" Text="@ctrl-alt-delor Sure, it's true that all computers just work on some sort of signals that represent some state, and there is no inherent meaning. I can also say that computers don't need electricity, because it's possible to build a computer that doesn't use electricity. Apart from such pedantry though, a common and useful 'baseline abstraction' is the one where bits are aggregated to 8-bit bytes, where strings are sequences of encoded numbers and bitmaps are arrays or matrices of 'pixels', each of which is 3 or 4 numbers. But that wasn't what my question was about." CreationDate="2018-11-04T12:23:25.363" UserId="6129" />
  <row Id="13772" PostId="5176" Score="1" Text="@Solomon Slow The point is not to give a 'programming' class; in fact, the explicit goal is for it to *not* be a programming class. We have plenty of people who know how to write software without understanding numbers, and some of that software is even useful; but in primary education, we're concerned with teaching children foundations and concepts, not with whipping them into CRUD app slingers asap. But again, this is a wholly different discussion, and one that is as old as CS departments themselves are, for that matter." CreationDate="2018-11-04T12:26:14.880" UserId="6129" />
  <row Id="13773" PostId="5176" Score="0" Text="@Kaz fair enough, and I think I should indeed do so when talking about this with adults. Thanks, I hadn't really internalized that this would make a difference." CreationDate="2018-11-04T12:27:28.243" UserId="6129" />
  <row Id="13780" PostId="5176" Score="4" Text="Additional thought: how many working programmers need to write 'sort' algorithms today? Yet one of the most basic 'CS unplugged' (i..e, without using any electronics) exercises is to get a group to devise an algorithm to sort that group from shortest to tallest. It's not about job skills, it's about conceptual understandings how things work. Another: how often do people today open up their computers? Yet letting them unscrew a case and look inside is very illuminating, when you can point to various components that together make up a von Neumann architecture (even if you never use that term)." CreationDate="2018-11-04T12:42:51.733" UserId="6129" />
  <row Id="13784" PostId="5176" Score="0" Text="@Roel algorithms are important (even if you never implement a sort). Other ways to see the bits (not as numbers), is fundamental (not implementation). See work of Ada of Lovelace for examples. Bits can represent images, audio, text …, and you don't have to go through number to explain it. See also Euclid, for an example of an explanation of geometry without reference to number. (Numbers are over used in the teaching of maths in schools.)" CreationDate="2018-11-04T12:59:26.247" UserId="204" />
  <row Id="13790" PostId="5176" Score="0" Text="You might find inspiration from &quot;[exploding dots](https://www.explodingdots.org/)&quot;, whose lower levels are suitable for fairly young students. Briefly, a row of boxes with 0 or 1 dot in them, and when two or more dots are in a box, they &quot;explode&quot; for the carried bit." CreationDate="2018-11-05T01:15:28.813" UserId="6147" />
  <row Id="13758" PostId="5177" Score="2" Text="I always wonder what number-base should the subscripts be written in." CreationDate="2018-11-02T16:56:33.340" UserId="204" />
  <row Id="13765" PostId="5177" Score="1" Text="The subscripts shouldn't be numeric. They should be *b* and *d*. Binary and decimal.  Or else the word $1011_\text{two}$, $123_\text{ten}$.  Of course, if they are numeric, they must use some common understood base (like ten); if they use the indicated number's **own** base, it will always uselessly be &quot;10&quot;." CreationDate="2018-11-03T03:59:07.190" UserId="1748" />
  <row Id="13767" PostId="5177" Score="1" Text="@kaz if the preferred system is a single letter, how would you deal with duodecimal? I could accept using the full word, but there is no advantage there to the digits, as the full word is also in decimal." CreationDate="2018-11-03T15:38:11.333" UserId="27" />
  <row Id="13778" PostId="5177" Score="2" Text="I wasn't sure about whether this would be suitable for this age either, but I'm working off a curriculum set by the Dutch association for primary education who put this material with this age bracket, so I'm just going with it. The more I get into it though, the more I start to see how this is basically a launching pad for tying together other things - like how do you represent 'strings' when all you have to work with are numbers (and base 2 numbers for that matter), or even higher level concepts like 'video' or anything else that can be represented by computers, really." CreationDate="2018-11-04T12:39:47.377" UserId="6129" />
  <row Id="13793" PostId="5177" Score="0" Text="@Roel That representation issue was a massive elephant in the room to me for a very long time, well past the point that I was writing commercial code. You should work it into a new question..." CreationDate="2018-11-05T10:27:41.133" UserId="41" />
  <row Id="13797" PostId="5177" Score="0" Text="@Ben I. I simply wouldn't deal with duodecimal; I'm not aware of it being widely used. I mean, of course kids have to learn about arbitrary bases, but maybe at the stage where they are confused by the interpretation of digits, the common ones used in computing are good enough." CreationDate="2018-11-05T15:21:27.363" UserId="1748" />
  <row Id="13799" PostId="5177" Score="0" Text="^  And of course sexagesimal, ubiquitous in time representation." CreationDate="2018-11-05T15:27:31.777" UserId="1748" />
  <row Id="13775" PostId="5178" Score="1" Text="My children are 5 and 7, so they will be my guinea pigs :) Part of the challenge is that this is for a Montessori school with so-called 'vertical groups', i.e. children of ages 6-8 are in one classroom (so are children 4-5, and 9-11). So I might need to differentiate the material a bit for various sub-groups. I don't quite understand what you mean by 'tens frames', can you elaborate?" CreationDate="2018-11-04T12:31:45.323" UserId="6129" />
  <row Id="13785" PostId="5178" Score="0" Text="Tens frames are size 10 grids (usually $2\times 5$) which the student fills in to visualize counting up to 10.  The following PDF is a good description and has a link to youtube which is even more thorough: https://www.ru.ac.za/media/rhodesuniversity/content/sanc/documents/SANC%2010-frames%20reading.pdf" CreationDate="2018-11-04T12:59:41.790" UserId="1879" />
  <row Id="13786" PostId="5178" Score="1" Text="Oh I see, it's an interesting concept, and one I think would adapt well to counting in various bases. I will talk about this with the teachers, see how it fits within the overall pedagogical math framework they use; I don't want to get in the way of how they teach basic counting, of course. Thanks!" CreationDate="2018-11-04T13:41:00.187" UserId="6129" />
  <row Id="13774" PostId="5179" Score="2" Text="Thanks, yes this seems like a good way to go in terms of giving someone an algorithm to do conversions. I'm not convinced though that it's a clear way to explain the concept of there being different number bases at all, since I would still be talking in terms of 'count out 6' or 'count out 13'. But still, I am going to try to work this into my preparation." CreationDate="2018-11-04T12:29:15.207" UserId="6129" />
  <row Id="13776" PostId="5180" Score="0" Text="I'm working off a curriculum, proposed by what is essentially 'the Dutch association for primary education', and they have an exercise in making bracelets. I was a bit hesitant about that though, representing essentially 'something' and 'nothing' with two color, but when I think about it, it's no worse than using the symbols I described. So in your experience, children were able to make the link between the concept of an 'on bit' and 'off bit' and the colors quite readily? 9th-12th grade, that is ages 8-11, right?" CreationDate="2018-11-04T12:36:01.723" UserId="6129" />
  <row Id="13779" PostId="5180" Score="1" Text="9-12th is students 14-18 years old. The activity came from CSUnplugged, and was meant for younger students, but worked pretty well with the older students too." CreationDate="2018-11-04T12:40:17.280" UserId="30" />
  <row Id="13807" PostId="5180" Score="0" Text="I've made bead necklaces using Morse code. It was easy to read them, just sound it out in my head." CreationDate="2018-11-05T20:59:04.647" UserId="5349" />
  <row Id="13781" PostId="5181" Score="1" Text="Actually, this is at a Montessori school. I'm working with a few of the teachers who want to incorporate some of this into their curriculum, although me, I'm just a dad who is doing one or two short introduction sessions, as a way to explore where to go from there. Montessori actually has a system with beads (and 'sticks' which are 10 beads, and 'plates' which are 10 sticks) to teach about the importance of the place of a digit in a number. I'm hoping to find a way to tie in with that." CreationDate="2018-11-04T12:47:08.847" UserId="6129" />
  <row Id="13783" PostId="5182" Score="2" Text="That is a really cool toy, I now have to order this :) Thanks." CreationDate="2018-11-04T12:49:56.753" UserId="6129" />
  <row Id="13788" PostId="5182" Score="1" Text="By the way, &quot;rami&quot; is Italian for &quot;branches&quot;" CreationDate="2018-11-04T18:52:32.140" UserId="3842" />
  <row Id="13800" PostId="5183" Score="2" Text="Interestingly, tertiary computers *were* built. They *did have* advantages, but the problem was that because of the way they were built, using the exact same hardware and removing a piece gave a quaternary computer...aka binary computer with double the bit resolution." CreationDate="2018-11-05T15:42:00.563" UserId="1244" />
  <row Id="13813" PostId="5184" Score="0" Text="I see that doesn't have quizzes, but I could easily do those myself based on the book content." CreationDate="2018-11-06T09:29:03.767" UserId="6090" />
  <row Id="13789" PostId="5185" Score="0" Text="It looks like you chose torches out of 'em all... I think you're going to be very responsible in front of kids. :-P" CreationDate="2018-11-04T21:25:52.937" UserId="5486" />
  <row Id="13795" PostId="5185" Score="0" Text="@EKons Lol I haven't ever taught the primary school kids but LEDs are safe ;)" CreationDate="2018-11-05T14:48:37.637" UserId="2537" />
  <row Id="13796" PostId="5185" Score="0" Text="No, the joke is that I meant real torches, i.e. fire-powered..." CreationDate="2018-11-05T15:00:16.870" UserId="5486" />
  <row Id="13811" PostId="5185" Score="0" Text="@EKons, in British English, &quot;torch&quot; simply means &quot;flashlight.&quot;" CreationDate="2018-11-05T23:26:13.297" UserId="1103" />
  <row Id="13812" PostId="5185" Score="0" Text="@EKons Yeah I did get you there. Reminds me of a student who ignited fire crackers in evening school back in my college days" CreationDate="2018-11-06T03:46:57.410" UserId="2537" />
  <row Id="17484" PostId="5188" Score="0" Text="Now that I have unmarked this as spam, it's worth noting that this link appears to have gone dead.  Would you mind writing in a simple description?" CreationDate="2021-01-07T02:57:10.653" UserId="27" />
  <row Id="17502" PostId="5188" Score="0" Text="thanks for the note, I updated the link." CreationDate="2021-01-10T21:09:54.773" UserId="6109" />
  <row Id="17503" PostId="5188" Score="0" Text="Sorry again about that. I felt awful!" CreationDate="2021-01-10T21:26:17.557" UserId="27" />
  <row Id="17504" PostId="5188" Score="0" Text="Even still, it would be good if you [added some information to this answer](https://meta.stackexchange.com/q/225370/280611)." CreationDate="2021-01-10T21:52:00.283" UserId="27" />
  <row Id="20941" PostId="5188" Score="0" Text="This works. I used this to teach binary counting to kids in the target age group back in the early 2000s. Their favourite number of course was the $132_{10}$ in binary." CreationDate="2023-02-08T08:40:10.907" UserId="13024" />
  <row Id="13808" PostId="5189" Score="1" Text="Just be careful showing some of those numbers." CreationDate="2018-11-05T21:07:50.723" UserId="5349" />
  <row Id="13810" PostId="5189" Score="1" Text="Indeed, there was some giggling with &quot;four&quot;." CreationDate="2018-11-05T21:54:46.840" UserId="6142" />
  <row Id="13794" PostId="5190" Score="0" Text="I wonder about extending this to show how 5 beads and 5 boxes are enough to represent any letter of the alphabet (or a variation on that), but I have no idea how accessible this would be to the audience." CreationDate="2018-11-05T10:31:34.727" UserId="41" />
  <row Id="13791" PostId="5191" Score="0" Text="What is the difference between the symbols in Boolean Logic? I've been using them synonymously, perhaps in error!" CreationDate="2018-11-05T01:57:15.623" UserId="27" />
  <row Id="13792" PostId="5191" Score="0" Text="@BenI. ⊕ means &quot;exclusive OR&quot; or XOR. ⊗ means &quot;tensor product&quot;, but nothing related to Boolean logic AFAIK. Here's a list https://en.wikipedia.org/wiki/List_of_mathematical_symbols" CreationDate="2018-11-05T09:53:07.300" UserId="6146" />
  <row Id="13801" PostId="5194" Score="0" Text="I don't understand what you mean by _leaving_. Is it a lecture that they leave, or a working session where they work on the project itself? If the latter, do they work alone or in groups?" CreationDate="2018-11-05T19:57:48.777" UserId="1293" />
  <row Id="13802" PostId="5194" Score="0" Text="Will they get a better grade if they work more? Usually the best aim for good grades... Or is it just a pass-or-fail exam?" CreationDate="2018-11-05T20:07:23.697" UserId="6109" />
  <row Id="13803" PostId="5194" Score="0" Text="@Buffy it is a working session where they work alone (it does count towards attendance)" CreationDate="2018-11-05T20:16:10.713" UserId="5109" />
  <row Id="13804" PostId="5194" Score="0" Text="@Obu they get a better grade if they work more." CreationDate="2018-11-05T20:16:24.103" UserId="5109" />
  <row Id="13805" PostId="5194" Score="0" Text="...and do you expect them to come back later to add something to the project? Maybe they expect to be able to accomplish the additional work easily?" CreationDate="2018-11-05T20:17:50.153" UserId="6109" />
  <row Id="14818" PostId="5194" Score="0" Text="could it be that better performers want to work alone, and slow performers want to ride on someone's back?" CreationDate="2019-04-25T13:18:23.550" UserId="6827" />
  <row Id="14821" PostId="5194" Score="0" Text="@Aksakal I am not sure I understand what you are implying. Would you care to elaborate?" CreationDate="2019-04-25T16:23:31.243" UserId="5109" />
  <row Id="14822" PostId="5194" Score="0" Text="@igordsm, I thought you meant group projects. If it's individual projects, then it makes even more sense to leave when you think you got the idea. why stay whole class, if you already accomplished your goal? maybe you could have different difficulty projects so students pick more interesting and difficult projects if they feel like that?" CreationDate="2019-04-25T17:09:17.767" UserId="6827" />
  <row Id="14823" PostId="5194" Score="0" Text="@igordsm, i remember that on one project we were given the same exact task, but you could do it in either ASM or higher level language. we'd get x2 points for ASM, so I picked it" CreationDate="2019-04-25T17:23:53.897" UserId="6827" />
  <row Id="13806" PostId="5196" Score="1" Text="It is said that if you ask a horse to count to 10 by stamping a foot, you hear &quot;stamp, stamp, stamp, stamp&quot;." CreationDate="2018-11-05T20:55:00.780" UserId="1293" />
  <row Id="13809" PostId="5196" Score="1" Text="Rabbits count One Two Three Many (from Watership Down)." CreationDate="2018-11-05T21:11:11.257" UserId="5349" />
  <row Id="16634" PostId="5196" Score="0" Text="Ten is a certain number of things. So is 10--the same number of things. Where you write &quot;TEN&quot; here you should write &quot;ONE THEN ZERO (WHEN IT MIGHT NOT MEAN TEN)&quot;." CreationDate="2020-06-24T23:59:26.753" UserId="2485" />
  <row Id="13815" PostId="5198" Score="0" Text="What resources do you have available? Just books and the internet, or are you a student also. If not a student, are you near a school or university that can help?" CreationDate="2018-11-06T13:20:42.377" UserId="1293" />
  <row Id="13816" PostId="5198" Score="0" Text="Books and internet, maybe I can do some courses in a academy or something similar. But nothing that takes too long (less than one year maybe), I can't go to the university right now, I'm 40 years old and I need to work." CreationDate="2018-11-06T13:35:49.143" UserDisplayName="user6160" />
  <row Id="13817" PostId="5198" Score="0" Text="If I understand the question, you want to continue as a programmer, but in some &quot;interesting&quot; and maybe &quot;hot&quot; application area. And you are looking primarily for how to get the background in one of those areas. Is that about right?" CreationDate="2018-11-06T13:39:53.150" UserId="1293" />
  <row Id="13818" PostId="5198" Score="0" Text="No, an example, I don't want to study VirtualR if the 90% of the time I'm going to work modeling in 3D, I want to know a hot area where the programming is the main part of the process" CreationDate="2018-11-06T15:24:14.733" UserDisplayName="user6160" />
  <row Id="13820" PostId="5198" Score="0" Text="I hope my edit is in accord with your intent. If not you can change it, of course, or simply roll it back." CreationDate="2018-11-07T20:46:04.833" UserId="1293" />
  <row Id="13823" PostId="5198" Score="0" Text="Great changes, thank you for all your help Buffy" CreationDate="2018-11-08T07:10:06.197" UserDisplayName="user6160" />
  <row Id="13826" PostId="5198" Score="2" Text="This does not seem to be a question about teaching." CreationDate="2018-11-09T11:11:05.850" UserId="204" />
  <row Id="13905" PostId="5198" Score="1" Text="I agree with @ctrl-alt-delor. While this is an interesting question I don't believe this is the right forum to ask it. I wish I could vote to close on this one." CreationDate="2018-11-12T18:47:41.123" UserId="4689" />
  <row Id="13938" PostId="5198" Score="0" Text="I've cast the final close vote here for the same reason that ctrl-alt-delor voted to close -- it's an interesting question, but it's about selecting an appropriate field to go into, which is not a teaching question." CreationDate="2018-11-16T07:58:49.600" UserId="58" />
  <row Id="13819" PostId="5199" Score="0" Text="&quot;Both Steves were needed...&quot; such a beautiful turn of phrase!" CreationDate="2018-11-06T19:00:05.627" UserId="27" />
  <row Id="13902" PostId="5199" Score="0" Text="+1 For: &quot;Pretty much any application area of CS requires some deep knowledge of the domain, not just the techniques and mechanics of programming.&quot; I emphatically second that as a software engineer with a CS degree who often had to acquire domain knowledge on the double while working in industry. In my experience it's (much) easier to have the domain knowledge and learn whatever kind of programming is needed than the other way around." CreationDate="2018-11-12T17:31:29.533" UserId="1940" />
  <row Id="13821" PostId="5201" Score="0" Text="I think this might be my favorite answer here. Nicely done!" CreationDate="2018-11-08T02:16:15.687" UserId="27" />
  <row Id="13822" PostId="5201" Score="0" Text="@BenI. Thank you very much! To be honest, I probably spent way too much time writing this up today. I'm glad it was appreciated. :-)" CreationDate="2018-11-08T04:55:01.787" UserId="6113" />
  <row Id="13840" PostId="5203" Score="0" Text="You've been posting some high-quality answers lately. Welcome to our community! Feel free to drop by the [chat](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi. It's lately become more of a message board than a chat room, but that could always change, and that's where the most active users hang out :)" CreationDate="2018-11-09T21:45:03.773" UserId="27" />
  <row Id="13944" PostId="5203" Score="0" Text="Thank you. :-) I'll definitely check it out as soon as I get a chance." CreationDate="2018-11-17T21:43:32.640" UserId="6113" />
  <row Id="13824" PostId="5204" Score="1" Text="This seems like a good idea." CreationDate="2018-11-09T11:03:23.983" UserId="204" />
  <row Id="13825" PostId="5204" Score="0" Text="Why tag as classroom-management?" CreationDate="2018-11-09T11:04:13.537" UserId="204" />
  <row Id="13898" PostId="5204" Score="0" Text="Please avoid discussions in the comments that are not about clarifications/improvements to the question. Comments which do not suggest improvements or request clarification will be removed." CreationDate="2018-11-12T15:35:59.980" UserId="58" />
  <row Id="13924" PostId="5204" Score="2" Text="Have you already planned course content? I honestly can't see you getting much done in that time. I don't mean this to criticize, just to make sure that no one gets disappointed.  Of course, if they all did lots of homework, they would learn much more. Perhaps work them through a book or tutorial, where you spend the first hour answering questions about the last assignment and the rest explaining the next?" CreationDate="2018-11-13T15:18:45.310" UserId="4116" />
  <row Id="17281" PostId="5204" Score="0" Text="Just anecdotal, but I discovered programming when I was 12, and taught it to myself with the internet at that point. So I'd assume that with formal guidance, students a year or two younger could probably learn it pretty well." CreationDate="2020-11-20T01:38:24.330" UserId="9757" />
  <row Id="13833" PostId="5206" Score="0" Text="I should've probably clarified that the language will be Javascript. So it will require a bit more 'discipline' than simply dragging boxes like Scratch. Should I then aim for 12+ and do 16 and younger only with a parent? I wouldn't like to play a role of a baby sitter for early teens." CreationDate="2018-11-09T14:37:20.807" UserId="6090" />
  <row Id="13836" PostId="5206" Score="2" Text="You might also want to consider whether some but not all parents present is a viable situation. I think it adds a complication, though not necessarily a blocking one. Some adults might not want to be embarrassed in front of other people's kids, but might not mind it so much if it is their own. Something to think about anyway." CreationDate="2018-11-09T15:45:14.003" UserId="1293" />
  <row Id="13842" PostId="5206" Score="29" Text="@Ska Also be aware that JavaScript, while useful, is an iffy choice for a first language because of really weird semantic rules and an almost complete lack of coherent structure; it tends to engender all sorts of bad habits. Python or Ruby would be my recommendation." CreationDate="2018-11-10T00:58:12.630" UserId="659" />
  <row Id="13846" PostId="5206" Score="1" Text="@chrylis JS is a requirement, as people who approached me wanting this course want to build websites and apps." CreationDate="2018-11-10T08:30:45.840" UserId="6090" />
  <row Id="13864" PostId="5206" Score="6" Text="12?  No way.  I was beginning to learn about programming and abstract concepts that underlie it at age 8!" CreationDate="2018-11-11T15:38:43.733" UserId="2746" />
  <row Id="13865" PostId="5206" Score="6" Text="@MasonWheeler, Piaget and the research that underlies it is well accepted and has stood for a long time. There are exceptions, of course, as the results are statistical, but don't reject it out of hand." CreationDate="2018-11-11T15:41:07.193" UserId="1293" />
  <row Id="13871" PostId="5206" Score="4" Text="@Buffy Just noting that the science doesn't claim it has stood up for a long time. &quot;Studies have found that children may be able to learn concepts and capability of complex reasoning that supposedly represented in more advanced stages with relative ease.&quot; is what you will find if you read up on it. Additionally there have been *a lot* of alternative better founded theories which are both more dynamic and more fluid. In general as an educator it's best to ignore those stages completely as it advises generalizations for a different culture and time." CreationDate="2018-11-11T19:51:51.537" UserId="675" />
  <row Id="13880" PostId="5206" Score="0" Text="@DavidMulder, Actually, if you search for your quote, you wind up at wikipedia. If you find the relevant section there, and then go to the referenced articles, you find that Piaget holds up very well as applied to this conversation. The first link (an abstract only) seems to refute the quote and the second indicates that it applies only to simpler tasks. I still say that you should consider what Piaget has to say about development before you plunge in to something like this." CreationDate="2018-11-11T22:37:09.223" UserId="1293" />
  <row Id="13892" PostId="5206" Score="1" Text="@MasonWheeler I think it depends on the concepts: I was learning BASIC from age 4 with the help of the Usborne programming books, writing DOS batch scripts a couple of years later, and dabbling with Pascal, but when I was 8 I tried learning C (from the famous book &quot;The C Primer&quot;); all was going well until pointers were introduced, and I just couldn't wrap my head around them at that age. I didn't revisit the concept until about 10 years later! :-)" CreationDate="2018-11-12T12:04:27.253" UserId="4047" />
  <row Id="18081" PostId="5206" Score="0" Text="@chrylis-cautiouslyoptimistic- No doubt that JS is quirky, but Python and Ruby have no shortage of their own idiosyncrasies and frustration points as well, as does any language. Picking a first language based purely on safety is a mistake. JS needs to be considered in the context of what it's capable of: zero-installation, native graphics manipulation and interactivity make it a defensible choice over server-side languages. Teaching beginning coding is less about instilling best practices and more about engagement. [Coding Train](https://thecodingtrain.com/) illustrates the advantages of JS." CreationDate="2021-07-03T21:44:54.997" UserId="9426" />
  <row Id="13834" PostId="5208" Score="5" Text="Thank you for sharing your experiance! Would you mind editing to add some explanation as to why you think learning at age 10 worked well for you and why you think others would be similar?" CreationDate="2018-11-09T15:37:08.407" UserId="58" />
  <row Id="13847" PostId="5208" Score="1" Text="@thesecretmaster It's been that way for an entire generation of people using personal computers before Microsoft and Apple. It's worked for many others. And another generation with TI-BASIC. :P" CreationDate="2018-11-10T09:16:04.657" UserId="6182" />
  <row Id="13897" PostId="5208" Score="0" Text="Not sure what you want as explanantion. It was all nearly 40 years ago. I guess I mean that I was very capable of working with some pretty abstract concepts by the age of 10." CreationDate="2018-11-12T15:28:33.860" UserId="6170" />
  <row Id="13899" PostId="5208" Score="0" Text="@kpollock I don't think you've really explained why you think that most 10+ year olds will be able to learn JS. I don't see the logical steps that say &quot;I learned these things at age 10 therefore everyone can learn these things at age 10&quot; and &quot;These things are analogous to JS.&quot;" CreationDate="2018-11-12T15:43:25.523" UserId="58" />
  <row Id="13900" PostId="5208" Score="0" Text="I said &quot;guess&quot;, and &quot;probably&quot;. I don't consider I was unusually bright or advanced (fairly bright and interested), so I therefore have a gut feeling many kids would also be Ok. And you are right, I did not elaborate. People familar with both js and machine code will (I hope) get my meaning, others not. If my answer is generally not seen as useful, I have no objections to it being deleted." CreationDate="2018-11-12T16:00:52.237" UserId="6170" />
  <row Id="13901" PostId="5208" Score="0" Text="I'm another one who started BASIC at 8 (with help - a maths homework puzzle involving palindromic numbers) and by 10 was writing my own simple stuff in another flavour of basic.  I ended up in physics, doing lots of scripting and having written a little production code. Another anecdata point to suggets this is a reasonable age.  You needed (pre-internet) a certain level of reading compression that a reasonably bright kid should have by that age" CreationDate="2018-11-12T16:58:40.117" UserId="1127" />
  <row Id="13884" PostId="5210" Score="1" Text="Ever tried Haskell?  I heard it's actually much easier to understand intuitively.  I have 20 years of programming to re-work so I don't understand it yet..." CreationDate="2018-11-12T06:16:40.490" UserId="1285" />
  <row Id="13919" PostId="5210" Score="0" Text="Effort that requires you to learn new things is a great way to learn new things. Do you think I learned to read because it was the right thing to do? Of course not - I learned to read so that I could read all the awesome stuff in books (and computers)! Math can be interesting on its own, but you can learn it just as easily if you need it to solve a problem, even if you don't have a liking of math. Don't underestimate the power of genuine curiosity :)" CreationDate="2018-11-13T12:45:48.993" UserId="1816" />
  <row Id="13839" PostId="5211" Score="0" Text="Thanks for the experienced, practical answer. Nicely done, and welcome to [cseducators.se]!" CreationDate="2018-11-09T21:43:11.433" UserId="27" />
  <row Id="14026" PostId="5212" Score="0" Text="When I was about 6, learning to add one digit numbers past ten, I made a persistent &quot;off by one error&quot;, and until a much older student went over it with me in detail, no one had any idea why I kept making errors. If he hadn't helped, I would probably still be doing it wrong." CreationDate="2018-12-07T00:25:26.027" UserId="5349" />
  <row Id="13841" PostId="5213" Score="1" Text="Despite going through a similar learning process myself, I think the majority of students would be intimidated by that sort of thing. A lot of what you mention is what I'd try with a student who is *really* keen. Also, while reading your post, I keep thinking Raspberry Pi, Raspberry Pi, Raspberry Pi...." CreationDate="2018-11-09T22:20:16.307" UserId="2592" />
  <row Id="13845" PostId="5213" Score="0" Text="@Artelius I wasn't the only one then! I've actually got a laptop built around a Raspberry Pi, though since it's running Raspbian it's not too stable." CreationDate="2018-11-10T08:19:17.113" UserId="6174" />
  <row Id="13857" PostId="5213" Score="5" Text="You have hit on something that needs to be shouted: much of what is available now as education is full of endless distraction. When I was 14, sitting at a PDP-11 terminal, there were no ads." CreationDate="2018-11-11T01:31:42.127" UserId="5349" />
  <row Id="13861" PostId="5213" Score="0" Text="Stability is uncertain, but there is also an educational spin of Debian. [Debian Edu/Skolelinux](https://www.debian.org/News/2017/20170618) worth looking at if the Linux/Debian thread is followed." CreationDate="2018-11-11T05:56:00.343" UserId="104" />
  <row Id="13875" PostId="5213" Score="3" Text="+1 for &quot;The child needs to be curious.&quot; and another +1 for &quot;The child needs to have something to tinker with.&quot;" CreationDate="2018-11-11T22:11:51.490" UserId="3132" />
  <row Id="13876" PostId="5213" Score="2" Text="@RonJohn I have no idea why people think they can teach a programmer more easily than an artist, but there we go." CreationDate="2018-11-11T22:12:44.150" UserId="6174" />
  <row Id="13877" PostId="5213" Score="2" Text="@wizzwizz4 because it's the hip thing, the STEM thing, the Bill Gates thing.  But no one wants to admit that **it's the Aspergers thing, too**." CreationDate="2018-11-11T22:16:38.667" UserId="3132" />
  <row Id="13882" PostId="5213" Score="1" Text="It's a shame you didn't type the word HELP.  Back then, the help file actually teaches you a LOT!  It's around Windows XP that they removed actual respect of the users and treated them like morons." CreationDate="2018-11-12T06:11:49.973" UserId="1285" />
  <row Id="13885" PostId="5213" Score="2" Text="@Nelson I only found `HELP` when I was showing a friend &quot;look, there's no help of any kind!&quot; aand... there was. I felt pretty stupid!" CreationDate="2018-11-12T06:57:57.400" UserId="6174" />
  <row Id="13906" PostId="5213" Score="0" Text="Reminded me a lot of myself when I first discovered Linux. I was then a fan of Arch Linux because of its learning potential. As a parent now, I appreciate this answer (particularly the bullet points) to remind me how I could introduce my kids to computers and coding." CreationDate="2018-11-12T19:06:09.673" UserId="6213" />
  <row Id="15445" PostId="5213" Score="0" Text="`GRUB shouldn't be discovered early`&#xA;I've seen a 5 years old kid that got bored in GRUB, got into console mode by hitting some random keys and kept typing there for another 15 minutes. She came back for more many times since then :-)" CreationDate="2019-08-19T22:40:04.333" UserId="8339" />
  <row Id="13844" PostId="5214" Score="0" Text="There would definitely be adults, but I wouldn't like to limit it fort children, and I wouldn't like to babysit. That's why I was thinking of accepting 12 - X years with a parent, and from X onwards alone. Is it a good idea to have such mixed group and what would the age X be?" CreationDate="2018-11-10T08:12:42.313" UserId="6090" />
  <row Id="13848" PostId="5214" Score="0" Text="I agree with your thoughts about interest, concentration, etc. of younger children. When I was 18 and 19 I was a summer day camp counsellor of kids 6-13, the first year I did photography. Very motivated older students made box cameras, least motivated made one photogram and rushed back out of the darkroom, hopefully not ruining other kids stuff. They printed from negatives I brought, a &quot;No Dogs Allowed&quot; sign was strangely popular, they all wanted to make one. So, have a range of activities, and try not to spend all your time in a small dark room with lots of rowdy pre-teens." CreationDate="2018-11-10T13:00:25.180" UserId="5349" />
  <row Id="13868" PostId="5215" Score="12" Text="&quot;They must be comfortable typing (real typing, not hunt and peck typing).&quot; Thats not even required for professional programmers, I know an absurd amount of really good programmers that still can't &quot;properly&quot; type. Because programming isn't about typing fast, its about thinking abstract and being able to see how things work together, and being able to properly test stuff. Sure, you need to write the software at some point - but thats hardly the most time consuming thing in programming *anything*." CreationDate="2018-11-11T18:16:50.270" UserId="1086" />
  <row Id="13879" PostId="5215" Score="11" Text="I can not recommend against JavaScript _enough_! PHP, JavaScript and C# should be avoided, imo (though Jon Skeet would disagree with that last one, I don't know anyone who'd disagree with the first two). Python's a good language to learn, though C isn't intuitive enough for young-me to have learned. Too much memory management. If C allowed you to join strings easily without having to first calculate their size, I'd be all for it... but it's that strings thing that's the problem. (And honestly, the point of the language is that you can't just do string + string and have it auto-`malloc`.)" CreationDate="2018-11-11T22:25:12.043" UserId="6174" />
  <row Id="13881" PostId="5215" Score="2" Text="@Polygnome https://steve-yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html" CreationDate="2018-11-12T01:18:51.517" UserId="6182" />
  <row Id="13886" PostId="5215" Score="0" Text="About how Python tends to enforce one way to do things: I agree that children like to come up with alternative solutions, but I also see that children like it (a lot!) when they know they've found &quot;the&quot; solution. You just have to love the face they make during the &quot;a-ha&quot; moment." CreationDate="2018-11-12T08:31:06.150" UserId="6208" />
  <row Id="13888" PostId="5215" Score="3" Text="@forest That blog post is a rant and has no sources, and the language used in it really doesn't help making a point. I do not disagree that touch typing certainly is beneficial - it is - but its a *very* small thing of what makes a great programmer/engineer. You can be an amazing programmer/software engineer without touch typing, but the other way round doesn't work. being able to touch type doesn't make you a good programmer. teaching a kid to touch-type before teaching him to get results will most definitely make them lose interest before you get them hooked." CreationDate="2018-11-12T10:05:08.840" UserId="1086" />
  <row Id="13889" PostId="5215" Score="0" Text="@Polygnome The blogger is well known, and that article is even referenced on [Coding Horror](https://blog.codinghorror.com/we-are-typists-first-programmers-second/)." CreationDate="2018-11-12T10:30:47.823" UserId="6182" />
  <row Id="13907" PostId="5215" Score="1" Text="Touch typing is not a requirement. Good and efficient typing still is. It doesn't need to be full touch typing. Granted, this is not a requirement for young children." CreationDate="2018-11-12T20:38:13.040" UserId="6216" />
  <row Id="13918" PostId="5215" Score="1" Text="@Polygnome So you don't write documentation? Specs? Stories? You don't communicate through IMs, seek/provide help on programming boards? Keep to-do lists, design decisions, abandoned decisions and reasons for them? I certainly don't spend a significant fraction of my work time typing *code*; most of the effort is on typing *other* things. &quot;Slow typer&quot; isn't a red flag because you can't push code fast enough. Don't fight the strawman. If you have a great programmer who's bad at typing, I suspect it's because he keeps notes in writing - that's fine, though somewhat harder to share/backup." CreationDate="2018-11-13T12:35:53.447" UserId="1816" />
  <row Id="13920" PostId="5215" Score="1" Text="@Luaan Yes, I do write them all the time. but I also read them all the time. Again, I'm not saying you shouldn't learn to proper type - you should - but that its not the *most* important thing for a good programmer. I've seen people who can type very fast write an absolutely unintelligible mess because they simply were not able to communicate ideas properly. Good ability to express yourself, being clear and concise and being able to read &amp; understand what is written are all imho more important then how fast you can type. Focus on the most important things, first. Touch typing comes later." CreationDate="2018-11-13T13:58:44.207" UserId="1086" />
  <row Id="13921" PostId="5215" Score="0" Text="Touch typing should come _first_, as a prerequisite to using a computer. Now it's true, a child isn't going to need to type as fast as a professional developer who submits bug reports, writes documentation, writes unit tests, etc., but being a confident and fluent typist is important for computer activities in general." CreationDate="2018-11-13T13:59:39.213" UserId="6182" />
  <row Id="13965" PostId="5215" Score="1" Text="Not sure what the deal about typing is. After 4 decades plus, I still type with three and a half fingers, albeit at 40 wpm." CreationDate="2018-11-23T20:39:14.453" UserId="1537" />
  <row Id="16137" PostId="5215" Score="1" Text="One only needs to be able to type faster than one can think, regardless of whether one is typing code or comments/specs/docs. If your bottleneck for writing technical specifications is your typing speed, you are not thinking enough about them; it takes time to consider what ways a reader might misinterpret something, and defend against those misinterpretations." CreationDate="2020-01-30T16:26:06.137" UserId="8562" />
  <row Id="13851" PostId="5216" Score="2" Text="+1. Thanks for the perspective and the links." CreationDate="2018-11-10T16:29:08.253" UserId="1293" />
  <row Id="13852" PostId="5216" Score="7" Text="This is actually a very persuasive answer. Thank you for the frame challenge, and welcome to [cseducators.se]." CreationDate="2018-11-10T17:05:11.780" UserId="27" />
  <row Id="13869" PostId="5216" Score="1" Text="Could you explain the concern a bit more?  I mean, it sounds like your parents sent you to some programming classes from ages 7-to-9, and now as an adult, you've found yourself disinterested in it - I understand that part.  But how do you get from having taken a few classes that you weren't interested in at a young age to the idea of complete social separation?  I mean, that seems like a bit of a leap, so perhaps there's a bit more to the argument?" CreationDate="2018-11-11T18:17:35.123" UserId="39" />
  <row Id="13872" PostId="5216" Score="0" Text="@Nat Children frequently inherit their parents interests, it might be sports, religion or professional career. So, they spend a lot of time doing something they might not be interested in themselves when they grow up and it will take a long time to realise that problem. The brain isn't fully developed until you are around 25 years old. Incidentally (but anecdotally), in my experience it is around 25 people realise they are not religious or don't want to work with what they study at school/university - they just did it because their parents steered them onto that path." CreationDate="2018-11-11T19:52:32.707" UserId="6187" />
  <row Id="13873" PostId="5216" Score="0" Text="@d-b Huh, that's interesting.  My parents insisted on mass exposure to all sorts of things, but left me to choose my own path.  I guess that I never personally felt limited by anything that I was exposed to; I mean, I ended up not caring for a lot of different things, and other things I liked but not enough to pursue.  So from this perspective, I guess I found it hard to understand how exposure to something could be taken as limiting.  I suppose that the trick might be to ensure that children have plenty of options and freedom, such that they make the important choices." CreationDate="2018-11-11T20:07:20.397" UserId="39" />
  <row Id="13883" PostId="5216" Score="2" Text="@Nat That's because the freedom of choice is there for you.  If parents gave &quot;choices&quot; to their kids, and it is in the form of &quot;A, B, C, but you must choose one&quot;, then the choice is stacked and not valid, because it can be none of them, or all of them, or even D, E, F, etc...  Parents themselves need to know how to teach children how to choose.  Many do not do this properly." CreationDate="2018-11-12T06:15:06.743" UserId="1285" />
  <row Id="13908" PostId="5216" Score="1" Text="Silicon valley execs keep their kids away from computers as an overreaction to the fact that modern electronic devices (especially games) work really hard to give you a profound sense of accomplishment without you actually accomplishing anything of significance. This is addictive and distracting and a bad habit to fall into, much like watching sports instead of playing them yourself. To be an excellent programmer though one must learn to think analytically, and that is more effective when started younger. You can teach it without computers, but taking apart clocks and cars gets expensive." CreationDate="2018-11-12T22:50:57.320" UserId="2462" />
  <row Id="13853" PostId="5217" Score="4" Text="This is a new sort of question for this site, but my intuition is that this is topical. If anyone disagrees, they are welcome to create a meta about it.  It's along the lines of the question we had about lab layout near the beginning of the site." CreationDate="2018-11-10T22:34:59.857" UserId="27" />
  <row Id="13854" PostId="5217" Score="1" Text="My solution would be _not_, but that is a different issue. What sort to problems are you trying to avoid? I can't help, but others might be able to, but likely need more information about goals, etc. Please edit the question to add detail." CreationDate="2018-11-10T22:37:54.820" UserId="1293" />
  <row Id="13856" PostId="5217" Score="1" Text="@BenI. I tend to agree. Even if it would be on-topic elsewhere, it certainly is about teaching computer science, so it is appropriate here." CreationDate="2018-11-11T00:06:13.080" UserId="76" />
  <row Id="13860" PostId="5217" Score="1" Text="@BenI. I'm on the side of &quot;topical&quot; for this. The Q is &quot;how to&quot; regarding a problem faced extensively by CS educators. Others using computers in the classroom might have _some_ issues with config changes, etc., just not at the level faced in CS classrooms. That the answer turns out to be a product, possibly, does not turn it into a &quot;shopping list&quot; question." CreationDate="2018-11-11T05:26:02.723" UserId="104" />
  <row Id="13855" PostId="5218" Score="0" Text="Have you done this with, say, six year olds, or are you speculating? I find the technic bricks to be pretty sophisticated." CreationDate="2018-11-10T23:34:55.067" UserId="1293" />
  <row Id="13859" PostId="5219" Score="1" Text="I've go to second the Deep Freeze recommendation. It was in use, as far back as 2004, by the largest community college district in the US. Having been a student, a lab aide and doing IT support there I can say that it performed well and made everyone's life easier. Many times a student (or instructor) would hose a system and the solution was always &quot;reboot.&quot;" CreationDate="2018-11-11T05:21:44.090" UserId="104" />
  <row Id="14080" PostId="5219" Score="1" Text="My university used something like this in 1991. Don't know if same, but it did what you describe." CreationDate="2018-12-19T07:41:57.953" UserId="204" />
  <row Id="13863" PostId="5220" Score="2" Text="Does he seem interested?  Can you give some more context about why your question is substantively different than [this one](https://cseducators.stackexchange.com/questions/5204/what-is-good-age-to-start-learning-programming)?" CreationDate="2018-11-11T13:54:20.560" UserId="27" />
  <row Id="13866" PostId="5220" Score="3" Text="The tags on this seem wrong." CreationDate="2018-11-11T15:55:13.893" UserId="1293" />
  <row Id="13890" PostId="5220" Score="0" Text="I have removed tag-highschool (7 year olds don't go to high-school)." CreationDate="2018-11-12T10:39:18.927" UserId="204" />
  <row Id="13904" PostId="5220" Score="2" Text="C++ is the language of the (language) lawyers. I believe nobody should program in it, unless one is forced to (e.g. by clock cycle requirements). C++ programs 'done right' tend to be overly complex and large (there are some nice presentations by John Lakos if you are interested)" CreationDate="2018-11-12T18:29:39.577" UserId="2705" />
  <row Id="13913" PostId="5224" Score="0" Text="Interesting and true. I would need to teach both though, and no scratch, just JS, HTML, CSS. So from what age onwards are kids mixable with adults you think? 15?" CreationDate="2018-11-13T11:29:52.557" UserId="6090" />
  <row Id="13926" PostId="5224" Score="0" Text="@Ska Kinda hard to give an exact age.  Some kids go off to college and are essentially mini-adults by age-10, while other people never reach adult-like maturity.  We could probably take a reasonable guess at population-averages, but it seems unlikely that people inquiring about your class will represent a fair sampling of the population.  So, it may have to be a case-by-case basis thing." CreationDate="2018-11-14T17:14:25.450" UserId="39" />
  <row Id="13903" PostId="5228" Score="1" Text="Re &quot;hot&quot;, also keep Wayne Gretsky's words in mind: &quot;Skate to where the puck is going, not where it has been&quot;." CreationDate="2018-11-12T17:32:57.257" UserId="1940" />
  <row Id="13925" PostId="5233" Score="1" Text="Challenging yourself is good but I have doubts as to the value of code-golf style challenges. If you enjoy it, though, go for it --- but remember that you would never want to have to support someone else's code written in that style. (Brevity is good, but not at the cost of clarity.)" CreationDate="2018-11-14T14:36:42.093" UserId="1879" />
  <row Id="13936" PostId="5242" Score="1" Text="I wonder, actually, if lots of languages is a good thing to do. As opposed to diving deeply into problem solving in a smaller set. Especially if students never really get to understand any of the paradigms on which those language are based. I think it can become just a syntax jumble, rather than anything deeper. If they have Python, for example, then why Java at all?" CreationDate="2018-11-16T00:27:56.443" UserId="1293" />
  <row Id="13939" PostId="5242" Score="0" Text="@Buffy our education is very applied and we try to teach the relevant programming languages for our domains. Since many students will working with Java later on, they like to learn the languages they are confronted with in their later business fields (which was one reason for C (embedded programming) as well). My personal favourite is Python 3 as well ;-)." CreationDate="2018-11-16T10:27:59.973" UserId="6109" />
  <row Id="13948" PostId="5242" Score="0" Text="To be honest, I'm having trouble understanding the context here. What level of education is this? Secondary? Undergraduate? You say it is very applied. Is this a traditional program at some level or specialized training rather than degree focused?  What happens to your graduates, generally? I think more context might make it possible to give advice." CreationDate="2018-11-19T12:45:05.650" UserId="1293" />
  <row Id="13949" PostId="5242" Score="0" Text="Yes, I realize you said bachelor level, but is it an actual baccalaureate? Sorry that I don't understand the educational system in Germany very well." CreationDate="2018-11-19T14:27:37.633" UserId="1293" />
  <row Id="13950" PostId="5242" Score="0" Text="@Buffy The German bachelor starts after 12 or 13 years of school. It takes (usually) 7 semester, and afterwards you can do a matter of science (3 semester) which is the entry qualification for a PhD. Many people leave after the bachelor of science to work in industry, in our case maybe as programmer, consultant, product manager, ..." CreationDate="2018-11-19T14:49:23.327" UserId="6109" />
  <row Id="13951" PostId="5242" Score="0" Text="And is it entirely focused on one subject, or a generalist education? In the US a CS student studies lots of things other than CS such as history, language, etc. Only about a third of the program is actually CS focused. I think it may be different with you." CreationDate="2018-11-19T14:54:09.517" UserId="1293" />
  <row Id="13952" PostId="5242" Score="0" Text="Here, an undergrad might take ten courses in a year, four of which might be CS. In the last year, maybe a bit more. But no single term will consist of just CS. The &quot;major&quot; is usually about 15-18 term length courses out of about 40. Some places count differently, but it amounts to about the same." CreationDate="2018-11-19T15:01:03.567" UserId="1293" />
  <row Id="13953" PostId="5242" Score="0" Text="yes, it's totally different! It's about 70-80% CS (including math, formal languages, ...) and 20-30% application domain specific, but still with CS in mind (e.g. embedded programming, quality systems applied to software engineering, scientific writing). We assume (partially wrongly ;-) ) that things like history, languages etc are fully covered at school." CreationDate="2018-11-19T15:08:25.837" UserId="6109" />
  <row Id="13943" PostId="5245" Score="2" Text="Do you have anyone that you trust to advise you? Especially a trained counselor? I'll have some advice in a bit, but it would be good to know that, at least." CreationDate="2018-11-17T18:45:15.773" UserId="1293" />
  <row Id="13947" PostId="5245" Score="3" Text="No I don't.  I'm doing this all on my own.  I don't even have friends.  I've got Google and YouTube. I wish i could afford to hire a teacher but disability isn't enough to eat off of consistently. Some simple work books that are inexpensive and for beginners would be good but i don't know where to start." CreationDate="2018-11-18T18:49:24.293" UserId="6242" />
  <row Id="13966" PostId="5245" Score="6" Text="I would bet that most successful programmers are 'atypical' and learned mostly on their own. That makes you normal." CreationDate="2018-11-24T17:16:47.447" UserId="5349" />
  <row Id="13974" PostId="5245" Score="0" Text="Keep it up. Success in this field is all about puzzle solving over time. I found that the hyper focus and limited panesthesia that comes with autism is a great aid for learning these concepts. I compensate for my memory and language processing issues with copious amounts of whiteboard drawings and notes." CreationDate="2018-11-27T13:36:27.103" UserId="1537" />
  <row Id="19476" PostId="5245" Score="0" Text="@ScottRowe Facts. Anecdotally, I’d guess that half of all programmers in the bay area are on the spectrum." CreationDate="2022-03-23T11:39:47.953" UserId="3878" />
  <row Id="20016" PostId="5245" Score="0" Text="@RonSwartz If memory is a worry, don't try to remember the details of library functions, just understand the language and practice as much as you can.  Most programmers tend to remember the library functions we use frequently, but mostly we look up the details in the manual, the WWW or the help facility in the IDE, we don't try and memorize it all, so if you have difficulty remembering all that, don't worry, we do as well.  The key thing is to have a vague idea of what sort of thing is in each library module, which helps us to locate the documentation we want efficiently." CreationDate="2022-05-19T08:54:29.620" UserId="11932" />
  <row Id="19553" PostId="5247" Score="0" Text="The point about getting a trusted advisor to help with the skills assessment is *very* good advice.  I work quite a lot with students with autistic spectrum disorders (and am on the waiting list for a formal diagnosis myself), and they often have unduly harsh assessments of their own qualities and skills.  Society tends to be very free with criticism and praise is often given more implicitly, it would be better if both forms of feedback were given more directly in a balanced manner." CreationDate="2022-04-02T09:37:33.777" UserId="11932" />
  <row Id="13945" PostId="5248" Score="0" Text="Have a look at Gnu/Linux. Debian is good. You may find it less frustrating than Microsoft's Windows, there is a lot to learn, and the journey is easier." CreationDate="2018-11-18T15:15:12.433" UserId="204" />
  <row Id="19693" PostId="5248" Score="2" Text="&quot;Success is the ability to continue in the face of failure.&quot; I will steal that aphorism and use as much as I can." CreationDate="2022-05-12T11:54:57.243" UserId="8155" />
  <row Id="21662" PostId="5248" Score="0" Text="*&quot;some were normal&quot;* &lt;&lt; who are these &quot;normal&quot; people? I keep hearing about them but I've never met one" CreationDate="2024-02-10T21:31:28.057" UserId="10968" />
  <row Id="14022" PostId="5249" Score="0" Text="Kotlin advantages go much further than concurrency - see this post for some examples: https://hashnode.com/post/why-i-abandoned-java-in-favour-of-kotlin-ciuzhmecf09khdc530m1ghu6d" CreationDate="2018-12-06T20:02:05.807" UserId="4340" />
  <row Id="13956" PostId="5254" Score="0" Text="I think this is off topic here and have voted to close, so won't give a full answer. Companies, however, change what they use to develop software because the need change constantly and the quality of tools change as well. New opportunities open and companies look to take advantage of them. The same is true for educators, in fact. The C++ standard today is so different from the original that it is barely recognizable as the same." CreationDate="2018-11-20T16:42:49.863" UserId="1293" />
  <row Id="13957" PostId="5254" Score="0" Text="Yeah, I'm sorry to say that this is off-topic here.  This site is about how to *teach* CS.  I'm not sure which network this would be topical.  However, you are still welcome to take a look around, and ask and answer questions about teaching CS.  We welcome student perspectives here :)" CreationDate="2018-11-20T19:19:25.323" UserId="27" />
  <row Id="13960" PostId="5254" Score="0" Text="There are standards for C++. Good compilers will comply to these standards, is that if you write a program in one, it will compile in the others. However on the subject of choice of language, for a beginner. Do not ask what will I be using in industry, ask what is the best language to help me learn. When we teach our kids to read, do we ask what will they need to read at work, let us start there." CreationDate="2018-11-22T10:26:27.010" UserId="204" />
  <row Id="14031" PostId="5256" Score="1" Text="Well said! I think this every time I see people arguing over why their tool/language is the best and why everyone everywhere should just use what they are using. Every tool has a time and a place." CreationDate="2018-12-08T02:17:49.580" UserId="6113" />
  <row Id="14093" PostId="5257" Score="1" Text="A lot of the problem with programming and computers being difficult, is bad languages, operating systems, and windowing systems. We need to stop using low quality systems, and to also choose systems that are well suited to learning (not necessarily well suited to industry)." CreationDate="2018-12-22T13:04:16.157" UserId="204" />
  <row Id="14490" PostId="5257" Score="1" Text="I'm not sure what you mean by low quality systems. I started on a Dec 10 in BASIC on a TTY that had just been upgraded to 300 bits per second. A modern Windows or Linux system is far superior." CreationDate="2019-03-13T03:22:15.863" UserId="1537" />
  <row Id="14545" PostId="5257" Score="1" Text="&quot;According to me if people interested in this then nothing is difficult for them.&quot; I'm not sure this is true (at least not universally true). I'm very interested in music and I would love to be able to carry a tune when singing - but so far it has eluded me. Maybe nothing is impossible..." CreationDate="2019-03-20T21:41:19.893" UserId="134" />
  <row Id="13968" PostId="5258" Score="0" Text="&quot;It is like a lot of physical activities&quot;. Or learning how to play a musical instrument. Or woodworking. Or writing (even in your native tongue). Some people may be naturals in any of these areas, but most people aren't. They need instruction and practice, practice, practice." CreationDate="2018-11-25T21:21:11.230" UserId="1940" />
  <row Id="14040" PostId="5258" Score="0" Text="@njuffa those with the most 'ability' are the most in need of instruction." CreationDate="2018-12-09T16:51:50.790" UserId="5349" />
  <row Id="14639" PostId="5259" Score="0" Text="The thing I find perplexing is the question of what a person is doing at a university if they don't already know what they want to learn and do? I knew I was interested in computers, programming and especially operating systems since 9th grade. So my college courses were not 'difficult' (they were but I didn't care), they were what I wanted to spend my waking moments doing. I never did end up working at Microsoft, but I had an interesting job. If you want to do something, the issue of difficulty does not arise. If you don't want it that much, find something that you do want." CreationDate="2019-04-01T10:21:27.143" UserId="5349" />
  <row Id="17207" PostId="5259" Score="1" Text="@ScottRowe: (later comment, but can't resist) There are *many* students who come to say, open-admissions colleges in the U.S. who have no idea why they're there except [family member/high school advisor/high school graduation requirement] said they should do so. Likewise, they may be given a menu of possible majors with no understanding or advising as to what any of them mean. I'd say the majority of students at open-admissions institutions I've taught at are in this category. I agree with you that it should be very different." CreationDate="2020-11-17T21:19:46.117" UserId="8137" />
  <row Id="14039" PostId="5261" Score="1" Text="Once you know how to arc weld you can build the Eiffel Tower. In principle, anyway..." CreationDate="2018-12-09T16:50:14.537" UserId="5349" />
  <row Id="14546" PostId="5261" Score="0" Text="@ScottRowe Isn't it riveted?" CreationDate="2019-03-20T21:45:41.227" UserId="134" />
  <row Id="14640" PostId="5261" Score="0" Text="@dlu these days, we would just 3D print the darn thing. Soon, carbon nanoparticles will self-assemble to build it. We can all have our own copy!" CreationDate="2019-04-01T10:49:51.600" UserId="5349" />
  <row Id="13970" PostId="5262" Score="2" Text="Just a thought: I would try to find a counter-example code which looks reasonably correct intuitively, which gives the correct result for the first N cases but goes wrong after that. This would demonstrate the relevance of a proof, but I'm afraid I don't have any example in mind." CreationDate="2018-11-27T01:47:09.283" UserId="6125" />
  <row Id="13971" PostId="5262" Score="1" Text="@Erwan I've had a similar thought, and gotten stuck in a similar place  Perhaps one day inspiration will strike!" CreationDate="2018-11-27T01:53:28.187" UserId="27" />
  <row Id="13977" PostId="5262" Score="0" Text="It is induction you want them to be more excited about, or proving that their code is correct? Or both?" CreationDate="2018-11-28T04:27:49.773" UserId="6111" />
  <row Id="13978" PostId="5262" Score="0" Text="@DaveRosoff Both, I suppose. It's a pretty long and hard unit to get them to all master the skill, so I'm just trying to build some emotional connections to help them see the value to it." CreationDate="2018-11-28T11:26:58.597" UserId="27" />
  <row Id="13975" PostId="5264" Score="0" Text="I love your example of an (n+1) that doesn't work!" CreationDate="2018-11-28T04:03:22.880" UserId="27" />
  <row Id="13976" PostId="5264" Score="0" Text="I'm still not quite sure this will give my kids the emotional connect I'm looking for, but it might help. Certainly can't hurt!" CreationDate="2018-11-28T04:10:20.573" UserId="27" />
  <row Id="13982" PostId="5264" Score="0" Text="I thought your non-working proof was going to be the classic proof about all horses being the same colour, but it's more subtle. Nice." CreationDate="2018-11-29T08:22:20.807" UserId="1219" />
  <row Id="14038" PostId="5265" Score="5" Text="Right, I have had students try to memorize their way to programming, which is about the same as trying to memorize your way to being a jazz improvisation virtuoso. If it could be memorized, we would just build a computer system to do it. It is 'hard' because one must grow beyond knowledge, to other human capacities not so easily described, or taught for that matter." CreationDate="2018-12-09T16:48:13.867" UserId="5349" />
  <row Id="13979" PostId="5266" Score="1" Text="Could you clarify and expand a little bit on the first paragraph? What are you trying to do, exactly?" CreationDate="2018-11-28T22:42:55.690" UserId="27" />
  <row Id="13981" PostId="5266" Score="1" Text="I'm having trouble understanding the question as well. Are you looking for good explanations on standard problems in CS? Or do you want to teach how a good explanation differs from a worse explanation?" CreationDate="2018-11-29T08:08:42.730" UserId="6109" />
  <row Id="13985" PostId="5270" Score="7" Text="&quot;*not once any lecturer or educator has discouraged us from ... testing our code as much as we'd like*&quot;. Normally the problem is the opposite: getting people to test their code sufficiently." CreationDate="2018-11-30T09:36:02.210" UserId="1219" />
  <row Id="14064" PostId="5270" Score="0" Text="When computing cycles were expensive, people were discouraged from compiling frequently. You had to deliver your card deck to the operators, who would schedule your run and give you back a printout, sometimes as quickly as 24 hour turnaround.. With computer cycles being cheap, the most efficient way to learn and produce is too use the cycles." CreationDate="2018-12-15T10:06:53.590" UserId="1537" />
  <row Id="19886" PostId="5270" Score="0" Text="An entire paradigm called CI/CD (Continuous Integration / Continuous Development) is doing exactly the *opposite* of what you're proposing.&#xA;&#xA;Trust me... if you ever join a company that has a completely counter-productive development pipeline, you'll know. The immediate symptom is you are *unable to know whether your fix worked for an extended period of time*. A change is pushed through so many layers of processing that by the time you got your results, you would have no idea what you did, nevermind what the error was about." CreationDate="2022-05-14T17:35:59.843" UserId="1285" />
  <row Id="13989" PostId="5274" Score="0" Text="Hi! I really appreciate you taking your time to answer my question.&#xA;&#xA;I did not mean to blame my educators for my bad habits. I'm interested in becoming an educator myself so I put some thought in which didactive approaches of my educators has helped me to become a better programmer and which did not. &#xA;&#xA;It is probably fair to say that this is entirely on me." CreationDate="2018-12-01T08:32:54.307" UserId="6282" />
  <row Id="14060" PostId="5274" Score="0" Text="`In fact, shotgun debugging generally takes longer than walking through the logic and figuring out what to do.` True, but there's a different between _fixing the problem_ and _learning the underlying cause of the problem_. As much as I am pro-shotgun (cfr my answer), I do concede that wanton shotgun debugging can be used as a way to brute force a solution and avoiding having to understand the problem." CreationDate="2018-12-13T12:01:35.820" UserId="2164" />
  <row Id="14092" PostId="5274" Score="0" Text="I remember writing and testing code, then writing it out by hand. I got the highest grade in the class. This foolish teacher taught me well (if by accident). I now always test my code." CreationDate="2018-12-22T12:59:45.717" UserId="204" />
  <row Id="13990" PostId="5276" Score="0" Text="Do you think there is a difference when it comes to low vs high-level languages? In our Systems Programming course (where we use C) we've been encouraged to always compile our code every few lines to weed out syntax errors which become tedious to debug once the program is large enough. &#xA;&#xA;I do think there is a difference between trying to find logic and syntax/semantics errors when it comes to compiling to check on the code." CreationDate="2018-12-01T08:35:11.513" UserId="6282" />
  <row Id="13991" PostId="5276" Score="0" Text="In most IDEs syntax errors are highlighted even without any compilation. But it is useful to check whether a loop works as desired. And this is independent of the language." CreationDate="2018-12-01T13:28:26.190" UserId="6109" />
  <row Id="14059" PostId="5276" Score="0" Text="`Of course, just changing random lines of code until the result seems to work is not a good idea and this should be avoided.` I find that the &quot;when all else fails&quot; argument works here. When you're out of ideas, manipulating the environment in seemingly unrelated ways can reveal information that is crucial to finding or reproducing a bug. The issue is more that developers should have _other_ skills next to shotgun debugging, but that doesn't mean the same as suggesting that shotgun debugging is always a bad thing." CreationDate="2018-12-13T11:58:52.413" UserId="2164" />
  <row Id="14061" PostId="5276" Score="0" Text="@Flater in this case you are not shotgun debugging but using a special &quot;last resort&quot; method ;-)." CreationDate="2018-12-13T13:44:55.507" UserId="6109" />
  <row Id="14030" PostId="5279" Score="0" Text="I am an advocate of the &quot;mean teacher method&quot; of writing functions.  First, decide what the function is to do. Then stub it with an appropriate pro forma return value. Second: generate test cases for that check routine behavior as well as corner cases. Third: implement the function and hopefully it passes all tests." CreationDate="2018-12-07T23:19:29.767" UserId="21" />
  <row Id="14032" PostId="5279" Score="0" Text="@ncmathsadist Why mean? I would do same, but I would expect a test for the stub routine, before you write it. I would then expect just enough test, then just enough solution, etc, etc. Don't write any solution, except to pass a test, don't write any test, except to get tests to fail. If tests are already failing, then stop writing them, except to fix the test (compile error etc)." CreationDate="2018-12-08T11:19:10.567" UserId="204" />
  <row Id="14001" PostId="5281" Score="0" Text="Hi m__, welcome to [cseducators.se]. What do you mean by &quot;process&quot;, and what age/level are you teaching to? Without some further details, I'm afraid @KimNguyễn's response of &quot;no it's not&quot; is about as far as we can help you." CreationDate="2018-12-03T11:33:40.380" UserId="27" />
  <row Id="14000" PostId="5282" Score="0" Text="Inserting in a sorted list can be done in O(n), in fact this is an example where a sorted list helps. Only Insertion Sort takes O(n²)" CreationDate="2018-12-03T11:32:52.757" UserId="6109" />
  <row Id="14003" PostId="5282" Score="1" Text="That's my point. If your use case is to insert a lot of values, and have the result sorted at the end it is better to insert at the end of the array (constant time for the structures I mention) and sort everything afterwards. Other wise the whole process takes O(N²) (N is the number of elements inserted). Of course the insertion of a single element is linear. Also, OP asks specifically about arrays. In that case, insertion also needs to move the rest of the elements to the right (which is also linear). So again, it all depends on your use case." CreationDate="2018-12-03T11:50:28.440" UserId="746" />
  <row Id="14008" PostId="5282" Score="0" Text="@OBu, inserting in a sorted _linked_ list can be done in O(n), but &quot;List&quot; does not always mean LinkedList." CreationDate="2018-12-03T19:14:12.750" UserId="1269" />
  <row Id="14010" PostId="5282" Score="0" Text="@SolomonSlow The same holds true for an array implementation." CreationDate="2018-12-03T21:32:52.993" UserId="6109" />
  <row Id="14011" PostId="5282" Score="0" Text="D'Oh! You're right!" CreationDate="2018-12-03T22:11:45.170" UserId="1269" />
  <row Id="14016" PostId="5282" Score="1" Text="@OBu inserting n element in to a list $O(n^2)$. Kim is discussing inserting **lots** of elements, not just one." CreationDate="2018-12-05T08:35:42.120" UserId="204" />
  <row Id="14017" PostId="5282" Score="0" Text="While all the facts here are correct, I see nothing about a pedagogical approach." CreationDate="2018-12-05T08:37:10.773" UserId="204" />
  <row Id="14025" PostId="5282" Score="0" Text="@ctrl-alt-delor I think the approach would be: *tell them this stuff.* But I have been wrong before." CreationDate="2018-12-07T00:05:40.263" UserId="5349" />
  <row Id="14014" PostId="5283" Score="0" Text="Flow charts are about `goto` not about loops and conditions. I do agree with the last paragraph though." CreationDate="2018-12-05T08:23:48.860" UserId="204" />
  <row Id="14018" PostId="5286" Score="1" Text="As a &quot;real programmer&quot; with a few decades of production experience I can report that some programmers _do_ use __both__ tools often. Personally, I often use them on paper before I even approach the keyboard for larger projects. Frequently the quality of the code and the time-to-project-completion have a positive correlation to the usage of such tools by other programmers." CreationDate="2018-12-05T10:08:49.227" UserId="104" />
  <row Id="14023" PostId="5286" Score="0" Text="@GypsySpellweaver I have been programming since 1982, and professionally since 1995. I have never seen anyone use a flowchart to help them to design a high-level computer-program. Unless forced to by management. I have seen other diagrams used, some have proved useful. I have seen pseudo-code effectively used when it is much higher-level, than the coding language. I have also seen it effective when the programmer is not fluent in the language they are coding it. Experts tend to use a language they know well, as as pseudo code. There is no value in retaining this pseudocode, except for the NEA." CreationDate="2018-12-06T20:42:15.300" UserId="204" />
  <row Id="14068" PostId="5298" Score="0" Text="I recommend learning modelling with UML (class diagrams and more, but especially class diagrams)." CreationDate="2018-12-18T08:52:31.223" UserId="6350" />
  <row Id="14071" PostId="5298" Score="0" Text="I good way to learn object orientation is to learn Eiffel (language), first. It may seem like a diversion, but it will be quicker. You will learn OO properly, then you can learn how to apply it to any language. (and singleton is an anti-pattern, I have seen no valid use for it, except to wrap unprotected mono-static code. mono-static code is also an anti-pattern.)." CreationDate="2018-12-18T11:58:39.873" UserId="204" />
  <row Id="14323" PostId="5298" Score="0" Text="That is *years* worth of material. I also seriously doubt that you'll use more than a fraction of it in your professional career (which fraction will depend on the career)." CreationDate="2019-02-18T18:41:37.880" UserId="1790" />
  <row Id="14041" PostId="5299" Score="0" Text="For feedback, with working code that might be improved for performance, clarity, etc., there is [codereview.se] where feedback might be available." CreationDate="2018-12-10T22:14:30.343" UserId="104" />
  <row Id="14070" PostId="5299" Score="0" Text="I agree this list is far to long. This is too much planning. When I park my car, I never know where it is. However I always know which way to turn at each junction. I take the shortest (or nearly), path. I don't need to plan the whole path. Same is true of programming, or learning. When you learn new things, the plan will have to change, so don't over plan it." CreationDate="2018-12-18T11:55:43.060" UserId="204" />
  <row Id="14042" PostId="5300" Score="1" Text="Actually, objects in python have types. Variables don't. It is an important distinction. The type of an object is set at creation and never changes. A variable can refer to any object independent of the type of the object." CreationDate="2018-12-11T13:57:35.897" UserId="1293" />
  <row Id="14043" PostId="5300" Score="0" Text="@Buffy point taken. That was a shortcut to say that since function parameters are not typed, python is not the ideal language to study parametric polymorphism." CreationDate="2018-12-11T14:08:57.010" UserId="746" />
  <row Id="14049" PostId="5302" Score="2" Text="Students tend to complain a lot less when expectations and grading standards are shared explicitly in advance of the assignment due date. What are you telling your students about how their work will be graded?" CreationDate="2018-12-11T21:45:20.517" UserDisplayName="ff524" />
  <row Id="14050" PostId="5302" Score="1" Text="Are they provided with an environment where they can run and test their code?" CreationDate="2018-12-11T21:46:21.633" UserId="3225" />
  <row Id="14051" PostId="5302" Score="0" Text="@ff524 In this situation, students are aware of the test cases. The actual grading follows a rough catalogue but is mostly up to the TAs. One more thing for clarification: I am a student representative in this case and generally thinking about an opinion on that matter." CreationDate="2018-12-11T22:00:07.157" UserId="6328" />
  <row Id="14052" PostId="5302" Score="0" Text="@Acccumulation Yes, the students know about testing from previous courses and could easily write some along with the actual implementation." CreationDate="2018-12-11T22:02:21.330" UserId="6328" />
  <row Id="14053" PostId="5302" Score="1" Text="Assignments should be graded based on the educational goals of the course. I can see value in courses that teach _writing code to fit a given specification_, and different value in courses that teach _implementing specific algorithms and data structures_. The same code submission should be graded differently in those two classes." CreationDate="2018-12-12T09:52:40.890" UserId="3718" />
  <row Id="14072" PostId="5302" Score="0" Text="Publish the success criteria, and grade against it: publish the unit tests." CreationDate="2018-12-18T12:02:31.067" UserId="204" />
  <row Id="14174" PostId="5302" Score="0" Text="**Unit tests** should **test the units** of the program, not just the whole thing. Therefore students can write sub-parts and pass tests, and therefore get grades." CreationDate="2019-01-13T16:28:00.553" UserId="204" />
  <row Id="14057" PostId="5306" Score="0" Text="When you say &quot;*core programming or theoretical CS concepts*&quot; do you mean that answers can range from trade-skill to ivory-tower academic suggestions?" CreationDate="2018-12-13T08:41:44.580" UserId="1219" />
  <row Id="14062" PostId="5306" Score="0" Text="@PeterTaylor I suppose I mean, &quot;concepts that will never go out of date&quot;. So algorithms or math are obvious shoe-ins, but some trade skills would also most definitely fit that description." CreationDate="2018-12-13T15:43:03.380" UserId="27" />
  <row Id="14325" PostId="5306" Score="0" Text="JavaScript. Jack-of-all-trades, master of none. Best used in that role? Not sure what role a jack-of-all-trades languages has in a CS curriculum (other than as an introductory language), which is why this is a comment and not an answer." CreationDate="2019-02-18T18:47:51.517" UserId="1790" />
  <row Id="21008" PostId="5306" Score="0" Text="@BenI. 4 years later, do you have new insight for your own question ?" CreationDate="2023-03-07T07:50:23.323" UserId="9884" />
  <row Id="21009" PostId="5306" Score="0" Text="@Qiulang邱朗 Nope, not a thing. My favorite insight here comes from Michael0x2a's answer about frameworks, but we never did integrate JavaScript into our core. It didn't seem to fit naturally enough with what we otherwise needed to teach. Cores move slowly, however, so this is all still an ongoing conversation." CreationDate="2023-03-07T12:17:16.927" UserId="27" />
  <row Id="21010" PostId="5306" Score="0" Text="@BenI. I don't know your students' level but I feel his suggestion is quite advanced even for freshman in college." CreationDate="2023-03-07T12:26:24.273" UserId="9884" />
  <row Id="21011" PostId="5306" Score="0" Text="@Qiulang邱朗 My students typically graduate roughly ready for middle of junior year in college (at least within a CS context). It's actually a challenge that our alumni face that many schools do not allow younger students to test into upper-level coursework! It always struck me as odd, since the universities typically have plenty of electives that could be used in place of the courses the students test out of." CreationDate="2023-03-07T13:49:06.603" UserId="27" />
  <row Id="14054" PostId="5307" Score="0" Text="Sadly, Java is a strict requirement imposed from the outside, which is precisely why we are not using languages like Ruby. We use Python for AI/ML, C for stack/heap management and pointers, and 6502 for assembly. JavaScript may be effectively being imposed on us, and the question is really about how to make the best use of it. It doesn't seem (to me!) like it's a great fit for anything substantive, so I'm hoping I'm missing something." CreationDate="2018-12-12T17:17:49.590" UserId="27" />
  <row Id="14056" PostId="5307" Score="0" Text="&quot;*You need to be careful that you focus on &quot;principles of&quot; and not &quot;examples of&quot; languages, however.*&quot; Kinda depends on what your goal is. I took a course called *Comparative Programming Languages* which looked at a fair few examples of languages, and was quite eye-opening about the process by which new languages are designed to try to fix shortcomings in previous ones. Since (allegedly) most CS grads end up designing at least one language in their lifetimes, there's value in thinking about the nitty-gritty of language design and not just about paradigms." CreationDate="2018-12-13T08:37:43.140" UserId="1219" />
  <row Id="14058" PostId="5307" Score="0" Text="@PeterTaylor, that is  a different course, as its name implies." CreationDate="2018-12-13T11:40:37.250" UserId="1293" />
  <row Id="14074" PostId="5307" Score="0" Text="Who is forcing you, can you show them what harm it will do. I realised when creating software, that I was saying “No” to bad management depressions, and that this was not working. I then started saying “Yes I can do that, and the cost will be …”. The new response was, “Oh, don't do that, it is a terrible idea”" CreationDate="2018-12-18T12:20:23.583" UserId="204" />
  <row Id="14075" PostId="5307" Score="0" Text="@ctrl-alt-delor, I'm pretty sure the OP is referring to the APCS exam structure. The exam is in Java and students need to know it to get AP credit. It is a really big deal for students as it can mean college credit and skipping a few elementary courses in college." CreationDate="2018-12-18T12:22:24.810" UserId="1293" />
  <row Id="14063" PostId="5309" Score="0" Text="Doesn't the Code Academy require paid subscription?" CreationDate="2018-12-14T09:43:47.887" UserId="6090" />
  <row Id="14069" PostId="5312" Score="3" Text="Welcome to [cseducators.se]! It's difficult to tell what, exactly, you are asking. Could you edit your question to make it more specific?" CreationDate="2018-12-18T11:16:23.707" UserId="150" />
  <row Id="14136" PostId="5312" Score="0" Text="can you tell us more about your background? The situation you are describing sounds horrible to me (in every aspect)." CreationDate="2019-01-05T10:06:38.657" UserId="6109" />
  <row Id="16933" PostId="5312" Score="0" Text="How does one get a &quot;machine learning engineer&quot; job without some sort of background in machine learning? I'm not joking: it'd be fun to get such a job for myself just as a motivation for some deep machine learning study, but even with 3 decades of hardcore hardware and software engineering under my belt, I'm wholly unqualified simply because I didn't do much in machine learning beyond some very introductory exercises and superbly rudimentary applications - nowhere near any sort of state of the art... You've definitely got yourself a big mountain to climb!! How is your experience 2 years later?" CreationDate="2020-08-31T17:38:41.490" UserId="9440" />
  <row Id="14076" PostId="5313" Score="1" Text="I'm afraid that you would be an outlier among employers. Sadly, I admit, too many want to hire those skilled in the technology of the moment, not thinkers. There are exceptions, of course." CreationDate="2018-12-18T12:23:56.880" UserId="1293" />
  <row Id="14078" PostId="5313" Score="0" Text="@Buffy I think you are correct. Most job advertisements just list a bunch of skills. (They should read Bloom). However it may help them keep there job, and to acquire these skills. You can then use some shotgun approach to getting the skills: T shaped learning, learn the important stuff deep, and learn a load of stuff shallow. This helps with the tick boxes, and is a good thing anyway." CreationDate="2018-12-18T12:31:58.163" UserId="204" />
  <row Id="14079" PostId="5313" Score="0" Text="Unfortunately, my experience has been that @Buffy is correct. Also unfortunate is that the &quot;technology of the moment&quot; is a moving target and frequently changes between the time the students learn it and when they are ready for the job market. I suspect that the OP is aware of that disconnect and wants to teach the students what they can use, regardless of the &quot;current trends&quot; some years into the future." CreationDate="2018-12-19T01:57:04.383" UserId="104" />
  <row Id="14081" PostId="5313" Score="0" Text="@GypsySpellweaver ‘ &quot;technology of the moment&quot; is a moving target and frequently changes between the time the students learn it and when they are ready for the job market.’ — yet another reason not to teach technology of the moment, and to use the best languages for learning." CreationDate="2018-12-19T07:45:11.713" UserId="204" />
  <row Id="14083" PostId="5316" Score="0" Text="This looks more like a comment on the answer by @Buffy than an answer on its own." CreationDate="2018-12-19T14:12:30.977" UserId="104" />
  <row Id="14084" PostId="5316" Score="0" Text="I asked for recommendations to collect them here publicly. This is another one that is admittedly &quot;suboptimal&quot;." CreationDate="2018-12-19T14:48:36.287" UserId="5943" />
  <row Id="14085" PostId="5316" Score="0" Text="Perhaps, then, you could edit the answer to address what the book covers, that you need, and where it falls short of the objectives. Give the future readers of your answer what they need to know about the book as they try to decide which resource they might use for their purposes." CreationDate="2018-12-19T15:02:47.753" UserId="104" />
  <row Id="14099" PostId="5320" Score="0" Text="How do you intend to use the output from the &quot;tool&quot;? Is the objective to use it in a visual interactive presentation (such as projected during a lecture), or in a static context to which the students have current and future access (such as shared docs in Google Docs), or even a printout handed to the students prior to or during the presentation?" CreationDate="2018-12-23T00:43:08.590" UserId="104" />
  <row Id="14094" PostId="5321" Score="0" Text="I disagree about line by line comments. It is, in particular, a terrible coding practice. If the code doesn't speak for itself it is broken. If the comments and code don't agree, they are probably both wrong. If you do this as an active practice when demonstrating, I fear that the students will want to take it up themselves. In professional circles using high level languages (not assembler) inline comments are considered to be a _code smell_. Don't encourage it. The solution is  (a) better names and (b) shorter functions/methods. Then all you need to comment is the intent using, say, javadoc." CreationDate="2018-12-22T19:55:53.043" UserId="1293" />
  <row Id="14095" PostId="5321" Score="0" Text="@Buffy I agree if the students are a bit more advanced. But for beginners it is helpful to explain basic concepts again. E.g. &quot;why is this a pointer&quot; or &quot;why do I have to check for a certain condition&quot;.&#xA;Of course, speaking names are a must!" CreationDate="2018-12-22T19:59:39.363" UserId="6109" />
  <row Id="14096" PostId="5321" Score="0" Text="You can do that without inline comments. Don't teach them to do things that you don't want them to do themselves. A hand written comment on an overlay isn't the same thing as an inline comment. &quot;But _teacher_ does it. Why shouldn't I?&quot;" CreationDate="2018-12-22T20:03:50.267" UserId="1293" />
  <row Id="14097" PostId="5321" Score="0" Text="Or use pair learning and have one student explain verbally the code of another as it is being written." CreationDate="2018-12-22T20:05:10.997" UserId="1293" />
  <row Id="14098" PostId="5321" Score="0" Text="Always  try to organize your teaching so that you never have to unteach anything. Don't lead them to bad habits of work or thought that you will have to tell them later not to do that. You can be incomplete in explanations, metaphors, etc, but don't take them down the wrong path thinking that you will show them the better path later. It is a bit harder to always consider that, but necessary IMO" CreationDate="2018-12-22T20:13:33.127" UserId="1293" />
  <row Id="14101" PostId="5325" Score="1" Text="I don't have any experience with the course, but you can look here for an approach: https://cseducators.stackexchange.com/q/4379/1293" CreationDate="2018-12-27T20:18:38.857" UserId="1293" />
  <row Id="14102" PostId="5325" Score="0" Text="This is a quite an interesting question. I'm mulling it over to see if I can generate anything helpful that goes beyond the answer of mine that @Buffy linked to." CreationDate="2018-12-27T22:39:37.397" UserId="27" />
  <row Id="14103" PostId="5325" Score="0" Text="Working on an answer as well, using my experience form being A+ certified by CompTIA. In the mean time, join our sister site [SuperUser](superuser.com) and get familiar with them. You'll probably need answers from them as the year progresses." CreationDate="2018-12-27T23:05:27.050" UserId="104" />
  <row Id="14105" PostId="5325" Score="0" Text="Can you add a link to a definition of A+, so thoughs of us in other parts of the world can find out about it." CreationDate="2018-12-28T10:10:30.917" UserId="204" />
  <row Id="14123" PostId="5325" Score="0" Text="Thanks for the interest and support - here's a link to what A+ is. Gypsy also wrote a great summary and overview. https://certification.comptia.org/certifications/a" CreationDate="2018-12-31T04:30:16.440" UserId="3990" />
  <row Id="14104" PostId="5326" Score="2" Text="Great question, and welcome to [cseducators.se]! Not my area of expertise,, but Ihope you get some helpful answers here :)" CreationDate="2018-12-28T03:24:05.560" UserId="27" />
  <row Id="14145" PostId="5326" Score="0" Text="IMO the question is incomplete without a syllabus. E.g. I attended a 24-lecture course on databases which didn't include a single statement of SQL, but other database courses might be primarily about SQL. Do you want the textbook to cover No-SQL databases? Do you want it to discuss the deviations from ANSI SQL of the major vendors? Etc. etc. etc." CreationDate="2019-01-09T08:49:38.447" UserId="1219" />
  <row Id="15930" PostId="5326" Score="0" Text="Nowadays I would expect a proper introduction to databases to also cover NoSQL databases. They're not a niche thing anymore that you only cover in the last lecture if you have time left." CreationDate="2019-12-10T09:35:28.597" UserId="8696" />
  <row Id="14124" PostId="5327" Score="0" Text="Thank you Gypsy. I am just kind of frustrated because I don't understand why I absolutely have to teach A+. I feel humiliated when I have to teach these kids something I don't know and their parents are paying so much tuition (tuition is 40,000$) at this school for students with learning differences." CreationDate="2018-12-31T04:31:27.290" UserId="3990" />
  <row Id="14125" PostId="5327" Score="0" Text="I would like to turn it into physical computing. I only know the important structure of the computer in an abstract sense - for example, I don't know what SODIMM, or DDR2 or DDR3 is, but I did do Nand2Tetris, so I could have students fill in diagrams of how RAM is just a bunch of registers and then you could replace memory inside those registers. But I am really lacking any real lesson plan or worksheets resources for implementing A+." CreationDate="2018-12-31T04:33:53.050" UserId="3990" />
  <row Id="14126" PostId="5327" Score="2" Text="Frustration at having to teach a &quot;foreign&quot; subject is common. Especially with teacher shortages. (Maybe if they got a better pay there would be more teachers.) Learning the A+ material personally can't hurt you - you could save money when you don't need to call for support on your own computer." CreationDate="2018-12-31T04:35:52.827" UserId="104" />
  <row Id="14127" PostId="5327" Score="0" Text="Frankly, I can't get over the fact that I don't see A+ as real computer science and ultimately not super helpful for the students in the future, and I can't help but think my admin had no idea what A+ was or why the previous teacher would include it in the curriculum for computer science. They probably just thought - oh wow, kids building a computer and taking apart things. That would be awesome!" CreationDate="2018-12-31T04:37:18.323" UserId="3990" />
  <row Id="14128" PostId="5327" Score="0" Text="But what on earth does building a computer mean, and how do I do it with 0 budget, a bunch of old donated servers that are missing god knows what, and 10 raspberry pis with only 5 functioning sets of keyboards and monitors? I think I am just going to come up with 5 months of lesson plans and tell my chair that I am not teaching this class next year. They are already aware of my issues with the course. I am going to teach APCSP instead next year, which is right where I want to be because I hold a masters in computer science." CreationDate="2018-12-31T04:38:41.557" UserId="3990" />
  <row Id="14129" PostId="5327" Score="1" Text="In any case, while the transition from one discipline to another is different than your case, one of the moderators had to switch from music to computer science. Perhaps you can stop into our chat room, [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom) and try catching up with @BenI for some general help with the switch." CreationDate="2018-12-31T04:39:25.480" UserId="104" />
  <row Id="14130" PostId="5327" Score="0" Text="Sorry, hope I don't sound arrogant. I don't mean to put down my school or department or previous teacher. I am just worried because I'm frantically trying to assemble lesson plans for 1/7 to 6/11 and I don't have a strong sense of what I want to do, and I am trying to put the effort in now and not have anxiety-typed procrastination." CreationDate="2018-12-31T04:41:44.190" UserId="3990" />
  <row Id="14131" PostId="5327" Score="1" Text="Sounds like you've got the right plan, and attitude. One possible benefit to the A+ choice in your situation is that, as a physical thing, it has better potential to &quot;reach&quot; the ADHD students. Try finding the Meyers book I referenced, from the embedded link. It should be available from your public library, ILL if necessary, and that won't affect the budget much at all." CreationDate="2018-12-31T04:44:52.990" UserId="104" />
  <row Id="14186" PostId="5328" Score="0" Text="I have used resources from these, they are definitely good quality." CreationDate="2019-01-19T16:44:31.420" UserId="5349" />
  <row Id="14111" PostId="5329" Score="2" Text="Excellent answer, welcome to [cseducators.se]. From a personal perspective I really appreciate the sharing of material, and CC-licensing is even better. Kudos to enki as well for supporting both students and open source." CreationDate="2018-12-29T02:19:19.053" UserId="104" />
  <row Id="14110" PostId="5330" Score="1" Text="Welcome to [cseducators.se]! Nice first contribution, and I hope we see more of you around :). Once you have the rep, feel free to visit the chat room and introduce yourself. (It's been slower going in the chatroom lately, but there's almost always one of the site regulars around, and you can type @ and any recently posting user (such as `@buffy`, `@gypsyspellweaver`, or `@beni`) to ping them and get a greeting :)" CreationDate="2018-12-28T19:06:15.830" UserId="27" />
  <row Id="14120" PostId="5333" Score="0" Text="I've given an answer, but I wonder if I've missed something in your question that makes it harder." CreationDate="2018-12-30T15:51:53.847" UserId="1293" />
  <row Id="14187" PostId="5339" Score="0" Text="A course may have mixed objectives. For example, when given an assignment to sort an array, the student may struggle with the development environment, the algorithm, the syntax, the analysis of the problem, writing test data, naming variables, programming structure, proper indenting of code and of course the programming paradigm. The course must have a specific set of objectives and using these objectives the marking can be set accordingly by giving the appropriate weight to each of the above factors." CreationDate="2019-01-20T02:17:48.443" UserId="6463" />
  <row Id="17963" PostId="5340" Score="0" Text="I once reduced Normalization to four simple sentences, but students still have to visualize what is happening, which takes many nights of sleep to do. Then, &quot;to comprehend the nectar, requires sorest need&quot;, brought on by carefully designed assignments. It is a long struggle to learn this stuff, I don't believe that it can be made easy." CreationDate="2021-05-02T12:31:34.033" UserId="5349" />
  <row Id="14137" PostId="5341" Score="1" Text="See: [Stack Overflow question](https://stackoverflow.com/q/16088295/7412956) and CERN's notes on [Clink](https://root.cern.ch/cling). You can have a REPL for C++." CreationDate="2019-01-06T09:26:01.220" UserId="104" />
  <row Id="14139" PostId="5341" Score="0" Text="@GypsySpellweaver I thought this site is for both **teaching and learning** strategies." CreationDate="2019-01-07T09:40:09.220" UserId="204" />
  <row Id="14142" PostId="5341" Score="0" Text="@ctrl-alt-delor The site is as you say, basically. The Q originally was about development strategies. It still seems more developer-oriented than education-oriented, to me, and could benefit from more &quot;focus&quot;." CreationDate="2019-01-07T16:46:27.113" UserId="104" />
  <row Id="14143" PostId="5341" Score="0" Text="I disagree.  REPLs are extremely useful teaching tools. Java now has jshell, and I find this tool to be extremely helpful." CreationDate="2019-01-07T16:53:19.390" UserId="21" />
  <row Id="14140" PostId="5342" Score="0" Text="And tests should be automated, and published so students know what they have to do, and can test their own code." CreationDate="2019-01-07T09:52:13.737" UserId="204" />
  <row Id="14155" PostId="5342" Score="0" Text="Personally, I think that if you are using an automated test suite, those test should not be published. Using a website like gradescope, you can allow students to run the tests as many times as they wish, but the risk is that they just hard-code in the solutions to the individual test cases." CreationDate="2019-01-11T22:27:24.680" UserId="6308" />
  <row Id="14141" PostId="5344" Score="0" Text="I can't remember the name of the study. But if you give sumative feedback (grades), then you negate formative feedback, and learning. You can measure or you can teach, you have to choose. It may be that you can separate these things." CreationDate="2019-01-07T09:58:38.767" UserId="204" />
  <row Id="14159" PostId="5345" Score="0" Text="Your point about TDD is well taken. It is hard, however, for a newcomer to begin writing tests when one doesn't know very much about how the language works." CreationDate="2019-01-12T04:30:36.883" UserId="6417" />
  <row Id="14166" PostId="5345" Score="0" Text="You have to teach test writing, of course, preferably with in-class demonstrations. Initially the tests can't be very sophisticated, but they shouldn't be in any case. Prefer lots of simple tests over a few complex ones. This makes them easier to write and more useful as they give fine-grained error reporting. Note that tests are run as suites, not individually. The tests in a suite are independent of one another. In Eclipse, if you have a test for a non-existent method, the IDE will write the stub for you, so it makes things simpler." CreationDate="2019-01-12T20:33:42.477" UserId="1293" />
  <row Id="14158" PostId="5347" Score="0" Text="I really appreciate your answer, I've been looking for awhile for a discussion like this one but haven't seemed to come across a good one. Your points are really insightful, all three of them. I really like your first point especially, that c++ has a long history and that it makes sense to &quot;study carefully major language features and understand the true reason why they exist&quot;. I also didn't realize that experienced c++ programmers spend so much time thinking about types. Do they use typedef very often?" CreationDate="2019-01-12T04:26:39.253" UserId="6417" />
  <row Id="14160" PostId="5347" Score="0" Text="One thing I forgot to mention is unit tests: if you write them, this is an additional mechanism for fast feedback loop. Typedefs are useful indeed, but in practice they are less useful since they don't introduce new types. Even if you say &quot;typedef int MyInt;&quot;, you still can mix int and MyInt everywhere, so here compiler won't help to find inconsistencies." CreationDate="2019-01-12T08:52:53.737" UserId="6409" />
  <row Id="14336" PostId="5347" Score="1" Text="@AllenWang typedef isn't very common because it *only* creates a new name for a type. This can be useful as a mneumonic device, but the compiler won't catch mistakes. If you need a new type, define it as a class or a struct with the proper member functions. Also: look into templates. Templates are far more powerful than generics in Java, and they preserve type information (so you can call overloaded functions). In many cases templates can completely replace the need for an inheritance heirarchy" CreationDate="2019-02-19T07:32:45.663" UserId="4233" />
  <row Id="14146" PostId="5348" Score="7" Text="Strings (an array of strings).  Compare fixed sized chars to varchar as in databases, or C, C++ or other language." CreationDate="2019-01-10T15:26:44.193" UserId="3799" />
  <row Id="14165" PostId="5348" Score="0" Text="Spreadsheets? I know most are implemented as sparse arrays, but the earliest were implemented with jagged arrays." CreationDate="2019-01-12T18:46:22.023" UserId="1537" />
  <row Id="14148" PostId="5349" Score="0" Text="Welcome to [cseducators.se] and thank you for a nice anwer. Once you have enough [Reputation](https://cseducators.stackexchange.com/help/whats-reputation) (20pts.), why don't you stop by the sites chatroom [The Classroom](https://chat.stackexchange.com/rooms/59174) to discuss this, but my sense here is that this would make a good question on its own. The concept of feedback doesn't work well in comments, which are considered ephemeral here, but could make good answers to a question. Not that it is not also a good answer to this question, of course." CreationDate="2019-01-10T22:12:05.723" UserId="104" />
  <row Id="14151" PostId="5351" Score="0" Text="It's quite obvious that a rectangular array would be a bad idea putting `Hubert Blaine Wolfeschlegelsteinhausenbergerdorff` in your rectangular array of names is going to put a hell of a lot of waste at the end of `John Doe`." CreationDate="2019-01-11T00:16:21.217" UserId="990" />
  <row Id="14147" PostId="5352" Score="1" Text="Hmmm. Perhaps as a thought experiment, but not in the real world. I lived in the time of 24 hour turn-around and coding on a key-punch. No one should have to do anything like that. Fast turn around is a universally good thing for learning, but you need different techniques today, such as Test First. I've done it both ways. Don't even think about going back.  That said, I don't use a REPL, not because it is too fast, but because it keeps an insufficient record of my work." CreationDate="2019-01-10T21:54:09.950" UserId="1293" />
  <row Id="14149" PostId="5352" Score="0" Text="Since you programmed in the time of key-punches, you've already learned those lessons, and don't need to go back." CreationDate="2019-01-10T22:30:28.717" UserId="59" />
  <row Id="14150" PostId="5352" Score="0" Text="But I don't program &quot;like that&quot; in the modern age. I actually _learned_ something in the modern world." CreationDate="2019-01-10T22:31:30.367" UserId="1293" />
  <row Id="14152" PostId="5356" Score="0" Text="Any references for learning the implementation?" CreationDate="2019-01-11T11:15:17.800" UserId="6434" />
  <row Id="14324" PostId="5356" Score="0" Text="@jay rosetta code is a good resource. You can google for more." CreationDate="2019-02-18T18:42:44.437" UserId="1790" />
  <row Id="14162" PostId="5358" Score="0" Text="Something short to keep in mind: not every GUI platform for Python works well together with proper scoping (there are famous libraries where the mainscreen is in the global scope and can't be encapsulated, go figure). Keep in mind to check for such things if you want to teach your students to do it the &quot;right&quot; way, since it appears that's important to you." CreationDate="2019-01-12T14:06:57.193" UserId="1504" />
  <row Id="21470" PostId="5358" Score="0" Text="Maybe a to do list?  As [TodoMVC](https://todomvc.com/) as famour for anyone who wants to do webapp." CreationDate="2023-10-12T05:30:08.240" UserId="9884" />
  <row Id="14171" PostId="5359" Score="1" Text="I've used [hour of code](https://hourofcode.com/ca/learn) for tools similar to the Greenroom (there are some college level materials and some of the games are great practice sessions for college students, think 15-20 min instead of 4x45 minute lessons) - I've specifically used [these games](https://codecombat.com/teachers/hour-of-code) to teach event-driven programming for a web/phone based course I helped with" CreationDate="2019-01-13T04:31:29.017" UserId="6399" />
  <row Id="14157" PostId="5360" Score="5" Text="These are great ideas for text-based games; that's what I was going to suggest but your list is more complete than mine would have been.  Welcome to the site; hope you stick around!  :)" CreationDate="2019-01-12T01:29:44.420" UserId="1103" />
  <row Id="14163" PostId="5360" Score="4" Text="I disagree that debugging skills should be considered as independent learning. They should be covered by the course itself." CreationDate="2019-01-12T17:49:40.693" UserId="660" />
  <row Id="14169" PostId="5360" Score="0" Text="Ah, I may have not been clear. I think that students should be explicitly taught the core skills that enable them to work independently, and I included debugging in that list. I certainly don't think that students should have to learn debugging on their own. Rather, that learning it enables them to be more independent." CreationDate="2019-01-12T22:16:12.227" UserId="6308" />
  <row Id="14167" PostId="5361" Score="2" Text="Please say more about &quot;circuit python&quot;. An example would be good. What is  a &quot;cool&quot; demo or a &quot;cool interactive project&quot;?" CreationDate="2019-01-12T20:36:52.510" UserId="1293" />
  <row Id="14173" PostId="5361" Score="0" Text="Depends on the scope of the class, so I'd say it's up to the OP. My point really is that building something practical, and hands on, can help ground programming. Turning LEDs different colors at the touch of a button, or having them activate based on a particular level of sound or light, can help turn more abstract concepts into something tangible." CreationDate="2019-01-13T15:43:58.730" UserId="6435" />
  <row Id="14164" PostId="5363" Score="4" Text="This requires the students to understand all kinds of web techniques, most notably HTTP and HTML, which might be too advanced for freshmen students (without being the actual subject of the course). It makes more sense at a later stage of the curriculum when they already learned about network stuff." CreationDate="2019-01-12T17:57:33.637" UserId="660" />
  <row Id="14168" PostId="5363" Score="0" Text="How is a web app not a GUI? The client is quite graphic usually." CreationDate="2019-01-12T21:22:16.850" UserId="1504" />
  <row Id="14170" PostId="5363" Score="0" Text="@mast with Python? the web app would be a GUI app (if its actually an app not an interface) but its not event driven like a standalone GUI app would be (or rather to make it event driven you would have to switch to Javascript) - so it would end up not teaching the students the same lessons (or language). I wouldn't say standalone GUIs are rare - remember cell phone games and tools as well as office applications are still typically stand-alones. Just depends on the field (like I will probably never write another serious webapp but GUIs? yeah, all the time in C# with python backend)" CreationDate="2019-01-13T04:05:00.180" UserId="6399" />
  <row Id="14172" PostId="5363" Score="0" Text="@JGreenwell thats what I was getting at. Creating the actual GUI for those apps is often not done with Python. The skills to build a web app may be outside the scope of a freshman curriculum, but you should not forget that this is probably why those students signed up for Computer Science in the first place; to learn mainstream app building techniques. I doubt they signed up because they wanted to learn algorithms. And both Flask and Django are easy enough to learn from the tutorials I posted, I taught myself both using these." CreationDate="2019-01-13T10:58:17.113" UserId="6439" />
  <row Id="19468" PostId="5363" Score="1" Text="Back-end web gives a pretty poor coolness-to-difficulty ratio needed to keep new learners engaged. Data persistence isn't interesting until one has already created a front-end game or todo list and wants to keep a high score table (and localStorage isn't exciting any more) or add multiplayer features. This lack of visual options (aside from turtle) is part of why I find Python to be a less engaging language for new students than JS/HTML5." CreationDate="2022-03-18T21:37:35.483" UserId="9426" />
  <row Id="14208" PostId="5371" Score="2" Text="I used to co-teach with another instructor, we would alternate about every month, so one would prepare while the other was teaching. Our approaches were very different. Your approach sounds like hers: carefully worked out lectures with notes and quizlets afterward, requiring design work before coding and so on. Mine was more lazzes-faire: just turn in your solution and I will give feedback. Both worked. Neither seemed substantially better than the other. You can lead a student to water, but you can't make him (or her) think. It would be good if my former coworker was around to answer you." CreationDate="2019-01-26T00:58:02.333" UserId="5349" />
  <row Id="14210" PostId="5372" Score="0" Text="Sleep is the most important factor in retaining learning. We always know things better the next day. They make more sense the second time we look at them." CreationDate="2019-01-26T01:59:29.717" UserId="5349" />
  <row Id="14213" PostId="5372" Score="0" Text="@ScottRowe, I think the statement about &quot;sleep&quot; is too strong. True, however, that the mind works even when we don't force it, so a period of rest can be useful. Reinforcement and feedback are probably more important, however." CreationDate="2019-01-27T15:03:00.870" UserId="1293" />
  <row Id="14203" PostId="5373" Score="0" Text="I guess this question might belong on math-educators, since I'm teaching in the math dept, but I figured CS educators would be more likely to know this. Feel free to migrate." CreationDate="2019-01-25T18:16:12.460" UserId="6485" />
  <row Id="14204" PostId="5373" Score="0" Text="Also, is there a tag like `libraries` I should be using? Or would someone please create one? Thanks!" CreationDate="2019-01-25T18:16:38.757" UserId="6485" />
  <row Id="14205" PostId="5373" Score="0" Text="This isn't in my wheelhouse, but it is certainly topical here." CreationDate="2019-01-25T18:39:30.877" UserId="27" />
  <row Id="14206" PostId="5373" Score="1" Text="Unfortunately a bit specialized for this audience. I wonder if StackOverflow might be a better place to find people with their heads deep in the libraries. But I also wonder why you want this. Do you intend for students to explore the code? That might be worth doing, though library code might be a bit messy with specialized bits and pieces obscuring the algorithm." CreationDate="2019-01-25T19:01:09.997" UserId="1293" />
  <row Id="14207" PostId="5373" Score="1" Text="Is there any particular reason why you need a large list of libraries? Over here, we're generally helpful with questions about lesson plans, teaching techniques and things like that, but we generally aren't good with questions like this since we aren't necessarily knowledgeable about practical CS. If you could give some context about the lesson you're trying to use this list in, we could probably be much more helpful. However, if you just need this list, it'd probably be best for you to try another site, since we don't really  have the experts to answer this." CreationDate="2019-01-25T20:15:57.363" UserId="58" />
  <row Id="14212" PostId="5373" Score="0" Text="As others have noted, this is a highly specialized question. Even though I have been using image libraries for decades in the practical sense, and have probably used the algorithm, I have never heard of the Paeth algorithm until now. Users of libraries typically don't look beyond &quot;will it do what I need?&quot; And &quot;how do I make it work?&quot;" CreationDate="2019-01-26T13:28:11.480" UserId="1537" />
  <row Id="14221" PostId="5373" Score="0" Text="One more thought: I would assume that most image processing libraries are rotating using other algorithms due to interpolation issues, but I'm not really an expert in this field so I might be wrong." CreationDate="2019-01-28T08:00:40.377" UserId="6109" />
  <row Id="14209" PostId="5374" Score="1" Text="Wow, what a lovely answer!" CreationDate="2019-01-26T01:57:06.790" UserId="5349" />
  <row Id="14222" PostId="5378" Score="0" Text="I'm not sure I entirely agree with you in any case, but my context is rather different than you are suggesting. I teach in a High School. Not only is having kids simply leave is not an option, permitting even a small number of kids to be visibly unfocused during my class time gets me in trouble with my administration and jeopardizes my career. This isn't NIMBYism, this is keeping my job." CreationDate="2019-01-29T18:05:24.380" UserId="27" />
  <row Id="14223" PostId="5379" Score="5" Text="Hi Allison, welcome to [cseducators.se]!  Could you add in a bit of detail about what sorts of things were covered in those 3-7 years?  That sounds like enough time to cover AP CS A and then some.  Also, what are the ages of the students?  Sophomores?  Seniors?  Freshmen?" CreationDate="2019-01-31T01:34:57.933" UserId="27" />
  <row Id="14225" PostId="5379" Score="1" Text="Are there some books/curricula you’re considering? Have you done some research already? More context will help yield some better answers." CreationDate="2019-01-31T18:53:05.897" UserId="76" />
  <row Id="14257" PostId="5379" Score="0" Text="Hi Ben, thank you for your response. The 3-7 years is a combination of working in Scratch, HTML/CSS, AppLab, and JavaScript. When they are Sophomores they take the AP CSP class. Depending on when students join our network, most students would enter the AP CSA class with the above content covered. Students would take the AP CSA class as juniors and seniors." CreationDate="2019-02-11T17:36:29.427" UserId="6501" />
  <row Id="14258" PostId="5379" Score="0" Text="Hi Peter, I am in the middle of researching curricula and currently not excited about any free options." CreationDate="2019-02-11T17:37:53.470" UserId="6501" />
  <row Id="16575" PostId="5379" Score="0" Text="Sorry I missed this earlier. Do you know about the APCS mailing lists run by the College Board? These sorts of things are widely discussed there." CreationDate="2020-06-11T15:28:22.607" UserId="1293" />
  <row Id="17899" PostId="5379" Score="0" Text="I am not a fan of this exam. I have seen students who nickeled it but who can't write and debug a complete application.  No programmer in his right mind writes out code longhand.  Smart programmers use top-down design which requires repeated instertions into code outlines." CreationDate="2021-04-15T19:46:22.930" UserId="21" />
  <row Id="14240" PostId="5382" Score="3" Text="In my experience, people only begin to really understand programming once they have three very different languages under their belt." CreationDate="2019-02-06T04:24:14.740" UserId="1537" />
  <row Id="14242" PostId="5382" Score="0" Text="@pojo-guy Agreed.  :)" CreationDate="2019-02-06T13:04:13.130" UserId="27" />
  <row Id="14243" PostId="5382" Score="0" Text="If you want good C++ programmers, first teach them how to program correctly. It is a general competence, and C++ is definitely not the best way to learn it, because it is very complex language. They'll learn C++ later, if they need it." CreationDate="2019-02-07T09:43:52.060" UserId="2103" />
  <row Id="14245" PostId="5382" Score="0" Text="@MichelBillaud It wouldn't normally be my favorite choice for a first language, but in the spirit of &quot;The best workout is the one you'll actually commit to and do&quot;, I'd say if OP finds it motivating, then it's where they should start." CreationDate="2019-02-07T21:49:10.280" UserId="27" />
  <row Id="14246" PostId="5382" Score="0" Text="@Ben I Actually, a big difference between &quot;recommending to someone who insists on learning C++&quot;, and &quot;recommending as a first language to indifferent learners&quot;. Studies show that C++ as 1st language leads to the highest failure and quitting rates." CreationDate="2019-02-09T09:32:09.993" UserId="2103" />
  <row Id="14248" PostId="5382" Score="0" Text="@MichelBillaud Interesting!! Do you have a source for that? I'd like to read further." CreationDate="2019-02-09T14:07:31.900" UserId="27" />
  <row Id="14249" PostId="5382" Score="0" Text="« Failure Rates in Introductory Programming Revisited », by Watson and Li; http://dro.dur.ac.uk/19223/" CreationDate="2019-02-09T17:00:27.557" UserId="2103" />
  <row Id="14253" PostId="5382" Score="0" Text="@MichelBillaud It doesn't appear to be a statistically significant result: &quot;The percentage of passing students appears to be&#xD;&#xA;lower for C (61.1%) and C++ (56.2%) however the differ-&#xD;&#xA;ences are not significantly different to the other languages&#xD;&#xA;whose pass rates are in the range 65% to 75%. This result is&#xD;&#xA;consistent with the work of [2] who also found no significant&#xD;&#xA;differences in pass rates based upon the language taught.&quot;" CreationDate="2019-02-09T23:27:25.017" UserId="27" />
  <row Id="14256" PostId="5382" Score="0" Text="I'm a bit puzzled by these remarks in the paper considering fig 5. where C++ has say 39 % non pass rate and Python has 26. &#xA;With such figures, I'm a bit reluctant to agree with  &quot;In Figure 5 it can be seen that the mean percentage of non-passing students does not vary considerably by programming language.&quot;  Are they referring to their category of &quot;others&quot; at 33 ?" CreationDate="2019-02-10T21:25:57.420" UserId="2103" />
  <row Id="14227" PostId="5383" Score="1" Text="Hey, I just wanted to let you know that if you'd like to chat with some of the other folks in our community, there's a [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom) where you can do that. Just wanted to make you aware of it, in case you hadn't seen :)" CreationDate="2019-02-02T02:17:17.363" UserId="58" />
  <row Id="14231" PostId="5383" Score="0" Text="@thesecretmaster thanks.  I'm in a different time zone so no-one there atm.  Will check in earlier next time :)" CreationDate="2019-02-02T21:03:44.517" UserId="2706" />
  <row Id="14244" PostId="5383" Score="0" Text="for each programming language L, there is at least one person P who recommends it as a first language for some reason R." CreationDate="2019-02-07T16:24:19.410" UserId="2103" />
  <row Id="14229" PostId="5386" Score="5" Text="You need to say a lot more about your goals for these students. I assume they aren't the same for every level. Eighth graders, for example, have more (and different) cognitive ability than second graders." CreationDate="2019-02-02T16:01:28.067" UserId="1293" />
  <row Id="14230" PostId="5386" Score="1" Text="What sort of topic do you want to teach? There are a whole range of resources out there, and we'd be much more helpful if you could specify what you're looking for a bit." CreationDate="2019-02-02T18:36:19.017" UserId="58" />
  <row Id="14234" PostId="5386" Score="0" Text="Thanks for your quick response. My expectation is latest computer science book which you know for student on any grade with in Grade 2 and Grade 8 ICGSE or CBSE or other pattern" CreationDate="2019-02-03T04:57:04.843" UserId="6123" />
  <row Id="14252" PostId="5386" Score="0" Text="@lahith I added your latest comment to the question. It does not add much. I will vote to close, until you address the comments above. (Note I do not know ICGSE etc. so help me out)." CreationDate="2019-02-09T17:31:55.730" UserId="204" />
  <row Id="14235" PostId="5387" Score="0" Text="Thank you so much for your detailed response. My expectation is latest computer science book/online resource  which you know for student level. CS unplugged looks nice but it is mostly up to the age of 10 years." CreationDate="2019-02-03T05:07:04.370" UserId="6123" />
  <row Id="14232" PostId="5389" Score="0" Text="I love this answer, and this was perfect timing. I am just about a week and a half from introducing NFAs to a new batch of students, so I will put this to use right away.  Wonderful!  Also, welcome to [cseducators.se]!  Come by [our chat](https://chat.stackexchange.com/rooms/59174/the-classroom) and say hi!" CreationDate="2019-02-03T03:17:13.927" UserId="27" />
  <row Id="14236" PostId="5389" Score="0" Text="@BenI. Thanks :-)  I tried to do a long followup reply, but the SE sub-comments are too limited in size, so I've gone back and made an expanded edit of my answer." CreationDate="2019-02-03T14:28:52.933" UserId="4799" />
  <row Id="14250" PostId="5394" Score="0" Text="Who is the course for?: What age? What level are they at? What experience?" CreationDate="2019-02-09T17:25:24.177" UserId="204" />
  <row Id="14254" PostId="5394" Score="0" Text="Capstone means it's the final class in a curriculum, an undergraduate program in this case." CreationDate="2019-02-10T00:47:31.197" UserId="283" />
  <row Id="14262" PostId="5394" Score="0" Text="I'm not quite sure how an Android oriented codebase differs from the norm in regards to unit testing. Am I missing something? Isn't this just a matter of testing whatever business logic the code contains?" CreationDate="2019-02-13T14:29:21.157" UserId="2164" />
  <row Id="14263" PostId="5399" Score="3" Text="I can give a couple of tips: Check your spelling (a**n** array, tho**ugh**) and use [string interpolation](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated) in the console messages" CreationDate="2019-02-13T14:47:05.910" UserDisplayName="Saul Marquez" />
  <row Id="14264" PostId="5399" Score="1" Text="`//When you want to reserve a storage area in the computers memory its called &quot;defining&quot;` or allocating, or whatever you're actually doing. That statement is misleading. Other comments are quite misleading as well. I won't put this in an answer since I don't think we can tell whether this is a good tutorial without knowing more about your target audience (for example, what do they already know and what age bracket are they in), but the least you could do is for your advice to be correct." CreationDate="2019-02-13T14:53:29.233" UserId="1504" />
  <row Id="14265" PostId="5399" Score="2" Text="_&quot;Now to give this variable a value you use &quot;=&quot; sign&quot;_. I'm not an educator then this is just my opinion but I'd try hard to teach the students the right terminology from the very beginning. To **build a vocabulary** is as important as learning the language syntax. Another opinion: I wouldn't insist on the &quot;...all in one step...&quot; thing, they know they can then I'd try to show only RIIA (which is a very good habit)." CreationDate="2019-02-13T15:14:24.687" UserDisplayName="Adriano Repetti" />
  <row Id="14266" PostId="5399" Score="0" Text="@AdrianoRepetti would &quot;now to assign a value to this variable&quot; be better. What do you mean with RIIA?" CreationDate="2019-02-13T15:20:16.617" UserId="6543" />
  <row Id="14267" PostId="5399" Score="0" Text="@Mast They are complete beinngers aged 15/16. Which advice is incorrect if I may ask?" CreationDate="2019-02-13T15:23:38.150" UserId="6543" />
  <row Id="14268" PostId="5399" Score="0" Text="I suspect @AdrianoRepetti meant RAII, resource acquisition is initialization" CreationDate="2019-02-13T15:25:46.823" UserId="1504" />
  <row Id="14269" PostId="5401" Score="3" Text="Welcome to [cseducators.se]!  I daresay, we'd welcome some input from the codereview folk, who often have a different (but very valuable) perspective!  I hope it feels nice to know that you're impacting how information will be imparted by teachers to the next generation of developers :)  Feel free to take a look around, I'm sure that you will have a lot to add." CreationDate="2019-02-13T20:21:32.013" UserId="27" />
  <row Id="14408" PostId="5403" Score="4" Text="I think answering their questions (and ensuring they feel comfortable asking) should probably be much higher priority in your teaching. If they're still learning, they probably need a lot of examples, too. I'm guessing they're not as fluent with C as your impression seems to be. They probably need more practice with it." CreationDate="2019-02-22T23:01:25.017" UserId="5296" />
  <row Id="14415" PostId="5403" Score="0" Text="I find your phrase &quot;*mapping an individual's thoughts to formal language*&quot; mildly disturbing. Just sayin'..." CreationDate="2019-02-23T21:40:20.140" UserId="5349" />
  <row Id="14459" PostId="5403" Score="1" Text="state machines, as in finite automata?" CreationDate="2019-03-07T04:48:18.603" UserId="6701" />
  <row Id="14463" PostId="5403" Score="0" Text="Scott: writing code is giving a shape of code to one's thoughts of operations and the like, for disturbing it may be." CreationDate="2019-03-07T15:30:14.143" UserId="6546" />
  <row Id="14465" PostId="5403" Score="0" Text="Kate: yes, state machines as in automata." CreationDate="2019-03-07T18:13:36.613" UserId="6546" />
  <row Id="17506" PostId="5403" Score="0" Text="I know this is late but I wanted to point out a great exercise to make it clear why you should not have just one giant function: write a 200-500 line program using functions and good design principles, and then add a bug. Next, make a copy and inline all the functions into the main, and hand both copies to the students and ask them to find the bug. They will see for themselves why bad code is considered bad. They will also see how much easier it is to find the bug in the well written code, despite its size." CreationDate="2021-01-11T05:37:10.010" UserId="9971" />
  <row Id="14274" PostId="5406" Score="0" Text="*&quot;You gotta pay your dues if you wanna sing the blues, but you know it don't come easy. You don't have to shout or leap about, you can even play them easy.&quot;*" CreationDate="2019-02-15T00:52:08.123" UserId="5349" />
  <row Id="14275" PostId="5408" Score="1" Text="The perceived flatness/shallowness of Vue might be a bonus for your purposes. With a smaller but more streamlined tool, students are less likely to get lost in the intricacies of the tool itself and thus be more able to focus on what you are trying to teach." CreationDate="2019-02-15T11:17:56.333" UserId="2715" />
  <row Id="14276" PostId="5408" Score="1" Text="While I can completely understand not wanting to set your students up for failure with a subpar framework, 50-60 minutes with any of those (or any ones not on your list for that matter) should tell them (or you!) real quick whether or not it will cut the mustard for their purposes (or is suited to them personally: I fell in love with React immediately and to this day still cannot force myself to make a non-toy Angular app)." CreationDate="2019-02-15T16:48:12.533" UserId="1790" />
  <row Id="14283" PostId="5409" Score="2" Text="What you describe is (or close to) flipped learning/class-room. Why do we not do it. I think it comes down to economics: We are paid to teach, so we teach (badly). We are afraid that if we make our-selfs not need, then we will not be needed. This is however not true, you will still be needed. Have a read about flipped class room." CreationDate="2019-02-16T16:55:25.383" UserId="204" />
  <row Id="14280" PostId="5411" Score="0" Text="I have been coaching a student, that has been given lab work with unit tests to pass. While I agree that this is a good idea, we found that we had to write our own tests. To do TDD: you have to keep asking what is the next test?; What test will lead to the simplest next step? I don't know if this can be predicted. If we make a different choice then the next choices start to diverge, event though we end up passing all the tests in the end." CreationDate="2019-02-16T16:10:40.077" UserId="204" />
  <row Id="14289" PostId="5411" Score="0" Text="Why not have all students write testcases and award a grade for each one, based on how the other students who answer it get on? If it has no errors then a full grade, less for errors. Have a set period of time for the writing activity, then move to students solving them - by then there should be so many that each student gets a random selection to answer." CreationDate="2019-02-16T20:02:01.287" UserId="6556" />
  <row Id="14278" PostId="5414" Score="1" Text="If you have created a working solution, then by definition you have a set of tests. (If you have not tested it, then any assertion that it is *working*, is just an opinion, and it is safe to ignore it." CreationDate="2019-02-16T16:04:31.360" UserId="204" />
  <row Id="14285" PostId="5414" Score="0" Text="Regarding your question: I checked many platforms, but did not find anyone that allowed the students to submit an entire github repository as a solution. So I wrote one myself: https://github.com/erelsgl/badkan" CreationDate="2019-02-16T17:23:52.030" UserId="1873" />
  <row Id="14284" PostId="5415" Score="0" Text="Interesting. Now that I think of it, I believe that there must be some research in the statistics community about such situation. Can be intereting to check." CreationDate="2019-02-16T17:22:12.540" UserId="1873" />
  <row Id="14363" PostId="5416" Score="1" Text="COBOL was successful for a reason, yes?" CreationDate="2019-02-20T00:26:25.313" UserId="5349" />
  <row Id="14376" PostId="5416" Score="0" Text="@ScottRowe Yes, and the reason was, that is all we had. We have learnt a lot since then. There are much better languages, for both teaching and professional programmers. Your argument is like Microsoft is successful for a reason. In this case it is because they used to be cheaper than Unix. Now it is because we follow each other. (perfect market hypothesis, see https://jimabbondante.files.wordpress.com/2010/02/change-processionary-cat.jpg?w=209&amp;h=228 and https://notmanywise.files.wordpress.com/2012/02/caterpillars2.jpg" CreationDate="2019-02-20T09:32:57.850" UserId="204" />
  <row Id="14380" PostId="5416" Score="0" Text="We have better languages. People do not get better every generation though, they all start with no concepts or experience. The Tower of Babel was not successful. A one-story house is." CreationDate="2019-02-20T12:53:44.493" UserId="5349" />
  <row Id="14388" PostId="5416" Score="1" Text="@scottrowe sorry if I suggested that things are getting better. My impression is that there was a flurry of progress in the 1960s, and then not much else. (an exception being N vs NP, sat solvers. I hear there has been much progress in these over the last 20 years, but these are not programming languages (or for beginners)." CreationDate="2019-02-21T09:23:24.280" UserId="204" />
  <row Id="14413" PostId="5416" Score="0" Text="The video &quot;The Future of Programming&quot; is just as true today as the day it was made. I think everyone should see it. But, I am about to show coworkers how to build web applications with ASP.Net and ADO.Net." CreationDate="2019-02-23T19:35:06.807" UserId="5349" />
  <row Id="17397" PostId="5416" Score="0" Text="@ScottRowe: Can you flesh out the reference to &quot;The Future of Programming&quot; video? Searching online today, I see many different videos with that title." CreationDate="2020-12-14T05:02:01.360" UserId="8137" />
  <row Id="17399" PostId="5416" Score="1" Text="@DanielR.Collins The one by Bret Victor is probably the best." CreationDate="2020-12-14T19:29:27.047" UserId="204" />
  <row Id="17402" PostId="5416" Score="1" Text="@DanielR.Collins This link describes the video on [Bret's web site](http://worrydream.com/dbx/). I have not seen anything about him from the past 5 years, so I am wondering what he is up to." CreationDate="2020-12-16T16:25:56.170" UserId="5349" />
  <row Id="14287" PostId="5417" Score="13" Text="Are they teaching the data structure and code organization concepts behind design patterns?" CreationDate="2019-02-16T19:47:07.040" UserDisplayName="Patricia Shanahan" />
  <row Id="14288" PostId="5417" Score="0" Text="@Patricia they teach Data Structures and the only Code organization concept is MVC" CreationDate="2019-02-16T19:54:46.023" UserId="6555" />
  <row Id="14291" PostId="5417" Score="85" Text="Better than average, I would say!" CreationDate="2019-02-17T01:20:52.213" UserId="1970" />
  <row Id="14293" PostId="5417" Score="45" Text="In my experience learning design patterns in school was pointless.  Worse than pointless actually; some of the students listened to their professors and started using them in their jobs :)  Lots of computer scientists in academia have very little &quot;real world&quot; software engineering experience because it's not their job to be software engineers.  They construct their theory, build their proof of concept, and publish their work, leaving the work of commercialization to others.  Learn the theory in school, learn the engineering on the job." CreationDate="2019-02-17T03:50:26.343" UserDisplayName="user6560" />
  <row Id="14298" PostId="5417" Score="57" Text="*&quot;problems in the real world, both in academia and in the industry, can be more easily handled with a good choice of design pattern&quot;* - I'd disagree with this way of thinking and recommend reading this for a different view: https://softwareengineering.stackexchange.com/a/227880  - Overall, learning &quot;patterns&quot; often isn't useful to an undergraduate or junior programmer, and could even be counter-productive if it results in re-enforcing a misguided way of thinking about OO design.  It's far better to focus on the underlying software design principles such as 'SOLID' and 'GRASP' instead." CreationDate="2019-02-17T08:21:15.320" UserId="6562" />
  <row Id="14304" PostId="5417" Score="48" Text="In computer science, as in every other endeavour, snake oil is not a substitute for thought. Design patterns are not *necessarily* snake oil, but they are often used that way. See many &quot;answers&quot; on the programming forums here for examples of &quot;the best way&quot; to do something by replacing 5 lines of straightforward code with 100 lines that conform &quot;better&quot; to the latest (often half-understood) whims and fancies of the currently fashionable software design gurus. Of course if your productivity is measured by LOC (more snake oil, of course) then &quot;longer&quot; is &quot;better&quot; by definition!" CreationDate="2019-02-17T13:41:17.427" UserId="1352" />
  <row Id="14310" PostId="5417" Score="3" Text="Note: The original design patterns boot has about 20 patterns, and states that this is all there are. It also discusses MVC, but does not list this as a pattern. The book that inspired this one “A Pattern Language” — Christopher Alexander, has about 250 patterns, and states that this is not them all, there are many others. This book is worth a read (When you have some experience). As are the other 2 in the series (“The Timeless Way of Building”, and “the Oregon Experiment”)  You should also read his later works, “The Nature of Order”" CreationDate="2019-02-17T23:33:46.297" UserId="204" />
  <row Id="14313" PostId="5417" Score="21" Text="@alephzero, I think that &quot;*cargo cult*&quot; is a better analogy here than snake oil." CreationDate="2019-02-18T09:12:52.463" UserId="1219" />
  <row Id="14314" PostId="5417" Score="2" Text="As a senior programmer with 17 years of experience I can already tell that you're expecting way too much from your CS course. University programming education is more of a hobby, with very little relevance to industry. Programming for style is not at all what programming for money is. Sit back and enjoy the course while it lasts, but your actual education will start with your first job - and will never end since then." CreationDate="2019-02-18T11:07:33.703" UserId="2800" />
  <row Id="14315" PostId="5417" Score="11" Text="Speaking as a programmer with 40 years of experience, what's a &quot;design pattern&quot;?" CreationDate="2019-02-18T13:12:39.733" UserId="4511" />
  <row Id="14316" PostId="5417" Score="5" Text="@PeterTaylor It's &quot;cargo cult&quot; for the honest folk, and &quot;snake oil&quot; for the shifty guys :P" CreationDate="2019-02-18T13:46:57.193" UserId="1816" />
  <row Id="14322" PostId="5417" Score="6" Text="Honestly, I would say that design patterns warrant at most one optional course in a CS degree, and at that, it would be *theory* of design patterns, rather than any concrete example. Most design patterns are heavily linked to a particular language, and some languages flat out don't have any design patterns, or have at most one that covers everything. It after all a CS degree and not a programming certification." CreationDate="2019-02-18T17:59:27.127" UserId="6585" />
  <row Id="14326" PostId="5417" Score="3" Text="@alephzero I think that design patterns have their place, but their real purpose is unfortunately frequently misunderstood and their importance often exaggerated, see also [this discussion on softwareengineering.se](https://softwareengineering.stackexchange.com/questions/9219/)." CreationDate="2019-02-18T19:01:24.650" UserId="154" />
  <row Id="14327" PostId="5417" Score="3" Text="The advice in the Jargon File for new hackers to learn a LISP (for &quot;the profound enlightenment experience you will have when you finally get it&quot;) is relevant here. What a C++ developer needs to codify as &quot;design patterns&quot; are merely macros in a LISP, and can be thus used as library functions with no need to reimplement them over and over." CreationDate="2019-02-18T20:51:24.003" UserId="5084" />
  <row Id="14329" PostId="5417" Score="5" Text="@BenCottrell SOLID and GRASP are just as harmful as any design pattern. They result in the same sort of dogmatism that leads to nightmare code. The only valid metric of code quality is what-the-hecks per minute." CreationDate="2019-02-19T01:25:16.067" UserId="981" />
  <row Id="14337" PostId="5417" Score="3" Text="@jpmc26 I think you may misunderstand SOLID and GRASP - they are merely sets of principles (i.e. guidelines), and not rules to be followed dogmatically as you suggest -- quite the opposite in fact, they aren't measurable nor can they be defined in any objective terms, if someone happens to treat them this way then they've completely missed the point of those principles, which I can well believe would lead to nightmare code, but only as a result of plainly misunderstanding what those principles are and why they exist, rather than as a consequence of following their advice." CreationDate="2019-02-19T12:52:20.950" UserId="6562" />
  <row Id="14339" PostId="5417" Score="2" Text="Reading [The Perils of Java Schools](https://www.joelonsoftware.com/2005/12/29/the-perils-of-javaschools-2/) by Joel Spolsky (one of the cofounders of Stack Exchange) leads me to believe that it is potentially a sign of *quality* to not have such a class. Outside of the over-engineered Java (or C++) world, such things don't play such a prominent role (which isn't to say that they play no role)." CreationDate="2019-02-19T13:24:34.067" UserId="2715" />
  <row Id="14340" PostId="5417" Score="5" Text="FWIW: I took my SE class in 1988, before &quot;Design Patterns&quot; were A Thing, and people still seem to accept that my degree is a valid CS degree." CreationDate="2019-02-19T15:10:33.820" UserId="1139" />
  <row Id="14365" PostId="5417" Score="2" Text="Remember what happened when Robert Pirsig tried to teach 'quality' in college..." CreationDate="2019-02-20T00:34:56.337" UserId="5349" />
  <row Id="14366" PostId="5417" Score="1" Text="@BenCottrell I don't. The easiest example is that I've seen pervasive dependency inversion regularly lead to incredibly weird and difficult to follow object trees, even *encouraging* shared stateful objects (database connections) that are quietly injected into the lowest level of dependencies. It was difficult to follow what actually happened to a connection in a given code path. As for &quot;not rules to be followed dogmatically,&quot; the same could be said for design patterns. The problem is precisely that people take them too far, replacing understanding and wisdom with pervasive blind application." CreationDate="2019-02-20T00:55:22.113" UserId="981" />
  <row Id="14368" PostId="5417" Score="0" Text="@ScottRowe - Yeah, he went crazy." CreationDate="2019-02-20T01:27:48.563" UserId="4511" />
  <row Id="14371" PostId="5417" Score="0" Text="@HotLicks: Design Patterns are observations about the horrible things OOP programmers do, presented as something to mimic..." CreationDate="2019-02-20T03:23:32.307" UserId="1327" />
  <row Id="14372" PostId="5417" Score="1" Text="@R.. I try not to mimic programmers who go OOPS!" CreationDate="2019-02-20T03:33:43.223" UserId="4511" />
  <row Id="14373" PostId="5417" Score="0" Text="@jpmc26 *&quot;The problem is precisely that people take them too far, replacing understanding and wisdom with pervasive blind application&quot;* - surely that's all the more reason to have proper teaching of those principles?    The example you mention with dependency inversion sounds like it actually violates the principle ('Details should depend upon abstractions')." CreationDate="2019-02-20T07:17:53.623" UserId="6562" />
  <row Id="14374" PostId="5417" Score="2" Text="@BenCottrell They're too subjective for them to be taught &quot;properly.&quot; They're not tied to anything concrete. Having them taught &quot;properly&quot; would be even harder than doing so with design patterns. If we can't get that right, there's no way we could with something as subjective as SOLID and GRASP. Your response to my example demonstrates this subjectivity and lack of clarity. FYI, they did &quot;depend on abstractions;&quot; the system pervasively used interfaces for everything. This could even be turned into an argument *for* the design: callers did not need to reference a connection." CreationDate="2019-02-20T08:18:18.283" UserId="981" />
  <row Id="14375" PostId="5417" Score="0" Text="Your headline is another question than your question itself. Are you talking about a computer science course (headline) or a software engineering course (question text)? A SE course probably should include patters, almost every other course probaly does not have to and probably should not. computer science courses should teach principles, programming courses should teach programming without such overhead. But software engineering courses of course probably should teach such things. Please clarify if we're talking about a software engineering course or not." CreationDate="2019-02-20T09:07:10.750" UserId="4631" />
  <row Id="14379" PostId="5417" Score="0" Text="Title is &quot;begging the question&quot; - a better form would be eg. &quot;Should a good CS course always teach Design Patterns&quot;. IMHO, no - but it should be in the Programming modules." CreationDate="2019-02-20T09:55:34.273" UserId="6607" />
  <row Id="14382" PostId="5417" Score="0" Text="@jpmc26 How could a topic be 'too subjective' to be taught properly?   Many academic courses require students to think and understand subjective material, otherwise if CompSci were only to include objective topics then that leads to precisely the problem you mention of students mindlessly sticking to dogma because they haven't had the opportunity to learn to understand the rationale behind these principles nor judge these things for themselves." CreationDate="2019-02-20T16:33:12.213" UserId="6562" />
  <row Id="14384" PostId="5417" Score="2" Text="Are you using &quot;course&quot; to mean &quot;degree program&quot;? In the US, standard use of &quot;course&quot; is to mean &quot;class&quot;." CreationDate="2019-02-20T17:55:29.920" UserId="3225" />
  <row Id="14387" PostId="5417" Score="0" Text="@BenCottrell By being &quot;counter-productive if it results in re-enforcing a misguided way of thinking about OO design.&quot; This is exactly what I see happens with SOLID. SOLID is *not* practical advice that can be applied to the process of writing code. It's a list of abstract, easily misapplied, hard to understand criteria that purport to describe a high quality end result (though whether it even necessarily identifies qualities that are actually important is up for debate). And it is the subjectivity of its ideas that lead to such diverse ideas about what in the heck it's even supposed to mean." CreationDate="2019-02-21T05:08:48.917" UserId="981" />
  <row Id="14396" PostId="5417" Score="0" Text="@jpmc26 It's not about teaching practical advice, and it's not specifically about teaching SOLID either (GRASP and SOLID are only part of the picture) - it's about getting students to think for themselves by challenging them to grapple with the issues around software design so that they understand it's not a prescriptive process.    If students are never asked to think about concepts such as cohesion, coupling, separation of concerns, abstraction, dependencies, etc then they will enter the job market in a weak position, and more likely to misapply SOLID or even just create a Big Ball Of Mud." CreationDate="2019-02-22T00:59:41.763" UserId="6562" />
  <row Id="14397" PostId="5417" Score="1" Text="@BenCottrell On the contrary, I find people who are intent on following SOLID at least as likely (if not more so) to create Big Balls of Mud. All of the principles and concepts you have mentioned are at best unhelpful in avoiding that. Our &quot;theories&quot; about how to build good code do not work. Even *having* these poor acronyms and overhyped terms invites people to misapply them in ways that are harmful to a code base. If we want to teach something, then practical ways of evaluating code quality is what we need to be focusing on, not these useless buzzwords." CreationDate="2019-02-22T03:20:40.490" UserId="981" />
  <row Id="14398" PostId="5417" Score="1" Text="@BenCottrell I don't agree with *everything* in this talk and I understand that languages don't always have the features to make all the particular simplifications possible, but it still describes a better philosophy toward writing code than SOLID or GRASP or any of that stuff: https://youtu.be/o9pEzgHorH0. To sum it up, it basically says not to make anything more complicated than it has to be. The fact we don't spend enough time teaching people to be this practical is a major, major problem." CreationDate="2019-02-22T03:55:44.060" UserId="981" />
  <row Id="14399" PostId="5417" Score="1" Text="@jpmc26 You don't seem to be reading what I've said -- it's **not** about getting students to *follow* anything, it's about teaching them to *think*.  At this point we seem to be talking past each other, and you seem to be hung up on issues you've had with programmers who clearly didn't bother to think.    Just to repeat once again, the purpose of teaching software design is all about challenging students to think about software design, and not about &quot;following&quot; rules. If students aren't encouraged to think at university, then they're more likely not to think at all when they're in a job" CreationDate="2019-02-22T12:53:33.427" UserId="6562" />
  <row Id="14400" PostId="5417" Score="0" Text="@BenCottrell I read what you said. You don't seem to be grasping that whatever your intention is, that *isn't* the result you actually get. The programmers I worked with thought *a lot*, but buying into the popular OO ideas clouded their judgement. As I often see it do here on SE. Have [an example](https://codereview.stackexchange.com/questions/212381/versatile-string-validation/212432#comment410907_212432)." CreationDate="2019-02-22T13:05:40.087" UserId="981" />
  <row Id="14401" PostId="5417" Score="1" Text="@jpmc26 So when do students learn about software design then?   Because they *will* be required to learn one way or another as soon as they enter the workplace and are asked to join a team working on any reasonably large, non-trivial project with other software engineers.     They can either learn it at university when they've got the time to research the topic properly, or they can be forced to learn it under far less than ideal conditions when there are deadlines and stakeholders." CreationDate="2019-02-22T13:15:12.083" UserId="6562" />
  <row Id="14402" PostId="5417" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/90084/discussion-between-jpmc26-and-ben-cottrell)." CreationDate="2019-02-22T13:15:26.810" UserId="981" />
  <row Id="14405" PostId="5417" Score="1" Text="I'm confused by the question; here's a way you could clarify it. Is a course in *astronomy* that does not teach *how to build a telescope* a bad course or a good course?  Is a course in *physics of structural engineering for buildings* that does not teach *how to design an elegant courtyard* a bad course or a good course?  You're asking a question about two things that have almost nothing to do with each other but your question indicates that there is some connection in your mind; can you explain what it is?" CreationDate="2019-02-22T19:26:24.267" UserId="2806" />
  <row Id="14409" PostId="5417" Score="0" Text="@EricLipper Agree entirely. In the design patterns epidemic of the late 1990s there seemed be a sustained attempt to reduce all of CS to design patterns. It failed miserably, like all other attempts to impose magic on science. Even back in the 'top-down' days I remember thinking that this approach would never tell you how to write a compiler. Curiously enough Wirth, a compiler writer, was a proponent. Knuth said mildly that he preferred to think bottom-up ..." CreationDate="2019-02-23T02:59:45.500" UserId="3202" />
  <row Id="14412" PostId="5417" Score="0" Text="Imho the only benefit in learning design patterns is that you can quickly speak about implementations in a team without having to verbosely explain your solution since the pattern has a name. Much more important than knowing design patterns is knowing anti-patterns to avoid running in non-obvious issues which others already did frequently before you." CreationDate="2019-02-23T14:46:23.797" UserId="6656" />
  <row Id="14960" PostId="5417" Score="0" Text="For the majority of the history of CS, design patterns hadn't been &quot;discovered&quot;. At least, the term. &quot;Algorithms + Data Structures = Programs&quot; was the closest I remember from college." CreationDate="2019-05-10T14:29:03.020" UserId="4902" />
  <row Id="18528" PostId="5417" Score="0" Text="I love design patterns. However, it is more a &quot;how do we work together in a big programming team&quot; than a CS issue." CreationDate="2021-12-16T14:20:49.330" UserId="11356" />
  <row Id="14294" PostId="5418" Score="5" Text="The last paragraph here doesn't seem to make a lot of sense as to its necessity here. The OP is not saying that a good CS program should _only_ include &quot;design patterns&quot;, but that for _missing_ that _one_ component, it is _worse off_ (not _a failure_, but _reduced_, i.e. _incrementally_, in quality - in fact the words &quot;reduce the quality&quot; were the exact ones used) than a program that would have included it. Just like one skimping on algorithms, or on any of the other components you mentioned there, would be a worse off program than one that did not skimp." CreationDate="2019-02-17T04:21:26.183" UserId="4693" />
  <row Id="14295" PostId="5418" Score="1" Text="Or in simple terms, a CS program must include much more than _just_ design patterns, but if you take a program that is '_just_' that &quot;much more&quot;, and compare it to another program that is 'just' that &quot;much more&quot; _plus_ design patterns, it would seem the latter would be a better/more comprehensive program than the former. Moreover, especially if the latter program teaches you the _thinking_ behind the patterns, which I'd think more important than the specifics themselves, as that is how you will truly understand _why_ they are used and _when_ to use them." CreationDate="2019-02-17T04:24:36.437" UserId="4693" />
  <row Id="14299" PostId="5418" Score="6" Text="As a specific example, one of the more famous patterns is a singleton. If you use java or the likes, this requires a particular combination of static pointers and private constructors to do properly. However if you are working with the language Scala, singleton is built in. You make a class as usual but call it an object rather than a class and everything works. This is why it is more important to learn to think about concepts like &quot;I want this exactly once&quot; than the detail in a particular language. Barring experience, a good CS degree would leave you equally prepared to learn any language." CreationDate="2019-02-17T08:24:17.553" UserId="6563" />
  <row Id="14301" PostId="5418" Score="7" Text="It would be amazing if a course taught both the OOP design patterns and the &quot;missing&quot; features that they replace (e.g. visitor pattern &lt;--&gt; double or multiple dispatch, etc)." CreationDate="2019-02-17T12:27:50.473" UserId="2793" />
  <row Id="14306" PostId="5418" Score="1" Text="There are lots of things that could be taught in addition to the existing curriculum, but at some point we'd have to acknowledge that we need more time to do so. University gives you the theoretical background to read up on the things that didn't fit." CreationDate="2019-02-17T16:34:30.277" UserId="3138" />
  <row Id="14309" PostId="5418" Score="10" Text="Not just &quot;primarily&quot; C++. Gang of Four design patterns are inextricably linked to C++. Whilst some of the concepts (e.g. multiple dispatch) are common across OO architectures, the Gang of Four patterns are purely C++ *implementations* of those higher concepts. It's notable that the patterns only cover features absent from C++, and do not start from the elemental features of OO such as member data and functions." CreationDate="2019-02-17T21:07:43.943" UserId="1864" />
  <row Id="14331" PostId="5418" Score="2" Text="@Josiah : True, but to me, in this case, &quot;design patterns&quot; _is_ about concepts. It's not merely about how they can be implemented - and even then, learning how they are gives you an idea of what is going on under the hood even if you're using a language where that you don't have to actually write that implementation yourself as it's provided for you. If you don't know what a singleton _is_ , when it's useful, when it should _not_ be used, _why_ that is, and so forth, then it doesn't matter whether the language has it or not. And _that_ , imo, is what a good DP course should cover." CreationDate="2019-02-19T03:46:58.003" UserId="4693" />
  <row Id="14352" PostId="5418" Score="0" Text="@The_Sympathizer I feel like that would be more of a &quot;Design&quot; class rather than a &quot;Design Patterns&quot; and said &quot;Design Patterns&quot; class would be more applicable to software engineering than computer science." CreationDate="2019-02-19T20:47:36.237" UserId="3777" />
  <row Id="14386" PostId="5418" Score="1" Text="Re:&quot;...Corrections for flaws....Many of the kinds of things that design patterns accomplish...in more natural ways within Common Lisp...&quot;.  Those are such pointless comments. Many kinds of things can be accomplished more naturally in C++ than Lisp because of flaws in Lisp. However, Lisp programmer's learn tricks to work around and implement those things. IOW, they use design patterns whether they want to call them that or not. At the time the Design Patterns book came out, C++ was the overwhelming OO'ish language of choice. Thus, they are obviously more applicable to the C-family of languages." CreationDate="2019-02-20T20:14:21.840" UserId="2817" />
  <row Id="14407" PostId="5418" Score="0" Text="Yes, as I have told some students who complained about abstract concepts in their degree, &quot;If you just wanted to learn to code you could have gone to a training course.&quot;" CreationDate="2019-02-22T22:22:31.473" UserId="2592" />
  <row Id="14411" PostId="5418" Score="0" Text="At my university I learned that the advantage of knowing the names of the design patterns is that you can communicate them easily to fellow team members. This wouldn't be possible if you don't know their names." CreationDate="2019-02-23T14:07:22.220" UserId="6655" />
  <row Id="14290" PostId="5419" Score="17" Text="+1 especially for the last sentence. I think programming will change enough to make design patterns obsolete in much less than the 40 to 50 years of a human career. Knowing how to learn and adjust to changes will go on being useful." CreationDate="2019-02-17T00:41:40.130" UserId="6558" />
  <row Id="14317" PostId="5419" Score="2" Text="To be fair, there's plenty of university courses that are also evolving very quickly (e.g. chemical engineering) that handle it better. To me, it (sadly) seems that many CS courses are done just for the form, rather than the essence - it's important to have a CS course, so we have a CS course. It doesn't have any real purpose, you see, but... It's also disturbingly common to see people who have no real-world experience teach various aspects of CS. It reminds me of Feynman's famous reflection on the quality of Brazilian university education back in the day :)" CreationDate="2019-02-18T13:53:24.173" UserId="1816" />
  <row Id="14318" PostId="5419" Score="2" Text="Even worse, many of the things that are being touted as the best and brightest today are things that were developed decades ago. The good CS courses didn't have to change any of the fundamentals, because the fundamentals didn't change since the first ideas of electronic computers. Only the details change (as important as those details are, mind you). The only courses that need to change much are those that are either *actually* bleeding edge, or were more concerned with day-to-day practicalities rather than the actual science (for better *and* worse, mind you)." CreationDate="2019-02-18T13:55:38.400" UserId="1816" />
  <row Id="14302" PostId="5421" Score="2" Text="Hi, welcome to [cseducators.se]! For those unfamiliar with the Udacity code review process (such as myself), could you give a bit of information about what it's like? You'll be more likely to get helpful answers this way." CreationDate="2019-02-17T12:27:59.600" UserId="27" />
  <row Id="14305" PostId="5421" Score="1" Text="I've been thinking a bit about it, and I have some possible ideas, but I'm not sure what you're looking for.  Could you edit your question and clarify?" CreationDate="2019-02-17T14:09:09.110" UserId="27" />
  <row Id="14311" PostId="5421" Score="0" Text="@BenI. I attached a screenshot." CreationDate="2019-02-18T05:25:30.633" UserId="6568" />
  <row Id="14303" PostId="5424" Score="1" Text="Your last statement is problematic. I could certainly &quot;mention&quot; them in one lesson, and I might be able to &quot;cover&quot; them. But I wouldn't be able to actually _teach_ them. Maybe that is the level of discussion that the OP is complaining about." CreationDate="2019-02-17T13:40:25.343" UserId="1293" />
  <row Id="14312" PostId="5426" Score="3" Text="*&quot;It teaches you to look at the problem in terms of a predefined set of solutions&quot;* - ohh, this reminds me of applicants I interviewed who could easily put together a Java application which skimmed some famous website for data, presented it in a nice UI, and did other interesting things, by combining the perfect free libraries for the task, but utterly failed fizzbuzz-style tasks. I've even seen one who couldn't write a code to determine which one of 3 integers is the largest. He couldn't find the library which would do it for him." CreationDate="2019-02-18T07:13:05.313" UserId="4999" />
  <row Id="14319" PostId="5426" Score="3" Text="@vsz To be fair, it's not like there isn't a market for those kinds of guys :) In the end, you've got a job to do - and if you can do it better, good for you. Some jobs require you to be good at analytical thinking and comparing integers; for some, the issues are purely academic. Hey, it's not like any other engineering discipline has it any different - it's just that software engineering just isn't quite mature in that way yet, and we still expect every software engineer to be able to (with some training and experience) replace any other software engineer." CreationDate="2019-02-18T14:00:43.283" UserId="1816" />
  <row Id="14381" PostId="5426" Score="2" Text="Mostly agreed, except for IDEF0, SSADM. They should definitely be there as an option but definitely not a requirement. They're more SoftEng than CS (unless your University merges those... then I guess they should be there)." CreationDate="2019-02-20T16:02:24.130" UserId="6585" />
  <row Id="14403" PostId="5426" Score="0" Text="&quot;Brazil is actually less damaged than many Western countries&quot;. Why is that so? I'm curious about it." CreationDate="2019-02-22T13:18:58.433" UserId="6642" />
  <row Id="14414" PostId="5426" Score="0" Text="There are a few truths buried in here, but most of the answer reads as a pompous rant, pushing a very narrow view of the &quot;correct&quot; university course. Apparently, I was taught wrong, because I've never heard of SSADM or IDEF0; maybe they're &quot;some irrelevant thing from last year that everyone has forgotten about this year because there is a new fad and terminology&quot;." CreationDate="2019-02-23T20:47:40.923" UserId="6663" />
  <row Id="17456" PostId="5426" Score="0" Text="“methodologies and standards (unless you work in China)” why ? I am not offended but curious." CreationDate="2021-01-01T15:22:20.013" UserId="9884" />
  <row Id="14320" PostId="5427" Score="1" Text="I'd argue it *was* a problem-solving tool - or rather, when you realized &quot;Oh, this looks like a Visitor&quot;, you could go to the ready library of visitor-implementations to avoid having to write everything again, with a new set of mistakes in the implementation." CreationDate="2019-02-18T14:05:07.330" UserId="1816" />
  <row Id="14321" PostId="5427" Score="0" Text="@Luaan Well, that may be true, at the implementation layer. I'm talking about the design layer :)" CreationDate="2019-02-18T14:25:03.510" UserId="4731" />
  <row Id="14328" PostId="5427" Score="2" Text="I came to say this, and you saved me typing.  As for &quot;ready library of visitor implementations&quot;; in my experience, only if you are already committed to some &quot;framework&quot;.  I mean, imagine importing Qt just to add signals and slots to your application.  Possibly this is different in &quot;framework languages&quot; like Java/C#." CreationDate="2019-02-18T21:21:51.260" UserId="978" />
  <row Id="14410" PostId="5427" Score="7" Text="@Lusan Nonsense. There is no 'ready library of visitor-implementations'. Every one has its own purpose. That is the whole idea. Design patterns is not a library, it is a technique." CreationDate="2019-02-23T03:05:04.710" UserId="3202" />
  <row Id="14416" PostId="5427" Score="0" Text="@user207421 Can't state that any stronger. And if someone writes code in Swift, the whole &quot;visitor pattern&quot; disappears, because instead of creating some &quot;Visitor&quot; class you just pass a closure as a function argument." CreationDate="2019-02-24T10:58:05.497" UserId="4529" />
  <row Id="14417" PostId="5428" Score="0" Text="The GoF book is also more a &quot;catalogue&quot; of patterns, whereas correctly organized, patterns should come in the form of a *pattern language*. A lot of people seem to use the GoF book as a recipe for designing systems, which it is not. It is a catalogue of patterns where you can look up a pattern when you already know you need it. For discovering which patterns you need, you need a pattern language." CreationDate="2019-02-24T22:36:47.890" UserId="945" />
  <row Id="14421" PostId="5428" Score="0" Text="@JörgWMittag makes a good point. The GoF book is not a textbook and it is by no means didactic. Pretending it is written for beginners and using it in undergraduate-level courses is not very good teaching, IMHO." CreationDate="2019-02-26T11:58:14.237" UserId="5109" />
  <row Id="14362" PostId="5429" Score="2" Text="I always started to understand the previous math core course during the current one." CreationDate="2019-02-20T00:24:32.273" UserId="5349" />
  <row Id="14338" PostId="5433" Score="0" Text="If you can reach them from any machine, the front page has links to the pages on which you can raise issues. Ask them there. Every such site will have its own policies, of course." CreationDate="2019-02-19T13:16:55.633" UserId="1293" />
  <row Id="14377" PostId="5433" Score="1" Text="Note: I see many teachers and students using the word DDOS (Distributed Denial Of Service) attack, I never hear them saying DOS (Denial Of Service) attack. There is nothing distributed about what you are describing." CreationDate="2019-02-20T09:36:32.740" UserId="204" />
  <row Id="14378" PostId="5433" Score="0" Text="Have you considered torrent?" CreationDate="2019-02-20T09:38:07.083" UserId="204" />
  <row Id="14385" PostId="5433" Score="0" Text="Can you put a copy on a local shared drive?  Another clever way too get by could be to create a torrent as suggested ( https://torrentfreak.com/how-to-create-a-torrent/ ) but the optimal solution is likely to be the one suggested first, and ask the site to give you a &quot;clean access pass&quot;.  In any case, it is a learning experience and now you'll recognise it when it happens again.  Welcome to CSE :)" CreationDate="2019-02-20T19:23:09.287" UserId="2706" />
  <row Id="14392" PostId="5433" Score="0" Text="@ctrl-alt-delor Thank you, I guess I focused too much on trying to convey my problem that I brain farted on the nomenclature." CreationDate="2019-02-21T16:43:37.873" UserId="6591" />
  <row Id="14393" PostId="5433" Score="0" Text="@srattigan yes, I subsequently shared the nodejs exe to solve this problem. I was just posting this here to see out of curiosity if anyone else has experienced a problem similar to this." CreationDate="2019-02-21T16:46:04.087" UserId="6591" />
  <row Id="14530" PostId="5433" Score="0" Text="The problem isn’t that it looks like a DDoS attack, it clearly doesn’t - all the traffic is from the same IP. It’s that it looks like a brute force attempt to break in. The rate and duration are probably also too low for it to look like a DoS attack." CreationDate="2019-03-18T13:59:08.680" UserId="134" />
  <row Id="14342" PostId="5434" Score="2" Text="Your general advice (don't worry about it) is sound. But the specifics are deeply flawed. Don't criticize patterns because they don't do anything _new_. That is an intended characteristic of patterns. _Capture good practice in an easily transferrable way_. They are explicitly NOT about invention. You are wrong specifically about singleton (as is much of the linked post). There are applications in which singletons are required. Don't criticize them just because some people misuse them badly. The are _not_ a hack to get globals. They are needed when _logically_ there is only one instance." CreationDate="2019-02-19T15:54:22.513" UserId="1293" />
  <row Id="14344" PostId="5434" Score="1" Text="@Buffy - Heh. Disagreeing with an accepted SO post that has over a **thousand** upvotes (and only 25 down). Ballsy that. You're horribly wrong, but I give you points for taking a stand. I'll tell you that we found out how right that post was the hard way. But some of us only learn that way." CreationDate="2019-02-19T16:25:21.817" UserId="1139" />
  <row Id="14345" PostId="5434" Score="3" Text="On the other hand, I've been a member of the patterns community since GOF was issued. I'm also one of the few to know that GOF wasn't actually the _first_ patterns book, though it was the first to use the name in such a public way. The &quot;wisdom of crowds&quot; sometimes isn't, of course." CreationDate="2019-02-19T16:32:50.723" UserId="1293" />
  <row Id="14346" PostId="5434" Score="0" Text="@Buffy - However, in this case the crowd is spot on. Singletons destroy testability and make future design tweaks really problematic for no good reason. If you only want one in your current design, [only make one](https://codeahoy.com/2016/05/27/avoid-singletons-to-write-testable-code/). Problem solved. And now when you need to write unit tests, or discover three years from now that you need two copies of the entire application running at once, its not a gigantic self-inflicted redesign problem." CreationDate="2019-02-19T16:43:10.737" UserId="1139" />
  <row Id="14347" PostId="5434" Score="2" Text="Patterns capture design decisions for the future as well as the present. Yes, I only create one. Some future maintainer might not _remember_ all of the design decisions previously made. So, in good software, we try to capture those decisions so that they aren't easy to subvert - especially by accident. Enums do a similar sort of thing. Build your software do that you don't need to keep every decision in your head perpetually and expect that others will have the same understanding." CreationDate="2019-02-19T16:52:30.163" UserId="1293" />
  <row Id="14357" PostId="5434" Score="0" Text="Design Patterns are simply a common set of names for practices we all figured out ourselves at some point (or would figure out once we needed them).  If I called my thing a singleton and you called it a controlled-instance we wouldn't make much headway in conversation. They also tend to show implementation details you may not have thought of.  You can design without them, but if you are working on a team you will have difficulty communicating.  If you haven't at least skimmed the design patterns, don't call yourself a professional--same if you rely on them exclusively." CreationDate="2019-02-19T22:31:14.313" UserId="1399" />
  <row Id="14367" PostId="5434" Score="3" Text="@BillK The bulk of the last comment is worthy. The closer, however, is not. I was a &quot;professional&quot; long before GoF 'Patterns' ( or C++) existed. I have still not read that book, or any related material. I also do not believe I need to because I do not need to reduce my conversations to cliches or shared inaccurate nomenclature. Don't tell me which 'pattern' you code _almost_ implements, explain what it does and how you can prove it does it correctly." CreationDate="2019-02-20T01:01:07.770" UserId="104" />
  <row Id="14370" PostId="5434" Score="2" Text="@GypsySpellweaver I suggest you at least skim it.  It's asked in enough interview questions today that you are severely restricting your job search if you don't.  I've also coded since the 80's, before patterns existed and when I read the book I recognized nearly all the patterns as ones I've created at one point or another in my career.  It's not going to teach you how to code, just how to communicate more efficiently.  My point above was that resisting knowledge like this is not professional.  A professional programmer is constantly improving himself with all the tools he can find." CreationDate="2019-02-20T01:44:18.097" UserId="1399" />
  <row Id="14503" PostId="5434" Score="0" Text="In @Buffy's defence, he's not being so &quot;ballsy&quot;.  The post you linked to supports his position more than yours once you delve into the comments.  Even the author of said post asserts that they are needed from time to time: https://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons#comment2667126_138012." CreationDate="2019-03-14T10:51:40.320" UserId="27" />
  <row Id="14504" PostId="5434" Score="0" Text="@BenI. - No, he said he *uses* them from time to time, not that they are needed. Being a purely a defensive measure (over simply only creating one of the object in question), they are never *needed*." CreationDate="2019-03-14T12:58:51.160" UserId="1139" />
  <row Id="14508" PostId="5434" Score="0" Text="Fair enough.  And, in your defense, you also didn't say to never use them, you said &quot;almost never&quot;.   Everything has its time and place.  :)" CreationDate="2019-03-14T16:22:01.510" UserId="27" />
  <row Id="14348" PostId="5435" Score="0" Text="Wow is this actually a thing? Never considered it could be on the school's end. That seems so counterintuitive though, if it's a classroom for teaching programming, shouldn't they expect teachers to guide many students at a time to use the same online tools or services, hence the same websites? But then, I'm just an &quot;outsider&quot; educator teaching a government course hosted by a university, so I'm unfamiliar with how university IT people govern their network. But this could explain that problem I experienced." CreationDate="2019-02-19T17:18:53.693" UserId="6591" />
  <row Id="14350" PostId="5435" Score="0" Text="I don't think it was our school network directly. Pretty sure it was the filtering service that we subscribed to so the students &quot;could be safe.&quot;" CreationDate="2019-02-19T18:02:24.780" UserId="30" />
  <row Id="14526" PostId="5435" Score="0" Text="Seems possible to me that teachers and students are routed different and come from different IP addresses. So when the students mistype their passwords (and are all coming from the same IP address) the site get suspicious, but teachers are not effected." CreationDate="2019-03-18T03:13:16.387" UserId="134" />
  <row Id="14527" PostId="5435" Score="0" Text="I'd be surprised if it is your school network or the filtering service. I think it is much more likely that the Moodle was seeing lots of failed login attempts which it interpreted as either login probing or a DOS attack and so it blocked the school's IP address. The block may timeout, or it may need to be cleared manually." CreationDate="2019-03-18T03:24:27.623" UserId="134" />
  <row Id="14355" PostId="5436" Score="0" Text="It's just possible that I know the person who taught your course. A friend taught there about then and was influential in the patterns community. But today, I wouldn't make it a separate course. You would just learn the techniques in CS1 CS2 while learning to program, assuming it was in an OO language. A real OO design course would normally be at a higher level than the GOF patterns. There are real architectural patterns of course." CreationDate="2019-02-19T21:39:28.853" UserId="1293" />
  <row Id="14356" PostId="5436" Score="0" Text="@Buffy - Our design patterns elective was a 400 level coarse. Our professor was actually a software architect at Disney who flew down once a week just to teach the one class." CreationDate="2019-02-19T22:20:49.457" UserId="6598" />
  <row Id="14962" PostId="5438" Score="0" Text="&quot;Proof of concept code is exactly that - it's a proof of concept. It's up to software engineers to grok it and make it beautiful.&quot; If only I could convince our R&amp;D department of that!" CreationDate="2019-05-10T14:56:33.933" UserId="4902" />
  <row Id="14395" PostId="5439" Score="1" Text="I didn't want to make my post too long so I didn't mention that I also experienced your problem when I tried to get my students to sign up and upload their files on a hosting site (xfinityfree to be precise). Although the conditions here are different from my Nodejs.org problem, your answer most certainly explains one half of the problem that caused me to post here in the first place. Thank you for replying." CreationDate="2019-02-21T17:10:07.597" UserId="6591" />
  <row Id="14404" PostId="5439" Score="0" Text="In one class (different training center) none of the class can connect via ftp at all. This is a different problem as well (school network blocking rather than site) but I did verify that it was both the location and specific to learner accounts." CreationDate="2019-02-22T18:57:50.220" UserId="2706" />
  <row Id="14422" PostId="5442" Score="0" Text="Hi Johnny, welcome to [cseducators.se]!  We are quite glad to see you here!  However, this answer is incorrect.  A mathematical function $f(x) = ...$ must always return the same value given the same $x$, but that is not the case for a programming function.  (See OP's `rand()` as a perfect example.)  In addition, a mathematical function must always return a result, while a programming function can instead produce a side-effect.  (See [mutators](https://en.wikipedia.org/wiki/Mutator_method).)" CreationDate="2019-02-27T01:12:47.630" UserId="27" />
  <row Id="14427" PostId="5442" Score="0" Text="@johnny, what &quot;function in mathematics&quot; is something like `function foo() {  echo &quot;Hello&quot;; }` ?  (going javascript-ic). Nowadays, in most programming languages, the word *function* refers to a piece of code with parameters which does some actions and maybe transmits a value when ended." CreationDate="2019-02-27T14:14:53.587" UserId="2103" />
  <row Id="14445" PostId="5442" Score="0" Text="Computers do only one thing at the atomic level, and that is process functions.  That's why they are called computers.  Everything in a computer is either a function or an argument, and everything is deduced down to a function.  A function of functions is still a function.  This is BASIC stuff (no pun intended).  If you don't understand that, you cannot teach CS.  You can teach programming, I suppose, but certainly not science.  I cannot be polite or diplomatic here.  Many of you have literally no idea what you are talking about, and you are imbuing deeply flawed concepts into your students." CreationDate="2019-03-02T14:14:46.850" UserId="6669" />
  <row Id="14446" PostId="5442" Score="0" Text="&quot;must always return the same value given the same x, but that is not the case for a programming function.&quot;  Ben, there is NO SUCH THING as random.  This is accepted science in the CS community.  It may be a question in the physics community, but until then, it is MOST DEFINITELY not a question in the computer science community, except maybe in some deep theoretical circles." CreationDate="2019-03-02T14:20:02.537" UserId="6669" />
  <row Id="14449" PostId="5442" Score="0" Text="@johnny You are again incorrect. There are plenty of (computer) functions that return truly random numbers that take advantage of water eddies and even a provably random function that had been created using quantum randomness." CreationDate="2019-03-02T21:48:03.593" UserId="27" />
  <row Id="14450" PostId="5442" Score="0" Text="@Johnny Even if we are to accept your definitions, no one would be coding mathematical functions in C because the metaphors of C (and even assembly) don't involve thinking at the level of mathematical functions. The &quot;functions&quot; you are referring to only exist at the level of electronics and booleans. If you believe that CS1 should begin at carry-adder circuits, feel free to develop a course. Typically, circuits don't enter into CS until year 3." CreationDate="2019-03-02T21:50:14.883" UserId="27" />
  <row Id="14451" PostId="5442" Score="0" Text="@Johnny The reason no one seems to be agreeing with you is because you are saying a lot of (provably) incorrect things. You are welcome to come here and contribute and learn, but you MUST be polite and diplomatic. Consider this your warning: this is a forum for reasoned discourse.  Ideas can be attacked, but not people. &quot;Be Nice&quot; is a serious rule here, and you have been pushing its boundaries to the limit. If you cannot abide by these rules, you will be sanctioned." CreationDate="2019-03-02T21:54:33.540" UserId="27" />
  <row Id="14425" PostId="5443" Score="3" Text="Of course there are intro to CS classes in Java, and many of them. It is the most commonly taught language in intro-level cs classes at universities (at least as of two years ago.)" CreationDate="2019-02-27T01:37:01.930" UserId="27" />
  <row Id="14426" PostId="5443" Score="0" Text="Also, much of the art of teaching is figuring out when to introduce wrinkles in order to allow students time to absorb complex ideas. When introducing the letter &quot;j&quot; to a 3 year old, we might say that &quot;j&quot; at the beginning of a word makes a &quot;dʒ&quot; sound. It would be utterly unfair (and counterproductive!) to mention at this moment that there is another language, French, in which it actually sounds like &quot;ʒ&quot;. While the &quot;dʒ&quot; statement is a lie, it keeps information at a level at which it can be absorbed. The child can get to other languages later, and will learn about other sounds at that time." CreationDate="2019-02-27T01:38:27.887" UserId="27" />
  <row Id="14447" PostId="5443" Score="2" Text="&quot;Of course there are intro to CS classes in Java, and many of them. It is the most commonly taught language in intro-level cs classes at universities&quot;.  You are correct.  And yet you have completely missed the point." CreationDate="2019-03-02T14:37:21.600" UserId="6669" />
  <row Id="20397" PostId="5443" Score="0" Text="&quot;and its syntax doesn't represent machine code instructions&quot; that is rather the point of high level programming languages." CreationDate="2022-06-10T05:38:37.170" UserId="11932" />
  <row Id="14423" PostId="5444" Score="0" Text="Your definition of &quot;programming paradigm&quot; is not commonly accepted.  Please see [programming paradigms](https://en.wikipedia.org/wiki/Programming_paradigm).  Many of them are inter-compatible, including both OOP with functional programming and OOP with procedural programming." CreationDate="2019-02-27T01:23:37.653" UserId="27" />
  <row Id="14428" PostId="5444" Score="0" Text="I think the customary duality is functional/imperative--not functional/procedural. I also think you've possibly misapprehended a few other concepts as well.  State is not &quot;otherwise known as global variables&quot;--at least not for any definition of state I've ever seen." CreationDate="2019-02-27T21:19:04.510" UserId="4689" />
  <row Id="14443" PostId="5444" Score="1" Text="Comments may only be edited for five minutes?  What in the world?  Little dictators.  The people who run this site have never changed their mind or made an edit after five minutes?  This site is weird." CreationDate="2019-03-02T14:04:54.040" UserId="6669" />
  <row Id="14444" PostId="5444" Score="0" Text="State is most definitely another way of saying global variables. Maybe functional vs imperative is a better way of saying functional vs procedural, but the purpose of teaching functional is still about lack of state, as I clearly stated in my post. Being that OO is not a real concept for any practical (nor even theoretical) purposes, I have no response for anyone who uses OO. It is becoming increasingly clear to me that the state of CS education is in a quagmire, and the people here seem to have some very funny ideas about CS, Math, and Logic." CreationDate="2019-03-02T14:06:18.210" UserId="6669" />
  <row Id="19178" PostId="5444" Score="0" Text="wouldn't they have to learn yet another grammar in this case?" CreationDate="2022-02-01T10:45:28.680" UserId="11614" />
  <row Id="14436" PostId="5445" Score="0" Text="Re, &quot;Is the ... analogy ... good or bad?&quot; Good or bad for _what purpose?_  IMO if your purpose is to explain what the word &quot;algorithm&quot; means, then &quot;recipe&quot; comes pretty close:  If you follow these steps, ..., you end up with a loaf of bread.  If you follow _these_ steps, ..., you end up with the greatest common divisor of two given numbers. But if you aren't trying to teach what &quot;algorithm&quot; means, then what _are_ you trying to teach?" CreationDate="2019-02-28T03:09:43.903" UserId="1269" />
  <row Id="14437" PostId="5445" Score="0" Text="Re, &quot;Realistic programs are not ..., but ...&quot; If you are trying to teach somebody how to design computer software, then that's a whole other topic. You are absolutely right: A software system is not an algorithm and an algorithm is not a software system, and it really doesn't matter whether or not either one of them bears any resemblance to a recipe." CreationDate="2019-02-28T03:14:03.703" UserId="1269" />
  <row Id="14438" PostId="5445" Score="2" Text="Re, &quot;...scripts...&quot; A script is a computer program. Period. The only reason we call it a &quot;script,&quot; is either that we are trying not to scare off somebody who thinks that programming is too hard to attempt, or else we want to belittle the efforts of somebody who we think has not earned the title, &quot;programmer.&quot;" CreationDate="2019-02-28T03:18:55.083" UserId="1269" />
  <row Id="14440" PostId="5445" Score="1" Text="We use the term scripts to differentiate between short functions built at runtime by a user from the core application code" CreationDate="2019-03-01T00:37:53.457" UserId="1537" />
  <row Id="14429" PostId="5446" Score="0" Text="Thanks for the good answer, however I tend to disagree, on the dismissing of the point. As for the introductory purpose, that's true for metaphors, but it's really needed only if the new concept has some complexity, elementary or simple concepts should be well understandable on their own. As for analogies they ought to be ana-logic, carrying the same logic, to help reasoning. If the terms do not share the fundamental logic points and are just to be forgotten early then they do harm and not good. More so for young learners possibly untrained to know that analogies fail." CreationDate="2019-02-27T21:52:03.157" UserId="6546" />
  <row Id="14430" PostId="5446" Score="2" Text="They have to share _some_ but not all points of logic to be useful. And it is your job to _teach_ them the limitations - especially for young learners with less experience." CreationDate="2019-02-27T21:54:42.527" UserId="1293" />
  <row Id="14431" PostId="5446" Score="0" Text="Yes, but the points actually shared should be the fundamental ones, and my doubt is about this. I cannot see how &quot;stir until thickened&quot; shares a fundamental point with while(i&lt;n), I mean: not *before* understanding state transitions. The point shared (sooner or later we will stop, and the computing one doesn't even guarantee that) is arguably the only one that doesn't need explanation." CreationDate="2019-02-27T22:13:57.877" UserId="6546" />
  <row Id="14432" PostId="5446" Score="1" Text="Actually my example is more like repeat x until y. But you can also say while the sauce is thin, stir it. Match the analogy/metaphor to your lesson, of course. And sometimes the sauce never does thicken. It is fairly rich (both the analogy and the sauce). But don't overload it." CreationDate="2019-02-27T22:22:51.210" UserId="1293" />
  <row Id="14433" PostId="5446" Score="0" Text="Well I don't really think of a difference between while and until, but I digress. The point is not so much my lessons, for of course I can say what I feel and test the pupils; it's not me the one who I worry may overload the meanings: it's the students and their free access to resources that may use this kind of analogies having me then do more work to unteach them something wrong." CreationDate="2019-02-27T22:37:52.383" UserId="6546" />
  <row Id="14434" PostId="5446" Score="0" Text="Well, that happens anyway. Unlikely you can prevent it." CreationDate="2019-02-27T22:40:29.967" UserId="1293" />
  <row Id="14435" PostId="5446" Score="0" Text="True, but I may provide a better analogy beforehand :) And really my question was more for an intellectual challenge and discussion and a general result than for actual pupils." CreationDate="2019-02-27T22:53:18.813" UserId="6546" />
  <row Id="14439" PostId="5446" Score="0" Text="@user9137 &quot;I cannot see how &quot;stir until thickened&quot; shares a fundamental point with while(i&lt;n)&quot;.  Truly?  What about `while (thickness &lt; desired)`?  It's not even an analogy, it is literally the same semantic meaning." CreationDate="2019-02-28T19:59:36.097" UserId="27" />
  <row Id="14455" PostId="5448" Score="1" Text="How would using the [Linux From Scratch](http://www.linuxfromscratch.org/lfs/) project to build an OS not fit into your goals?" CreationDate="2019-03-06T01:11:32.780" UserId="104" />
  <row Id="14456" PostId="5448" Score="1" Text="Oh, and Welcome! to [cseducators.se]. Always nice to see users from other stacks in the SE-vers." CreationDate="2019-03-06T01:12:48.987" UserId="104" />
  <row Id="14467" PostId="5448" Score="0" Text="Unix once was _an_ operating system, way long ago, and then it branched out to become a family of operating systems, but that's all history. Unix today is a _[proprietary specification](https://www.opengroup.org/membership/forums/platform/unix)_ with which some operating systems have been certified to conform, and it's a trademark that conforming operating systems are allowed to display." CreationDate="2019-03-07T19:54:53.847" UserId="1269" />
  <row Id="14468" PostId="5448" Score="0" Text="Linux never was an operating system.  Linux is merely a _[kernel](https://en.wikipedia.org/wiki/Kernel_(operating_system))_ upon which an operating system can be built. The majority of operating systems that incorporate the Linux kernel (e.g., Debian, Ubuntu, Red Hat) strive to be as Unix-like as possible, although very few of those actually have received the certification that would allow them to actually use the word &quot;Unix&quot; in their names." CreationDate="2019-03-07T19:58:59.293" UserId="1269" />
  <row Id="14469" PostId="5448" Score="2" Text="Re, &quot;students...[have] had only an introductory Python course.&quot; If that's true, then they won't have much of a clue about the kinds of services that an operating system provides. It's a pretty big step from knowing how to write and run simple Python programs to understanding things like demand-paged virtual memory, shared library modules, inter-process communication, thread scheduling, device drivers, network protocol stacks,... It's hard for me to imagine teaching somebody how those things are implemented if the student doesn't even know what they _are_." CreationDate="2019-03-07T20:14:36.520" UserId="1269" />
  <row Id="14477" PostId="5448" Score="0" Text="@SolomonSlow UNIX is the trademark, not Unix. But you bring up a good point about Linux being just the kernel, so not a full operating system, I will add an answer." CreationDate="2019-03-09T11:36:04.433" UserId="204" />
  <row Id="14457" PostId="5449" Score="0" Text="Fantastic.  I will make a note of this answer in case I ever develop an OS course!" CreationDate="2019-03-06T20:19:07.680" UserId="27" />
  <row Id="14458" PostId="5450" Score="1" Text="Welcome to [cseducators.se].  Take a look around, we're glad to have  you!" CreationDate="2019-03-06T20:19:48.407" UserId="27" />
  <row Id="14464" PostId="5451" Score="8" Text="The problem isn't that they misunderstand the code; rather, it's they have an incomplete (or incorrect) model of computation. They don't see memory as an array of cells, nor do they understand how the code gets executed. Flowcharts might help. Use a visual debugger that lets you see the call stack and variables. Try avoiding the &quot;for&quot; loop until they've mastered the &quot;while&quot; loop, which makes its steps more explicit." CreationDate="2019-03-07T17:30:00.197" UserId="6704" />
  <row Id="14466" PostId="5451" Score="2" Text="Sort of yes, sure. They absolutely lack a model of computation and that's arguably a major point, how can you teach to write code without the least of models of computation? I recall the very first thing at my univ was: these are our building blocks, it was a minimal von Neumann model, but any would do, except the non-existent one. The problem is that this is what I think, not what was thought by the ones who initiated my pupils, and I cannot change their history, just trying to reshape their models, dealing with their resistance and below ground motivation in the meantime." CreationDate="2019-03-07T18:21:28.763" UserId="6546" />
  <row Id="14475" PostId="5451" Score="1" Text="What about the mandelbrot set? It's remarkably simple, but nonalgebraic, and the output makes nice T-shirts" CreationDate="2019-03-08T01:18:57.143" UserId="1537" />
  <row Id="14476" PostId="5451" Score="0" Text="What language are you using?" CreationDate="2019-03-09T11:25:20.937" UserId="204" />
  <row Id="14480" PostId="5451" Score="0" Text="Javascript. They saw C syntax and I chose js to be more gentle with arrays. They would benefit a lot from some scheme but I couldn't afford such a big leap: I would have seen them drowning in parentheses. And my (imposed) target was: implementation of linear algebra algorithms." CreationDate="2019-03-10T10:30:54.853" UserId="6546" />
  <row Id="14511" PostId="5451" Score="0" Text="Just out of curiosity (bad motivation, sorry) where is this happening? I have trouble imagining students going through years of instruction and not wanting to learn. Why don't they just drop out, or switch programs of study? Programming is quite demanding, it is not something you can do for a job if you don't enjoy it and have developed the ability to learn on your own." CreationDate="2019-03-15T02:31:46.197" UserId="5349" />
  <row Id="14512" PostId="5451" Score="0" Text="Scott: at school of course ;)" CreationDate="2019-03-15T08:56:28.693" UserId="6546" />
  <row Id="14519" PostId="5451" Score="3" Text="Based on your comments to my answer, you won't be able to 'shock' them because they don't have enough correct understanding in place to have their assumptions violated. They need concepts first." CreationDate="2019-03-15T11:10:52.120" UserId="5349" />
  <row Id="19574" PostId="5451" Score="0" Text="&quot;They cannot trace the execution of a for loop, &quot; I show my first year (university) Java class how to use the debugger tool to step through the code, and I got a fair bit of good feedback from students saying that it really helped them understand what was going on." CreationDate="2022-04-07T12:02:18.737" UserId="11932" />
  <row Id="14470" PostId="5452" Score="0" Text="I completely agree with you, drawing the memory is the best thing I know for understanding imperative (stateful) code, simply because drawing the memory amounts to **seeing** the states transitions that are described by the code fragment. The problem here is that I cannot really do it in short time, I was hoping for something of strong effect: it's a 5th year class that has been trained for the past 4 to use global variables for everything and to emit swarms of printf in place of computing results. In my opinion this is about the idea of brain damage considered by ED. Am I wrong?" CreationDate="2019-03-07T22:47:11.633" UserId="6546" />
  <row Id="14471" PostId="5452" Score="0" Text="Looking forward to check out the video anyway, might be helpful! Possibly even just letting them see that I am not the only one to draw on a blackboard what the code does when executed. They think I'm kind of crazy for forbidding them the use of prints, and it's quite frustrating." CreationDate="2019-03-07T22:52:24.710" UserId="6546" />
  <row Id="14509" PostId="5452" Score="3" Text="The term I always heard for writing the values of variables as the code is hand-evaluated is **Desk Checking**. I guess the idea was that people didn't formerly have computers sitting on their desks. They simulated the computations with pencil and paper. If someone cannot do this, they cannot program, because they cannot understand the code." CreationDate="2019-03-15T02:09:33.737" UserId="5349" />
  <row Id="14516" PostId="5452" Score="0" Text="Yes, Scott. Can't agree more. My 5th year students told me they last did something similar 3 years ago, not often and not reinforced, I have no idea how they did so but I'd guess not in an effective way because it's not second nature for them, worse it was still difficult to show them how I'd do it and they have no will in following this method. I could accept they consider it boring were they proficient, but clearly they aren't." CreationDate="2019-03-15T09:35:42.220" UserId="6546" />
  <row Id="17395" PostId="5452" Score="0" Text="Late comment: I try to emphasize drawing. Over the years (15+) I've realized that this is not unproblematic. I'll highlight: &quot;the value is erased&quot; on re-assignment; while it's the most accurate model, it has the downside of not leaving a record or documentation of what's happened to date (for students studying later or backtracking or &quot;go over that gain?&quot;). So we need to judge the options of (1) erasing state, (2) crossing out one and writing the new one next to it, (3) keeping a table with one row per iteration and state of all variables at each step..." CreationDate="2020-12-14T04:41:04.870" UserId="8137" />
  <row Id="17396" PostId="5452" Score="0" Text="... Likewise if we're going to put this on a quiz or test (and we basically need to), then to verify understanding, we likely need more documentation than just a box with the final value as the submitted solution. So (partly based on a senior professor critiquing me on this point), I've shifted to crossing-out for simple things, and a full iterated state-table for more complex algorithms (e.g., binary search, BFS, Prim's or Dijkstra's algorithms, etc.). As a side note in 2020, using online digital tools, it's generally a lot easier to write new symbols than select and erase old ones." CreationDate="2020-12-14T04:45:01.507" UserId="8137" />
  <row Id="14472" PostId="5453" Score="0" Text="Yes! Definitely agree. (Besides having yet to see the java code :) ). For what I can I am constantly trying to show them small pieces and their connections. Problem is that so many times I already have shown them that a function cannot return many values, how a for translates to a while, how the variables are updated, they just kind of don't want to believe it, and their motivation is really 0. They're used to these crazy I/O operations: oh we need to know how many iterations, let's scanf something! I was even starting wondering: is this what cobol was made of? What's this thing?" CreationDate="2019-03-07T23:14:22.780" UserId="6546" />
  <row Id="14473" PostId="5453" Score="0" Text="Unfortunately I cannot introduce them functions and loops, they've already been introduced in previous years, they shouldn't even be so much unaware of those concepts. My goal was having them build small real algorithms, let's say for linear algebra, I have already given up on this actually." CreationDate="2019-03-07T23:21:34.773" UserId="6546" />
  <row Id="14474" PostId="5453" Score="1" Text="When I mentioned the shocking effect I was thinking something so short as a for (i=0; i&lt;5; i*=2). Just I don't think I am producing examples of good interest and of the right degree between too trivial and too crazy. Has anyone an arsenal of things of this kind? Btw, has anyone else noticed that learning steps in CS seem to be wider than other disciplines?" CreationDate="2019-03-07T23:28:28.380" UserId="6546" />
  <row Id="14478" PostId="5454" Score="0" Text="Thanks for the answer, it has its place, but it's not adequate for my specific case: my course is not Java, we have no classes (fortunately!), we need just a very very basic intro to the world of computing. The pupils had a taste of COBOL written with C syntax and are addict to printf before computing. I showed them Javascript to work more gently with arrays, but they have a really hard time understanding what do I mean for &quot;working with arrays&quot;: there is no output print and they are lost. I think adding the complexity of testing is a bit too much for people who cannot understand a for loop." CreationDate="2019-03-10T10:21:17.243" UserId="6546" />
  <row Id="14479" PostId="5454" Score="0" Text="Hmmm. You mentioned Java in a comment. There are similar unit testing frameworks for most languages, actually." CreationDate="2019-03-10T10:25:52.197" UserId="1293" />
  <row Id="14481" PostId="5454" Score="0" Text="I don't think I mentioned Java, I may be in error, but it may also be that I can be confused with someone else, my name does not seem designed for identification tasks :) Anyway, no probl. The more discussions I can see the happier I am. I'm starting to give up with this class because besides the technical problems they are also very demotivated and this complicates things even more: they sort of demand that I just write code while they do nothing with their brains, probably I'll end up with this." CreationDate="2019-03-10T10:41:12.240" UserId="6546" />
  <row Id="14548" PostId="5455" Score="0" Text="I'm with you on the &quot;x86 in a mess&quot; front, but it is widely enough used that there is a wealth of material and resources that use it as their example. Personally I'd be inclined to build one of the PDP-11/70 models and use the Lions book - only half in jest..." CreationDate="2019-03-21T03:49:06.093" UserId="134" />
  <row Id="14550" PostId="5455" Score="0" Text="x86 is not a popular as you may think. The ARM out sells it by about 5:1 (this data may be out of date, it is from before smart phones, with an ARM chip in each). However there may be more learning material for x86, created by misguided people, that think there is a good reason that we use x86. (We use it because of an historical accident: IBM used it in a dead-end project, that got popular, because it was cheaper than Unix, and had spread-sheets.)" CreationDate="2019-03-21T10:05:20.920" UserId="204" />
  <row Id="14486" PostId="5456" Score="0" Text="You didn't mention the age or level of your students, so the advice you receive is going to be quite generic.  You also didn't mention which turtle system you would be using.  Are you using Python's version?  Have you found old-school Logo somewhere?  Are you using the drawing capabilities of Scratch?" CreationDate="2019-03-12T15:15:37.323" UserId="27" />
  <row Id="14492" PostId="5456" Score="0" Text="“using the &quot;while&quot; condition to stop some recursion” — did you mean “to iterate”. I don't see how you can stop recursion with a while. (OK I can, but …).  Are you sure you meant recursion?" CreationDate="2019-03-13T08:28:57.107" UserId="204" />
  <row Id="14498" PostId="5456" Score="0" Text="ctrl: yes yes, I mean recursion, as in `(define (while c f) (begin (f) (when (c) (while c f))))`." CreationDate="2019-03-13T20:15:23.550" UserId="6546" />
  <row Id="14499" PostId="5456" Score="0" Text="Ben: age 15, absolute beginners. Turtle based on the descriptions I found about the old logo, I briefly described it in the question (basically just drawing lines). What interests me is ideas for introducing the fact that there exists a primitive called while that does what we want to do: I look for some interesting &quot;what we want to do&quot;, possibly the most diverse to not lock the students in thinking that it's something of too narrow applicability." CreationDate="2019-03-13T20:24:36.970" UserId="6546" />
  <row Id="14484" PostId="5457" Score="0" Text="That's a nice idea, thanks, I don't recall having ever heard of sensors in the logo turtle. Anyway yes, what I was looking for is exactly what you mentioned: interesting examples to use the information stored in the program, or coming as input to the program." CreationDate="2019-03-12T11:22:06.653" UserId="6546" />
  <row Id="14485" PostId="5458" Score="0" Text="I generally agree, but also note that a microkernel is amazingly small." CreationDate="2019-03-12T14:45:23.763" UserId="1293" />
  <row Id="14547" PostId="5458" Score="0" Text="Some are, some aren't :-) IIRC the Mach &quot;microkernel&quot; was bigger than the BSD/OS &quot;macrokernel&quot; as we would configure it for a fairly typical server. Wish I could remember the actual numbers, but it's been like 20 years…" CreationDate="2019-03-21T03:42:08.510" UserId="134" />
  <row Id="14487" PostId="5460" Score="0" Text="It sounds like your mental model of learning is pretty similar to mine, particularly vis-a-vis complexity and abstraction.  I love this answer." CreationDate="2019-03-12T17:48:59.757" UserId="27" />
  <row Id="14488" PostId="5460" Score="0" Text="Oh thanks Ben :) glad to hear that my ideas are shared." CreationDate="2019-03-12T19:47:13.153" UserId="6546" />
  <row Id="14489" PostId="5460" Score="0" Text="I hope we see much more of you!" CreationDate="2019-03-12T21:10:04.683" UserId="27" />
  <row Id="14642" PostId="5460" Score="0" Text="So what do you think of the SICP book? Good explanation / introduction or not? If you don't like it, what direction is better? I would lean towards more concrete, simple, directly applicable." CreationDate="2019-04-01T10:59:56.993" UserId="5349" />
  <row Id="14491" PostId="5461" Score="2" Text="Hello, and welcome to [cseducators.se]. I hope you have found the site helpful so far. You have the needed reputation points to join [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom), our often quiet, chatroom. I am thinking this question might be a bit broad in scope for the site. The problem is not, however. Things tend to work best when a questions has &quot;A&quot; question rather than a group of questions. Responses are more focused, and answers more helpful." CreationDate="2019-03-13T07:32:38.123" UserId="104" />
  <row Id="14494" PostId="5461" Score="0" Text="This question can probably be split into really good questions, which are a better fit for the Q&amp;A system of this site." CreationDate="2019-03-13T09:22:15.953" UserId="150" />
  <row Id="14495" PostId="5461" Score="0" Text="Thank you for the comments and the chatroom. I'll edit again later if I manage to split the question down." CreationDate="2019-03-13T09:50:54.537" UserId="6701" />
  <row Id="14497" PostId="5461" Score="1" Text="I teach computational theory, but I'm not sure how to approach this question. You have a wide degree of latitude depending on the goals of the course, which either you, your department, your school, or your state get to set. What do *you* want your students to get out of the course? What are the key ideas you want them to understand? What do you hope they will be able to do with it?" CreationDate="2019-03-13T17:35:45.287" UserId="27" />
  <row Id="14696" PostId="5461" Score="1" Text="@kate You should remove that edit and create a second question.  (The SE model typically involves only one question per question page)  When I saw that you edited this one, I hoped that you had added in answers to some of the follow-up questions I had.  I'm still not sure how to advise you without more information." CreationDate="2019-04-12T13:48:04.707" UserId="27" />
  <row Id="14691" PostId="5464" Score="0" Text="Thank you for your reply. Yes, computability itself is quite big, and my department is combining it with Complexity... those are two big subjects combined into one. Yes, I have the Michael Sipser book, it's very good. Perhaps I should integrate that one into the course if I managed to; currently mine is based on Peter Linz's book and Levitin's algorithm book. I thought JFLAP only does simple simulations of FA, but maybe I'm wrong; I'll try to study it better." CreationDate="2019-04-12T06:29:42.207" UserId="6701" />
  <row Id="14692" PostId="5464" Score="0" Text="I wonder how other professors/TAs managed to give programming assignments to their students, such as building a CYK algorithm-based parser, but they provided the parser/compiler/backbone (?)" CreationDate="2019-04-12T06:31:18.753" UserId="6701" />
  <row Id="14510" PostId="5468" Score="1" Text="I also was a Teaching Assistant for a &quot;programming 101&quot; course for non-computer majors, back in 1987. Same approach... &quot;What does this line of code do? Now what does the next line do?&quot; Some mastered it quickly, some struggled, some were uninterested. Pouring water on a horse does not result in people learning to program. Apples work though." CreationDate="2019-03-15T02:24:13.733" UserId="5349" />
  <row Id="14513" PostId="5468" Score="0" Text="Yes! Thanks! Sounds like a great approach, I hope I can try it in the short remaining time span." CreationDate="2019-03-15T09:00:07.903" UserId="6546" />
  <row Id="14514" PostId="5468" Score="1" Text="Mmh, thinking about it again, maybe what they struggle with the most is not the concept of loop, it's that of mutation. I mean, they have this idea that things in `for` are going to be repeated, but probably they have no idea how: maybe they think &quot;I want repetition -&gt; I write for&quot;, but without understanding. They are so much confused that even I don't understand where is the confusion :D [...]" CreationDate="2019-03-15T09:22:09.960" UserId="6546" />
  <row Id="14515" PostId="5468" Score="0" Text="The other day something shocked me: a girl supposed to be quite good was tracing a loop with my supervision and at the moment of `i++` she added a new line at the bottom with the new `i`, I tried to convince her that it would be more precise to update the `i` where it was, but she resisted a lot and thought there's no difference in updating it or adding one new. Am I wrong wanting them to mutate? Is there value in her method?" CreationDate="2019-03-15T09:22:18.117" UserId="6546" />
  <row Id="14517" PostId="5468" Score="1" Text="The splendor and mystery of *Mutation*. For some reason I never experienced e dreaded confusion about what exactly it is or how to use it in a program, but I have read that it is a major stumbling block. To be fair, a *variable* is unlike any other thing in the entire universe, you can just *change its value* any time you want. Noting else in our world works that way. When I was in 8th grade and a teacher was explaining programming, he drew a rectangle on the board, wrote 'X' next to it and said, &quot;this is a variable.&quot; Then he wrote 7 in it. Then he added one to X, erased the 7 and wrote 8. --" CreationDate="2019-03-15T10:57:47.410" UserId="5349" />
  <row Id="14518" PostId="5468" Score="4" Text="-- Apparently we are too proud of ourselves these days to begin the explanation at this low level. But I never had any question in my mind what a variable was, and when people said that *mutation* was confusing to students, I was like, yeah, like a doorknob is confusing... So when I encountered the dreaded concept, the horrific terror if *Indirection* the next year, it was not much of a stretch. **Oh, a variable that holds an address.** We can increment it, etc. But I get flack from people on this site about teaching this way. **I learned this way. It works.**" CreationDate="2019-03-15T11:03:34.947" UserId="5349" />
  <row Id="14520" PostId="5468" Score="0" Text="I feel exactly like that: oh this can hold a value, oh now I change it. It's so damn simple I still cannot understand the least how this may be confusing for the students. But the evidence says it is, I would be so glad could I have a clue why, but I don't. All I know how to do is tracing the execution, &quot;drawing memory&quot;. It's easy, clear, effective. But they don't do it, they weren't taught to do it, and they are scared that I want them to do it. More than showing it the same crystal clear way as your `x=7; x++;` I don't know what could I do. I can't understand what's the difficult point." CreationDate="2019-03-15T23:40:46.613" UserId="6546" />
  <row Id="14521" PostId="5468" Score="1" Text="Probably this is a case where the major difficulty is unlearning a confused way of writing mindless random things without any reason more than learning a concept that would clarify things but that requires thought energy. Btw another strange thing I see in younger students (to their defense it's the first time they see anything related to cs) is that they imagine the code do what they have in their minds instead of what's written. They give personality and force of will to the code. Also here it's quite difficult for me to understand why." CreationDate="2019-03-15T23:52:52.410" UserId="6546" />
  <row Id="14557" PostId="5468" Score="1" Text="I didn't have any problem with mutation, either. But I learned programming long before I learned algebra. Today, many students start programming after algebra and perhaps that is part of the problem. There is a confusion between programming notation and mathematical notation. Some students think that writing `y=a+3` means that the value of y will always be three more than a, so if you change a, y changes too. In algebra, `=` is an assertion of equality. In programming, it's mutation. Some students have to be told this explicitly." CreationDate="2019-03-21T20:48:56.527" UserId="6704" />
  <row Id="14558" PostId="5468" Score="2" Text="@BarryBrown yes, I have heard about this confusion too. I recall a girl saying, &quot;*How can x ever equal x plus 1?*&quot; It took me a moment to figure out what on earth she was saying. But if you drew a box on the board and wrote in it, then it seems obvious that a and y are not magically linked. People are not learning in a way that makes it obvious what is happening, which means that teachers are not writing on the board and uttering the correct words. It is not a magic spell, it is just explanation. The idea of Functional Programming will only increase this confusion." CreationDate="2019-03-21T22:56:24.810" UserId="5349" />
  <row Id="14533" PostId="5470" Score="0" Text="You may be interested in https://cseducators.stackexchange.com/q/2897/204 Maybe you can help by giving an answer. Consider also mercurial (in my opinion easier to use), and bitbucket: ≤5 users private repositories are free, public repositories are free, teacher accounts are free, and less/un redistricted." CreationDate="2019-03-19T00:13:34.420" UserId="204" />
  <row Id="14534" PostId="5470" Score="0" Text="Note: revision-control ≠ change-control ≠ source-control ≠ version-control." CreationDate="2019-03-19T00:15:06.973" UserId="204" />
  <row Id="14788" PostId="5470" Score="0" Text="No matter what you do NOT start with Git! It's worst kind of revision control for a beginner. It actually doesn't make any sense in the classroom setup. Start with something basic, maybe even rsync to get an idea of what this is and why one needs it" CreationDate="2019-04-22T19:26:32.170" UserId="6827" />
  <row Id="14791" PostId="5470" Score="0" Text="@Aksakal - Does rsync run on Windows? Students want access to their work from home and the ability to collaborate in class. Could you expand on what you see as the problems are with Git and GitHub?" CreationDate="2019-04-22T22:49:55.917" UserId="134" />
  <row Id="14537" PostId="5471" Score="0" Text="I didn't realize this, and it makes a lot of sense.  Nice answer!" CreationDate="2019-03-20T12:03:31.843" UserId="27" />
  <row Id="14798" PostId="5474" Score="0" Text="&quot;OK, maybe I'm just a contrarian, but the approach that I take is to validate the experience that programming is sometimes hard&quot; - I consider programming a game that never gets old. I never feel it's hard inherently, the only thing that makes it hard is the deadlines when you do it for money." CreationDate="2019-04-23T01:59:00.093" UserId="6827" />
  <row Id="14540" PostId="5476" Score="0" Text="This answer is a bit of a stub.  Would you mind expanding on what you've said here?  If it is helpful, it seems like these two parts were unaddressed in your answer: *What are essential skills with revision control tools? What are best practices (or good sources for learning about them)?*" CreationDate="2019-03-20T13:53:32.697" UserId="27" />
  <row Id="14544" PostId="5476" Score="0" Text="Would love to hear about how you’re incorporating Agile boards into your classes." CreationDate="2019-03-20T21:35:42.753" UserId="134" />
  <row Id="14539" PostId="5477" Score="0" Text="Hi Charlotte, welcome to [cseducators.se]!  Always glad to have more NCSSM faculty here :)" CreationDate="2019-03-20T13:50:33.443" UserId="27" />
  <row Id="14641" PostId="5477" Score="0" Text="When I was in 9th grade I came up with my own projects because the course was not available to me right then. I was working by myself though. I definitely felt passionate about it and it was not being graded. It worked. Same in college: I was really interested in getting my assignments to function." CreationDate="2019-04-01T10:53:27.660" UserId="5349" />
  <row Id="14553" PostId="5480" Score="0" Text="Are you focused on HS (Secondary education) or otherwise (broader, other)?" CreationDate="2019-03-21T14:41:23.867" UserId="1293" />
  <row Id="14554" PostId="5480" Score="0" Text="My standards work is K-2; I teach at a high school.  We are creating programs for both in-house at the upper 11-12 level and more broadly at the K12 level, both formal an informal.  So, I will happily take all suggestions!" CreationDate="2019-03-21T15:33:03.690" UserId="6741" />
  <row Id="14555" PostId="5480" Score="0" Text="Elementary ed too? I assume you meant K-12 not K-2." CreationDate="2019-03-21T15:37:01.703" UserId="1293" />
  <row Id="14556" PostId="5480" Score="0" Text="You may want to check out [this question](https://cseducators.stackexchange.com/questions/5080/what-belongs-in-a-low-math-undergraduate-ai-elective-besides-ml) - it's not a duplicate, but it's similar enough that it might well be helpful." CreationDate="2019-03-21T20:39:16.013" UserId="27" />
  <row Id="14563" PostId="5480" Score="0" Text="@Buffy, My standards work is K-2, as I am on that grade band team.  I've taught every grade throughout my career.  Currently I work at a high school, and we are creating curricular resources for K-12." CreationDate="2019-03-22T17:25:37.660" UserId="6741" />
  <row Id="14581" PostId="5480" Score="0" Text="This needs more context to be truly answerable. Is the target audience completely generalist (i.e. the goal is to give literature students a broad-brush idea of current notions of AI), interested in CS in general but not necessarily specifically in AI, or specifically interested in AI and already knowledgeable about foundations of CS? How much time is available?" CreationDate="2019-03-25T11:42:06.913" UserId="1219" />
  <row Id="14632" PostId="5480" Score="0" Text="Hi @CharlotteDungan, just FYI I sent this question on to two people who teach A.I. in the k-12 space, both started writing answers, and both stopped because they felt like the question was too broad (ie. would take too much effort to write a proper response). This question is absolutely topical, but you might want to break it up into smaller, separate questions to obtain more answers." CreationDate="2019-03-29T18:32:09.640" UserId="27" />
  <row Id="14560" PostId="5481" Score="0" Text="Is this a self-learning situation, or are you faced with teaching a group of such students? Also, what is your own background if you are the teacher of such a group?" CreationDate="2019-03-22T14:30:01.870" UserId="1293" />
  <row Id="14561" PostId="5481" Score="1" Text="Why are premed students taking programming in the first place?  What is the *goal* of the course?" CreationDate="2019-03-22T15:36:57.300" UserId="27" />
  <row Id="14562" PostId="5481" Score="0" Text="@BenI., maybe it is a research oriented program for the medical sector. I'd like more information, of course." CreationDate="2019-03-22T16:29:36.060" UserId="1293" />
  <row Id="14570" PostId="5481" Score="0" Text="The good news is that it only takes about 10,000 hours to become proficient at anything. Start now and you can get there in a few years of all-out effort. Otherwise, get used to being a dabbler. Is there value in that? Yes. I used to be a Teaching Assistant in a &quot;101&quot; college course in programming for non-majors. Many students came away with helpful experience, some did not. I didn't try to figure out which would be which." CreationDate="2019-03-23T14:48:31.633" UserId="5349" />
  <row Id="14569" PostId="5482" Score="0" Text="I like the statement &quot;forget which students are pre-med...&quot; Etc. I used to tell my students that programmers are not paid to have opinions. Teachers are not either." CreationDate="2019-03-23T14:43:37.660" UserId="5349" />
  <row Id="14564" PostId="5483" Score="0" Text="Do the students already know Python or something similar? CS students usually do by the time they get to such a course." CreationDate="2019-03-22T19:48:17.140" UserId="1293" />
  <row Id="14577" PostId="5483" Score="0" Text="The only language they're guaranteed to have previous exposure to is C++. *Some* other students may have exposure to other languages (Python included), but not all students are CS students because the course is in a cross-disciplinary Data Science certificate program (math and cs)." CreationDate="2019-03-24T20:54:47.797" UserId="6746" />
  <row Id="14614" PostId="5483" Score="0" Text="What matters are abstractions. That's application types &amp; libraries. The Python syntax &amp; semantics you would need are straightforward in this respect." CreationDate="2019-03-27T22:11:31.987" UserId="2485" />
  <row Id="14615" PostId="5483" Score="0" Text="@philipxy strikes me that while the syntax between Python and R are a bit different, neither the syntax nor semantics are wildly different when it comes to most intro to DS topics. However, I don't think language choices are irrelevant to curriculum design, in particular when trying to cover both languages and determine the most appropriate order." CreationDate="2019-03-28T00:11:23.600" UserId="6746" />
  <row Id="14650" PostId="5483" Score="0" Text="Often, these languages are used together.  There is no &quot;vs.&quot;" CreationDate="2019-04-05T14:06:25.783" UserId="21" />
  <row Id="14565" PostId="5484" Score="0" Text="Interesting, but no use for me (number 6) as it is a proprietary program (Not [Free](https://www.gnu.org/philosophy/free-sw.en.html))." CreationDate="2019-03-22T19:54:12.483" UserId="204" />
  <row Id="14566" PostId="5484" Score="0" Text="Ah, yes, I'd overlooked your restriction to only considering FOSS. That's really going to limit your options and honestly, you're probably best just learning command-line git.&#xA;&#xA;For what it's worth, I've taught all my intro classes (both CS1 and a pseudo-CS0.5) with _very basic_ git. They learn to fork (on GitHub) my work, clone their forks so they can edit code locally, stage and commit new revisions, and push their work back up to their forks. It usually takes a little struggling at first, but most students have it down within a few assignments." CreationDate="2019-03-22T20:08:08.257" UserId="6746" />
  <row Id="14567" PostId="5484" Score="0" Text="I do command-line and Gui mercurial (hg). It is much easier, but a shame that its internals are not so beautiful. Hopefully the next gen revision-control system (distributed), will be beautiful on the inside and the outside." CreationDate="2019-03-22T20:11:41.677" UserId="204" />
  <row Id="14572" PostId="5485" Score="0" Text="This is important to impress on people, computers are machines, just as Ada Lovelace said. No matter how complex and sophisticated, until they become self-aware, they are not thinking, understanding, deciding... They are as dumb as a piece of silicon and have no insight. People in China or Japan, I forget which, are currently talking with a conversing voice on their phones because they are lonely. Humans are very easily drawn in  to anything that remotely seems like an interaction, because we have to care for infants, and we make huge efforts to see them as beings. Computers are not." CreationDate="2019-03-24T13:21:34.667" UserId="5349" />
  <row Id="14573" PostId="5485" Score="0" Text="@ScottRowe it is not the silicone of it that makes in dumb. Look at how it works. There is a control-unit conducting the orchestra, but unable to hear, and does not even know what the instruments are. There is the ACU, being controlled by the control-unit, just doing logic operations on its input, and outputting something that makes sense to the programmer. None of this remembers what it just did, so no program could be written to allow self awareness (If you try to make it self aware, then it can only be aware of the current instruction: a part of the self-awareness program)." CreationDate="2019-03-24T13:59:10.697" UserId="204" />
  <row Id="14574" PostId="5485" Score="0" Text="Some people argue that humans cannot possibly have consciousness either, because they are composed of material substances following deterministic laws. Consciousness has never been adequately explained, indeed, people can not even agree on a definition. It would be better if people realized that they are not unmaterial and special also. We somehow have insight, but it does not guarantee anything, least of all correct conclusions. We are smarter than a lump of silicon, but perhaps not for long. Then we really will be able to have insightful conversations with conversing voices." CreationDate="2019-03-24T14:14:10.443" UserId="5349" />
  <row Id="14575" PostId="5485" Score="0" Text="I don't thing that the material has anything to do with it. I don't see any reason why silicone etc. can't do what carbon etc. does. I only see that the current computer configurations can not be self-aware. Maybe one day, we will work out how to do it differently, and then they will take over and turn us all into fertiliser." CreationDate="2019-03-24T14:19:21.810" UserId="204" />
  <row Id="14576" PostId="5485" Score="0" Text="We keep pets. I see no reason why an intelligence greater than ours would not simply do the same. My cat has a longer and healthier life than a wild kitty, but probably more boring. These are details that something smarter than ourselves would find trivial. Besides, humans might have interesting and useful perspectives that an AI lacks. It need not be adversarial. My dog could catch Frisbees way better and run faster than I could, to say nothing of nose and ear sensitivity. But modern computers are still dumb, despite playing Chess and Go (and probably driving vehicles) better." CreationDate="2019-03-24T15:05:17.837" UserId="5349" />
  <row Id="14585" PostId="5485" Score="0" Text="@ctrl-alt-delor Re, &quot;...none of this remembers what it just did, so no program could be written to allow self awareness.&quot; That sounds like non-sequitur. Natural-language understanding systems going all the way back to [SHRDLU](https://en.wikipedia.org/wiki/SHRDLU) in 1968 can answer questions about &quot;what they just did&quot; even though they run on computing machinery whose isolated functional units are incapable of answering that same question." CreationDate="2019-03-25T17:22:48.133" UserId="1269" />
  <row Id="14588" PostId="5485" Score="0" Text="@SolomonSlow I did not say that we could not program a simulation." CreationDate="2019-03-25T20:43:21.390" UserId="204" />
  <row Id="14591" PostId="5485" Score="0" Text="I think you misunderstood me. I meant to call attention to the huge number of layers of abstraction that come between what digital circuits in a computer system do and what a software application running on that platform can do. All modern computers are Turing complete. So, if you think that Turing completeness is sufficient to support AI, then there's no reason to drill down through all of those layers to explain it. But, maybe you think that &quot;Turing complete&quot;==&quot;stupid&quot; (i.e., not sufficient to support _real_ intelligence.) If so, then maybe you could explain why." CreationDate="2019-03-26T12:48:56.837" UserId="1269" />
  <row Id="14592" PostId="5485" Score="0" Text="@SolomonSlow Oh good point. I was wondering a few weeks ago “Is Turing complete enough” — I still don't know. However my self-awareness, dose not go down to the lowest level, so maybe a Turing complete machine can be aware of its higher levels but like me not its lower levels." CreationDate="2019-03-26T13:48:19.620" UserId="204" />
  <row Id="14612" PostId="5485" Score="0" Text="&quot;I do what they say, **but not what the mean**.&quot; Huh? Abort." CreationDate="2019-03-27T21:58:44.253" UserId="2485" />
  <row Id="14568" PostId="5486" Score="0" Text="What a detailed and helpful reply! I will be making good use of this post over the next few weeks." CreationDate="2019-03-23T12:47:45.283" UserId="27" />
  <row Id="14578" PostId="5488" Score="1" Text="Upvoted for contributing something new, though I disagree.  &quot;Children can do it&quot; is hardly a solid metric of ease.  Children also learn to read, but it's hardly &quot;easy&quot;. It takes literally years to learn well. Any topic of sufficient depth comes with enormous potential cognitive burdens.  While lowering the standards can cause more people to pass, it's hard for me to imagine that this will advance the field at large; we would be slowing down the 50% of the students who already thrive in order to accommodate the 25% of students who are not doing well. We need differentiated responses." CreationDate="2019-03-24T22:26:43.550" UserId="27" />
  <row Id="14579" PostId="5488" Score="1" Text="I wouldn't read too much into that one line because the author has important points in the full text. For what it's worth, I am not fully endorsing either the &quot;programming is difficult&quot; or &quot;programming is easy&quot; standpoint. However, I do think the stigma of being a &quot;hard major&quot; doesn't really do us any favors besides feeding egos for those of us who made it through any way." CreationDate="2019-03-25T00:28:18.590" UserId="6746" />
  <row Id="14580" PostId="5488" Score="0" Text="Perhaps children should start learning about computers when they are learning to speak and read? The best skiers and skaters start as soon as they can stand up. Same for horse riding, gymnastics and so on. We could give young children technology products when they are two... Wait." CreationDate="2019-03-25T01:21:42.567" UserId="5349" />
  <row Id="14582" PostId="5488" Score="1" Text="@KevinBuffardi I skimmed over the full paper.  What it's missing entirely is the idea that people are just *different*.  I guess what I'm suggesting is that the topic is neither intrinsically hard *nor* intrinsically easy; it depends on your personal background and how you are personally wired.  It's very easy for some, brutally difficult for some others, and somewhere in the middle for most. (That statement should track with our intuitive lived experience pretty well.)  (cont...)" CreationDate="2019-03-25T14:02:49.200" UserId="27" />
  <row Id="14583" PostId="5488" Score="0" Text="(...) The fallacy is thinking that the topic itself is either.  Instead, I'd argue that the topic is sufficiently complex to cause substantially divergent difficulties for different individuals." CreationDate="2019-03-25T14:03:44.757" UserId="27" />
  <row Id="14587" PostId="5488" Score="1" Text="Both are valid insights, but that's the point. I think we have the habit of treating programming as if it is distinctly &quot;hard&quot;&#xA;&#xA;Learning in general is hard. Suggesting that programming is distinctly harder than physics, foreign languages, playing an instrument, etc scares away capable people. Just calling it &quot;easy&quot; doesn't do it justice either. &#xA;&#xA;Marosh Fatima's heart is in the right place. Many students have the notion that CS is &quot;too hard&quot; or they don't belong and won't give it a proper chance. Replacing that attitude with a growth mindset like @CharlotteDungan suggested should help." CreationDate="2019-03-25T20:31:32.503" UserId="6746" />
  <row Id="14596" PostId="5490" Score="1" Text="Thanks for the reply. I should clarify that in the certificate program, they get experience with both. The question is more about which is better to start with." CreationDate="2019-03-26T19:01:30.820" UserId="6746" />
  <row Id="14610" PostId="5492" Score="0" Text="These aren't exactly answers (hence, a comment), but here's some discussion about similar academic questions: (1) [How to stop hopping the learning chain and actually begin somewhere?](https://academia.stackexchange.com/q/89032/70557) (2) [How to read papers without falling into a rabbit hole?](https://academia.stackexchange.com/q/68605/70557)" CreationDate="2019-03-27T14:16:15.523" UserId="4995" />
  <row Id="14629" PostId="5494" Score="0" Text="+1. And it makes a huge difference if the project is something I really want to make, as opposed to some homework I assigned myself because I wanted to add something to my resume. When I'm passionate about the end goal, the dry documentation suddenly becomes fascinating." CreationDate="2019-03-29T15:00:56.087" UserId="4437" />
  <row Id="14600" PostId="5495" Score="0" Text="This sounds like a really good idea, and something that is in line with my learning style. I do see one issue, however. That is that for Vulkan in particular there is a *lot* of background that is needed to do something even at a hello world level. I've seen posts that claim that you need over 1,000 lines of code to draw a triangle. This background makes an approach where I look for specific things less useful, as I won't know what specific things to look for." CreationDate="2019-03-27T01:37:26.897" UserId="6762" />
  <row Id="14609" PostId="5495" Score="1" Text="@john01dav hmm, that *is* frustrating. I guess maybe you need to recalibrate what &quot;hello world&quot; looks like for vulkan, then? I don't know enough about Vulkan to be able to provide specific advice, but maybe you're doing something that doesn't draw anything on the screen, but sets something up in the background - anything, really (is there something in vulkan that acts as console.log or print for debugging?). It's just got to start small, so you can start seeing results quickly." CreationDate="2019-03-27T13:39:54.913" UserId="919" />
  <row Id="14611" PostId="5495" Score="0" Text="@john01dav these challenges are part of the reason why people build rendering/game/graphics engines on top of standards like Vulcan/OpenGL/DirectX. Its *hard* to understand and do all this stuff, and while knowledge is always useful, understanding exactly what goes into 1000 lines of boilerplate might have a lower payoff than something else." CreationDate="2019-03-27T21:32:51.367" UserId="3457" />
  <row Id="14618" PostId="5495" Score="0" Text="@mbrig OpenGL takes nowhere near as much boilerplate, and can be easily encapsulated, it takes &lt; 100 lines to draw a triangle with textures, I often find it easier to work in OpenGL than higherlevel engines, because now I not only need to know how what is going on with rendering, I have to understand this upper level API that restrict things (unless it is a framework that doesn't restrict access to rendering)." CreationDate="2019-03-28T15:31:59.810" UserId="3168" />
  <row Id="14619" PostId="5495" Score="0" Text="@heather  Vulkan requires a *looooooot* of other concepts orthogonal to rendering to even get started, you need to understand multi process synchronization and message passing (semaphores mutexes, event synchronization etc...), intermediate representation of a language (SPIR-V), memory management, in addition to everything you had to know about graphics for other APIs.  Swap chain management and synchronization, memory management with uniforms, images, and how to use commands properly are what really trip people up. This is required no matter the size of your project." CreationDate="2019-03-28T15:37:31.800" UserId="3168" />
  <row Id="14625" PostId="5495" Score="0" Text="I might be going a bit off-topic with my comment, but where does PEP8 say camelCase (mixedCase) is not in style with the guide for Python?" CreationDate="2019-03-29T12:07:09.300" UserId="6794" />
  <row Id="14627" PostId="5495" Score="1" Text="@lucasgcb: See [this SO answer](https://stackoverflow.com/a/159745/6723642) with the relevant quotes from PEP8." CreationDate="2019-03-29T13:28:34.460" UserId="919" />
  <row Id="14601" PostId="5498" Score="1" Text="The comment about tutorials is valid for many hastily-put-together articles found on the web, often written by someone who is no expert and wants to share what he/she has just learned. But there are also tutorials that are very carefully designed, crafted, and reviewed by experts. You need to be able to recognise the difference." CreationDate="2019-03-27T10:21:43.727" UserId="2936" />
  <row Id="14603" PostId="5498" Score="1" Text="@MichaelKay, I've added an &quot;exceptions notwithstanding&quot;. As a counterexample to your counterexample I'll mention a once de-facto Ruby-on-Rails tutorial, which was in fact a very long and extremely well written e-book/website. Both didactically great; written in clean and well understandable tone. Exactly what you propose. The problem? It is for Rails 3. Rails 4+ are radically different. Most of the info in that tutorial is not only replaced by more modern stuff, but doesn't work anymore, outright. The problem? As it's so good, it still often turns up quite high in searches, and it is really..." CreationDate="2019-03-27T12:17:01.777" UserId="652" />
  <row Id="14604" PostId="5498" Score="0" Text="... tempting and easy to fall into the trap of using/studying it; eventually getting ever more and more confused due to the fact that things mysteriously fail to work over time. But really worst of all; even the parts that still work follow an outdated mode of operation for several parts of that ecosystem. All in all, a developer following that as his main source at the beginning sets out with a (in part radically) wrong understanding, laying plenty of obstacles in the way." CreationDate="2019-03-27T12:18:27.840" UserId="652" />
  <row Id="14605" PostId="5498" Score="0" Text="Yes, out-of-date information is always a problem on the web." CreationDate="2019-03-27T12:53:06.820" UserId="2936" />
  <row Id="19390" PostId="5504" Score="0" Text="As well as writing one's own documentation, as I work on a simple example that uses the tool/API I am trying to learn, I annotate (heavily) the code that indicates what component of the language I was using at that point in my code and WHY I was using it. Then test, test, test each bit of code as I add a little bit more." CreationDate="2022-02-18T20:20:46.467" UserId="8155" />
  <row Id="14621" PostId="5506" Score="1" Text="Why do you think that a general-purpose programming language would be more appropriate to learn first in data science, rather than a language specifically for statistical analysis?" CreationDate="2019-03-28T17:48:17.777" UserId="6746" />
  <row Id="14623" PostId="5506" Score="0" Text="Don't judge me, but this learning system was imposed on me by my university, and this is much easier for me now." CreationDate="2019-03-29T07:38:26.317" UserId="6786" />
  <row Id="14626" PostId="5506" Score="0" Text="By &quot;online service with a Python API&quot;, you mean Python packages dedicated to interacting with a Web API like [plot.ly](http://plot.ly)? R already has similar things out of the box with R shiny." CreationDate="2019-03-29T12:44:20.627" UserId="6794" />
  <row Id="14630" PostId="5506" Score="1" Text="@Edanprovidence sorry no judgment was intended, I was just trying to better understand your reasoning. I appreciate your input." CreationDate="2019-03-29T17:32:56.427" UserId="6746" />
  <row Id="14624" PostId="5508" Score="1" Text="Welcome to [cseducators.se]! This answer seems to have good potential. could you perhaps expand it with slightly more concrete examples? Either way, I personally find this to be quite a good answer. I sure hope we'll see more content such as this answer from you again :)" CreationDate="2019-03-29T10:34:07.010" UserId="150" />
  <row Id="14631" PostId="5508" Score="0" Text="@ItamarG3 Thank you, flattered :) I think the answer already explains my approach totally I'm not sure how can I expand it. But if you have a question or you think something is unclear, I can gladly include an answer for it. Thanks for your time." CreationDate="2019-03-29T17:52:37.323" UserId="1449" />
  <row Id="14628" PostId="5510" Score="2" Text="Nice answer. Welcome to the site." CreationDate="2019-03-29T14:01:13.240" UserId="1293" />
  <row Id="14633" PostId="5511" Score="2" Text="Welcome to [cse.se]. Sorry to learn that you've got such an issue in your class. Seems completely counter to the school's purposes. Unfortunately, while it does involve the a CS classroom, it's not really about CS education _per se_. I cannot think of any other place in the network where it would fit either. Of course, I'm no expert on every site here either. Glad to have you here on our site, nonetheless." CreationDate="2019-03-30T18:53:47.613" UserId="104" />
  <row Id="14635" PostId="5511" Score="0" Text="Is ignoring someone always bad behaviour? And what does the student mean by rude?" CreationDate="2019-03-31T10:08:16.063" UserId="204" />
  <row Id="14643" PostId="5511" Score="0" Text="You could try asking this on Academia SE" CreationDate="2019-04-01T14:00:33.673" UserId="6808" />
  <row Id="14644" PostId="5511" Score="0" Text="In discussion with the other moderators, we have reopened this question so that it can receive answers again.  When there is time, I will open up a meta about it; my view is that this is completely topical, but clearly there is some discussion to be had.  If you do choose to post it at Academia anyway (which I would understand), please delete it here since questions are not supposed to be asked simultaneously in more than one SE forum.   That said, I hope that the question does well here. I think it's an important one for this forum, and one that needs to be considered *in this context.*" CreationDate="2019-04-03T20:27:21.417" UserId="27" />
  <row Id="14645" PostId="5511" Score="0" Text="@Embarrassedtenuredprofessor, good question, but can you provide a little more context? Are they being rude in just informal settings, or are the students supposed to be interacting (in teamwork, peer instruction, etc)?" CreationDate="2019-04-04T03:27:42.300" UserId="6746" />
  <row Id="14646" PostId="5511" Score="0" Text="@KevinBuffardi They are apparently being rude in informal settings. I tell students that they should work with other students outside of class but don't define teams." CreationDate="2019-04-04T21:08:05.917" UserId="6802" />
  <row Id="14647" PostId="5511" Score="0" Text="@ctrl-alt-delor Yes, I think ignoring a classmate who is talking to you or trying to get your attention is bad behavior/rude, unless said classmate has mistreated you. Even if you don't have the time to help them, you can say so in a polite manner." CreationDate="2019-04-04T21:10:06.800" UserId="6802" />
  <row Id="14648" PostId="5511" Score="1" Text="@Embarrassedtenuredprofessor When some one won't leave you alone, ignoring them can be the politest thing you can do. You may tell them, but they don't listen, then you ignore them, then you escalate." CreationDate="2019-04-05T06:57:18.867" UserId="204" />
  <row Id="14652" PostId="5511" Score="0" Text="I never seen computer science people ignoring peers, I'd say it's a highly unusual behavior. CS folks usually struggle with finding people who understand and share their passion to IT. Put two computer geeks into a large room with a big crowd, they'll find each other and will chat all night ignoring everyone else. I've seen this over and over, it's a typical behavior for CS species. My suspicion is that there's something wrong with complaining folks" CreationDate="2019-04-05T15:14:47.637" UserId="6827" />
  <row Id="14653" PostId="5516" Score="0" Text="Moodle is a CMS, and some features are easy to use, but in general this kind of thing is not easy if you want automated grading, and so on." CreationDate="2019-04-05T21:55:41.237" UserId="5349" />
  <row Id="14909" PostId="5516" Score="1" Text="I hope you aren't chasing an impossible dream. Such things require management and are unlikely to run on their own or automatically without support. Version control, backups, uptime, user permissions, disk space, etc. all need to be managed. If you don't have support staff for this you can get swamped, I fear. When the system goes down at 10pm whose job is it?" CreationDate="2019-05-03T17:51:35.917" UserId="1293" />
  <row Id="14910" PostId="5516" Score="0" Text="@Buffy, the dream system would integrate with BlackBoard/Canvas and Git. The piece I'm looking for is only a part of my dream. All I need is for students to be able to run my examples and demos after lectures, then submit their solutions through BB to be graded automatically" CreationDate="2019-05-03T18:01:02.770" UserId="6827" />
  <row Id="14794" PostId="5518" Score="0" Text="The problem that intrigues me is &quot;how do you discover and nurture the people who could be great at piano/differential geometry/CS but who are held back by &lt;fill in the blank&gt;?&quot;" CreationDate="2019-04-23T00:52:48.013" UserId="134" />
  <row Id="14795" PostId="5518" Score="1" Text="@dlu, I'm with Linus Torvalds on this: the kids need to be exposed to CS, then they decide if they want to pursue it. I think it's mainly K-12's objective to expose kids to all different fields and see what sticks. You need good teachers though. We had a crappy chemistry teacher and all that exposure to the subject was wasted. Otherwise, it's an interesting subject and I could see myself liking it under different circumstances." CreationDate="2019-04-23T01:38:29.207" UserId="6827" />
  <row Id="14655" PostId="5523" Score="1" Text="Could you say more about the levels of the students and their backgrounds? What have they already studied, and what sort of projects can they make.in those languages?" CreationDate="2019-04-06T11:54:29.980" UserId="27" />
  <row Id="14657" PostId="5523" Score="1" Text="What is your role? Who is the “they” demanding a project in Java?" CreationDate="2019-04-07T09:37:31.660" UserId="949" />
  <row Id="14661" PostId="5523" Score="0" Text="i am student of CS. And university demands project." CreationDate="2019-04-08T02:46:39.547" UserId="6722" />
  <row Id="14665" PostId="5523" Score="0" Text="Which other languages did you study in your undergraduate program?" CreationDate="2019-04-08T06:46:21.383" UserId="6837" />
  <row Id="14666" PostId="5523" Score="0" Text="@hinamunir if you have experience with other OOP language(s), Java should be relatively easy to learn. You can adopt Java by creating an Android application. [TutorialsPoint](https://www.tutorialspoint.com/android/) has a tutorial and there are others available. However, this stack exchange isn't generically about computer science or programming, it is for CS *educators* -- we are people who teach computer science (at various educational levels) and discuss techniques for teaching. It seems like your question is probably more appropriate in a forum for Java or software development in general." CreationDate="2019-04-08T20:30:04.197" UserId="6746" />
  <row Id="14703" PostId="5527" Score="0" Text="Look at Test Driven Development, and Code katas See Robert. C. Martin, Kent Beck. And then practice" CreationDate="2019-04-17T07:34:49.897" UserId="204" />
  <row Id="14704" PostId="5527" Score="1" Text="Go to Carnegie-Hall." CreationDate="2019-04-17T09:37:27.810" UserId="2103" />
  <row Id="14705" PostId="5527" Score="0" Text="@MichelBillaud When I was in college, the mainframes were actually in a campus building historically called Machinery Hall. I guess it used to be for teaching Engineering (with actual engines)." CreationDate="2019-04-17T11:02:29.647" UserId="5349" />
  <row Id="14720" PostId="5527" Score="0" Text="Ubung macht dem Meister. (sorry no umlaut)" CreationDate="2019-04-19T00:50:24.747" UserId="21" />
  <row Id="14755" PostId="5527" Score="0" Text="How do you judge the quality of your programming? Why do you think it isn't getting better? Is someone complaining? Are you comparing your code to someone else's?" CreationDate="2019-04-22T02:00:07.950" UserId="6827" />
  <row Id="14664" PostId="5528" Score="0" Text="CR is very welcoming of novices, so long as you ask a well-formed [on-topic](https://codereview.stackexchange.com/help/how-to-ask) question ;)" CreationDate="2019-04-08T14:56:58.147" UserId="1333" />
  <row Id="14667" PostId="5528" Score="2" Text="The spirit of CR is different than most other sites. On CR it is expected that what is posted is a completely operational example, rather than a broken one that needs repair. The answers are not how to &quot;fix&quot; the code, but how to make it better. They critique the code, under what ever guidelines each person chooses. A better way to do the same thing, or a more standard's compliant variation, or any number of other points have been addressed. The catch is that before posting the code, as written, _works_. Help with making it work is still best done on Stack Overflow." CreationDate="2019-04-08T22:41:41.057" UserId="104" />
  <row Id="14668" PostId="5531" Score="4" Text="The question is, what is this implementation supposed to illustrate? Clumsy linked-list C programming in Python?" CreationDate="2019-04-09T10:20:25.897" UserId="2103" />
  <row Id="14669" PostId="5531" Score="0" Text="I think it's meant to illustrate how a stack works. Is it as bad as it seems for this purpose?" CreationDate="2019-04-09T10:49:07.550" UserId="6843" />
  <row Id="14670" PostId="5531" Score="0" Text="Definitely. Why the heck use a linked list structure + free list inside a fixed size array (list), where an array + index of the top is sufficient - and is the most common low-level implementation? (better : with python use a list with append/pop https://docs.python.org/2/tutorial/datastructures.html)" CreationDate="2019-04-09T11:30:22.900" UserId="2103" />
  <row Id="15883" PostId="5531" Score="1" Text="@MichelBillaud, given the source, I suspect it's clumsy linked-list *Visual Basic* code badly ported to Python." CreationDate="2019-11-25T08:10:49.650" UserId="1219" />
  <row Id="15884" PostId="5531" Score="0" Text="@PeterTaylor To me, it is written in a &quot;Instructions as State Transformer&quot; style, as the array and top/free list pointers are passed as parameters AND returned, instead of being encapsulated into an object. Also the original stack array is modified during the process, so it is not really functional style with immutable object. The question is: what point is this code supposed to support?" CreationDate="2019-11-25T09:43:28.613" UserId="2103" />
  <row Id="14672" PostId="5532" Score="0" Text="Interesting. Heaps are not part of the syllabus and when I showed my students the code today they were totally baffled. It took me several hours of thinking and tracing to understand it myself. Since we are talking about A Level (pre university) study I think it's fair to conclude that the code is not level-appropriate. It would take considerable experience with a fairly low level language to be able to write this from scratch, which is one of the exercises in the text book. The question is - what can I do about it? Maybe just emphasize the key features and/or contact the exam board?" CreationDate="2019-04-09T13:08:13.257" UserId="6843" />
  <row Id="14673" PostId="5532" Score="1" Text="I'm wondering where you found the code." CreationDate="2019-04-09T13:16:37.807" UserId="1293" />
  <row Id="14674" PostId="5532" Score="0" Text="https://www.cambridge.org/gb/education/subject/computing/computer-science/cambridge-international-and-a-level-computer-science" CreationDate="2019-04-09T13:51:21.457" UserId="6843" />
  <row Id="14677" PostId="5532" Score="0" Text="@ScottRowe, study a pure functional language an you will understand it. It is fundamental there. Or program in OO with a large proportion of immutable objects." CreationDate="2019-04-09T23:38:15.043" UserId="1293" />
  <row Id="15885" PostId="5532" Score="0" Text="@Buffy Actually, the Push method modifies the content of the Stack array given as a parameter." CreationDate="2019-11-25T09:47:23.637" UserId="2103" />
  <row Id="15887" PostId="5532" Score="0" Text="@MichelBillaud, Conceptually the stack is &quot;new&quot;, since it is returned from push. There is a mismatch between the interface protocols and the implementation. Nothing in the interface guarantees the stack returned is the same as the argument. Another flaw in the code, actually." CreationDate="2019-11-25T11:40:17.157" UserId="1293" />
  <row Id="14695" PostId="5538" Score="0" Text="Hello, and welcome to [cseducators.se]! I'm slightly reticent to do anything with that link without knowing more about p1k.  Out of curiosity, are you in any way affiliated with them?" CreationDate="2019-04-12T11:58:58.843" UserId="27" />
  <row Id="14718" PostId="5542" Score="1" Text="Refined sugar is a dangerous addictive substance." CreationDate="2019-04-18T19:56:24.143" UserId="204" />
  <row Id="14719" PostId="5542" Score="0" Text="Related: https://cseducators.stackexchange.com/a/2973/204" CreationDate="2019-04-18T20:04:33.250" UserId="204" />
  <row Id="14724" PostId="5542" Score="0" Text="Hi. I don't think your first comment helps me at all, and your answer to that other question is not relevant to my question. My students are not implementing an algorithm. They will be carrying it out, having read it the night before and done reading questions on it." CreationDate="2019-04-19T01:21:15.463" UserId="294" />
  <row Id="14728" PostId="5542" Score="0" Text="What I described was not coding. It is doing. Yes I used the word implemented, but did not yet mention what hardware. Later it becomes obvious that it is run on the humans (students), with some playing cards." CreationDate="2019-04-19T07:04:49.313" UserId="204" />
  <row Id="14721" PostId="5543" Score="0" Text="I decided to go with a combination of this idea and with Twizzlers, which slice into sub Twizzlers of varying lengths and hence get sorted into something that looks like a triangle. But, I'll also give students a variety of candy after the sorting is done, and encourage them to use what they've learned about swapping to achieve an optimal snack. I like the point about how the massively parallel selection sort of the mind doesn't translate well to an algorithm." CreationDate="2019-04-19T01:19:14.517" UserId="294" />
  <row Id="14723" PostId="5544" Score="0" Text="Thanks for sharing! I'll get some tokens for future classes." CreationDate="2019-04-19T01:20:19.450" UserId="294" />
  <row Id="14722" PostId="5546" Score="1" Text="Thanks for sharing!" CreationDate="2019-04-19T01:19:33.260" UserId="294" />
  <row Id="16448" PostId="5546" Score="0" Text="Yes, I believe it's really important to limit students' sensory input to two numbers at a time to really get across the sorting algorithm, if you're going to teach it manually at all.  Otherwise the majority will just sort visually and completely miss the fact that the computer can't just &quot;scan down the line and see where to put the number&quot; all in one step!" CreationDate="2020-05-05T13:23:18.593" UserId="1103" />
  <row Id="14733" PostId="5551" Score="1" Text="Long answer later, if a better one don't show up sooner. To answer the question, next time, just grab a file, or folder, out of your desk and show them a &quot;file.&quot; English, German, binary, hex, or Martian, is merely the &quot;encoding.&quot;" CreationDate="2019-04-20T07:22:49.607" UserId="104" />
  <row Id="14734" PostId="5551" Score="0" Text="I upvoted the question when you said Hex Editor. Great start!" CreationDate="2019-04-20T12:51:34.827" UserId="5349" />
  <row Id="14740" PostId="5551" Score="1" Text="Related question? --  https://cseducators.stackexchange.com/questions/3535/introducing-file-systems-to-students-who-really-dont-understand" CreationDate="2019-04-20T22:44:05.750" UserId="5349" />
  <row Id="18257" PostId="5551" Score="0" Text="Necessary viewing for ppl who chant **Everything is a file in *nix** https://youtu.be/9-IWMbJXoLM and don't recognize that that is part of the problem not the solution!" CreationDate="2021-09-12T15:13:10.467" UserId="8837" />
  <row Id="19121" PostId="5551" Score="0" Text="Files are what file systems manage. File systems have state &amp; operators. Operators suggest certain abstractions for what a &quot;file&quot; is. And the documentation explains the abstraction." CreationDate="2022-01-27T04:30:50.767" UserId="2485" />
  <row Id="19634" PostId="5551" Score="0" Text="(This question has been linked to from an article in The Verge: https://www.theverge.com/22684730/students-file-folder-directory-structure-education-gen-z )" CreationDate="2022-04-28T20:22:05.550" UserId="12000" />
  <row Id="14735" PostId="5552" Score="1" Text="And how many of the students have seen a manila folder? A floppy? A dial phone? They have no experience with the things we analogize *from*! Lost beyond lost in a hall of mirrors." CreationDate="2019-04-20T13:06:07.427" UserId="5349" />
  <row Id="14762" PostId="5552" Score="0" Text="Could you explain what you mean by *&quot;lost beyond lost in a hall of mirrors.&quot;*?" CreationDate="2019-04-22T11:00:11.607" UserId="6896" />
  <row Id="14767" PostId="5552" Score="1" Text="@LogicalBranch Sure. Humans usually make meaning by relating to things in their environment. The floppy disk is the icon for 'store' because they used to be commonplace. But to someone who has never seen one, it doesn't have any inherent meaning. If a student is asking what a file is, it probably means they have no referent, no commonplace objects, situations and processes that they can intuitively substitute. If all of computing is strewn with metaphors and references to never-before-known things, it is basically like going to a foreign planet and trying to start from nothing." CreationDate="2019-04-22T11:12:35.917" UserId="5349" />
  <row Id="14768" PostId="5552" Score="4" Text="Beyond, that, the references seem pointless and strained. Floppies only make sense without an internet. And if your entire life experience is that the internet has always just &quot;been there&quot;, how can any other scenario make any sense? If I put you down in the Amazon rainforest and said, &quot;There is lots of food here. Just watch out for the dangerous things.&quot; would you be likely to survive even for 2 days, or know what killed you in your sleep? No. This is the world we put our children in to with no preparation, because we cannot see it from their point of view." CreationDate="2019-04-22T11:17:10.423" UserId="5349" />
  <row Id="14769" PostId="5552" Score="1" Text="Thanks for taking the time to explain, I appreciate it." CreationDate="2019-04-22T11:18:32.850" UserId="6896" />
  <row Id="14770" PostId="5552" Score="2" Text="Sure. This is why I keep crying like the little voice in the wilderness: &quot;We have to start with the the basic level of how things *actually work*!&quot; And everyone here says I am wrong. We shall see. Wait... We are seeing now." CreationDate="2019-04-22T11:20:28.050" UserId="5349" />
  <row Id="14786" PostId="5552" Score="1" Text="+1 @ScottRowe, &quot;Just watch out for the dangerous things&quot; - this reminded me of theme in Heinlein's &quot;Tunnel in the Sky&quot;: the kids are sent to a remote planet and among other things are told to &quot;watch out for stobor.&quot; They weren't told how this *stobor* looks like and what can it do. Interestingly, this seemed to work, but I'm not throwing spoilers here :)" CreationDate="2019-04-22T18:57:18.383" UserId="6827" />
  <row Id="14738" PostId="5553" Score="0" Text="Hard disks are being replaced by solid state 'drives'. (What exactly is driving or driven? Even the words are abstracted away to absurdity.) And much of what we do is &quot;in the cloud&quot; now, so even talking about your computer doesn't apply anymore." CreationDate="2019-04-20T17:35:23.347" UserId="5349" />
  <row Id="14743" PostId="5553" Score="0" Text="My not so abstract computer actually has a hard disk, so it does" CreationDate="2019-04-21T12:38:19.503" UserId="2103" />
  <row Id="14746" PostId="5553" Score="0" Text="Hey, I have a dial telephone sitting on a shelf, but nothing to plug it in to. Give it a few years, then computers will no longer even have screens or keyboards, because most of what we need can be done with voice, as a million years of evolution sans reading has demonstrated. It is being done with voice, and increasingly will be. The question &quot;what is a file?&quot; will no longer have any referent, or anything to prompt it. Files and screens were a temporary phase, like telephone dials and switchboard operators." CreationDate="2019-04-21T13:41:33.123" UserId="5349" />
  <row Id="14741" PostId="5557" Score="0" Text="Right, the OS exists basically to manage files and launch programs." CreationDate="2019-04-20T22:45:26.473" UserId="5349" />
  <row Id="14742" PostId="5558" Score="0" Text="Good question! The best examples would probably be derived from business situations that people would be familiar with. Example: types of plane tickets (economy, upgraded, business, first class). These could have different properties / attributes, but some common methods. Or maybe meal ordering?" CreationDate="2019-04-20T23:18:41.900" UserId="5349" />
  <row Id="14745" PostId="5558" Score="1" Text="Your statement that &quot;polymorphism is not that useful for real concrete applications&quot; is both false and naive. It implies you don't understand what polymorphism is, so it is hard for you to judge what might be a good example. In particular, &quot;animals&quot; is a particularly bad idea until you realize that all of the polymorphism in the Linnaeus taxonomy is interface (not concrete) polymorphism. There are no instantiations of the Mammal class, for example. There are individual tigers and mice, of course, but Mammal is  better thought of as an an interface." CreationDate="2019-04-21T12:59:52.457" UserId="1293" />
  <row Id="14751" PostId="5558" Score="0" Text="See related question https://cseducators.stackexchange.com/q/378/204" CreationDate="2019-04-21T21:11:05.047" UserId="204" />
  <row Id="14777" PostId="5558" Score="1" Text="Good question. While students can easily grasp encapsulation and inheritance, polymorphism often remains an obscure concept, and textbook examples are not any help." CreationDate="2019-04-22T15:59:05.277" UserId="3842" />
  <row Id="14779" PostId="5558" Score="0" Text="Don't overlook testing! &quot;Polymorphism,&quot; in its purest form, means defining an interface that can be implemented by two or more different classes. I have often defined an interface that was implemented by only one class in the finished program, but which was implemented by one or more other classes (a.k.a., _[test doubles](https://en.wikipedia.org/wiki/Test_double)_) in the _[test suite](https://en.wikipedia.org/wiki/Unit_testing)_." CreationDate="2019-04-22T16:24:11.063" UserId="1269" />
  <row Id="14748" PostId="5559" Score="0" Text="I'll note that this is actually an instance of the &quot;Strategy&quot; design pattern. It, like other simple design patterns often makes use of polymorphism, but it is usually interface, rather than concrete, polymorphism. Objects of different classes can be interchanged (polymorphism) when they all have _exactly_ the same public interface. Other sorts of ad-hoc subclassing is just a form of hacking. The OP is cautioned not to confuse subclassing with polymorphism. They are not equivalent." CreationDate="2019-04-21T14:32:25.190" UserId="1293" />
  <row Id="14749" PostId="5559" Score="0" Text="@Buffy I haven't knowingly used polymorphism in prior work, but perhaps I was doing the same thing according to what made sense to me at the time.  Experience can lead people to conclusions, just as well as teaching can. But I have to wonder, if programming really is Engineering in some sense, then why do we expect masses of people to learn it? Few people dabble in helicopter piloting or brain surgery, and with so much riding on programming these days (everything, basically) and soon we will be riding IN programming, and self-learning programs at that, why try to interest everyone in doing it?" CreationDate="2019-04-21T15:55:46.437" UserId="5349" />
  <row Id="14781" PostId="5559" Score="0" Text="@ScottRowe It would be a sad world if people thought that the primary purpose of college was to provide students with job training." CreationDate="2019-04-22T16:42:31.940" UserId="1269" />
  <row Id="14790" PostId="5559" Score="0" Text="@SolomonSlow It is a sad world when they cannot get jobs after going to college, so both objectives must be met. What I have been reading on this site, is that many students cannot write a simple program after several years of instruction. That is even more sad." CreationDate="2019-04-22T22:08:50.053" UserId="5349" />
  <row Id="14772" PostId="5561" Score="2" Text="Everything in computing is either a container or something that goes in a container. Because everything in our minds is either a concept, or an instance of a concept. The hardest thing is coming up with so many names for stuff that never did exist in the first place. (And cache invalidation - the failure of a name.)" CreationDate="2019-04-22T11:26:33.993" UserId="5349" />
  <row Id="18363" PostId="5561" Score="0" Text="this explanation gives the impression that a path leads to a file, which is incorrect. The file name is part of the path." CreationDate="2021-10-29T15:18:18.477" UserId="11210" />
  <row Id="14759" PostId="5562" Score="0" Text="Yes. My Tic Tac Toe example was actually wrapped in a larger framework which included a game (type, players, scores, winner, etc) and players. I was going to add other games, but it served the purpose as a teaching example with one." CreationDate="2019-04-22T10:53:16.927" UserId="5349" />
  <row Id="14778" PostId="5562" Score="0" Text="Thanks for your example.&#xA;By the way, your rant is well-founded, and even more the following observation." CreationDate="2019-04-22T16:09:50.690" UserId="3842" />
  <row Id="14757" PostId="5566" Score="1" Text="Are you required to teach C++? Or can you choose a language that is more &quot;friendly&quot; to beginners?" CreationDate="2019-04-22T10:27:46.990" UserId="1293" />
  <row Id="14763" PostId="5566" Score="0" Text="I don't mean to sound like a know-it-all or come across as someone who's full of themselves but the basics of C++ aren't actually all that hard." CreationDate="2019-04-22T11:05:11.350" UserId="6896" />
  <row Id="14765" PostId="5566" Score="1" Text="@LogicalBranch, ah, if only the basics were sufficient." CreationDate="2019-04-22T11:08:08.393" UserId="1293" />
  <row Id="14766" PostId="5566" Score="0" Text="@Buffy Now, I never said anything about null pointers, segfaults or the hell hole that is memory management." CreationDate="2019-04-22T11:11:26.397" UserId="6896" />
  <row Id="14771" PostId="5566" Score="0" Text="@LogicalBranch, C and C++ programmers do it on the heap." CreationDate="2019-04-22T11:20:45.620" UserId="1293" />
  <row Id="14775" PostId="5566" Score="0" Text="If the basics are no longer sufficient to get started then we deserve our fate." CreationDate="2019-04-22T11:33:15.787" UserId="5349" />
  <row Id="14776" PostId="5566" Score="0" Text="Here is a recent take on &quot;unsafe&quot; languages: https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/" CreationDate="2019-04-22T12:23:39.563" UserId="1293" />
  <row Id="14800" PostId="5566" Score="0" Text="@buffy, no sensible person writes directly in C, they use a framework, perhaps one they have built. That doesn't make C bad or to be avoided. Domain Specific Languages have been around a long time, and they are, as far as I can tell, the best approach to writing a system. Something like Windows is really a large library, thus a kind of DSL. Pretty successful so far. But reading the actual C is how we know how it achieves these results." CreationDate="2019-04-23T11:33:31.950" UserId="5349" />
  <row Id="14831" PostId="5566" Score="0" Text="First teach them to program, then teach then a second language. Only then teach them C++." CreationDate="2019-04-27T17:10:37.817" UserId="204" />
  <row Id="14832" PostId="5566" Score="0" Text="@LogicalBranch The language was too big to learn (easily) before C++03, and it keeps getting bigger and bigger. It also has poor mapping to OO (a many to many relationship). It is hard to think in, requiring constant translation, and cognitive friction. And it requires editing two files simultaneously." CreationDate="2019-04-27T17:16:37.007" UserId="204" />
  <row Id="14833" PostId="5566" Score="0" Text="@ScottRowe well done for coming up with a good metaphor for Microsoft's Windows “a large library”. I was looking for one “Operating system” did not seem to be a good fit, as the programs seem to run independent of each other. (though the large library is implemented with an OS, and it does provide Processes)." CreationDate="2019-04-27T17:19:20.943" UserId="204" />
  <row Id="14780" PostId="5567" Score="0" Text="Unfortunately, this will instill lots of bad habits in programmers destined to be C++ programmers. You really want to avoid that. Don't teach things that need to be un-learned later. This goes beyond just heap management, actually." CreationDate="2019-04-22T16:34:39.400" UserId="1293" />
  <row Id="14783" PostId="5567" Score="0" Text="@Buffy, what's your opinion based on? I'd argue one shouldn't learn C++ before C, which is I'm proposing. Linux kernel is written in &quot;better C&quot;" CreationDate="2019-04-22T17:06:05.083" UserId="6827" />
  <row Id="14784" PostId="5567" Score="0" Text="Modern C++ has different idioms than C or early C++. There is no need to learn C first, and it will cause you mental anguish to switch. There is no more need to learn C before C++ than to learn it before Java. If you want to be a linux kernel programmer, then learn C by all means - even first. But not if you want to move to being a good C++ programmer without wasted effort and turmoil." CreationDate="2019-04-22T17:10:27.693" UserId="1293" />
  <row Id="14789" PostId="5567" Score="1" Text="@Buffy, the reason I'm proposing to start with C is because it's simple enough to not distract from the objective of the first programming class: learn data structures and algorithms. for instance, you learn an array in its most basic form, closest to how it's implemented in hardware. you can focus on the essence of programming with C. also, starting close to hardware and OS helps in future development of a programmer in my opinion." CreationDate="2019-04-22T20:20:46.857" UserId="6827" />
  <row Id="14793" PostId="5567" Score="0" Text="This is the basic division of opinion on this site. Well, at least there are two of us holding the same view now..." CreationDate="2019-04-23T00:49:13.723" UserId="5349" />
  <row Id="14797" PostId="5567" Score="1" Text="@ScottRowe, it's actually not my idea. I believe it was one of the C inventors who said that the success of C was due to it being close enough to hardware and OS architecture, to how things actually work in a computer. I learned C++ when it was a pre-processor for C compiler, not a real compiler, but don't code in it a lot these days. It's a great and powerful language, too rich to get into all its paradigms at once when first learning it. So sticking to its core C is a sound way to start its exploration" CreationDate="2019-04-23T01:54:00.230" UserId="6827" />
  <row Id="14799" PostId="5567" Score="0" Text="I don't know what these &quot;bad habits&quot; are that people are concerned will have to be unlearned later. If I knew that, perhaps I could make a reply. The only thing that has to be unlearned is something that was incorrect all along. How things actually work can never be wrong, or distracting, or misleading. It is the definition of knowledge, to learn what is." CreationDate="2019-04-23T11:28:55.940" UserId="5349" />
  <row Id="14812" PostId="5567" Score="1" Text="@Aksakal The Linux kernel is written in C, but definitely not by beginners.  What chefs do in the kitchen of 4 stars hotels is not relevant when learning to cook spaghettis first time. Using C is a PITA for beginners when it comes to handling even basic things as character strings (try with utf-8...)" CreationDate="2019-04-24T12:22:00.947" UserId="2103" />
  <row Id="14814" PostId="5567" Score="1" Text="@MichelBillaud, I don't know what would be my choice for the very first programming language these days. OP is not asking about it. OP wants to teach C++ for some reason, and all I'm suggesting is to start with &quot;better C&quot; part of C++, the multi-paradigm language. Linus started with BASIC, not Visual Basic. BASIC used to come with all computers such as Commodor, and was something like C to Unix, i.e. it was very close to hardware architecture. You could read/write directly into memory, for instance. I started with stack languages in machine codes, but wouldn't recommend it today" CreationDate="2019-04-24T19:11:58.363" UserId="6827" />
  <row Id="14815" PostId="5567" Score="0" Text="Writing in basic and with peek and poke is ruthless and unforgiving, which is what makes it such a great learning tool. Off by one? Reboot and wait 2 minutes..." CreationDate="2019-04-24T22:11:32.257" UserId="5349" />
  <row Id="14816" PostId="5567" Score="0" Text="@Aksakal at the good ol times of Basic on home computer, programming in &quot;machine code&quot; was &quot;the real thing&quot; for hobbyists. Anyway, of the OP wants to teach modern C++ (17) for some reason, we first have to investigate the reason before suggesting how to teach it. Does he really want to teach C++17 with lambdas, templates, smart pointers etc. or some enhanced version of C89 ?" CreationDate="2019-04-25T13:13:14.997" UserId="2103" />
  <row Id="14817" PostId="5567" Score="0" Text="@MichelBillaud OP indicates that the students are coming from sci and engineering background, and had no prior exposure to any programming somehow. basically, C++ is going to be the first language for them." CreationDate="2019-04-25T13:16:08.587" UserId="6827" />
  <row Id="14819" PostId="5567" Score="0" Text="Title says beginners have not idea of *it*, where *it* probably stands for C++.  Is it possible in 2019 that students with sci and eng background have absolutely no idea about programming?" CreationDate="2019-04-25T13:22:47.517" UserId="2103" />
  <row Id="14820" PostId="5567" Score="0" Text="@MichelBillaud, read the full question, not just the title. It's not only possible, but I have seen people like that, especially in medical. Even engineering is quite broad, you have civil engineer, who usually do not code at all. I have to assume that OP correctly describes her class. who am I to judge?" CreationDate="2019-04-25T15:25:08.560" UserId="6827" />
  <row Id="14829" PostId="5567" Score="0" Text="Suppositions. Anyway the OP doesn't seem interested in giving us more details about the context. Seems it is &quot;I have to teach C++ to students who don't care much about programming&quot;. What does BSCS stand for ? Biological Sciences Curriculum Study ? Bachelor of Science in Computer Science ?" CreationDate="2019-04-26T12:47:31.670" UserId="2103" />
  <row Id="14949" PostId="5567" Score="0" Text="I note that the learners are destined to become engineers or to work in medicine. They are certainly not destined to become professional C++ programmers. They are learning some software development to gain an understanding of issues such as how software works, how expensive and time consuming it is to write etc. This is not their main course, focus on fun." CreationDate="2019-05-09T21:47:46.203" UserId="8007" />
  <row Id="14801" PostId="5568" Score="0" Text="Haskell as a first language is an insane approach. It’s probably older than C. So it’s not clear to me why would you suggest it after promoting modern C++. The same goes for scala which also quite old and impossible to debug. Both would be a nightmare to start with and certainly teach very bad habits. You can see this on folks who started with Java, a lot of them write wasteful and inefficient code" CreationDate="2019-04-23T12:22:31.170" UserId="6827" />
  <row Id="14802" PostId="5568" Score="0" Text="Hmmm @Aksakal, so the age of the language is determinative? A lot of C programmer write extremely dangerous code. What is your point, exactly?" CreationDate="2019-04-23T12:26:34.957" UserId="1293" />
  <row Id="14803" PostId="5568" Score="0" Text="The comment was on Haskell really. Do you know a good programmer who really started with Haskell? They don’t exist. So you are suggesting a really unproven approach if not outrageous." CreationDate="2019-04-23T13:02:58.157" UserId="6827" />
  <row Id="14804" PostId="5568" Score="1" Text="Do I infer correctly that you believe the the only worthy goal is to become a skilled C programmer? Sorry if my disagreement with that stance offends you so deeply. I like Haskell for what it _is_ and for the mental model it engenders. I might have said _Scheme_, actually, but personally prefer languages with more syntax as a guide to the student. I know I can't convince you. I'm not trying, actually." CreationDate="2019-04-23T13:18:33.870" UserId="1293" />
  <row Id="14806" PostId="5568" Score="1" Text="@Aksakal, it only takes 30 seconds on Wikipedia to find out when Haskell dates from, so why not invest that effort before spouting inaccurate guesses? Also, FWIW, Cambridge University's first teaching language is SML, which is not entirely dissimilar to Haskell." CreationDate="2019-04-24T08:53:21.920" UserId="1219" />
  <row Id="14810" PostId="5568" Score="0" Text="@PeterTaylor have you seen a good programmer who started with these?" CreationDate="2019-04-24T11:35:01.170" UserId="6827" />
  <row Id="14811" PostId="5568" Score="2" Text="Errr, @Aksakal, have you seen a bad programmer that started with C? Give it up and let your answer stand on its own." CreationDate="2019-04-24T11:45:34.083" UserId="1293" />
  <row Id="14948" PostId="5568" Score="0" Text="From the question it is clear that the learners have no programming experience and so it will be important to introduce the *basic concepts* of sequence, iteration and condition along with simple data types. Later one can introduce function call and structured types with a possible discussion of OOP and type inheritance at the end of the course. I also not that according to the question these learners are engineers and medical students. It is therefore unlikely that they will become professional programmers." CreationDate="2019-05-09T21:42:37.197" UserId="8007" />
  <row Id="14805" PostId="5570" Score="0" Text="Thank you. I'll update my question." CreationDate="2019-04-24T03:48:52.990" UserId="283" />
  <row Id="14825" PostId="5575" Score="0" Text="A better place to ask this is on the APCS mailing list." CreationDate="2019-04-25T18:59:32.337" UserId="1293" />
  <row Id="14826" PostId="5576" Score="0" Text="What _do_ you like? You seem to dislike some pretty fundamental things." CreationDate="2019-04-25T19:31:45.350" UserId="1293" />
  <row Id="14827" PostId="5576" Score="0" Text="Yeah I can like everything if these become interesting for me" CreationDate="2019-04-26T00:32:34.427" UserId="7913" />
  <row Id="14845" PostId="5576" Score="0" Text="What is CC? Compiler construction?" CreationDate="2019-04-28T09:51:37.743" UserId="7929" />
  <row Id="14846" PostId="5576" Score="0" Text="Yeah cc is compiler construction" CreationDate="2019-04-28T10:53:45.850" UserId="7913" />
  <row Id="14841" PostId="5579" Score="3" Text="Why don't they learn it in high school? I did. The only mathematics I did in CS was the basics of twos-complement and floating-point, and a semester of numerical programming. But then it was 48 years ago ..." CreationDate="2019-04-28T06:19:18.820" UserId="3202" />
  <row Id="14842" PostId="5579" Score="6" Text="See also: [How/when is calculus used in Computer Science?](https://cs.stackexchange.com/questions/55462/how-when-is-calculus-used-in-computer-science) on ComputerScience.SE" CreationDate="2019-04-28T08:38:54.617" UserId="1445" />
  <row Id="14848" PostId="5579" Score="2" Text="Back in the early 1980s, I had to take Calculus for CS. Thanks to SAT, etc. I got into an advanced (very small class) Calculus. I had no idea what was going on. Those who did know what was going on got As. Those who didn't, but tried (me), got Bs. After 3 semesters I switched to &quot;regular&quot; Calculus - and ended up with a C. Now, I hardly remember **anything** from Calculus as I haven't needed to use it at all in &gt; 35 years. Algebra, logic - absolutely. Calculus - not one drop." CreationDate="2019-04-28T14:31:55.403" UserId="2460" />
  <row Id="14849" PostId="5579" Score="5" Text="I don't think that &quot;will I use it&quot; is a good metric to evaluate whether you should take something.  Don't believe me? Talk to all those people who think that knowing states and capitals is important." CreationDate="2019-04-28T17:40:27.100" UserId="5285" />
  <row Id="14851" PostId="5579" Score="0" Text="Since an answer has already been accepted, I'll put my response here.  The obvious answer is you *may* need calculus; it depends where you end up working *after* you get your degree.  Employers want to hire grads who know their stuff; and if a given employer wants CS grads who know calculus, they want to be able to find them.  (I myself took lots of math courses and some intro courses in civil engineering, accounting, and so on because I wanted to draw on that knowledge if one of my future employers needed it.)  But another answer ..." CreationDate="2019-04-28T18:18:21.920" UserId="7936" />
  <row Id="14852" PostId="5579" Score="1" Text="... is that calculus acts as a *barrier to entry* so not every Tom, Dick, and Harry gets that degree -- and so keeps salaries high.  (I'm not so sure that's true anymore with outsourcing and inverted corporations.)  I also went back to school and started on a business degree -- and I had to take statistics.  I don't see the relevance there, but again it's a barrier to entry.  (Never did finish that business degree, but so what?)" CreationDate="2019-04-28T18:21:50.877" UserId="7936" />
  <row Id="14855" PostId="5579" Score="8" Text="@Jennifer Please don't use the comments for answers. Just because there's an accepted answer doesn't mean that there can't be other highly voted answers, and personally I take votes more seriously than the checkmark anyways since they represent the opinions of more people. Would you mind copying your comments to an answer?" CreationDate="2019-04-29T04:15:09.607" UserId="58" />
  <row Id="14875" PostId="5579" Score="1" Text="When I was at university many moons ago, the joke was the calculus was meant to thin the field and make more Management Information Systems grads. The computer engineering students said the same thing about calc 4 and diff eq to make more computer science grads." CreationDate="2019-04-30T01:00:28.600" UserId="5842" />
  <row Id="14885" PostId="5579" Score="1" Text="So they don't have to repeat the mistakes of other majors who don't learn it. https://fliptomato.wordpress.com/2007/03/19/medical-researcher-discovers-integration-gets-75-citations/" CreationDate="2019-04-30T16:49:52.720" UserId="7981" />
  <row Id="14834" PostId="5580" Score="9" Text="I'll note that some of the things you learn in elementary calculus are in your &quot;answer 1&quot; list: sets, logic, especially quantifiers, and proofs. I'll also note that you had a dilemma a while back about something you wanted to do with your advanced students that became more complicated because they hadn't had calculus. I can't recall the details." CreationDate="2019-04-27T20:29:03.713" UserId="1293" />
  <row Id="14835" PostId="5580" Score="6" Text="@Buffy I hadn't realized that those topics were taught in calculus. I don't think that's universally true. I believe our students' not having calculus was a problem when we wanted to teach electives on computer graphics and machine learning." CreationDate="2019-04-27T20:32:51.073" UserId="283" />
  <row Id="14836" PostId="5580" Score="10" Text="This. Definitely this. But to have the flip answer down as well, I'm physicist by training and a programmer by trade and I *do* use my calc/diff-equ fairly regularly. Mostly *not* to do raw numeric work, but to reduce the domain problem to something more suited to programatic solutions (that is, I do analytic solutions to improve the computability of the way we express the domain problem). So there are corners of the programming world where that stuff is useful, but it is certainly not a large part of the wider field." CreationDate="2019-04-27T22:52:58.763" UserId="2735" />
  <row Id="14838" PostId="5580" Score="2" Text="with the exceotion of inductive proof and matrices those were not in the calculus course I did, but rather (witht ehfurthe exception of probability) were in the &quot;discrete mathematics&quot; course (which was a requirement for CS)" CreationDate="2019-04-27T23:58:42.277" UserId="4518" />
  <row Id="14839" PostId="5580" Score="15" Text="To add to both of your Answer 2's: (a) Generally one wants to develop mathematical maturity, and calculus is 1 way to do this; (b) Many math curricula are set up quasi-linearly, so that Calc I and Calc II are the first courses you take beyond high school math.  At my university they are prerequisites for Discrete Math and Linear Algebra, not because they are logical prerequisites but because we want some baseline of mathematical maturity for students in those classes." CreationDate="2019-04-28T01:37:07.373" UserId="7919" />
  <row Id="14857" PostId="5580" Score="2" Text="As an aside: Don't assume &quot;BA == arts&quot;.  Cambridge and Oxford only offer BA degrees to scientists and engineers." CreationDate="2019-04-29T08:04:14.327" UserId="4896" />
  <row Id="14864" PostId="5580" Score="2" Text="A related anecdote: Solving recursive equations into a closed form, which is part of Discrete Mathematics, is curiously similar to solving a differential equation. My knowledge in Calculus saved me here in university, as I could not figure out for the life of me how to do it. Only after realizing the relation to differential equations and applying the Calculus knowledge from my Physics courses did it finally make sense to me. Math is not an island and neither is CS. There is no such thing as useless knowledge." CreationDate="2019-04-29T13:57:27.560" UserId="1370" />
  <row Id="14880" PostId="5580" Score="2" Text="@MartinBonner - BA certainly stands for arts, but art here doesn't mean smearing paint, it means highly skilled work as in &quot;artisan&quot;, not &quot;artist&quot;." CreationDate="2019-04-30T10:08:05.923" UserId="1145" />
  <row Id="14879" PostId="5582" Score="3" Text="A function that is continuous but nowhere differentiable starts to be interesting. -- In HS we had a rule where asking a maths question the teacher couldn't answer got a reward equivalent of passing a test. So, in 3rd year of HS (11th grade) that's exactly what I asked: is there a function which is continuous everywhere but is not differentiable anywhere? And I got my reward! I am still proud thirty years later. So yes, that's interesting and unusual." CreationDate="2019-04-30T09:35:51.103" UserId="7975" />
  <row Id="15944" PostId="5582" Score="0" Text="The issues with understanding applications of Math you describe is a common failure of modern education in my opinion. Without educating students on the nature of Physics, it is nearly impossible for them to grasp where the Math they are being taught is originating. However, if you introduce students to the idea that derivation is used to determine acceleration from velocity, and that integration is used to determine velocity from acceleration; perhaps more students would have a stronger grasp of math fundamentals. Especially, for example, when we examine the math for emitting photons." CreationDate="2019-12-19T19:39:51.047" UserId="2461" />
  <row Id="14883" PostId="5583" Score="0" Text="If it's useful for physical processes, it may be important for data around physical entities, for example mapping stresses on architecture, or flow of liquids and gases. Simulations are a very important part of a lot of very important fields. There's always a big application for something in my experience. Having the tools to understand something will always broaden your horizons and open up career paths that might remain closed otherwise." CreationDate="2019-04-30T11:24:20.757" UserId="5233" />
  <row Id="14853" PostId="5584" Score="21" Text="This is all true.  Plus, things change in the industry.  A different answerer here says she never used linear algebra.  Boy is that changing now in the AI/ML revolution. Most of number theory seemed pretty useless to working programmers. Until RSA appeared and remade crypto. Plus, I didn't study category theory as a mathematics major in the 70's.  Don't even remember it being offered.  But given my strong interest in programming languages and software engineering I sure _now_ wish I had. In the future there may be _more_ uses for calculus by programmers than you've listed already." CreationDate="2019-04-28T21:09:08.970" UserId="1301" />
  <row Id="14858" PostId="5584" Score="7" Text="I'm not an educator, but I am a CS major. What I've found is that you might not need calculus just for &quot;general CS tasks&quot;, such as programming, software design, etc. But you absolutely DO need it in many cases when the company you're working for requires you to build software that revolves around calculations. It's far easier to do so if you do understand yourself what the math is supposed to look like, instead of trying to just copy whatever the engineers/math people tell you to." CreationDate="2019-04-29T08:52:07.780" UserId="7952" />
  <row Id="14861" PostId="5584" Score="4" Text="@tfrascaroli Indeed.  I spent roughly 15 years in embedded software engineering having never needed anything more complicated than a simple 1st-order filter.  Then I started my current job.  Over the last few years (and still on the to-do list) are filter design and implementation in fixed-point FPGA code, multi-stage PID control for position and velocity (with acceleration potentially in the mix later), feedforward trajectory shaping, and multi-axis cubic-spline position linearisation.  I've used more maths in the last 5 years than in the entire rest of my career!" CreationDate="2019-04-29T10:54:49.980" UserId="1864" />
  <row Id="14862" PostId="5584" Score="3" Text="@tfrascaroli ... What just occurred to me too is that when I was learning this stuff at uni, they never made it seem relevant.  I actually had a conversation at uni with the engineering department head where he said &quot;This is not supposed to be a practical course.  We're teaching you what you think you should know, not what will help you in your job.&quot; Of course he was kind of right, but it was also an epic fail.  Engineers are hands-on people, and if you can't show us an application then it's not likely to stick.  This does lead to the OP's problem of finding relevance, if your teachers can't." CreationDate="2019-04-29T11:01:51.400" UserId="1864" />
  <row Id="14863" PostId="5584" Score="3" Text="@Graham That is the problem, yes, not that calculus is somehow irrelevant. That, and teachers who don't even know themselves the practical applications of what they are teaching. They (mostly in my case) are mathematicians who know nothing about application and programming. I'm not saying they ought to, they are theory-people. That's precisely not the kind of teachers you need in CS." CreationDate="2019-04-29T12:36:18.320" UserId="7952" />
  <row Id="14865" PostId="5584" Score="3" Text="@tfrascaroli Precisely.  My combinatorics class was exactly like that.  All of the examples were like, &quot;If Bob can't stand next to Steve, how many ways are there to arrange 10 people for a photo?&quot;  For the entire semester, my thought was, &quot;Who cares?!  Just line them up, separate the fighters, and take the picture already!&quot;  Then a substitute CS professor during dead week finally made it click.  It's not about lining people up for a photo; it's about calculation effort for a given algorithm.  Seems like the departments need to talk to each other a little better." CreationDate="2019-04-29T17:19:31.503" UserId="759" />
  <row Id="14878" PostId="5584" Score="0" Text="The difficult bit is not in changing the educators, but getting the students to understand: _If you know about something, then you may apply it, but if you're ignorant of the concept, you can't._" CreationDate="2019-04-30T08:26:58.863" UserId="7974" />
  <row Id="14881" PostId="5584" Score="2" Text="@DDuck If educators can't explain the relevance of a concept then either they don't understand the concept or they don't understand how to educate. For school teachers, it's often the former. For university lecturers, my experience is that the vast majority couldn't teach a child to tie their shoelaces. Either way, if students are still ignorant of the concept after taking the class, the educator has failed abjectly and it's the educator who needs to change." CreationDate="2019-04-30T10:10:09.093" UserId="1864" />
  <row Id="14887" PostId="5584" Score="0" Text="@DDuck That's not my experience at all.  When I'm tutoring, if my student doesn't understand the application of what they're learning, it's because I haven't taken the time to understand how it applies to them.  The same was true at the university level, especially for CS and EE students, where they are extremely application-oriented and could care less about theory that will never apply to them." CreationDate="2019-04-30T19:50:01.957" UserId="744" />
  <row Id="14888" PostId="5584" Score="1" Text="@Graham: It's an important general intellectual skill to be able to take something you have learned in one context and recognize *by yourself* its relevance in a different context.  (If it wasn't for this skill, humanity would never figure out anything it hadn't already known.)  The point of math classes is to give you a chance to practice this skill - because math is precisely the discipline of taking facts out of context so they can be generalized.  This begins with 2+2=4, where we generalize adding two apples to two apples and walking two miles followed by walking two miles." CreationDate="2019-04-30T20:19:15.907" UserId="7983" />
  <row Id="14895" PostId="5584" Score="0" Text="@AlexanderWoo That's true enough, but you've given a good example of how critically important it is to have the concept taught in at least one recognisable context. You can only generalise a concept you already understand. The idea that you can teach out of context and then parachute in the various contexts has long been proved to not work. Students who do learn, learn *in spite of* this so-called &quot;teaching&quot;, and always by finding themselves some practical application which ties the concepts to a context." CreationDate="2019-04-30T22:11:12.587" UserId="1864" />
  <row Id="14896" PostId="5584" Score="1" Text="@Graham: I find that I *cannot* learn a concept in the context of an application, because any application worthy of the name inevitably has many distracting details which obscure the concept.  Also, in the context of an application, it's very hard to tell what it is in the application makes the concept not apply perfectly, so you never get the pure form, only an approximation.  I can *only* understand a concept completely in a toy situation.  But, then again, I'm a pure mathematician." CreationDate="2019-04-30T23:28:59.367" UserId="7983" />
  <row Id="14897" PostId="5584" Score="1" Text="@Graham: I should add - back when I worked in technology consulting, it was precisely the people who could not learn in an abstract setting who could not jump into a project and contribute on day 1 - they needed to spend a month learning the whole context of the project and the technologies used before even doing a relatively independent task.  Given that the projects might only be a month or two long, people like that were mostly useless - and tended not to stay with the company." CreationDate="2019-04-30T23:50:31.857" UserId="7983" />
  <row Id="14882" PostId="5585" Score="2" Text="I feel like your second point is the one that isn't being stated enough. Being equipped with more tools than you need gives you more options when you encounter problems, the old adage that &quot;when all you have is a hammer, every problem starts to look like a nail&quot; is decidedly truthy. Ways of thinking are tools too. Being able to look at a problem through the lens of someone who can do calculus may lead you to different solutions than otherwise, and that can only be a good thing." CreationDate="2019-04-30T11:21:14.533" UserId="5233" />
  <row Id="14856" PostId="5586" Score="1" Text="Interesting perspective. I agree that we're entering an era where probability and statistics are increasingly important to applications of computer science. However, let me play devil's advocate for a moment.&#xA;&#xA;Do you really need to be able to compute differentiation to understand _rate of change_, as applied to concepts such as Big O?&#xA;&#xA;Do you really need to be able to compute integrals to understand concepts that involve _area under the curve_ such as normal distributions? I have the gut feeling that these essential concepts can be understood without knowing how to calculate them with calc" CreationDate="2019-04-29T07:15:18.340" UserId="6746" />
  <row Id="14867" PostId="5586" Score="0" Text="@KevinBuffardi sure, you can understand them conceptually without knowing the technical side. But the formalism, frustrating as it is, exists for a reason; and to really understand even the simplest ML--not just neural nets--beyond an introductory article requires at least multivariable calculus and linear algebra. I'm about to graduate with an MS CS. and I still plan to spend the next few years learning more math, because I'll need it to actually understand data science as a practitioner." CreationDate="2019-04-29T17:53:45.287" UserId="7962" />
  <row Id="14868" PostId="5586" Score="0" Text="@Tiercelet I won't contest that there are areas within CS that require sophisticated understanding of calculus. However, the question is why _all_ computer science majors are _required_ to take calculus. Certainly, it makes sense that you have taken advanced calc classes, but what about a student who isn't getting an MS with a concentration in ML? Is there a compelling reason why every CS student should be required to take calculus, whether they want to be a software developer, UX specialist, security analyst, database administrator, CS theory researcher, etc?" CreationDate="2019-04-29T19:37:13.140" UserId="6746" />
  <row Id="14870" PostId="5586" Score="3" Text="@KevinBuffardi Most university CS programs are intended to be preparation for further specialized or academic work--not just a &quot;learn to code&quot; experience. Distribution reqs exist so those who graduate from a program are exposed to its subfields &amp; have a base for future work in a specialization (if any). Someone specializing in UX or computational theory also has no &quot;need&quot; to take a hardware class... Nor does a UX person have need of math--unless they want to work in mobile device sensors, or analyze UX survey results &amp; A/B testing, or..." CreationDate="2019-04-29T21:07:33.873" UserId="7962" />
  <row Id="14872" PostId="5586" Score="0" Text="@Tiercelet I agree that degree requirements are often designed to demonstrate a breadth in the discipline as well as prepare students to be lifelong learners. Many will go on to specialize in an area that doesn't directly use every single required class. However, I think there are strong arguments that everyone should take a CS Theory class - even if they may never directly use it at their jobs - because the topic is vital to establishing a broad foundation in CS. Same goes for most required classes. However, I honestly can't make the same argument for Calculus. Maybe you can?" CreationDate="2019-04-29T23:10:10.363" UserId="6746" />
  <row Id="14873" PostId="5586" Score="0" Text="Side note: as a former UX consultant (and now a professor), I've actually used _a ton_ of statistics in both roles. However, I would make a similar argument for stat as calc -- they make sense as prereqs for certain electives and can be really useful in some applications, but I can't make as strong an argument for them being fundamental to computer science as I can for Discrete Math (which I _do_ think every BS in CS should require), for example." CreationDate="2019-04-29T23:14:45.997" UserId="6746" />
  <row Id="18261" PostId="5588" Score="1" Text="Nice answer (the best I can see) : **A list of bytes...**" CreationDate="2021-09-13T04:06:05.850" UserId="8837" />
  <row Id="14874" PostId="5591" Score="3" Text="As a working developer who was assigned a task that required ML techniques to do well in a shop where the data scientists were all busy with more directly revenue-producing tasks, I wouldn't suggest betting on domain-expert availability when those domain experts are more specialized / harder-to-come-by than you. And, of course, having that expertise entitles you to *become* one of those domain experts, with the extra job-market pull that implies." CreationDate="2019-04-29T23:37:05.543" UserId="5084" />
  <row Id="14854" PostId="5592" Score="1" Text="My experience echos yours.  My CS degree was 40% mathematics, I have *never* used calculus since.  Linear Algebra is the complete opposite though." CreationDate="2019-04-29T03:56:47.300" UserId="7944" />
  <row Id="14876" PostId="5597" Score="2" Text="Excellent, well considered answer. Welcome to CSEd!" CreationDate="2019-04-30T01:27:40.477" UserId="27" />
  <row Id="14884" PostId="5599" Score="0" Text="Assuming that the professor is making reasonable choices about what languages to use for different assignments, the languages will be chosen specifically to highlight important differences in approach.  This means that you are being given tasks that are intrinsically more difficult to &quot;translate&quot; between languages." CreationDate="2019-04-30T15:19:51.420" UserId="27" />
  <row Id="14890" PostId="5599" Score="0" Text="I have fixed some of the grammar in the question, but do not know the meaning of “you are good in only one language”." CreationDate="2019-04-30T21:54:49.677" UserId="204" />
  <row Id="14891" PostId="5599" Score="1" Text="Unfortunately your teachers obsession with teaching many languages is miss-guided. It is better to learn one language well. (plus may be some side Domain Specific Languages e.g. regex, html, css, bash, awk, …). C++ is to complex for a novice. You should know at least 3 languages well, before starting C++." CreationDate="2019-04-30T21:57:45.427" UserId="204" />
  <row Id="14886" PostId="5602" Score="0" Text="Could you explain what CRUD is?" CreationDate="2019-04-30T17:52:34.840" UserId="5334" />
  <row Id="14899" PostId="5602" Score="1" Text="@LuminousNutria Create Read Update Delete - standard operations in web applications and databases." CreationDate="2019-05-01T19:52:14.703" UserId="2706" />
  <row Id="14893" PostId="5603" Score="0" Text="What is TEALS (explain in question)?" CreationDate="2019-04-30T22:01:52.400" UserId="204" />
  <row Id="14894" PostId="5603" Score="1" Text="(I have do Audio IT classes.) Get them to provide their own headphones: Those things get broken or stolen." CreationDate="2019-04-30T22:04:34.047" UserId="204" />
  <row Id="14898" PostId="5603" Score="0" Text="@ctrl-alt-delor - They do, but there are two problems. For remote learning we need mics and the sets that kids own often don't have them and we have enough students who don't have the means to provide their own - so I'd like to provide some. I do encourage students to bring their own." CreationDate="2019-05-01T14:34:46.560" UserId="134" />
  <row Id="14900" PostId="5606" Score="2" Text="There are a lot of abrivs in this question. Can you edit, so that we all know what you are saying." CreationDate="2019-05-02T21:54:24.807" UserId="204" />
  <row Id="14904" PostId="5606" Score="4" Text="How in the world could you assert that logic gates have nothing to do with Computer Science or Software Engineering?  It's like saying, &quot;I want to learn medicine, but they're making me take a class about cells.&quot;" CreationDate="2019-05-03T01:27:10.340" UserId="27" />
  <row Id="14901" PostId="5607" Score="2" Text="For something like this, I would re-write the question in my own more rigorous words. Stating that this is my interpretation, and here is my answer." CreationDate="2019-05-02T22:06:03.363" UserId="204" />
  <row Id="14902" PostId="5607" Score="0" Text="It may be a little mean, but I have to ask:  Can you define &quot;rigorous&quot; rigorously?  As is, you defined it using an analogy.  You may be surprised to find out that what we typically think of &quot;rigorous&quot; in one domain falls short in another.  For example, philosophy is full of wonderful cases where assumptions you made in interpretations play a huge part in the discussion (just look at intuitionst logic for an archetypal example)" CreationDate="2019-05-02T23:02:49.610" UserId="812" />
  <row Id="14903" PostId="5607" Score="0" Text="All poking aside, you may very much appreciate an old speech by Guy Steele, [How to Grow a Language](https://www.youtube.com/watch?v=_ahvzDzKdB0).  You may also find the [transcript](https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf) more useful because it's a long speech and the transcript gets to use well accepted formal notations for defining words." CreationDate="2019-05-02T23:04:20.147" UserId="812" />
  <row Id="14941" PostId="5607" Score="0" Text="This doesn't even approach an issue of rigour--it is unclear. Even correct use of the expected technical term &quot;contiguous&quot; here would be unclear if it hadn't been previously defined for this sort of context, ie as a technical term." CreationDate="2019-05-08T22:20:01.817" UserId="2485" />
  <row Id="15064" PostId="5607" Score="0" Text="This sounds like a real world application of the &quot;if they have eggs, buy a dozen&quot; joke ([link](https://www.reddit.com/r/Jokes/comments/827kuk/a_programmer_is_going_to_the_grocery_store/))." CreationDate="2019-05-23T13:27:23.697" UserId="2164" />
  <row Id="20966" PostId="5609" Score="0" Text="Your answer keeps reminding me Gödel's incompleteness theorems. lol" CreationDate="2023-02-12T05:57:58.980" UserId="9884" />
  <row Id="15056" PostId="5610" Score="0" Text="Nailed it with &quot;...just an implementation detail.&quot; As a developer I could not care less about gates themselves (heck I probably couldn't even draw most of them without a reference at this point), however I do care a great deal about how I set up all of my conditional statements. I've even drawn out truth tables for some of the more complex stuff." CreationDate="2019-05-20T20:33:21.650" UserId="6582" />
  <row Id="14905" PostId="5612" Score="0" Text="While correct, this might be a bit subtle for some folks to grok. It is a question about _where_ polymorphism is most useful. It turns out to be a great way to build small things that are composed to build bigger things. Think of the &quot;sort&quot; as being composed of two things: an algorithm that is agnostic about comparisons and a comparator that is all about that but nothing else. Used this way, polymorphism can be superior to explicit testing to introduce variability into a process." CreationDate="2019-05-03T11:23:15.740" UserId="1293" />
  <row Id="14906" PostId="5612" Score="0" Text="Many of the classic Design Patterns are based on that idea of composition combined with polymorphism." CreationDate="2019-05-03T11:54:41.393" UserId="1293" />
  <row Id="14907" PostId="5612" Score="0" Text="@Buffy, whether it is subtle or not is partly down to what language is used to teach. If polymorphism is taught in terms of a basic mental model of parametric types then it's blatant rather than subtle. Chalk one up to SML." CreationDate="2019-05-03T12:53:54.137" UserId="1219" />
  <row Id="14908" PostId="5612" Score="0" Text="Actually, I meant subtle for some of the readers here. But thanks for giving me a bit of insight and courage to add my own answer." CreationDate="2019-05-03T13:41:14.270" UserId="1293" />
  <row Id="14912" PostId="5617" Score="1" Text="Why are they so uninterested? Is this just a requirement imposed on them that they don't value?" CreationDate="2019-05-04T20:36:09.733" UserId="1293" />
  <row Id="14913" PostId="5617" Score="1" Text="I think there are a number of problematic assumptions here. It may not be confidence. There could be any number of outside factors that lead a student to copy, e.g. stress, home life, workload from other classes, etc. Sometimes it is pure naivete. I've seen all of them. Also, leading with the idea that most students &quot;can't&quot; seems to begin with a defeatist approach that limits the potential of students before they even begin." CreationDate="2019-05-04T23:10:30.543" UserId="76" />
  <row Id="14914" PostId="5617" Score="2" Text="I don't think most students begin a class in a brand new topic intending to cheat. Typically, they miss something and get overwhelmed, begin to feel hopeless, or feel like they are drowning in their overall workload too much to fix the problem." CreationDate="2019-05-04T23:43:53.223" UserId="27" />
  <row Id="14923" PostId="5618" Score="0" Text="Note that CS Unplugged is actually a thing. Some of my students have been involved in these concepts: https://csunplugged.org/en/" CreationDate="2019-05-05T12:28:41.580" UserId="1293" />
  <row Id="14924" PostId="5618" Score="0" Text="@Buffy I love that resource, but I don't mean only that: If they don't provide a resource, then you may have to create your own, or get it from else where." CreationDate="2019-05-05T12:45:13.487" UserId="204" />
  <row Id="14915" PostId="5619" Score="3" Text="Huh, [functions](https://en.wikipedia.org/wiki/Function_(mathematics)) are routinely explained via tables, or via set theory where elements of the domain are mapped to elements in the codomain. Without the set theory explanation (which didactically works best with finite sets), it's unnecessarily hard to express properties such as “injectivity” or “surjectivity”." CreationDate="2019-05-04T20:04:36.177" UserDisplayName="amon" />
  <row Id="14916" PostId="5619" Score="3" Text="This seems like more of a CompSci question than Software Engineering.   A better site for this question might be https://cs.stackexchange.com/ instead" CreationDate="2019-05-04T20:56:27.337" UserId="6562" />
  <row Id="14917" PostId="5619" Score="3" Text="In modern maths, functions are pretty much *literally* nothing but a mapping from arguments to results. Which means, for example, that arrays, maps, and sets are also functions." CreationDate="2019-05-04T21:30:54.703" UserId="945" />
  <row Id="14920" PostId="5619" Score="0" Text="Yes first teach un-plugged, away from the computer. Link it to what they already know, then translate into a program, then into a programming language." CreationDate="2019-05-05T08:46:51.693" UserId="204" />
  <row Id="14926" PostId="5624" Score="0" Text="His students got tripped up by the fact that basic math functions are generally continuous.  It's just a failure of imagination, that's all, and there's no need to draw a distinction between computer functions and math functions; they're all the same." CreationDate="2019-05-05T15:19:14.520" UserId="882" />
  <row Id="14927" PostId="5624" Score="0" Text="@RobertHarvey They are and they aren't the same. The problem with viewing them as the same is that you must ignore all of the metaphor along the way.  A true Random, if it existed, would *not* fit under any formal definition of a mathematical function, and a computer function that takes no arguments, prints &quot;hello&quot; to the console, sets `x` to 3, launches a network connection to nasa.gov, and returns `PI` is a little hard to characterize. What are the domains and codomains, exactly? Calling it a mathematical function serves no models of thinking particularly well in that instance." CreationDate="2019-05-05T19:09:16.210" UserId="27" />
  <row Id="14928" PostId="5624" Score="0" Text="Well, to be fair, most Random functions aren't truly random; they are pseudo-random, a sequence of numbers given a specific starting value (a seed) as input.  But even if they were truly random, the distribution of the numbers could still be described mathematically." CreationDate="2019-05-05T21:29:56.180" UserId="882" />
  <row Id="14929" PostId="5624" Score="0" Text="@RobertHarvey Described mathematically does not a function make. If we *had* a true Random generator (which, of course, we don't), it would be a non-function by definition, as the same input would generate a different output. But my real objection is the second one, that we really don't utilize computer functions in ways that are easily described as mathematical functions. How would you describe the computer function I mentioned in my prior comment?" CreationDate="2019-05-05T22:52:13.887" UserId="27" />
  <row Id="14930" PostId="5624" Score="0" Text="@BenI. Your prior example of a &quot;function&quot; is not a function, it is a procedure, or algorithm. Some languages differentiate between the two, most no longer do. The prints &quot;hello&quot;, and connecting to the network are side effects, while the setting `x` to 3 is both a mutation and a side effect. Relative to the _function_ it takes two arguments and returns `PI`. Programmatically the rest are important, as well as bad form, but they are not part of the _function_." CreationDate="2019-05-06T00:32:35.237" UserId="104" />
  <row Id="14932" PostId="5627" Score="0" Text="Why do you want to do this if only about half of the people are interested? Give them a handout they can follow and use face-time for something more useful. Even those interested are likely to do this only once or twice, so it isn't really a useful skill, I think." CreationDate="2019-05-07T12:42:16.427" UserId="1293" />
  <row Id="14933" PostId="5627" Score="0" Text="A hands on version is unlikely to be short with 30 students. People will get stuck. They will get stuck at different points. They will have questions. The questions will all be different and require answers. This will take time. Use the time more productively, even if it is essential that they get a server working to continue other work." CreationDate="2019-05-07T12:54:59.953" UserId="1293" />
  <row Id="14934" PostId="5627" Score="0" Text="And why a commercial service with no free tier for students? I'd strongly suggest that you rethink this whole thing. Sorry to be so negative." CreationDate="2019-05-07T13:42:21.760" UserId="1293" />
  <row Id="14935" PostId="5627" Score="0" Text="Thanks for the comments! Not negative at all. There are good reasons to use DO. But I take your point that it probably is pointless to do it live." CreationDate="2019-05-07T14:04:43.350" UserId="275" />
  <row Id="14936" PostId="5627" Score="0" Text="@Buffy Are you aware of any (commercial or not) service which has a free tier for students? Digital Ocean makes an effort to be easy to use and has currently a 60 day try-out period where one can spend 100$, which is usually more than enough for a small project. AWS and Google have similar offers but they aren't as easy to use (imho)." CreationDate="2019-05-08T19:13:40.363" UserId="8006" />
  <row Id="14937" PostId="5627" Score="0" Text="I don't know of others. But my first inclination would be to go to my university's IT department and see what they could do. I assume that there are open source solutions if you can find the hosting space and the back-end support. Not every school would be able to help with that, of course." CreationDate="2019-05-08T19:21:43.097" UserId="1293" />
  <row Id="14982" PostId="5627" Score="0" Text="If you don`t work for the cloud provider. Then do it in docker (that way it can be deployed on many platforms). Then at the end you can show them how to deploy (automate it, they don't need the details yet, and they can find out for themselves). If you do work for the cloud provider, then you need lots of smoke and mirrors (to maximise wow-factor), and to use proprietary tools (to maximise vendor-lock-in)." CreationDate="2019-05-11T11:40:32.070" UserId="204" />
  <row Id="14981" PostId="5629" Score="0" Text="First teach problem solving, then programming, then a language: So have them write programs for them to run on each other. Clear instructions to do something like make a jam sandwich, or to draw a picture. Then teach them `snap`, the a more useful language (the first one is about learning, but they can transfer what they learn)." CreationDate="2019-05-11T11:36:00.443" UserId="204" />
  <row Id="14942" PostId="5630" Score="1" Text="If you have poor knowledge of the language (excepting particularly weird languages like prolog and awk) this is not a problem for teaching, learning and lesson construction just so long as you have some CS proficiency including programming in another language. The difficulty will be when you come to mark the work and more particularly in lab practicals where you will need to *quickly* spot errors in student code." CreationDate="2019-05-09T20:19:05.120" UserId="8007" />
  <row Id="14939" PostId="5633" Score="1" Text="I don't entirely understand what you're asking here. Are you asking for resources for age-appropriate lessons?" CreationDate="2019-05-08T20:06:26.150" UserId="27" />
  <row Id="14940" PostId="5633" Score="0" Text="Not exactly, even if interesting and useful links are always appreciated. I would like to know how other people (CS educators, professors, teachers, researchers) have dealt with this didactic problem in primary schools: if they encounter difficulties, and why, or which kind of path they suggest to follow, which learning methods they used (e.g., cooperative learning, classical lesson with the blackboard, etc.)." CreationDate="2019-05-08T20:08:19.057" UserId="8005" />
  <row Id="14938" PostId="5634" Score="0" Text="I'm already familiar with CS Unplugged, but I didn't know Creative Computing, which seems quite inspiring! Thank you very much, Buffy, for the suggestions." CreationDate="2019-05-08T19:58:00.850" UserId="8005" />
  <row Id="14943" PostId="5635" Score="2" Text="Sorry, but you have a profound misunderstanding about grammars and especially LL(1). The &quot;int x&quot; convention is no harder to parse with LL(1) than the pascal convention. But if your grammar is not LL(1) it is, in principle, harder for humans to parse than if it is. Most compilers use LR techniques (at least) but that is due to efficiency, not the nature of the language. An LR parser needs to evaluate more of a statement to make a prediction about the meaning than is necessary with an LL(1) language. Don't confuse the structure of the language with the type of compiler typically used." CreationDate="2019-05-09T20:26:07.727" UserId="1293" />
  <row Id="14944" PostId="5635" Score="2" Text="But yes, Pascal is old and has a few flaws. Being LL(1) (mostly) isn't one of them. In fact, a language that has &quot;dangling else&quot; issues isn't LL(1) which is why it requires special rules to match else clauses. It is also why nested if statements often confuse students. It is also why I require students to always fully brace every such &quot;if&quot; and &quot;else&quot; clause. Modula 2 is LL(1) but avoids this issue by requiring &quot;end&quot; for such clauses. But, again. LR is an advantage for compiling efficiency, but NOT - definitely NOT - for understanding." CreationDate="2019-05-09T20:30:22.243" UserId="1293" />
  <row Id="14946" PostId="5635" Score="0" Text="The left or right factoring affects the feel of the language syntax and most programmers today will be using languages with right factored grammars because the compilers they use will have been constructed using automatic tools which rely on the LR parsing algorithm. I am pointing to this fact to explain *why* pascal has a &quot;clunky&quot; feel for learners used to right factored grammars having been invented before the LR algorithm was known." CreationDate="2019-05-09T21:05:30.127" UserId="8007" />
  <row Id="14947" PostId="5635" Score="3" Text="Actually, I taught compilers for 20 years. I also taught language principles for the same amount of time. There are automated tools for LL parsers also. The &quot;single lookahead&quot; is actually a massive advantage for a human reading a program. It is less important for an automated tool. If you can read a program one token at a time (rather than needing to backtrack) you have a big mental advantage. Again. languages should be LL(1), preferably. Compilers should be efficient." CreationDate="2019-05-09T21:05:55.007" UserId="1293" />
  <row Id="15077" PostId="5635" Score="1" Text="Actually, the historical if not typical type of compiler for Pascal is hand made  recursive descent parsing." CreationDate="2019-05-25T10:56:04.983" UserId="2103" />
  <row Id="14950" PostId="5636" Score="0" Text="Supposedly, Lambda Calculus is a pure theory of functions -- and, yes, supposedly anything function-wise in a LC-based programming language can be considered real math functions, because they're built from LC. If we stick to, e.g., Haskell, then I believe we don't have to worry about your &quot;instrumentation&quot; functions -- or at least the Haskell folks have a workaround/explanation." CreationDate="2019-05-10T04:01:06.053" UserId="7996" />
  <row Id="14951" PostId="5636" Score="0" Text="A good point excepting that not all programming languages are purely functional and it is unlikely that beginners will use Haskell. Without wishing to extend the discussion into technicalities outside the range of discourse one could argue that functions in programming are more akin to operators in mathematics than functions in mathematics. Of course as you say, this all depends on the language to some extent." CreationDate="2019-05-10T10:01:02.433" UserId="8007" />
  <row Id="18286" PostId="5640" Score="0" Text="Great explanation! Now we just need to re-base it to a world where people never used paper files, folders, desks, offices... What does &quot;a record of clients information&quot; mean to someone who has not used paper for that, or really know what a client is? Children truly face a crazy learning situation, and they always have, but now things have changed so much in one lifetime that our teaching is way behind. How do we get ahead of their already lived experience in order to show them where things are going? I bet we can't. So we have to explain clearly where things came from and hope for the best." CreationDate="2021-10-01T09:59:04.967" UserId="5349" />
  <row Id="15228" PostId="5641" Score="0" Text="Sorry for the late answer. Thanks for the interesting link!&#xA;Pupils are usually between 8 and 11 years old. Groups can be heterogeneous (for example during activities in the public library) or homogeneous (students of the same class). In the former case, it's not so easy to find exercises and themes that everyone can do without getting bored or having difficulties. I usually ask, as one of the requirements, the ability of doing simple multiplications but it may be not enough. Instead in classrooms, we usually ask the teachers for some suggestions." CreationDate="2019-06-17T08:51:49.467" UserId="8005" />
  <row Id="14952" PostId="5644" Score="0" Text="What country are you asking about?  And note that in some places the terms are used interchangeably." CreationDate="2019-05-10T11:00:19.017" UserId="1293" />
  <row Id="14953" PostId="5644" Score="3" Text="I'm referring to US ABET accredited programs." CreationDate="2019-05-10T11:09:56.413" UserId="8012" />
  <row Id="14954" PostId="5644" Score="0" Text="If all you want to do is code, depending on what you want to do and where you live, you could look into a good coding boot camp as a way of getting some of the necessary skills in a fraction of the time and expense. I was initially skeptical of those but have come to realize that the better ones have some genuine worth." CreationDate="2019-05-10T13:24:20.043" UserId="2715" />
  <row Id="14956" PostId="5644" Score="1" Text="Learn how to break problems down into smaller problems, learn a few programming languages (especially if they have different syntax or different approaches, ie functional vs. object), and take some courses in communications (writing, speaking). Those are the critical skills -- the degree is just the employer's easy way to check that you can stick through a commitment." CreationDate="2019-05-10T13:57:41.677" UserId="4902" />
  <row Id="14964" PostId="5644" Score="1" Text="Just a personal anecdote: My university's &quot;Software Engineering&quot; was a specialization of the B.S in Computer Science (and was awarded as a B.S Computer Science, Software Engineering&quot;) The SE emphasis required additional &quot;core&quot; classes that were left as optional electives to CS students. If you can't find a similar program you could always just take the CS course and choose SE related electives, e.g. software architecture, life-cycles, forward engineering, UML, technical writing etc." CreationDate="2019-05-10T15:44:58.973" UserId="2386" />
  <row Id="14965" PostId="5644" Score="1" Text="Back in the day, there was **only** computer Science** -- which I majored in.  Then I started hearing about software engineering.  I always thought they were the same thing." CreationDate="2019-05-10T16:34:27.080" UserId="7936" />
  <row Id="14966" PostId="5644" Score="1" Text="Real world experience is going to teach you much more than most university courses would anyway, regardless of the focus." CreationDate="2019-05-10T18:29:49.963" UserId="981" />
  <row Id="14978" PostId="5644" Score="2" Text="One thing I have to say, as someone who went through college and has a successful career as a developer going, don't go to college expecting to get good at coding. They *will* teach you everything badly, and you'll need to start (almost) from scratch when you start programming for the real world; I got that experience from OSS projects. Programming in the real world is way different than studying isolated concepts in school. OTOH, college won't hurt your career, as long as you don't buy what they teach hook, line, and sinker. Good luck!" CreationDate="2019-05-11T02:43:44.660" UserDisplayName="user4991" />
  <row Id="14986" PostId="5644" Score="0" Text="Agreeing to other comments: University doesn't make you a good coder. You'll have to do it yourself. If you've never had any interest in coding/tried it in your spare time, University won't help. If all it takes for you to code in your spare time is a kick in the butt, then come and get it. Do University when you can write simple software yourself ." CreationDate="2019-05-11T17:37:33.670" UserId="1100" />
  <row Id="15000" PostId="5644" Score="0" Text="At my university, software engineering and computer science students to essentially the same courses. SENG has stricter course requirements and the need to do internships, and is 4 years instead of 3. However, most people I've spoken too don't care what degree you have." CreationDate="2019-05-12T12:25:34.203" UserId="681" />
  <row Id="15004" PostId="5644" Score="0" Text="At my college, Software Engineering was just one class (taught by John Guttag, the co-designer of the CLU programming language) in the CS curriculum." CreationDate="2019-05-12T20:16:57.500" UserId="1471" />
  <row Id="14957" PostId="5645" Score="6" Text="&quot;What to build&quot; is a domain knowledge issue, and I've never heard of a degree program that can help with that. And you'd better know how to build software if you want to solve problems with software." CreationDate="2019-05-10T13:59:17.620" UserId="4902" />
  <row Id="14958" PostId="5645" Score="2" Text="@RobCrawford, I'm also concerned with ethics is what _should_ be built and what not." CreationDate="2019-05-10T14:18:31.507" UserId="1293" />
  <row Id="14959" PostId="5645" Score="0" Text="I don't think college is the place to learn that, either. Some of history's most horrendous acts have been carried out by crowds of the well-educated, all convinced they were doing the correct thing. For that, I'd just encourage people to read, think, and learn; find people you believe are acting ethically, confirm that they actually are, and learn what guides them." CreationDate="2019-05-10T14:26:42.610" UserId="4902" />
  <row Id="14963" PostId="5645" Score="6" Text="@RobCrawford There are plenty of degree courses to help with &quot;what to build&quot;. Engineering (any branch), biophysics, any liberal arts subject (if you are interested in textual analysis), sport science, (e.g. motion tracking and human physiology), economics, etc, etc. &quot;Learning how to code&quot; is the simple part compared with &quot;knowing what to code&quot; - it's not worth devoting a whole degree to just the &quot;how to&quot; topic." CreationDate="2019-05-10T14:57:47.173" UserId="1352" />
  <row Id="14972" PostId="5645" Score="1" Text="I agree with your answer if the important thing is personal status and self importance. I think that depends largely on one's personality. Coding can be very rewarding for people who like coding. Managing can be very rewarding for people who like to manage. Reading the words of the questioner I get the impression that there is a definite interest in coding *because it's enjoyable*." CreationDate="2019-05-10T22:25:26.257" UserId="8007" />
  <row Id="14975" PostId="5645" Score="0" Text="@Buffy &quot;I'll also say that a &quot;career&quot; as a coder isn't going to be especially rewarding&quot;--&gt;Are you saying career as a software developer isn't rewarding? You may want to make that more clear. &quot;Focus on that last part, not the actual coding&quot;--&gt; This is also a bad advice. (random example) If linus torvalds wasn't focused on coding, linux would be littered with bugs." CreationDate="2019-05-10T23:54:39.033" UserDisplayName="user8025" />
  <row Id="14976" PostId="5645" Score="3" Text="No, I didn't mean software development in general. I meant just coding. Torvalds is much more than a coder. And, of course, every rule has an exception, but that exception, being rare, isn't likely to be you." CreationDate="2019-05-11T00:00:00.590" UserId="1293" />
  <row Id="14977" PostId="5645" Score="0" Text="you cant ignore coding because it is an art in itself" CreationDate="2019-05-11T00:11:24.083" UserDisplayName="user8026" />
  <row Id="14988" PostId="5645" Score="0" Text="Not very rewarding? Software engineers earn six figures on average in the US... And in most large companies, *what* should be built is decided by project managers, and not by engineers.Both career paths are open to CS grads, obviously, but I would not say that one of them isn't rewarding. Confused about getting such an reply by a CS professor." CreationDate="2019-05-11T18:13:41.350" UserDisplayName="user8033" />
  <row Id="14989" PostId="5645" Score="1" Text="@Adrian, but no, I didn't say that software engineering is unrewarding. I said that a career as a _coder_ is unrewarding. I hope you aren't conflating the two. And there is another distinction. Managers decide what _will_ be built (or attempted). What _should_ be built is a larger question that has _ethical_ considerations as well as the economic ones that managers normally consider." CreationDate="2019-05-11T18:17:42.173" UserId="1293" />
  <row Id="14990" PostId="5645" Score="1" Text="@Buffy A career in 'coding' is a career in software engineering. At least, that's what me and other software engineers at my workplace do." CreationDate="2019-05-11T18:34:02.320" UserDisplayName="user8033" />
  <row Id="14991" PostId="5645" Score="0" Text="@Adrian, I doubt that Bill Cook is conflating the two in the same way you are. If you turned it around to &quot;A career in software engineering is a career in coding&quot; I might agree. If you hire me as a Software Engineer then I'm happy (and making $140K). If you hire me as a coder, I suspect not. Yes software engineers do a lot of coding - as do some professors, actually. But I'm not hired or paid as a coder." CreationDate="2019-05-11T18:42:04.393" UserId="1293" />
  <row Id="14994" PostId="5645" Score="6" Text="@Adrian A software engineer doesn't have a &quot;career in coding&quot;, any more than a motor mechanic has a &quot;career in screwdrivers&quot;. The career is whatever you're doing which needs coding to make it happen. Coding itself is simply a tool you use to carry out your work. And yes, it is possible to create software without writing a line of code - LabVIEW and Matlab Simulink users do it all the time." CreationDate="2019-05-11T21:13:59.710" UserId="1864" />
  <row Id="14995" PostId="5645" Score="0" Text="@Graham Graphical IDEs/languages are &quot;coding&quot; (= programming) as well... And what you mean is rather a career in &quot;keyboards&quot;. Coding is a skill, not a tool." CreationDate="2019-05-11T21:28:55.657" UserDisplayName="user8033" />
  <row Id="14996" PostId="5645" Score="1" Text="@Adrian Yeah exactly they are somehow underrating coding. I am software developer by profession but still largest part is coding. at least 80%" CreationDate="2019-05-12T10:09:38.187" UserDisplayName="user8038" />
  <row Id="14998" PostId="5645" Score="0" Text="This answer is just bad. Try to apply for any software engineering position at a large company and you'll see that most of the application process will be about coding, because well, that's what the job is about. Sad to read this from a CS professor. Probably a symptom of living in the ivory tower. @user8038" CreationDate="2019-05-12T11:45:47.140" UserDisplayName="user8033" />
  <row Id="14999" PostId="5645" Score="1" Text="@Adrian, yes, _entry level_ jobs are a lot about &quot;just&quot; coding. But if that is your only goal and you are still doing that in 10 years, I think you could have - should have - aimed higher. Please read it again. I don't denigrate coding and I do a lot of coding (and consulting to large business, on occasion), but simply suggest that &quot;coding&quot; isn't the goal.  We &quot;ivory tower&quot; professors usually try to encourage students to be their best and to aim high. Software Engineering is more than coding. Otherwise the course of study would only have about four subjects. Don't play word games, please." CreationDate="2019-05-12T12:02:12.447" UserId="1293" />
  <row Id="15001" PostId="5645" Score="2" Text="Not everyone wants to become a consultant.. or an engineering manager. In most companies you can become just a more proficient software engineer (with more responsibility, eg for wider software architecture. But that's still deciding &quot;how&quot; to build something, not what to build) I don't think it's smart to impose any career goals on people who don't want it. If OP wants a career in coding, just let them have it." CreationDate="2019-05-12T12:33:19.210" UserDisplayName="user8033" />
  <row Id="15007" PostId="5645" Score="0" Text="Coding is always a way to achieve something, not the goal in itself. But same way, knowing your way around data structures, algorithms, business domains etc is also not a goal - it is a way to be able to code/design code better. As for the monetary part, I beg to disagree - I have just recently received offer promising 150k GBP/year + bonuses (which tend to be considerable) + paid vacation/sick days/etc for mostly-coding position, which I think is reasonable amount." CreationDate="2019-05-13T09:29:11.590" UserId="4918" />
  <row Id="15008" PostId="5645" Score="0" Text="@Adrian yeah *most* of the software engineering vacancies are mostly about coding, so ....." CreationDate="2019-05-13T10:22:10.263" UserDisplayName="user8046" />
  <row Id="15035" PostId="5646" Score="0" Text="DLD does not prepare a student for electrical engineering. This does not entail the physical properties of electricity, but only the ways in which logic can be used to achieved certain outcomes in certain conditions (which is commonly done using electricity, but irrelevant to a programmer)." CreationDate="2019-05-17T12:35:25.290" UserId="2164" />
  <row Id="15038" PostId="5646" Score="0" Text="You're misreading what I wrote. I am suggesting a wider background will help someone work better in a cross-functional team." CreationDate="2019-05-17T15:45:46.320" UserId="41" />
  <row Id="14961" PostId="5648" Score="1" Text="I think the actual course components really are the most important factor when deciding. back when i did my undergraduate in Electronics engineering my Computer Science buddies actually did less coding than me because we had more coding  modules and they had more Computer science theory modules. &#xA;&#xA;But in my software engineering masters we did more theory than the compsci masters did, so it really all does boil down to the modules." CreationDate="2019-05-10T14:55:29.407" UserId="8016" />
  <row Id="14971" PostId="5648" Score="0" Text="I think the point about mindset is a really good one. The difference between the two strands is one of perspective, attitude and direction. On a degree scheme this gets deeply embedded - for life!" CreationDate="2019-05-10T22:17:30.430" UserId="8007" />
  <row Id="14970" PostId="5652" Score="1" Text="I don't agree. I think the appropriate level is more PhD or at least Masters today. Just because some courses are poor doesn't make them worse than no course at all and frankly, the non graduate programmers I have managed have not usually been up to the tasks set. Online resources are a revolution but it is very useful to know where to look and what to look for. It is hard for a person who learns from online tutorials to catch up with a person who goes directly to the technical documentation for example." CreationDate="2019-05-10T22:15:10.983" UserId="8007" />
  <row Id="14983" PostId="5652" Score="0" Text="I read papers and technical documentation online. I don't see any value in paying uni to give links to the technical documentation. I didn't find my uni courses really useful. Even master courses." CreationDate="2019-05-11T11:41:09.243" UserId="2054" />
  <row Id="14984" PostId="5653" Score="0" Text="Anecdotally, my wife is an IB expert, and I've seen some of the IB requirements for CS. It is leaps and bounds above AP in terms of rigor and expectations. I'll try to dig up some formal documents to flesh out a complete answer this weekend." CreationDate="2019-05-11T15:24:41.187" UserId="76" />
  <row Id="14993" PostId="5653" Score="0" Text="I think that the APCS-AB curriculum was much stronger, but they dropped part of it. Both programs seem to offer college credit (or at least skipping some courses) for good scores, but I wonder how many colleges still really do that." CreationDate="2019-05-11T19:57:18.243" UserId="1293" />
  <row Id="15002" PostId="5653" Score="0" Text="@Peter Thanks! I would appreciate that very much. My impression was that there was less significant coding in IB, but if that is wrong, I'd be glad to hear it." CreationDate="2019-05-12T14:20:52.193" UserId="27" />
  <row Id="15252" PostId="5653" Score="0" Text="@Peter Have you had a chance to look into this? It turns out that we will definitely be offering this course. I would absolutely love it if this question had an answer :)" CreationDate="2019-06-25T23:33:32.420" UserId="27" />
  <row Id="14974" PostId="5654" Score="2" Text="This is more or less the advice I got from a hiring manager at a big gaming developer: CS grads can do basically any development job. With a specialized degree (to include SE &amp; Game Development), there are tasks they have more experience out the door with, but there are also tasks they are likely unable to do without going to substantial additional training. The examples she used was game engine/netcode development because both rely heavily on low-level mathematics/theory work which is usually lacking in specialized programs. There is plenty of room for both, but CS will give you more options." CreationDate="2019-05-10T23:03:01.430" UserId="807" />
  <row Id="14980" PostId="5654" Score="0" Text="Great answer, and as a Comp Sci grad I fully agree ;-). Seriously though I think your point about avoiding using someone else's code because you don't grok what's really going on is a hugely important one. I see people using the hugely resource inefficient Electron framework so they don't have to learn to code for desktop, whilst failing to understand the consequences of using an unwieldy web app framework to do something trivial in native code. See also the NPM left-pad debacle...did that really need to be a dependency? That's a first month Comp Sci lab assignment!.." CreationDate="2019-05-11T06:26:18.163" UserDisplayName="user8023" />
  <row Id="14985" PostId="5654" Score="3" Text="Your point about focusing on having solid coding skills is very important. However, your statements about software engineers is greatly overgeneralized. I've seen excellent developers from all types of computer/engineering backgrounds and I've seen terrible developers from all types of computer/engineering backgrounds. The difference between a &quot;software developer&quot; and &quot;computer scientist&quot; is really just semantics." CreationDate="2019-05-11T16:02:06.160" UserId="8032" />
  <row Id="15003" PostId="5654" Score="1" Text="&gt;I recommend that you study computer science, as that will also teach you the basics of software engineering.&lt;&#xA;&#xA;There should be a large emphasis placed on &quot;basics&quot; here.. a lot of CS courses, where theoretical foundations are seen as more important, do not cover software engineering well." CreationDate="2019-05-12T19:53:56.397" UserId="916" />
  <row Id="14987" PostId="5658" Score="0" Text="Are you writing as a student or as the teacher?" CreationDate="2019-05-11T17:51:50.727" UserId="1293" />
  <row Id="14992" PostId="5658" Score="0" Text="I am writing as a student" CreationDate="2019-05-11T19:15:49.913" UserId="6894" />
  <row Id="15005" PostId="5660" Score="0" Text="I've voted to close this, because the &quot;for BS (CS) students&quot; part of the question seems incidental to the problem of _making a video tutorial_ and perhaps suited to another SE network site." CreationDate="2019-05-12T20:24:19.343" UserId="916" />
  <row Id="18645" PostId="5661" Score="1" Text="People should definitely study a field that they actually want to work in, already are somewhat good at, and enjoy. Until they can answer all 3 of those, they should not be admitted to a school." CreationDate="2021-12-31T12:18:22.643" UserId="5349" />
  <row Id="15011" PostId="5664" Score="1" Text="So, did you develop your tool in response to the problems you were having at the time you wrote this question?" CreationDate="2019-05-14T18:38:35.600" UserId="27" />
  <row Id="15021" PostId="5664" Score="1" Text="Yup! I was a TA and built this project to solve this problem. Now we have a community of hundreds of professors using this solution to improve their course." CreationDate="2019-05-15T19:08:09.967" UserId="1397" />
  <row Id="15022" PostId="5664" Score="0" Text="@tusharoni Does the contact email on the website currently go to you? (And would you object if I contacted you?)" CreationDate="2019-05-15T21:25:27.790" UserId="27" />
  <row Id="15029" PostId="5664" Score="0" Text="Yup, go for it!" CreationDate="2019-05-16T01:43:01.660" UserId="1397" />
  <row Id="15407" PostId="5664" Score="0" Text="On similar lines to HackerRank, there's SPOJ (Sphere Online Judge): on a quick look, I don't see that they make their backend software available, but maybe if you ask. If you ask in the codegolf chatroom The Nineteenth Hole then people may be able to suggest other sites which have automatic golf validation setups." CreationDate="2019-08-06T07:54:05.993" UserId="1219" />
  <row Id="20965" PostId="5667" Score="1" Text="But I see people can understand SM easily without knowing much of DC." CreationDate="2023-02-12T05:48:06.333" UserId="9884" />
  <row Id="15012" PostId="5668" Score="0" Text="This seems like a local issue, not a general one. It seems unusual to me as do the number of languages (too high). Perhaps you should ask this question of your faculty who designed the program." CreationDate="2019-05-15T10:01:10.350" UserId="1293" />
  <row Id="15014" PostId="5668" Score="1" Text="First note: computer-science ≠programming. Computer science is about much more than programming." CreationDate="2019-05-15T12:07:58.307" UserId="204" />
  <row Id="15016" PostId="5668" Score="0" Text="An embedded developer might be asking why they need to learn more than C/ASM, and how the other 90% of the product actually works." CreationDate="2019-05-15T12:14:11.440" UserId="41" />
  <row Id="15019" PostId="5668" Score="0" Text="If this question is not a duplicate, please edit it to make clearer how it is different and the question can be reopened." CreationDate="2019-05-15T15:28:22.540" UserId="27" />
  <row Id="15020" PostId="5668" Score="0" Text="I don't actually think it is a duplicate exactly, but the answers to the other question probably apply to this one also. Perhaps with additional force." CreationDate="2019-05-15T18:56:23.360" UserId="1293" />
  <row Id="15023" PostId="5668" Score="0" Text="@Buffy It might not be. Either way, I'd love some clarification from OP." CreationDate="2019-05-15T21:26:53.860" UserId="27" />
  <row Id="15031" PostId="5671" Score="2" Text="I'm not sure I understand the question.  You have... a powerpoint?  And you're trying to convert it to HTML/CSS?" CreationDate="2019-05-16T16:42:14.930" UserId="27" />
  <row Id="15032" PostId="5671" Score="1" Text="There are no power points here. I have PDF slides prepared in Latex." CreationDate="2019-05-17T01:31:50.577" UserId="6410" />
  <row Id="15034" PostId="5671" Score="2" Text="I edited your question to include that information. In the future, if a clarification is requested, please also do this.  Comments are considered transient on SE.  Questions are meant to be high-quality and self contained." CreationDate="2019-05-17T10:25:09.173" UserId="27" />
  <row Id="20945" PostId="5671" Score="0" Text="Can you explain why your current workflow $\LaTeX \to \text{PDF}$ isn't good enough? Links and animations are easy enough to do with that." CreationDate="2023-02-08T11:57:15.033" UserId="13024" />
  <row Id="15033" PostId="5672" Score="0" Text="Does it work with PDFs?" CreationDate="2019-05-17T01:32:21.890" UserId="6410" />
  <row Id="15036" PostId="5672" Score="0" Text="Slides doesn't, but if you have the PDF online somewhere it's pretty easy to embed a PDF into a web page." CreationDate="2019-05-17T12:39:44.940" UserId="30" />
  <row Id="16633" PostId="5677" Score="1" Text="&quot;logic is the core skill of any programmer&quot; Logic, but not &quot;digital logic&quot; ie gates." CreationDate="2020-06-24T23:45:11.173" UserId="2485" />
  <row Id="15039" PostId="5680" Score="0" Text="Yay, she got 3rd place! :) Anyways, I get what you are saying. The idea of &quot;being a disappointment&quot; hadn't crossed my mind but it fits the bill. I've never pressured her and whenever I see that she becomes unhappy I just stop and move on to something else. So I don't think I've got a vicious circle yet -- but I'll keep this in mind for the future. As for your suggestions - as I said, she's already going to a group that has a good teacher, and I don't think that we need a private tutor, so, basically, I'll just stop trying to teach her unless she comes to me first. Thanks! :)" CreationDate="2019-05-18T17:21:38.257" UserId="6155" />
  <row Id="15040" PostId="5680" Score="0" Text="I'll see if something else comes up, and if it doesn't within a day or two, I'll accept your answer." CreationDate="2019-05-18T17:25:43.463" UserId="6155" />
  <row Id="15042" PostId="5680" Score="0" Text="It is good to wait for a while before accepting answers. Some people who want to answer will also want to reflect a bit before actually writing. But note, also, that you can withdraw and re-assign acceptance if it comes to that." CreationDate="2019-05-18T19:43:30.223" UserId="1293" />
  <row Id="15043" PostId="5680" Score="0" Text="I know. But I also don't want to scare other people off, who might not answer if the question already has an accepted answer. :)" CreationDate="2019-05-18T21:45:35.957" UserId="6155" />
  <row Id="15044" PostId="5682" Score="1" Text="Actually, it is useful to intentionally make a few mistakes when programming in front of a class. Back in the day a useful student exercise was to write a program that generated _every_ Fortran diagnostic. Another useful exercise was (and remains) giving students a program that had certain well designed errors (some syntactic, others deeper) with instructions to repair the program. Such a program is called a _Fixer Upper_ in Pedagogical Patterns circles." CreationDate="2019-05-19T13:23:48.860" UserId="1293" />
  <row Id="15045" PostId="5682" Score="0" Text="@Buffy Is there, somewhere, a collection of exercises fitting this pattern? I find them maddeningly hard to design." CreationDate="2019-05-19T15:53:20.277" UserId="27" />
  <row Id="15046" PostId="5682" Score="0" Text="Hmm... interesting ideas for my metaphorical toolbox. While I doubt they alone will solve my problem, they are nonetheless very useful." CreationDate="2019-05-19T17:16:47.340" UserId="6155" />
  <row Id="15047" PostId="5682" Score="0" Text="@BenI., actually they aren't that hard to create. I've used them as a first exercise to give a quick overview of a language and a program in the language. Take any program that you are proud of and that has great structure. Make it a bit longer (twice) than you would ask them to write at that stage. Throw in a couple of logic errors and a few syntax errors. In Java, make sure you have javadocced the intent of each part. Don't include basic structural errors at that point. Probably tell them how many errors it has. You want them to see a few compiler messages and you want them to get (cont)" CreationDate="2019-05-19T18:55:06.567" UserId="1293" />
  <row Id="15048" PostId="5682" Score="0" Text="output that is not quite right. Off by one errors for example, or even run time errors if not too complex to fix. With six errors and ten minutes expected per error you have an exercise. It is fine if one of the errors is a bit tricky, but not all of them." CreationDate="2019-05-19T18:56:47.167" UserId="1293" />
  <row Id="15057" PostId="5682" Score="0" Text="@BenI. these kinds of problems can also come organically. I've often taken a student's *almost correct* answer to a question and used it in later assignments/quizzes/examples to see if others can spot (and explain) the error." CreationDate="2019-05-20T21:33:54.560" UserId="6746" />
  <row Id="15203" PostId="5682" Score="0" Text="I actually made a list of common student problem types, and generate a test exercise each semester by taking some book sample code, and rolling dice against my table to determine what errors to inject." CreationDate="2019-06-13T03:01:21.063" UserId="8137" />
  <row Id="15052" PostId="5684" Score="5" Text="You still don't have enough information here to provide help. How old is your brother? What sort of difficulties is he having? Is he taking a course or just learning alone?" CreationDate="2019-05-19T21:48:33.953" UserId="1293" />
  <row Id="15250" PostId="5684" Score="0" Text="I think this could be a very interesting question, but like Buffy said, you haven't provided enough information for us to be able to help you. Also why is it imperative that your brother develop his interest? Why is it up to you?" CreationDate="2019-06-24T23:56:01.803" UserId="2068" />
  <row Id="15053" PostId="5685" Score="1" Text="Did you read the question, or just the title?" CreationDate="2019-05-19T21:52:26.407" UserId="6155" />
  <row Id="15054" PostId="5687" Score="0" Text="This question, like some others lately, is off topic here. The site is for teachers looking for better ways to teach." CreationDate="2019-05-20T12:25:37.797" UserId="1293" />
  <row Id="15055" PostId="5687" Score="0" Text="paper+pencil+eraser is usually a good start, before using any software to produce the final version. First decide what you want it to look like." CreationDate="2019-05-20T13:15:21.300" UserId="2103" />
  <row Id="15058" PostId="5687" Score="0" Text="A sequence diagram is one of the few UML diagrams that is truly useful. Umbrello is a UML drawing tool, give it a try." CreationDate="2019-05-21T07:58:43.687" UserId="204" />
  <row Id="15060" PostId="5688" Score="0" Text="I've heard about these ideas before, and I agree with them. I've even had a bit of a personal experience with this problem as well in my own youth. And I am trying to impart this wisdom to my daughter as well, but I don't think it's going too well. She's still fairly afraid to make mistakes and gets discouraged by them. Are there any practical tips for making people more confident about making mistakes and putting effort into improving? I'm kind of at a loss here, besides offering a lot of &quot;don't worry, it's no biggie, you'll do better next time&quot; kind of encouragement." CreationDate="2019-05-21T08:42:37.733" UserId="6155" />
  <row Id="15061" PostId="5688" Score="0" Text="encourage strategy and effort (not outcome), encourage mistakes (If you don't make any mistakes, then what you are doing is too easy)." CreationDate="2019-05-21T18:26:42.087" UserId="204" />
  <row Id="15063" PostId="5690" Score="0" Text="Some of the answers here are good examples of the use of a queue, but not all are easily amenable to problems that can be programmed early on." CreationDate="2019-05-22T19:58:54.683" UserId="1293" />
  <row Id="15334" PostId="5693" Score="0" Text="I like that your examples are ones that students could relate to." CreationDate="2019-07-19T19:56:57.327" UserId="283" />
  <row Id="15062" PostId="5694" Score="0" Text="I like this answer because you not only suggest that a queue be used, but also compare it with other solutions to the problem" CreationDate="2019-05-22T19:17:59.207" UserId="3036" />
  <row Id="15069" PostId="5706" Score="4" Text="This seems more of a rant that a question about how to teach CS. I'm guessing that you have a misconception about the purpose of this specific course." CreationDate="2019-05-24T19:11:26.500" UserId="1293" />
  <row Id="15070" PostId="5706" Score="0" Text="Well I'm more asking is this allowed and what am I supposed to do? The subject is apparently computer science, but the contents are not. Since when are schools allowed to say they're teaching something when they're not? Does this not give false impressions to employers? Why is it okay that my computing grade will be determined by how much I know about Ed Sheeran?" CreationDate="2019-05-24T21:02:27.463" UserDisplayName="user8090" />
  <row Id="15071" PostId="5706" Score="1" Text="They are computer science. Don't confuse that with computer programming." CreationDate="2019-05-24T21:05:38.810" UserId="1293" />
  <row Id="15072" PostId="5706" Score="0" Text="https://en.wikipedia.org/wiki/Computer_science does not mention copyright once. Maybe it would come under something like ICT. But since when do people get jobs at companies like Google because they learnt a lot about Ed Sheeran's songs?" CreationDate="2019-05-24T21:46:30.713" UserDisplayName="user8090" />
  <row Id="15074" PostId="5706" Score="0" Text="What year are you in? I guess Key stage 3 (year 7 →9), as you are only doing ½ hour a week." CreationDate="2019-05-25T09:29:50.197" UserId="204" />
  <row Id="15078" PostId="5706" Score="0" Text="Year 8, it is not currently taught after Year 9." CreationDate="2019-05-25T13:52:06.993" UserDisplayName="user8090" />
  <row Id="15126" PostId="5706" Score="0" Text="I think there are a few different issues here. The copyright/legal stuff is, I believe, part of the national curriculum. It's a shame there's not much of a focus on *actual* CS, but if you take the relevant GCSEs and/or A levels, you should get the more technical content too. Note that a university degree will include some legal/ethical issues too (thanks to the BCS)! The other issues revolve around wrong information (e.g. Firefox). As someone who found the IT content in Years 7-9 similarly dull, I can only suggest putting up with it and trying to make the most of it." CreationDate="2019-05-31T14:34:36.687" UserId="916" />
  <row Id="15157" PostId="5706" Score="1" Text="I understand your frustration, but saying there is &quot;no need for&quot; a particular language or that a discussion on ethics in computer science is &quot;not remotely useful&quot; is really dismissive, IMHO. Learning a language, even if you'll never &quot;use&quot; that language, is a useful process. Ethics in computer science are extremely important. My advice is to not be so quick to dismiss potential learning opportunities." CreationDate="2019-06-04T00:49:54.360" UserId="2068" />
  <row Id="15317" PostId="5706" Score="0" Text="Is it a computer science class or a computing class?" CreationDate="2019-07-19T02:43:17.673" UserId="1275" />
  <row Id="15351" PostId="5706" Score="0" Text="The teacher uses the 2 terms interchangeably, even though I'm aware they aren't the same." CreationDate="2019-07-20T06:41:11.910" UserDisplayName="user8090" />
  <row Id="15079" PostId="5707" Score="0" Text="&quot;The new computing syllabus (post ICT), consists of 3 parts: Computer science, IT, and digital literacy.&quot; The lesson is computer science. She has stated it's computer science. The subject code on our timetable is CS." CreationDate="2019-05-25T13:53:17.490" UserDisplayName="user8090" />
  <row Id="15080" PostId="5707" Score="0" Text="Also, even if she is teaching the right thing (which seems quite unlikely, as copyright really isn't CS, we were doing general copyright, not digital copyright), then I still doubt that she's supposed to accept incorrect answers and not give me marks for ones that are correct." CreationDate="2019-05-25T13:58:29.107" UserDisplayName="user8090" />
  <row Id="15081" PostId="5707" Score="0" Text="Have you found out what you will do latter in the year? Have you been doing copyright since September?" CreationDate="2019-05-25T16:05:10.283" UserId="204" />
  <row Id="15091" PostId="5707" Score="0" Text="We started with smallbasic (which was stupid because we could've learnt a modern language like JavaScript or Python, instead of one with virtually no good documentation and having to use a buggy online emulator), then we did magazines, then copyright, now we're doing &quot;Should access to the internet be a human right?&quot; (which I don't think is very likely to come up in a google job interview), and then I don't know what we're doing next, but the teacher has said it won't be a programming language, and I doubt it will be much better than what we have previously been doing." CreationDate="2019-05-26T13:10:36.897" UserDisplayName="user8090" />
  <row Id="15092" PostId="5707" Score="0" Text="And as I have said, while I am annoyed that she is teaching me things I was capable of when I was 7, I am more annoyed with the fact she does not understand the topic so she accepts wrong answers, and says my correct ones are wrong. She says stuff like &quot;Firefox is insecure because I don't like using it&quot;, and doesn't accept my answers for &quot;Why may someone not be able to connect to the internet?&quot; (Do you really think I would've gotten that wrong?)" CreationDate="2019-05-26T13:16:58.483" UserDisplayName="user8090" />
  <row Id="15093" PostId="5707" Score="1" Text="You may just have to accept that your teacher is not teaching computer science, and that you teacher makes mistakes. Then ask what can I learn in these lessons." CreationDate="2019-05-26T13:51:36.767" UserId="204" />
  <row Id="15096" PostId="5707" Score="0" Text="The teacher says I have to do the same work as everyone else. She says the lesson is computer science. And no matter what the subject is, that's not an excuse to teach it incorrectly." CreationDate="2019-05-26T16:38:20.483" UserDisplayName="user8090" />
  <row Id="15097" PostId="5707" Score="2" Text="I accept that, but what can you do? This is not the place to complain/report a bad teacher. We can only help you. What can you change? The only think that you can change is yourself. So what will you change? Have you reported to the head of department? Have you tried to see what else you can learn in the class?" CreationDate="2019-05-27T08:51:48.900" UserId="204" />
  <row Id="15098" PostId="5707" Score="0" Text="What can I change? There is only one &quot;CS&quot; teacher, making her the head of department, and she says I have to do the work everyone else does." CreationDate="2019-05-27T09:34:17.503" UserDisplayName="user8090" />
  <row Id="15099" PostId="5707" Score="0" Text="The only thing we can change is ourselves. And who is her boss?" CreationDate="2019-05-27T09:38:34.887" UserId="204" />
  <row Id="15100" PostId="5707" Score="0" Text="I guess the head of the school?" CreationDate="2019-05-27T15:33:04.550" UserDisplayName="user8090" />
  <row Id="15125" PostId="5707" Score="0" Text="Kudos on being the only one of us to actually put something besides opinion into an answer @ctrl-alt-delor! :)" CreationDate="2019-05-31T14:04:27.223" UserId="4689" />
  <row Id="15131" PostId="5707" Score="0" Text="Oh yeah, same thing with the main curriculum pdf: There's 28 instances of the word copyright, but 28 pages with that in the footer." CreationDate="2019-05-31T19:26:47.530" UserDisplayName="user8090" />
  <row Id="15132" PostId="5707" Score="0" Text="@ArchieBaer your comment is not clear: “same thing” What are you comparing the main curriculum pdf with. What are you saying about copyright?" CreationDate="2019-06-01T08:15:19.183" UserId="204" />
  <row Id="15133" PostId="5707" Score="0" Text="I'm saying it still doesn't mention copyright." CreationDate="2019-06-01T08:20:27.273" UserDisplayName="user8090" />
  <row Id="15134" PostId="5707" Score="0" Text="It is in there, but it is only a **small** part: “They need to be aware of their legal and ethical responsibilities” — page 15 of https://www.computingatschool.org.uk/data/uploads/cas_secondary.pdf and “Explains and justifies how the use of technology impacts on society, from the perspective of social, economical, political, legal, ethical and moral issues” — last column grey section of https://www.computingatschool.org.uk/data/quick_start_secondary/progression_path.pdf" CreationDate="2019-06-01T11:19:04.993" UserId="204" />
  <row Id="15082" PostId="5709" Score="0" Text="That's all very well and nice, but as far as programming itself is concerned, I already have that knowledge. How can this book help me to teach my daughter in a way she feels comfortable with?" CreationDate="2019-05-25T16:51:17.117" UserId="6155" />
  <row Id="15085" PostId="5709" Score="0" Text="It probably won't help *you*, but you can give her the book as a present." CreationDate="2019-05-26T09:13:04.377" UserId="1336" />
  <row Id="15095" PostId="5710" Score="0" Text="Hi! What you say is true, but it's unclear how this answers the question. If you include explanations relevant to teaching (for example: how one can use arduino to teach), it would greatly improve the answer." CreationDate="2019-05-26T16:04:42.963" UserId="150" />
  <row Id="15094" PostId="5713" Score="1" Text="Hi! This answer might be good, but you should expand on what you have written, and perhaps give explanations and examples." CreationDate="2019-05-26T16:02:54.480" UserId="150" />
  <row Id="15101" PostId="5716" Score="0" Text="Welcome to [cseducators.se]! Your question sounds interesting. You could improve it by adding information about context. i.e. what class is it? high-school, university etc.&#xA;Also, if you could mention what resources are at your disposal (is there a teacher computer in the classroom etc.) people could answer much more useful answers." CreationDate="2019-05-28T05:46:02.417" UserId="150" />
  <row Id="15103" PostId="5719" Score="0" Text="This question has nothing to do with Computer Science, it is unclear why it was migrated." CreationDate="2019-05-29T07:14:16.160" UserId="8103" />
  <row Id="15104" PostId="5719" Score="0" Text="Robotics isn’t part of computer science?" CreationDate="2019-05-29T08:47:54.440" UserId="3718" />
  <row Id="15106" PostId="5719" Score="3" Text="@JeffE Soldering irons aren't part of computer science" CreationDate="2019-05-29T09:10:18.453" UserId="8103" />
  <row Id="15107" PostId="5719" Score="0" Text="@user2768 If robotics is part of computer science, and soldering irons are part of robotics, then yes, soldering irons _are_ part of computer science." CreationDate="2019-05-29T15:33:40.173" UserId="3718" />
  <row Id="15109" PostId="5719" Score="0" Text="@JeffE Robotics is cross-disciplinary, the soldering aspect probably falls under electrical engineering, rather than computer science. If there's a forum for teachers or high-school educators or similar, then that would surely be more appropriate" CreationDate="2019-05-30T09:00:37.977" UserId="8103" />
  <row Id="15113" PostId="5719" Score="0" Text="This is a classroom management, and safety issue. You need consequences, you need better supervision, you need to foster respect." CreationDate="2019-05-30T19:21:31.607" UserId="204" />
  <row Id="15280" PostId="5719" Score="1" Text="@JeffE: By that definition, metallurgy (robot frames) and fluid dynamics (hydraulic pistons) and chemistry (since we're using matter, right?) should all be counted as part of computer science as well. Robotics is not part of computer science. Robotics is **partly** computer science, but it also contains bits and pieces of other fields." CreationDate="2019-07-04T10:21:07.050" UserId="2164" />
  <row Id="15281" PostId="5719" Score="0" Text="_Robotics is not part of computer science_ — I suspect my (CS) department chair (a roboticist) would disagree with you, just as I do." CreationDate="2019-07-04T17:10:28.847" UserId="3718" />
  <row Id="15105" PostId="5720" Score="2" Text="“They will face punishment” should include “Their parents will get an invoice”" CreationDate="2019-05-29T08:48:59.760" UserId="3718" />
  <row Id="17575" PostId="5720" Score="0" Text="@JeffE, equally you could expect children to be fascinated with new tools, just as a toddler given a hammer will often start hitting random things, and parents would expect children to be supervised adequately during this electronics class." CreationDate="2021-01-24T16:05:16.017" UserId="9075" />
  <row Id="17590" PostId="5720" Score="1" Text="@Steve Supervision, no matter how adequate, does not absolve the children (or their parents) of responsibility.  In the original question, the children are adolescents, not toddlers." CreationDate="2021-01-25T17:54:01.980" UserId="3718" />
  <row Id="17591" PostId="5720" Score="1" Text="@JeffE, oh it does. If this is a random selection of teenagers who don't use such tools at home, then you're bound to get a degree of mischief and horseplay initially, as with toddlers and hammers, and it needs robust adult leadership and oversight. Even then, not all people are suited by habit and background to use fine tools, and he may find some may need to be weeded out - their future will be as users of pickaxes and shovels, not soldering irons. (1/2)" CreationDate="2021-01-25T21:04:45.613" UserId="9075" />
  <row Id="17592" PostId="5720" Score="1" Text="I realise the OP means well - what he is doing is enormously commendable - but he should not be disheartened, and ought to be prepared for a degree of irresponsibility and to use it to set an example. I remember one of my first chemistry classes in school, which ended with a chemical concoction spewing over the desk having mixed a quantity far in excess of our instructions. I meant no disrespect to the instruments or the teacher, it was simply a fascinating process that I'd proceeded to experiment with during a slow-moving lesson, and I hadn't considered the consequences. (2/2)" CreationDate="2021-01-25T21:11:49.063" UserId="9075" />
  <row Id="17596" PostId="5720" Score="0" Text="@Steve  I agree with everything you wrote.  Of course OP should expect and plan for a certain amount of horseplay from teenagers. _But that expectation does not absolve the teenagers from responsibility!_  If they break something while they're goofing around, they (or their parents) are responsible for that damage; whether the damage was _intentional_ or not is irrelevant.  Yes, sympathy is much more appropriate than anger, but give an invoice anyway." CreationDate="2021-01-26T20:06:31.090" UserId="3718" />
  <row Id="17597" PostId="5720" Score="1" Text="@JeffE, holding them to account doesn't mean them being financially responsible for equipment, or using parents as financial whipping-boys. The most appropriate disciplinary measure for what the OP described, aesthetic damage, would be simply expressing fury about misbehaviour. At a higher level of seriousness or persistence, he could inform parents about events and ask for their cooperation in setting a standard (rather than being belligerent by sending invoices or impugning their own standards of responsibility), or in the extreme ask them to reconsider their child's attendance. (1/2)" CreationDate="2021-01-26T20:56:45.227" UserId="9075" />
  <row Id="17598" PostId="5720" Score="1" Text="In the meantime, the OP may also be on a learning curve himself about appropriate ratios of supervision, and the need to maintain an appropriate pace and level of interaction with all pupils during the course. He may also wish to ask whether any parents themselves have electronics skills and would be interested in participating so as to provide some more adult ballast in the room. A tolerant approach, and a realism about the challenges of teaching children, will stand the OP in far better stead. (2/2)" CreationDate="2021-01-26T21:09:04.103" UserId="9075" />
  <row Id="15102" PostId="5721" Score="2" Text="Get a signed paper that a child is also responsible for their health. A soldering iron can be dangerous and if you cannot supervise every child which is currently using one closely you probably need some legal backing in case someone gets hurt." CreationDate="2019-05-28T14:30:54.847" UserDisplayName="skymningen" />
  <row Id="15114" PostId="5721" Score="0" Text="@skymningen the paper is not worth a thing (at least not in England). You need to do your job properly. If you can not do it safely with the equipment, then do it without. Start from a position, of you get to use this stuff, when I trust you." CreationDate="2019-05-30T19:23:44.560" UserId="204" />
  <row Id="17593" PostId="5722" Score="0" Text="*&quot;make ... their parents ... sign another paper&quot;* - you're being presumptuous in assuming that parents can be made to sign such a paper or abide by it, or that (if the matter were hypothetically litigated) that a court would impose liability upon the parent free of any consideration of whether the activity which led to damage was age-appropriate and *properly supervised*. I'd say that this is really an attempt to impose a *conditional charge* for the activity, based on the equipment that each child consumes by damage... (1/2)" CreationDate="2021-01-26T02:24:03.160" UserId="9075" />
  <row Id="17594" PostId="5722" Score="0" Text="and it would be best to jettison the pretense of it actually being free, and either be frank with parents that damage (and thus charges) may well result, or just levy a general charge on all parents which covers the expected cost of damage as a natural part of providing a course to children. There is otherwise a confusion as to whether the course is truly free, or whether parents (who will not be present themselves to supervise, and probably aren't familiar with the activity and its risks) are actually being expected to cover certain hidden costs and contingencies as insurers. (2/2)" CreationDate="2021-01-26T02:29:43.473" UserId="9075" />
  <row Id="15110" PostId="5724" Score="0" Text="Hi, and welcome to [cseducators.se]!  You've come to the right place.  Could you edit this question to include some possible goals?  (Also, for those of us who don't have Code Monkey or Code Combat accounts, can you summarize roughly what was covered in their programs?)" CreationDate="2019-05-30T14:50:31.563" UserId="27" />
  <row Id="15111" PostId="5728" Score="0" Text="Say something about scale. How many students? How many projects? Team based projects or no?" CreationDate="2019-05-30T19:07:04.383" UserId="1293" />
  <row Id="15112" PostId="5728" Score="0" Text="Not a whole lot, 60 students max.  Although I'm inclined to teach writing code through project-based curriculum, the specific amount will be based on what options I have available to me.  I feel the same way about team-based projects as well, I'd like to include a lot of them, but they can be very messy to assess if the right structure isn't available on my end." CreationDate="2019-05-30T19:14:57.027" UserId="8104" />
  <row Id="15121" PostId="5728" Score="0" Text="selenium is a tool for testing web-site functionality https://en.wikipedia.org/wiki/Selenium_(software)" CreationDate="2019-05-31T08:13:09.317" UserId="204" />
  <row Id="15712" PostId="5728" Score="0" Text="I am using Code.org and I want to assess their projects differently and outside that platform too. I didn't know about the Linters to check the codes. However, I don't understand how to use it. I am reading the documentation in Github about it and my question is; Can I install on my computer the HtmlInt and having run on a text file that a student creates and I will be able to see the results like that? How do you use it? Thank you so much in advance and thank you for the different resources you mentioned. I am checking them all by now." CreationDate="2019-10-08T00:54:02.723" UserId="8491" />
  <row Id="15788" PostId="5728" Score="2" Text="`I can run unit tests on Java and C# to make sure the code students are submitting is correct without an issue` I can write code that does what it's supposed to, passes every test, and will still be flagged as a massive issue in any reasonable code review (if you want an example, remove all newlines and tabs from your code and rename your variables to randomized 15 letter strings). Am I to infer from this that your lessons do not include readability of code? Because if readability was a lesson focus, quite obviously you should try to (and be able to) read your students' code as well." CreationDate="2019-10-30T10:31:22.900" UserId="2164" />
  <row Id="15115" PostId="5729" Score="0" Text="It seems to be that the only way I can get by in her lessons is deliberately agreeing with her and saying the wrong answers." CreationDate="2019-05-30T22:00:41.867" UserDisplayName="user8090" />
  <row Id="15135" PostId="5729" Score="0" Text="@ArchieBaer I sometimes have to tell my pupils two truths: The real truth, and the exam truth." CreationDate="2019-06-01T11:30:21.893" UserId="204" />
  <row Id="15151" PostId="5729" Score="0" Text="Sadly @ArchieBaer you're starting to sound like this: https://xkcd.com/386/" CreationDate="2019-06-03T13:02:02.713" UserId="4689" />
  <row Id="15152" PostId="5729" Score="0" Text="@OnorioCatenacci I don't get it." CreationDate="2019-06-03T21:27:12.653" UserDisplayName="user8090" />
  <row Id="15116" PostId="5730" Score="0" Text="Thank you for taking the time to go over an approach to tackle my problem.  I'll definitely take it into consideration when approaching the class.  &#xA;&#xA;However, I'm looking for tools or techniques for grading automation.  I would really like to be able to learn from approaches that other instructors use to make a first pass at assessment of HTML, CSS, and JavaScript code for Web Development projects." CreationDate="2019-05-30T23:18:31.377" UserId="8104" />
  <row Id="15117" PostId="5731" Score="0" Text="Thanks for the feedback, it was exactly what I'm looking for.  Do you have a recommendation for a linter? As an aside, I currently use GitHub Classroom for all of my programming courses and utilize diff frequently." CreationDate="2019-05-30T23:28:11.530" UserId="8104" />
  <row Id="15120" PostId="5731" Score="0" Text="Since I never got the automated linter habit, I have no recommendations. A good place to start looking might be on [GitHub](https://github.com/caramelomartins/awesome-linters). As an alternative, you could consider asking a new question about how to evaluate/look for in a linter for classroom/grading use. Do mind the idea that shopping list questions [aren't received well](https://stackoverflow.blog/2010/11/23/qa-is-hard-lets-go-shopping/) on most SE sites. There is, however, a sister site [softwarerecs.se] that handles them, within limits." CreationDate="2019-05-31T02:20:30.823" UserId="104" />
  <row Id="15136" PostId="5731" Score="0" Text="I'm won't say you must unit test but I'd hate anyone to get the impression that validators and linters give you the same thing unit testing does. A unit test gives you an automated test that proves your code performs as you expected. It documents the abstraction you need. It makes promises about what it will do that using code can depend on. You can't buy that off the shelf. You have to write it yourself. Yes you can inspect what the page looks like but thats manual testing. There are [many JavaScript unit testing tools](https://www.guru99.com/javascript-unit-testing-frameworks.html)." CreationDate="2019-06-01T14:43:38.273" UserId="1401" />
  <row Id="15137" PostId="5731" Score="0" Text="@candied_orange You cannot &quot;unit test&quot; HTML, it's not executable code. If it renders as intended on the web page, it's &quot;correct&quot;. Validating the DOM in the HTML is the only way to &quot;automate&quot; the testing of the HTML markup." CreationDate="2019-06-01T18:04:11.960" UserId="104" />
  <row Id="15138" PostId="5731" Score="0" Text="@GypsySpellweaver you're forgetting the JS that the op mentioned." CreationDate="2019-06-01T19:27:15.610" UserId="1401" />
  <row Id="15139" PostId="5731" Score="0" Text="Since OP uses unit testing already, I have to presume that they already have a preferred option for JS unit testing. The HTML seems to be their problem." CreationDate="2019-06-01T20:01:41.740" UserId="104" />
  <row Id="15123" PostId="5732" Score="0" Text="You might look at the following answer to a quite different question: https://academia.stackexchange.com/a/130930/75368" CreationDate="2019-05-31T10:17:26.817" UserId="1293" />
  <row Id="15124" PostId="5732" Score="1" Text="How old are you, and how old are the students? (It's not directly relevant, except that it can help people translate mentally from your country's education system to their own.)  (BTW, don't answer in a comment; please edit your question to incorporate the information directly.)" CreationDate="2019-05-31T10:47:24.620" UserId="27" />
  <row Id="15128" PostId="5732" Score="0" Text="I'm guessing that your edu system is not terribly different from what happens in the US undergraduate education, though maybe restricted to fewer topics - such as the US &quot;Major concentration&quot;." CreationDate="2019-05-31T14:44:01.263" UserId="1293" />
  <row Id="15129" PostId="5732" Score="0" Text="We have a meta thread here to which people can add descriptions of their country's educational system to help aid others. You might want to add an &quot;answer&quot; for the system in Latvia and neighbor countries if applicable: https://cseducators.meta.stackexchange.com/q/204/1293" CreationDate="2019-05-31T15:32:34.497" UserId="1293" />
  <row Id="15140" PostId="5737" Score="0" Text="Welcome to [cseducators.se]! Could you expand on what you wrote? as it stands, your answer doesn't explain *how* one could do what you suggest." CreationDate="2019-06-02T08:05:11.040" UserId="150" />
  <row Id="15163" PostId="5738" Score="0" Text="I'm trying AutoGradr right now.  Currently waiting for the HTML/CSS stack to be unlocked, but it looks good so far" CreationDate="2019-06-04T15:25:25.253" UserId="8104" />
  <row Id="15165" PostId="5741" Score="1" Text="So you are to teach you pupils to be customers. After Graduation, they won't be able to use the product that they learn, unless them become a customer (Same is true for Microsoft, Apple, Google, but you should consider it anyway)." CreationDate="2019-06-04T22:22:01.277" UserId="204" />
  <row Id="15166" PostId="5741" Score="0" Text="Well, I did ask months ago on this platform for a free alternative. But no one was able to come up with one." CreationDate="2019-06-05T02:39:46.590" UserId="294" />
  <row Id="15153" PostId="5742" Score="0" Text="If they count pedagogical research as research then it would be easy. Can you remember which SIGCSE member you're referring to? I'm not a SIGCSE member (I'm a PhD mathematician who teaches CS at my SLAC), so not sure if I can write to the mailing list, but I could write her directly. If you don't want to share in the comments here, you could always email me. My email address is in my profile. Thanks!" CreationDate="2019-06-03T23:08:08.983" UserId="294" />
  <row Id="15155" PostId="5742" Score="0" Text="If Prof Havill is still chair of your department, ask him. He is a member and subscribed to the list." CreationDate="2019-06-04T00:08:55.977" UserId="1293" />
  <row Id="15156" PostId="5742" Score="0" Text="I'm trying to maintain my anonymity and also not give information without permission. A bit delicate. And I think pedagogical research would be a good possibility." CreationDate="2019-06-04T00:14:49.677" UserId="1293" />
  <row Id="15160" PostId="5742" Score="0" Text="He's on sabbatical. I think Tom Bressoud is a SIGCSE member too." CreationDate="2019-06-04T01:50:47.963" UserId="294" />
  <row Id="15161" PostId="5742" Score="0" Text="Actually, if you are teaching CS you should consider joining [SIGCSE](http://sigcse.org/sigcse/membership/join). It is very inexpensive and doesn't require also joining ACM, the parent organization." CreationDate="2019-06-04T12:43:28.507" UserId="1293" />
  <row Id="15162" PostId="5742" Score="0" Text="Actually, I think my department got me an ACM membership. I didn't realize SIGCSE was part of ACM. Thanks!" CreationDate="2019-06-04T15:18:26.437" UserId="294" />
  <row Id="15164" PostId="5742" Score="0" Text="You do need to join SIGCSE separately, of course, But cheap." CreationDate="2019-06-04T15:34:16.993" UserId="1293" />
  <row Id="15158" PostId="5743" Score="0" Text="You have to specify whether you want minimal average wait times, minimal maximum wait times, or minimum overall time to process. They may all net you slightly different results." CreationDate="2019-06-04T01:17:19.600" UserId="27" />
  <row Id="15159" PostId="5743" Score="0" Text="@BenI. True. I think that's good fodder for classroom discussion. :p" CreationDate="2019-06-04T01:20:48.357" UserId="2068" />
  <row Id="15170" PostId="5744" Score="0" Text="Hi Manoov, welcome to [cseducators.se]! This is currently a stub answer.  Could you edit the answer to add more information?  You will not find much in the way of upvotes for one-sentence responses." CreationDate="2019-06-06T17:15:49.330" UserId="27" />
  <row Id="15183" PostId="5744" Score="1" Text="Added reference to more clarity." CreationDate="2019-06-10T18:41:14.593" UserId="8120" />
  <row Id="15168" PostId="5746" Score="0" Text="I just added the detail to the question." CreationDate="2019-06-06T15:54:19.783" UserId="4689" />
  <row Id="15171" PostId="5746" Score="1" Text="you might want to change the title to indicate you are talking about researching software development questions, not general research" CreationDate="2019-06-06T17:23:28.080" UserId="283" />
  <row Id="15175" PostId="5748" Score="4" Text="For an explanation of terms, if you aren't from UK, see: https://cseducators.meta.stackexchange.com/a/218/1293" CreationDate="2019-06-09T14:20:12.703" UserId="1293" />
  <row Id="15186" PostId="5752" Score="2" Text="Welcome to [cseducators.se]. I hope we hear much more from you in the future!" CreationDate="2019-06-11T02:14:53.820" UserId="27" />
  <row Id="15189" PostId="5753" Score="1" Text="Nice! I'll try to remember all this the next time when/if  get to teaching her. :)" CreationDate="2019-06-11T07:22:27.250" UserId="6155" />
  <row Id="15188" PostId="5754" Score="0" Text="I think it might. Thanks! :)" CreationDate="2019-06-11T07:16:21.357" UserId="6155" />
  <row Id="15187" PostId="5755" Score="1" Text="I like the idea, and I'm sure that there are lots of good choices coming from Hollywood. Unfortunately, it's more of a poll, or listing, question, and has no &quot;right&quot; answer. Therefore, I'm suggesting that the question be closed. It's possible there may be some good discussion to be had in [The Classroom](https://chat.stackexchange.com/rooms/59174/the-classroom), the sites dedicated chat room." CreationDate="2019-06-11T06:47:07.723" UserId="104" />
  <row Id="15190" PostId="5755" Score="3" Text="What age level? What educational level?" CreationDate="2019-06-11T10:26:38.950" UserId="1293" />
  <row Id="15232" PostId="5755" Score="2" Text="@GypsySpellweaver - I'd like to make a counter argument. Ideas for teaching strategies can often be seen as a poll or listing - but that is the nature of teaching, different classes and teachers will need different strategies to communicate the lesson. I think a collection of movies that address CS content along with commentary on what the content is and how to approach it seems appropriate and useful." CreationDate="2019-06-17T20:04:53.917" UserId="134" />
  <row Id="15192" PostId="5757" Score="3" Text="I question the concept, actually. Being able to write &quot;hello world&quot; in 25 different languages isn't really anything at all. You seem focused on programming rather than CS, which is fine at the level, given the time, but programming is about creating abstractions of one form or another. In some languages it is only possible to create a very few kinds of abstraction (C - function abstraction). In other languages more is possible. But Java and Python, while rich, have about the same ability. And the difference, at the abstraction level, between C++ and Java is extremely subtle. Teach abstraction." CreationDate="2019-06-12T12:03:48.360" UserId="1293" />
  <row Id="15193" PostId="5757" Score="0" Text="@Buffy quite true. I should remove &quot;CS&quot; from the question. It's more a &quot;how to interest them in learning programming&quot; question... They are smart kids, and inquisitive. Some will definitely want to learn CS in the future, if I can get them interested in programming." CreationDate="2019-06-12T12:06:06.603" UserId="150" />
  <row Id="15194" PostId="5757" Score="0" Text="If your scale is small (say 10 or fewer) you could just create an agile programming &quot;firm&quot; and build something fun in a language like Java or Python. You are the customer, feeding into the product backlog. They do one day sprints. You get to set the difficulty of each task, increasing them as the students learn more. They learn enough of the language to carry out the current task. They work together (pairing) teaching one another, etc. If the &quot;day&quot; (sprint) ends at 15:00 you have time for retrospectives or even giving them &quot;goodies&quot;: interesting facts about CS or other languages or ..." CreationDate="2019-06-12T12:16:49.070" UserId="1293" />
  <row Id="15195" PostId="5757" Score="0" Text="As for the &quot;something fun&quot; part, I've had some success with building a computerized version of some physical board game. Students have an obvious metaphor to guide what they are doing. And such a project can be treated as a &quot;success&quot; even if little is actually built." CreationDate="2019-06-12T12:28:30.680" UserId="1293" />
  <row Id="15196" PostId="5757" Score="0" Text="&quot;Interest them in learning programming&quot; is a very vague outcome.  Perhaps a better outcome may be to have them able to encode some trivial algorithm in a programming language.  Even building simple sort algorithms is non-trivial when you get into questions of character sets etc." CreationDate="2019-06-12T14:08:22.373" UserId="4689" />
  <row Id="15197" PostId="5757" Score="2" Text="By the way, if you're going to show students OOP for God's sake don't show them C++ or Java!  Those two are among the _worst_ implementations of OOP that I can name." CreationDate="2019-06-12T14:09:39.243" UserId="4689" />
  <row Id="15198" PostId="5757" Score="0" Text="@OnorioCatenacci, a strong opinion about Java. I have an equally strong, but opposite opinion. It is quite a good vehicle if used correctly." CreationDate="2019-06-12T17:13:07.760" UserId="1293" />
  <row Id="15200" PostId="5757" Score="0" Text="@Buffy, that's not exactly _my_ opinion of Java.   I feel confident in saying that probably Alan Kay (the gent who actually invented OOP) would agree with my statement. See [here](https://ivanovivan.wordpress.com/2010/09/13/alan-kay-quotes/) for more details but this is the money quote: *and actually I made up the term object-oriented, and I can tell you I did not have C++ in mind.*  Java is in a lot of ways just C++ with manual memory management removed.  It's certainly not the message-passing, late-binding that Kay envisioned." CreationDate="2019-06-12T20:09:45.493" UserId="4689" />
  <row Id="15201" PostId="5757" Score="1" Text="@OnorioCatenacci, Yes, I can believe Kay talking about C++ that way, but note that Stroustrup doesn't take Smalltalk as a predecessor of C++, but Simula instead, which predates Smalltalk and has a different model. You are misrepresenting Java rather badly. It does have a Smalltalk-like object model. It does have both message passing and late binding, though not everything is an object. For primitive data it is like C (more or less). Perhaps you confuse late binding and static type checking. They are not the same." CreationDate="2019-06-12T20:14:04.320" UserId="1293" />
  <row Id="15202" PostId="5757" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/94825/discussion-between-onorio-catenacci-and-buffy)." CreationDate="2019-06-12T20:19:23.837" UserId="4689" />
  <row Id="15204" PostId="5757" Score="0" Text="Have you seed this very important video? https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve?language=en" CreationDate="2019-06-13T08:46:03.727" UserId="204" />
  <row Id="15206" PostId="5757" Score="2" Text="Do you hate them?: C — nice and small (lisp is smaller), but archaic low-level; Java — to much boiler plate; Javascript — to many dark corners, and sharp edges; C++ — how many years did you say you have; python — acceptable, until we find something better." CreationDate="2019-06-13T08:53:27.170" UserId="204" />
  <row Id="15207" PostId="5759" Score="0" Text="Hm... I hadn't thought about Unity." CreationDate="2019-06-13T09:57:53.797" UserId="150" />
  <row Id="15217" PostId="5759" Score="0" Text="I think C#/Unity is a good place to start.  Another good place to start would be Scratch.  Yes it something that people usually think of as being only for very young folks but there's depth there and it could be a great learning exercise." CreationDate="2019-06-14T13:53:20.717" UserId="4689" />
  <row Id="15216" PostId="5760" Score="1" Text="Except for auto grading, why do you need a special app? Having two windows (from different apps) open at the same time doesn't seem much worse than two panes of a single window. Do you have so many students that auto grading is a &quot;must have&quot;?" CreationDate="2019-06-14T11:27:21.993" UserId="1293" />
  <row Id="15218" PostId="5760" Score="0" Text="Have you explored the possibility of Jupyter Notebooks?  They support shell scripts using the `%%bash` header." CreationDate="2019-06-14T14:08:28.233" UserId="8145" />
  <row Id="15219" PostId="5760" Score="0" Text="This is an opinion-based question I think, but...one way of learning is to just provide SSH access with a user/password to each student on a Linux machine. This would allow them to explore the system more and to see real feedback. To demonstrate different commands you could simply devise bash scripts and plain text templates for students to copy and work on. The workbook can just be a text document. Keep it simple, students will appreciate it (especially since in the real world, you don't get fancy docs usually ;))" CreationDate="2019-06-14T20:40:55.013" UserDisplayName="user8146" />
  <row Id="15414" PostId="5760" Score="0" Text="The Unix shell is rather limited, as it is more a vehicle for calling complex programs and combining snippets. Is it really worth their while to learn shell in enough depth that this is required? I picked up what I need for my day-to-day use through, well, use; and occasionally peeking at the manual (or doing experiments on line...)." CreationDate="2019-08-08T21:16:56.237" UserId="5219" />
  <row Id="15220" PostId="5763" Score="2" Text="can we make this a wiki answer to build up the list?" CreationDate="2019-06-14T20:41:18.713" UserDisplayName="user8146" />
  <row Id="15223" PostId="5763" Score="2" Text="Can we say something about each movie." CreationDate="2019-06-16T13:35:33.243" UserId="204" />
  <row Id="15229" PostId="5763" Score="1" Text="@RudolfOlah fwiw, community wiki is kind of mostly deprecated. (Yes, I know that was an ungrammatical level of qualifiers.)" CreationDate="2019-06-17T19:02:57.957" UserId="919" />
  <row Id="15230" PostId="5763" Score="0" Text="@heather ah ok, didn't realize that! thx!" CreationDate="2019-06-17T19:08:03.043" UserDisplayName="user8146" />
  <row Id="15231" PostId="5763" Score="0" Text="@RudolfOlah no problem =)" CreationDate="2019-06-17T19:24:06.750" UserId="919" />
  <row Id="15233" PostId="5763" Score="0" Text="If not the community wiki, could we have one &quot;canonical&quot; post that accumulates the movies?" CreationDate="2019-06-17T20:22:41.313" UserId="134" />
  <row Id="15251" PostId="5763" Score="0" Text="It is OK to have lots of answers. I would expect a few for this type of question, unfortunately it is incompatible with the ✓interface, but still the question is good, and so the the answers. I will upvote good answers (not based on what films, but based on explanations). I make my answer a wiki, so as to encourage more suggestions." CreationDate="2019-06-25T14:49:52.977" UserId="204" />
  <row Id="15253" PostId="5763" Score="0" Text="Thanks for creating the links @dlu!" CreationDate="2019-06-26T10:03:42.080" UserId="2727" />
  <row Id="15247" PostId="5768" Score="1" Text="Thanks fior the link! Great stuff." CreationDate="2019-06-19T16:53:07.030" UserId="4301" />
  <row Id="15246" PostId="5769" Score="0" Text="Thanks for the links! Spent hours looking at the sites and lots of great ideas." CreationDate="2019-06-19T16:51:38.303" UserId="4301" />
  <row Id="15241" PostId="5772" Score="0" 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." CreationDate="2019-06-19T07:18:50.400" UserId="204" />
  <row Id="15243" PostId="5772" Score="1" 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)." CreationDate="2019-06-19T11:26:42.933" UserId="8156" />
  <row Id="15245" PostId="5772" Score="0" Text="@BrianTompsett-汤莱恩 Fixed!  And thank you.  Somehow, only the last one confused me, so I didn't even notice the others." CreationDate="2019-06-19T14:47:29.910" UserId="27" />
  <row Id="15249" PostId="5774" Score="1" Text="@BenI. Or exceptional work (no matter the brilliance of the student). See Dweck." CreationDate="2019-06-23T13:49:16.967" UserId="204" />
  <row Id="15259" PostId="5775" Score="0" Text="Welcome to Computer Science Educators! Thanks for your answer =)" CreationDate="2019-06-30T02:16:19.750" UserId="919" />
  <row Id="15255" PostId="5777" Score="0" Text="Keep it simple: intellisense and the equivalent in Eclipse, push my students in the wrong direction, a lot of their mistakes are because the tool told them to. e.g.It does not promote test-driven / test-first." CreationDate="2019-06-27T14:51:17.100" UserId="204" />
  <row Id="15289" PostId="5777" Score="1" Text="I do like Thonny. Simple debugging, and your audience has some experience. I like how Thonny opens up a new window for a function when you step into it." CreationDate="2019-07-09T02:13:42.723" UserId="695" />
  <row Id="16805" PostId="5778" Score="0" Text="Is this a myth &quot;it took a long time to lean eclipse, therefore I won't learn a simpler one.&quot; However if the IDE is simple then it is quicker to learn 3 of them, than to learn one. Yes, you won't get that accumulation of knowledge. So may be switch to a more powerful one the 2nd time. I used to use `emacs` for the same reason (I can use it for all languages, operating system, and times that I have visited (1991 to 2020 so far). I now mostly program with `sed` ☺." CreationDate="2020-08-11T22:24:53.787" UserId="204" />
  <row Id="15688" PostId="5780" Score="0" Text="Regarding the last paragraph: wouldn't it be better to raise general awareness and have a few lessons about common error messages and hints than prohibiting students to use tools that are used almost everywhere in real life? Of course you have to try to change the trained mindset of your students, but they will benefit from this their whole life!" CreationDate="2019-10-12T00:46:55.753" UserId="8354" />
  <row Id="15690" PostId="5780" Score="0" Text="I'm okay with it highlighting error messages. That's not what I'm talking about here. It's when NetBeans suggests another way of writing a loop or condition, or something else. But it's usually a loop or condition. Usually, when it does that the suggestion is out of scope for the course I'm teaching or whatever it suggests confuses the student. Sometimes it's something we just haven't gotten to yet. They go with it because it works, but have no clue why." CreationDate="2019-10-12T18:24:08.920" UserId="30" />
  <row Id="15691" PostId="5780" Score="0" Text="&quot;They go with it because it works, but have no clue why.&quot; Nobody should EVER do this when learning to code. Maybe you'll have to stress this a bit more. Or let the students explain their submitted code, if the size of your class allows it." CreationDate="2019-10-12T18:59:50.627" UserId="8354" />
  <row Id="15692" PostId="5780" Score="0" Text="Agreed. That's why I prefer to not use an IDE that drops hints with my intro students whenever possible. I want to see their solution, not the editor's solution." CreationDate="2019-10-13T02:22:58.633" UserId="30" />
  <row Id="15256" PostId="5784" Score="0" Text="Sorry, but you seem to be asking how to set up an _educational_ program for only those who don't need it." CreationDate="2019-06-29T09:47:04.517" UserId="1293" />
  <row Id="15257" PostId="5784" Score="0" Text="@Buffy Sorry, I should have been more clear. This program **already exists** and has been running for several years. I'm not asking how to set up the program, I'm asking how to decide *who participates* if we switch to open enrollment instead of being invite-only, which is what we've been doing so far." CreationDate="2019-06-29T16:02:52.700" UserId="2068" />
  <row Id="15258" PostId="5785" Score="0" Text="Thanks for this reply, you've given me a lot to think about. I should have been more clear in my question: this program **already exists** and has been running for several years. I'm happy to say that we already include a lot of what you mentioned (real-time communication, a GitHub repo for each team, etc). What we **don't** have yet is the &quot;form or pre-screening, and/or qualification process&quot; you mentioned in your first paragraph. And we're talking about a couple *thousand* applicants, not a few dozen. But a lot of what you said makes sense, and I appreciate it." CreationDate="2019-06-29T16:23:46.113" UserId="2068" />
  <row Id="15260" PostId="5787" Score="10" Text="This is a symptom of a failure in earlier education... an university student *ought to* know how to abstract ideas. Whatever choice you take you are probably still going to have troubles with these students. I don't think simply using both as @Art says would help them... you probably need to show them both *and also* the translation between the two... basically teach them the concretization of an algorithm from pseudo code to implementation code and abstraction of an algorithm from implementation code to pseudo code." CreationDate="2019-05-16T11:04:34.093" UserDisplayName="Giacomo Alzetta" />
  <row Id="15261" PostId="5787" Score="3" Text="&quot;What has been your experience when using pseudocode vs using code?&quot; -- this is going to get you a list of singular opinions. I recommend you ask for solid evidence instead, e.g. in the form of scientific studies." CreationDate="2019-05-16T21:19:51.253" UserId="842" />
  <row Id="15262" PostId="5787" Score="3" Text="You don't say what your _teaching goals_ are beyond the topic of the course. Those will heavily influence any didactic choice, and may just make the difference here. The background and focus of your students is also relevant, as is the form of exam you're going to hold. Say, some students know Java, others Python, and some C++. How fair is an exam requiring Java skills? How do Java skills reflect on their data structure expertise?" CreationDate="2019-05-16T21:22:41.567" UserId="842" />
  <row Id="15263" PostId="5787" Score="2" Text="I think the problem is deeper than Java code *vs*. pseudocode.  It seems likely to me that if you taught with pseudocode instead then the same students who complained that they could not memorize Java code would be prone to complaining that they could not memorize pseudocode.  How about this radical idea: use *words* (and then code).  Prose will be more inherently meaningful to inexperienced programmers.  Also, put more emphasis on the definition of the term &quot;algorithm&quot;.  Quiz your students on it, even.  And quiz them early and often on prose descriptions of algorithms." CreationDate="2019-05-17T20:16:21.783" UserDisplayName="John Bollinger" />
  <row Id="15264" PostId="5787" Score="0" Text="The question doesn't provide information about the students taking this course. Would this be the first or a very early course for this curriculum at the college? If part of the course is for students to develop their own algorithms, or to modify algorithms, pseudo code doesn't prove a means to verify the algorithms will work." CreationDate="2019-05-25T06:00:54.253" UserDisplayName="rcgldr" />
  <row Id="15265" PostId="5787" Score="0" Text="@Raphael Since this question has been closed here, may I recommend migration to [cseducators.se]?  It would certainly be welcome there." CreationDate="2019-07-02T18:25:54.920" UserId="27" />
  <row Id="15277" PostId="5787" Score="0" Text="Do you have a standard textbook for the course? Generally I'd recommend following the path of the text; they've probably thought about the issues much longer than you have, tested it, provided resources in that form, etc." CreationDate="2019-07-03T15:48:55.077" UserId="8137" />
  <row Id="15266" PostId="5788" Score="0" Text="Something like &quot;you need to put an egg into the flour mixture&quot; isn't &quot;pseudocode.&quot; At best, it's a rather vague &quot;user story,&quot; in agile-speak. &quot;Pick up an egg&quot; is pseudo-code. The commands you send to your robot chef to achieve that objective is the *actual* code!" CreationDate="2019-05-17T11:51:22.827" UserId="1352" />
  <row Id="15267" PostId="5788" Score="4" Text="@DavidRicherby Most people in an algorithms course intend to actually write code for a living. There is no reason to deprive them of experience converting problem descriptions to actual code. The skill of making that translation is *fundamental* to being able to do much of anything useful in computing." CreationDate="2019-05-17T01:06:18.147" UserId="981" />
  <row Id="15268" PostId="5788" Score="7" Text="@MSalters There are multiple skills, and it's usually not a good idea to try to cover too many of them at once. In an algorithms course, the focus is on algorithms, not coding; in a creative writing course, the focus is on expression, not handwriting; etc." CreationDate="2019-05-16T15:59:01.940" UserDisplayName="David Richerby" />
  <row Id="15269" PostId="5788" Score="7" Text="Depends on which &quot;skill&quot; you wanna have the students practice I guess. I'd imagine that these students preparing to become a programmer would have other project courses to practice on coding already." CreationDate="2019-05-16T13:00:33.040" UserDisplayName="Art" />
  <row Id="15270" PostId="5788" Score="14" Text="@DavidRicherby: Isn't your example proving the exact opposite, that actual code is useful for teaching actual skills? In pseudo-code, it's easy to ignore edge cases like the empty collection and the collection with one element." CreationDate="2019-05-16T12:49:09.097" UserDisplayName="MSalters" />
  <row Id="15271" PostId="5788" Score="39" Text="Don't crack the egg on the side of the bowl: that risks getting shell in your batter, which is a pain to get out again. And this is exactly why actual code is bad for teaching -- arguments about irrelevant details take over." CreationDate="2019-05-16T08:57:02.677" UserDisplayName="David Richerby" />
  <row Id="15272" PostId="5789" Score="0" Text="“When you present your code in a particular language you are making them comfortable with that language alone” This can be an advantage if the students are currently learning the same language. Just don’t confuse them with features they haven’t used yet." CreationDate="2019-05-16T11:39:44.447" UserDisplayName="Michael" />
  <row Id="15273" PostId="5790" Score="0" Text="Not just pictures, but more like [`ideograms`](https://en.wikipedia.org/wiki/Ideogram)." CreationDate="2019-05-17T15:10:28.057" UserId="1881" />
  <row Id="15274" PostId="5794" Score="6" Text="And perhaps even more importantly, don't go about the entire course shoving **one** arbitrarily-chosen programming language down students' throats; specially not Java. That's very off-putting. I've seen complaints about this all too often." CreationDate="2019-05-16T23:54:59.250" UserId="1206" />
  <row Id="15275" PostId="5794" Score="1" Text="The algorithms course I'm taking right now is exactly what you are talking about. The prof explains algorithms in class and we can choose the Python, Java and C++ to implement them as homework :) I can confirm that this is a great idea :)" CreationDate="2019-05-17T22:03:23.113" UserDisplayName="Rakete1111" />
  <row Id="15276" PostId="5794" Score="3" Text="Implementation from pseudo-code is one of the more long term useful skills. Outside an academic algorithm design course, I have rarely needed to create an algorithm from scratch. I have often needed to look one up in various references, and implement it in whatever language I'm currently using." CreationDate="2019-05-19T03:46:45.863" UserId="6558" />
  <row Id="15379" PostId="5796" Score="1" Text="&quot;He used pseudo code of his choosing, [...] then he had a heart attack&quot;. Correlation vs. causality ?" CreationDate="2019-07-24T11:38:15.997" UserId="2103" />
  <row Id="15411" PostId="5796" Score="0" Text="Even pseudocode can carry viruses, apparently." CreationDate="2019-08-07T23:35:16.870" UserId="5349" />
  <row Id="15454" PostId="5796" Score="0" Text="Was the pseudocode syntax more convoluted than Pascal?" CreationDate="2019-08-21T02:07:26.130" UserId="5994" />
  <row Id="15283" PostId="5797" Score="4" Text="Pedantry FTW!  I've been &quot;doing&quot; computers for almost forty years (got my CS degree 34 years ago) and **never** heard them called vectors and matrices.  Of course, I've **used them as** vectors and matrices when having to program mathematical functions like matrix manipulation.  In that case, though, I'd &quot;load the matrix into a 2D array&quot;." CreationDate="2019-07-05T02:25:16.777" UserId="3132" />
  <row Id="15285" PostId="5797" Score="0" Text="@RonJohn I think like you! Tks!" CreationDate="2019-07-05T13:55:08.900" UserId="8199" />
  <row Id="15286" PostId="5797" Score="1" Text="Just to be a tad pedantic myself (and maybe give you another way to think about it)..  Doesn't a mathematician call a bunch of scribbled numbers with brackets around them a vector?  It's just a list of numbers--it cannot be added, multiplied or operated upon without some external routines that are currently in your head.  Couldn't the same thing be said of an array?  It has the same properties of that thing you put on paper--a list of numbers with the potential to be operated upon.  You can totally add two vectors in a computer--just supply the subroutine." CreationDate="2019-07-05T17:58:57.953" UserId="1399" />
  <row Id="15287" PostId="5797" Score="0" Text="Welcome to CS Educators Stack Exchange! I hope we see more of you." CreationDate="2019-07-07T14:20:47.977" UserId="283" />
  <row Id="15288" PostId="5797" Score="0" Text="_&quot;vectors and matrices are mathematical entities that can be added, multiplied and so on, while arrays and multidimensional arrays can't&quot;_ while this may have some theoretical support, the practice is entirely different with hugely popular libraries for sciences like [numpy bringing up arrays as  mathematical vectors](https://www.learnpython.org/en/Numpy_Arrays). If students come out of your class with this rigid definition, they will be very confused." CreationDate="2019-07-08T12:00:44.560" UserId="6794" />
  <row Id="15282" PostId="5801" Score="0" Text="Thanks! My confusion was introduced by one of my professors during my undergraduate course. He was a mathematician working with computer science. Maybe this was the reason. I will correct it now, thank you!" CreationDate="2019-07-05T00:57:45.033" UserId="8199" />
  <row Id="15290" PostId="5804" Score="3" Text="You may want to look at [this related question](https://cseducators.stackexchange.com/q/93/58) or [this one](https://cseducators.stackexchange.com/q/733/58)." CreationDate="2019-07-09T02:15:28.270" UserId="58" />
  <row Id="15303" PostId="5804" Score="0" Text="I like python turtle." CreationDate="2019-07-14T17:45:33.247" UserId="204" />
  <row Id="15302" PostId="5806" Score="1" Text="Java is a dreadful teaching language (not the worse). It has many problems, including keywords that have to be used before you can teach what they do “`public static void main …`” It also discourages object orientation “`static …main`”. I can't remember all of the other problem, but there are many. I have been teaching a student one-to-one, and I see many problems, because of the language. The last problem was trying to teach interfaces (Java and OO meaning don't match)." CreationDate="2019-07-14T17:44:40.403" UserId="204" />
  <row Id="15304" PostId="5806" Score="0" Text="Your opinion is not widely shared. Java is used in APCS and in many, many beginning collegiate courses. Also, see: https://cseducators.stackexchange.com/a/4718/1293" CreationDate="2019-07-14T18:10:05.500" UserId="1293" />
  <row Id="15305" PostId="5806" Score="1" Text="I 100% agree. However I suspect that it is the answer to “What language is popular in industry?”, or “What language do our instructors know?” and not “What is the best teaching language?”" CreationDate="2019-07-15T08:36:30.697" UserId="204" />
  <row Id="16223" PostId="5806" Score="0" Text="You don't actually have to use `public`, `static` or `void` without explaining them first to teach Java. As just one way to avoid it, [BlueJ](https://en.wikipedia.org/wiki/BlueJ) has been free and open source since 2009, and you can use the GUI to create an object and run a method named `main` (or anything else) without making it a proper program entry point. More recently, Java since version 9 comes with the [JShell](https://en.wikipedia.org/wiki/JShell) REPL which can be used in a similar way, though it has no GUI. I have taught Java as a first language, and left `main` until *last*." CreationDate="2020-02-26T14:37:34.273" UserId="8562" />
  <row Id="16529" PostId="5806" Score="0" Text="@Buffy The question's title was edited such that the meaning was entirely changed. Is that kosher?" CreationDate="2020-05-28T22:15:56.630" UserId="5054" />
  <row Id="16530" PostId="5806" Score="0" Text="@ADJenks, not especially, but others can edit or the OP can reject the change. And it now matches the body of the question better than previously." CreationDate="2020-05-28T22:22:43.330" UserId="1293" />
  <row Id="15294" PostId="5808" Score="0" Text="What ages do you teach, out of curiosity?" CreationDate="2019-07-09T15:38:54.900" UserId="27" />
  <row Id="15295" PostId="5808" Score="0" Text="9-12.  Raw beginners to computer geeks that program for fun." CreationDate="2019-07-10T15:02:23.770" UserId="2476" />
  <row Id="15301" PostId="5811" Score="1" Text="Hello and welcome to [cseducators.se]. Would you mind [edit]ing to add some reasons why you think that those languages are good for this task?" CreationDate="2019-07-13T11:45:37.050" UserId="58" />
  <row Id="15336" PostId="5816" Score="1" Text="Honest answer: the best way to learn to implement an algorithm or data structure quickly is to make sure you can quickly pull up the Wikipedia page on each!  Or, if you want to get straight to the punch, google [stack exchange](https://xkcd.com/1185/) for it.  (be sure to read the alt text)" CreationDate="2019-07-19T20:11:42.533" UserId="812" />
  <row Id="15349" PostId="5816" Score="0" Text="@CortAmmon Sir, what do you mean by alt text? You mean the standard books?" CreationDate="2019-07-20T06:26:20.560" UserId="8233" />
  <row Id="15350" PostId="5816" Score="0" Text="Alt text is the text which appears when you hover over an image..  The linked XKCD has some relevant text.  (It's called &quot;alt text&quot; because in HTML, you specify it with the &quot;alt&quot; attribute)" CreationDate="2019-07-20T06:33:57.980" UserId="812" />
  <row Id="15323" PostId="5820" Score="16" Text="This has nothing to do with KISS and is simply part of the Unix philosophy. Sane modern command line environments make it very easy to support both - use the argument if provided and ask the user for it if a mandatory parameter isn't given." CreationDate="2019-07-19T09:11:32.550" UserId="819" />
  <row Id="15355" PostId="5820" Score="2" Text="(not a pedagogical answer) The 2nd program is easier to use by a naive user." CreationDate="2019-07-20T15:24:02.940" UserId="204" />
  <row Id="15366" PostId="5820" Score="0" Text="Are you teaching C as their first programming language?" CreationDate="2019-07-21T16:54:40.957" UserId="660" />
  <row Id="15367" PostId="5820" Score="2" Text="Writing interactive programs (where user input depends on the output) doesn't work with command line arguments." CreationDate="2019-07-21T16:55:59.227" UserId="660" />
  <row Id="15368" PostId="5820" Score="0" Text="@Bergi Yes, first year at an engineer school" CreationDate="2019-07-21T16:56:07.733" UserId="6890" />
  <row Id="15361" PostId="5821" Score="0" Text="You make an interesting point about validating input.  But I don't think falling back to prompting makes any sense for a simple toy program.  `if(argc &lt; 4){ puts(USAGE); return 1;}` near the top of main.  Maybe with a specific message like &quot;too few args&quot; as well as the usage string." CreationDate="2019-07-21T05:07:39.717" UserId="1654" />
  <row Id="15362" PostId="5821" Score="0" Text="When it comes to parsing each arg in turn, handling errors is maybe more problematic (like a string where there should be an integer).  Prompting 1 at a time with scanf gives a different debugging experience.  One bad input can block the rest of the inputs if you don't do error checking and remove the bad token from stdin.  But a failed `atoi()` or `strtoul` just produces zero.  There's something interesting to be said there about the difference in how you validate input and report errors, and the debugging experience for total beginners." CreationDate="2019-07-21T05:12:56.207" UserId="1654" />
  <row Id="15363" PostId="5821" Score="0" Text="`atoi` is probably easier: a debugger can find that it's returning zero, and/or that you're calling it on the wrong string.  But a debugger generally can't observe the stdin I/O buffer to find out why some combo of input + format string is making all the later `scanf` calls fail.  (Same applies to debug-printf statements for people that haven't yet learned to use a debugger.)" CreationDate="2019-07-21T05:15:13.227" UserId="1654" />
  <row Id="15314" PostId="5822" Score="7" Text="I like the `incantation` term you use." CreationDate="2019-07-18T17:21:27.820" UserId="6890" />
  <row Id="15315" PostId="5822" Score="0" Text="Can't you still talk about stdin/stdout/stderr without using the argv array? I believe that scanf still just reads from stdin, so you can easily store stdin to a variable." CreationDate="2019-07-18T20:24:20.843" UserId="58" />
  <row Id="15320" PostId="5822" Score="1" Text="@thesecretmaster: That's what Ben is saying. The OP is asking why you don't teach about argv and Ben's answer is argv is an array so it's better to focus on stdin first" CreationDate="2019-07-19T04:45:09.517" UserId="5450" />
  <row Id="15326" PostId="5822" Score="0" Text="I'ts because we didn't have it in Basic." CreationDate="2019-07-19T13:49:32.973" UserId="2103" />
  <row Id="15331" PostId="5822" Score="2" Text="You'd also have to explain the failure modes with missing arguments." CreationDate="2019-07-19T14:47:28.400" UserId="3138" />
  <row Id="15356" PostId="5822" Score="0" Text="I don't even thing that `args[0]` etc is that magical. You can give it any name you want in some languages (C, C++, java, …). They don't even need to know that it is an array. And as you say, when they start arrays, they will already know ½ of it. This may be a good example of learn to read, before you learn to write. (not the learn to read code, before you learn to write code interpretation. I think both interpretation are correct.)" CreationDate="2019-07-20T15:28:40.873" UserId="204" />
  <row Id="15357" PostId="5822" Score="0" Text="Having to process args in main, as another thing forcing the C++, Java, … learner away from OO. Is there another way?" CreationDate="2019-07-20T15:33:19.353" UserId="204" />
  <row Id="15316" PostId="5823" Score="8" Text="Do you have a citation for your Pascal factoid? I don't remember that one." CreationDate="2019-07-19T00:17:56.793" UserId="1293" />
  <row Id="15346" PostId="5823" Score="0" Text="good question @Buffy. It was something I was taught in '86, as having been the case but no longer was, but I took that as truth without asking for proof." CreationDate="2019-07-19T23:07:36.120" UserId="8237" />
  <row Id="15358" PostId="5823" Score="0" Text="Wasn't it something with some implementations, like: the first reads on input return the command line, unless a write is issued on output ?" CreationDate="2019-07-20T17:26:45.447" UserId="2103" />
  <row Id="15359" PostId="5823" Score="1" Text="Source of a Standard Pascal compiler here : https://sourceforge.net/projects/pascalp5/" CreationDate="2019-07-20T17:48:10.833" UserId="2103" />
  <row Id="15354" PostId="5824" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/96423/discussion-on-answer-by-r-why-teach-c-using-scanf-without-talking-about-comman)." CreationDate="2019-07-20T12:31:46.787" UserId="58" />
  <row Id="15360" PostId="5824" Score="2" Text="Now that this question has pointed it out, the same thing is obviously true in assembly language.  So many Q&amp;As about reading string inputs into buffers and so much code clutter from printing prompts first.  (Although we'd still get lots of asm questions about converting strings to integers, especially multi-digit strings.)" CreationDate="2019-07-21T05:00:46.477" UserId="1654" />
  <row Id="15364" PostId="5824" Score="1" Text="@PeterCordes: Absolutely. And it's even worse if you don't have subroutines yet, and rather misleading if you use bios/syscalls in place of subroutines. I'd hesitate to each asm as a standalone language at all, preferring to teach it first with &quot;call from C&quot; being the way it's invoked." CreationDate="2019-07-21T06:06:16.827" UserId="1327" />
  <row Id="15365" PostId="5824" Score="0" Text="The MARS  MIPS simulator keeps things somewhat clean by providing &quot;syscall&quot; implementations of read integer from user-input, and of print decimal, print hex, etc.  It's very much a toy system. I think it makes command-line args accessible to modify between runs somehow, though.    For x86 Linux running natively, not in a toy simulator, probably teaching calling conventions as part of the boilerplate for running asm by calling from C would work. But it does introduce more moving parts. I can certainly see why courses don't do that, at least if they try to do asm before student's really grasp C." CreationDate="2019-07-21T06:46:13.810" UserId="1654" />
  <row Id="15332" PostId="5825" Score="1" Text="Could you elaborate on the unintuitive bit?  I'm always on the lookout for new cognitive traps that I haven't noticed before." CreationDate="2019-07-19T19:01:03.423" UserId="27" />
  <row Id="15335" PostId="5825" Score="3" Text="@BenI. I've found that some students learn the concept of functions before they grasp the idea of execution.  They can wade their way through the code and make sense of it in their head, but they can't see that the computer wades through it also, in real time.  I find the same people tend to assume that if they compile `if(x) f(); else g();`, that the compiler figures out which of those two branches will be taken, and only captures the instructions for that branch.  They get bothered if I construct examples where it's hard to know which branch will be taken (such as when there is input)" CreationDate="2019-07-19T20:01:37.550" UserId="812" />
  <row Id="15341" PostId="5825" Score="4" Text="Fascinating!  Could you add that into your answer?  It would make the answer more valuable." CreationDate="2019-07-19T21:19:29.283" UserId="27" />
  <row Id="15575" PostId="5825" Score="0" Text="As a teacher: mind blown. If your anecdote is correct, there must be some subset of students who don't grasp the concept that the code for both branches are in the executable, but one of them gets skipped over at runtime. Very interesting!" CreationDate="2019-09-17T20:07:16.150" UserId="6704" />
  <row Id="15370" PostId="5826" Score="5" Text="You will have to enlighten us on “boomerang”." CreationDate="2019-07-21T22:45:38.703" UserId="204" />
  <row Id="15371" PostId="5826" Score="3" Text="Divide and Conquer was originally a military term. You can look for example at the British conquest of India." CreationDate="2019-07-21T23:23:42.750" UserId="8266" />
  <row Id="15372" PostId="5826" Score="0" Text="Related: https://stackoverflow.com/questions/14415881/how-to-pair-socks-from-a-pile-efficiently" CreationDate="2019-07-22T01:01:01.870" UserId="2772" />
  <row Id="15373" PostId="5826" Score="3" Text="My teacher used the way we look for a word in a dictionary." CreationDate="2019-07-22T12:40:47.037" UserId="8271" />
  <row Id="15375" PostId="5826" Score="2" Text="My mother taught me binary search for finding words in a dictionary in the 1950's." CreationDate="2019-07-22T13:43:41.710" UserId="6558" />
  <row Id="15390" PostId="5826" Score="2" Text="@ctrl-alt-delor if I had to guess, OP is referring to the 'throw and it returns to you' boomerang, since OP is talking about a *loop back* address." CreationDate="2019-07-31T18:17:25.947" UserId="919" />
  <row Id="15392" PostId="5826" Score="0" Text="@heather. I don't see how that relates to divided and conquer. And it seems like a very bad analogy to loopback. With network loopback the packet does not leave (so has no need to come back). A better analogy to a loopback address is “home”." CreationDate="2019-07-31T23:25:05.537" UserId="204" />
  <row Id="15393" PostId="5826" Score="0" Text="@ctrl-alt-delor it doesn't relate to divide and conquer, I don't think - seems like OP is saying 'just like we use this real world example for this thing, what real world example can we use for divide and conquer?' I also can't really comment on the quality of the boomerang analogy; I was just trying to guess as to what the OP meant =)" CreationDate="2019-08-01T01:33:45.357" UserId="919" />
  <row Id="15487" PostId="5826" Score="0" Text="@PatriciaShanahan and Jimbot: You should expand your comment into an answer. To me, this seems to be the most obvious application of divide and conquer in real life, and everybody immediately understands the process. Another one might be guessing a number where you're just told whether your guess is too high or too low." CreationDate="2019-08-28T19:40:49.820" UserId="1336" />
  <row Id="15588" PostId="5826" Score="0" Text="A boomerang would be a good analogy for a ping, not for loopback!" CreationDate="2019-09-19T03:09:41.163" UserId="8354" />
  <row Id="15374" PostId="5829" Score="3" Text="+1 for the Hungarian dance example :)" CreationDate="2019-07-22T12:41:10.880" UserId="703" />
  <row Id="15410" PostId="5830" Score="1" Text="Your two pieces of pseudocode for solving a particular problem are an excellent example of how easy and instructive it is to compare algorithms. One requires half of n squared comparisons, the other 2 n comparisons in a linear scan of the array. Very nice." CreationDate="2019-08-07T23:34:14.920" UserId="5349" />
  <row Id="15420" PostId="5830" Score="1" Text="The first algorithm is a classical illustration of the &quot;design by keyword&quot; trap. &quot;2 elements&quot; =&gt; loop over all pairs." CreationDate="2019-08-09T15:09:28.030" UserId="2103" />
  <row Id="15423" PostId="5830" Score="1" Text="If I understand you - it is still early in the day - Anyone who sees &quot;loop over all pairs&quot; and does not immediately see a nested For loop (or equivalent) has never written a program. I didn't even think for one second about it as I read the pseudocode, and I saw that we only have to do the &quot;upper triangle&quot; because there is no point in both comparing x to y and also comparing y to x. But seeing that we only need to capture the max and min as we scan once was pleasant. This is why I find SQL so fascinating. Data is really amazing stuff. I despair of teaching these nuances." CreationDate="2019-08-10T13:11:48.673" UserId="5349" />
  <row Id="15429" PostId="5830" Score="0" Text="Blame the hour of the day. The &quot;triangle&quot; enumeration  is sort of a micro-optimization of the &quot;square&quot; (multiplicative factor 0.5 in a quadratic algorithm). The other solution is linear. Anyway the point was about the presentations of solutions, without showing all details." CreationDate="2019-08-11T16:06:32.813" UserId="2103" />
  <row Id="15389" PostId="5831" Score="0" Text="Hello, and welcome to Computer Science Educators SE! While your example is good, you may want to add some explanation of why your example appropriately addresses the question. Thanks!" CreationDate="2019-07-31T18:14:18.613" UserId="919" />
  <row Id="15380" PostId="5833" Score="0" Text="Yare yare daze.. .  What have I gotten myself into? LOL" CreationDate="2019-07-27T22:21:12.347" UserId="8288" />
  <row Id="15381" PostId="5834" Score="0" Text="You. . . Are going to make a magnificent father to a very smart child one day, Ben." CreationDate="2019-07-28T03:19:10.693" UserId="8288" />
  <row Id="15382" PostId="5835" Score="0" Text="No, I'm majoring in Computer Science, but our program is a joke. They send us over to the tech school for most of our classes and we end up doing VERY badly. . .Technically the students over there do badly too, but we all pass because of the curve." CreationDate="2019-07-29T16:57:54.153" UserId="8288" />
  <row Id="15383" PostId="5835" Score="0" Text="But I grok, you have a good point." CreationDate="2019-07-29T16:59:01.937" UserId="8288" />
  <row Id="15391" PostId="5836" Score="1" Text="Introducing neighbors to each other? Picking up stranded people in a disaster?" CreationDate="2019-07-31T22:13:48.200" UserId="283" />
  <row Id="15394" PostId="5840" Score="0" Text="Your first question is certainly topical, so no worries on that front. I'm willing to bet that there has been all of zero research addressing this question, so it will be interesting to see what people come up with." CreationDate="2019-08-01T16:16:06.470" UserId="27" />
  <row Id="15395" PostId="5840" Score="1" Text="I'm less sure about the second question. Also, could you do me a favor? Could you remove the second part, and put it in its own question? There should only be one question per question in general, and the two parts you've written are really quite distinct." CreationDate="2019-08-01T16:17:13.403" UserId="27" />
  <row Id="15396" PostId="5840" Score="0" Text="@BenI. There might not be any serious research relating to the CS field. There is, however, some research done on note taking for English classes. [Kiel Jacobs, 2008](https://drive.google.com/file/d/1-ti5HzlCMHleDnFsiU4fgPhWuYxFxjH_/view?usp=sharing)" CreationDate="2019-08-01T19:43:32.467" UserId="104" />
  <row Id="15397" PostId="5842" Score="2" Text="Welcome to CSE Stack Exchange. Great first answer!" CreationDate="2019-08-03T22:51:48.703" UserId="283" />
  <row Id="15418" PostId="5843" Score="0" Text="Can you tell us what is ADT?" CreationDate="2019-08-09T08:41:02.507" UserId="204" />
  <row Id="15419" PostId="5843" Score="0" Text="With your concept list, level 1 (general) is the hardest, to use and learn." CreationDate="2019-08-09T08:44:18.097" UserId="204" />
  <row Id="15421" PostId="5843" Score="0" Text="Abstract Data Type. My level based criteria was an example , to make the link with taxonomies in biology" CreationDate="2019-08-09T19:20:37.577" UserId="8306" />
  <row Id="15422" PostId="5843" Score="0" Text="I edited you question for you (you can also do this), to make it clearer (merge part of your comment into it)." CreationDate="2019-08-10T08:06:37.137" UserId="204" />
  <row Id="15404" PostId="5845" Score="0" Text="Thanks for the detailed answer : I've never asked for a takeaway solution ( in the ideal world, this could be language agnostic ^^ ) I find it strange that there is nothing, even for the most used languages (Python, Java, C, etc.)" CreationDate="2019-08-05T13:57:30.687" UserId="8306" />
  <row Id="15399" PostId="5846" Score="0" Text="I don't think there exists a standard type that matches that description, but there is no reason you can't follow your plan anyway with a customized name." CreationDate="2019-08-05T12:38:15.340" UserId="27" />
  <row Id="15400" PostId="5846" Score="0" Text="I'd be curious to hear why you're looking this ADT. How are you planning on using it in your class?" CreationDate="2019-08-05T13:11:16.830" UserId="58" />
  <row Id="15401" PostId="5846" Score="0" Text="i will use it because we will be implementing it many different ways: with list, ordered list, tree, dictionary. It is just a small callback to the fact that we have many solutions to the same problem, and also a way to drill the concept of ADT" CreationDate="2019-08-05T13:35:45.283" UserId="4251" />
  <row Id="15402" PostId="5846" Score="2" Text="&quot;The set ADT unfortunately supports more operations&quot; gives Wikipedia a lot of credence. I'm not confident that there is a canonical definition of &quot;*THE* set ADT&quot;. Yes, there are other things you can typically do with sets, but you don't have to introduce those operations." CreationDate="2019-08-05T13:48:52.287" UserId="8309" />
  <row Id="15403" PostId="5846" Score="1" Text="Yes, I am beginning to think (see bag bellow) that these ADTs have many definitions, and I can just call it &quot;set&quot; or &quot;bag&quot; and define it as I please" CreationDate="2019-08-05T13:51:27.033" UserId="4251" />
  <row Id="15405" PostId="5846" Score="2" Text="A set, by definition, cannot contain multiple copies of the same item. A multiset, or a &quot;bag&quot; (at least in my intuition) can. Can your data structures? That is an important difference that can confuse your students." CreationDate="2019-08-05T14:52:34.080" UserId="1658" />
  <row Id="15406" PostId="5846" Score="0" Text="Of course it depends on how you define &quot;insert&quot; and &quot;remove&quot; whether there is any difference between a set and a bag. In fact, a set can probably be built from a bag just by reimplementing &quot;remove&quot;. The question is what happens if you execute isContained after remove. And an interesting implementation of a bag is as a hash map where the &quot;values&quot; inserted are the keys, mapped to positive ints." CreationDate="2019-08-05T20:29:30.307" UserId="1293" />
  <row Id="15398" PostId="5847" Score="1" Text="Yes, a Bag is a good choice, but &quot;frequencyOf&quot;  is probably inessential to the concept. Also there is no reason that Bag couldn't be a base class of other &quot;collection&quot; ADTs." CreationDate="2019-08-05T11:44:19.577" UserId="1293" />
  <row Id="15412" PostId="5850" Score="1" Text="First, why do you want to do this?" CreationDate="2019-08-08T13:37:53.810" UserId="1293" />
  <row Id="15417" PostId="5850" Score="0" Text="@Buffy I would like to follow industry standards and create something that would be a good example for future projects. Because this system is mostly read-only, perhaps it is a better fit for Functional programming?" CreationDate="2019-08-09T00:09:25.983" UserId="5349" />
  <row Id="15432" PostId="5851" Score="0" Text="Very nice answer.  I never knew about this resource.  What a gem!  I hope we get to hear more from you in the future." CreationDate="2019-08-13T19:13:09.667" UserId="27" />
  <row Id="15424" PostId="5859" Score="0" Text="Nice. I just think that we have gotten carried away with the whole idea of paradigms, approaches, methods, concepts and what-all. It is over-investment in ideas. I first sat down at a teletype 40 years ago, and learned several languages as wildly different as Basic and APL within a few years. As I wrote programs and some of them got used in my workplace, I developed approaches for different areas that worked for me. Some of it was pretty 'Functional'. Some was 'Object Oriented'. Some was definitely event-driven. DSLs are my favorite. I did what made sense. So I am bemused by the *Paradigms*." CreationDate="2019-08-10T13:20:07.597" UserId="5349" />
  <row Id="15425" PostId="5860" Score="0" Text="Hi Mouley, welcome to [cseducators.se]. I have a feeling that this is a bit out of our scope -- we generally take questions about how to teach CS rather than questions about being a student. However I'm happy to wait before I recommend closing this question to see how the rest of our community feels about it." CreationDate="2019-08-10T14:47:57.943" UserId="58" />
  <row Id="15426" PostId="5860" Score="1" Text="@thesecretmaster Since the question regards how to learn, I think it's okay as [tag:self-learning] and [tag:resource-request]." CreationDate="2019-08-10T17:47:05.513" UserId="27" />
  <row Id="15434" PostId="5862" Score="1" Text="I was moved to write when I read [Greg Wilson's statement](http://third-bit.com/10rules/) that, &quot;*Most people would rather fail than change.*&quot; I found that thought repulsive." CreationDate="2019-08-10T18:49:28.873" UserId="5349" />
  <row Id="15439" PostId="5862" Score="0" Text="Migrating from Meta... Didn't see that coming." CreationDate="2019-08-16T23:21:54.923" UserId="5349" />
  <row Id="15435" PostId="5863" Score="0" Text="All fair statements. I still wonder why someone would, after attending free compulsory schooling for a decade, sign up to pay for more, when they do not know what they want from it? Schooling does not tell you what you want. So my root question is not so much about going after what you want as about knowing what that is to begin with. Perhaps I should rewrite it... How can someone not know what they want, enjoy, what interests them? Something must, or they would not get out of bed in the morning." CreationDate="2019-08-11T12:04:26.413" UserId="5349" />
  <row Id="15440" PostId="5864" Score="1" Text="Building a skyscraper is just &quot;cut this, connect that.&quot; It's not the steps you take but the solution you create. Welcome to [cseducators.se]. I suspect the question is borderline, as written, but could be edited to be &quot;in-scope&quot;. After all, many students may come to their first &quot;computer&quot; class with nearly the same notions." CreationDate="2019-08-17T22:35:26.517" UserId="104" />
  <row Id="15441" PostId="5865" Score="0" Text="Creativity comes in many forms. Programming is just one of them. It seems pretty natural if a creative person in one field doesn't appreciate the creative impulse in another." CreationDate="2019-08-19T12:24:19.140" UserId="1293" />
  <row Id="15448" PostId="5866" Score="1" Text="Memory is cheap. Don't use abrivs. Reading abrivs is hard and ambiguous, even in your own language." CreationDate="2019-08-20T11:55:45.820" UserId="204" />
  <row Id="15449" PostId="5866" Score="0" Text="@ctrl-alt-delor, correct, the readability matters and when you `ls` and see too much information, it is better to use abrivs." CreationDate="2019-08-20T11:57:09.390" UserId="6890" />
  <row Id="15450" PostId="5866" Score="2" Text="It depends on how familiar you are with the abbreviation. In England we use lab all the time, so much so that some may not know the long version. So as long as we are not also writing about dogs (Labradors), then all is well. Also use of a directory name in full can help: e.g. `Laboratory work/lab1-introduction to…`" CreationDate="2019-08-20T12:05:06.253" UserId="204" />
  <row Id="15451" PostId="5866" Score="0" Text="@ctrl-alt-delor I totally agree with that :)" CreationDate="2019-08-20T12:06:04.137" UserId="6890" />
  <row Id="15447" PostId="5869" Score="0" Text="Welcome to [cseducators.se]! While this answer might be correct, it can be improved if you include examples or details regarding your answer. you can [edit](https://cseducators.stackexchange.com/posts/5869/edit) your answer to add such details." CreationDate="2019-08-20T09:13:19.613" UserId="150" />
  <row Id="15443" PostId="5870" Score="0" Text="Actually, though, the question was about _how_. You seem to be saying: Just. Do. It. Not necessarily a bad approach, of course." CreationDate="2019-08-19T19:59:10.503" UserId="1293" />
  <row Id="15442" PostId="5871" Score="0" Text="Hmmm, so is this &quot;how _not_ to do it_&quot;? Language isn't just syntax. Just as spoken language is more than grammar." CreationDate="2019-08-19T19:57:32.273" UserId="1293" />
  <row Id="15452" PostId="5871" Score="0" Text="Once you understand the fundamentals of programming languages the differences at the beginning level is just syntax.  Once a kid can program in something as simple as Scratch (although some pretty complicated programs have been don in Scratch) learning a new language starts with the new syntax.  When I am doing Python, Java and Small Basic it is often &quot;Opps, wrong For loop syntax&quot;.  Language is not just syntax, but often the differences between languages is syntax." CreationDate="2019-08-20T18:20:43.250" UserId="2476" />
  <row Id="15453" PostId="5871" Score="1" Text="Sorry, but you are demonstrating ignorance here. A good python program should not look like a VB program. It requires a different mindset. Do you think that the difference between, say, Scheme and Scratch is just syntax?" CreationDate="2019-08-20T18:43:39.563" UserId="1293" />
  <row Id="15457" PostId="5875" Score="4" Text="[Rice's Theorem](https://en.wikipedia.org/wiki/Rice%27s_theorem) states that any non trivial semantic property is undecidable. A trivial property is a property that either holds for all programs or for none of them. A semantic property is a property of the behaviour of the program, not the &quot;input-output&quot;. The property &quot;does the algorithm take O(n^2) time?&quot; is thus a non-trivial semantic property and it follows that it is undecidable **in general** and no such tool can exist." CreationDate="2019-08-21T18:24:04.983" UserId="8343" />
  <row Id="15455" PostId="5876" Score="0" Text="That sounds fair, thanks to you both Buffy and Ben! :)&#xA;I realise that what I'm asking is not trivial and may even be impossible. But I would be happy with something that can give me good guesses.&#xA;&#xA;Also I aware of the halting problem, but am not convinced it is an issue for the relatively small programs we have here. Note that I can already recognise looping programs as they do not pass the functional tests, and that even something that simply counts loops and thus over estimates could provide a nice starting point." CreationDate="2019-08-21T12:36:55.677" UserId="8184" />
  <row Id="15456" PostId="5876" Score="0" Text="Probably not possible. It would likely both over and under estimate in some (different) cases. BTW, I once implemented an exponential time algorithm in production code because the size of the measured quantity could only be small enough to be irrelevant. Some people thought that was crazy but it worked." CreationDate="2019-08-21T12:39:22.923" UserId="1293" />
  <row Id="15458" PostId="5876" Score="0" Text="&quot;It might even be equivalent to the halting problem.&quot; – Rice's Theorem, actually, but same difference." CreationDate="2019-08-21T21:39:44.903" UserId="945" />
  <row Id="15459" PostId="5877" Score="0" Text="Unlike Buffy, you missed *in general* when stating that it's impossible." CreationDate="2019-08-21T22:30:52.857" UserId="660" />
  <row Id="15460" PostId="5877" Score="0" Text="@Bergi Just like Bogosort doesn't *in general* run in linear time.  ;-)" CreationDate="2019-08-21T23:03:30.303" UserId="27" />
  <row Id="15461" PostId="5878" Score="2" Text="Welcome to [cseducators.se] I suspect that such a resource doesn't exist. Educational materials tend to go the easy way and use the IDE so that the students can focus on the language, not the workflow. Developing a CLI workflow is probably more of a personal preference than a standard to disseminate." CreationDate="2019-08-24T20:58:29.797" UserId="104" />
  <row Id="15462" PostId="5878" Score="0" Text="Your requirements seem inconsistent. You want &quot;terminal based&quot; but also &quot;tools&quot;. If I suggest emacs you will hate me, of course." CreationDate="2019-08-24T21:59:58.030" UserId="1293" />
  <row Id="15463" PostId="5878" Score="0" Text="@Buffy why should this be inconsistent? There are command line tools as well..." CreationDate="2019-08-24T22:37:32.203" UserId="8354" />
  <row Id="15464" PostId="5880" Score="1" Text="Is there a reason for the restriction on updating the tree? How much practice does it take to learn tree traversal?" CreationDate="2019-08-26T18:07:43.690" UserId="27" />
  <row Id="15466" PostId="5880" Score="0" Text="Well updating the tree is already implemented, I'm looking more for ways to practice the usage of a tree. Same goes for tree traversal, in modern languages you traverse a tree with the same piece of code as traversing a list." CreationDate="2019-08-26T19:10:22.503" UserId="8356" />
  <row Id="15467" PostId="5880" Score="1" Text="It's like the difference between learning to sort vs using a sorting algorithm to solve a problem." CreationDate="2019-08-26T19:12:07.567" UserId="8356" />
  <row Id="15585" PostId="5880" Score="0" Text="I don't understand why you're talking about tree data structures but mention std::set and std::map. These might work with tree data structures *in the background*, but they don't actually model trees, they model sets and (key,value) pairs. So: Are you interested in using tree structures or learning how sets and (key,value) associative containers work?" CreationDate="2019-09-18T14:15:15.743" UserId="1336" />
  <row Id="15591" PostId="5880" Score="0" Text="@Pascal I modified the question. I am interested in using tree data structures. I want to practice my skill at spotting what data structure fits to solve the problem effectively." CreationDate="2019-09-19T15:32:06.230" UserId="8356" />
  <row Id="16713" PostId="5880" Score="0" Text="Hey @mercury0114 I am new in these type of competitive programming world..Can you please point me to the link where I can find soln to this problem, or what is the genre of this problem which I can google?" CreationDate="2020-07-14T14:03:51.287" UserId="9304" />
  <row Id="16714" PostId="5880" Score="0" Text="I was given this specific problem in the interview, so I don't have a link to it. In general problems like these appear at https://codingcompetitions.withgoogle.com/codejam &#xA;, http://usaco.org/ etc." CreationDate="2020-07-14T14:08:00.387" UserId="8356" />
  <row Id="15498" PostId="5881" Score="0" Text="Interfaces are just a kludge in the java language, to allow polymorphism in the absence of multiple inheritance (The developers of Java did not know how to safely implement repeated inheritance, so eliminated multiple inheritance)." CreationDate="2019-09-05T21:43:10.350" UserId="204" />
  <row Id="15499" PostId="5881" Score="1" Text="@ctrl-alt-delor I can't say as I agree with you there. Interfaces are more powerful than that, and used in plenty of places where any sort of inheritance would be inappropriate, such as iterators, or compareto." CreationDate="2019-09-05T22:05:38.477" UserId="27" />
  <row Id="15503" PostId="5881" Score="0" Text="To make a class an iterator (or anything else): class A is an iterator. Is an example of polymorphism. (so **exactly** as **un**-powerful as I stated). And full inheritance is totally appropriate. It is just banned in Java, and can be dangerous in C++ (but only if repeated (not just multiple) inheritance). There are languages that make even repeated inheritance safe." CreationDate="2019-09-07T21:23:31.763" UserId="204" />
  <row Id="15504" PostId="5881" Score="1" Text="@ctrl-alt-delor I suppose we'll have to agree to disagree here.  Interfaces are lightweight, versatile, and allow the compiler to do important work for you. Using inheritance to make your iterators seems like an odd idea.  My n-ary tree, my 3-dimensional jagged array, and my spanning tree should implement Iterator completely differently.  The only thing that my foreach loop needs to know is that they can iterate.  I'm not aware of any language that is statically typed, but does not support interfaces (or abstract classes, which gets you the same thing)." CreationDate="2019-09-08T02:29:17.510" UserId="27" />
  <row Id="15505" PostId="5881" Score="0" Text="@ctrl-alt-delor Even Python added a module for abstract classes, and it's dynamically typed, so there is nominally no need for it." CreationDate="2019-09-08T02:34:14.140" UserId="27" />
  <row Id="15506" PostId="5881" Score="0" Text="Yes it seem like an odd idea, because java invented an inferior way. However I am not discussing a language that does not support interfaces (no a inferior thing). I am saying that one does not need an interface keyword (with limited functionality to implement interfaces). One should be able to use classes, to create: interfaces (you can do this in java, but can only inherit one); interfaces with pre/post/invariant conditions; interfaces with some functionality. And to have multiple inheritance e.g. A inherits B, and comparable, and ..." CreationDate="2019-09-08T19:57:27.713" UserId="204" />
  <row Id="15507" PostId="5881" Score="0" Text="Comparable should be allowed to implement `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `==`, and `!=`. with out having to write a tonne of code. One should just have to write say `&lt;` for each implementation. In addition the compiler should do important work for you (optimisation), you should not have to use special devices (`interface`) to get the compiler to optimise. A pure abstract class, should be as light as an interface would have been. Classes that are not used polymorphic should be called statically (optimisation). Inheritance chains, and call chains should be flattened where possible." CreationDate="2019-09-08T20:03:07.540" UserId="204" />
  <row Id="15508" PostId="5881" Score="0" Text="@ctrl-alt-delor Of course Java does this now.  Since Java 8(?), you can put default code in interfaces, and that code will be inherited.  As to `&lt;`, `&lt;=`, etc, you can easily extend an interface with another broader interface to accomplish both `Comparable` and `FullyComparable`.  I'm honestly not that sourfaced about lacking operator overloads.  They can be nice, but they're just syntactic sugar, and they can also be abused to make code less clear.  Don't get me wrong, I'd like to have them available, but it's not something I get too fussed about." CreationDate="2019-09-08T21:08:19.667" UserId="27" />
  <row Id="15520" PostId="5881" Score="0" Text="the operator over loading was just an example. I will look at what you say about interfaces being allowed default code (sounds like classes)." CreationDate="2019-09-13T22:15:29.083" UserId="204" />
  <row Id="15468" PostId="5882" Score="0" Text="Even though Greenfoot uses the BlueJ editor it has never had a &quot;New Interface...&quot; menu item. You must create a new class and change the class to interface, as Buffy says.  I have tested this with all versions from 3.04 thru 3.6." CreationDate="2019-08-26T20:40:40.947" UserId="3840" />
  <row Id="15469" PostId="5882" Score="0" Text="You can also create an interface (or other) with an external editor and import it from that same menu. There is actually a way to use Eclipse as an external editor for greenfoot if you don't like the built in one. Edit in eclipse and run in greenfoot. Once set up it is pretty straightforward." CreationDate="2019-08-26T21:02:22.303" UserId="1293" />
  <row Id="15470" PostId="5883" Score="0" Text="Thanks for all of the detail! It sounds like Greenfoot isn't really designed to show Interfaces specifically, which was what I was beginning to suspect.  How much starter code do you provide for GoL?" CreationDate="2019-08-27T00:52:45.730" UserId="27" />
  <row Id="15471" PostId="5883" Score="0" Text="There is actually very little required.  The most difficult aspect is managing the state transition because all cells have to change simultaneously. So I show that piece in class.  When we move the solution to a MVC pattern (the universe has a separate model to maintain the state), I provide array copying methods. A large part of the lab is working within the iterative incremental build cycle. The core algorithm is provided by the wiki site." CreationDate="2019-08-27T01:11:45.740" UserId="3840" />
  <row Id="15472" PostId="5883" Score="0" Text="As a side note: comparing the execution speed and profiles between the two implementations is my lead in to Big-O and algorithm efficiency (space and time). I use the Java profiler and the students find that pretty cool - memory usage, heap size and the speed improvement is  phenomenal." CreationDate="2019-08-27T01:16:06.987" UserId="3840" />
  <row Id="15490" PostId="5892" Score="0" Text="The answer is trivially yes. Are you looking for something specific, or just a list of every product that trains users how to use their products?" CreationDate="2019-08-31T20:27:42.650" UserId="27" />
  <row Id="15491" PostId="5892" Score="0" Text="I'm specifically looking for courseware: slides, labs, etc. that are released under an open source or creative commons license." CreationDate="2019-08-31T20:38:54.710" UserId="8374" />
  <row Id="15495" PostId="5892" Score="0" Text="Note: Not all creative commons licences are complaint with the Open Source or Free Software definitions. Specifically none of the NC variants." CreationDate="2019-09-05T21:24:48.210" UserId="204" />
  <row Id="15493" PostId="5894" Score="0" Text="Thank you. This is a great place to start." CreationDate="2019-09-02T15:04:29.543" UserId="8374" />
  <row Id="15494" PostId="5895" Score="1" Text="Perfectly allowable as long as your affiliation is disclosed. Welcome back :)" CreationDate="2019-09-04T09:49:19.007" UserId="27" />
  <row Id="15496" PostId="5895" Score="0" Text="Note: this material is NOT Open Sourced it is Attribution-NonCommercial-ShareAlike 4.0 International. This licence dose not comply with the Open Source definition, Or the Free Software definition. Most Creative commons licences are compliant, but none of the NC (NonCommercial) ones are." CreationDate="2019-09-05T21:28:19.327" UserId="204" />
  <row Id="15500" PostId="5895" Score="0" Text="Oh! Thanks for pointing that out, I should talk to my university about this then, as this is what they recommend I put on it ;(&#xA;&#xA;So am I right in understanding that this is okay for slides etc, but not for the implementation assignments? Or not even that?" CreationDate="2019-09-06T07:00:46.203" UserId="8184" />
  <row Id="15509" PostId="5900" Score="0" Text="Would you mind providing a bit more explanation for why you think merge sort is a good example to use for teaching divide and conquer? Not every divide and conquer algorithm will be useful for teaching the concept of divide and conquer, so why do you think merge sort is?" CreationDate="2019-09-10T17:17:15.220" UserId="58" />
  <row Id="15511" PostId="5903" Score="0" Text="What is it about the course that makes you ask this question. What do you find missing? How is your background for it?" CreationDate="2019-09-11T19:54:54.007" UserId="1293" />
  <row Id="15512" PostId="5903" Score="0" Text="Charles E. Leiserson, Clifford Stein, Ronald Rivest, and Thomas H. Cormen" CreationDate="2019-09-11T19:55:11.467" UserId="8405" />
  <row Id="15513" PostId="5903" Score="0" Text="I'm a third year computer science student. I understand the concepts that are being explained in the book but I find that without a lecture, or some sort of secondary material, I struggle with retaining the information and applying it to my work. I would like to find some sort of online course that follows the book to make up for the lack of instruction I'm receiving." CreationDate="2019-09-11T20:02:30.777" UserId="8405" />
  <row Id="15514" PostId="5903" Score="0" Text="Is the &quot;course&quot; you are taking without lectures? If so, what is the course methodology? What happens in a typical face to face session, if any?" CreationDate="2019-09-11T20:04:59.097" UserId="1293" />
  <row Id="15515" PostId="5903" Score="0" Text="The course consists of lecture session, homework assignments, and tests. Lectures have consisted of our professor reading off pp slides taken word for word from the book, with no explanation or time for questions/clarification. I've gone into office hours multiple times, but it's a large university and I can only take up so much of the professor's time." CreationDate="2019-09-11T20:10:36.097" UserId="8405" />
  <row Id="15516" PostId="5905" Score="0" Text="Would you mind explaining why you found this series in particular helpful?" CreationDate="2019-09-13T01:45:57.657" UserId="58" />
  <row Id="15517" PostId="5905" Score="1" Text="The series covers topics in a similar order to the book. There is no assumption of what you do or don't know, material is covered from the ground up. Each video provides multiple examples of problems. It's what I was looking for when I initially asked the question." CreationDate="2019-09-13T01:56:34.657" UserId="8405" />
  <row Id="15518" PostId="5905" Score="1" Text="@SelfStudy22 please note, I integrated your comment into the answer itself. (It belongs there)." CreationDate="2019-09-13T11:08:02.197" UserId="27" />
  <row Id="15527" PostId="5906" Score="10" Text="Sometimes I think it's just bad pedagogy.  I'm reminded of [this stackoverflow question](https://stackoverflow.com/questions/56851693) where the restriction seemed particularly pointless and counterproductive.  (It might have made sense for the *instructor* to demonstrate the &quot;solution&quot; without an array, to then motivate the use of arrays.  But to require the student to write the code without using an array seemed, to me anyway, pedagogically insane.)" CreationDate="2019-09-14T16:38:18.637" UserId="8420" />
  <row Id="15536" PostId="5906" Score="5" Text="Semi-related: requiring recursion for problems that are easier without it is quite common (often Fibonacci where naive recursive is just egregiously bad for performance).  If the concept isn't introduced *too* early, there are problems where recursion is by far the easiest solution. &#xA; [What are good examples that actually motivate the study of recursion?](//cseducators.stackexchange.com/q/4143)  e.g. tree traversal, Ackermann function, or Merge Sort.  All of these avoid solutions that look recursive but actually keep global state like a loop (especially in asm with state in regs)." CreationDate="2019-09-15T19:58:34.623" UserId="1654" />
  <row Id="15537" PostId="5906" Score="1" Text="Well, Fibonacci is still a quite OK problem for recursion, I've seen lot worse examples for recursion." CreationDate="2019-09-15T20:38:45.320" UserId="8354" />
  <row Id="15540" PostId="5906" Score="1" Text="@PeterCordes - it should be pointed out that recursive merge sort is mostly used for educational purposes. Most libraries use some variation of non-recursive merge sort for a stable sort. It becomes more clear in a when it is realized that a typical recursive merge sort is just generating and storing indexes on the stack, and that no merging takes place until two instances of the base case (sub-run size == 1) occur, while iterative bottom up merge sort skips all that recursion, and treats an array of n elements as n base cases of run size == 1, and immediately starts merging pairs of runs." CreationDate="2019-09-16T05:55:41.400" UserId="8428" />
  <row Id="15542" PostId="5906" Score="2" Text="@PeterCordes, taken to extremes (as it is by e.g. the University of Cambridge) you can start by teaching programming in a functional language which doesn't have any way of looping *except* recursion. The counterpoint to &quot;*too early*&quot; would be that many iterative programs are implementing algorithms which are usually described recursively." CreationDate="2019-09-16T07:36:53.150" UserId="1219" />
  <row Id="15548" PostId="5906" Score="0" Text="@PeterTaylor: Sure.  I follow assembly-language tags on SO and my comment was 100% about imperative languages (and especially asm).  Recursion is non-trivial to implement in asm (no compiler to save/restore locals for you across function calls).  But Fibonacci makes a particularly bad example for asm recursion because it doesn't force you to distinguish passing/returning vs. just keeping a sum in a register that's effectively global, for a beginner just trying to make something work.  Nonetheless, questions about asm recursive Fibonacci homework are more common than any interesting recursion." CreationDate="2019-09-16T15:05:56.630" UserId="1654" />
  <row Id="15555" PostId="5906" Score="0" Text="@PeterCordes actually recursion is very easy to implement in assembly language." CreationDate="2019-09-16T22:08:10.483" UserId="1308" />
  <row Id="15557" PostId="5906" Score="0" Text="@ChrisStratton: Yes, if you *know* assembly language then most things are easy. But the people that have trouble with it and post questions on SO often have other major holes in their understanding, e.g. of registers vs. memory and what instructions do. On a typical register machine (like x86), it's certainly more complicated than in C because you have to save/restore regists manually. And it might be the first non-leaf function students have written if they're using MARS to learn MIPS, where toy system calls do string or integer console I/O. RISCs use a link reg instead of pushing a ret addr." CreationDate="2019-09-16T22:19:59.223" UserId="1654" />
  <row Id="15558" PostId="5906" Score="0" Text="@PeterCordes - all of the machines you mention have stacks.  They may have certain optimizations like the LR but they all have stacks." CreationDate="2019-09-16T22:37:23.047" UserId="1308" />
  <row Id="15560" PostId="5906" Score="0" Text="@ChrisStratton: Yes, but you have to use the stack manually.  Nothing writes those push/pop and stack-pointer adjusting instructions for you.  vs. higher level languages where you can do `int tmp = func(n-1);` and earlier local variables keep their values automatically.  I think you're missing the point about *teaching* assembly language to people that start out with zero understanding of it.  Of course everything is easy if you know how to do it, but it does require using multiple instructions in the right order and thinking about / knowing more stuff than in a higher level language." CreationDate="2019-09-16T22:49:39.883" UserId="1654" />
  <row Id="15561" PostId="5906" Score="0" Text="@ChrisStratton: also, if you want to nit-pick, architecturally MIPS *doesn't* have a call stack.  It's easy to implement one in software if you choose to, using its only addressing mode (`reg + imm16`), but not even HW interrupts use any register as a stack implicitly.  Of course the standard software conventions on MIPS do define a register as the stack pointer, so if you're including that as part of MIPS then yes it has a stack.  Anyway, saving/restoring a link register correctly is an extra complication that creates more ways to have infinite loop bugs for beginners. (Look at SO's MIPS tag)" CreationDate="2019-09-16T22:55:23.270" UserId="1654" />
  <row Id="15566" PostId="5906" Score="0" Text="@PeterCordes all of that and not a word about branch delay slots?  I'm disappointed :-)  More seriously, most of what you mention is a challenge fundamental to assembly on these platforms *at all* - recursion isn't notably harder than more conventional function calls." CreationDate="2019-09-16T23:42:43.383" UserId="1308" />
  <row Id="15567" PostId="5906" Score="0" Text="@ChrisStratton: Agreed!  But before doing recursion, some students have only written trivial leaf functions that can get away with clobbering any/all registers.  So at least some students don't really understand the basics of functions yet, and/or recursion is teaching that, too.  (And BTW, MARS defaults to simulating a MIPS without branch delay slots.  Instructors using MARS/SPIM to teach intro-to-assembly use that variant of MIPS, along with the toy I/O system calls instead of non-existent libc function calls.) Selection bias: only the most confused/lost or lazy post on SO about such basics." CreationDate="2019-09-17T00:28:44.193" UserId="1654" />
  <row Id="15519" PostId="5907" Score="0" Text="The first sentence of your second paragraph is spot-on. In most cases I suspect that those constructs were just forgotten... Also i don't see why functions/methods are taught that late, but that's almost another topic...&#xA;&#xA;&#xA;Also I'm not really sure if there is a clear plan behind this or if it is more about authority than didactics, or in other words: &quot;Rules are rules and that's it! Just follow them and don't ask why they have been set up. If you don't follow them, you disrespected the teacher and will be penalized&quot;!" CreationDate="2019-09-13T20:36:09.143" UserId="8354" />
  <row Id="15546" PostId="5907" Score="0" Text="@csabinho Both are definitely true. Usually, it's pretty easy to see - what was the latest thing the teacher has worked with? If they don't keep up with any new methodologies and technologies, they probably prohibit things just to avoid having to learn anything new. If they do learn new things (and teach them when appropriate), they probably have didactic reasons for the prohibitions - and shouldn't have any problem explaining why a particular approach is forbidden. I've met plenty of teachers of both kinds." CreationDate="2019-09-16T12:52:44.993" UserId="1816" />
  <row Id="15529" PostId="5908" Score="1" Text="“the rule doesn't seem to make a lot of sense and it won't make sense to students either” Why? As an ex CS student and now software developer, the rule made a lot of sense to me. E.g. if the teacher wanted us to learn for loops by implementing multiplication or exponentiation, **of course** they would say &quot;you cannot use the `*` operator&quot;." CreationDate="2019-09-14T22:11:59.120" UserId="963" />
  <row Id="15530" PostId="5908" Score="0" Text="@AndreaLazzarotto, the simple prohibition _without reasoning_ is what doesn't make sense to them. You have to motivate the requirement to avoid the reaction &quot;this is stupid&quot;." CreationDate="2019-09-14T22:16:54.073" UserId="1293" />
  <row Id="15531" PostId="5908" Score="1" Text="The reasoning is obvious. If there exist libraries or &quot;more convenient&quot; methods to solve a problem, depriving it from educational value, the instructor needs to forbid such methods. Any university student is able to understand this." CreationDate="2019-09-14T22:28:16.327" UserId="963" />
  <row Id="15533" PostId="5908" Score="0" Text="@AndreaLazzarotto The reason might be obvious in specific cases but not as a general rule. If you have this as a general rule the only explanation I have for this is the rule that stands above all others: obey the authority!" CreationDate="2019-09-15T04:30:01.743" UserId="8354" />
  <row Id="15521" PostId="5909" Score="1" Text="Even though I completely see your point, my point, which was maybe not made clear enough in my question, is why students are forced to do typical &quot;don't try this at home&quot;-programming because of those restrictions. Also mostly I don't have the feeling that the teachers are following a clear didactic plan which requires to solve specific examples with specific constructs but it's more about their authority, which is undermined if their students leave their path and start learning on their own(and also that some constructs are just forgotten, but that's another topic)." CreationDate="2019-09-13T23:38:21.363" UserId="8354" />
  <row Id="15522" PostId="5909" Score="0" Text="Getting students used to obeying arbitrary authority is its own benefit, they are likely going to need to do so much of their working life, even if they aren't working as programmers. The worst example of this I encountered as a student was an instructor who flat forbade use of the C &quot;-&gt;&quot; operator even after it was encountered in the book. He insisted that &quot;(*ptr).member&quot; constructs be used instead. That one I never have figured out other than it being an ego trip." CreationDate="2019-09-14T04:58:36.093" UserId="8415" />
  <row Id="15523" PostId="5909" Score="5" Text="@SoronelHaetir You mean that this is a way of saying &quot;life is ****, learn it early!&quot;? ;-)" CreationDate="2019-09-14T07:33:33.040" UserId="8354" />
  <row Id="15524" PostId="5909" Score="2" Text="@csabinho Learning to deal with the fact that life is **** is a more important accomplishment than learning some particular programming technique, IMHO. The programming technique may or may not be transferrable to your next programming language. Your knowledge about life is guaranteed 100% transferable to every situation, up to and including death." CreationDate="2019-09-14T13:24:09.623" UserId="1352" />
  <row Id="15526" PostId="5909" Score="2" Text="&quot;There exists no problem that can be solved with a linked list that cannot also be solved with an arraylist&quot; &lt;-- sure there does. Ones for which there are constraints on availability of storage/in-placeness." CreationDate="2019-09-14T15:37:38.433" UserId="1327" />
  <row Id="15539" PostId="5909" Score="8" Text="@SoronelHaetir &quot;Getting students used to obeying arbitrary authority is its own benefit&quot; Where I went to school, my maths/latin/philosophy teacher who started at the school fresh from university when I entered school, and was headmaster by the time I left, prided himself in teaching the students two important abilities: To determine whether authority is right or wrong, and to fight authority when it is wrong." CreationDate="2019-09-15T22:48:24.587" UserId="4529" />
  <row Id="15564" PostId="5909" Score="4" Text="Ironically, arbitrariness is not necessarily a bad thing, as a learning exercise.  There's actual value to making up a language or computation machine with *absurd* and unfamiliar rules, and learning to work within those, as it teaches precisely the kind of plasticity of thought needing to find the best solution to real problems - especially those problems where conventional techniques fail, or where past decisions (which may have been unwise, but now are set) constrain current options in a way that rules out the usual solutions." CreationDate="2019-09-16T23:29:35.517" UserId="1308" />
  <row Id="15528" PostId="5910" Score="1" Text="Why don't you just make an `includes.h`-file with all the include madness and just include this file? In my opinion that would be the easiest solution!" CreationDate="2019-09-14T21:39:37.910" UserId="8354" />
  <row Id="15532" PostId="5912" Score="1" Text="Well, yes, of course, they should understand what they are doing. But who says that they understand the code if they copy code that just uses techniques and language constructs that are covered by the lessons? And on the other hand, if students know what they are doing, why would you prohibit the use of anything not covered by the lessons? Of course in specific cases you want the students to solve it in a specific way, and everybody will understand this, but that's no general rule." CreationDate="2019-09-15T04:26:10.223" UserId="8354" />
  <row Id="15534" PostId="5912" Score="1" Text="@csabinho Well at least they would have to study the code long enough to determine whether it used appropriate techniques." CreationDate="2019-09-15T06:22:42.473" UserId="2492" />
  <row Id="15535" PostId="5912" Score="1" Text="Or copied it from classmates who wrote it themselves... I'm not really seeing a big difference...if any!" CreationDate="2019-09-15T18:02:57.103" UserId="8354" />
  <row Id="15584" PostId="5913" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/98814/discussion-on-answer-by-user8425-whats-the-benefit-of-prohibiting-the-use-of-te)." CreationDate="2019-09-18T14:14:16.957" UserId="58" />
  <row Id="15545" PostId="5914" Score="1" Text="This question is missing too many details to answer well. What do you mean by &quot;games&quot;?  What are you actually trying to teach them?  Is there a language or a set of concepts that you have in mind?  Are you at the program design stage, or are you running a single course?  How much time do you expect you will have with the students, and what is their background?" CreationDate="2019-09-16T12:13:02.097" UserId="27" />
  <row Id="15568" PostId="5914" Score="0" Text="I am trying to teach programming to them by regular program or by game. I did not choose program yet. yes,I will gave it as a single course.For the time maybe 4 month.thanks" CreationDate="2019-09-17T01:33:12.220" UserId="8429" />
  <row Id="15571" PostId="5914" Score="0" Text="&quot;Teach by game&quot; meaning, have the kids compete with each other across the semester for points? Or have them code games (something like Unity)? Or have them play a game like Human Resource Machine?" CreationDate="2019-09-17T12:34:53.620" UserId="27" />
  <row Id="15582" PostId="5914" Score="0" Text="Hi Jared- you might find the guidance on how to ask a question useful in constructing a question that is more informative?  It would help to know what non-CS area the course is targeted at- perhaps there is a field that could be identified where coding would add some value?  How many hours/week?  Think about an objective for the class.  Will there be college credits, or is this more &quot;for fun&quot;?&#xA;Thanks.&#xA;&#xA;https://stackoverflow.com/help/how-to-ask" CreationDate="2019-09-17T22:30:36.943" UserId="2706" />
  <row Id="15583" PostId="5914" Score="0" Text="@srattigan I don't need this link thanks" CreationDate="2019-09-18T05:16:58.827" UserId="8429" />
  <row Id="15543" PostId="5915" Score="2" Text="I'm quite sure that you are talking about a completely different scenario than I am! I am talking about prohibiting everything that has not been taught, and of course on the other hand allowing everything that has been taught.You are talking about specific rules! Explicitly prohibiting certain things for certain tasks makes a lot of sense, of course! Prohibiting everything and always makes no sense at all!" CreationDate="2019-09-16T08:56:59.697" UserId="8354" />
  <row Id="15544" PostId="5915" Score="2" Text="And I am talking about language constructs like switch and foreach. Those are rarely taught in the schools which I have to deal with and would be really useful." CreationDate="2019-09-16T09:08:43.320" UserId="8354" />
  <row Id="15549" PostId="5915" Score="0" Text="I am thinking of for example an restricted assembler dialect to teach how to work with its instructions. Or when you're thinking of foreach, maybe how to implement a loop using comparision and jump instructions. I do not know lectures, that really forbid foreach directly, but in the context of e.g. an didactic assembler dialect I see a point in for example not allowing a multiplication instruction, so the students need to implement it themself." CreationDate="2019-09-16T18:06:46.967" UserId="4631" />
  <row Id="15550" PostId="5915" Score="0" Text="@csabinho - it doesn't really matter what the restrictions are, it matters that *dealing with restrictions* is a fact of life in programming.  Because you are not attending the course yourself, you may not be familiar with them as ground rules and so constantly trip over them while proposing things you consider ordinary.  But the thought process of being able to work within *any* set of restrictions is key:  **never trust someone who can only solve a problem in a single way** . Many areas within CS require drastic changes of thinking to adopt, and changing thinking is an important exercise." CreationDate="2019-09-16T20:36:52.767" UserId="1308" />
  <row Id="15551" PostId="5915" Score="0" Text="@ChrisStratton I'm talking mostly about beginners and restricting them to use anything that wasn't learned during the lessons stops them from being autodidacts, which is also an absolutely essential skill in programming life. Those restrictions often reach the point you are talking about: being only able to solve the problem in a specific way, and also, as mentioned above, it kills the drive to learn something new and teaches to stay on the given path and don't look to the left and right and don't strive to learn more and be ahead of what's taught, if you don't want to get punished!" CreationDate="2019-09-16T20:55:16.030" UserId="8354" />
  <row Id="15554" PostId="5915" Score="0" Text="What you are not understanding is that the point of being forced to solve the problem in a specific way *at a given point in a course* is to **make sure you can really use that way**.  Then you move on and solve it in a different way.  If the choice is always free, *students merely stick with their preferred familiar way* and never have to learn about the alternatives. There's also the distinct skill of learning to think in terms of the offered tools. The problem here is that **you are trying to re-write the actual instructor's syllabus** - when you aren't even a participant in the course(!)" CreationDate="2019-09-16T22:05:07.833" UserId="1308" />
  <row Id="15547" PostId="5917" Score="0" Text="A foreach-loop does something else than a for-loop and you can't change the array within a foreach-loop, at least not without using it like a while-loop and have your own counter which is incremented in the loop body!" CreationDate="2019-09-16T13:56:46.390" UserId="8354" />
  <row Id="15574" PostId="5917" Score="0" Text="On the other hand, the foreach loop may be easier to understand if introduced first simply because those questions can be deferred until later. I'm not suggesting that the questions aren't important; they may just be inappropriate *right now.*" CreationDate="2019-09-17T19:41:33.247" UserId="6704" />
  <row Id="15572" PostId="5919" Score="1" Text="This is a question about the site, and as such belongs on [meta](https://cseducators.meta.stackexchange.com/). That aside, the site is about _doing_ the education in CS not _getting_ the education is CS. Tagging to facilitate that kind of searching wouldn't really help the goal of the site. Doing such a search could be done using [resource-request] and/or [resource-information] along with the appropriate language/subject tag. I'd expect the results to be quite sparse however." CreationDate="2019-09-17T15:43:29.100" UserId="104" />
  <row Id="15573" PostId="5919" Score="1" Text="@GypsySpellweaver I think OP is asking about cataloged *programming exercises*.  I think it's a [tag:resource-request].  Perhaps OP could chime in?" CreationDate="2019-09-17T18:54:24.783" UserId="27" />
  <row Id="15579" PostId="5919" Score="1" Text="@GypsySpellweaver yes, my mind exactly ^^" CreationDate="2019-09-17T20:45:52.673" UserId="8306" />
  <row Id="15576" PostId="5920" Score="2" Text="Why would an instructor want to &quot;level the playing field&quot;. Is learning a competitive sport like foot ball? I would certainly never do it for that reason. More advanced knowledge is a good thing. Again, an exercise is seldom about &quot;getting an answer&quot;, but about learning something important." CreationDate="2019-09-17T20:23:22.797" UserId="1293" />
  <row Id="15589" PostId="5921" Score="0" Text="It could be still be useful for adaptive learning : each student has a different level of skills and speed of learning.&#xA;&#xA;In my question, I'm relatively open-minded: regardless of the library access policy, what's interesting is how the exercise inventory problem is managed. &#xA;I used the term &quot;attempt&quot;, not &quot;solution&quot;" CreationDate="2019-09-19T10:35:09.753" UserId="8306" />
  <row Id="15587" PostId="5922" Score="0" Text="Certainly you _can_ do that. But a deeper question is whether you actually _should_ teach students to program first with static methods. My experience is that it makes it more difficult for them to ever really understand the essence of an OO language like Java and how to use it. See, for example: https://cseducators.stackexchange.com/a/2883/1293" CreationDate="2019-09-19T00:06:06.797" UserId="1293" />
  <row Id="15590" PostId="5922" Score="0" Text="I am, of course, a strong advocate of starting with objects and leaving lower level things for later. But you can't do it naively and just follow the language. Here are some ideas about resources for doing it well: https://cseducators.stackexchange.com/q/4025/1293. The big idea is how do you move effectively from a _problem_ to a solution. Matching the _parts_ implied in the program to the objects that represent them. Few problems in the real world are naturally expressed in terms of ints. More can be naturally represented as objects." CreationDate="2019-09-19T12:30:00.983" UserId="1293" />
  <row Id="15809" PostId="5922" Score="0" Text="Note that the book _Karel J Robot_ has the students write classes and methods prior to introducing conditionals or iteration. In fact it has almost no use of variables (other than references to objects) and no use of int variables and such. Polymorphism comes before iteration, in fact." CreationDate="2019-11-05T00:55:23.760" UserId="1293" />
  <row Id="15827" PostId="5923" Score="0" Text="One major pedagogical problem with objects-late is that students practice the essential parts of OO programming the least. If you start with objects then everything else you do gets to reinforce those early lessons on object structure. Doing it the other way doesn't permit that same level of reinforcement. Learning is by reinforcement and feedback, not by having information _logically_ presented." CreationDate="2019-11-06T19:41:27.413" UserId="1293" />
  <row Id="15626" PostId="5924" Score="1" Text="IMHO they should be taught even before any consideration of avoiding code duplication, as a way to structure the thought, giving significant names to user defined actions (groups of instructions). Important in the process of writing code step by step.&#xA;If you chose plain Java for teaching to beginners, the `static` keyword is already present for the unavoidable main()." CreationDate="2019-09-29T15:22:31.190" UserId="2103" />
  <row Id="15633" PostId="5924" Score="0" Text="Well, I'm quite sure that you should at least know some control structures to see how useful functions/methods are to avoid code duplication. Before that point you only declared and initialized some variables, so I can't even imagine how to demonstrate the use of functions/methods in a proper way." CreationDate="2019-09-30T21:17:29.070" UserId="8354" />
  <row Id="15594" PostId="5925" Score="1" Text="You won't be able to properly implement circularly-linked lists using &quot;smart&quot; pointers. They aren't smart enough for that. You'll either have to use a language with garbage collection, or you'll have to use raw pointers and explicitly `delete` whatever needs to be returned to the heap." CreationDate="2019-09-20T17:49:33.797" UserId="1269" />
  <row Id="15596" PostId="5925" Score="1" Text="If you think what you say, then you should have your students program in machine code (not assembler). Higher level languages, will get them into the bad habit of relying on the compiler (to do a better job, than they could ever do). An alternative is to change your belief and use a high level language." CreationDate="2019-09-20T20:31:02.160" UserId="204" />
  <row Id="15592" PostId="5926" Score="1" Text="This would be good answer if the OP's goal was to teach C++, but the OP is teaching data structures. On most days, a modern, professional, C++ programmer has no business messing with data structures. The C++ programmer should be using structures provided by the C++ standard library or, by other common libraries. Programmers who roll their own, most likely are wasting their employer's time and money... Unless they are employed to _implement_ common C++ support libraries.  And, in _that_ case, they probably had better know how to work with raw pointers." CreationDate="2019-09-20T17:24:26.220" UserId="1269" />
  <row Id="15593" PostId="5926" Score="0" Text="@SolomonSlow, the course seems more basic than you suggest. data types, control flows, etc don't get taught in a proper data structures course." CreationDate="2019-09-20T17:32:27.373" UserId="1293" />
  <row Id="15595" PostId="5926" Score="0" Text="Hmm. Good point. Although, OP also says &quot;circularly-linked lists,&quot; which is kind of an advanced topic for programming 101." CreationDate="2019-09-20T17:51:34.077" UserId="1269" />
  <row Id="15597" PostId="5927" Score="0" Text="Question is, what is the learning target for that particular segment of the course? Also, I've never seen a text intended to beginners explaining C++ various types of smart pointers without referring to raw pointers." CreationDate="2019-09-22T08:07:36.170" UserId="2103" />
  <row Id="15599" PostId="5929" Score="0" Text="Instead of linking to the whole essay, could you take some screencaps of the diagrams you're looking to recreate? That'd make it easier on potential answerers. Some of us are afraid of links to sites we don't recognize, and diagrams are really all that's needed to answer the question." CreationDate="2019-09-22T20:18:41.977" UserId="58" />
  <row Id="15600" PostId="5929" Score="1" Text="Good questions here tend to be quite &quot;self contained&quot;." CreationDate="2019-09-22T20:23:46.060" UserId="1293" />
  <row Id="15601" PostId="5929" Score="0" Text="I've been to that site before; I used to love it, I now probably disagree with more than I agree with.  Nevertheless, he has interesting ways of thinking about instruction.  I'm not sure, though, what you're asking for.  Is the question that you're looking for Bret's source code?" CreationDate="2019-09-22T20:30:43.140" UserId="27" />
  <row Id="15602" PostId="5929" Score="0" Text="Ben, yes of course :) it seems to be a real tool, my experience with this kind of things is that such a tool would be made available as open source. I start wondering this is not such a case but it would be sad given its potential. I am curious anyway on why you disagree, it might spark even more interesting thoughts." CreationDate="2019-09-23T13:29:12.017" UserId="6546" />
  <row Id="15603" PostId="5929" Score="0" Text="I don't understand the other previous comments, sorry." CreationDate="2019-09-23T13:30:03.743" UserId="6546" />
  <row Id="15604" PostId="5929" Score="0" Text="@user9137 Sorry for being unclear, I was trying to ask you to copy some of the examples from the essay into your post." CreationDate="2019-09-23T16:31:26.577" UserId="58" />
  <row Id="15647" PostId="5929" Score="0" Text="It would be quite difficult to copy, for how rich it is. Anyway I think it would not really help much: my original question was if someone knows where to find the tool, it implies prior knowledge of its identity: not knowing what it is sure implies not knowing where to get it :)" CreationDate="2019-10-06T19:12:39.477" UserId="6546" />
  <row Id="15613" PostId="5930" Score="0" Text="... or start with a different language?" CreationDate="2019-09-27T19:15:26.323" UserId="204" />
  <row Id="15607" PostId="5931" Score="0" Text="Even using ssh with Bluetooth kind the *environment* for programming on the phone is restrictive." CreationDate="2019-09-23T21:16:54.047" UserId="104" />
  <row Id="15611" PostId="5931" Score="0" Text="as intended. Samsung and your mobile carrier own your phone, you just give it a purpose and pay for it." CreationDate="2019-09-27T04:50:58.847" UserId="8457" />
  <row Id="15605" PostId="5932" Score="0" Text="This is more of a technology question than a teaching question." CreationDate="2019-09-23T20:37:38.333" UserId="1293" />
  <row Id="15606" PostId="5932" Score="0" Text="Auto grader sites could come and go. How to evaluate and select one could be useful. With enough rep, soon available, experience could be shared in chatroom." CreationDate="2019-09-23T21:13:51.373" UserId="104" />
  <row Id="15608" PostId="5935" Score="0" Text="It might sound ridiculous, but maybe your students are &quot;afraid&quot; of using new language constructs. Try to motivate them to play with `ipython` and to check the results and the data types of the variables they created. It really sounds like they're complete beginners and you should give them some time to get used to programming, the language constructs and the tools that are used!" CreationDate="2019-09-25T21:33:18.220" UserId="8354" />
  <row Id="15789" PostId="5935" Score="0" Text="Why the self-learning tag? Your question is what you as a teacher can do for your students, no?" CreationDate="2019-10-30T11:55:26.697" UserId="2164" />
  <row Id="15790" PostId="5935" Score="0" Text="@Flater Good catch." CreationDate="2019-10-30T12:21:00.797" UserId="27" />
  <row Id="15794" PostId="5935" Score="0" Text="Re: &quot;they have yet to cover functions&quot;... oh wow, you're going to *really hate* how much more trouble they have thinking about abstracted functions. :-/" CreationDate="2019-10-31T18:31:39.697" UserId="8137" />
  <row Id="15609" PostId="5936" Score="0" Text="These were literally my exact two first thoughts! I figured there was roughly a 0% chance that you had exactly the same guesses as me, so I would make a second answer to add in whichever of the two of them you didn't mention. :)" CreationDate="2019-09-26T01:10:23.433" UserId="27" />
  <row Id="15610" PostId="5937" Score="1" Text="Is this available for CS teachers free of charge?" CreationDate="2019-09-26T23:33:09.520" UserId="27" />
  <row Id="15612" PostId="5938" Score="0" Text="IIRC, Java was written in C++, not that that detracts from your point at all. But are you suggesting that OP begins by studying `&quot;HUMAN&quot;` or `&quot;HARDWARE&quot;`?" CreationDate="2019-09-27T13:56:19.040" UserId="27" />
  <row Id="15619" PostId="5938" Score="0" Text="https://stackoverflow.com/questions/1220914/in-which-language-are-the-java-compiler-and-jvm-written" CreationDate="2019-09-29T00:08:39.117" UserId="8457" />
  <row Id="15620" PostId="5938" Score="0" Text="learning to be human is something that is done when you are young but learning how the hardware works, atleast a basic level is required to understand what the practice of programming is in general." CreationDate="2019-09-29T00:11:10.997" UserId="8457" />
  <row Id="15615" PostId="5943" Score="0" Text="Why were you bored? Four days seems not much for a deep topic. Say something about the students and what they know. How much of algorithms? Examples only? Analysis? Taxonomy? Fun for whom?" CreationDate="2019-09-28T19:16:48.567" UserId="1293" />
  <row Id="15616" PostId="5943" Score="0" Text="I was bored because it seemed far for real world applications.&#xA;My students are 18 and are about to start learning computer science. They have never learned algorithms. So I'm trying to find a fun way to teach them that topic." CreationDate="2019-09-28T19:35:08.467" UserId="8464" />
  <row Id="15621" PostId="5943" Score="0" Text="A perfect funny approach to algorithms would be the famous Hungarian dances for sorting algorithms, which you can find on YouTube!" CreationDate="2019-09-29T05:37:56.843" UserId="8354" />
  <row Id="15625" PostId="5943" Score="1" Text="Start here for Hungarian Folk dancing: https://flowingdata.com/2011/04/14/sorting-algorithms-demonstrated-with-hungarian-folk-dance/" CreationDate="2019-09-29T14:14:58.007" UserId="1293" />
  <row Id="15784" PostId="5943" Score="0" Text="I do sorting and searching using cards.You need to ensure that you have enough, and that you don't have a simple sequence (or the students will choose other algorithms, that don't otherwise make sense)." CreationDate="2019-10-29T23:11:03.410" UserId="204" />
  <row Id="15617" PostId="5944" Score="0" Text="Thank you. I'm a little bit surprised and skeptical about teaching the Huffman coding before data structures. Do you have a more complete blueprint ?" CreationDate="2019-09-28T21:02:48.763" UserId="8464" />
  <row Id="15618" PostId="5944" Score="0" Text="I'm surprised you are teaching algorithms before data structures, actually. Huffman is pretty standard. There is a lot of information you can find, I think." CreationDate="2019-09-28T23:09:37.503" UserId="1293" />
  <row Id="15622" PostId="5946" Score="0" Text="Well the course is not intended for kids : it's for high school graduates who will start learning computing ;)" CreationDate="2019-09-29T09:45:30.433" UserId="8464" />
  <row Id="15623" PostId="5946" Score="0" Text="Oh dear. I completely missed the &quot;don't know programming&quot; part in my first version of the answer. I've tried to recover." CreationDate="2019-09-29T12:56:36.000" UserId="1293" />
  <row Id="15624" PostId="5946" Score="1" Text="@alk01771 That age group still loves to move around. I teach them just 2 months before you get them :)" CreationDate="2019-09-29T13:59:23.177" UserId="27" />
  <row Id="15629" PostId="5947" Score="3" Text="Learning programming &quot;completely&quot; is a very ambitious goal. I thought I might manage it in the 1970's, but new ideas, approaches, languages, and frameworks appeared far faster than I could learn." CreationDate="2019-09-27T21:32:07.823" UserId="6558" />
  <row Id="15630" PostId="5947" Score="0" Text="Check out the Handmade Hero series, where a game developer (Casey Muratori) is making a game and game engine from scratch in C++ and streaming the entire process. Also, Jonathan Blow -- the creator of the indie puzzle game masterpieces Braid and The Witness -- streams game development sometimes on Twitch, and this might be interesting to watch. (But, you must first complete Braid and The Witness so that you don't get spoiled. Do not google for those games, the best puzzles will be spoiled. Just play them blind.)" CreationDate="2019-09-27T23:51:47.357" UserId="1979" />
  <row Id="15632" PostId="5948" Score="0" Text="Can you explain briefly about what is OpenGL and what i can do with it?And also how it gonna help me in game development? Should i learn to make a game engine before start learning game development and making games?" CreationDate="2019-09-30T20:15:20.743" UserId="8470" />
  <row Id="15636" PostId="5948" Score="0" Text="At least a bit of own effort would be great. You find a lot about OpenGL for instance on Wikipedia. In a really short form: it's a platform independent graphics library, as mentioned above." CreationDate="2019-09-30T23:44:05.817" UserId="8354" />
  <row Id="15638" PostId="5950" Score="0" Text="Say some more about context. Why do you &quot;have to&quot; do this? Is it an assignment, or just an interest? What sorts of things about programming languages interest you? What sorts of background do you bring to the task?" CreationDate="2019-10-02T19:45:40.297" UserId="1293" />
  <row Id="15639" PostId="5950" Score="0" Text="@Buffy Thank you for your response! It is an assignment. Everything about programming languages is interesting to me, but not very specific, difficult subjects. I do not have a programming background." CreationDate="2019-10-02T21:12:32.693" UserId="8476" />
  <row Id="15640" PostId="5952" Score="3" Text="OP already took a university course in C++, and is considering using the Unreal Engine. Why should OP switch out to web dev?" CreationDate="2019-10-03T18:07:07.123" UserId="27" />
  <row Id="15641" PostId="5954" Score="1" Text="What are &quot;the main algorithms&quot; for you ?" CreationDate="2019-10-06T08:57:50.503" UserId="2103" />
  <row Id="15643" PostId="5954" Score="0" Text="The algorithm which are asked in job interview of top tech companies and in acm-icpc" CreationDate="2019-10-06T12:13:03.093" UserId="8916" />
  <row Id="15644" PostId="5954" Score="0" Text="Learning how to use an array is a first step on the long walk to learning how to program, and succeeding a job interview in a top tech company." CreationDate="2019-10-06T14:26:10.173" UserId="2103" />
  <row Id="15645" PostId="5954" Score="0" Text="The last sentence of you question is not complete (please edit)." CreationDate="2019-10-06T17:50:37.060" UserId="204" />
  <row Id="15650" PostId="5954" Score="0" Text="I am not sure how allgorithms can be discussed without their steps, and technical interviews include complexity analysis, at least at top companies. Could you clarify what you want?" CreationDate="2019-10-07T01:18:39.207" UserId="283" />
  <row Id="15648" PostId="5956" Score="0" Text="Only a very few top tech companies will use Scheme or know how to interpret an answer expressed a la SICP." CreationDate="2019-10-06T21:36:12.100" UserId="1293" />
  <row Id="15649" PostId="5956" Score="2" Text="I love that book but I don't think it's a good way to learn algorithms for technical interviews." CreationDate="2019-10-07T01:17:10.953" UserId="283" />
  <row Id="15651" PostId="5956" Score="0" Text="@Buffy I agree, so let me paraphrase my 3rd paragraph: While you may thing that you should choose a language that will be asked about in an interview, as this seems like the quickest way to arrive at where you want to be. I strongly suspect that it is faster to first learn to program (with whatever language makes this easier), and then learn a language (the one that you will be asked about)" CreationDate="2019-10-07T17:52:24.923" UserId="204" />
  <row Id="15682" PostId="5958" Score="0" Text="I wonder whether I just managed now to parse your question as you intended. Are you asking, what is the name for non-token language element? In a grammar the literals (eg tokens) are &quot;terminals&quot; &amp; everything else (rule or its associated set of expressions/strings/trees) is a &quot;non-terminal&quot;. But I had thought from your last line you that were asking about acategory containing just expression/statement/block. (Whatever you think of those as.) Can you clarify?" CreationDate="2019-10-11T19:16:07.447" UserId="2485" />
  <row Id="15708" PostId="5958" Score="0" Text="Well, what about &quot;program elements&quot; ?" CreationDate="2019-10-18T11:52:54.693" UserId="2103" />
  <row Id="15751" PostId="5958" Score="0" Text="Program elements is the main topic. The issue is some program elements are called tokens and these are the atomic pieces, what will those pieces aggregated into expressions, statements and blocks be designated by collectively?" CreationDate="2019-10-26T01:14:43.230" UserId="8489" />
  <row Id="15764" PostId="5958" Score="1" Text="Perhaps &quot;Token groups&quot; covers it. Or, perhaps &quot;Compound tokens&quot; would fit. My preference is for &quot;Expressions&quot;, &quot;Statements&quot;, &quot;Blocks&quot;. Each is different, yet composed of tokens. In social science speak, you have &quot;taboos&quot;, &quot;mores&quot; and &quot;norms&quot;. Similar functions, culturally, without being in the same &quot;classification&quot; without creating one artificially." CreationDate="2019-10-27T02:16:15.923" UserId="104" />
  <row Id="15776" PostId="5958" Score="0" Text="I like the compound tokens term. Comes closest to what I'm looking for." CreationDate="2019-10-29T00:20:15.627" UserId="8489" />
  <row Id="15652" PostId="5960" Score="0" Text="Ah yes, tokens are syntactic elements (the scanner handles these). The other three are semantic elements. The parser handles them structurally and the semantic analyzer imputes meaning to them." CreationDate="2019-10-07T20:50:11.680" UserId="1293" />
  <row Id="15662" PostId="5960" Score="0" Text="I know expressions, statements &amp; blocks end up first decomposed to tokens then after subsequent analysis meaning is imputted to. But that's not the question. My students are asking if tokens are the small elements from which these more &quot;sophisticated&quot; combinations are built, shouldn't they conceptually be grouped in a category of their own even if for learning purposes? Hence, as social scientists used to arguing over concepts, they demanded a category to embrace these &quot;higher&quot; programming constructs. Do we have one or can someone attempt to coin one for me?" CreationDate="2019-10-08T12:16:06.360" UserId="8489" />
  <row Id="15671" PostId="5960" Score="1" Text="Characters &amp; strings of characters (used in tokenizing) are smaller syntactic &amp; semantic units than tokens. You yourself have just talked about characters that mean something to the compiler. We normally talk about a &quot;pass&quot; of a compiler for which we posit new atomic parts, non-atomic groupings, input &amp; output." CreationDate="2019-10-10T06:55:30.490" UserId="2485" />
  <row Id="15674" PostId="5960" Score="0" Text="Yea, philipxy, the atomic/non-atomic characterization is    a close match. However, non-atomic applies to a much larger set than expressions, statements  &amp; blocks. That's why I hesitated to use that. However, as you said earlier  catgories are. made as needed even if imperfect. Perhaps I'll settle for that for now then keep searching and thinking of a tighter term. Thanks" CreationDate="2019-10-11T12:27:21.947" UserId="8489" />
  <row Id="15660" PostId="5962" Score="1" Text="Let me note for the record that the form you are using is actually a merging of BNF (which doesn't include * or +) and regular expressions, which do. Regular expressions normally define scanners and BNF describes parsers. BNF is strictly more powerful than regular expressions, but uses recursive forms rather than repetition. I hope you aren't confused about that. Most language definitions use both, but for very different things (scanners v parsers)." CreationDate="2019-10-08T10:08:44.237" UserId="1293" />
  <row Id="15661" PostId="5962" Score="0" Text="Let me also note that the source you point to is ambiguous. In particular &quot;a&quot; ... &quot;z&quot; is only a hint about the meaning, not the definition. Which language alphabet is implied or assumed? English, French?? I suggest that you use a more formal definition of RE and BNF than you see at that link. Otherwise you risk confusing your students if they come across the proper definitions, which many will eventually, though perhaps not for adult ed. But the instructor needs a firmer grounding in any case." CreationDate="2019-10-08T10:44:39.763" UserId="1293" />
  <row Id="15670" PostId="5962" Score="0" Text="@Buffy given the context, it would be better to ask which encoding is assumed. That was an example, they clarify it in [the next chapter](https://docs.python.org/3/reference/lexical_analysis.html#identifiers): &quot;Within the ASCII range (U+0001..U+007F), the valid characters for identifiers are the same as in Python 2.x: the uppercase and lowercase letters A through Z ...&quot;" CreationDate="2019-10-09T08:20:50.933" UserId="3472" />
  <row Id="15654" PostId="5964" Score="0" Text="Thanks, Gypsy. Always appreciate your content. I guess my writer's block came about because I was looking for rigorous definitions, when they definitely don't have to be." CreationDate="2019-10-08T06:14:28.867" UserId="8366" />
  <row Id="15655" PostId="5964" Score="2" Text="You could even have an exercise where they reduce `pizza` into a definition. Crust required other stuff maybe not. And, as a twist, there are places which serve &quot;desert pizza&quot; :)" CreationDate="2019-10-08T06:17:44.093" UserId="104" />
  <row Id="15656" PostId="5964" Score="1" Text="BTW, welcome to [cseducators.se]. Hope to see more of you around here." CreationDate="2019-10-08T06:18:34.200" UserId="104" />
  <row Id="15664" PostId="5964" Score="3" Text="I'll note here that these examples are all expressible as regular expressions. The actual power of BNF isn't needed for these." CreationDate="2019-10-08T12:53:14.387" UserId="1293" />
  <row Id="15659" PostId="5965" Score="1" Text="`play ::= act ( act* [intermission act+ ] )*` ?" CreationDate="2019-10-08T07:23:03.387" UserId="104" />
  <row Id="15665" PostId="5965" Score="3" Text="The examples are all simple forms that can be expressed (and are, actually) as regular expressions. BNF is about structure more than these indicate." CreationDate="2019-10-08T12:54:14.870" UserId="1293" />
  <row Id="15668" PostId="5966" Score="0" Text="I think you made a typo in the definition of `propulsionSystem`." CreationDate="2019-10-08T22:04:00.657" UserId="5963" />
  <row Id="15669" PostId="5966" Score="0" Text="@SolomonUcko, worse than a typo. A logical error. An infinite recursion. Oh my. Fixed now." CreationDate="2019-10-08T22:34:45.880" UserId="1293" />
  <row Id="15672" PostId="5969" Score="1" Text="Welcome to [cseducators.se]. A very interesting question, and an observation I've more or less reached as well. Research and statistics would be interesting to see." CreationDate="2019-10-10T14:56:24.320" UserId="104" />
  <row Id="15677" PostId="5969" Score="0" Text="Yes it all started with the decline of Unix and the uptake of the cheaper dos, and then MS Windows." CreationDate="2019-10-11T17:38:49.457" UserId="204" />
  <row Id="15678" PostId="5969" Score="0" Text="As for Linux, did you mean Gnu/Linux (all of the top 500 super computers, around 80% of the web, most of the internet, fastest growing OS). And Linux is just a kernel (not an operating system, Gnu/Linux is the OS), and Linux is in over half (75%) of those pesky phones." CreationDate="2019-10-11T17:43:16.603" UserId="204" />
  <row Id="15704" PostId="5969" Score="0" Text="Your edit makes the question sound a bit like a hunt for why modern technology is bad instead of a genuine attempt to figure out what is going on. If KevinWorkman is right, then there has been no decrease in computer literacy, and comparing all computer users across the different times is comparing apples to oranges, as the populations are simply different." CreationDate="2019-10-17T10:19:05.850" UserId="27" />
  <row Id="15673" PostId="5970" Score="2" Text="Google is your friend." CreationDate="2019-10-10T20:38:21.967" UserId="1293" />
  <row Id="15675" PostId="5970" Score="1" Text="Google has been not friendly lately, but I will try again. Thanks!" CreationDate="2019-10-11T15:17:24.260" UserId="6410" />
  <row Id="15676" PostId="5970" Score="0" Text="It's been noted before that most resources are not organized this way. I'm not sure why even one online resource is hard to find, but that does seem to be the case." CreationDate="2019-10-11T16:51:27.373" UserId="27" />
  <row Id="15687" PostId="5970" Score="0" Text="Jeff Erickson's page (U of Illinois) is a good source with plenty of materials, but the provided solutions are quite fragmented." CreationDate="2019-10-11T23:31:44.763" UserId="6410" />
  <row Id="15697" PostId="5970" Score="0" Text="Could you clarify *online*? Would a paper textbook whose code is available online meet your needs?" CreationDate="2019-10-15T08:26:12.443" UserId="1219" />
  <row Id="15698" PostId="5970" Score="0" Text="@PeterTaylor sure! I have access to the library and I can easily get a hard copy." CreationDate="2019-10-15T17:07:20.930" UserId="6410" />
  <row Id="15702" PostId="5971" Score="0" Text="This goes into the same direction as @Kevin Workmans answer, and I think you're onto something, but it seems like there's not much work on this issue." CreationDate="2019-10-16T06:26:57.080" UserId="8497" />
  <row Id="15679" PostId="5972" Score="0" Text="Things are not always getting better (they are mainly just getting cheaper). Unix (including Gnu/Linux) is easier than Microsoft's Windows. You don't have to use the command line, but it makes it easier for experienced users. See also the future of programming by Bret Victor -- https://www.youtube.com/watch?v=8pTEmbeENF4" CreationDate="2019-10-11T17:55:05.080" UserId="204" />
  <row Id="15680" PostId="5972" Score="2" Text="@ctrl-alt-delor I think &quot;easier&quot; is subjective. I personally do not find Unix easier than Windows. Probably depends on what you're accustomed to more than anything else." CreationDate="2019-10-11T18:08:23.337" UserId="2068" />
  <row Id="15689" PostId="5972" Score="0" Text="what is your background?" CreationDate="2019-10-12T17:34:20.697" UserId="204" />
  <row Id="15694" PostId="5972" Score="0" Text="@ctrl-alt-delor I'm not sure I understand the question. I have a BS and MS in Computer Science and I've been a software engineer for 10 years, if that's what you're asking?" CreationDate="2019-10-14T20:13:28.770" UserId="2068" />
  <row Id="15696" PostId="5972" Score="0" Text="@ctrl-alt-delor In which sense do you mean &quot;easier&quot;? The OS formerly known as MacOS claims to be the easiest OS to use, still for me it seems more like the hardest because the UI works completely differently than the UIs I'm used to are working." CreationDate="2019-10-15T08:03:39.250" UserId="8354" />
  <row Id="15699" PostId="5972" Score="0" Text="@csabinho continued in chat https://chat.stackexchange.com/rooms/59174/the-classroom ( https://chat.stackexchange.com/transcript/message/52139273#52139273 )" CreationDate="2019-10-15T18:02:27.993" UserId="204" />
  <row Id="15701" PostId="5972" Score="0" Text="Interesting point on the issue of knowledge = people * their knowledge vs. knowledge = knowledge of the persons knowing anything at all. On the first point, I definitely agree, the literacy went up, but for the latter, I think it decreased and the answers seem to agree with me, but it seems like there is only anecdotal &quot;evidence&quot;." CreationDate="2019-10-16T06:25:30.270" UserId="8497" />
  <row Id="15681" PostId="5974" Score="1" Text="Could you post some links that describe Raspberry Pi's goals of improving computer literacy? Have they said that smart phones have decreased literacy?" CreationDate="2019-10-11T18:39:35.953" UserId="2068" />
  <row Id="15683" PostId="5974" Score="0" Text="@KevinWorkman At least the part that they are trying to improve computer literacy is proven by quotes on [their web site](https://www.raspberrypi.org/about/). See: &quot;We provide low-cost, high-performance computers that people use to learn, solve problems and have fun. We provide outreach and education to help more people access computing and digital making. We develop free resources to help people learn about computing and how to make things with computers, and train educators who can guide other people to learn.&quot;" CreationDate="2019-10-11T22:14:26.003" UserId="8354" />
  <row Id="15684" PostId="5974" Score="0" Text="@csabinho To me, that sounds like they're trying to make it easier for novices to start learning about computer science. Does having more novices in the industry mean that general computer literacy is increasing, or does it mean that it's decreasing? (My point is that this question doesn't really have an answer, but it's a fun mental exercise.)" CreationDate="2019-10-11T22:39:31.170" UserId="2068" />
  <row Id="15685" PostId="5974" Score="0" Text="@KevinWorkman In my opinion they are definitely aiming to increase average computer literacy. If you just go by the average of all users it's absolutely logical that the computer literacy was at an unbeatable level back in the days when only some nerds had access to computers but in a world that gets more and more digital people should have a minimum level of digital literacy also on an abstract level, or in other words: they should understand concepts of the digital world. And of course such questions have no real and definitive answers, just as most questions on this page don't have them!" CreationDate="2019-10-11T22:51:18.377" UserId="8354" />
  <row Id="15686" PostId="5974" Score="0" Text="Another project that has this aim is micro:bit by BBC which is also used at schools in the UK!" CreationDate="2019-10-11T22:52:58.567" UserId="8354" />
  <row Id="15716" PostId="5975" Score="0" Text="Thank you very much!!" CreationDate="2019-10-19T19:19:20.053" UserId="8476" />
  <row Id="15700" PostId="5980" Score="0" Text="That's a great resource! It would be perfect if we could find also solved problems in the style of Jeff Erickson's Algorithms textbook." CreationDate="2019-10-15T22:29:30.067" UserId="6410" />
  <row Id="15718" PostId="5983" Score="4" Text="There are [Software Engineering](https://en.wikipedia.org/wiki/Bachelor_of_Software_Engineering) degrees also." CreationDate="2019-10-20T10:09:59.293" UserId="1333" />
  <row Id="15715" PostId="5985" Score="0" Text="The computer science bachelor's degrees I know don't even focus on programming in the first year, or even semester. For instance the reason for the most dropouts is math. And it gets even broader in the following years, as you mentioned." CreationDate="2019-10-18T19:40:16.400" UserId="8354" />
  <row Id="15717" PostId="5988" Score="0" Text="True, the axiomatic method was mostly a product of late 19th and early 20th century thought. It unified, rather than created (some) mathematics. But today, a lot of students learn with methods informed by that development." CreationDate="2019-10-19T20:25:41.677" UserId="1293" />
  <row Id="15719" PostId="5988" Score="0" Text="-1 for the unnecessary and debatable frame challenge. “The concept of axiomatic development in mathematics must be ranked as one of the very greatest of the Great Moments in Mathematics.” – Howard Eves, *Great Moments in Mathematics* Vol. 1, in regards to the development in Greece 350 BC." CreationDate="2019-10-20T18:46:22.430" UserId="8137" />
  <row Id="15720" PostId="5988" Score="0" Text="@DanielR.Collins  this is not a contradiction with the fact that mathematicians mostly work from top to bottom. You start from a conjecture (often false as you'll discover later), try to reduce to sub-problems (lemmas and properties) and down to commonly accepted statements. Axioms if you are encline to formality, or &quot;proof left to the reader&quot;. Or &quot;obviously&quot;." CreationDate="2019-10-21T13:24:35.127" UserId="2103" />
  <row Id="15723" PostId="5990" Score="2" Text="Considering the range of material included in the term &quot;combinatorics&quot; perhaps you could reduce the target to something which does not include the entire field of mathematics. Otherwise it just a fancy word for &quot;counting&quot;." CreationDate="2019-10-21T22:25:16.523" UserId="104" />
  <row Id="15724" PostId="5990" Score="1" Text="Also look at books named &quot;Finite Mathematics&quot;. And do you mean secondary school or university?" CreationDate="2019-10-22T00:00:26.200" UserId="1293" />
  <row Id="15725" PostId="5990" Score="0" Text="P.S need such combinatorics after which I can understand the course of data structures and algorithms. Also understand the course of computing algorithms." CreationDate="2019-10-22T03:52:35.187" UserId="8187" />
  <row Id="15726" PostId="5990" Score="0" Text="Can I tell you what the differences between the first college graduate and the last grade of school? I live in Russia, and here the education system is arranged differently. I heard that in the USA after school most go to college, and some go to university. But in fact, your college is our university, and even then our quality will be lower. This is if we compared." CreationDate="2019-10-22T03:58:01.687" UserId="8187" />
  <row Id="15727" PostId="5990" Score="0" Text="If you want to make a permanent addition to the site (that would also help many of us to answer this question and future questions like it), any contributions [here](https://cseducators.meta.stackexchange.com/questions/204/what-are-common-terms-used-in-education-in-different-countries) would be most welcome." CreationDate="2019-10-22T10:30:15.767" UserId="27" />
  <row Id="17869" PostId="5990" Score="0" Text="Secondary school means students up to about 17 years old. College and University in the US are the same thing at the undergraduate level. And there are a few top research universities called colleges: e.g. Dartmouth College. In secondary school there is no specialization, generally, and students study pretty much everything. In &quot;college&quot; there is about a 30-40 percent specialization, but many subjects studied. Only in graduate school do you see real specialization in one field." CreationDate="2021-04-04T21:05:18.453" UserId="1293" />
  <row Id="18122" PostId="5990" Score="0" Text="Of interest:  [The Stony Brook Algorithm Repository](https://algorist.com/algorist.html) Combinatorial Problems [Recommended Books](https://algorist.com/sections/Combinatorial_Problems.html)" CreationDate="2021-08-04T10:38:24.717" UserId="2516" />
  <row Id="15729" PostId="5992" Score="4" Text="That said, I seriously doubt you are &quot;too old&quot; for anything at 21. Coding boot camps and 4-year degrees in computer science are fundamentally different, but there may be value in either depending on your long-term (or even short term) career goals." CreationDate="2019-10-23T02:08:33.290" UserDisplayName="cag51" />
  <row Id="15730" PostId="5992" Score="1" Text="_[I] didn't [study computer science] because i thought that my parents won't let me_ The decision is yours, not your parents, but you seem to have established that now, _they gave me permission to do whatever I want_, at least, in principle. I don't understand your rationale -- _they were so proud when i got to one of the most prestigious college in my country_ -- why is computer science not prestigious?" CreationDate="2019-10-23T05:01:48.403" UserId="8103" />
  <row Id="15731" PostId="5992" Score="0" Text="_I found that coding bootcamp won't make you a real software engineer and it's pretty hard to find a job compared to computer science graduates_ I'm not sure what _real software engineer_ means. Nonetheless, coding bootcamp will presumable prepare you to code, whereas computer science will presumable prepare you to understand the underlying science (you'll no doubt pick up some coding skills along the way). That will have an impact on what you do next. I'd speculate that a computer science graduate has more options, because they know more, even if their coding is weaker." CreationDate="2019-10-23T05:06:40.880" UserId="8103" />
  <row Id="15732" PostId="5992" Score="1" Text="@cag51 I agree _What do you think I should do?_ is off-topic, but it seems trivial to bring the question back on-topic, e.g., _what are the differences between coding bootcamp and a computer science degree? Especially in terms of the advantages and disadvantages of each._ I've edited and voted to reopen" CreationDate="2019-10-23T05:10:56.293" UserId="8103" />
  <row Id="15735" PostId="5992" Score="0" Text="@nick012000 What does that violate? (https://academia.stackexchange.com/help/on-topic lists undergraduate admissition, life, and culture.)" CreationDate="2019-10-23T08:53:41.090" UserId="8103" />
  <row Id="15736" PostId="5992" Score="1" Text="I've migrated this question here as suggested by a few CSE users." CreationDate="2019-10-23T11:40:44.893" UserId="4464" />
  <row Id="15775" PostId="5992" Score="0" Text="Downvoted because I don't think this is a question about improving CS education." CreationDate="2019-10-28T19:46:58.857" UserId="4689" />
  <row Id="15737" PostId="5994" Score="0" Text="Yes I can see that as a problem. But on a side note: a method can be a function or a procedure (some people make a mash up of the two, but this is usually an anti-pattern, and I can't remember the case where it is not)." CreationDate="2019-10-24T18:18:59.853" UserId="204" />
  <row Id="15740" PostId="5994" Score="0" Text="*Session* also has jargon meanings." CreationDate="2019-10-25T07:15:52.217" UserId="1219" />
  <row Id="15745" PostId="5994" Score="1" Text="Are you asking about why it is _important_ to use jargon correctly or how we can _avoid_ jargon and use generic terms? I can actually say a lot more about the difference between math and CS in the use of terms _variable_ and _function_. The concepts are very different in the two fields." CreationDate="2019-10-25T12:40:49.650" UserId="1293" />
  <row Id="15746" PostId="5994" Score="0" Text="Suggest a _non-jargon_ context in which this might be important. Not a class lecture, I assume." CreationDate="2019-10-25T12:51:06.710" UserId="1293" />
  <row Id="19003" PostId="5994" Score="0" Text="@ctrl-alt-delor Anything with `getNext()` or similar both returns information and changes internal state.  Stack or queue `pop()` methods are similarly messy. There are undoubtedly more such examples, which is why the rule remains soft in most languages." CreationDate="2022-01-14T12:29:24.677" UserId="27" />
  <row Id="19006" PostId="5994" Score="0" Text="I have never heard the word 'jargon' used in a positive / normative sense, I thought it was purely derogatory. But the primary meaning is just: &quot;the language of the trade&quot;. Interesting, ya learn something new every day. But I do tend to abandon any words that become 'tainted' by negative associations, so perhaps I was just trigger happy. (Wait, could that be an unintentional pun? Language is getting very thick these days.)" CreationDate="2022-01-14T15:42:25.087" UserId="5349" />
  <row Id="19016" PostId="5994" Score="0" Text="@BenI.Yes. some people make a mash up of the two (function and procedure), but this is usually an anti-pattern. However It seems unavoidable unless using OO (OO language not needed, you can do OO in C). Just encapsulation is needed: objects with methods (functions and procedures), and data." CreationDate="2022-01-15T19:48:49.120" UserId="204" />
  <row Id="15741" PostId="5995" Score="2" Text="Your example combines a type definition and the declaration of 2 variables.  And for your students, it is probably the first occurrence of a &quot;User Defined Datatype&quot;." CreationDate="2019-10-25T11:55:23.463" UserId="2103" />
  <row Id="15742" PostId="5995" Score="1" Text="Also, why should your students buy `cartW.orangeNos `instead of the `int cartW_orangeNos` variable they already can think of? A good motivation would be a function with a cart as an argument (say, `void print_cart(struct ShoppingCart * c)`)." CreationDate="2019-10-25T12:01:46.087" UserId="2103" />
  <row Id="15749" PostId="5995" Score="0" Text="The topic is structs. The example is to illustrate structs. Are you suggesting making a function a member of the struct to handle the shopping cart data?  That would introduce more complications don't you think?" CreationDate="2019-10-25T18:53:23.773" UserId="8489" />
  <row Id="15757" PostId="5995" Score="2" Text="I suggest you make functions with structs as parameters. I definitely not recommend you to use functions as members at this stage of learning C. C is not C++." CreationDate="2019-10-26T12:36:48.040" UserId="2103" />
  <row Id="15760" PostId="5995" Score="0" Text="I see. Awesome! Your suggestion will help me kill 2 birds with one stone. It will consolidate learning of functions and at the same time underline the value of struct as a data structure.  Oh thanks bro! You made my day" CreationDate="2019-10-26T15:06:26.587" UserId="8489" />
  <row Id="15771" PostId="5995" Score="0" Text="Are you teaching out of a mainstream textbook? Usually that solves a lot of problems; people have spent a lot more time thinking, designing, and testing the scaffolding &amp; examples than you'll ever have time on your own." CreationDate="2019-10-27T19:51:16.730" UserId="8137" />
  <row Id="19005" PostId="5996" Score="0" Text="This Answer helped me because it prompted me to think a little more about *Static* and the occasional times I used it. I do still wonder if we couldn't have simpler, but accurate programming languages. Or, fewer of them. But that was a different Question..." CreationDate="2022-01-14T15:28:55.100" UserId="5349" />
  <row Id="15738" PostId="5997" Score="1" Text="You understood the opposite of what I meant: I refuse to use the language of normal people, for fear that when I use the language of the trade, my words will not be recognized." CreationDate="2019-10-25T00:50:51.367" UserId="8043" />
  <row Id="15739" PostId="5997" Score="0" Text="OK I get you now. Yes, keeping non technical usage of jargon out can help. E.g. instead of use this method, one could say: use this style for the common meaning." CreationDate="2019-10-25T06:25:17.167" UserId="8489" />
  <row Id="15748" PostId="5998" Score="0" Text="Thanks, never thought of approaching the topic close to the metal like that. Interesting." CreationDate="2019-10-25T18:46:11.967" UserId="8489" />
  <row Id="15759" PostId="5998" Score="1" Text="You'll need such considerations when describing &quot;bit-fields&quot; members, and unions." CreationDate="2019-10-26T12:42:03.723" UserId="2103" />
  <row Id="15750" PostId="5999" Score="0" Text="I like that idea of breaking up each part and drilling + using point struct. I have a feeling that should help..  Will try using that and see if it heThanks" CreationDate="2019-10-25T18:55:47.017" UserId="8489" />
  <row Id="15752" PostId="5999" Score="0" Text="Yea, Pointers presents lot of challenges too but not as bad as structs" CreationDate="2019-10-26T01:19:47.347" UserId="8489" />
  <row Id="15765" PostId="5999" Score="0" Text="Anyway in C you have to come to pointers rather quickly because of&#xA;1) strings 2) lack of parameter passing by reference. &#xA;But dynamic allocation and linked structures - often presented under the name &quot;teaching pointers&quot;  - can be safely seen much later." CreationDate="2019-10-27T08:59:32.177" UserId="2103" />
  <row Id="15747" PostId="6001" Score="2" Text="Since I know this is going to get flagged, I will preemptively post this: before flagging to close the question, please read the description for the [tag:curriculum-review] tag. This is one of a handful of special tags [available on this site](https://cseducators.meta.stackexchange.com/questions/187/introducing-the-new-tags-curriculum-review-lesson-review-and-materials-re?r=SearchResults) that are a little different from many of the other sites.  I haven't examined this question closely, but my instinct is that, with maybe a little editing, it reasonably follows the model required by the tag." CreationDate="2019-10-25T16:53:43.107" UserId="27" />
  <row Id="15767" PostId="6001" Score="0" Text="You don't seem to say much of anything about the structure of javascript at all. The fact that it is prototype based OO language is interesting, at least." CreationDate="2019-10-27T13:10:00.963" UserId="1293" />
  <row Id="15768" PostId="6001" Score="1" Text="@Dheeraj I've added it back in; it's the tag that allows this sort of question." CreationDate="2019-10-27T15:02:44.633" UserId="27" />
  <row Id="15773" PostId="6001" Score="0" Text="@Buffy How can i add more structure to it? did you mean adding more syntax and examples? those would come in the later chapters where i go deep into each of the concepts" CreationDate="2019-10-28T07:54:26.757" UserId="8543" />
  <row Id="15753" PostId="6002" Score="0" Text="The curriculum requires I teach struct as a separate topic after earlier treating arrays, functions &amp; pointers. So like you said I have to teach it's own syntax. Also bear in mind it is an intro course-." CreationDate="2019-10-26T01:30:58.800" UserId="8489" />
  <row Id="15754" PostId="6002" Score="0" Text="I don't understand your points.  x,y coordinate is a simple concept at least in the real world.  comparing structs to arrays to build on existing knowledge would probably best be done after learning arrays." CreationDate="2019-10-26T01:59:14.437" UserId="3799" />
  <row Id="15756" PostId="6002" Score="0" Text="Yea, was just telling you I got more insights from your suggestion. I did an edit that didn't come on that comment that's why you didn't see where I'm heading. I'll retry see if it will  show." CreationDate="2019-10-26T02:19:50.783" UserId="8489" />
  <row Id="15758" PostId="6002" Score="0" Text="The example of 2D or 3D coordinates automatically calls for the remark : why don't we use an array of 2 of 3 numbers? Better choose a struct with members of different types." CreationDate="2019-10-26T12:40:34.303" UserId="2103" />
  <row Id="15761" PostId="6002" Score="0" Text="I add the edit I made on my first comment that did not show up below...  Your suggestion and that of @Ben I. have spinned off in my mind this example.      &#xA;(code sample)&#xA;&#xA;struct Point&#xA;{&#xA;int x, y;&#xA;};&#xA;int main()&#xA;{&#xA;struct Point p1 = {1, 2};    //initialize var.&#xA;// p2 is a pointer to structure p1&#xA;struct Point *p2 = &amp;p1;     //create pointer&#xA;// Accessing structure members using structure pointer&#xA;printf(&quot;%d %d&quot;, p2-&gt;x, p2-&gt;y);&#xA;return 0;&#xA;}" CreationDate="2019-10-26T15:17:09.093" UserId="8489" />
  <row Id="15762" PostId="6002" Score="0" Text="Having trouble getting my code to display well. Someone help edit to get it format well." CreationDate="2019-10-26T15:20:34.760" UserId="8489" />
  <row Id="15763" PostId="6003" Score="0" Text="Yes, examples galore. I do that. Class coding galore too l do. I appreciate especially your use of complex nos, bank account &amp; library catalogue examples. You folks are really widening my repertoire of example concepts. Thanks. Keep them coming." CreationDate="2019-10-26T18:27:34.580" UserId="8489" />
  <row Id="16049" PostId="6003" Score="0" Text="How do you get to Carnegie Hall? Practice, practice." CreationDate="2020-01-13T02:17:51.107" UserId="5349" />
  <row Id="15769" PostId="6004" Score="2" Text="I wanted to say that, but I was just being more tactful in my answer as part of the &quot;be nice&quot; policy." CreationDate="2019-10-27T16:36:49.643" UserId="694" />
  <row Id="15770" PostId="6004" Score="0" Text="@BrianTompsett-汤莱恩 I love feedback so always assume that it if with love (unless proved otherwise). However I can get overwhelmed if there is too much." CreationDate="2019-10-27T17:20:47.163" UserId="204" />
  <row Id="15772" PostId="6004" Score="0" Text="The shopping cart is a hypothetical person's shopping in a week. On Mondays, cartM, Wednesday, cartW, Sunday, cartS. The goods were limited to 3 for simplicity. Remember I am teaching a first course to non-CS people." CreationDate="2019-10-28T01:40:57.647" UserId="8489" />
  <row Id="15774" PostId="6004" Score="0" Text="@MallamAwal Yes I know that. What I am saying is that it is not a good example: Not because it is simplified, but because it can not work if extended **(Try it)**, pupils will puck up on this. However they will not say to them-selves, &quot;This is a bad example&quot;, they will say &quot;I don't get it&quot;. That is they will assume that they are making the mistake. That they are interpreting it wrong, and will try to interpret it a different way." CreationDate="2019-10-28T08:47:13.747" UserId="204" />
  <row Id="15777" PostId="6005" Score="2" Text="Toss a ball to them while they are reading a book." CreationDate="2019-10-29T00:47:36.650" UserId="104" />
  <row Id="15778" PostId="6005" Score="0" Text="@GypsySpellweaver Post your answer to receive your updoots, my friend." CreationDate="2019-10-29T03:05:28.307" UserId="27" />
  <row Id="15781" PostId="6005" Score="0" Text="@GypsySpellweaver, I was trying to think of a red panda interrupt in my answer but didn't come up with anything. Sorry." CreationDate="2019-10-29T13:08:58.110" UserId="1293" />
  <row Id="15783" PostId="6005" Score="2" Text="An interrupt is like being interrupted. With the caveat that you go back to what you were doing, when you finish being interrupted." CreationDate="2019-10-29T23:02:53.560" UserId="204" />
  <row Id="15793" PostId="6005" Score="0" Text="https://tvtropes.org/pmwiki/pmwiki.php/Main/ExactlywhatItSaysOnTheTin" CreationDate="2019-10-31T18:27:37.500" UserId="8137" />
  <row Id="15800" PostId="6005" Score="1" Text="@Daniel R. Collins, yea got it. Exactly What it says on the tin... Inter...rupt!" CreationDate="2019-11-01T09:44:43.063" UserId="8489" />
  <row Id="15779" PostId="6006" Score="1" Text="Hey, I may be nasty, but I show up *before* supper!  Otherwise, how will I get fed?" CreationDate="2019-10-29T12:28:12.703" UserId="27" />
  <row Id="15780" PostId="6006" Score="0" Text="Thought you'd like that. But Ben as in Rice, not Ben as in I.  But the analogy doesn't work as well that way, though." CreationDate="2019-10-29T12:30:54.003" UserId="1293" />
  <row Id="16050" PostId="6007" Score="0" Text="I have come up with a truly remarkable proof, which this comment is too small to contain." CreationDate="2020-01-13T02:28:37.653" UserId="5349" />
  <row Id="15785" PostId="6008" Score="1" Text="You did not disappoint. That is a beautiful answer!" CreationDate="2019-10-30T03:01:31.073" UserId="27" />
  <row Id="15786" PostId="6008" Score="1" Text="I really like this activity as an explanation of interrupts, but I think it may detract from the learning of the students being interrupted or being assigned those simple tasks." CreationDate="2019-10-30T05:16:15.550" UserId="58" />
  <row Id="15787" PostId="6008" Score="1" Text="@thesecretmaster The learning of the students shouldn't be impacted as the main assignment is planned, in the prep section, specifically to be interrupted. Aside from seeming to be legitimate so that the students &quot;do&quot; it, the assigned work need have no purpose other than giving them something to &quot;do&quot; until the &quot;interrupts&quot; occur." CreationDate="2019-10-30T05:30:59.443" UserId="104" />
  <row Id="15801" PostId="6008" Score="0" Text="Yes, a good exercise." CreationDate="2019-11-01T09:47:37.690" UserId="8489" />
  <row Id="15791" PostId="6010" Score="1" Text="There are plenty of nice insights in this answer.  FWIW, when I first introduce functions to beginners, I use it as a way to introduce great, descriptive function names.  The initial benefits at first sight are that we understand easily what the (no longer) large method is doing, and we have an easier time piecing back together what the code inside the function does, thanks to the **great name**.  Using functions essentially as labels at the start gives them a clear purpose, starts students off with good naming habits, and easily leads into their further use later." CreationDate="2019-10-30T12:27:15.923" UserId="27" />
  <row Id="15795" PostId="6010" Score="0" Text="Watch out for that specific example (3-4-5 right triangle), because IME the answer is often &quot;because I memorized it [the Pythagorean triple]&quot;. Or sometimes just parroting the arithmetic sequence." CreationDate="2019-10-31T18:34:00.923" UserId="8137" />
  <row Id="15792" PostId="6011" Score="0" Text="A classic, of course. But mostly for the fact that such descriptions of process are too often lacking. What &quot;isn't&quot; an algorithm is a valuable lesson. Tie your shoelaces is even worse. I think." CreationDate="2019-10-30T14:36:37.917" UserId="1293" />
  <row Id="15799" PostId="6012" Score="1" Text="At this level, I think good projects need some scaffolding - starter code. What language are you interested in? There are a lot of things available for Java, but there is a subset of the code already in place. It is a lot to ask of a first year student to do much that is interesting from scratch, given the knowledge they have when they start the project." CreationDate="2019-11-01T09:43:17.660" UserId="1293" />
  <row Id="15796" PostId="6013" Score="1" Text="Any reason you don't want to use source control? GitHub, and specifically GitHub Classroom hits all of the other points." CreationDate="2019-10-31T22:10:03.223" UserId="30" />
  <row Id="15797" PostId="6013" Score="0" Text="I know, but this is the first time they'll code, and I try to lower the cognitive load for now. I want the students not to focus on the tools and the environment. Thanks anyway :)" CreationDate="2019-10-31T22:10:58.763" UserId="6859" />
  <row Id="15798" PostId="6013" Score="1" Text="This seems like overkill for ten students. Especially if they meet face to face. Paper printouts works, is cheap and simple. Easy to comment, also." CreationDate="2019-11-01T00:07:23.920" UserId="1293" />
  <row Id="15821" PostId="6013" Score="0" Text="@Infinity: The proper tools can hide most of Git's complexity. If you e.g. use SourceTree and help students get it set up, it requires little effort to get going and GitHub (classroom or not) does exactly what you want it to do. In general, solutions with a lot of features tend to be more complex. You're asking for a lot of features and thus some complexity is inevitable." CreationDate="2019-11-06T11:59:44.223" UserId="2164" />
  <row Id="15810" PostId="6017" Score="0" Text="_&quot;a system in which only low grades could be earned from a simpler assignment. I think that is psychologically damaging.&quot;_ It also teaches the wrong philosophy. Developers should always strive for the simplest solution that covers the needed cases. Any developer who takes on additional complexity for no other reason than showing off is a problematic developer who needs to be told to tone it down (note: in a professional context - not an educational one)" CreationDate="2019-11-05T11:36:36.643" UserId="2164" />
  <row Id="15811" PostId="6019" Score="0" Text="I disagree that **elective** additional complexity should be rewarded. It teaches the opposite of what you want developers to strive for. Good solutions minimize complexity. I'm not saying there aren't cases where the complex solution actually is better, but students are going to take underlying philosophies to heart subconsciously, and you should only ask them to add complexity when it is warranted by the requirements." CreationDate="2019-11-05T11:39:13.103" UserId="2164" />
  <row Id="15805" PostId="6022" Score="1" Text="I suspect you'll do better working by analogy than by definition, though I admit I am having trouble thinking of one of those, too." CreationDate="2019-11-03T12:34:34.243" UserId="27" />
  <row Id="15804" PostId="6023" Score="0" Text="Yea, i've grappled with it and appreciate the messiness. The word is nuanced between the languages and in the way it is used by authors that its tricky doing a satisfactorily rounded, simple definition. But iam beginning to see the light from your definition.                                 &#xA; My key take aways from your definition is, it is:  sequence of words/symbols, complete, legal, not about what the program does but how it is built up. Much insightful." CreationDate="2019-11-03T07:36:28.197" UserId="8489" />
  <row Id="15845" PostId="6023" Score="0" Text="This kind of confusion does not arise if you start with a definition like: &quot;*A computer is a metal thing with moving (electrical) parts inside that can be set up to perform desired actions.*&quot; Since a computer is not a thinking being, nothing is lost in this simplification. Then you just say: &quot;*Lazy people find increasingly complex ways to set the thing up to do repetitive actions. (see: Computer Language).*&quot; It is when we try to start the explanation somewhere else that all the problems arise. Computers *are* machines, it is the human mind and its complexity that makes them seem otherwise." CreationDate="2019-11-09T21:34:19.620" UserId="5349" />
  <row Id="15807" PostId="6025" Score="0" Text="Have you looked at repl.it?  There is a way to set up a classroom in there as well and it might tick some of the boxes..." CreationDate="2019-11-04T16:00:11.230" UserId="2706" />
  <row Id="15808" PostId="6025" Score="0" Text="Security isn't always &quot;easy&quot; or quick. Based on that points 2 and 3 are opposed. I don't know AWS, but I suspect that as long as it accepts SSH with RSA keys that AWS is not the problem. If you can resolve the conflict between #2 and #3, I believe it can be worked out rather simply. The &quot;quick distribution/setup&quot; could be resolved using a BASH script. Happy to help." CreationDate="2019-11-04T17:03:56.600" UserId="104" />
  <row Id="15812" PostId="6027" Score="0" Text="You seem to fail to understand some really fundamental things. One minor one (not the worst) is that functions (in all paradigms) are not primarily there so that you don't need to repeat yourself. That is just a by-product. A good Pascal program has a lot of functions that are called exactly once." CreationDate="2019-11-05T11:40:19.800" UserId="1293" />
  <row Id="15813" PostId="6027" Score="0" Text="@Buffy: Which is why I separately mention the purposes of abstraction and DRY. The example you're highlighting (one-reference-methods) is one of abstraction (most commonly encountered for separation of concerns)" CreationDate="2019-11-05T11:43:03.890" UserId="2164" />
  <row Id="15814" PostId="6027" Score="0" Text="And if you really conflate static and non-static methods you have a really fundamental misunderstanding of how a language like Java actually runs. The chagrin of your teachers may be well justified. Learn to use your tools." CreationDate="2019-11-05T11:43:15.483" UserId="1293" />
  <row Id="15815" PostId="6027" Score="1" Text="@Buffy: I didn't claim that there's no real-world difference between statics and non-statics during runtime. I said that my core definition of what a function/method is (i.e. a small compartmentalized algorithm) is independent of whether that function happens to be static or not. &quot;should I make this static&quot; and &quot;should I use a function/method&quot; are two questions that are independent of eachother. Both should be evaluated but their answers are not related (one's answer does not suggest the other's answer)" CreationDate="2019-11-05T11:44:45.317" UserId="2164" />
  <row Id="15816" PostId="6027" Score="0" Text="Then, I question whether you understand _scope_. These sorts of things can't really be glossed over without giving students a burden of misinformation that they will eventually have to fight their way past." CreationDate="2019-11-05T11:46:45.100" UserId="1293" />
  <row Id="15817" PostId="6027" Score="0" Text="@Buffy: Asking students who have not yet seen objects to understand scope is massively putting the cart before the horse. As of right now, OP's students (in the question) only know the global scope. And again, I'm not saying that these things (static, function, scope) should be ignored, I'm saying that they can be evaluated independently of one another (and most definitely **taught** in independent lessons before expecting students to consider them all at the same time)" CreationDate="2019-11-05T11:47:47.500" UserId="2164" />
  <row Id="15818" PostId="6027" Score="0" Text="@Buffy: It seems you think I'm dismissing static vs nonstatic as irrelevant. I'm not. What I'm saying is that when you are explaining the difference between a function and a method, what you're really explaining to me is the difference between global statics and objects (i.e. their scope difference). The core definition (a small compartmentalized algorithm) remains unchanged regardless of its scope." CreationDate="2019-11-05T11:54:47.437" UserId="2164" />
  <row Id="15819" PostId="6028" Score="0" Text="The definition is not a must. It was just &quot;sugar&quot; he wanted to add to his assignment, and seeing the diligence and zeal, he went about it, I felt we could help lend a hand. &amp; we have: with your rephrase of his definition, and explanations immediately following it + @Buffy's earlier one he is good to go. I shall let him read this thread and do a draft definition he can ultimately use. Thanks people" CreationDate="2019-11-05T15:19:33.423" UserId="8489" />
  <row Id="15846" PostId="6028" Score="1" Text="Gosh, here I was, thinking I was a teacher just so I could get paid for my students to present me with new insights day after day! Maybe I have a different definition of *teacher* and *student*." CreationDate="2019-11-09T21:43:21.313" UserId="5349" />
  <row Id="15820" PostId="6029" Score="1" Text="If I had a blog. Final version ought to be a Pulitzer." CreationDate="2019-11-06T08:57:05.700" UserId="104" />
  <row Id="15823" PostId="6029" Score="0" Text="Question: How you done software development in the workplace? While this is pretty great conceptually, it smacks over overly theoretical &quot;pure OOP&quot; philosophy that one sees in academia but not so much in real engineering work, IME." CreationDate="2019-11-06T19:22:44.277" UserId="8137" />
  <row Id="15824" PostId="6029" Score="1" Text="@DanielR.Collins, it depends on what you mean. I've never had a boss telling me what or how to write. But I've consulted to companies on their software process, which can be appalling. I mostly produce educational software (large and complex) with something over 20,000 users. And, yes, I eat my own dog food. (Actually, the last time I had such a boss was waaaaay back on a FORTRAN project.) Also. I'm focused on the first course here. I also normally use Agile software practice in conjunction with the things I recommend here. Unit tests, frequent delivery, and all that." CreationDate="2019-11-06T19:31:12.343" UserId="1293" />
  <row Id="15829" PostId="6029" Score="1" Text="@Buffy Thanks so much for your many detailed comments. This answer takes me back to MIT 6.001 SICP that I took at HP. It literally changed my whole career as I learned a whole new way of looking at programs." CreationDate="2019-11-06T20:52:24.250" UserId="4301" />
  <row Id="15830" PostId="6029" Score="0" Text="What a tour de force! This is possibly the most substantial (and possibly the most important) answer I have seen on CSEd so far. I regret only that I have but one upvote to give." CreationDate="2019-11-07T00:39:42.427" UserId="27" />
  <row Id="15831" PostId="6029" Score="0" Text="Ah, @BenI., but it put me over 26K. ;-)" CreationDate="2019-11-07T00:44:30.813" UserId="1293" />
  <row Id="15832" PostId="6029" Score="0" Text="@BenI., and as for paradigms, it turns out recent version of SQL are Turing complete. I once met a person who used it as a programming language for general purpose stuff." CreationDate="2019-11-07T00:47:58.253" UserId="1293" />
  <row Id="15833" PostId="6029" Score="0" Text="I agree with being consistent to the paradigm. &amp; for learning to teach to the dictates of a paradigm well. That presupposes some time and experience on your hand. For a man coming to teach under pressure to deliver results now, and possibly without previous such preparation, and possibly students too not previously exposed to the more  mundane syntax and previous knowledge, what do you do?" CreationDate="2019-11-07T00:56:50.717" UserId="8489" />
  <row Id="15834" PostId="6029" Score="0" Text="And also, your answer is not dense. It is what this forum is all about: letting that heavily accumulated stuff on the stack spill over to us so together we are better off. It was beautiful exposition, got many take aways from it especially the philosophy of staying consistent to the paradigm being taught." CreationDate="2019-11-07T01:03:09.877" UserId="8489" />
  <row Id="15865" PostId="6031" Score="0" Text="Thank you so much! This is what I needed and well beyond. I haven't done it yet but I will update once I do." CreationDate="2019-11-14T21:32:30.447" UserId="5614" />
  <row Id="15841" PostId="6032" Score="2" Text="&quot;Going through an array column by column is slower than row by row even though they give the same result using the same approach.&quot; Seems like that's a result of how you represent the array, rather than an inherent property of arrays." CreationDate="2019-11-08T05:37:44.210" UserId="3225" />
  <row Id="15842" PostId="6032" Score="0" Text="...ooh, maybe I misunderstood the professor. Isn’t incrementing the pointer by the size of the objects in the array less expensive than multiplying by the length of the array? Wouldn’t going column by column require n*n multiplications rather than n multiplications, making it slower for increasingly large values?" CreationDate="2019-11-08T12:33:39.360" UserId="8043" />
  <row Id="15853" PostId="6032" Score="0" Text="Presumably, you are discussing an array in which each element is itself an array, and this array represents a two-dimension array. And you're saying that when you iterate, it's faster to match your iteration nesting to the array nesting (outer iteration loop iterates over outer array). So far so good. But then your position seems to be resting on the unstated assumption that the inner arrays represent rows." CreationDate="2019-11-10T22:27:45.777" UserId="3225" />
  <row Id="15854" PostId="6032" Score="3" Text="My point is that your wording makes it sound like there is some difference between &quot;rows&quot; and &quot;columns&quot;, but it is more accurate to word it in terms of inner and outer arrays. That going by rows is faster is an aspect of the *representation*, not anything intrinsic to &quot;rows&quot;. As far as the actual data is concerned, there are no rows or columns. That's just an abstraction we place on top of it." CreationDate="2019-11-10T22:27:51.890" UserId="3225" />
  <row Id="16363" PostId="6032" Score="0" Text="@JohnnyApplesauce, many processors (CISCy ones, at least) have special addressing modes that multiply a displacement by an assortment of small (basic data sizes, mostly) constants, so &quot;address the next data item&quot; if it is up to 8 bytes long is free. Also, accessing the item next in memory is faster than grabbing one far away (today's machines rely heavily on cache, typical RAM access time is hundreds (!) of instructions worth)." CreationDate="2020-04-22T12:00:20.447" UserId="5219" />
  <row Id="15825" PostId="6033" Score="0" Text="I appreciate your enthusiasm, but the students won’t even be able to do that by the end of the class, let alone the beginning. I’m pretty sure no one but the well self-studied (whom I don’t need to reach) can even write a Python or Java quine." CreationDate="2019-11-06T19:34:06.687" UserId="8043" />
  <row Id="15826" PostId="6033" Score="0" Text="Actually a machine language Quine is a lot easier than one in Java. You don't have to carry as much of the structure of a program to get it done. Try it yourself." CreationDate="2019-11-06T19:35:42.137" UserId="1293" />
  <row Id="15835" PostId="6034" Score="2" Text="See this earlier question: https://cseducators.stackexchange.com/q/302/1293" CreationDate="2019-11-07T01:37:46.743" UserId="1293" />
  <row Id="15836" PostId="6037" Score="0" Text="The thread helped with more insight on writing them but not construction of non Computer based ones. Glad at least knowing where some online samples are. Regards. Your magnetic surface concept is more interesting for my intent" CreationDate="2019-11-07T08:52:32.417" UserId="8489" />
  <row Id="15847" PostId="6040" Score="2" Text="I think you nailed it with the distinction between different paradigms rather than just different syntax. That's really what I'm after.  I hadn't thought about SQL. That's a good one. And the report idea is on point as well." CreationDate="2019-11-10T16:13:07.783" UserId="30" />
  <row Id="15849" PostId="6040" Score="1" Text="If they write reports based on research, help them a bit with proper quoting and citations so they learn how and why to avoid plagiarism." CreationDate="2019-11-10T21:22:08.803" UserId="1293" />
  <row Id="15851" PostId="6040" Score="0" Text="Note that, according to the _Spiral_ Pedagogical Pattern, it is good for students to return (several times) to a topic with each cycle going deeper into the subject. An implication is that a first exposure need not be terribly deep if they will return later for more - even if that return is in a later course." CreationDate="2019-11-10T21:25:42.830" UserId="1293" />
  <row Id="15855" PostId="6040" Score="0" Text="I agree about the importance of ways of thinking. When I am learning a programming language I prefer a book that teaches the language from first principles, rather than a conversion from a language I already know. The point is to learn e.g. how to think about variables in the new language." CreationDate="2019-11-11T09:48:42.617" UserId="6558" />
  <row Id="15857" PostId="6040" Score="0" Text="For assemblers: an early ARM. It might even be possible to do away with the emulator and use a cheap development board. And if you want to go even lower level (although probably needing a more expensive development board), Verilog or VHDL." CreationDate="2019-11-12T09:22:36.967" UserId="1219" />
  <row Id="15906" PostId="6040" Score="0" Text="&quot;A Python program that is just &quot;misspelled Java&quot;, isn't really a Python program. It isn't pythonic, in the jargon.&quot; On the other hand, you'll have people taking an attitude of &quot;if it works, don't fix it&quot;. You might have a few students who produce actually pythonic programming, but most of them probably won't. A decent chunk probably won't produce anything functional at all because they don't plan to become programmers and they don't care about programming. Maybe you'd have better results if it's an elective taken by older students, though." CreationDate="2019-11-30T08:17:43.253" UserId="7971" />
  <row Id="15850" PostId="6041" Score="0" Text="This sounds like the 'examples of' sort of course, With students expected to somehow grok it by osmosis." CreationDate="2019-11-10T21:23:36.497" UserId="1293" />
  <row Id="15852" PostId="6041" Score="0" Text="@Buffy It was deeply, deeply awful. I abandoned CS for years as a direct result of that class." CreationDate="2019-11-10T22:02:12.623" UserId="27" />
  <row Id="15860" PostId="6042" Score="0" Text="Seems you are trying to demonstrate JavaFx drawing primitives a very non-typical way: text-based loop interface, drawing to a non-interactive Scene, avoiding all event-driven stuff." CreationDate="2019-11-13T15:06:02.877" UserId="2103" />
  <row Id="15861" PostId="6042" Score="0" Text="That's right.  The usual approach to introducing graphics early is to make a library class with static methods that can all of the ugly stuff.  In the past, when I used Swing, I could give them a template of &quot;real&quot; code.  It had a lot of boilerplate, but working within it proved quite tractable for students.  More importantly, it was something I could grow nicely into examples that worked with actual GUI design, a few weeks later.   In fact, you can see the germ of that in the Swing example I posted, in the way I use three parallel arrays to manage the x,y, and color components of a Dot." CreationDate="2019-11-13T16:56:56.237" UserId="4799" />
  <row Id="15862" PostId="6042" Score="0" Text="Managing the correct state of an entity all at once and abstraction of the necessary implementation details to reveal only the behavioral interface is the core insight of object-oriented design.  I found that student were able to transition from what you see here to that insight very easily." CreationDate="2019-11-13T16:57:00.257" UserId="4799" />
  <row Id="15859" PostId="6047" Score="1" Text="Is this a [tag:self-learning] question?" CreationDate="2019-11-13T14:02:24.307" UserId="27" />
  <row Id="15858" PostId="6049" Score="0" Text="I am only a TA. Also, these students will likely freak out knowing that they will be introduced to **three** new things (C, x86-64 asm, and Forth). Your suggestion can help other teachers though!" CreationDate="2019-11-12T23:17:47.117" UserId="8043" />
  <row Id="15863" PostId="6049" Score="0" Text="@JohnnyApplesauce -  It depends how much you want to stretch you students' brain. C is close enough to other languages to be of little comparable (to Forth) interest. You can ignore ASM, to understand Forth student just to have understand the RAM memory and stack (no ASM commands are necessary). And Forth has interactive commandline interpreter, very easy (and fun) to poke around." CreationDate="2019-11-13T22:17:13.087" UserId="1480" />
  <row Id="15866" PostId="6051" Score="0" Text="What is your purpose in considering it? In fact, nearly everything is available somewhere, but people still write. Your last sentence talks about &quot;value&quot;. Value to whom?" CreationDate="2019-11-15T21:37:26.717" UserId="1293" />
  <row Id="15867" PostId="6051" Score="0" Text="I would like to create a community of inexperienced developers(with &lt; 2 years of experience) so I can offer them mentorship. I know how much I needed some seniors when I had no experience to give me guidance and explain things that I couldn't understand alone. For example, I can tell them to read about SOLID principles or design patterns and then if they don't understand clearly I can help them. But before I offer them mentorship I must &quot;prove&quot; somehow that I am a good choice for them. I think writing tutorials is a good way. Also, in a few topics, I can write really advanced tutorials." CreationDate="2019-11-15T21:44:35.767" UserId="8615" />
  <row Id="15868" PostId="6051" Score="0" Text="Are you also one of the inexperienced ones? Or a teacher? Mentor?" CreationDate="2019-11-15T21:54:14.860" UserId="1293" />
  <row Id="15869" PostId="6051" Score="0" Text="I have 4 years of good experience, I would like to become a mentor. I was mentoring a few colleagues at work and I think that they learned a lot from me." CreationDate="2019-11-15T21:56:28.623" UserId="8615" />
  <row Id="15870" PostId="6053" Score="0" Text="Could you provide links to such Arduino videos, preferably ones that have source-code attached?" CreationDate="2019-11-16T23:17:02.100" UserId="8043" />
  <row Id="15871" PostId="6053" Score="0" Text="@JohnnyApplesauce [here's](https://makezine.com/2016/08/31/dog-simple-arduino-controlled-plant-watering/) Make's description of how such a project could work, with a link to the source code and an instructable. No video, but pictures. I'd suggest googling 'cool arduino projects' or 'cool [technology] projects' and it'll give you stuff you're looking for." CreationDate="2019-11-17T00:45:00.727" UserId="919" />
  <row Id="15872" PostId="6056" Score="0" Text="If the thing being learned is coding, and the project is complete and working. Feedback on sections of it could be received by posting on [codereview.se]. Just follow their rules for what/how to post." CreationDate="2019-11-18T23:41:12.510" UserId="104" />
  <row Id="15889" PostId="6063" Score="0" Text="Thank you for posting this!" CreationDate="2019-11-26T17:54:15.603" UserId="27" />
  <row Id="16934" PostId="6064" Score="0" Text="A lot of this also requires a working background in mathematics, i.e. you don't need to be a mathematician, but you should be able to apply mathematics to solve your problems. In machine learning there's a lot of linear algebra and basic calculus, so I'd say that you should plan on acquiring these skills. Some people learn best in the abstract, i.e. math in isolation, applications once the math is learned. Other people (like me) find most abstract math a big bummer and learn the theory best through the applications. Whatever works for you is OK, but math here is not avoidable - it's funamental" CreationDate="2020-08-31T17:42:43.883" UserId="9440" />
  <row Id="15891" PostId="6073" Score="15" Text="At that age, they're sponges. It'll give them problem solving skills early, plus the gratification of creating something that they can enjoy in a relatively short time." CreationDate="2019-11-29T07:56:19.203" UserId="1446" />
  <row Id="15892" PostId="6073" Score="4" Text="I don't think there's much point. It's like trying to teach everyone to be a concert pianist or car mechanic at that age. But we have this 'everyone must be a coder' mindset at the minute, whereby what we really need is a 'everyone must be computer literate and know how to be safe online' mindset." CreationDate="2019-11-29T12:27:38.223" UserId="8659" />
  <row Id="15895" PostId="6073" Score="4" Text="How is coding different from anything else that you teach a child? In all cases, they're only going to apply it in a professional context at least a decade down the line." CreationDate="2019-11-29T15:49:32.247" UserId="2164" />
  <row Id="15896" PostId="6073" Score="3" Text="@AlanB: There is more to it than computer literacy. As the world automates itself more and more, manual labor jobs are being replaced by automation, but higher level jobs (i.e. the ones that work _with_ automation) are opening up. A simple example would be to highlight the disappearance of production line worker jobs, with a simultaneous increase in production line robot mechanics and (by extension programmers). Coding is an exercise in analytics (not too dissimilar from what math already teaches), which provides a base layer for these employment sectors." CreationDate="2019-11-29T15:56:33.440" UserId="2164" />
  <row Id="15899" PostId="6073" Score="7" Text="What's the point in teaching kids music, if they [usually] can't become a concert pianist until at least a decade later?" CreationDate="2019-11-29T16:19:31.053" UserId="4731" />
  <row Id="15900" PostId="6073" Score="0" Text="Music = computer literacy &amp; online safey, concert pianist = software development, broadly." CreationDate="2019-11-29T16:24:08.760" UserId="8659" />
  <row Id="15902" PostId="6073" Score="0" Text="@LightnessRaceswithMonica the real question is why teach kids music if 99.9% of them won't ever become a professional musician..." CreationDate="2019-11-30T00:52:13.620" UserId="8664" />
  <row Id="15903" PostId="6073" Score="0" Text="@JonathanReezSupportsMonica Basically the same question. Answer: who gives a ##### who becomes a professional musician?" CreationDate="2019-11-30T01:47:32.440" UserId="4731" />
  <row Id="15904" PostId="6073" Score="0" Text="@LightnessRaceswithMonica its a different question as ~90% of future employees will deal with some forms of software in their work, quite unlike music" CreationDate="2019-11-30T02:26:15.190" UserId="8664" />
  <row Id="15905" PostId="6073" Score="0" Text="In the case of Australia, in the end the answer is ultimately &quot;because it's on the National Curriculum&quot;. Not sure if that counts as an Answer, though." CreationDate="2019-11-30T08:02:06.793" UserId="7971" />
  <row Id="15907" PostId="6073" Score="1" Text="@AlanB Take your car mechanic example. Every professional driver should know how to change a tire, how to pressure a tire, how to change motor oil, refill wiper fluid, etc.  Why is this? Because it's economical to be able to do simple maintenance of your work tools yourself. Pretty much every single job *already* uses software and the software part keeps growing, so every child is going to be a professional software user in the future and needs to be able to solve the equivalent software tasks. The only real difference is that software is more complicated, so it's harder to pick up on the job." CreationDate="2019-11-30T11:35:05.977" UserId="8668" />
  <row Id="15908" PostId="6073" Score="0" Text="@JonathanReezSupportsMonica And yet, despite that, we _do_ teach kids music, which is exactly the point: it shows that future career prospects and/or using this stuff in a job is _irrelevant_. So, no, it's not a different question." CreationDate="2019-11-30T14:49:08.720" UserId="4731" />
  <row Id="15913" PostId="6073" Score="0" Text="because some kids might be smarter than you and me and because you can learn a lot of simple concepts from programming, that would help you to develop your rational thinking and teach you to make sense of a complex process by analyzing it step by step" CreationDate="2019-11-30T19:18:16.227" UserId="8111" />
  <row Id="15914" PostId="6073" Score="0" Text="@LightnessRaceswithMonica at the very least it's a different answer because teaching software can be justified with &quot;the kid will use it at work in one way or another&quot;. Teaching music doesn't have a practical justification, it's just something that people do for entertainment." CreationDate="2019-11-30T19:28:51.907" UserId="8664" />
  <row Id="15915" PostId="6073" Score="0" Text="@JonathanReezSupportsMonica You are so way off the mark" CreationDate="2019-11-30T23:41:53.387" UserId="4731" />
  <row Id="15916" PostId="6073" Score="0" Text="@LightnessRaceswithMonica Asked a [follow up question about this](https://parenting.stackexchange.com/questions/39210/are-there-proven-practical-benefits-from-teaching-music-to-children)" CreationDate="2019-11-30T23:46:15.150" UserId="8664" />
  <row Id="15919" PostId="6073" Score="0" Text="We should be teaching everyone basic computer literacy, how to keep their data secure and how to stay safe online. 'Dealing with software' &lt;&gt; being a developer. If we need more developers we should be identifying the girls and boys with natural ability early on and helpiing them down that specialised path. It's a complicated field, it's only going to get more complicated." CreationDate="2019-12-02T09:01:42.017" UserId="8659" />
  <row Id="15893" PostId="6074" Score="0" Text="Could you please elaborate &quot;pattern of thoughts&quot; a little bit more?" CreationDate="2019-11-29T14:10:35.293" UserId="8654" />
  <row Id="15894" PostId="6074" Score="1" Text="@gpuguy, that is pretty hard to do &quot;a little bit&quot;. It would take a long answer (maybe to a suitable question). But the ways of thought in mathematics are different from those of pure science and both of those are different from literature. I used to like Apple Computer's catch phrase &quot;Think Different&quot;. More generally, analysis and synthesis are different modes of thought. There are a lot of possibilities. The more angles you have to attack a problem the more likely you will be able to come to a solution." CreationDate="2019-11-29T14:15:11.393" UserId="1293" />
  <row Id="15901" PostId="6074" Score="0" Text="CSunplug is quite interesting! Thanks for sharing." CreationDate="2019-11-29T23:40:44.400" UserId="8654" />
  <row Id="15912" PostId="6074" Score="0" Text="Unfortunately Apple should have used an adverb to modify the verb. &quot;Think Differently&quot;. But maybe it was a command to think about the word &quot;different&quot;." CreationDate="2019-11-30T18:30:54.510" UserId="8672" />
  <row Id="16084" PostId="6074" Score="0" Text="*For just about anyone, having several different &quot;ways of thinking&quot; gives you an advantage as you grow.*  Sums it all up in one simple sentence." CreationDate="2020-01-18T15:51:18.733" UserId="2516" />
  <row Id="18089" PostId="6074" Score="0" Text="@Buffy &quot;There have been recent studies showing young students spending too much time looking at screens in more or less nonproductive ways&quot; - could you share some with us? Usually, there is a problem with reproducing the experiment, I'd like to take a look at cross-articles about the subject." CreationDate="2021-07-09T15:32:57.367" UserId="6387" />
  <row Id="18090" PostId="6074" Score="0" Text="@paus. Google: &quot;screen time for youngsters&quot;. I use Duck Duck Go, but the results should be similar. Look for links to CDC, for example." CreationDate="2021-07-09T15:39:31.970" UserId="1293" />
  <row Id="18091" PostId="6074" Score="0" Text="@Buffy https://www.cbc.ca/news/health/screen-time-children-depression-1.3340530 &quot; Youngsters who spend too much time staring at televisions and computers may be more depressed than those who abstain completely, but kids who enjoy screen time in moderation may be the happiest of all, a recent analysis suggests. &quot; - controversially" CreationDate="2021-07-09T15:44:03.623" UserId="6387" />
  <row Id="18092" PostId="6074" Score="0" Text="@Buffy oh, found it: http://weeklyview.net/2019/01/31/the-dangers-of-too-much-screen-time-for-youngsters/" CreationDate="2021-07-09T15:44:56.973" UserId="6387" />
  <row Id="15917" PostId="6084" Score="1" Text="There are places where math and programming overlap, of course, but they really are different modes of thinking. Either can contribute to the other, as you say, and especially where they overlap. And you are certainly correct that math isn't a prerequisite." CreationDate="2019-12-01T12:23:29.780" UserId="1293" />
  <row Id="15921" PostId="6084" Score="0" Text="Programming immanentizes manipulation of symbols♥" CreationDate="2019-12-02T13:29:53.410" UserId="8674" />
  <row Id="15922" PostId="6084" Score="0" Text="That should be on a sweatshirt, I think." CreationDate="2019-12-02T13:34:25.690" UserId="1293" />
  <row Id="16161" PostId="6085" Score="0" Text="The author has decided not to publish solutions. See [here](http://jeffe.cs.illinois.edu/teaching/algorithms/hwex.html#solutions)." CreationDate="2020-02-17T19:25:48.860" UserId="67" />
  <row Id="15931" PostId="6087" Score="0" Text="I like this. You can get a reasonably good grade by understanding the crucial core of the class, and an excellent grade by doing the extras. It's fair, practical, and transparent to the students. It also allows them to make smart decisions, like implementing the minimum functionality first instead of having to decide right at the start between the simple and ambitious project. In that sense, I think this solution is &quot;safer&quot; than Buffy's." CreationDate="2019-12-10T09:41:06.517" UserId="8696" />
  <row Id="15923" PostId="6088" Score="1" Text="This isn't exactly a question about how to teach or about best educational practice.  With a bit of modification, though, it could easily fit in this forum. (Plus I have an answer I would love to give if it could be made to fit)" CreationDate="2019-12-05T19:24:42.003" UserId="27" />
  <row Id="15925" PostId="6088" Score="0" Text="@BenI A little modification. **If** we can show that it has high probability of being true, then it should inform teaching." CreationDate="2019-12-07T08:16:49.037" UserId="204" />
  <row Id="15924" PostId="6089" Score="0" Text="This might be better on math educators: https://matheducators.stackexchange.com/. I know of a great book, but it is old, and not accessible to beginners. Also, no code (old old old)." CreationDate="2019-12-07T00:43:36.127" UserId="1293" />
  <row Id="17347" PostId="6089" Score="0" Text="Why not just do problem solving using the GLPK? It coms with a MathProg compiler and a manual. You can introduce the concepts using a workshop approach." CreationDate="2020-11-30T07:47:10.907" UserId="8007" />
  <row Id="15936" PostId="6090" Score="0" Text="There has been research on whether using &gt; vs &gt;= leads to more or fewer errors. (I think the upshot is that people make fewer errors when they use one method consistently instead of trying to be clever.) We often must use &quot;open intervals&quot; where the starting point is an absolute number, like &gt;= 0, and the upper bound is a &lt; comparison, like: 4.9999 is OK but 5.0000 is right out. I used to teach that routinely, from the section of the textbook on Range Comparisons. Not sure anyone really got it, but to me it made sense. Of course, you could say: IF 5.0 NOT &lt;= x THEN... DeMorgan and all that." CreationDate="2019-12-15T01:08:09.980" UserId="5349" />
  <row Id="15935" PostId="6091" Score="0" Text="I guess I tend to use &quot;Yoda Comparisons&quot; because I was trying to avoid the C error of using = when I meant ==. If I try to assign x to zero, the compiler will not let me. Also, constants tend to be shorter than variables, especially in an OO context. So several comparison lines in succession would all be something like &quot;0 &lt; abcdef.ghe.jkmnop.qrstu(wxyz)&quot;  and it would be easy to read the thing compared against instead of having to hunt for it at the far right of the lines. So, to me &quot;while (0 &lt; whatever)&quot; is good. I know the big long string is the variable part, I want to know the constant." CreationDate="2019-12-15T00:59:34.773" UserId="5349" />
  <row Id="15933" PostId="6092" Score="1" Text="Just to point out a difference, if I walked away from SO answers I am writing (without submitting) as much as I did for mentoring, I wouldn't be in a mentoring job for long. That makes a significant difference in reliability and thus value." CreationDate="2019-12-13T12:00:25.163" UserId="2164" />
  <row Id="15926" PostId="6093" Score="0" Text="Thank you for your very detailed answer, I appreciate it!" CreationDate="2019-12-07T21:14:52.827" UserId="8691" />
  <row Id="16011" PostId="6095" Score="0" Text="Indeed, i believe automata/formal languages course was a pre-req for compilers; nevertheless, we covered the necessary elements of CFGs at the beginning of compilers." CreationDate="2020-01-01T15:28:59.893" UserId="6137" />
  <row Id="15927" PostId="6096" Score="1" Text="Welcome to [cseducators.se]. Nice first post. I hope we get to hear more from you!" CreationDate="2019-12-09T12:00:12.770" UserId="27" />
  <row Id="15937" PostId="6097" Score="0" Text="While your statement is true for many written and spoken languages, I think that programming has different needs. Also, some languages reverse word order, so 90kg &lt; Joe would be normal. When I am scanning code, I like to locate the constants. I can guess that the other part is a variable. Constants dictate what will happen, variables are just along for the ride." CreationDate="2019-12-15T01:14:39.580" UserId="5349" />
  <row Id="15934" PostId="6099" Score="0" Text="see alse https://cseducators.stackexchange.com/q/2897/204 (you may be able to answer, or if not reconsider what you will be teaching)." CreationDate="2019-12-14T11:06:31.147" UserId="204" />
  <row Id="15938" PostId="6099" Score="0" Text="Are there no practical prerequisites for the course (e.g., Intro to Web Development, or the like)? Just open to anyone whatsoever?" CreationDate="2019-12-17T05:26:48.123" UserId="8137" />
  <row Id="17636" PostId="6099" Score="1" Text="If you are teaching web I really suggest you check this road map https://github.com/kamranahmedse/developer-roadmap  especially for frond-end" CreationDate="2021-02-04T06:53:31.267" UserId="9884" />
  <row Id="15941" PostId="6104" Score="0" Text="Can you please include their expected education level for JavaScript and html? I am assuming that this is being run from the browser due to the use of prompt and alert, is that true?" CreationDate="2019-12-19T18:29:46.913" UserId="2461" />
  <row Id="15942" PostId="6104" Score="2" Text="@TravisJ This is all they are expected to know for this lesson. They have built an HTML page with a Jeopardy! type game using tables and the button calls this function with an onclick=&quot;&quot; This level of class is being introduced to functions, variables, alerts, prompts, and if/else (the score formula and += and -= are only added because what good is a game without points)." CreationDate="2019-12-19T18:41:08.417" UserId="8720" />
  <row Id="15943" PostId="6104" Score="1" Text="Thanks, the background makes a lot of difference for how to approach the subject." CreationDate="2019-12-19T18:44:00.943" UserId="2461" />
  <row Id="15945" PostId="6104" Score="0" Text="Sorry, but I don't understand. Is the alternative to include a loop in a single &quot;function&quot;?" CreationDate="2019-12-19T20:44:09.273" UserId="1293" />
  <row Id="15946" PostId="6104" Score="2" Text="@Buffy - The correct way would be to create a producer of these questions, and then instantiate the set of question instances for use. That is way too over the top for this situation." CreationDate="2019-12-19T21:08:42.073" UserId="2461" />
  <row Id="15952" PostId="6104" Score="0" Text="@Buffy I used the following for an advanced group:&#xA;```&#xA;let values = {&#xA;  question1: {&#xA;    btnID: 'btn1',&#xA;    questionText: &quot;What body system contains the heart, blood, arteries, and veins?&quot;,&#xA;    correctValue: &quot;circulatory&quot;,&#xA;    pic: 'btn1pic',&#xA;    questionValue: 100,&#xA;  },&#xA;```&#xA;```&#xA;function askQuestion(question)&#xA;{&#xA;  var answer = prompt(question.questionText);&#xA;   if (answer &amp;&amp; answer.toLowerCase() === question.correctValue) {&#xA;    alert (&quot;Correct!&quot;);&#xA;     score += question.questionValue;&#xA;  }&#xA;  else {&#xA;    alert (&quot;Sorry, incorrect.&quot;);&#xA;     score -= question.questionValue;&#xA;  }&#xA;}" CreationDate="2019-12-20T14:11:56.953" UserId="8720" />
  <row Id="15955" PostId="6104" Score="1" Text="I think that means you could avoid the alerts and maybe the prompts with something you write yourself to take input from a text field and write somewhere suitable in the html. That code would be pretty simple to understand yet safe to ignore at this point." CreationDate="2019-12-20T14:34:24.503" UserId="1142" />
  <row Id="15959" PostId="6104" Score="0" Text="In early high school (age 15-16) we learned functions in C++...and we were using Windows 95, so compiling and debugging was a serious matter. I think your middle schoolers can handle it!" CreationDate="2019-12-20T22:02:41.787" UserId="1407" />
  <row Id="15965" PostId="6104" Score="5" Text="I'll try again: **Please don't use Javascript to teach programming**. The syntax is confusing for beginners. The language itself is a constantly-moving target. I don't even know whether terminating lines with semi-colons is even good practice these days. ES6 has added a whole load of extra confusion. It's just quite annoying in general, and gets in the way of the actual **learning**, which is the important part. I really don't know why you don't use an interactive Python interpreter. Once they know how to structure a program, the syntax is superfluous, so they can move on to JS at that point." CreationDate="2019-12-21T13:45:50.610" UserId="4047" />
  <row Id="15971" PostId="6104" Score="0" Text="@AaronF: Here, have some brownie points, you're 100% right." CreationDate="2019-12-22T15:43:29.683" UserId="2021" />
  <row Id="15972" PostId="6104" Score="0" Text="@AaronF The only advantage of Python I can see is that it forces even beginners to use proper indentation. But JS is a totally fine language with its C/Java-style syntax. About every modern language is under constant development, that's really not a problem. And btw, yes, it still is a standard best practice to terminate your statements (not all lines) with semicolons." CreationDate="2019-12-22T17:11:07.493" UserId="660" />
  <row Id="15977" PostId="6104" Score="2" Text="@Bergi: JS is simply too weird compared to Python/Java/Ruby or even C/C++. It's unlike any other programming language, and it's so weakly typed that it's easy to miss/hide/ignore bugs. There are millions of people writing Javascript even though they don't really understand it, and there are Javascript teachers who don't really understand it either. It's possible to write great pieces of software with Javascript but it requires a lot of knowledge and discipline." CreationDate="2019-12-22T19:10:02.260" UserId="2021" />
  <row Id="15953" PostId="6106" Score="2" Text="Advice is always good as I am not a pro so criticism welcomed. &#xA;&#xA;There is a lot of background not in my original post with what the students have already studied. They have learned block-based coding (Scratch) and this &quot;function&quot; relates to previous blocks and concepts learned in Scratch. It isn't perfect but is intended to extend the previous learning while learning a small bit of JavaScript. They have also spent a semester learning some basic HTML/CSS. We use a platform called Trinket.io as our sandbox. It has limitations but is decent.&#xA;&#xA;By the way, I like idea of making code &quot;poetry.&quot;" CreationDate="2019-12-20T14:22:21.800" UserId="8720" />
  <row Id="15957" PostId="6106" Score="1" Text="If you are purely looking at introducing JavaScript the language on its own, I think this is great advice, and in general outlines standardized approaches to single language instruction. However, in this instance, I think it is important to consider that Bill is introducing JavaScript as another step in building a minimal web application. The introduction of JavaScript should be considered with a holistic view of the current project. Converting to the classical approach of using method best practice would possibly be confusing at that point to these students who are 12-14 years old." CreationDate="2019-12-20T19:17:05.850" UserId="2461" />
  <row Id="15961" PostId="6106" Score="0" Text="@Buffy Can you expand on the &quot;intention revealing names&quot;? I thought that askQuestion, answer, and score would be good names since that is what they are doing. &quot;askQuestion1()&quot; deals with the first question and asks it. The &quot;answer&quot; is the answer that the user enters and the &quot;score&quot; is their points after answering the question. I want to understand better myself as I am self-taught and want to learn best practices." CreationDate="2019-12-20T22:24:18.553" UserId="8720" />
  <row Id="15962" PostId="6106" Score="0" Text="The function names are my main issue. The others are fine. The function names here have no semantic meaning. What is the semantic difference between the two question names? AskCirculatoryQuestion has semantic meaning." CreationDate="2019-12-20T22:40:27.340" UserId="1293" />
  <row Id="15963" PostId="6106" Score="0" Text="@Buffy I see what you are saying now. Thanks." CreationDate="2019-12-20T23:05:24.447" UserId="8720" />
  <row Id="15970" PostId="6106" Score="0" Text="Some refactoring wouldn't hurt either -- that's a lot of copy/pasting." CreationDate="2019-12-22T15:21:42.513" UserId="3373" />
  <row Id="15973" PostId="6106" Score="0" Text="@Buffy While I agree that simple and pure functions like `maxOfTwo` or `medianOfThree` are better for learning features and syntax, having some &quot;driver code&quot; is equally important, showing a concrete use case where the functions are going to be called, like in the score computation of the quiz game. Being able to try out the effects of the their coding in an example application is good for motivation, even more important for younger kids." CreationDate="2019-12-22T17:24:22.047" UserId="660" />
  <row Id="15974" PostId="6106" Score="0" Text="@DanMašek The copy-pasting is intentional - the abstractions features necessary to reduce the duplication were not yet introduced in the lesson. (Although functions themselves are the ultimate reusability abstraction, so they could help a bit here). However I agree that repeating the code 10 times (as suggested in the OP) is definitely too much. One or two repetitions should be enough." CreationDate="2019-12-22T17:27:45.730" UserId="660" />
  <row Id="15975" PostId="6106" Score="0" Text="@Bergi I'd say there's still opportunities, even if all they know is parameter-less functions and variables. The score offset could be made a variable instead of writing the constant in two places. Total score could be displayed in a separate function. Although ideally, an different scenario/example would probably be more fitting, one where the different functions do different things." CreationDate="2019-12-22T17:41:01.927" UserId="3373" />
  <row Id="15976" PostId="6106" Score="0" Text="@Bergi, actually I assumed the functions would be presented in a wider context in which the names make sense." CreationDate="2019-12-22T17:53:27.637" UserId="1293" />
  <row Id="15968" PostId="6108" Score="0" Text="Thanks. Actually, that is the path we have followed. We started with Scratch and have moved on to HTML and CSS. Now we are adding just a couple of JS tools to introduce them to JS (we have actually changed our curriculum to start JS in Minecraft Education Edition but these students have missed that). Since they have those basic concepts in place (sequences, loops, conditionals/logic, variables, etc.), we started with alerts and prompts in JavaScript. I wanted to make it a little more fun with the quiz game so I added this &quot;function.&quot;" CreationDate="2019-12-22T02:50:09.460" UserId="8720" />
  <row Id="15967" PostId="6110" Score="0" Text="My guess would be that there's a better technique than brute force, especially considering that multiple strings may have the same md5 hash..." CreationDate="2019-12-21T21:41:48.623" UserId="58" />
  <row Id="16028" PostId="6110" Score="0" Text="Unless the string is constrained to just a few characters, then you have no chance.  There are some weaknesses in md5, but I doubt that they will help to crack an arbitrary hash." CreationDate="2020-01-07T17:50:16.163" UserId="204" />
  <row Id="15969" PostId="6111" Score="2" Text="Welcome, fellow teacher :)" CreationDate="2019-12-22T14:02:10.923" UserId="27" />
  <row Id="15983" PostId="6112" Score="1" Text="Sorry, but &quot;can't learn&quot; and &quot;difficult to learn&quot; are completely different." CreationDate="2019-12-23T12:13:51.510" UserId="1293" />
  <row Id="15989" PostId="6112" Score="0" Text="@Buffy: Re: &quot;can't&quot; vs. &quot;difficult&quot; -- they're not the same, but one is evidence for the other. Especially in the overall context of the rest of my answer." CreationDate="2019-12-23T18:29:14.213" UserId="8137" />
  <row Id="15990" PostId="6112" Score="0" Text="Actually no. People drop out for a lot of reasons. They fail to learn for a lot of reasons. One is poor teaching. Another is no real desire to learn. Sometimes when a field is advertised in the popular press as having good employment prospects (CS often) people flock to it with no idea about what it is and then drop out when they learn it is hard work. But, desire is the key, not any innate ability or lack of it." CreationDate="2019-12-23T19:46:33.707" UserId="1293" />
  <row Id="15991" PostId="6112" Score="0" Text="Hmmm. You down vote my answer for lack of evidence, I see. But I happen to know (and have worked with) some of the people you mention here and they don't come to the same conclusion you do, so your &quot;evidence&quot; is misleading.." CreationDate="2019-12-23T19:51:24.547" UserId="1293" />
  <row Id="15992" PostId="6112" Score="0" Text="@Buffy: I would be skeptical of that. If you could link to the counter-conclusions by some of those people I think that would be very valuable for all of us." CreationDate="2019-12-23T22:44:02.293" UserId="8137" />
  <row Id="15994" PostId="6112" Score="0" Text="They have a public presence. You could ask yourself." CreationDate="2019-12-24T12:55:02.630" UserId="1293" />
  <row Id="15995" PostId="6112" Score="0" Text="@Buffy: You've made positive claims and the burden of proof for them is on you. You haven't even told us which of the people referenced in my answer you're talking about." CreationDate="2019-12-24T18:10:07.513" UserId="8137" />
  <row Id="21652" PostId="6112" Score="0" Text="Ok, I think the Formal Operations part has to be crucial to the 'answer' . Also Executive Functioning (focus, persistence, winnowing options) and, yeah, desire. All Of The Above. But without Formal Ops, boy, it's going to be tough sledding. We have to teach that *before* college, it's almost too late by then. Thus the &quot;can't learn this&quot; aspect. If you're not a gymnast by age 10, you probably never will be. Programming is kind of like watching yourself think and then manipulating *that*. Few people tend to do it. But enough about me." CreationDate="2024-02-03T12:42:00.860" UserId="5349" />
  <row Id="15999" PostId="6115" Score="0" Text="Not to mention the tremendous benefits to students who did the assignment, but now get to see a bug-free version with better coding style, or to the students who almost got there, and now get to understand what they missed while they were working on the lab itself." CreationDate="2019-12-26T19:20:07.547" UserId="27" />
  <row Id="16014" PostId="6125" Score="0" Text="I'm not sure you are approaching this correctly. Has she asked for your help? You cannot &quot;make&quot; someone enjoy something. Should your question be reworded to ask what parts of programming could be fun (although I think that is opinion based) or something else?" CreationDate="2020-01-03T10:49:55.153" UserId="2357" />
  <row Id="16016" PostId="6125" Score="0" Text="@RoryAlsop Yes, she has asked me to teach her how to program, and during my teaching, I noticed that she doesn't like programming at all. How should I approach it then? She said that she has no choice but to learn it, so I thought maybe making her not hate it is the best approach?" CreationDate="2020-01-03T17:26:07.500" UserId="8774" />
  <row Id="16017" PostId="6125" Score="0" Text="@Buffy Partially, I mentioned that link in my question, too. In the &quot;What I have tried section&quot;. The answers in that link didn't quite work for her." CreationDate="2020-01-03T17:29:27.533" UserId="8774" />
  <row Id="16018" PostId="6125" Score="0" Text="@Buffy I have edited the question to make it more clear that it is different" CreationDate="2020-01-03T17:41:20.293" UserId="8774" />
  <row Id="16019" PostId="6127" Score="1" Text="Guessing that there could be thousands of examples, could you supply some form of constraints, or objectives to the list? Or, at the least, supply information helpful in determining what &quot;interesting&quot; might entail. Stock prices/values might be interesting to an economics major, not so much to a teenage student." CreationDate="2020-01-04T04:32:16.553" UserId="104" />
  <row Id="16020" PostId="6127" Score="0" Text="They are computer science student and they would be very happy to know they can contribute in any area: science, economy, finance, transportation, engineering, etc." CreationDate="2020-01-04T17:47:38.067" UserId="6410" />
  <row Id="16021" PostId="6127" Score="1" Text="You mean applications other than _the knapsack application it is literally named after_? I mean, you're basically asking us to Google for you. Wikipedia alone has plenty of examples already." CreationDate="2020-01-06T11:37:59.613" UserId="2164" />
  <row Id="16027" PostId="6127" Score="0" Text="I agree this is not worded as a teaching question (just look it up). Unless you ask what are good examples for improving motivation/enguagement in a class of year X (age Y to Z) with W experience." CreationDate="2020-01-07T17:44:27.007" UserId="204" />
  <row Id="16184" PostId="6127" Score="0" Text="I haven't studied it, but it appears to be a cost / benefit scenario, and so anything involving money and products would work. For example, you have 50 dollars to spend on groceries for the week. Given a (fictionally restricted) list of items with calorie values and costs, how can you maximize your calorie intake? You could choose lots of money examples: getting the most rides out of an amusement park, getting the most miles out of a travel budget, or fuel economy choices, etc. In almost any situation money is involved, there are options and tradeoffs, and it can be complex." CreationDate="2020-02-21T00:27:22.750" UserId="5349" />
  <row Id="16259" PostId="6127" Score="0" Text="Just came across this article while browsing Hacker News today: https://www.smithsonianmag.com/science-nature/why-knapsack-problem-all-around-us-180974333/ &quot;How the Mathematical Conundrum Called the ‘Knapsack Problem’ Is All Around Us&quot;" CreationDate="2020-03-10T14:41:01.230" UserId="5926" />
  <row Id="16047" PostId="6131" Score="0" Text="So, what about the relationships between objects, as stated in the question?" CreationDate="2020-01-13T01:53:15.073" UserId="5349" />
  <row Id="16038" PostId="6134" Score="0" Text="You keep saying &quot;2 approaches&quot;. But you have not listed any approaches. You have given 2 incentives." CreationDate="2020-01-11T11:04:30.983" UserId="204" />
  <row Id="16039" PostId="6134" Score="0" Text="You are setting us an Alexander-pattern: Given theses 2 seemingly conflicting forces, you can do this. Unfortunately, I don't think there is a good pattern at this level. The pattern would be: first teach to program, then teach to code, then (maybe) teach low-level stuff." CreationDate="2020-01-11T11:05:24.680" UserId="204" />
  <row Id="16034" PostId="6135" Score="0" Text="Thank you. Following your reply, I added a clarification to the question." CreationDate="2020-01-09T08:26:45.940" UserId="8794" />
  <row Id="16035" PostId="6136" Score="0" Text="Thank you very much for a very instructive answer. It sounds that you are against the first approach per se, i.e. without relation to it taking away from my second incentive. Could you please say a few words about the latter and about the big picture that I described in the clarification at the bottom of my question?" CreationDate="2020-01-09T15:37:56.700" UserId="8794" />
  <row Id="16044" PostId="6136" Score="0" Text="I’ll just note that often the best programmers think one level above and one level below where they are currently programming; so a scheme programmer should be at least somewhat concerned with the system his program fits into and the system his program runs on. There is no pure isolation—and your terminal description of the complex machinery at work is crucial sensitive programs. It would be better if more parts of our education got us to think on several levels and move between them fluidly." CreationDate="2020-01-12T05:14:58.797" UserId="6137" />
  <row Id="16046" PostId="6136" Score="0" Text="@D.BenKnoble, I'm not sure that is true about how I think when I program. I doubt it, actually. And it isn't something to teach in the first course in any case." CreationDate="2020-01-12T12:37:18.453" UserId="1293" />
  <row Id="16048" PostId="6136" Score="0" Text="This answer sounds me like it is saying that we can can teach people music theory and they can then write symphonies without ever having played an instrument. I am pretty sure that Mozart and Beethoven had at least tried most of the instruments in the orchestra, and they were definitely proficient on piano. But they had to know that a note on the piano does not 'sustain', an oboe could play a note for as long as you could blow one breath, and you could sustain a note on a violin all day long if you wanted to. Programmers, if they are going to write 'symphonies', need hands on experience." CreationDate="2020-01-13T02:02:39.237" UserId="5349" />
  <row Id="16051" PostId="6136" Score="0" Text="@ScottRowe, I don't think I suggested that you don't need hands on experience. You need a lot. I have no idea where this comment comes from." CreationDate="2020-01-13T11:46:51.160" UserId="1293" />
  <row Id="16041" PostId="6137" Score="0" Text="What exactly did you refer to by *it* in &quot;don't do *it*&quot;? As the question states, that the Intro to CS course is in C++ is a given." CreationDate="2020-01-11T16:54:25.057" UserId="8794" />
  <row Id="16042" PostId="6137" Score="0" Text="@AlwaysLearning Sorry to hear that. I know what I would do, but I can't tell you what to do." CreationDate="2020-01-11T21:59:14.473" UserId="204" />
  <row Id="16040" PostId="6138" Score="0" Text="By algorithmic thinking, I don't mean teaching algorithms like searching and sorting. I mean the students &quot;breaking their heads&quot; trying to solve algorithmically interesting questions." CreationDate="2020-01-11T16:49:54.353" UserId="8794" />
  <row Id="16043" PostId="6138" Score="0" Text="What's the purpose of this class? Is it to teach people the basics of programming or enough C++ so that they can use it in the other courses of the curriculum? Then high-flying algorithmic thinking isn't really on-topic. &quot;Intro to CS&quot; is rather vague as a statement of what you're supposed to learn in the course. But to give good advice on its intended content, we need to know what it's role in the overall curriculum is." CreationDate="2020-01-12T04:43:26.223" UserId="8696" />
  <row Id="16045" PostId="6138" Score="0" Text="The purpose is to give an introduction to Computer Science whatever that entails. It seems that the person who developed the original curriculum of the course did not think that it should entail developing algorithmic thinking. I would like to try and challenge that. If I can convince my colleagues of the necessity of the change, I believe the follow-up courses (the next of which is called &quot;Seminar in C++&quot;) will be able to compensate for the technical side. On the other hand, once the students get a bad taste in the first course, it is difficult to fix later." CreationDate="2020-01-12T08:17:51.147" UserId="8794" />
  <row Id="16054" PostId="6141" Score="0" Text="Hi guest, I am moving this question over to Academia, as it does not appear to be about CS education." CreationDate="2020-01-14T19:25:57.867" UserId="27" />
  <row Id="16057" PostId="6143" Score="0" Text="Provide good documentation (with examples) of the functions and their usage. Go over a few. Provide exercises that cover them." CreationDate="2020-01-16T04:04:04.847" UserId="6137" />
  <row Id="16055" PostId="6145" Score="1" Text="In my opinion an overview about the structure and features, based on a real world example, would be the best introduction. It's good to give your students an overview what they will hear in this course, if everything goes according to the schedule." CreationDate="2020-01-14T22:33:54.300" UserId="8354" />
  <row Id="16056" PostId="6145" Score="1" Text="It might depend on whether this is just a course in SQL or something deeper like DB modeling or DB implementation. I used to know a lot about Entity Relationship modeling. Great fun." CreationDate="2020-01-14T23:20:45.647" UserId="1293" />
  <row Id="16085" PostId="6145" Score="0" Text="Current answers seem to assume that it is just an introduction to using databases and querying via SQL. Is it more than that? Will you need to teach normal forms? How about db modeling  (ER, say)? B-plus tree implementation and such? A course for users or a course for developers?" CreationDate="2020-01-18T22:01:12.833" UserId="1293" />
  <row Id="16068" PostId="6149" Score="0" Text="Learning multiplication tables, while still common, is redundant. We have calculators. What we need is understanding of what multiplication is, how to use a calculator, and enough mental arithmetic to calculate change when shopping and estimation.If tables are taught they should be taught much latter." CreationDate="2020-01-17T22:25:11.557" UserId="204" />
  <row Id="16069" PostId="6149" Score="0" Text="This may be of some relevance: https://en.wikipedia.org/wiki/Transformation_Priority_Premise" CreationDate="2020-01-17T22:27:02.217" UserId="204" />
  <row Id="16073" PostId="6149" Score="0" Text="Patterns may be an analogy. Not just the GOF stuff (and not the anti-pattern singleton), but the wider sense. Which ones out of the thousands I don't know. I suspect that functional programming is the best place to start." CreationDate="2020-01-17T22:48:24.970" UserId="204" />
  <row Id="16071" PostId="6150" Score="0" Text="Concurrency is easy, so long as you don't have mutation. And mutation is easy to avoid." CreationDate="2020-01-17T22:42:15.797" UserId="204" />
  <row Id="16082" PostId="6150" Score="0" Text="I was surprise your first one was not *Boolean logic*, then *conditional*. From that you get all *branching* and *looping*.  If you think in terms of the **ALU** in a processor and then add on parts of the processor such as memory and the bus it is easy to build up the fundamental concepts." CreationDate="2020-01-18T15:42:46.763" UserId="2516" />
  <row Id="16059" PostId="6151" Score="3" Text="This is a really nice answer.  I've been building such a resource myself, though I never thought about it in quite this distilled of a manner before." CreationDate="2020-01-16T19:14:28.727" UserId="27" />
  <row Id="16060" PostId="6151" Score="0" Text="@BenI. I'd be very interested to see what you have, if it's intended for public consumption." CreationDate="2020-01-16T19:37:23.490" UserId="8562" />
  <row Id="16062" PostId="6151" Score="2" Text="I would love to see the equivalent for functional programmers :) (i know it’s map/filter, reduce, count or length/filter, etc., but what im *more* interested now is: are there fundamentals beneath the paradigms? Multiplication tables don’t favor one kind of math over others, excepting perhaps algebra and geometry.)" CreationDate="2020-01-17T21:07:48.800" UserId="6137" />
  <row Id="16065" PostId="6151" Score="0" Text="@D.BenKnoble You are right - this is specific to the imperative paradigm, despite the question saying &quot;regardless of paradigm&quot;. I do think every developer *ought* to learn these things in the imperative paradigm, though, even if they use another paradigm professionally; other language paradigms are ultimately implemented by machines running imperative machine instructions, and it's rather useful to know how your code will end up being implemented imperatively, for example so you can estimate how efficient it will be." CreationDate="2020-01-17T21:17:15.060" UserId="8562" />
  <row Id="16066" PostId="6151" Score="0" Text="@kaya3 very true! Not discounting their usefulness at all" CreationDate="2020-01-17T21:18:28.440" UserId="6137" />
  <row Id="16067" PostId="6151" Score="0" Text="That said, the OO paradigm also has common subproblems and standard solutions which programmers do learn and apply from memory; design patterns, for example. And other paradigms like FP surely have their own common subproblems and standard solutions which programmers learn and apply from memory, though I don't use those paradigms often enough to add to the discussion about them. I would certainly be interested to see a comparable list of &quot;plans&quot; for FP if anyone has written one." CreationDate="2020-01-17T21:23:06.530" UserId="8562" />
  <row Id="16070" PostId="6151" Score="0" Text="And the anwsers: filter -&gt; map; reduce; filter -&gt; reduce; reduce. Don't role your own loops." CreationDate="2020-01-17T22:38:51.413" UserId="204" />
  <row Id="16072" PostId="6151" Score="0" Text="@ctrl-alt-delor I was more thinking that FP has its own common subproblems for which programmers have solutions they apply from memory. Problems tend to be decomposed in different ways for different paradigms, so there must be a plenty of common subproblems specific to FP, not just the same subproblems solved by different plans. One that comes to mind is converting a recursive function into a tail-recursive form, where the memorised solution is to add an accumulator variable as an extra parameter, and a helper function which provides the initial value for the accumulator." CreationDate="2020-01-17T22:44:30.907" UserId="8562" />
  <row Id="16074" PostId="6151" Score="2" Text="Functional Programming, does not have to be a separate thing. You can do it in any language. All the modern OO languages, that I use, have filter / map / reduce." CreationDate="2020-01-17T22:51:51.923" UserId="204" />
  <row Id="16143" PostId="6151" Score="0" Text="I did see an academic paper on teaching junior devs and I distinctly recall something in the paper about avoiding OO concepts--or at least leaving them for much later in the training.  For all that OO advocates blather on about OO being more natural it does a lot to muddy the water for junior devs just trying to learn. (Note: I believe [this](https://www.tandfonline.com/doi/abs/10.1080/08993408.2019.1565235) is the paper I was thinking of)" CreationDate="2020-02-07T21:19:46.503" UserId="4689" />
  <row Id="16144" PostId="6151" Score="1" Text="@OnorioCatenacci Ah, that's a debate which this comment thread is too small to contain." CreationDate="2020-02-07T21:50:58.057" UserId="8562" />
  <row Id="16145" PostId="6151" Score="0" Text="Very fair @kaya3!" CreationDate="2020-02-07T22:13:13.423" UserId="4689" />
  <row Id="16063" PostId="6152" Score="0" Text="At least on github, you can add comments to any line of a file (in a commit, and probably a PR if you « expand the diff » to see more)" CreationDate="2020-01-17T21:08:42.910" UserId="6137" />
  <row Id="16075" PostId="6152" Score="2" Text="As you seem to be, successfully, using git. It would be nice if you can provide some help with this question https://cseducators.stackexchange.com/q/2897/204" CreationDate="2020-01-17T22:58:17.630" UserId="204" />
  <row Id="16081" PostId="6152" Score="0" Text="Why can't you just do a merge or pull request with the comments in the code itself. Then as the students develop the code they can remove the comments. Also maybe the students should take your comments, convert them in to *TODO* comments and then use that as a guide." CreationDate="2020-01-18T15:36:57.193" UserId="2516" />
  <row Id="16061" PostId="6154" Score="0" Text="This is a good point to consider, though there is obviously a balancing act between law, ethical obligations to the disabled student, and ethical obligations to not *actively* harm the education of surrounding students.  If the usage is not discreet in its nature (such as notetaking), I would want to consider whether it would be possible to seat the student who needs the device in a manner that would not permit others to see that student's screen, such as in the back or off to the side.  I can certainly imagine situations where that would be impossible, but it is worth considering." CreationDate="2020-01-17T20:03:41.657" UserId="27" />
  <row Id="16064" PostId="6154" Score="0" Text="@BenI. Forgive my rather negative interpretation here (i know you dont mean this), but consider: « in the back/off to the side » ≈ ostracized? Removed? Separated?" CreationDate="2020-01-17T21:10:21.853" UserId="6137" />
  <row Id="16076" PostId="6154" Score="0" Text="@D.BenKnoble I am thinking of that, so I would have to factor in the student and their feelings (and co-disabilities, if any). But while I will always do my best to help any student who needs a hand, I can't simply invite harm to the other students without at least *trying* to find a workaround, and I am genuine in my belief that those screens really are an active harm in a classroom context." CreationDate="2020-01-18T02:18:32.167" UserId="27" />
  <row Id="16077" PostId="6155" Score="0" Text="The opportunity to write this answer means I need to go rewrite the intro of my workshop. Thank you." CreationDate="2020-01-18T14:14:44.600" UserId="6137" />
  <row Id="16078" PostId="6155" Score="0" Text="I am now wondering if it is not the teenager that will find it hardest. May be it is because of my experience with tools that are easier to use, that I am resisting the change. And git has the potential to be easy to use, it is just that no-one has made a good command-line tool for it. Or a tortoise for it. (hg is easier to use, but its internal model is not quite as good. SVN is easier to use, but is not decentralised ). Maybe I need to wait for a distributed system, maybe it will also be easy to use. Or maybe one summer, I will make a UI." CreationDate="2020-01-18T15:15:05.103" UserId="204" />
  <row Id="16079" PostId="6155" Score="0" Text="@ctrl-alt-delor understandable—i have the same frustration with tools i find hard to use. Ironically, git is such a part of my workflow that it *now* feels easy to use. But ive added lots of shortcuts (aliases and scripts) that fit my personal interface for git, plus hub for interacting with github. I suppose it also depends on how you rate “easy”—i never used SVN, but I’ve read horror stories about using it for merges?" CreationDate="2020-01-18T15:18:26.300" UserId="6137" />
  <row Id="16080" PostId="6155" Score="0" Text="Easy for me is low effort. For a teenager it would be easy to learn, **no surprises**. Yes SVN used not to track merges. It made it hard to re-merge a branch. You had to do a lot of manual stuff to tell it the newest-common-ancestor. I hear this is now fixed (I have not used it (in a team, with merges) since this fix). With HG and SVN commands do one thing (if no --option given), and are split into 3 parts (examples for hg): access remote (pull, push), write to local repo (commit, merge), mutate working copy (update), then extensions with safety catches: mutate local repo (strip)." CreationDate="2020-01-18T15:31:00.163" UserId="204" />
  <row Id="16093" PostId="6155" Score="0" Text="@ctrl-alt-delor I've just read about [Tower](https://www.git-tower.com/mac) (recently added to the GitHub student pack). I haven't investigated their pricing options, but if it really does what they say, it would be an alternative interface to consider." CreationDate="2020-01-21T02:49:58.790" UserId="6137" />
  <row Id="16099" PostId="6155" Score="0" Text="@DBenKnoble it looks to be proprietary. I am not going back in to prison. So much too loose, one thing to gain. It is a shame that git (GPL licences software, and written be the creator of one of the largest GPL projects), needs proprietary software to be usable. I will continue looking." CreationDate="2020-01-22T07:46:58.933" UserId="204" />
  <row Id="16089" PostId="6157" Score="0" Text="Welcome to [cseducators.se]! This answer seems like the beginnings of an idea. Could you edit it to give more details?" CreationDate="2020-01-20T11:28:35.240" UserId="150" />
  <row Id="16086" PostId="6158" Score="0" Text="I won't post an answer, because I genuinely know nothing and am only guessing, but I assume they would be basically against it. CS seems rather counter to the Waldorf basic philosophy." CreationDate="2020-01-19T20:46:59.373" UserId="27" />
  <row Id="16088" PostId="6158" Score="0" Text="Use teletypes !" CreationDate="2020-01-20T00:00:01.587" UserId="2103" />
  <row Id="16087" PostId="6159" Score="0" Text="I'm not getting the point of your question. Parts of it seem inconsistent with other parts. Perhaps you are being &quot;clever&quot; at the expense of understanding." CreationDate="2020-01-19T23:49:20.723" UserId="1293" />
  <row Id="16094" PostId="6159" Score="1" Text="Do you mean, they're trying to &quot;help the compiler to make optimizations&quot; instead of focusing on correctness,  readability and simplicity?" CreationDate="2020-01-21T06:18:20.693" UserId="2103" />
  <row Id="16095" PostId="6160" Score="1" Text="Upvoted because I learned something, but all of the sentence fragments make this answer quite difficult to follow." CreationDate="2020-01-21T13:24:32.027" UserId="27" />
  <row Id="16101" PostId="6160" Score="0" Text="I fixed some grammar, but it still needs proof reading and fixing." CreationDate="2020-01-22T08:00:39.117" UserId="204" />
  <row Id="16102" PostId="6160" Score="0" Text="While you perfectly identified the problem in the first section (+1), do you have a solution (other than use a different system)?" CreationDate="2020-01-22T08:01:57.707" UserId="204" />
  <row Id="16103" PostId="6160" Score="0" Text="The line ending thing should be an option, and one check-out and diff. I have had data destroyed with other revision control systems, transforming on check-in. And cr/lf is a failure to abstract away the hardware (it was done to support printers. Do they still work that way)." CreationDate="2020-01-22T10:10:02.000" UserId="204" />
  <row Id="16107" PostId="6160" Score="0" Text="@ctrl-alt-delor Many things to work on in this q. I've not yet managed to satisfactorily make my central point re line-endings. There is the legitimate issue of presentation. And the larger q about what I would suggest in the circumstances. Crlf etc is only really an analogical side show to indicate excessive detail obscurling central abstractions" CreationDate="2020-01-22T13:17:34.963" UserId="8837" />
  <row Id="16108" PostId="6160" Score="0" Text="que...........?" CreationDate="2020-01-22T13:18:49.350" UserId="204" />
  <row Id="16096" PostId="6161" Score="0" Text="Note: http://www.anvari.org/fortune/Miscellaneous_Collections/362740_the-first-rule-of-program-optimization-dont-do-it.html" CreationDate="2020-01-21T13:48:41.480" UserId="1293" />
  <row Id="16097" PostId="6161" Score="0" Text="I'll note that most source level attempts at optimization actually get in the way of a compiler doing a good job. If the program describes 'in detail' how to do something, rather that just what is to be accomplished, the compiler may be stymied to improve it." CreationDate="2020-01-21T13:56:18.863" UserId="1293" />
  <row Id="16098" PostId="6161" Score="0" Text="And ask the student to show how much their optimizations have improved the performances." CreationDate="2020-01-21T17:38:56.273" UserId="2103" />
  <row Id="16109" PostId="6163" Score="1" Text="We rarely close questions as duplicate on this site, but I admit that the two questions seem almost entirely identical.  We're open to re-opening the question, but could you add some additional information that makes clearer how this question is different from the [one Flater linked to](https://cseducators.stackexchange.com/questions/5312/how-can-i-improve-my-understanding-in-computer-science)?" CreationDate="2020-01-22T14:14:59.570" UserId="27" />
  <row Id="16106" PostId="6164" Score="0" Text="A bit esoteric but true. However you could improve the answer by saying more (and linking less). It is completely understandable to those who already know this, but not so much to novices. In Tai Chi we say that it takes 10,000 repetitions of a move to know it." CreationDate="2020-01-22T12:18:13.183" UserId="1293" />
  <row Id="16110" PostId="6164" Score="0" Text="The 10,000 hour rule is to become world-class in expertise or proficiency, not to &quot;get a handle&quot; on something." CreationDate="2020-01-22T15:57:49.297" UserId="3799" />
  <row Id="16111" PostId="6164" Score="0" Text="@EricEidt I think you've misunderstood my use of ‘handle’. When I said &quot;get a handle&quot; I was not meaning it at the (object) level of &quot;How do I get a handle on ML?&quot; but the meta level of &quot;I dont understand what's holding me back...&quot;  Which is after all the central point of the q (AIUI)" CreationDate="2020-01-22T16:40:32.643" UserId="8837" />
  <row Id="16115" PostId="6168" Score="1" Text="Have you established that there is a sufficiently operable mental model of how the computer itself works? Need not know about registers and low-level concepts, per se, but do need something to explain the command:effect relation. [Computer Science without a computer](https://csunplugged.org/) might be a good resource." CreationDate="2020-01-24T00:50:51.347" UserId="104" />
  <row Id="16120" PostId="6168" Score="0" Text="No I haven't established that. I am wondering an efficient method to make her wrong assumptions surface, *whichever they might be*. I can easily start explaining how things are and that's all, but I would like to make her see something herself, not just hear from me." CreationDate="2020-01-24T22:42:54.313" UserId="6546" />
  <row Id="16124" PostId="6168" Score="0" Text="It the beginning you say that your student says char function, for function. Ask why not. for can be a function or procedure. Most experienced programmers incorrectly call procedures functions." CreationDate="2020-01-25T21:42:00.083" UserId="204" />
  <row Id="16125" PostId="6168" Score="0" Text="A  common misconception is that mutation is a good idea (see `++`, `i=i+1`, `i=2; ... ; i=3` etc. It is not. It is confusing for novices, they just don't get it. And remains one of the biggest sources of bugs for experienced programmers (that continue to use it a lot)." CreationDate="2020-01-25T21:43:12.390" UserId="204" />
  <row Id="16131" PostId="6168" Score="0" Text="Common problem is scope, in `if (a&lt;b) { int min=a;}  else { int min = b;}`. The block concept, and the correspondence between  the program structure (a tree) and a linear text with delimiters {}." CreationDate="2020-01-27T06:54:56.287" UserId="2103" />
  <row Id="16116" PostId="6169" Score="0" Text="Your last comment on &quot;without reference to actual [target] machine&quot; is how I generally prefer to explain things, I go as far as believing that the commonly used reference to a (usually unspecified) target machine is responsible for a big part of students' difficulties. I haven't explicitly specified the level of the student, it's at the beginning of high school, algebra knowledge in development, not fully formed." CreationDate="2020-01-24T22:14:50.537" UserId="6546" />
  <row Id="16117" PostId="6169" Score="0" Text="Yes I must admit that the &quot;assignment looks like algebraic equation&quot; being one of the common ones was known to me, anyway I don't really know what to do with it, it simply doesn't make any sense. What effectively do the students usually deduce from such a meaningless thing?" CreationDate="2020-01-24T22:25:41.340" UserId="6546" />
  <row Id="16118" PostId="6169" Score="0" Text="You need to show them what it means. The right hand side is evaluated first, then (and only then) the left hand side is given that value (or made to reference that value, if you like). Show how this makes sense out of x = x + 1 which is nonsense in algebra." CreationDate="2020-01-24T22:28:13.143" UserId="1293" />
  <row Id="16119" PostId="6169" Score="0" Text="Yes of course, I show it and explain it at length, if needed. What I am wondering is how would they put to use a wrong understanding of assignment as algebraic equation. How can they use it to solve problems? What problems would immediately make them see that they are believing a crazy thing? How would they interpret a piece of code if they think it is equation instead of assignment?" CreationDate="2020-01-24T22:37:33.197" UserId="6546" />
  <row Id="16121" PostId="6169" Score="0" Text="_How would they interpret... instead of assignment?_ Wrongly. That's one of the fundamentals which must be established, cleared-up, or corrected, if writing, or reading, code is to be successful. If `x=x+1` doesn't make sense, they do not yet have the correct concept to work with, and you know one issue to &quot;debug&quot;." CreationDate="2020-01-25T01:21:04.450" UserId="104" />
  <row Id="16122" PostId="6169" Score="1" Text="I know they are out of style, at the moment anyway, but the magic breaking of a while loop is probably cleared up with a simple flow chart. Of course, the flowchart makes a handy &quot;student debugger&quot; as well. Teach the creation of a flowchart, then have the student &quot;chart&quot; some code. The picture they create should clearly show where they &quot;don't get it&quot; from reading the code." CreationDate="2020-01-25T01:26:55.597" UserId="104" />
  <row Id="16123" PostId="6169" Score="0" Text="For the unfortunate tradition of &quot;=&quot; for assignment, just insist on the fact it is a **usual notation** for programming languages, with very little connection to any mathematical notion of equality. Same for variables, names for parts of the context whose value/content may vary during execution. Make the students follow  sequences of assignements, until they don't mix a=b  with b=a anymore." CreationDate="2020-01-25T16:39:48.910" UserId="2103" />
  <row Id="16127" PostId="6170" Score="1" Text="What is &quot;class 5 kids&quot;?" CreationDate="2020-01-26T20:44:04.420" UserId="204" />
  <row Id="16128" PostId="6170" Score="0" Text="Who are you teaching? What age? What experience?" CreationDate="2020-01-26T20:46:12.477" UserId="204" />
  <row Id="16134" PostId="6175" Score="0" Text="*&quot;grows if the length of a collision chain is greater than some constant&quot;* Isn't there a possibility here that several of the hashes could actually be consecutive integers, so that resizing the array doesn't &quot;split up&quot; the chain, hence the array needs to be resized again immediately? I'm assuming that's not the bottleneck you meant, because you only offered this as one example of how to decide when to resize the array." CreationDate="2020-01-29T05:18:38.923" UserId="8562" />
  <row Id="16135" PostId="6175" Score="0" Text="It's a possibility. Use quadratic rehashing if you're concerned. And you're right, that's not it." CreationDate="2020-01-29T05:20:18.983" UserId="8855" />
  <row Id="16138" PostId="6177" Score="1" Text="Thank you for acknowledging that this is not necessarily an entirely *solvable* problem. If you think your students are never getting things over on you, you're either delusional or just not thinking it through properly." CreationDate="2020-01-30T19:42:47.437" UserId="27" />
  <row Id="16142" PostId="6181" Score="0" Text="Those are excellent suggestions for &quot;things a developer should know by rote&quot;!" CreationDate="2020-02-07T21:16:26.707" UserId="4689" />
  <row Id="16152" PostId="6183" Score="0" Text="I incorporated your comment.  A lot of the stuff I'm seeing is for grades k-2, so that's good to know." CreationDate="2020-02-11T17:44:09.297" UserId="27" />
  <row Id="16150" PostId="6184" Score="2" Text="If this helps, I will post it as an answer. A question like this is pretty much limited to link-only answers, so it will be hard to formulate something. &#xA; httpss://findingada.com/resources/resources-for-schools/posters/" CreationDate="2020-02-10T03:41:19.553" UserId="27" />
  <row Id="16153" PostId="6186" Score="1" Text="Edison looks like a great robot for starters. Makeblock looks good too and maybe more flexible, but also more expensive. Thanks for the input!" CreationDate="2020-02-11T17:58:55.593" UserId="8882" />
  <row Id="16279" PostId="6187" Score="0" Text="Thank you both - I've converted it to an answer." CreationDate="2020-03-18T22:59:56.623" UserId="8562" />
  <row Id="16156" PostId="6188" Score="0" Text="I did not grok what you said your class mates new jobs were." CreationDate="2020-02-15T11:41:17.683" UserId="204" />
  <row Id="16157" PostId="6188" Score="0" Text="While this question is not about teaching, it is about learning. I think it therefore should be **left open**." CreationDate="2020-02-15T11:49:23.417" UserId="204" />
  <row Id="16158" PostId="6188" Score="0" Text="Actually it is about taking a certain kind of job. There are other sites here focused on that." CreationDate="2020-02-15T12:56:50.877" UserId="1293" />
  <row Id="16159" PostId="6188" Score="0" Text="I agree with @Buffy that this seems like career advice more than education advice, but I won't close it unilaterally without more input." CreationDate="2020-02-15T15:01:43.670" UserId="27" />
  <row Id="16162" PostId="6193" Score="7" Text="Most people will not know what CS50x is, so the question makes no sense," CreationDate="2020-02-18T18:12:25.153" UserId="694" />
  <row Id="16164" PostId="6193" Score="1" Text="@BrianTompsett-汤莱恩 CS50(x) is quite a phenomenon in in the US, and CS50x even outside of that. At least, among developers. A bit of explanation towards a potential employer is warranted." CreationDate="2020-02-19T09:33:40.000" UserId="1504" />
  <row Id="16165" PostId="6193" Score="1" Text="@Brian Tomopsett While it is a phenomenon among mostly UG students in developing countries,my question was more about the content of the course and not the recognition of the course itself." CreationDate="2020-02-19T13:05:35.390" UserId="5482" />
  <row Id="16177" PostId="6193" Score="14" Text="Just curious, what do you think CS students do for the rest of 4 years outside of that one course?" CreationDate="2020-02-19T20:21:24.317" UserId="1407" />
  <row Id="16188" PostId="6193" Score="0" Text="@user3067860 Whole course might have many different aspects like discreet maths,probablity,electives and other sub topics within CS.I am not sure, obviously I don't expect one single course to cover all domains." CreationDate="2020-02-21T06:08:12.170" UserId="5482" />
  <row Id="16182" PostId="6195" Score="1" Text="If anything, I found my degree didn't cover nearly enough. For example, there was no exposure to databases in the base curriculum. I took a database elective but it only covered theoretical and running queries by hand, not actually anything about building an application connected to a database. I agree with &quot;learning how to learn&quot; since specific tools can quickly go obsolete, but an application connected to a database seems like a fairly common topic..........." CreationDate="2020-02-20T21:26:13.767" UserId="1407" />
  <row Id="16166" PostId="6198" Score="0" Text="Informative.My current situation is am a grad in the field of electronics and Instrumentation and I do know the very basics of  C/C++(and little python) as they are used to code some in electronics application too,but I really want to get into a software industry now and most of them currently require some hands on experience in Java and they seek someone who has built or worked on some software or framework,so can you please give me a roadmap on how to actually get into these?(currently am focusing on Java as the jobs am interested in work on it).I am really confused where to start with it." CreationDate="2020-02-19T13:23:39.890" UserId="5482" />
  <row Id="16167" PostId="6198" Score="0" Text="@sagnikdas too broad. do your intro to java courses, find some tutorials using the frameworks the jobs you are interested use (spring etc) and then try make some of your own projects from scratch solving some made up problem you design. play with a couple of databases and learn the basics. once everything is running locally, then maybe start to look how code is deployed in production. enjoy the process, it takes time." CreationDate="2020-02-19T14:00:35.350" UserId="8241" />
  <row Id="16168" PostId="6198" Score="0" Text="Am not sure about the framework but they do mostly some backend/server side stuff along with some little front end dev." CreationDate="2020-02-19T14:33:23.813" UserId="5482" />
  <row Id="16176" PostId="6198" Score="0" Text="@sagnikdas As the other comment mentions, that is far a very broad question, but you can get other university-level courses from EdX and Coursera which will introduce a lot of those topics.   For example, MIT has two free Software Engineering Java courses on EdX.   Also there are half a dozen free Java courses from Duke university and UC San Diego on Coursera.   Beyond that, personal projects are really the way to go - once you start tackling larger and more complex projects, I expect you'll naturally run into a lot of issues around software design, frameworks, tooling, etc." CreationDate="2020-02-19T17:54:16.280" UserId="6562" />
  <row Id="16181" PostId="6198" Score="0" Text="I've worked with several software people that had an Electrical Engineering degree, and they didn't use Java.  Decide what your end goal is, and take your choice of primary language seriously because the right combo can mean an extra digit on your paycheck. @sagnikdas" CreationDate="2020-02-20T16:42:42.197" UserId="2550" />
  <row Id="16186" PostId="6198" Score="0" Text="@JPhil below is the example of a JD from LinkedIn,what do u make from it?" CreationDate="2020-02-21T06:04:12.777" UserId="5482" />
  <row Id="16187" PostId="6198" Score="0" Text="text from LinkedIn)Responsibilities  The entire codebase is your playground and you are here to solve your customer's problem.  That means you never block on some other engineer or team.  To solve a problem, say, if something has to be changed in search service or something new has to be built on our App, you as an engineer are expected to make these changes everywhere and plan the launch, training, marketing of your product.  Beginning of every quarter you are expected to publish key capabilities that you intend to launch." CreationDate="2020-02-21T06:05:21.013" UserId="5482" />
  <row Id="16189" PostId="6198" Score="0" Text="@sagnikdas Sounds like a start up looking for a very senior architect who can also do business analysis, training, and user support (oh, and marketing!). And never slip schedule. They didn't mention hours or salary, but I can't imagine how you can get 5 jobs done in less than 100 hours a week...and I'm not sure what the salary would have to be to compensate me for working that many hours, enough to pay for my mental breakdown after a month or two. (Or the description is just a lie, could be either way.)" CreationDate="2020-02-21T14:41:33.240" UserId="1407" />
  <row Id="16194" PostId="6198" Score="0" Text="You are very correct,they are actually a start up and are giving a senior role it seems, anyway,does anyone have any idea about sources where I can look up to some interesting personal projects to get some insights?" CreationDate="2020-02-24T10:08:39.343" UserId="5482" />
  <row Id="16228" PostId="6198" Score="0" Text="@sagnik Well, Github, just Google for open source, etc. The questions are more 1) what constitutes interesting, and 2) what will you get value out of looking at. For 1, newbies often believe that a project needs to be commercially interesting...invent a shiny new algorithm, or appeal to a huge user base...but frankly that is typically going to mess up point 2. Start with some software you might actually use, ideally something a little bit simple. A phone app that's pretty basic, or a game or browser addon. Then actually compile it on your computer. Proceed from there." CreationDate="2020-02-29T16:35:00.343" UserId="1407" />
  <row Id="16229" PostId="6198" Score="0" Text="Btw, I was being pretty sarcastic about that job description. It's like a standard schmo posting a singles ad for super hot, extremely wealthy, etc, etc. So most startups would like super amazing developers, but those super amazing devs can get more reliable jobs elsewhere. They usually only go with the startup if they have a personal reason (eg. founder). Intermediates can (cautiously) go with a startup as a move up job, but watch out for the startup taking juniors... Usually is a sign that they have no clue and will treat you poorly." CreationDate="2020-02-29T16:46:54.083" UserId="1407" />
  <row Id="16171" PostId="6199" Score="3" Text="Hey andydavies, welcome to [cseducators.se]!  I have d/v'd for two reasons: first, as a general rule on the SE network, answers with links should contain some sort of (short) summary of the takeaway in case the link goes dead.  More importantly, though, is software engineer/software developer confusion.  Software engineering is a related field, but with a somewhat different center of gravity.  (Take a look at BenCottrell's answer to get a reasonable sense of Software Engineering, or google software developer vs software engineer.)" CreationDate="2020-02-19T15:26:49.393" UserId="27" />
  <row Id="16172" PostId="6199" Score="0" Text="@BenI. Ok...just trying to be helpful. Developer...engineer...I've read the definitions online and I can't tell the difference between them. Both describe every software job I've ever had." CreationDate="2020-02-19T15:37:02.123" UserId="8909" />
  <row Id="16173" PostId="6199" Score="0" Text="That's totally fair!  And to add to the confusion, sometimes the terms are used synonymously, and on projects with smaller teams, all of the jobs merge so that everyone is doing both.  But, in case this helps you, a specialized Software Engineer may do very little coding during their day to day job, instead spending their time going back and forth between the clients, upper management, and the software developers, while a software developer's job would typically center on generating good, carefully-crafted code." CreationDate="2020-02-19T16:15:22.693" UserId="27" />
  <row Id="16174" PostId="6199" Score="0" Text="Perhaps [this](https://www.electronicproducts.com/Education/Career/Software_engineer_vs_computer_programmer_what_s_the_difference.aspx) will help!" CreationDate="2020-02-19T16:16:29.783" UserId="27" />
  <row Id="16175" PostId="6199" Score="0" Text="Thanks for the link. I wonder if this is a US thing (I'm in the UK). The distinction that article describes is more Senior Developer vs Developer here. But anyway..doesn't matter, it's just a word. Peace." CreationDate="2020-02-19T16:20:20.113" UserId="8909" />
  <row Id="16224" PostId="6199" Score="0" Text="So I actually read your posts and the stuff there is good...but having link only answers means that this is quite likely to get deleted at some point. If you could bring some of the content that you have in your posts here, I'm sure it could be a good answer to this question, especially since you have specific experience with that course." CreationDate="2020-02-26T15:07:47.760" UserId="1407" />
  <row Id="16179" PostId="6201" Score="0" Text="I guess I'd be very worried about the restrictions. They would seem to push one toward writing terrible code just to meet them. A program in Java with just one class is pretty much just a C program. This might be fine for the first week of class, I suppose." CreationDate="2020-02-20T13:35:38.537" UserId="1293" />
  <row Id="16180" PostId="6201" Score="0" Text="@Buffy The program itself is supposed to be a lot of basic practice at writing tiny methods.  Basically, a way to build fluency for people who are having a lot of trouble." CreationDate="2020-02-20T16:05:01.923" UserId="27" />
  <row Id="16183" PostId="6201" Score="1" Text="I think this kind of online system where code is judged by returning the right output for certain inputs is most suited for algorithmic problem-solving. For OOP tasks where you have to write a few classes with some simple methods, having the correct output for each input to one method doesn't mean that the rest of the classes or methods are implemented correctly. At the very least, writing sufficiently good tests for OOP exercises is harder and requires a more powerful format for tests to be written in." CreationDate="2020-02-20T22:02:27.400" UserId="8562" />
  <row Id="16185" PostId="6201" Score="0" Text="@kaya3 I agree entirely." CreationDate="2020-02-21T04:01:13.500" UserId="27" />
  <row Id="16219" PostId="6203" Score="0" Text="These are good exercises that should be in a computing class. But it does not really get to OOP. OOP is abstract type, interface, inheritance, information hiding, and such things." CreationDate="2020-02-25T21:26:09.197" UserId="8929" />
  <row Id="16220" PostId="6203" Score="0" Text="https://en.wikipedia.org/wiki/Object-oriented_design#Object-oriented_concepts" CreationDate="2020-02-25T21:27:45.963" UserId="8929" />
  <row Id="16221" PostId="6203" Score="0" Text="@puppetsock, they are focused on message passing. You can have different kinds of moving objects that respond differently to the &quot;move&quot; message." CreationDate="2020-02-25T21:27:50.190" UserId="1293" />
  <row Id="16190" PostId="6204" Score="5" Text="Then debug the fault on your computer and tell them where the fault is... (I have 200 students on my course and I DO this, as there are so few that need debugging to this extent.)" CreationDate="2020-02-23T22:10:48.580" UserId="694" />
  <row Id="16191" PostId="6204" Score="0" Text="I guess I'm not understanding something basic. These are not final submissions, but code to edit?  What are the understandings between you and your students about sending code back to refactor?" CreationDate="2020-02-23T22:46:39.363" UserId="27" />
  <row Id="16193" PostId="6204" Score="0" Text="Do you have a lot of TAs? What is the student to staff ratio for a course like this. It is easy to predict chaos if it is too high. I'll note that Harvard's CS50 has a lot of students but the ratio between students and staff  is about 20/1. And some of the staff have specialized duties." CreationDate="2020-02-24T00:28:37.013" UserId="1293" />
  <row Id="16195" PostId="6204" Score="0" Text="@BrianTompsett-汤莱恩 I believe my job as an instructor is to teach my students how to debug their code, and not debug their code for them... just like when they work in the industry, they should not expect their clients to debug their code." CreationDate="2020-02-24T13:48:30.083" UserId="1873" />
  <row Id="16196" PostId="6204" Score="0" Text="@BenI. these issues can happen both before and after the submission deadline. The situation is similar: the students think that their code is fine and do not see any problem with it." CreationDate="2020-02-24T13:51:14.100" UserId="1873" />
  <row Id="16197" PostId="6204" Score="0" Text="My question, above, is a serious one. Depending on the answer, I might have some advice. How many TAs?" CreationDate="2020-02-24T13:52:28.067" UserId="1293" />
  <row Id="16198" PostId="6204" Score="0" Text="@Buffy there are 2 instructors, 3 TAs, and 160 students." CreationDate="2020-02-24T13:53:36.960" UserId="1873" />
  <row Id="16199" PostId="6204" Score="1" Text="@ErelSegal-Halevi I guess I'm still not understanding.  As a somewhat rhetorical question, why not just deduct from their grade and call it a day?  Are the students expecting feedback?  Do they get to resubmit their code without penalty?" CreationDate="2020-02-24T15:10:56.237" UserId="27" />
  <row Id="16200" PostId="6204" Score="0" Text="@BenI. Sure I can deduct from their grade, but then they complain that it is unjustified because their submission works well, it is only my computer that is wrong.." CreationDate="2020-02-25T06:25:28.060" UserId="1873" />
  <row Id="16242" PostId="6204" Score="1" Text="@ErelSegal-Halevi: I deal with this. Their complaints are unwarranted. You should be able to point to a specific uninitialized variable in the code, say it causes undefined behavior, end of story. If they can't pick up on that prohibition then it's not your problem." CreationDate="2020-03-04T12:08:51.220" UserId="8137" />
  <row Id="20806" PostId="6205" Score="0" Text="This is also true for anything that is measured. In the end I realised that zero indexing is not counting; it is measuring." CreationDate="2022-10-01T13:52:16.623" UserId="204" />
  <row Id="16201" PostId="6207" Score="0" Text="Very interesting tools. I have to try them out." CreationDate="2020-02-25T06:28:46.717" UserId="1873" />
  <row Id="16203" PostId="6209" Score="0" Text="Do you have the opportunity to flip the classroom with students working together when face to face with you? https://en.wikipedia.org/wiki/Flipped_classroom" CreationDate="2020-02-25T11:56:28.363" UserId="1293" />
  <row Id="16204" PostId="6209" Score="4" Text="_Matlab_ seems a poor choice for _introduction to programming_, perhaps rename the course _introduction to Matlab_. Alternatively, teach Python, it can do everything Matlab can." CreationDate="2020-02-25T13:02:47.357" UserId="8103" />
  <row Id="16205" PostId="6209" Score="0" Text="_Is there something cool we could work towards creating over the 5 weeks?_ How many teaching hours (lectures, tutorials, ...) do you have in five weeks?" CreationDate="2020-02-25T13:04:33.300" UserId="8103" />
  <row Id="16206" PostId="6209" Score="3" Text="What you *need* to know depends on the courses that build off of this one. Whether that's feasible in 5 sessions is another question. But seriously: what are they going to do with their programming skills later on? That should inform your programme." CreationDate="2020-02-25T13:10:21.477" UserId="8696" />
  <row Id="16209" PostId="6209" Score="0" Text="My question above is a serious one. If you can answer it, then I might be able to offer advice." CreationDate="2020-02-25T15:19:29.913" UserId="1293" />
  <row Id="16210" PostId="6209" Score="0" Text="It strikes me that the university may be doing something kind of unpleasant here. By only providing these students 5 classes in something that should be a full term or full one year course, they seem to be expecting the students to learn it on their own. If that's the case, it raises many questions outside of your question." CreationDate="2020-02-25T15:41:05.753" UserId="8929" />
  <row Id="16211" PostId="6209" Score="0" Text="@puppetsock, unless they are 3-5 hours each, as sometimes happens." CreationDate="2020-02-25T15:51:04.297" UserId="1293" />
  <row Id="16213" PostId="6209" Score="0" Text="@Buffy Ugh.  Five 5-hour sessions wouldn't be even close to 5x as productive as 25 1-hour sessions.  That sounds horrid to me!" CreationDate="2020-02-25T17:03:34.497" UserId="27" />
  <row Id="16216" PostId="6209" Score="1" Text="@BenI., different in a flipped classroom, though." CreationDate="2020-02-25T17:49:42.380" UserId="1293" />
  <row Id="16218" PostId="6209" Score="0" Text="Yeah, the &quot;flipped classroom&quot; is what I was talking about with expecting the students to learn on their own. And in this case, they seem to be expecting the student to *find* the on-line material as well." CreationDate="2020-02-25T20:44:41.437" UserId="8929" />
  <row Id="16226" PostId="6209" Score="0" Text="I don't know mathlab so not answering. But to the extent that mathlab is (aligned to) functional programming you may find this blog post useful: http://blog.languager.org/2012/10/functional-programming-lost-booty.html ." CreationDate="2020-02-27T14:27:51.777" UserId="8837" />
  <row Id="16227" PostId="6209" Score="1" Text="Just to second user2768's answer. Matlab isn't the correct language to teach. If you *must* teach matlap, teach octave instead. At least that when when they graduate they don't have to learn a new language/fork out thousands of pounds/dollars." CreationDate="2020-02-29T08:53:42.097" UserId="5263" />
  <row Id="16237" PostId="6209" Score="0" Text="May be showing my age, but I remember a time when it was important to pay special attention to students who were coming from the Math department---to indoctrinate them with the idea that an assignment statement in a procedural programming language was _not_ the same thing as a mathematical equation." CreationDate="2020-02-27T02:10:48.927" UserId="1269" />
  <row Id="16247" PostId="6210" Score="1" Text="I think comparing an array to a ruler is probably the nicest, most visual thing at hand. If you have a ruler with both inches and centimeters you also have a metaphor for different memory sizes for variable types." CreationDate="2020-03-06T17:55:51.483" UserId="8696" />
  <row Id="20138" PostId="6210" Score="0" Text="Since this question was posted, I have come to realise that a ruler is not a metaphor for this think. It is the think. Zero indexing is simply measuring the distance from the start. There are many examples of this in the other answers." CreationDate="2022-05-29T18:05:16.150" UserId="204" />
  <row Id="20152" PostId="6210" Score="0" Text="A great visual example" CreationDate="2022-05-31T14:14:26.280" UserId="12011" />
  <row Id="20628" PostId="6210" Score="1" Text="I don't think the ruler is a good metaphor at all. The ruler begins with the *first* centimetre, not the zeroth. And the first centimetre - that is, centimetre 1 - starts at zero and ends at one. There is unfortunately no way to reconcile these concepts. The ordinal number words (and equivalents in other languages) predate the invention of the number zero by millennia." CreationDate="2022-07-25T18:13:49.663" UserId="9075" />
  <row Id="16212" PostId="6212" Score="0" Text="I'm guessing Python isn't an option here and that the answer appropriate for MatLab would be _essentially_ different." CreationDate="2020-02-25T16:27:11.223" UserId="1293" />
  <row Id="16214" PostId="6212" Score="1" Text="That's rather the point of my last paragraph.  Games were merely illustrative toward the goal of introducing &quot;cool&quot; into a short intro programming course.  You want to add fun and easy-to-grasp intuition to what's being developed, within the scope of the language you work in." CreationDate="2020-02-25T17:11:50.970" UserId="8928" />
  <row Id="16215" PostId="6213" Score="0" Text="It depends on the length of the lessons." CreationDate="2020-02-25T17:48:50.410" UserId="1293" />
  <row Id="16222" PostId="6216" Score="1" Text="Actually, the question asked about _activities_, not metaphor or analogy." CreationDate="2020-02-25T23:16:39.707" UserId="1293" />
  <row Id="16225" PostId="6216" Score="0" Text="Presumably a highschool teacher won't have much difficulty whomping up some activities involving wall sockets. But I take your point." CreationDate="2020-02-26T15:51:23.750" UserId="8929" />
  <row Id="16230" PostId="6221" Score="1" Text="Note that a Turing Machine has no notion of asynchronous action. A TM is deterministic. Event driven programming isn't. I'll try to come up with a satisfying answer, but you are, at best, simulating events using a polling loop." CreationDate="2020-03-01T16:42:47.953" UserId="1293" />
  <row Id="16231" PostId="6221" Score="2" Text="Event-driven programming is non-deterministic in the sense that a specification for an event-driven language generally doesn't specify the order that event handlers will be executed in. That doesn't mean that an implementation of an event-driven language *must* be non-deterministic in the sense of not always producing the same output via the same sequence of internal states when executing the same program. Javascript for instance is event-driven but single-threaded, and most implementations are deterministic in the latter sense because to not be, they would have to intentionally not be." CreationDate="2020-03-01T17:56:35.597" UserId="8562" />
  <row Id="16232" PostId="6221" Score="1" Text="See the question on lying to students v being pedantic: https://cseducators.stackexchange.com/questions/4717/is-it-better-to-lie-to-students-or-to-be-pedantic-when-teaching-intro-cs. My answer suggests &quot;lying honestly&quot; or something." CreationDate="2020-03-02T00:15:52.407" UserId="1293" />
  <row Id="16245" PostId="6221" Score="0" Text="Sequence, if &amp; while are &quot;all you need&quot; for *sequential programming*, giving possible sequences of states or events per assignments &amp; calls that they surround. But you have more to what you are doing than this--you have a sequential process &amp; an event-generating process--so non-determinacy &amp; concurrency. You need to give--just as when you only have a single sequential process--a &quot;model of computation&quot;--a system state structure &amp; how it starts &amp; changes per evolution of some process(es). (Similarly, teaching iteration should include how to reason re a loop constantly advancing to a goal state.)" CreationDate="2020-03-04T23:52:39.860" UserId="2485" />
  <row Id="16246" PostId="6221" Score="1" Text="I had considered adding, unfortunately these fundamental semantics are typically not given when presenting programming &amp; then learners literally do not know what they are doing &amp; the lucky ones sort of learn some stuff--though not to specify or justify programs. Now having read the kit documentation, alas, that is exactly the case with it. We are not told the semantics of &quot;event handlers&quot;. Eg what if one event happens during processing of another?--Is the event lost? Is it enqued? Does a device wait, or detect further events? Etc etc. Sad. But typical. The blind blinding the blind." CreationDate="2020-03-05T04:01:07.323" UserId="2485" />
  <row Id="16233" PostId="6223" Score="0" Text="This is likely to be true, but one could imagine an event-driven implementation working differently. For example, there could be a data structure mapping event kinds to event-handler lists, and when an event is triggered it immediately looks up the right list and invokes each handler, instead of adding the event to a queue to be dispatched later. That is how triggering events works in e.g. JS/jQuery; so it's possible to do it with neither conditional statements nor unbounded iteration. The missing piece is that &quot;sequence, selection and iteration&quot; doesn't include dynamic dispatch of functions." CreationDate="2020-03-02T13:16:06.487" UserId="8562" />
  <row Id="16234" PostId="6223" Score="0" Text="@kaya3 Definitely, and that's an interesting point. Though I certainly wouldn't bring that up at this point with these kids.  And I suppose if I were being pedantic, I would say that that would ultimately push the `if` down to another layer of abstraction, so it's still not innaccurate to say that that if is somewhere in the code that makes the whole program go. " CreationDate="2020-03-02T13:39:47.910" UserId="27" />
  <row Id="16235" PostId="6223" Score="0" Text="Yes, I wouldn't bring it up in a lesson. I think it's a matter of philosophy, but I argue that it *is* inaccurate to say `if` *must* be in there somewhere. At the lowest level, the program is doing conditional jumps, sure; but a conditional jump forwards is not always logically an `if` statement, and a conditional jump backwards is not always logically a loop. The main benefit of &quot;structured programming&quot; is to avoid the direct manipulation of the instruction pointer required in assembly, so I think it would be perverse to count assembly programs as &quot;structured programs&quot; in that sense." CreationDate="2020-03-02T13:52:15.660" UserId="8562" />
  <row Id="16236" PostId="6223" Score="0" Text="@kaya3 I'm intrigued by your assertion that a conditional jump is not always an if statement, since I think of them as one and the same.  I am open to learning something new, however.  I agree that a large goal of structured programming is to prevent the human from having to work at a low level, but that doesn't make the low level less valid.  It just means that we can step further away from the weeds." CreationDate="2020-03-02T18:50:18.173" UserId="27" />
  <row Id="16238" PostId="6223" Score="0" Text="For example, a `while` loop might be compiled to `(start); conditional jump to end; loop body; jump to start; (end)`. So the conditional jump is forwards but there was no `if` statement, and the repetition is achieved by an unconditional jump backwards. A conditional jump could also break out from the middle of a loop, which isn't possible with just &quot;sequence, selection and iteration&quot; in the structured program theorem." CreationDate="2020-03-02T18:59:03.570" UserId="8562" />
  <row Id="16239" PostId="6223" Score="0" Text="@kaya3 That has simply moved the conditional jump to the top of the loop. My question is more basic than that: why do you assert that a conditional jump is different in some meaningful way from an `if` statement?" CreationDate="2020-03-02T20:23:05.863" UserId="27" />
  <row Id="16240" PostId="6223" Score="0" Text="What I mean is that a conditional jump in the compiled output doesn't mean there was an `if` statement in the original code; and in assembly written by hand, the programmer may have used a conditional jump for something that an `if` statement wouldn't logically be used for in a higher-level language. But also, an `if` statement by itself can't break out of a loop, whereas a conditional jump can, so there is a meaningful semantic difference." CreationDate="2020-03-02T20:35:04.473" UserId="8562" />
  <row Id="16243" PostId="6224" Score="0" Text="I disagree.  The students should certainly have fun, and based on yesterday's game of Rock Paper Scissors Lizard Spock, with score keeping using the Micro:Bit buttons, they are.  If I do this right, they'll also go away with at least some understanding of the science behind what they're doing.  When they get to college, maybe they won't struggle with what you have called abstract concepts." CreationDate="2020-03-04T13:24:33.290" UserId="3524" />
  <row Id="16244" PostId="6224" Score="1" Text="My reasoning was that college is **years** in the future. They may or may not choose CS as a major. They may or may not take a course in theoretical computing and, even if they do, they'll probably not remember a 16hour course taken almost 10 years ago. IMHO, you are doing a good job. Students are having fun and this is what would matter if I were in your shoes." CreationDate="2020-03-04T18:10:39.413" UserId="5109" />
  <row Id="16303" PostId="6224" Score="1" Text="The semester has rocked along, moving to a virtual environment, and &quot;my&quot; kids can explain sequence-selection-iteration.  At this point, the brightest ones can also say &quot;Turing complete&quot; and equate that to the &quot;effectively computable&quot; requirement for a procedure to be an algorithm.  I *told* you these kids were smart!" CreationDate="2020-03-26T13:30:15.070" UserId="3524" />
  <row Id="16248" PostId="6226" Score="1" Text="Thanks for coming back with a response.  I'm sorry my link wasn't so helpful!  :)" CreationDate="2020-03-06T20:46:35.683" UserId="27" />
  <row Id="16249" PostId="6227" Score="1" Text="This is an excellent first answer.  Welcome to [cseducators.se]!" CreationDate="2020-03-06T20:49:51.230" UserId="27" />
  <row Id="16253" PostId="6228" Score="0" Text="Welcome to [cseducators.se].  I have a few requests for edits to your answer.  First, what is &quot;on podium&quot;?  Also, could you expand on your second sentence?" CreationDate="2020-03-09T15:01:59.377" UserId="27" />
  <row Id="16254" PostId="6231" Score="0" Text="How many students is this for, and do you have TA support for marking?" CreationDate="2020-03-10T12:17:55.343" UserId="8562" />
  <row Id="16255" PostId="6231" Score="5" Text="This is a very timely question, and highly deserves my upvote.  It's also something I needed to research this week anyway.  Thanks for bringing it up!" CreationDate="2020-03-10T12:43:31.873" UserId="27" />
  <row Id="16257" PostId="6231" Score="1" Text="The SIGCSE mailing list currently has a long thread about teaching online. It is more directed at delivering lecture, though." CreationDate="2020-03-10T13:01:58.720" UserId="1293" />
  <row Id="16263" PostId="6231" Score="0" Text="@kaya3: 20-28 students per class. No assistant." CreationDate="2020-03-11T01:08:23.843" UserId="3842" />
  <row Id="16839" PostId="6231" Score="0" Text="One idea is that if someone is smart enough to find a way to cheat, perhaps that demonstrates their ability? Like James T. Kirk and the Kobayashi Maru test at Star Fleet Academy. You could start a school for Cybersecurity students." CreationDate="2020-08-18T13:34:03.883" UserId="5349" />
  <row Id="17555" PostId="6231" Score="0" Text="I don't have a full answer about this, but I wanted to mention that there's been a lot of concern about using the various online proctoring/monitoring services, ranging from spyware to privacy concerns (seeing into students' bedrooms and possibly hearing their families) to accessibility (students who need to leave the room at times for in-person tests will need to do the same for online tests)." CreationDate="2021-01-19T03:52:01.137" UserId="8132" />
  <row Id="16256" PostId="6232" Score="0" Text="The [honor code at Dartmouth](https://student-affairs.dartmouth.edu/policy/academic-honor-principle) has worked pretty well, I understand. It was put in place about 1968 and has been revised a couple of times. It works well enough that when violations occur you hear about them." CreationDate="2020-03-10T12:57:32.503" UserId="1293" />
  <row Id="16258" PostId="6232" Score="0" Text="But I think that one reason for the success at Dartmouth is the long history of it. Also that it puts responsibility on the students themselves to deal with violations. It is pretty well thought out." CreationDate="2020-03-10T13:36:10.800" UserId="1293" />
  <row Id="16260" PostId="6232" Score="0" Text="@Buffy Did you watch the video?  In the study, students agree to abide by the MIT Honor Code, and this turns out to remove almost all of the cheating.  One of the wonderful punchlines is that MIT doesn't actually *have* an honor code at all.  It was simply the reminder to act ethically that seemed to have the effect.  Even more interesting, there was the same effect from students trying to remember as many of the ten commandments as possible, even though neither &quot;don't cheat&quot; nor &quot;don't lie&quot; is in there. Also, it turns out that people are almost hilariously bad at remembering them." CreationDate="2020-03-10T16:39:03.890" UserId="27" />
  <row Id="16267" PostId="6232" Score="2" Text="@ben don't use link text of &quot;this&quot; or &quot;here&quot; is can cause accessibility problems. If there is one article you can use the text &quot;article that describes such tools&quot;, or you can use the name of the article. OR ..." CreationDate="2020-03-15T09:59:18.083" UserId="204" />
  <row Id="16268" PostId="6232" Score="3" Text="@ctrl-alt-delor I never even considered that, but it makes total sense. I've fixed it on this one, and I will try to avoid that practice in the future.  Thanks!" CreationDate="2020-03-15T19:36:40.073" UserId="27" />
  <row Id="16266" PostId="6236" Score="0" Text="Suggest that this question (and maybe the title) be edited to specify that Zoom and Notebowl are the tools in use &amp; supported at your institution. You might get better answers with that focus." CreationDate="2020-03-14T15:54:17.523" UserId="8137" />
  <row Id="16261" PostId="6239" Score="0" Text="We have notebowl and zoom. I need much more than what your answer provides. We meet tomorrow as a department and that might be the only meeting before going remote" CreationDate="2020-03-10T23:25:44.600" UserId="294" />
  <row Id="16262" PostId="6239" Score="0" Text="IF there is no time, but plenty of willingness, go to the website for Blackboard and see what the prices are. Even if not ideal, it will work for the emergency. Once it's in use, your school can evaluate it's suitability and try for something better next year if needed. While not perfect, necessarily, it does have everything you _need_. to make 'online' work." CreationDate="2020-03-11T00:18:13.310" UserId="104" />
  <row Id="16264" PostId="6239" Score="1" Text="I'm sorry, but it would be a terrible idea to switch from notebowl (which has essentially the same functionality as blackboard and everyone here is now used to it) to blackboard (which we already had years ago and ditched)." CreationDate="2020-03-11T01:42:38.233" UserId="294" />
  <row Id="16265" PostId="6239" Score="0" Text="Sounds as if you have the answer you need already. Just have to think about how to use the tools to hand and modify your style to work within the new environment. Just make sure the faculty has their own network of contact for ideas and feedback. The students aren't the only ones working within a new paradigm." CreationDate="2020-03-11T02:54:36.997" UserId="104" />
  <row Id="16364" PostId="6240" Score="1" Text="Consider using tmux, it has (more or less) the same base idea as screen, but a more modern design." CreationDate="2020-04-22T12:06:40.980" UserId="5219" />
  <row Id="16269" PostId="6241" Score="2" Text="What is your own expertise here?" CreationDate="2020-03-17T16:09:29.850" UserId="1293" />
  <row Id="16271" PostId="6241" Score="2" Text="Hi MMKhan!  I reopened your question upon closer inspection because you are asking about a very different level of student.  However, you may still find the answers at https://cseducators.stackexchange.com/questions/5080/what-belongs-in-a-low-math-undergraduate-ai-elective-besides-ml to be useful.  Take a look!" CreationDate="2020-03-17T16:21:23.637" UserId="27" />
  <row Id="16272" PostId="6241" Score="0" Text="@Buffy I have expertise in statistical classification and had a course on computational intelligence before." CreationDate="2020-03-18T03:30:51.453" UserId="8993" />
  <row Id="16426" PostId="6241" Score="0" Text="Hi @mm-khan, did you try to take inspiration from the programs of the countless courses available online? And on top of that, do you know whether the students are fluent at at least one programming language? Python could be a good language for ML beginners since it has lots of libraries on the matter, sci-kit learn the first that come to my mind." CreationDate="2020-05-01T00:57:02.713" UserId="5196" />
  <row Id="16548" PostId="6241" Score="1" Text="To quote Steven Covey, &quot;Begin with the End in Mind&quot;. I've always found it useful to start with desired course outcomes and then work backwards. There are lots of ways to teach a course like this, all equally valid, depending on what your goals are." CreationDate="2020-06-05T18:27:40.063" UserId="9157" />
  <row Id="16273" PostId="6242" Score="1" Text="Have you considered using https://zoom.us ?  We use it at [codementor.io](https://codementor.io/erikeidt) and it works pretty well.  One person runs the development environment, and then shares their screen. &#xA; As compared with some of the alternatives, like google hangouts, the remote person can also type and move the mouse.  It does audio &amp; video as well.  Its also free for certain uses/scenarios." CreationDate="2020-03-18T20:56:10.053" UserId="3799" />
  <row Id="16274" PostId="6242" Score="0" Text="@ErikEidt I hadn't.  At the moment, we are still forbidden from using anything with live video in my school district for liability purposes, but there has been talk of opening up Zoom because many other high schools are using it.  Also, you should post that as an answer!" CreationDate="2020-03-18T20:59:19.583" UserId="27" />
  <row Id="16275" PostId="6242" Score="1" Text="You don't need to use the live video, fwiw..  I mentor regularly and I don't even have my camera hooked up." CreationDate="2020-03-18T21:03:40.983" UserId="3799" />
  <row Id="16277" PostId="6242" Score="0" Text="I'm not up to speed on the rules of pair programming, so my concepts might be a bit off. Working on an answer, but need a bit more about the rules, for compliance purposes. The biggest being does &quot;anything with live video&quot; rule out sharing the IDE window live, or is it only regarding video of the person and other video, live or not, is acceptable?" CreationDate="2020-03-18T22:48:09.673" UserId="104" />
  <row Id="16278" PostId="6242" Score="0" Text="Second question about requirements: does the solution need to be a package, or can it use a collection of apps, ie: one for chat, one for video feed, and one for code sharing, etc.?" CreationDate="2020-03-18T22:49:47.803" UserId="104" />
  <row Id="16282" PostId="6242" Score="0" Text="@GypsySpellweaver Interesting point. I don't consider screen sharing to be live video (zoom has live screen sharing, live audio, and live video), but YMMV..." CreationDate="2020-03-19T01:18:43.973" UserId="3799" />
  <row Id="16283" PostId="6242" Score="0" Text="I wouldn't think of screen sharing as a problem. The fear is accidentally videoing a student in some way that they should not be videoed, so I don't think sharing a desktop or a window would be a problem, just webcams.  FWIW, it's not even 100% clear that student to student webcam meetings would even be countermanded, just student to staff." CreationDate="2020-03-19T02:15:46.520" UserId="27" />
  <row Id="16284" PostId="6242" Score="0" Text="@ErikEidt While not included in the question/tags, as irrelevant, the students in question are minors (mostly at least) and for their protection all kinds of restrictions may be imposed. One never knows." CreationDate="2020-03-19T02:20:12.247" UserId="104" />
  <row Id="16285" PostId="6242" Score="0" Text="@ErikEidt I would gladly take answers that I can't directly use, since I suspect that different people could use different answers, and many are facing this issue (broadly speaking) right now." CreationDate="2020-03-19T02:25:28.340" UserId="27" />
  <row Id="16292" PostId="6242" Score="0" Text="I refer you to my earlier answer on another question: the one about VNC, and gnu screen. I will also add Gnu emacs. But only in a safe virtual environment (as you can control the other persons account). Emacs allows two people to share an editor, edit the same code at the same time. I don't think I worked out how to see the other persons text cursor, so we went with Gnu screen (command line), and VNC full graphical desktop.." CreationDate="2020-03-19T20:04:28.423" UserId="204" />
  <row Id="16296" PostId="6242" Score="1" Text="Would VS Live Share be an option? It doesn't share the screen, only the code. VS Code has an audio system also, not sure about VS at the moment." CreationDate="2020-03-22T08:13:24.343" UserId="1333" />
  <row Id="16298" PostId="6242" Score="0" Text="@VisualMelon You should post that as an answer :)" CreationDate="2020-03-23T12:03:22.263" UserId="27" />
  <row Id="16327" PostId="6242" Score="0" Text="@ErikEidt Just a quick alert, Zoom currently has a vulnerability. See [chat transcript](https://chat.stackexchange.com/rooms/59174/conversation/zoom-alert)" CreationDate="2020-04-05T13:50:16.187" UserId="104" />
  <row Id="16287" PostId="6246" Score="0" Text="Switching between driver and navigator should be simple, quick, and seamless. Is it with this solution?" CreationDate="2020-03-19T10:25:02.543" UserId="1293" />
  <row Id="16288" PostId="6246" Score="1" Text="I am, as I *often* am, blown away by your post. Thank you!" CreationDate="2020-03-19T11:21:38.377" UserId="27" />
  <row Id="16291" PostId="6246" Score="0" Text="@buffy It should be seamless. Driver does save, commit, push. New driver does pull, open (or refresh) and starts editing" CreationDate="2020-03-19T20:01:25.580" UserId="104" />
  <row Id="16289" PostId="6247" Score="0" Text="I can't believe there are plugins that do this.  How simple!  I use Eclipse, but most of my students use IntelliJ, but I am sure there are similar plugins there as well.  Fantastic!" CreationDate="2020-03-19T11:25:43.393" UserId="27" />
  <row Id="16290" PostId="6247" Score="0" Text="An advantage of Eclipse is that it is agnostic about the language you program in, with lots of support for other languages than Java. I don't know if that is also true of IntelliJ, but if not then learning Eclipse leverages to many other things. It can even be used for non-programming tasks. Students shouldn't need to learn an entirely different tool set for each course they take. The Eclipse Marketplace has a huge number of resources." CreationDate="2020-03-19T12:31:41.303" UserId="1293" />
  <row Id="16293" PostId="6247" Score="0" Text="I'd guess that without a real-time communication channel, independent of the code, pair programming is reduced to relay programming. The navigator has to tell the driver what to do in the moment, not as a road map to follow until it's their turn. Text chat is workable, while voice chat reduces the distraction of having to &quot;notice&quot; that the partner has said something, and resembles the in-person pair programming more fully. Soros includes a chat window as part of the plugin (from the screen shots anyway.)" CreationDate="2020-03-20T01:13:23.867" UserId="104" />
  <row Id="16294" PostId="6247" Score="0" Text="@GypsySpellweaver XPairtise (maybe others) provide a text based channel. I can't remember whether there is a second cursor the navigator controls. But the navigator isn't a puppet master. They comment only as necessary. The point out potential design flaws, suggest spelling changes for code clarity and such. The driver has complete control and isn't overridden by the navigator. The driver takes a microscopic view of the code, the navigator a macroscopic view. This difference of views is natural and has been observed. The power is in the integration of the two views." CreationDate="2020-03-20T11:59:23.477" UserId="1293" />
  <row Id="16295" PostId="6247" Score="1" Text="But a higher bandwidth channel (voice...) is certainly helpful." CreationDate="2020-03-20T12:00:11.207" UserId="1293" />
  <row Id="16297" PostId="6249" Score="0" Text="Sorry, but this isn't an answer and it is technically spam by the rules here since you don't give your affiliation with CMU." CreationDate="2020-03-22T23:46:03.447" UserId="1293" />
  <row Id="16299" PostId="6249" Score="0" Text="@Buffy I'm puzzled by your assertion that it's not an answer, since it's about education without testing (or at least without testing that has stakes.  The &quot;testing&quot; there is aboue creating recall opportunities, no?)  I agree that it's in violation of the rule about disclosing the author's affiliation, though.  (Seeing as the user is unregistered, I will edit.)" CreationDate="2020-03-24T02:01:58.073" UserId="27" />
  <row Id="16301" PostId="6249" Score="0" Text="@BenI. The question was about _evaluation_ without testing." CreationDate="2020-03-24T11:34:05.763" UserId="1293" />
  <row Id="16302" PostId="6249" Score="1" Text="@Buffy That's... a good point.  Somehow I had misunderstood the question to be about *education* without testing, but looking at it, it is plainly not.  Sometimes I look back at something I have misunderstood and absolutely cannot figure out what I didn't see.  The question is perfectly clear." CreationDate="2020-03-24T12:31:41.813" UserId="27" />
  <row Id="16300" PostId="6251" Score="1" Text="I think there is a page (somewhere) on how to ask good questions on this site. It may be relevent." CreationDate="2020-03-24T06:45:10.427" UserId="204" />
  <row Id="16306" PostId="6259" Score="2" Text="I love this idea.  I'm going to see if I can figure out a way to steal it in my own classroom :)  Oh, and I sent the question to someone who may have some interesting things to add about the actual mathematics of the modeling!" CreationDate="2020-03-27T21:07:10.030" UserId="27" />
  <row Id="16310" PostId="6259" Score="1" Text="I highly recommend the Numberphile video https://www.youtube.com/watch?v=k6nLfCbAzgo where they're modeling the SIR model in Geogebra." CreationDate="2020-03-28T15:55:02.503" UserId="997" />
  <row Id="16307" PostId="6261" Score="0" Text="So, you want different people to have different amounts of time on the same exam?  Or do you just want them to start at different times?" CreationDate="2020-03-28T00:23:28.837" UserId="27" />
  <row Id="16311" PostId="6261" Score="0" Text="I need to cover both cases." CreationDate="2020-03-28T17:10:46.793" UserId="6410" />
  <row Id="16312" PostId="6261" Score="0" Text="At a guess, to control the amount of time available to complete the test, probably create the same &quot;test&quot; as different tests, each with their own time limit. Controlling the time, and date, the test is accessible is probably able to be controlled by &quot;class&quot; or group. Depending on your variables, this could be a significant amount of permutations, or it could be a simple setup." CreationDate="2020-03-29T03:02:46.743" UserId="104" />
  <row Id="16313" PostId="6261" Score="0" Text="Blackboard calls this &quot;adaptive release&quot;." CreationDate="2020-03-29T04:21:55.673" UserId="8562" />
  <row Id="16315" PostId="6261" Score="0" Text="For each test Blackboard gives the possibility to add exceptions, and this works for me." CreationDate="2020-03-29T15:20:19.150" UserId="6410" />
  <row Id="16308" PostId="6263" Score="1" Text="Welcome to the site.. Come back for more." CreationDate="2020-03-28T15:21:28.783" UserId="1293" />
  <row Id="16309" PostId="6263" Score="2" Text="It's not especially relevant here, but the late professor Pat Doyle once wrote a paper: _An In-Eating Cannibalistic Society Could Be Stable_. It used the standard predator-prey model and unified the predator and prey variables." CreationDate="2020-03-28T15:40:43.077" UserId="1293" />
  <row Id="16316" PostId="6263" Score="0" Text="Added stuff about using spreadsheets for this." CreationDate="2020-03-30T13:13:18.603" UserId="2178" />
  <row Id="17352" PostId="6266" Score="0" Text="Can I ask for a source of the definition you're using? E.g., the text from which I teach discrete math (Rosen), at a community college, doesn't include such a clause in its definition of &quot;algorithm&quot;. I'd suggest you'd be fine to just set that aside for a middle-school class, or leave it until later. In my case I even leave the Halting Problem aside until the last day of class (at which point the course halts)." CreationDate="2020-12-01T03:49:11.637" UserId="8137" />
  <row Id="17354" PostId="6266" Score="1" Text="@DanielR.Collins I'm pretty sure the first place I saw it was *Computer Science Illuminated* by Dale and Lewis.  You may be right about leaving it out for the tweenagers." CreationDate="2020-12-01T16:00:04.423" UserId="3524" />
  <row Id="17357" PostId="6266" Score="0" Text="For what it's worth, looking at my 1E Dale/Lewis, I don't see that as part of their definition. Consider: following Rosen I emphasize that an algorithm: (a) halts in finite time, and (b) gives correct solutions. The fact that the problem is *theoretically solvable* seems immediately implied, and therefore not needed explicitly. The existence of problems not-theoretically-solvable seems like a separate, higher-order issue that can be left for later. Indeed, Dale/Lewis leave the idea of &quot;unsolvable&quot; problems for the very last section of the book, just like I do now. Maybe I got it there." CreationDate="2020-12-01T22:49:36.653" UserId="8137" />
  <row Id="17358" PostId="6266" Score="0" Text="@DanielR.Collins  Not Dale/Lewis, eh?  I'll have to poke around.  I'm sure it was in a CS0 book, but I gave many of my books away when I retired." CreationDate="2020-12-01T23:32:04.170" UserId="3524" />
  <row Id="16317" PostId="6267" Score="0" Text="Thank you.  I *really like* the 'last digit of pi' question." CreationDate="2020-03-31T10:21:10.087" UserId="3524" />
  <row Id="16318" PostId="6267" Score="6" Text="Well, except that the last digit of pi doesn't exist. Close, but I can't award any cigars." CreationDate="2020-03-31T10:51:38.167" UserId="1293" />
  <row Id="16319" PostId="6267" Score="0" Text="Like I needed any more papers to read to procrastinate :)" CreationDate="2020-03-31T12:34:08.527" UserId="6137" />
  <row Id="16324" PostId="6269" Score="1" Text="First time I notice &quot;goto L&quot;." CreationDate="2020-04-01T10:40:54.497" UserId="2103" />
  <row Id="16322" PostId="6270" Score="0" Text="This seems rather like one of the Euler Problems. Now I want to go do it :)" CreationDate="2020-04-01T00:05:37.417" UserId="27" />
  <row Id="16323" PostId="6270" Score="1" Text="@BenI., much too simple for an Euler Problem." CreationDate="2020-04-01T00:28:07.537" UserId="1293" />
  <row Id="16320" PostId="6271" Score="2" Text="The SIGCSE mailing list has a discussion going on about policies on P/F. I assume you are a member." CreationDate="2020-03-31T17:59:01.037" UserId="1293" />
  <row Id="16321" PostId="6272" Score="1" Text="Yeah, we came up with a reasonable policy here at Denison, and I was on the group that proposed it. Part of what we factored in were statements from med schools about how they would be handling pass/fail marks on transcripts for this semester. It would probably be helpful to have similar such statements from a few flagship CS grad programs." CreationDate="2020-03-31T20:07:18.853" UserId="294" />
  <row Id="16325" PostId="6273" Score="2" Text="One scary data point was certain med schools saying &quot;we won't hold pass grades against you if you didn't have a choice&quot;, which would mean my institution's policy &quot;everyone can opt-in to pass/fail&quot; would lead to students who choose that option being penalized. I kind of figured CS grad students would not take such a hard line, for reasons analogous to those you laid out." CreationDate="2020-04-01T20:14:22.657" UserId="294" />
  <row Id="16328" PostId="6276" Score="0" Text="I really like the examples, but I'm pretty sure &quot;fuzzy and amorphous&quot; means the same thing as &quot;not a well-defined mapping from program inputs to program outputs.&quot;" CreationDate="2020-04-06T02:35:47.460" UserId="3524" />
  <row Id="16329" PostId="6276" Score="1" Text="@BobBrown Yes, I was just trying to explain why I think you are right to be wary of such examples." CreationDate="2020-04-06T02:39:37.640" UserId="8562" />
  <row Id="16331" PostId="6278" Score="2" Text="To help get better answers, could specify the platform or tools you will be using for your class. Target students would also help, i.e. university, teenagers, young students, etc." CreationDate="2020-04-08T00:42:14.517" UserId="104" />
  <row Id="16332" PostId="6278" Score="1" Text="Thanks. It will be an open class for beginner programmers, so I expect most of the people will be in a 15-30 year old range, but it's not limited to that. As for the platform, I might be using youtube in a live broadcast, so the video is there for students to go back to whenever they need it." CreationDate="2020-04-08T01:18:22.480" UserId="4062" />
  <row Id="16333" PostId="6282" Score="1" Text="Do you have, or can you develop, any contact with the instructors? I realize that odds are each student you see will be from a different class, or even country, but contact with the instructor might help, in this and many other cases." CreationDate="2020-04-09T23:14:11.603" UserId="104" />
  <row Id="16334" PostId="6282" Score="0" Text="It would be nice if this was an interacting community of students, instructors, mentors/tutors, but that is not the case as yet." CreationDate="2020-04-10T00:08:22.097" UserId="3799" />
  <row Id="16337" PostId="6282" Score="0" Text="[BenI.](https://cseducators.stackexchange.com/a/6283/1293) has some good advice here, and I would require of each student that they give me the email address of their instructor and let them know that you might need to contact them for advice in mentoring." CreationDate="2020-04-10T13:01:57.403" UserId="1293" />
  <row Id="16335" PostId="6283" Score="2" Text="Hmmm. &quot;open-help&quot;? Can you point to an example. I'm surprised and wonder how that would work." CreationDate="2020-04-10T11:01:07.760" UserId="1293" />
  <row Id="16336" PostId="6283" Score="1" Text="@Buffy I cannot point to a link, but I have used structures like this in the past (within my classroom) and have been considering ways to adapt the model to virtual education. The appeal, I think, is obvious, when I can't lock down or in any way verify what students have actually done." CreationDate="2020-04-10T11:06:39.750" UserId="27" />
  <row Id="16340" PostId="6284" Score="0" Text="The first wrong way sounds a lot like APL, which results in write-only coding." CreationDate="2020-04-12T16:38:06.047" UserId="5349" />
  <row Id="16341" PostId="6286" Score="0" Text="No, it isn't my main concern. But these are good suggestions." CreationDate="2020-04-16T22:47:58.340" UserId="1293" />
  <row Id="16347" PostId="6289" Score="2" Text="This is an excellent (and central!) question." CreationDate="2020-04-19T20:58:03.450" UserId="27" />
  <row Id="16348" PostId="6292" Score="1" Text="If a complex IDE supports more than just one language then it might be well worth the initial pain of learning it. I use Eclipse, which is also gigantic, written in Java, but supports many languages and other sorts of projects since it has a plugin architecture. Learn it once, use it always." CreationDate="2020-04-20T15:19:44.153" UserId="1293" />
  <row Id="16349" PostId="6292" Score="0" Text="Have you thought about using something like Vagrant or Docker to create a standard environment? Down-sides; It could be challenging if you've never done anything like it before,\* and the instructions for installing Vagrant/Docker will be different for students running on different hardware platforms. Up-side: Once everybody's got it installed and running, then all of your students will be running in _exactly_ the same environment." CreationDate="2020-04-20T17:05:20.827" UserId="1269" />
  <row Id="16350" PostId="6292" Score="0" Text="\* You might get lucky and find that somebody has already built a Vagrant Box or a Docker container that meets your needs." CreationDate="2020-04-20T17:05:45.593" UserId="1269" />
  <row Id="16351" PostId="6292" Score="0" Text="Look at [NetBeans](https://netbeans.org/downloads/old/8.2/), pre 9.0 should be light enough and is available in all 3 platforms." CreationDate="2020-04-20T17:29:24.477" UserId="104" />
  <row Id="16352" PostId="6292" Score="0" Text="@SolomonSlow: I thought about using Docker but I wasn't sure which IDE to put on it. It could resolve part of the portability issue, however!" CreationDate="2020-04-20T20:37:46.843" UserId="9058" />
  <row Id="16353" PostId="6292" Score="2" Text="Don't teach git and C++ at the same time. I don't care how much experience they have there brain will explode (30 years in not enough). Teach git, using one of there existing languages. Then move on to C++." CreationDate="2020-04-21T07:04:58.807" UserId="204" />
  <row Id="16354" PostId="6292" Score="1" Text="As you are teaching `git` maybe you can help with my question, it about 2 years old, has had loads of attention, but still no satisfactory answer. It is asking how can I teach git? (I would be happy if I could just become proficient with it) https://cseducators.stackexchange.com/q/2897/204" CreationDate="2020-04-21T07:08:42.953" UserId="204" />
  <row Id="16357" PostId="6292" Score="0" Text="Do you need a projects system (i.e. an integrated zero-configuration build process)? If not, and editor like VS Code might meet your requirements." CreationDate="2020-04-21T11:14:35.483" UserId="1333" />
  <row Id="16358" PostId="6292" Score="0" Text="@ctrl-alt-delor, &quot;Teaching git&quot; leaves a lot unsaid. There are entire books devoted to the subject, but you can do a few simple things—enough for a lone committer to manage a single branch—if all you have is a cheat sheet with a few magic spells. The ocean is vast and deep, but you don't have to know the techniques of celestial navigation or deep sea diving in order to enjoy an afternoon at the beach. Yeah, you can get into trouble at the beach, but hopefully, leftcursor is prepared to play the role of lifeguard." CreationDate="2020-04-21T14:24:32.807" UserId="1269" />
  <row Id="16359" PostId="6292" Score="1" Text="I agree with @ctrl-alt-delor, but I don't have the liberty to alter the curriculum. So I do a quick dip in Git, just so the students know how to commit, branch and resolve conflicts. More a trip to the lake than the beach, but I think a lot of my students drown anyway :P" CreationDate="2020-04-21T19:17:29.750" UserId="9058" />
  <row Id="16360" PostId="6292" Score="0" Text="@VisualMelon : Zero-configuration would be a bonus, but I can deal with minimal configuration. I heard VS Code works on Linux and Mac, I should give it a try." CreationDate="2020-04-21T19:23:02.203" UserId="9058" />
  <row Id="16361" PostId="6292" Score="0" Text="Who comes up with the curriculum? Do they teach? It is like someone is saying that we eventually need to be able to drive an F1 car, and that is hard, so better start now. Except these F1 cars have manual gear-change, manual ignition advance (yes. who can remember what that is), manual fuel mix control, separate break pedal for each wheel (one for each foot), manual independent power distribution between all 6 wheels, etc..." CreationDate="2020-04-21T21:21:08.333" UserId="204" />
  <row Id="16362" PostId="6292" Score="0" Text="Would [this](https://blog.codingblocks.com/2019/setting-up-a-c-competitive-programming-environment/) be something you are looking for? It's not exactly an IDE though." CreationDate="2020-04-22T08:27:13.970" UserId="9068" />
  <row Id="17743" PostId="6292" Score="0" Text="Is DEV-C++ by Embarcadero that is suggested in this thread truly portable, i.e. can the install folder be moved around without breaking the app? When I execute it, I find it odd that it defaults to the C:/Program Files/ folder for install. From installing tons of portables, it's not the standard behavior. Since it is a +-500Mb install, I prefer to be 100%! Thanks!" CreationDate="2021-02-20T19:01:12.150" UserId="10136" />
  <row Id="20704" PostId="6292" Score="0" Text="I  suspect that in 2022, vscode is probably the best tool fits your bill and it is not that complex to set it up." CreationDate="2022-08-22T02:15:42.157" UserId="9884" />
  <row Id="16540" PostId="6294" Score="0" Text="This Reddit thread may be of interest: https://www.reddit.com/r/discordapp/comments/gq989v/teachers_that_use_discord_are_cool/" CreationDate="2020-05-30T06:04:09.250" UserId="8132" />
  <row Id="16365" PostId="6297" Score="0" Text="Related but not the same: https://cseducators.stackexchange.com/q/3038/204" CreationDate="2020-04-23T08:01:23.410" UserId="204" />
  <row Id="16366" PostId="6297" Score="2" Text="I'm not sure I understand. In natural language most usages of &quot;or&quot; have an &quot;xor&quot; implication. &quot;Give me liberty xor give me death&quot;. Is that what you mean or do I miss something?" CreationDate="2020-04-23T10:28:27.257" UserId="1293" />
  <row Id="16367" PostId="6297" Score="0" Text="That what all the statements that I found are like. However they have switched from predicates (statements that are true of false), to options or procedures. Can you ask is this statement true or false &quot;Give me liberty xor give me death&quot;. It is like asking if &quot;go for a run&quot; is true or false. It is the wrong part of speech: An imperative statement (do this). Not a predicate that can be embedded into a question. You can not say &quot;Are you Give me liberty xor give me death?&quot;" CreationDate="2020-04-23T10:36:10.803" UserId="204" />
  <row Id="16368" PostId="6297" Score="0" Text="I still don't understand, since your &quot;and&quot; example isn''t boolean. I'm just confused about what you need here." CreationDate="2020-04-23T10:44:15.330" UserId="1293" />
  <row Id="16369" PostId="6297" Score="0" Text="The and example &quot;the lights are on and my eyes are open&quot; is a predicate. You can say that it is true or false. At this time it is true, but then I close my eyes and it is false." CreationDate="2020-04-23T10:56:24.197" UserId="204" />
  <row Id="16370" PostId="6297" Score="1" Text="Actually, though, when said by a natural language speaker it is taken as a statement of fact. I.e. True. But to warp natural language why not &quot;the lights are on xor my eyes are open&quot;. Though a speaker would probably use &quot;or&quot; when meaning &quot;xor&quot;." CreationDate="2020-04-23T11:07:30.907" UserId="1293" />
  <row Id="16371" PostId="6297" Score="0" Text="When someone asks me &quot;Would you like pancakes or eggs&quot; my answer might just be &quot;yes&quot;." CreationDate="2020-04-23T11:18:56.463" UserId="1293" />
  <row Id="16377" PostId="6297" Score="1" Text="multiway switching? https://en.wikipedia.org/wiki/Multiway_switching" CreationDate="2020-04-23T13:29:25.823" UserId="2103" />
  <row Id="16378" PostId="6297" Score="2" Text="Good luck! IMO, the trouble you're having is that XOR is an unfamiliar concept to most people. It's easy to construct an English language assertion that uses it. E.g.; &quot;Either my house has five rooms or my house is painted red, but both of those things are not true.&quot; That's declarative, and it's testable, and it's completely unlike anything that anybody ever says outside of the context of some logic puzzle." CreationDate="2020-04-23T13:34:09.833" UserId="1269" />
  <row Id="16384" PostId="6297" Score="0" Text="Multiway, esp. 3-way is the example I'm always drawn to. Both switches are Boolean (up or down) and the light is the resultant Boolean (on or off)." CreationDate="2020-04-23T15:15:03.867" UserId="104" />
  <row Id="16385" PostId="6297" Score="0" Text="I'm thinking that the _natural language_ examples will end up not being naturally `xor`, rather they will be `(A and not B) or (not A and B)`." CreationDate="2020-04-23T15:17:04.627" UserId="104" />
  <row Id="16388" PostId="6297" Score="0" Text="So far @MichelBillaud's light switches is the only example that meets the criteria. Maybe also buffy's tortology. solomonslow's observation seems to be true." CreationDate="2020-04-23T16:44:02.053" UserId="204" />
  <row Id="16403" PostId="6297" Score="1" Text="Actually, there's a problem with, say, unique choice questions. You have to tick A, B, or C, but only one of them. That's not  A xor B xor C." CreationDate="2020-04-25T11:00:03.817" UserId="2103" />
  <row Id="16421" PostId="6297" Score="0" Text="Am I leaving a comment or an answer but not both?" CreationDate="2020-04-29T23:26:03.783" UserId="2485" />
  <row Id="16422" PostId="6297" Score="0" Text="@ctrl-alt-delor I guess a tortology is a tortuous tautology? Sounds perfect for this question." CreationDate="2020-04-29T23:31:58.380" UserId="2485" />
  <row Id="16372" PostId="6303" Score="0" Text="Of course an interpreted language isn't just run as is. All the steps that a compiler does are still done, but while the program - or script - is running, every time it is running, whereas with compiled software, you'd have to do the first three steps only once. Hence using an interpreted language is only practical for rather small projects. I just want to have an illustrative example for this issue." CreationDate="2020-04-23T11:40:43.413" UserId="8497" />
  <row Id="16373" PostId="6303" Score="0" Text="No, not true. The first steps are done only once in any modern interpreter. Remember that Pascal was often run on a p-machine." CreationDate="2020-04-23T11:48:30.860" UserId="1293" />
  <row Id="16374" PostId="6303" Score="0" Text="I'm not an expert on that, but I'm pretty sure that you are going to do all of those steps again on your machine if I did send you mydemo.py and asked you to run it." CreationDate="2020-04-23T12:07:14.150" UserId="8497" />
  <row Id="16375" PostId="6303" Score="1" Text="I am an expert, actually. But if you give me source, I need to run all the steps, of course, unless the &quot;interpreter&quot; will export an abstract tree that I can interpret. That is how the p-machine worked. And since it was implemented on various hardware you could create the abstract tree (first three steps) and then &quot;run&quot; on a different architecture." CreationDate="2020-04-23T12:51:21.187" UserId="1293" />
  <row Id="16376" PostId="6303" Score="1" Text="Actually, Java works this way too. The &quot;compiler&quot; outputs JVM code, which runs on an interpreter - the Java Virtual Machine. There are tools that will take the JVM code and produce real machine code for your architecture, but they are used mostly in high performance applications." CreationDate="2020-04-23T13:13:32.863" UserId="1293" />
  <row Id="16390" PostId="6303" Score="0" Text="Your edits are really interesting and I'll use them to brush up on my knowledge, but all those details are too involved for the point I'm trying to make." CreationDate="2020-04-24T14:47:18.933" UserId="8497" />
  <row Id="16379" PostId="6304" Score="0" Text="Love the last one, but 1 - 3 seem to be inclusive or, not xor." CreationDate="2020-04-23T14:49:59.327" UserId="1293" />
  <row Id="16380" PostId="6304" Score="0" Text="How about &quot;you will pass this class, or not&quot;." CreationDate="2020-04-23T14:52:13.010" UserId="1293" />
  <row Id="16381" PostId="6304" Score="0" Text="@Buffy That's merely a Boolean, xor requires two Booleans to compare." CreationDate="2020-04-23T14:54:12.047" UserId="104" />
  <row Id="16382" PostId="6304" Score="0" Text="@GypsySpellweaver, how so? &quot;You will pass this class or you will not pass this class&quot;. Clear xor. &quot;You will pass this class or you won't be able to graduate&quot;." CreationDate="2020-04-23T15:04:46.573" UserId="1293" />
  <row Id="16383" PostId="6304" Score="0" Text="Pass `or` not is a result. What are the two, _exclusive_ conditions which determine the result. Pass `not` graduate is a single input `not`ed." CreationDate="2020-04-23T15:12:53.393" UserId="104" />
  <row Id="16386" PostId="6304" Score="0" Text="@Buffy A xor not A is true. So yes it is an xor. But also a tautology. Is it a useful phrase? I don't know." CreationDate="2020-04-23T16:36:56.943" UserId="204" />
  <row Id="16387" PostId="6304" Score="0" Text="1 and 2 look like inclusive. But only incidentally. E.g. You can enter if you are tall or short. There are incidental exclusive, that is we would not exclude someone if they were found to be both tall and short." CreationDate="2020-04-23T16:41:15.353" UserId="204" />
  <row Id="16394" PostId="6305" Score="1" Text="While this is a use of `or` in english, and it is exclusive. It is not an xor operation. Because it is not a predicate. It is a procedure. It is selection (a branch/if/conditional), not xor." CreationDate="2020-04-24T21:36:46.083" UserId="204" />
  <row Id="16416" PostId="6305" Score="0" Text="@ctrl-alt-delor, I don't see that statement as imperative. I see an assertion about the future. It can be tested after the person who made it returns from the animal shelter. If they return with one dog or one cat, then the assertion was true. If they come back with anything else, then the assertion was false." CreationDate="2020-04-28T13:22:02.383" UserId="9084" />
  <row Id="16419" PostId="6305" Score="0" Text="@besmirched and if they comeback with both?" CreationDate="2020-04-29T09:11:37.660" UserId="204" />
  <row Id="16420" PostId="6305" Score="0" Text="@ctrl-alt-delor Ha ha! While I still disagree with you about whether or not the example is &quot;procedural,&quot; I guess I've added another example of how one must be careful when attempting to express the XOR idea in English." CreationDate="2020-04-29T11:12:17.820" UserId="9084" />
  <row Id="16389" PostId="6306" Score="1" Text="That sounds like what I'm looking for! Gotta play around with it a bit first to see if it's really the answer I was looking for." CreationDate="2020-04-24T14:44:09.067" UserId="8497" />
  <row Id="16432" PostId="6308" Score="0" Text="I liked your simple and easy to understand example! (+1) Sorry for editing your answer too much. I extracted my changes and made it another answer based on yours, as was suggested to me. I hope I have restored your text without mistake." CreationDate="2020-05-03T05:31:07.387" UserId="9097" />
  <row Id="16433" PostId="6308" Score="0" Text="@Antares it's all good." CreationDate="2020-05-03T05:34:07.510" UserId="1401" />
  <row Id="16392" PostId="6309" Score="0" Text="Actually, I'm not sure. I think most (or at least many) uses of _or_ actually have an _xor_ intent. &quot;Pancakes or eggs?&quot; The asker will be surprised if you say both. It generates a laugh." CreationDate="2020-04-24T20:47:09.763" UserId="1293" />
  <row Id="16395" PostId="6309" Score="0" Text="@buffy &quot;pancakes or eggs&quot; is selection not the xor predicate. It seems that the same word is used for exclusive selection and inclusive predicate." CreationDate="2020-04-24T21:39:23.267" UserId="204" />
  <row Id="16404" PostId="6309" Score="0" Text="@Buffy Exactly! &quot;Pancakes or eggs&quot; is a perfect example. If you try to turn it to code, it becomes clear it's not analogous to `pancakes != eggs`, but instead it's branching. I don't think that the word &quot;or&quot; can, *by itself*, carry an xor relationship." CreationDate="2020-04-25T13:31:49.960" UserId="27" />
  <row Id="16405" PostId="6309" Score="0" Text="I'm losing track of the argument here. It isn't a question about whether pancakes _are_ eggs. It about whether &quot;I'm eating&quot; pancakes or eggs or maybe both. It isn't the &quot;thing&quot;, but the action. &quot;I'm eating pancakes&quot; can be true or false. Etc. If I&quot;m not making sense, then I don't really understand the meaning or intent of the OP here." CreationDate="2020-04-25T13:35:54.520" UserId="1293" />
  <row Id="16406" PostId="6309" Score="0" Text="@Buffy The equivalent code is `if (choosesPancakes) bringPancakes(); else if (choosesEggs) bringEggs();` But &quot;both&quot; makes no sense here, and in any case, there is nothing to indicate that both &quot;both&quot; and &quot;neither&quot; would somehow evaluate to `false`.  Ctrl-alt-delor can correct me if I misunderstood, but I believe he wants a situation where the English &quot;or&quot; is evaluated along the lines of Java's `^` or `!=`, and where the full truth table for $xor$ holds true and makes sense. My contention is that those 4 truth table evaluations (00-&gt;0, 01-&gt;1, 10-&gt;1, 11-&gt;0) cannot be held by the word &quot;or&quot;." CreationDate="2020-04-25T16:54:38.643" UserId="27" />
  <row Id="16430" PostId="6309" Score="0" Text="What about using &quot;either or&quot; for paraphrasing xor... would this improve things? As in &quot;Either eggs or pancakes?&quot; -- I think the question must be formed like this: &quot;What is tastier? Either pancakes or eggs? [optionally/implicitly: Pick one exclusive/single option and discard the other!]. &quot;Both&quot; and &quot;None&quot; would not be valid answers then." CreationDate="2020-05-02T07:53:15.720" UserId="9097" />
  <row Id="16431" PostId="6309" Score="0" Text="@Antares That seems closer to me, though &quot;invalid&quot; is, of course, different from &quot;false&quot;, and the word `or` is only holding half of the meaning. That said, it seems to me that the addition of `either` makes it work fairly well.  In the context of this question, your formulation is one of the best possible answers, and shouldn't be buried in a comment. You should really post an answer. :)" CreationDate="2020-05-02T10:04:26.740" UserId="27" />
  <row Id="16407" PostId="6311" Score="1" Text="Yes! &quot;Does this differ from that?&quot; is truly xor.  I don't think that *or* can hold that relationship in English." CreationDate="2020-04-25T17:00:04.810" UserId="27" />
  <row Id="16425" PostId="6311" Score="0" Text="@BenI. But that particular phrasing lacks a level of quotation. Correct would be, whether x differs from whether y." CreationDate="2020-05-01T00:06:58.443" UserId="2485" />
  <row Id="16608" PostId="6311" Score="1" Text="@Flater, `!=` *is* `xor`! The distinction between the return values of the bitwise and logical operators when applied to bit arrays, was out of scope. I'd be happy to provide a comprehensive answer if you asked for a deeper explanation." CreationDate="2020-06-19T15:02:35.660" UserId="9075" />
  <row Id="16427" PostId="6315" Score="0" Text="I admit that &quot;lightweight&quot; is a qualitative term and can vary wildly from person to person. I think we can get relatively &quot;lightweight&quot; modern IDEs. @RedDragon mentioned SublimeText, and I tried Geany, two text editors with IDE plugins which are both modern and simple to use." CreationDate="2020-05-01T13:58:07.930" UserId="9058" />
  <row Id="16424" PostId="6316" Score="0" Text="Zen moment: it is a comment and an answer." CreationDate="2020-04-30T13:23:15.937" UserId="27" />
  <row Id="16607" PostId="6318" Score="0" Text="_&quot;So &quot;all are different&quot; and &quot;all are same&quot; are inverse to each other, logically.&quot;_ Watch out with your phrasing on the inverses. This is only correct for **two** elements, not for more. In the set `1,1,2`, not all numbers are the same, but not all numbers are different either! Therefore, these two statements are not each other's inverse." CreationDate="2020-06-19T14:54:18.060" UserId="2164" />
  <row Id="16438" PostId="6320" Score="2" Text="Python is good for now. They will pick up (via courses or individual practice) whatever else is needed. The first language is hard, the others come easier." CreationDate="2020-05-04T17:38:09.280" UserId="5379" />
  <row Id="16439" PostId="6320" Score="1" Text="Logic is the most universal..." CreationDate="2020-05-04T17:51:28.437" UserId="6556" />
  <row Id="16440" PostId="6320" Score="0" Text="It doesn't matter.  You should aim to learn enough programming languages so that picking up another one is easy." CreationDate="2020-05-04T18:09:52.467" UserId="7983" />
  <row Id="16442" PostId="6320" Score="1" Text="@AlexanderWoo, actually it is _easy_ only if you take a superficial (syntax) view and stay within a paradigm. Otherwise it is harder. And a lot of languages is a poor substitute for really using one well." CreationDate="2020-05-04T21:49:01.043" UserId="1293" />
  <row Id="16444" PostId="6320" Score="1" Text="My experience is that because I learned C and Motorola assembly, other languages were easy to pickup.   Mastering fundamentals, such as sequence, selection and iteration accelerates the ability to read a new language and understand the bigger picture" CreationDate="2020-05-04T21:54:34.480" UserId="9107" />
  <row Id="16475" PostId="6320" Score="1" Text="...does your nephew want to do this? Is there something your nephew is especially interested in? This seems far more important than what is technically pedagogically best." CreationDate="2020-05-17T00:38:43.767" UserId="919" />
  <row Id="16477" PostId="6320" Score="0" Text="The nephew is interviewing for a STEM club, robotics" CreationDate="2020-05-20T16:15:48.960" UserId="9107" />
  <row Id="16478" PostId="6320" Score="0" Text="Upon review, confining the question to learning the said 4 fundamentals as opposed to asking regarding STEM preparation may have been more constructive." CreationDate="2020-05-20T16:33:30.137" UserId="9107" />
  <row Id="16441" PostId="6321" Score="3" Text="As mentioned, it's not the language choice which is important, it's learning to think in a manner which allows programs to be written. Computational Thinking is the term in current use. The language is a tool, not the goal." CreationDate="2020-05-04T20:49:41.623" UserId="104" />
  <row Id="16443" PostId="6321" Score="0" Text="@GypsySpellweaver, maybe you should write up an answer around computational thinking." CreationDate="2020-05-04T21:49:39.317" UserId="1293" />
  <row Id="16445" PostId="6321" Score="0" Text="Would you be able to expand on how each language is a different mental model? I am currently an undergrad and have essentially been operating on the principle that languages just use different syntax to do the same thing (ie. C++ is Python with more words)." CreationDate="2020-05-05T01:45:49.990" UserId="9109" />
  <row Id="16446" PostId="6321" Score="0" Text="Writing an answer around computational thinking was a thought I had, but I decided it would qualify as &quot;Not An Answer&quot; as it would by topical, yet not really answering the question." CreationDate="2020-05-05T02:48:06.073" UserId="104" />
  <row Id="16447" PostId="6321" Score="2" Text="@user760900, I've written here earlier about paradigms and learning for beginners: https://cseducators.stackexchange.com/a/4295/1293" CreationDate="2020-05-05T10:03:04.070" UserId="1293" />
  <row Id="16479" PostId="6321" Score="0" Text="My expectation is that if a 14 y.o. learns a given language, he / she will need to learn another language depending on the functional career route.  My gut tells me simplicity is the key, while ensuring that the basics (sequence, selection, iteration) are practiced to ensure preparation for a new language: for example if studying engineering learning MATLAB" CreationDate="2020-05-20T16:37:15.303" UserId="9107" />
  <row Id="16455" PostId="6327" Score="0" Text="Is there a reason you're using that book instead of Sipser?" CreationDate="2020-05-09T21:34:10.187" UserId="27" />
  <row Id="16456" PostId="6327" Score="0" Text="No serious reason, I saw many people recommend both the Ullman and Sipser, so I though of first reading the Ullman and then move on to Sipser" CreationDate="2020-05-10T06:36:12.530" UserId="9125" />
  <row Id="16457" PostId="6327" Score="0" Text="I'm not familiar with the Ullman, but I am mostly self-taught on computational theory, I've found that automata stuff is pretty thoroughly covered online, and googling around gets me clear answers to most questions. Periodically, I also have asked questions at [cs.se]." CreationDate="2020-05-11T01:14:15.320" UserId="27" />
  <row Id="16458" PostId="6329" Score="1" Text="Include the concept of &quot;Responsive&quot; design, sometimes called &quot;Mobile first&quot;, in your studies. Helps with the mobile vs. laptop issue." CreationDate="2020-05-11T13:24:45.513" UserId="104" />
  <row Id="16459" PostId="6331" Score="1" Text="Say more about how you communicate with the students and they with you and each other. &quot;online&quot; doesn't give a clear enough picture." CreationDate="2020-05-13T18:24:53.877" UserId="1293" />
  <row Id="16460" PostId="6331" Score="0" Text="It will be my first time. I've thought of solving reasoning problems through powerpoint on zoom software. Is there any activity which children can do as a group that can enhance their problem solving skills?" CreationDate="2020-05-13T18:34:17.837" UserId="9134" />
  <row Id="16461" PostId="6331" Score="1" Text="There may be legal issues with Zoom around privacy with youngsters. I don't know the law in India, however. You should look into that." CreationDate="2020-05-13T18:37:41.653" UserId="1293" />
  <row Id="16543" PostId="6331" Score="1" Text="Hi, as an 18 year old student (sorry for being here in the educators stack exchange), I can say that most children would prefer video games of physical or mental puzzles.&#xA;Instead of viewing this as a bad thing, think of it as a new tool to use. Even though it might seem weird, there are a bunch of problem solving and puzzler games out there - encourage your students to play them in their free time!" CreationDate="2020-06-03T12:42:00.347" UserId="9204" />
  <row Id="16544" PostId="6331" Score="0" Text="@nirshahar you are welcome: we sometimes have &quot;how do I teach my-self ...?&quot; questions, so definitely not just for teachers. We are about teaching and learning. And getting feedback from the students is **very** helpful." CreationDate="2020-06-03T13:10:23.363" UserId="204" />
  <row Id="16462" PostId="6332" Score="0" Text="Is this for teaching yourself, or for teaching others?" CreationDate="2020-05-13T20:07:19.830" UserId="27" />
  <row Id="16463" PostId="6332" Score="0" Text="It's for teaching others." CreationDate="2020-05-13T23:46:53.570" UserId="6410" />
  <row Id="16464" PostId="6332" Score="0" Text="Could you add some more details about what you're looking for and why?  With so little to go on (and with a yes or no question), you are limiting your answers to a very narrow band.  I teach computational theory using Scheme, for instance." CreationDate="2020-05-14T01:12:43.727" UserId="27" />
  <row Id="16467" PostId="6332" Score="1" Text="You may find this useful http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/" CreationDate="2020-05-14T03:02:13.683" UserId="8837" />
  <row Id="16468" PostId="6332" Score="0" Text="@BenI. Would you have any of the scheme+CT stuff accessible?" CreationDate="2020-05-14T03:03:24.003" UserId="8837" />
  <row Id="16470" PostId="6332" Score="0" Text="@Rusi It's not, though if you want to ping me in the [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom), I'd be glad to describe what I do." CreationDate="2020-05-14T14:14:49.667" UserId="27" />
  <row Id="16471" PostId="6332" Score="0" Text="@BenI. Regular Languages, Context-Free Languages, Turing Machines, Decidability, Reductions, etc." CreationDate="2020-05-15T02:52:53.390" UserId="6410" />
  <row Id="16466" PostId="6335" Score="5" Text="Re, &quot;Hello world,&quot; The purpose of Hello World is not to teach the students anything about the language. The purpose is to ensure that everybody knows how to use the _tools_. After everybody in the class has successfully created, built (if necessary), and run a Hello World project; then they are ready to write their *first* program." CreationDate="2020-05-14T01:42:59.030" UserId="1269" />
  <row Id="16526" PostId="6335" Score="0" Text="In a simple program, the printfs *are* the result. Students need to realize that they are not magic wands, any more than writing, &quot;I have $1,000,000&quot; on a piece of paper makes it the case. In the beginning, they have trouble separating the things that do stuff from the scaffolding. printf changes roles from the doing part at the beginning to the throw-away part later on. The students have to realize this. Writing a check is at first mysterious, but later you must realize that you can't write it for more money than you actually have in the bank." CreationDate="2020-05-27T21:53:06.630" UserId="5349" />
  <row Id="16602" PostId="6335" Score="1" Text="Actually I think the purpose of a &quot;Hello, world&quot; program is to make the programming task at hand a little less intimidating and to give the student a quick success to build upon.  &quot;Debugging a blank sheet of paper&quot; can be very intimidating and just seeing a working example can break the ice." CreationDate="2020-06-18T16:10:47.707" UserId="1292" />
  <row Id="16469" PostId="6336" Score="2" Text="If students are leaving debug `print`s in the code, then teach them about logging (that can be turned off)." CreationDate="2020-05-14T12:20:47.700" UserId="204" />
  <row Id="16601" PostId="6336" Score="0" Text="Just to provide a counter-argument, I too have been coding for 20 years (actually closer to 30).  I was reluctant to start using graphical development environments and IDE's but finally did so some years back and am amazed that it took me so long.  Today's tools go far beyond just providing a debug environment but also check and correct syntax, provide alternative API calls, etc.  Also there are some situations where you can't debug with print statements because you can't modify and redeploy the code, you have to connect to a running process and need an IDE to do that." CreationDate="2020-06-18T16:09:52.453" UserId="1292" />
  <row Id="16624" PostId="6336" Score="0" Text="I guess this is specific to &quot;non-cs&quot; fields: Most people would have no idea what &quot;deploying code&quot; or &quot;attaching to a running process&quot; would mean. Not because they are not sufficiently skilled/experienced, but because they are not concepts that are useful in those fields. There is no such thing as &quot;production&quot;, nor any long running processes in many places where non-cs academics use code. Code is something you write to analyse the data you've just collected. I'm guessing this applies in the OPs case." CreationDate="2020-06-23T13:06:14.703" UserId="9251" />
  <row Id="16525" PostId="6337" Score="0" Text="I was going to write your first sentence, but more generally. It is true of everything people learn. The main differentiator of students as best I can see is how hard they cling to those first few examples and concepts. Learning several extremely different languages and environments early on helps them learn what they all actually have in common." CreationDate="2020-05-27T21:45:45.553" UserId="5349" />
  <row Id="16527" PostId="6337" Score="0" Text="@ScottRowe &quot;The enemy gate is down&quot;.  :)" CreationDate="2020-05-28T00:50:32.323" UserId="27" />
  <row Id="16528" PostId="6337" Score="0" Text="Right, we must have definitions in order to function, but we have to be able to redefine them to solve new problems. This is why Lisp makes me uncomfortable: it seems to consist of nothing but the ability to make your own magic wands. Most people need a bit more structure than that." CreationDate="2020-05-28T10:45:32.163" UserId="5349" />
  <row Id="16514" PostId="6338" Score="0" Text="What do you mean by _&quot;concept of standard-in and standard-out no-longer applies&quot;_? Also, what do you mean by _&quot;win forms&quot;? I use Windows Forms for almost everything, but I'm sure you don't mean that, because it's such a specific technology." CreationDate="2020-05-25T10:23:56.847" UserId="1333" />
  <row Id="16515" PostId="6338" Score="0" Text="Win forms = Mircosoft's Windows forms. But you are correct. It is not the only system that is too hard. And made some changes to answer to make it clearer." CreationDate="2020-05-25T10:36:35.313" UserId="204" />
  <row Id="16473" PostId="6341" Score="0" Text="Thanks for the comment regarding different difficiulty levels. Indeed I did not intend to check spelling mistakes - only substantial language elements (and indeed, the educational system is problematic - I have 240 students. I have TAs who give feedback during the semester, but grading the final exam is my duty)." CreationDate="2020-05-16T19:43:51.500" UserId="1873" />
  <row Id="16474" PostId="6341" Score="2" Text="There is a way to get TAs involved in grading. Have a single mass grading session with yourself and some (all?) TAs. Each TA only looks at a single question but the same question for every student. If they have any doubt they ask you for advice. We used to do this in Calculus courses where there were many teachers and many TAs. You probably need a training session before the grading session where you also present the rubric for each question. With more TAs than questions you could have a pair responsible for a question and each reviews the grades of the other." CreationDate="2020-05-16T20:10:50.860" UserId="1293" />
  <row Id="16587" PostId="6343" Score="0" Text="the video lecture series by the UC Davis professor has certain video lectures missing, The playlist shows 22 videos but the last video says lecture 26... There are other problems with this lecture series as well, like frozen recordings( video lecture 26 gets stuck at around 7:02)" CreationDate="2020-06-14T18:45:51.370" UserId="9124" />
  <row Id="16496" PostId="6347" Score="2" Text="Alan Kay originally came up with the idea of Smalltalk and what he considers Object Orientated Programming from the study of molecular biology. While it wasn't the start, that was a direct influence on many languages that misunderstood his idea of objects, like, for example - Java. [&quot;The Quest to Make Code Work Like Biology&quot;](https://www.wired.com/2016/06/chef-just-took-big-step-quest-make-code-work-like-biology/) [&quot;Oral History of Alan Kay&quot;](https://ban.ai/multics/doc/102658340-05-01-acc.pdf)" CreationDate="2020-05-23T00:00:47.500" UserId="9164" />
  <row Id="16499" PostId="6347" Score="6" Text="It's right there in the name: object-oriented. It is a metaphor." CreationDate="2020-05-23T09:01:50.547" UserId="2485" />
  <row Id="16503" PostId="6347" Score="2" Text="I'm guessing OOP was invented by dozens of different people during the 70s.  Many people were trying to find ways to streamline the programming process, and using objects, &quot;messages&quot;, and related mechanisms were fairly obvious (to some people).  It was really a race to the finish line, rather than a single stroke of brilliance." CreationDate="2020-05-24T00:32:55.900" UserId="4511" />
  <row Id="16504" PostId="6347" Score="1" Text="This question has been answered by Alan Kay himself on Quora: https://www.quora.com/What-thought-process-would-lead-one-to-invent-object-oriented-programming/answer/Alan-Kay-11 (for reference, Kay invented OOP)" CreationDate="2020-05-24T03:31:29.933" UserId="1960" />
  <row Id="16505" PostId="6347" Score="0" Text="@AkshatMahajan Whoa. Alan Kay himself answered this question yesterday, apparently? I am kind of blown away. I'm not the one who posted this question to Quora, so this is a surprise to me." CreationDate="2020-05-24T03:38:00.530" UserId="1979" />
  <row Id="16507" PostId="6347" Score="0" Text="I can't vote on this site, but this question is too broad. This is a good topic to write a book about. As such any such answer would need to copy very much relevant parts of books (per rule not to provide just links). More than can be considered fair use for copyrights; as such the conclusion is that such a question is too broad since any actual answer is a violation of copyright." CreationDate="2020-05-24T09:47:54.657" UserId="9173" />
  <row Id="16512" PostId="6347" Score="1" Text="@littleO People scrape SO for questions to post on Quora all the time, since you can make money by asking questions." CreationDate="2020-05-24T16:36:48.453" UserId="1960" />
  <row Id="16513" PostId="6347" Score="0" Text="Neurotic at least, but probably psychotic thought processes ‍♂️" CreationDate="2020-05-24T20:59:25.527" UserId="9177" />
  <row Id="16516" PostId="6347" Score="1" Text="I think you dropped the ball with &quot;The goal is not necessarily to understand the true history of how the idea was developed… Rather, the goal is to imagine a thought process that would lead someone naturally to the idea, in a way that seems almost obvious.&quot;&#xA;&#xA;If you're trying to define a method of thinking, why not say so?&#xA;&#xA;If not, why would you value what might have happened over what actually did happen?" CreationDate="2020-05-25T18:50:32.313" UserId="9185" />
  <row Id="16518" PostId="6347" Score="0" Text="@RobbieGoodwin When I learn a new idea (such as a math proof), I feel a strong urge to answer &quot;How might I have thought of this?&quot; and &quot;How can I make this seem obvious?&quot; If I can't imagine how I might have thought of it, then it's not obvious. The closer to obvious I can make the idea seem, the better I understand it. Often the historical route to an idea is different than the shortest and easiest path." CreationDate="2020-05-26T00:00:32.807" UserId="1979" />
  <row Id="16522" PostId="6347" Score="1" Text="Here's a great talk from Turing award winner Barbara Liskov about the development of object-oriented programming: https://youtu.be/_jTc1BTFdIo" CreationDate="2020-05-27T12:03:18.207" UserId="1979" />
  <row Id="16524" PostId="6347" Score="0" Text="Sorry, LittleO. When I met OOP, I wondered what the fuss was about. My problem wasn't to understand how anyone had come up with anything so obvious, but to see how far it would push the envelope… &#xA;&#xA;Don't you think if the way seemed anything like obvious, except in retrospect, someone else would have got there long before?" CreationDate="2020-05-27T21:14:57.487" UserId="9185" />
  <row Id="16480" PostId="6348" Score="3" Text="This is a nice story, but having &quot;been there done that&quot; (and actually *using* OOP in Fortran IV back in  the 1970s, though we didn't know it was called OOP yet) it doesn't match our experience at all. In fact your story is quite unconvincing, because you write the same procedural code either way - you shred it into the same fragments (subroutines, functions, methods, call them what you like) but just package them into different sorts of boxes (modules, classes, etc.)" CreationDate="2020-05-22T19:15:19.770" UserId="1352" />
  <row Id="16481" PostId="6348" Score="10" Text="… In our case, the starting point was *polymorphism* - realizing that many different types of entity needed the same functionality, and if the data structures were isolated from the procedural code you only needed one copy of the code to perform the same function on different types of entity. (I deliberately avoided the word &quot;object&quot; there, to avoid mixing up modern ideas with our 50 year old thought processes)." CreationDate="2020-05-22T19:18:44.967" UserId="1352" />
  <row Id="16482" PostId="6348" Score="1" Text="... We didn't start by &quot;inventing OOP and then designing a system from scratch&quot;. We already had large complex working systems, and in modern terminology we came to see the benefit of refactoring the code as even more complexity was being added to them." CreationDate="2020-05-22T19:21:44.487" UserId="1352" />
  <row Id="16483" PostId="6348" Score="1" Text="@alephzero I think you might have missed the point of the question: &quot;The goal is not necessarily to understand the true history of how the idea was developed ...&quot;" CreationDate="2020-05-22T19:26:47.033" UserId="2087" />
  <row Id="16484" PostId="6348" Score="8" Text="I think this badly misrepresents [the difference between FP and OOP](https://cseducators.stackexchange.com/a/3186/660)." CreationDate="2020-05-22T19:51:15.753" UserId="660" />
  <row Id="16486" PostId="6348" Score="0" Text="@JimmyJames I do also find these comments about the true history of OOP to be very interesting, though." CreationDate="2020-05-22T20:57:47.290" UserId="1979" />
  <row Id="16488" PostId="6348" Score="0" Text="Working for a company that built modular MOOG style synths helped me understand it. Each portion can sort of stand alone, and they can interact with each other in interesting ways and pass information to each other." CreationDate="2020-05-22T21:26:35.253" UserId="9161" />
  <row Id="16491" PostId="6348" Score="5" Text="I also wonder if this is the right dichotomy. Shouldn't it be Procedural Programming vs. OOP? Functional Programming is a niche area that most students don't explore until they're fairly advanced." CreationDate="2020-05-22T22:32:03.113" UserId="1471" />
  <row Id="16492" PostId="6348" Score="6" Text="With my FP hat on, I'm not happy with this answer at all. Saying that OO developers think about &quot;data first&quot; is arse-backwards -- FP developers think about data in very similar ways, but don't force themselves to think of method dispatch as a consequence of their data structure choice, but rather treat it as a separate concern to be designed on its own merits!" CreationDate="2020-05-22T22:34:42.183" UserId="5084" />
  <row Id="16485" PostId="6349" Score="5" Text="Your three bullet points remind me very strongly of the three virtues of a great programmer (the three map quite well to Impatience, Laziness, and Hubris)." CreationDate="2020-05-22T20:29:08.750" UserId="1246" />
  <row Id="16493" PostId="6350" Score="0" Text="I still feel constrained by limited types: Where are distance, time, area, speed, ... (statically typed)?" CreationDate="2020-05-22T23:01:58.487" UserId="204" />
  <row Id="16494" PostId="6350" Score="0" Text="I still feel constrained by limited OO languages: Where are the pure OO languages, I struggle to think of more than 2 (small-talk and Eiffel), and these are not used much. ( Is Python and JS pure OO? )" CreationDate="2020-05-22T23:04:06.307" UserId="204" />
  <row Id="16502" PostId="6350" Score="0" Text="@ctrl-alt-delor Ruby has no primitives: everything is an object." CreationDate="2020-05-23T21:06:36.273" UserId="224" />
  <row Id="16487" PostId="6351" Score="1" Text="I like this explanation a lot!" CreationDate="2020-05-22T21:07:30.173" UserId="1979" />
  <row Id="16489" PostId="6351" Score="2" Text="Be aware, however, that Smalltalk and C appeared the same year (1972). Simula preceded them both. They arose when large and complex computers were programmed in Fortran and Cobol." CreationDate="2020-05-22T21:55:38.027" UserId="1293" />
  <row Id="16506" PostId="6351" Score="0" Text="Why are answers like this upvoted which lack any credible sources? - There are lots of books written about program language design. For example Bjarne Stroustrup's &quot;the c++ programming language&quot;, which goes into detail about the flaws of other language which brought him and others to develop C++. There are probably also for older languages like smalltalk. So we don't have to guess." CreationDate="2020-05-24T09:43:59.513" UserId="9173" />
  <row Id="16519" PostId="6351" Score="1" Text="@paul23 I think you may have missed the point of the question: &quot;The goal is **not** necessarily to understand the true history of how the idea was developed&quot; (emphasis mine)" CreationDate="2020-05-26T13:45:58.020" UserId="2087" />
  <row Id="16495" PostId="6352" Score="0" Text="TL;DR Code re-use. As in _Hey! I already solved that problem for the last project. How can I use the same code here?_" CreationDate="2020-05-22T23:06:33.893" UserId="104" />
  <row Id="16498" PostId="6352" Score="0" Text="Unix is the opposite of object-oriented. Except in the trivial sense of every object being a stream." CreationDate="2020-05-23T08:49:24.487" UserId="2485" />
  <row Id="16500" PostId="6352" Score="2" Text="@philipxy you should learn about Unix: Gnu/Linux. You will be surprised how OO it is. Some examples of objects, and inheritance hierarchy: processes, files: directories, named pipes, anonymous-pipes, unix-sockets, ip-sockets, devises, symbollic-links;  devices: hid, block-storage, memory, camera; block-storage: ide, scsi, network-block-storage; pipes; programs: `grep`, `tail`, `cut`, `ps`, `shell`... Then look inside the code, passing a pointer to a structure, a fixed set of functions for the structure. (You can program OO in any language)" CreationDate="2020-05-23T10:08:26.387" UserId="204" />
  <row Id="16501" PostId="6352" Score="0" Text="&quot;You can program OO in any language&quot; Exactly--having hierarchiy, state &amp; modules doesn't make a system OO. Those are not &quot;examples of objects, and inheritance hierarchy&quot;. And your list of commands demonstrates my point, not yours." CreationDate="2020-05-23T20:18:28.860" UserId="2485" />
  <row Id="16508" PostId="6352" Score="0" Text="@philipxy hierarchiy, polymorphism, state, modules, the ability to instantiate objects. What did I miss. (and yes not **all** are objects. I was being sloppy with the distinction between object and class. But then many of these classes are also objects (some languages do that))." CreationDate="2020-05-24T13:28:18.823" UserId="204" />
  <row Id="16510" PostId="6352" Score="1" Text="I fundamentally disagree that Unix is OO. Here's my first hit of my first google, it more or less gives my point of view. [Why can't unix be object oriented or at least organized](https://unix.stackexchange.com/a/306019) I don't have much more to say about this post. Which I can't make out much of." CreationDate="2020-05-24T13:42:00.313" UserId="2485" />
  <row Id="16511" PostId="6352" Score="0" Text="Yes it says **more powerful than OO**, however I don't see anything it it that pure OO can not do." CreationDate="2020-05-24T13:42:29.857" UserId="204" />
  <row Id="16520" PostId="6356" Score="0" Text="I think I found a compromise with CodeLite. It's lightweight, portable and easy to use. The main drawback is you need to install a compiler/debugger yourself, which is not that easy on Windows. I used MinGW-w64 using the binaries provided by Win-Builds (with a manipulation of the $PATH environment variable), but with students it could be a challenge." CreationDate="2020-05-26T23:19:18.173" UserId="9058" />
  <row Id="16521" PostId="6356" Score="0" Text="@leftcursor: Yeah, that would be a non-starter with our students." CreationDate="2020-05-27T01:19:41.790" UserId="8137" />
  <row Id="17678" PostId="6356" Score="0" Text="@DanielRCollins : The new TDM-GCC is much easier to install on Windows: https://jmeubank.github.io/tdm-gcc/  DevC++ also got an important update, so I will be checking it out. Especially since I'm having a ton of issues with CodeLite." CreationDate="2021-02-08T18:27:04.563" UserId="9058" />
  <row Id="17680" PostId="6356" Score="0" Text="@leftcursor: Thanks for drawing my attention back to this answer. I also discovered the Dev-C++ update at the end of December, and I've been very happy with it (suggested we switch in our school labs to that). Not sure if it's approved to update an answer like this here, but seems important enough I'll do that now." CreationDate="2021-02-08T19:53:59.150" UserId="8137" />
  <row Id="16523" PostId="6360" Score="3" Text="This question really could use some work. For example, what criteria would you use to evaluate a project, or other resource? What's the level of the students? How would you pick a &quot;best&quot; answer? This site isn't so good with list questions. Although we're less strict than other sites, there still needs to be a bit more meat to work with in the question." CreationDate="2020-05-27T16:20:26.463" UserId="104" />
  <row Id="16542" PostId="6360" Score="0" Text="I see no why to auto grade the use of patterns (you will only catch some implementations of the pattern, but not the pattern it-self). Also when you say design-pattern, are you meaning just the few in the GOF book, or any design-pattern?" CreationDate="2020-06-03T11:10:21.813" UserId="204" />
  <row Id="20441" PostId="6362" Score="0" Text="I personally feel that Zaha Hadid designed large things without putting her ego in to them, but perhaps someone can clarify that for me. That's in Architecture. In programming there are probably many good exemplars." CreationDate="2022-07-03T02:30:51.253" UserId="5349" />
  <row Id="16535" PostId="6365" Score="0" Text="This isn't so much an explanation of &quot;objects in FORTRAN&quot; as an explanation of why ad-hoc methods fail and something at a higher level of abstraction (objects or other) became necessary." CreationDate="2020-05-29T15:25:51.710" UserId="1293" />
  <row Id="16537" PostId="6365" Score="0" Text="No, actually they fail. Not for small programs, but for large programs that must be maintained over time, they just fail. There are too many examples of large failed software projects from, say, the 80s that demonstrate this. Do you remember &quot;throw away programming&quot;?" CreationDate="2020-05-29T15:50:38.923" UserId="1293" />
  <row Id="16538" PostId="6365" Score="0" Text="Yes, new languages address pain points in our programming patterns." CreationDate="2020-05-29T15:50:53.197" UserId="3799" />
  <row Id="16723" PostId="6367" Score="0" Text="Do you know of any set of slides based on Sipser's book?" CreationDate="2020-07-16T19:44:22.793" UserId="6410" />
  <row Id="16726" PostId="6367" Score="0" Text="@DrimadesBoy I don't particularly, but it shouldn't be hard to find. I'd start with syllabi that mention the text. Many professors post their slides by default." CreationDate="2020-07-17T04:38:08.553" UserId="27" />
  <row Id="16545" PostId="6369" Score="0" Text="That's a very nice explanation thanks a lot @Buffy." CreationDate="2020-06-04T17:34:35.987" UserId="9207" />
  <row Id="16546" PostId="6369" Score="0" Text="But computer science is neither about computers nor science... There is a reason Naur objected to the term." CreationDate="2020-06-05T03:49:44.317" UserId="1314" />
  <row Id="16547" PostId="6369" Score="0" Text="Computer technology could be considered *applied* computer science." CreationDate="2020-06-05T13:40:31.333" UserId="1471" />
  <row Id="16565" PostId="6370" Score="0" Text="I think that if you look up &quot;technology&quot; in a dictionary, you won't find much mention of &quot;science.&quot; Technology studies the _techniques_ that we use to make things. Some of those techniques may be inspired by science (i.e., the result of &quot;applied science,&quot;) but that's not what the &quot;technology&quot; label implies. Hand built pottery, and hand-woven fabrics are just as &quot;technological&quot; as are computers and nuclear power stations." CreationDate="2020-06-08T13:38:22.480" UserId="1269" />
  <row Id="16584" PostId="6370" Score="0" Text="Is “my dear” addressing the poster or qualifying technology? Seems like it may be a bit misplaced and could be removed" CreationDate="2020-06-14T17:20:46.780" UserId="6137" />
  <row Id="16596" PostId="6370" Score="1" Text="Someone tries to be nice or polite and someone objects." CreationDate="2020-06-14T23:39:25.470" UserId="5349" />
  <row Id="16549" PostId="6374" Score="0" Text="It would almost certainly be better asked on that SE site, as it involves specialist terminology." CreationDate="2020-06-04T11:32:13.563" UserDisplayName="Edwin Ashworth" />
  <row Id="16550" PostId="6374" Score="1" Text="This question is surely a closer fit with the requirements of Computer Science Educators.SE." CreationDate="2020-06-03T18:32:51.270" UserDisplayName="Edwin Ashworth" />
  <row Id="16551" PostId="6374" Score="0" Text="I can see how 2 and 3 fit into a category into which none of the others fit (although courses such as &quot;Computer Science and Biology&quot; and  &quot;Computer Science and Archeology&quot; would also fit into the same category) but I don't see that 1 fits into that category at all." CreationDate="2020-06-03T19:52:50.620" UserDisplayName="BoldBen" />
  <row Id="16552" PostId="6374" Score="0" Text="@EdwinAshworth I have no idea what you meant by that." CreationDate="2020-06-03T20:43:51.393" UserId="9207" />
  <row Id="16553" PostId="6374" Score="0" Text="@BoldBen Okay, thanks for your reply." CreationDate="2020-06-03T20:44:18.800" UserId="9207" />
  <row Id="16554" PostId="6374" Score="0" Text="Not an expert, but here are a few questions: Why aren't 2, 3, and 5 all in the computing category? And why would one not consider data analytics and machine learning a subset of AI, and hence part of 5?" CreationDate="2020-06-03T20:55:04.683" UserDisplayName="Richard Kayser" />
  <row Id="16555" PostId="6374" Score="0" Text="@RichardKayser, thanks for your reply. Your opinion made me rethink about my question. It is not clear where these courses belong, as one university may offer different learning outcomes than another university. One might be centered on the computation and the other on pure mathematics etc. Also it is possible that the same course may be part of 1 or many categories." CreationDate="2020-06-04T10:17:43.123" UserId="9207" />
  <row Id="16556" PostId="6374" Score="0" Text="should i close the question?" CreationDate="2020-06-04T10:19:17.803" UserId="9207" />
  <row Id="16557" PostId="6374" Score="0" Text="I have updated my question and also created a linked question to Computer Science Educators SE." CreationDate="2020-06-04T12:10:35.407" UserId="9207" />
  <row Id="16558" PostId="6374" Score="1" Text="I don't know of any single-word, but all of the subjects that you're trying to lump together seem to be those of which, a deep understanding must be built on a foundation of mathematics. Mathematical notation is a _language_ that we use to describe and understand how the physical world works, and also, how our inventions work." CreationDate="2020-06-04T19:11:18.453" UserId="1269" />
  <row Id="16559" PostId="6374" Score="0" Text="Thanks for your reply @SolomonSlow" CreationDate="2020-06-05T12:26:26.917" UserId="9207" />
  <row Id="16561" PostId="6374" Score="0" Text="Is this a purely theoretical question, or are there more courses? This is a very strange list." CreationDate="2020-06-06T22:03:09.247" UserId="27" />
  <row Id="16560" PostId="6376" Score="0" Text="That's a very interesting piece of information. Many thanks @workerjoe" CreationDate="2020-06-05T19:30:38.950" UserId="9207" />
  <row Id="16562" PostId="6379" Score="2" Text="This is very carefully broken down and well thought out." CreationDate="2020-06-07T22:38:05.570" UserId="27" />
  <row Id="16563" PostId="6381" Score="3" Text="You have a misconception. Those tools (and many others) aren't for the _creation_ of lexical or syntactical rules, but for taking already created statements of them in a particular form and automatically creating scanners (from lexical rules) and parsers (from syntactical rules). But the grammars are written with a simple text editor. I actually prefer LL(1) parser tools since they force you to write better languages. I used [CoCo/R](http://www.ssw.uni-linz.ac.at/Coco/) for many years. Grammars _define_ languages. Tools use those definitions to help create actual compilers for them." CreationDate="2020-06-08T10:57:48.683" UserId="1293" />
  <row Id="16564" PostId="6381" Score="0" Text="But, what is your course, exactly. Is it an exploration of several existing languages or a discussion of language principles or a compiler building course or ...?" CreationDate="2020-06-08T11:42:37.440" UserId="1293" />
  <row Id="16568" PostId="6381" Score="0" Text="@Buffy the course is oriented to a discussion of language principles" CreationDate="2020-06-09T15:50:54.543" UserId="4161" />
  <row Id="16570" PostId="6381" Score="0" Text="@Buffy thank you for pointing out that is not really creation, I have modified my question." CreationDate="2020-06-09T15:53:41.960" UserId="4161" />
  <row Id="16579" PostId="6381" Score="1" Text="Not a tool, but perhaps something you can look at. Eugene Wallingford references a book in this post. The book is available online and will be in print: http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2020-06.html#e2020-06-11T13_02_13.htm" CreationDate="2020-06-12T12:36:57.047" UserId="1293" />
  <row Id="16580" PostId="6381" Score="0" Text="There is also this (old but still available) book that you probably want to see: https://www.amazon.com/dp/0471597546" CreationDate="2020-06-12T12:42:15.063" UserId="1293" />
  <row Id="16585" PostId="6381" Score="0" Text="SML (or at least sml/ni, but I imagine it wouldnt be hard to move to, e.g., mlton) has [ml-Ulex/antlr](https://www.smlnj.org/doc/ml-lpt/manual.pdf); similar tools exist for most languages. Plus parser combinators are neat (such as in scala and haskell). But for teaching, dont use the tools." CreationDate="2020-06-14T17:24:59.370" UserId="6137" />
  <row Id="16595" PostId="6381" Score="0" Text="@Buffy thank you very much, I surely will use that material" CreationDate="2020-06-14T23:09:22.297" UserId="4161" />
  <row Id="16598" PostId="6381" Score="0" Text="Have your students every programmed in a language that wasn't based on or with syntax derived from ALGOL or C? Such as Scheme, say? Have they already programmed in different paradigms, not just the imperative?" CreationDate="2020-06-15T17:32:24.077" UserId="1293" />
  <row Id="16599" PostId="6381" Score="0" Text="@Buffy, thank you again for your interest. Well in this course, we teach the functional paradigm in Scheme, and previous to that they have also background in OOP, but the later was in Java so maybe it does not count." CreationDate="2020-06-15T17:52:59.157" UserId="4161" />
  <row Id="16566" PostId="6382" Score="1" Text="Answers like this are why I love this community. You clearly have experience teaching the subject.  Very useful!" CreationDate="2020-06-08T21:53:35.933" UserId="27" />
  <row Id="16567" PostId="6382" Score="0" Text="@BenI. Thanks! I've felt very welcome here. I hope the community continues to grow." CreationDate="2020-06-09T14:27:10.540" UserId="9157" />
  <row Id="16569" PostId="6382" Score="0" Text="thanks @Ifalin, but which software tool could help in this process? We used Flex and Bison, but it is a little bit outdated and hard to learn for some students." CreationDate="2020-06-09T15:51:55.453" UserId="4161" />
  <row Id="16571" PostId="6382" Score="0" Text="@Lila It just comes back to what your goals are. I personally wouldn't use any software to teach Context Free Grammar topics. Remember, Flex and Bison are tools that help you build a parser after you have defined the grammar." CreationDate="2020-06-09T23:17:10.557" UserId="9157" />
  <row Id="16572" PostId="6382" Score="0" Text="For courses where I wanted students to have experience building a parser, I would just have them implement one themselves as a finite state machine based around regular expressions. It's much simpler to do that than learning to use Flex and Bison on top of CFG topics." CreationDate="2020-06-09T23:27:52.157" UserId="9157" />
  <row Id="16574" PostId="6385" Score="1" Text="Sorry, no. There is more to APCS than Java syntax, and it is weak in OO principles in any case. But you will need something of data structures as well." CreationDate="2020-06-11T15:26:00.417" UserId="1293" />
  <row Id="16576" PostId="6385" Score="1" Text="@Buffy there certainly is. But given the background the OP says their students already have, ( 3-7 years combination of working in Scratch, HTML/CSS, AppLab, and JavaScript, plus the AP CSP course), I would imagine most of the rest of the AP CSA topics have been covered. Though without knowing exactly what was taught there, it would be hard to tell for sure." CreationDate="2020-06-11T17:43:37.953" UserId="9157" />
  <row Id="16577" PostId="6385" Score="0" Text="Unlikely to be much of anything about data structures." CreationDate="2020-06-11T17:57:43.733" UserId="1293" />
  <row Id="16578" PostId="6385" Score="0" Text="It may have changed since I last looked, but I didn't think AP CS A covered any data structures besides arrays. I didn't see anything else listed under the Course Content here: https://apstudents.collegeboard.org/courses/ap-computer-science-a" CreationDate="2020-06-11T18:01:41.310" UserId="9157" />
  <row Id="17270" PostId="6385" Score="1" Text="In my AP CS A course we went over linked lists and array lists - don't remember if it was on the AP test though" CreationDate="2020-11-19T20:02:21.017" UserId="8728" />
  <row Id="16581" PostId="6386" Score="1" Text="Text book on the left, dictionary on the right? Schedule=understand chapter one before reading chapter two, etc." CreationDate="2020-06-12T17:10:19.243" UserId="104" />
  <row Id="16582" PostId="6386" Score="0" Text="textbook and dictionary does not in well, moreover certain portions involves technical terminologies, usually not well explained in dictionary. That is the reason why I am asking for a schedule or routine such that I can study selective and important portions of the chapters in the first read of the book and then come back again and read the book in totality." CreationDate="2020-06-12T17:26:51.343" UserId="9124" />
  <row Id="16583" PostId="6387" Score="1" Text="Fantastic answer!" CreationDate="2020-06-13T13:03:01.970" UserId="27" />
  <row Id="16586" PostId="6387" Score="0" Text="@Ifalin Thanks, I am slowly going through the chapters of the book(3rd ed) and I am quite eager to complete it. Although the first chapter of the 3rd edition is a bit weirdly written (throws a lot of information in a chapter which is supposed to be the introductory chapter and the language used is quite difficult at places) but the rest of the chapters seem to be quite fine and interesting as it deeply explains each and every topic dealt with in easy langauge ( unlike the very first chapter). After going through the 3rd ed, I look forward to read the other editions in the near future." CreationDate="2020-06-14T18:35:47.040" UserId="9124" />
  <row Id="16588" PostId="6387" Score="0" Text="@Ifalin, I had previously gone through the *hardware software interface* version of the text from the said authors, though not the 4th but the 3rd edition" CreationDate="2020-06-14T19:00:15.900" UserId="9124" />
  <row Id="16589" PostId="6388" Score="0" Text="Have you checked UCBerkeley? That would be a fairly obvious source, especially now, with coronavirus." CreationDate="2020-06-14T19:06:55.170" UserId="1293" />
  <row Id="16590" PostId="6388" Score="0" Text="Can you provide me the link as to where to search for?" CreationDate="2020-06-14T19:21:26.613" UserId="9124" />
  <row Id="16591" PostId="6388" Score="1" Text="Sorry. I just know Patterson taught there. You realize that this would be a very advanced course, I hope." CreationDate="2020-06-14T19:22:50.433" UserId="1293" />
  <row Id="16592" PostId="6388" Score="0" Text="Yes I realize and as you said about corona virus, in this quarantine it shall be best to utilize the time to the fullest" CreationDate="2020-06-14T19:24:12.873" UserId="9124" />
  <row Id="16604" PostId="6390" Score="0" Text="Depends what you want to learn: do you want to use it, extend it, study how it works, …? Edit your question to make this clear." CreationDate="2020-06-18T16:49:34.707" UserId="204" />
  <row Id="16605" PostId="6390" Score="2" Text="Is this for curiosity?  For a job?  How intensively do you need/intend to study in order to grasp this?" CreationDate="2020-06-19T00:33:37.327" UserId="27" />
  <row Id="16613" PostId="6390" Score="0" Text="it's for a course. It kind of assumes some knowledge on LLVM and I want to learn and create something in it before the class starts. I want to understand it's components and I want to build something" CreationDate="2020-06-19T16:21:05.527" UserId="9238" />
  <row Id="16619" PostId="6390" Score="1" Text="Will you be using it, extending it, studying how it works, …? **Edit your question** to make this clear." CreationDate="2020-06-20T21:08:43.747" UserId="204" />
  <row Id="16768" PostId="6390" Score="0" Text="I wrote few years ago a small lab to get started practically with LLVM. It is in french but in case it may help here it is https://manuelselva.pages.ensimag.fr/docs/teach/tp-llvm/sujet.pdf It is lbased as stated in the intro on this tutorial https://www.cs.cornell.edu/~asampson/blog/llvm.html which is super great in my opinion but doesn not visually show the tools." CreationDate="2020-07-30T13:59:57.450" UserId="9342" />
  <row Id="16610" PostId="6394" Score="0" Text="Example 3 is the only predicate, it is a contracted sentence, of I like cars that are fully blue or fully yellow yellow, and has the meaning I like cars that are fully yellow and cars that are fully blue. And there for has the meaning AND. Examples 1 and 2 are selection not a predicate (selection is usually mutually exclusive, but not in example 2)" CreationDate="2020-06-19T15:47:13.090" UserId="204" />
  <row Id="16611" PostId="6394" Score="0" Text="@ctrl-alt-delor: Your assertion that semantical english unambiguously translates to logic simply does not hold true. &quot;and&quot; is used differently as `and` (I like cars and planes != I like vehicles that are both a car and a plane), and &quot;or&quot; is similarly used differently than `or` (cfr all the above examples)" CreationDate="2020-06-19T15:52:02.407" UserId="2164" />
  <row Id="16612" PostId="6394" Score="0" Text="Did I assert that? Sorry for making such a suggestion. As for the 2nd bit, I don't grok it all, but your negative predicate is true of English and of logic. However I agree English is not as formal and unambiguous as logic." CreationDate="2020-06-19T16:02:42.770" UserId="204" />
  <row Id="16614" PostId="6396" Score="0" Text="Note that LLVM isn't just for the back end (code gen)." CreationDate="2020-06-20T14:59:10.537" UserId="1293" />
  <row Id="16615" PostId="6396" Score="0" Text="@Buffy Oh, I was under the impression it just did code gen and optimization on the IR. What else does it do?" CreationDate="2020-06-20T15:46:53.613" UserId="58" />
  <row Id="16616" PostId="6396" Score="0" Text="I read only a brief description, but it suggests it is an end to end tool. Scanning through codegen. Most of the tools I'm familiar with don't do much of anything on the back end, so if I were still teaching compilers it is something I'd look at." CreationDate="2020-06-20T15:50:24.043" UserId="1293" />
  <row Id="16617" PostId="6396" Score="1" Text="As I understand it, llvm itself is just code gen and optimization, although there are other tools within the larger llvm project such as clang, a C compiler which uses llvm as a backend." CreationDate="2020-06-20T15:53:47.337" UserId="58" />
  <row Id="16618" PostId="6396" Score="0" Text="Difference in terminology then. https://llvm.org. I was thinking of the project as a whole." CreationDate="2020-06-20T15:57:42.130" UserId="1293" />
  <row Id="16648" PostId="6398" Score="0" Text="Counting 12,1,2,3,4,5,6,7,8,9,10,11 is what is strange. Measuring from 0 is, (what is a good word for this, oh yes) measuring." CreationDate="2020-07-01T21:35:06.717" UserId="204" />
  <row Id="16917" PostId="6398" Score="0" Text="Nice note about Japanese TV. However the rest is already covered in other answer. If you were to write about just Japaneses TV, then I would upvote." CreationDate="2020-08-30T14:20:34.813" UserId="204" />
  <row Id="16929" PostId="6398" Score="1" Text="In Japan, they also use the implied modulo system, where it's common to indicate hours with numbers 24 or greater. For example, a bar might be open from 20 till 26. It makes it clear that the closing time is past midnight. I love that system!" CreationDate="2020-08-31T17:10:27.440" UserId="9440" />
  <row Id="16635" PostId="6401" Score="5" Text="Computer science is not software development." CreationDate="2020-06-24T16:31:24.630" UserId="5379" />
  <row Id="16636" PostId="6401" Score="1" Text="...and software engineering is part of computer science, however." CreationDate="2020-06-24T16:35:49.840" UserDisplayName="DCTLib" />
  <row Id="16637" PostId="6401" Score="1" Text="This is way too broad.  In most cases you can't say anything in general about how universities across a given country teach a given subject.  It often comes down to the pedagogical decisions of individual instructors." CreationDate="2020-06-24T17:24:29.530" UserDisplayName="Nate Eldredge" />
  <row Id="16638" PostId="6401" Score="0" Text="@AntonMenshov Oh, there was an entire SE for that? It's always so hard to find the right SE site. What should I do? Copy the question there?" CreationDate="2020-06-24T17:40:51.237" UserDisplayName="Gherman" />
  <row Id="16639" PostId="6401" Score="0" Text="@NateEldredge So what do I do to become a developer in another country? Find a good instructor who is on my side? What if they fire them and find a different one? And the different commissions, the ministry of science and different other institutions  may also be against us too sometimes. What if they decide to intervene to stop us?" CreationDate="2020-06-24T17:45:13.320" UserDisplayName="Gherman" />
  <row Id="16640" PostId="6401" Score="0" Text="You can flag it for moderator attention with a request to migrate. That should work. But please, check if there is no obvious duplicate already there." CreationDate="2020-06-24T18:30:42.460" UserId="8079" />
  <row Id="16641" PostId="6401" Score="0" Text="@JonCuster, Computer science is not software development, but _studying_ and _modeling_ how large software systems are made, _theorizing_ about and _experimenting_ with new techniques for making software,... Those sound like reasonable &quot;academic&quot; pursuits to me." CreationDate="2020-06-26T13:13:58.820" UserId="1269" />
  <row Id="16642" PostId="6402" Score="1" Text="I've come back to revisit this question a few times now, and I'm mostly perplexed. If you want to text procedural, imperative programming, there are just so many options. What are you having trouble locating?" CreationDate="2020-06-27T03:45:39.637" UserId="27" />
  <row Id="16643" PostId="6402" Score="0" Text="Can you enlist these options? I mean not Just Programming language, but Programming ecosystem like in DrRacket with documentation and non-cryptic error messages." CreationDate="2020-06-27T05:11:09.150" UserId="6387" />
  <row Id="16644" PostId="6402" Score="0" Text="DrRacket isn't procedural, though, it's functional.  After Scratch, a natural direction to take might be Greenfoot, which uses Java, but teaches it in a rather unusual way that is very friendly to beginners. (There is a book purchase for the instructor, though the software itself is free for the students.)" CreationDate="2020-06-27T16:44:49.950" UserId="27" />
  <row Id="16645" PostId="6402" Score="0" Text="Java, like Python and others, is an industrial language starting with OOP from the ground up. It never been designed for educational purposes, like Pascal. I'd like to start with procedural language and next move to OOP with Squeak or Pharo. And only then, when we have two approaches on opposite sides like &quot;everything is built by hands, no abstractions at all&quot; and &quot;everything is an abstraction, starting from numbers&quot; will try to build something in between the procedural way and object-oriented way and explain industrial compromises developers of compilers have taken." CreationDate="2020-06-28T08:00:57.190" UserId="6387" />
  <row Id="16646" PostId="6402" Score="1" Text="«Pascal is superior *as a teaching language* to most of what followed» is a view which I whole-heartedly endorse. If you try to effectuate that into something pedagogically meaningful in 2020 you have my sympathies! You can try Delphi or Lazarus (free Pascal) or something... I don't expect the benefits will be worth the pain. I've written more on this [here](http://blog.languager.org/2015/06/functional-programming-moving-target.html)" CreationDate="2020-06-28T08:56:32.397" UserId="8837" />
  <row Id="16657" PostId="6402" Score="0" Text="@Paus I generally agree with the drift of your colleague on the deterioration from turbo pascal to the present. It even has a generic name I recently discovered : [Kuhn loss](https://hsm.stackexchange.com/questions/187/examples-of-kuhn-loss). I only disagree with the implication that Lua is better than Python (for beginners). I think you should seriously consider racket." CreationDate="2020-07-02T10:49:43.070" UserId="8837" />
  <row Id="16650" PostId="6404" Score="0" Text="I am not a math fan, but I don't know of much else that actually serves as good preparation for learning computer science and the discipline of developing programs. What else exercises those aspects of mentation?" CreationDate="2020-07-02T01:22:35.303" UserId="5349" />
  <row Id="16652" PostId="6404" Score="1" Text="@ScottRowe : There's math and math and math (and math) — mostly disjoint.  This question-answer already has 3 : &lt;1&gt; Classical math suffered by the OP &lt;2&gt; Formal methods and proving programs championed by Dijkstra &lt;3&gt; [History of CS math](http://blog.languager.org/2015/03/cs-history-0.html) {Cantor Hilbert Gödel Turing}. There's also &lt;4&gt; the standard discrete math of university CS courses. All these are nearly disjoint! Can write more... But the OP is not really asking " CreationDate="2020-07-02T02:44:22.507" UserId="8837" />
  <row Id="16656" PostId="6404" Score="0" Text="@ScottRowe : I mentioned 4 disjoint math-s above. Ironically forgot to mention the one most relevant to your question: &lt;5&gt; the math that removes the gap between math and CS — usually called functional programming (if the adjective &quot;functional&quot; were changed to &quot;mathematical&quot; that would be clearer). See [FP in CS education](http://blog.languager.org/2015/06/functional-programming-moving-target.html)&#xA;which is a follow-up to &#xA;[FP timeline](http://blog.languager.org/2015/04/cs-history-1.html)&#xA; (Yeah those are my writings )" CreationDate="2020-07-02T06:50:43.180" UserId="8837" />
  <row Id="16658" PostId="6404" Score="0" Text="Maybe we should call it *'maths'* - haw haw haw! Anyway, I don't recall the sources, but I did extensive reading about schooling and mental development (Piaget, etc), and the consensus was that Mathematics was the best &quot;gymnasium equipment&quot; (ironic use of a word with two opposite meanings) for developing higher mental functioning - Formal and Post-formal. But, and it's a big one, people become better at any sort of thinking that they work at for a long time, while leaving ability in all other kinds of cogitation the same. General Education must consist of &quot;many particulars&quot; (Heraclitus)." CreationDate="2020-07-02T10:53:45.683" UserId="5349" />
  <row Id="16677" PostId="6406" Score="1" Text="What about doing a course in Coursera?" CreationDate="2020-07-03T15:42:00.733" UserId="9279" />
  <row Id="16679" PostId="6406" Score="0" Text="yes you can consider as none can beat the knowledge acquired from a video lecture series and the corresponding book followed in the video lecture series, it lasts forever. As you are having an instructor whom you can play or pause or rewind if you cannot understand the topic. However the corresponding book followed by the instructor is definitely required for greater in-depth everlasting knowledge. If you only watch video lecture, you shall understand the things at great depth , but it stays only temporarily and then you forget. For an everlasting effect, frequent brush up is required I hope" CreationDate="2020-07-03T17:01:24.440" UserId="9124" />
  <row Id="16647" PostId="6408" Score="0" Text="An advanced degree is better than any certification, actually." CreationDate="2020-06-29T20:32:12.217" UserId="1293" />
  <row Id="16655" PostId="6409" Score="1" Text="No. Java, Python, or JS - the worst choice for all of the educational purposes. JS is a:&#xA;1) leaking scope 2) arrays are objects 3) the weakest typing I've ever seen 4) huge amount of the special-case behaviors. You cannot escape OOP in both Python and JS, the most part of the API in stdlib has an object-oriented interface.&#xA;&#xA;Specifically for python: kids need arrays and strings out of the box, not heterogeneous lists and dictionaries. Python has a complicated debugging. Lots of cases like: &#xA;&gt;&gt;&gt; l = [[]] * 5&#xA;&gt;&gt;&gt; l[0].append(42)&#xA;&gt;&gt;&gt; l&#xA;[[42], [42], [42], [42], [42]]. And so on and so forth." CreationDate="2020-07-02T06:21:02.007" UserId="6387" />
  <row Id="16659" PostId="6409" Score="0" Text="@paus JS scope-leaks and lua doesn't? (That incidentally is why I said lua is worse than python in above comment) For the rest I broadly agree; just that what you call OO I would call &quot;reference semantics&quot;. But if you prefer old fashioned arrays *plus* modern graphics you need to ask how consistent your wish is. Haskell will save you from reference semantics/OO and give you modern goodies but it's not (currently packaged for) children!" CreationDate="2020-07-02T12:55:41.103" UserId="8837" />
  <row Id="16661" PostId="6409" Score="0" Text="@Rusi well, python has OO but we have to start from ground up, object oriented approach was created for people who already faced the code complexity and want to decompose/beat it. Kids have no complexity at the beginning. They see &quot;for x in range&quot;. What is range? It's iterator. What is iterator? It's pattern. (pain) Also, it's implemented in a strange way: multiple inheritance, no information hiding. Paradigm, first time met in such implementation, may cause serious damage to students, making it hard to retrain them in a right way. If we want OO, maybe it's better to start with Squeak/Pharo?" CreationDate="2020-07-02T14:00:31.027" UserId="6387" />
  <row Id="16664" PostId="6409" Score="0" Text="@paus I dislike oop. Period. Children. Adults. Big programs. small programs. Etc.  So you're not going to get any disagreement from me in that regard! As for range, range(5) is just [0,1,2 3,4]. Python2 is kinder to beginners than python3. I've been teaching python for nearly 20 years; python3 has been around for nearing 10 but I always start with 2 not 3. Many reasons like this one..." CreationDate="2020-07-02T15:32:45.747" UserId="8837" />
  <row Id="16672" PostId="6409" Score="0" Text="@Rusi but even in 2nd version of python, there is no code consistency in the language itself: l.append(x) BUT at the same moment map(f, l) and so on. Lots of special-cases like magic methods, casting to boolean here and there, mutable values by default for arguments... I can continue endlessly. Python is an industrial language, created by an artisan from programming and long ago, carrying with itself a bunch of legacies, not the most pleasant sometimes." CreationDate="2020-07-03T09:15:21.747" UserId="6387" />
  <row Id="16649" PostId="6411" Score="0" Text="Examples of problems solved: 1) Getting binary data through a Mux by escaping XON-XOFF with DLE. 2) Creating a pair of DOS TSRs to share modems over a Novell network using IPX. 3) Helping design a &quot;Data Exchange Methodology&quot; before XML existed, with many major features of XML. 4) Developing a multi-threaded and multi-process database transaction server using HTTP and ODBC, before the Apache web server was multi-threaded. 5) Various small projects which involved creating Domain Specific Languages to simplify deploying flexible / scripted solutions. (Compiler design course comes in handy...)" CreationDate="2020-07-02T01:16:44.367" UserId="5349" />
  <row Id="16665" PostId="6413" Score="0" Text="thanks! this is really helpful." CreationDate="2020-07-02T16:27:04.927" UserId="9217" />
  <row Id="16683" PostId="6417" Score="2" Text="How experienced are you with Java? Are you a teacher or a student?" CreationDate="2020-07-05T19:24:31.490" UserId="1293" />
  <row Id="16684" PostId="6417" Score="0" Text="I am a student from CS background. I know the basics of Java (to give an idea of what I know, I know that much such that I can read a data structure book based on Java, but not the deeper concepts ...)" CreationDate="2020-07-05T19:39:39.893" UserId="9124" />
  <row Id="16691" PostId="6417" Score="7" Text="As well as being 16 years out of date (as mentioned in an answer), Schildt's books have a reputation for being full of errors. One memorable review said that he had &quot;learned something [when creating a new edition of a book], not enough to receive a positive recommendation but at least enough to remove the &quot;positively harmful&quot; description [of the previous edition]&quot;. Less polite reviewers have simply omitted the letters c, l and d from his name. Another review suggested renaming one of his books as &quot;C: the complete nonsense (4th edition)&quot;. You have been warned!" CreationDate="2020-07-06T09:45:18.967" UserId="1352" />
  <row Id="16685" PostId="6418" Score="0" Text="Thank you for the help. So please can you recommend me the textbook (with the edition) which you feel is the best." CreationDate="2020-07-05T20:02:30.413" UserId="9124" />
  <row Id="16686" PostId="6418" Score="4" Text="Hmmm. The ones I wrote, of course. But it would be impossible for me to make a recommendation here. But if a book suggests that Circle is a subclass of Point, it is the wrong book and it will only lead you astray." CreationDate="2020-07-05T20:03:50.560" UserId="1293" />
  <row Id="16695" PostId="6418" Score="0" Text="Depends how you're defining &quot;recent&quot;, but lambdas, default methods, modules, type inference, switch expressions, text blocks, pattern matching, and records are all significant language additions." CreationDate="2020-07-06T15:11:56.793" UserId="2448" />
  <row Id="16696" PostId="6418" Score="0" Text="Any recent edition may be fine, but the edition that the OP shows is *FAR* from recent. It predates the addition of Generics which is IMO one of the most significant changes in all of Java's history." CreationDate="2020-07-06T15:54:59.557" UserId="1287" />
  <row Id="16689" PostId="6419" Score="0" Text="I know programming, C in depth, I know the basic of Java (I was taught Java back when I was in std 8 of school till std, 12 of my school) but I want to know it in depth..." CreationDate="2020-07-06T08:36:40.820" UserId="9124" />
  <row Id="16693" PostId="6419" Score="7" Text="@AbhishekGhosh: In that case, learning an outdated version of the language is not going to help you much. It would be like learning C++ without templates, or K&amp;R C." CreationDate="2020-07-06T10:04:30.210" UserId="945" />
  <row Id="16694" PostId="6420" Score="0" Text="Thanks for the help" CreationDate="2020-07-06T13:12:46.897" UserId="9124" />
  <row Id="16758" PostId="6420" Score="0" Text="Bloch's book is great." CreationDate="2020-07-23T18:58:52.420" UserId="21" />
  <row Id="16698" PostId="6422" Score="4" Text="Let me warn you against solution manuals. If used improperly, they decrease the effectiveness of your study. Reading a solution has _much_ less value than producing it. Having the solutions available can be very tempting to take short cuts." CreationDate="2020-07-08T10:38:35.600" UserId="1293" />
  <row Id="16699" PostId="6422" Score="0" Text="Ok @Buffy. Moreover if I use it improperly I shall be the ultimate loser as I won't be able to season my thinking process. I strictly want to verify my approach of solution with those of standard solutions and rectify me if I take a worse approach. (Philosophically though, short cuts lead to long cuts later in the life... Sort of like amortized analysis.) Thanks for the guidance and caution..." CreationDate="2020-07-08T11:01:53.830" UserId="9124" />
  <row Id="16737" PostId="6422" Score="0" Text="I strongly recommend to present your solutions at [Code Review](https://codereview.stackexchange.com/questions) exchange." CreationDate="2020-07-18T02:10:56.733" UserId="182" />
  <row Id="16738" PostId="6422" Score="0" Text="Not all solutions in CLRS turn out to be codes. Most are mathematical analysis. Shall it be suitable? The site asks about only codes I hope. I am not sure..." CreationDate="2020-07-18T06:04:25.270" UserId="9124" />
  <row Id="16703" PostId="6424" Score="1" Text="thanks for the help @Buffy" CreationDate="2020-07-09T15:18:40.907" UserId="9124" />
  <row Id="16704" PostId="6426" Score="3" Text="Does this answer your question? [The theory of parsing, translation, and compiling, v.s. Compilers: Principles, Techniques, and Tools?](https://cseducators.stackexchange.com/questions/6423/the-theory-of-parsing-translation-and-compiling-v-s-compilers-principles-t)" CreationDate="2020-07-09T17:47:08.150" UserId="1293" />
  <row Id="16705" PostId="6426" Score="2" Text="An old book should be fine for a beginner." CreationDate="2020-07-09T17:47:51.730" UserId="1293" />
  <row Id="16706" PostId="6426" Score="1" Text="No it does not answer my question, but frankly speaking, it was your elegant answer which caused me to ask this question here, which was there in my mind for a few days." CreationDate="2020-07-09T20:09:42.353" UserId="9125" />
  <row Id="16707" PostId="6426" Score="2" Text="My (strong) suggestion is that the first compiler you build should be done with a recursive descent program and no compiler tools at all. A simple LL(1) language with a simple grammar. If you compile to an abstract assembly language then the whole project is only a couple of weeks work. Then you will understand the structure. Hence old books are fine to start. Sethi probably made an improvement pedagogically, but there is an older &quot;dragon book&quot; version without him.  You won't do much of anything with optimization, but that can come later." CreationDate="2020-07-09T20:17:38.930" UserId="1293" />
  <row Id="16709" PostId="6426" Score="1" Text="@Buffy This question is not my area, but that is so close to being an answer. You should turn it into an answer!" CreationDate="2020-07-11T03:40:00.240" UserId="27" />
  <row Id="16710" PostId="6426" Score="1" Text="@BenI. you said it right." CreationDate="2020-07-11T19:47:36.400" UserId="9125" />
  <row Id="16718" PostId="6429" Score="0" Text="I can't say I'm familiar with any haskell textbooks, but if you haven't seen it before, there's a [list of haskell textbooks](https://wiki.haskell.org/Books#Textbooks) on the haskell wiki." CreationDate="2020-07-15T10:21:19.360" UserId="58" />
  <row Id="16719" PostId="6429" Score="0" Text="@thesecretmaster That's the thing: textbooks, not WORKbooks you can use to prepare handouts in LaTeX and send on email :-( And to vary these tasks by difficulty level, of course." CreationDate="2020-07-15T10:24:12.063" UserId="6387" />
  <row Id="16720" PostId="6429" Score="0" Text="Well, there's [this online thing](https://mmhaskell.com/workbook). I mostly haven't seen workbooks since grammar school, so I am not aware of any great resources.  The very first textbook on thesecretmaster's list advertises its many exercises, so that might be one to check out." CreationDate="2020-07-15T12:01:59.380" UserId="27" />
  <row Id="16721" PostId="6429" Score="0" Text="Hutton's [book](https://doi.org/10.1017/CBO9781316784099) has exercises." CreationDate="2020-07-16T11:18:41.730" UserId="904" />
  <row Id="16740" PostId="6431" Score="0" Text="Have you seen [this](https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html)?  JFTR I know almost no rust and still less go. But I have a great interest in this question..." CreationDate="2020-07-18T13:20:52.990" UserId="8837" />
  <row Id="16742" PostId="6431" Score="0" Text="@Rusi I like the way goes about certain things, and as Rob nicely points out, it's about composition and simplicity. However, I think it's no surprise that Go was developed at Google with their needs in mind. If we go low-level, we often end up needing to be really... &quot;specific&quot; in a way Go doesn't allow, unfortunately. I think this could be fixed and the idea of Go combined with the specifics and security of Rust, but we're not there yet. Anyhow, for this course I think Rust is the better choice since it forces you to reason about details." CreationDate="2020-07-18T14:09:30.330" UserId="9311" />
  <row Id="16727" PostId="6432" Score="0" Text="I agree that this should be split, however we do not have the time in the curriculum. They need to learn some language anyhow (they only know Haskell at that point)." CreationDate="2020-07-17T06:05:47.387" UserId="9311" />
  <row Id="16728" PostId="6432" Score="0" Text="How would you create programming exercises to apply learnt things about e.g. memory handling within the OS with Python? I started learning with Pascal (but w/o records) and it was never clear to me until I have finally seen them as pointers in C. Before I had no understanding whatsoever." CreationDate="2020-07-17T06:15:27.807" UserId="9311" />
  <row Id="16731" PostId="6432" Score="1" Text="Cognitive load theory says that you can do both in less time, if you do one after the other. I used to try to teach many things at once, until I realised that it dose not work. I still do, IF it does not increase cognitive load." CreationDate="2020-07-17T14:59:49.570" UserId="204" />
  <row Id="16732" PostId="6432" Score="2" Text="Is memory an operating system thing? It seems like a CPU/architecture thing? Therefore split the course into 2 or 3 parts: learn to use Unix, learn to program in python, learn to write Unix tools in python (which tool is memory map based+), learn system architecture, learn to program by directly accessing memory. (Also note python provides mmap, with mutable string/arrays, to directly access memory (this memory is backed by a file, there may be other similar libraries)." CreationDate="2020-07-17T15:04:06.997" UserId="204" />
  <row Id="16733" PostId="6432" Score="0" Text="Hmm, I think the issue is that it just &quot;seems&quot; that we can do this &quot;more efficient&quot; in parallel but this is only due the students not actually learning many things. If we were to split the course, we'd probably remove content but not because it's less efficient but because it makes it more obvious that the course is over crammed." CreationDate="2020-07-17T21:27:12.573" UserId="9311" />
  <row Id="16734" PostId="6432" Score="0" Text="A bit of an issue we have is that &quot;programming skills&quot; are considered a prerequisite to the course, however that is simply unrealistic. But that's nothing we can fix here, unfortunately :) OTOH, &quot;learning to program&quot; is not really part of our (heavily academic) curriculum, neither is using UNIX like systems." CreationDate="2020-07-17T21:29:21.943" UserId="9311" />
  <row Id="16735" PostId="6432" Score="0" Text="I think we simply need to go over the courses goals, it's simply unrealistic right now. However, the &quot;current&quot; way of doing things of learning C/Rust &quot;in tandem&quot; is, I think, helpful insofar, as some C concepts &quot;require&quot; some OS knowledge and vice-versa, but this should be a solvable problem. RE: Memory and OS: Yes, kinda, but the memory management/allocation is configured/driven by algorithms in the OS, while the memory protection is realised using the MMU. We focus on the former in our course." CreationDate="2020-07-17T21:32:40.287" UserId="9311" />
  <row Id="16736" PostId="6432" Score="0" Text="Thanks for the really in-depth thoughts! I think you're right and our current way of doing things simply hides the issues. The curriculum us quite unrealistic (w/o prior knowledge, which is the case for most ppl teaching, including me) and splitting the course as you proposed will improve the course but it will still be less good than what I'd like it to be. Regardless, I still ponder whether using Rust (instead of C or Python) would be a good idea. In my experience Python is good for learning programming but that's not the goal here; anyhow different question (and heated topic). Thanks again!" CreationDate="2020-07-17T21:37:43.090" UserId="9311" />
  <row Id="16739" PostId="6432" Score="0" Text="Note: I have NO opinion of rust (I have not used it, not even as a programmer.). I only discussed python, as that is what I used. I also tried golang, it is very nice, however it makes it hard to create your own inter-process communication, as it already has it: I got a circular buffer working in golang, but it would not fail where it should (because of non atomicity). Therefore check the language has no features that will get in the way (these are often features that you want, most of the time)." CreationDate="2020-07-18T10:42:50.337" UserId="204" />
  <row Id="16741" PostId="6432" Score="1" Text="Yep, that's why I'm unsure about Python. But all that doesn't matter as much as splitting the course, anyway" CreationDate="2020-07-18T13:54:41.790" UserId="9311" />
  <row Id="16755" PostId="6432" Score="0" Text="@larkey &quot;however we do not have the time in the curriculum&quot; Then your question is really, how do I teach more than I have time for, and the answer is, obviously you can't, and so why are you asking? But whatever you do teach you should separate concerns per this answer." CreationDate="2020-07-22T21:24:59.750" UserId="2485" />
  <row Id="16756" PostId="6432" Score="0" Text="@philipxy It's more &quot;how to make the best of it&quot; (since I'm not in the position to change that). And regardless whether we have time or not, the question still stands, doesn't it?" CreationDate="2020-07-22T22:09:36.493" UserId="9311" />
  <row Id="16743" PostId="6433" Score="1" Text="I am not myself familiar with Fibonacci Heaps, but when I search for &quot;Fibonacci Heaps&quot; on Google, and then click on videos, I get many videos. Some are long and some are short and say that they are the main idea. Will those help you?" CreationDate="2020-07-18T18:14:30.760" UserId="27" />
  <row Id="16744" PostId="6433" Score="0" Text="I do not quite know whether it shall help me. Let me go through a &quot;long&quot; video 1:17:00 length, of IMSc. While watching videos from youtube unless the source is known it is dangerous to go through them as some wrong source can teach me wrong concept, and once a concept is learnt it is difficult to forget. IMSc is a good source I feel. Thanks for the method of getting videos. @BenI" CreationDate="2020-07-18T19:22:09.710" UserId="9124" />
  <row Id="16745" PostId="6433" Score="1" Text="I've found in general that the shorter videos that are more edited are often better for the &quot;big idea&quot;, and that the longer videos help with all of the details when you are ready to dive into them. Good luck!" CreationDate="2020-07-18T20:16:50.603" UserId="27" />
  <row Id="16787" PostId="6433" Score="1" Text="@AbhishekGhosh: I'm not saying you're wrong, but your reticence about watching an educational video that has not been curated clashes with your expectation of education yourself through self-learning. Teachers and institutions specifically curate the source material to improve the quality of education, but that curation takes effort and therefore comes with a cost that self-learners specifically want to avoid." CreationDate="2020-08-05T09:51:44.760" UserId="2164" />
  <row Id="16788" PostId="6433" Score="0" Text="@Flater I agree with you" CreationDate="2020-08-05T13:05:16.977" UserId="9124" />
  <row Id="16746" PostId="6434" Score="0" Text="Hi Moha, welcome to [cseducators.se]!  I'm having trouble deciphering this text: &quot;what kind of majors do I want to learn and work with in the future as graduated computer science student&quot;. Could you clarify?" CreationDate="2020-07-20T15:53:20.397" UserId="27" />
  <row Id="16747" PostId="6434" Score="0" Text="Hey ben, We know the expansive of careers in CS e.g. &quot;Android Development&quot;, &quot;Data Science&quot;, &quot;Artificial Intelligence&quot;, &quot;Web developer&quot; and etc...&#xA;I don't know what really fit me among those careers, but I really need to know.&#xA;What I meant in my question is &quot;How to know what career that fits me among of all these careers?&quot;." CreationDate="2020-07-20T21:36:55.843" UserId="9317" />
  <row Id="16748" PostId="6434" Score="1" Text="Oh, I see! That question is way out of the scope of this site (or any stack exchange site).  For life advice, is there a faculty advisor you could reach out to?" CreationDate="2020-07-21T02:07:44.847" UserId="27" />
  <row Id="16749" PostId="6434" Score="0" Text="I'd add as well that there are effectively infinitely more careers in CS than you are considering; every field and every walk of life is bring touched by CS, so it is basically everywhere.  Forgetting about careers for a moment, what parts of CS seem interestinf to you? That's a good starting point." CreationDate="2020-07-21T02:09:17.763" UserId="27" />
  <row Id="16750" PostId="6434" Score="0" Text="Yes there's a faculty advisor in my university, I will ask him one day.. but actually I don't really trust him that's why I'm here.&#xA;&#xA;I heard that (In general) there's about 21 main career in CS and you are able to merge every 2 of them to get you a new career!  and that's explain how we find CS in every thing in our life. This is actually awesome! but in the same time scary for me imagining myself in a maze named &quot;CS&quot; and there's tens of paths I have to choose one of them while I don't know what is the best for me.." CreationDate="2020-07-21T10:17:49.683" UserId="9317" />
  <row Id="16751" PostId="6434" Score="0" Text="You asked what is the interesting part of CS for me..&#xA;&#xA;I would say coding in general, 2 years of coding and still love the idea that I am using a programming language to tell the computer what to do, but what I really hate is work in the same pattern every time (routine) that's why I love Problem Solving.&#xA;I like challenges and critical thinking, I'm good at that.&#xA;&#xA;These things I said is what made me love CS from the first week of university till now." CreationDate="2020-07-21T10:21:39.240" UserId="9317" />
  <row Id="16752" PostId="6434" Score="0" Text="You said &quot;websites articles tests&quot;. (Did you mean texts?) Books are important — even if currently unfashionable see https://medium.com/bits-and-behavior/computer-science-taught-me-that-books-werent-important-it-was-wrong-63ead2fdad7a I could list some of the(for me) critical books if you wish" CreationDate="2020-07-22T12:30:52.503" UserId="8837" />
  <row Id="16786" PostId="6434" Score="1" Text="I’m voting to close this question because it's asking for career advice." CreationDate="2020-08-05T09:49:06.517" UserId="2164" />
  <row Id="16789" PostId="6434" Score="0" Text="@Flater I intended to come back to this question and close it, but it fell off my radar. Thanks for the flag!" CreationDate="2020-08-05T13:42:39.257" UserId="27" />
  <row Id="16753" PostId="6437" Score="0" Text="It isn't impossible that Oracle won't exist in five years. Or maybe it will be part of ... Facebook." CreationDate="2020-07-22T14:20:42.090" UserId="1293" />
  <row Id="16757" PostId="6437" Score="0" Text="Thank you for the response! I did not realize that AP Computer Science A and the OCP are that similar. I assumed that the OCP would cover more advanced topics since it’s a professional exam." CreationDate="2020-07-23T14:34:43.753" UserId="9322" />
  <row Id="16759" PostId="6437" Score="1" Text="@MarwanAmireh It can be, but it depends on which level of the exam you take. I am an AP teacher who prepped a private student for the first level exam, and it was mostly the same material. It might make more sense if yo lu consider that the basics of Java and OOP are the same everywhere :)" CreationDate="2020-07-23T19:55:18.120" UserId="27" />
  <row Id="17012" PostId="6437" Score="1" Text="@MarwanAmireh: In my experience, &quot;professional&quot; exams are typically a combination of &quot;Do you have a basic understanding of [whatever] engineering?&quot; (software, network, database, etc.) and &quot;How much of [company's] technology have you memorized?&quot; They are not equivalent to a &quot;real&quot; education, but might prove useful if you want a job at [company], or somewhere that heavily relies on their technology stack." CreationDate="2020-09-12T07:26:39.217" UserId="1896" />
  <row Id="16765" PostId="6440" Score="0" Text="I'm hearing good comments on obs studio https://obsproject.com/" CreationDate="2020-07-29T06:48:10.570" UserId="8837" />
  <row Id="16761" PostId="6441" Score="0" Text="You are right, that's a good solution, except I do want to show my face. Regarding products that are free and show a video of me + the screen, there is zoom (you can start a conversation with yourself, share the screen and record), and also you can use the built-in &quot;screenshots&quot; program, and from there you can put your face on the screen and record the screen" CreationDate="2020-07-28T11:46:51.413" UserId="9335" />
  <row Id="16762" PostId="6441" Score="0" Text="By the way if you know a program that answers the requirements and has a trial period of two weeks, that would be enough for me." CreationDate="2020-07-28T11:56:24.107" UserId="9335" />
  <row Id="16763" PostId="6441" Score="1" Text="@EllaSharakanski Why not just use Zoom, then?" CreationDate="2020-07-28T12:56:14.020" UserId="27" />
  <row Id="16764" PostId="6441" Score="0" Text="OBS studio (open broacaster system)   should do the job." CreationDate="2020-07-29T06:01:32.093" UserId="2103" />
  <row Id="16766" PostId="6441" Score="0" Text="@BenI. It's okay, but I was hoping for a program that answers requirement number 4 to minimize edit time. I often say the wrong word or sentence and I would really like the possibility to easily go a few seconds back and continue from there." CreationDate="2020-07-29T10:09:59.317" UserId="9335" />
  <row Id="16767" PostId="6441" Score="0" Text="@MichelBillaud Does it answer requirement number four? Meaning, does it allow you to go back a few seconds *while recording* and continue again from there?" CreationDate="2020-07-29T10:10:44.860" UserId="9335" />
  <row Id="16771" PostId="6441" Score="0" Text="@EllaSharakanski i'm  afraid it doesn't. I suggest you record first, restart your sentences if you make mistakes and worry about editing later. One problem at a time. See other answers." CreationDate="2020-07-30T23:15:02.850" UserId="2103" />
  <row Id="16780" PostId="6441" Score="0" Text="@BenI. May be because ZOOM is malware." CreationDate="2020-07-31T16:53:24.043" UserId="204" />
  <row Id="16784" PostId="6441" Score="0" Text="@ctrl-alt-delor I think Loom also allows recording the screen + myself." CreationDate="2020-08-03T16:10:17.690" UserId="9335" />
  <row Id="16866" PostId="6441" Score="0" Text="Powerpoint can also show your face in a window in the corner. Recording slide by slide allows you to easily redo a single slide without having to redo the whole thing. Can also reorder after recording, or divide the presentation into smaller chunks if needs be, before exporting to video. As much as I'd prefer the idea of doing my presentations in a more &quot;techy&quot; way with latex or markdown, PowerPoint is just providing such an efficient way to record video presentations that I'm sticking with it. It also allows you to publish directly to Stream, if you're institute is using that (in Office365)." CreationDate="2020-08-19T15:37:13.583" UserId="6633" />
  <row Id="16881" PostId="6441" Score="0" Text="@johnfrench I didn't even think about reordering slides. That's very cool! How do you videorecord with your face within PowerPoint??" CreationDate="2020-08-20T13:56:11.190" UserId="27" />
  <row Id="18035" PostId="6441" Score="0" Text="sorry, totally missed this question @Ben. From what I recall I had to enable the Recording tab in Powerpoint. Under that tab there's a  Record Slide Show function, in there there's an option to turn on the webcam and show video preview." CreationDate="2021-05-28T15:11:32.993" UserId="6633" />
  <row Id="16769" PostId="6442" Score="0" Text="Thanks for the reply. What textbooks do you use, if any? If you can give me more information about your courses I would appreciate it." CreationDate="2020-07-30T19:22:49.207" UserId="9318" />
  <row Id="21062" PostId="6443" Score="0" Text="Thanks for your input on this.  The Amazon reviews for it don't look great.  Any comments on that?" CreationDate="2023-04-18T12:25:24.790" UserId="13251" />
  <row Id="21063" PostId="6443" Score="1" Text="@FrankHenard You must be seeing different reviews than me, or seeing a different Amazon. All the reviews I see there look fine to me. Perhaps they are location specific." CreationDate="2023-04-18T22:04:45.507" UserId="694" />
  <row Id="21064" PostId="6443" Score="0" Text="@BrianThompsett maybe you're right about the location.  I'm in the US." CreationDate="2023-04-19T12:27:12.660" UserId="13251" />
  <row Id="16770" PostId="6444" Score="0" Text="Been using OBS for the past few years and it's excellent." CreationDate="2020-07-30T23:07:20.650" UserId="30" />
  <row Id="16772" PostId="6445" Score="1" Text="I'm virtually positive that there is no such Java library.  Nevertheless, I upvoted since it could certainly be useful to me if it existed.  However, how would such an engine know that it was successful?  If a student uses two spaces between sentences instead of one, wouldn't that make your tests fail?  JUnit could work, or you could just create a macro that types, waits a bit, types, waits a bit, etc, etc, and sit and watch the game play out." CreationDate="2020-07-31T02:38:01.777" UserId="27" />
  <row Id="16773" PostId="6445" Score="1" Text="Testing the &quot;entire command line application as a black box&quot; wouldn't require a library, or any specific language. What's going to be needed is a custom built bot, which could be written in any language, including simple shell script. Use of a &quot;library&quot; implies that you would be injecting into the application, not a blcak box approach." CreationDate="2020-07-31T12:07:18.297" UserId="104" />
  <row Id="16774" PostId="6445" Score="0" Text="@GypsySpellweaver I'm looking for something that standardizes the process. There would be a compile step where if the student's code doesn't compile that gets logged. And then you can define test cases where certain inputs are applied and the case supplies strings to compare output against. Then you can log those cases in a standard way. Obviously I can just make this myself, but using an existing system seems like it would make it easier to record results and communicate them to students." CreationDate="2020-07-31T14:50:21.817" UserId="9343" />
  <row Id="16776" PostId="6445" Score="0" Text="@BenI. Two spaces? `/[[:blank:]]+/` — does java have regexes?" CreationDate="2020-07-31T16:23:24.130" UserId="204" />
  <row Id="16777" PostId="6445" Score="0" Text="You seem to have compleatly missed what @GypsySpellweaver was saying. They were saying that language dose not matter." CreationDate="2020-07-31T16:26:53.263" UserId="204" />
  <row Id="16778" PostId="6445" Score="0" Text="Is the program interactive?, or can it be run with command-line-arguments and a fixed file for standard in?" CreationDate="2020-07-31T16:29:02.283" UserId="204" />
  <row Id="16781" PostId="6445" Score="0" Text="@ctrl-alt-delor Of course there are regexes, but I was aiming for a trivial example.  Perhaps I was unclear. I was saying that unless the student output is specified, roughly character by character, such an engine would be of no use.  If the student substitutes &quot;You enter the room the the north&quot; with &quot;You go north, entering a room&quot;, no regex will save you. Game design with students had to be at least a little open ended, otherwise the assignment wouldn't be fun in the first place." CreationDate="2020-07-31T19:12:18.550" UserId="27" />
  <row Id="16782" PostId="6445" Score="0" Text="The key component of the described testing was to treat the &quot;entire command line application as a black box&quot;. The system (Windows, MacOS, or Linux) should have scripting capabilities which can compile (with error trapping) the student submission. Outside the pass/fail for compilation, the &quot;black box&quot; concept completely precludes any interactions between the student's application and the testing system except through the application's API. The description of the project suggests that the &quot;API&quot; in this case is the CLI terminal. Testing through such an API is going to require you to make a &quot;bot&quot;." CreationDate="2020-08-01T01:01:06.647" UserId="104" />
  <row Id="16783" PostId="6448" Score="1" Text="Thank you, but my presentation is for a well-known computer science conference and it's about theoretical computer science, so I don't think I should add any mistakes. Usually those lectures are with an audience, but because of the virus it will be pre-recorded. So it's not like a movie, it is more like a ted lecture, which is usually a single take." CreationDate="2020-08-03T16:07:44.523" UserId="9335" />
  <row Id="16785" PostId="6449" Score="0" Text="I'm surprised that this doesn't have an answer yet.  I'll see what I can dig up." CreationDate="2020-08-03T19:32:21.753" UserId="27" />
  <row Id="18001" PostId="6449" Score="0" Text="Python is not good for teaching a kid. Early days start from basic language." CreationDate="2021-05-13T08:26:07.030" UserId="10516" />
  <row Id="16790" PostId="6453" Score="0" Text="Nice, helpful first answer.  Welcome to [cseducators.se]!" CreationDate="2020-08-05T13:43:52.327" UserId="27" />
  <row Id="16791" PostId="6454" Score="1" Text="You don't list any requirements on the graphs (apparently any will do), so we have no way to evaluate answers -- I'm not sure that kind of question is a good fit for the Stack Exchange model.  You could just generate your own graphs randomly." CreationDate="2020-08-06T00:01:07.257" UserId="1106" />
  <row Id="16792" PostId="6454" Score="0" Text="Cross-posted: https://cseducators.stackexchange.com/q/6454/1106, https://cstheory.stackexchange.com/q/47342/5038, https://cs.stackexchange.com/q/128968/755.  Please [do not post the same question on multiple sites](https://meta.stackexchange.com/q/64068)." CreationDate="2020-08-06T05:18:01.760" UserId="1106" />
  <row Id="16793" PostId="6454" Score="0" Text="@D.W. : As I said : shortest paths, and flows." CreationDate="2020-08-07T00:47:30.607" UserId="6121" />
  <row Id="16794" PostId="6454" Score="0" Text="Yes, I saw that, and I stand by my comment.  That doesn't provide any requirements - you can compute shortest paths on any weighted graph (and flows on any graph, if you pick a pair of source and destination edge).  If you have no requirements, generating random graphs should meet the requirements." CreationDate="2020-08-07T01:22:03.473" UserId="1106" />
  <row Id="16795" PostId="6454" Score="0" Text="Hi Nicolas, welcome to [cseducators.se]! I think that as it currently stands, your question is a little to broad for us to give a helpful answer. Could you [edit] to possibly describe the project so that we'll have a better idea of the kind of graphs you're looking for?" CreationDate="2020-08-08T14:25:13.523" UserId="58" />
  <row Id="21448" PostId="6456" Score="0" Text="Get the one with a dinosaur on it. just for the laughs!" CreationDate="2023-10-05T07:50:01.597" UserId="12478" />
  <row Id="16796" PostId="6459" Score="1" Text="Hi, is this for a teaching experience? If not, this might be a more appropriate question for [Stack Overflow](https://www.stackoverflow.com)." CreationDate="2020-08-09T20:09:57.040" UserId="27" />
  <row Id="16797" PostId="6459" Score="0" Text="@Ben I. this is for both, teaching and learning" CreationDate="2020-08-09T22:05:21.733" UserId="9368" />
  <row Id="16798" PostId="6459" Score="1" Text="Could you elaborate on why you'd like an IDE like this for teaching purposes? While we sometimes can answer questions about tools for teachers, this doesn't seem specific to teaching CS and may be a better fit elsewhere on the stack exchange network." CreationDate="2020-08-09T22:40:03.763" UserId="58" />
  <row Id="16799" PostId="6459" Score="1" Text="Just to add on to what @thesecretmaster is saying, no need to elaborate here in the comments; please edit the question instead, as the comments will eventually be cleared as a matter of housekeeping." CreationDate="2020-08-10T00:26:30.527" UserId="27" />
  <row Id="16804" PostId="6459" Score="0" Text="Are you looking for a graphical tool that will draw the program in this form?" CreationDate="2020-08-11T22:10:01.700" UserId="204" />
  <row Id="16896" PostId="6463" Score="0" Text="As comments aren't intended for a discussion like this, I've [moved your comments to chat](https://chat.stackexchange.com/rooms/112147/discussion-on-answer-by-buffy-concept-of-variable) and you're welcome to continue the discussion there." CreationDate="2020-08-23T14:49:56.250" UserId="58" />
  <row Id="17951" PostId="6463" Score="0" Text="It is interesting you say &quot;*how names behave in the real world*&quot;. Well, how humans work with names. But names are not a thing in the sense that a computer variable is a thing. It is really important to distinguish our concepts from what we are having thoughts about. Being comfortable with a way of thinking is of little help if it differs from what is actually happening, or if actual activity is required. I can think all I want about riding a bicycle, but not falling over is entirely different, and studying Physics will not help. The computer responds to what you do, not what you are thinking." CreationDate="2021-05-02T01:56:10.430" UserId="5349" />
  <row Id="16801" PostId="6464" Score="2" Text="Hey briscoboy, would you mind fleshing this answer out?  This answer is what we call an answer stub, and gets automatically flagged as low-quality by the system." CreationDate="2020-08-11T21:19:41.473" UserId="27" />
  <row Id="21442" PostId="6464" Score="0" Text="I don't think CCNA is advanced networking!" CreationDate="2023-09-19T00:45:34.080" UserId="12478" />
  <row Id="16800" PostId="6465" Score="0" Text="I've seen you starting to post over the last few days. We are a small but (IMHO) great community.  Welcome to [cseducators.se]!" CreationDate="2020-08-11T19:56:16.930" UserId="27" />
  <row Id="16806" PostId="6466" Score="1" Text="Welcome to [cseducators.se]!  For this question, I might recommend our sister site, [cs50.se] along with the tag `cs50ap`. There's no reason that your question is not topical here. It's a great question and a great fit for cseducators, but I see that it's gone 18 hours without an answer so I thought I might direct you to a place where you might get an answer faster. The other place to check would be in the teacher section on collegeboard.com." CreationDate="2020-08-13T11:38:19.727" UserId="27" />
  <row Id="16932" PostId="6466" Score="0" Text="I would humbly request to no mentions be made to `collegeboard.com` other than out of utmost necessity. No educator ever should be wishing for that pseudo-governmental behemoth to exist (nor any others like it). Yuck! I need to go wash my hands." CreationDate="2020-08-31T17:34:38.330" UserId="9440" />
  <row Id="16858" PostId="6468" Score="0" Text="Great idea for introducing the concept of a variable. Two thoughts: paper was meant to be a permanent record, the erase-ability is an unwanted side-effect. (This is why we use gel-pens when writing a check.) For computer variables, the very point is that they vary. The for-loop is probably the most fundamental computer construct. Second: many students now have likely never seen a paper form, a printed bank statement or used a register, ledger, filled out tax forms, or most other paper methods. Many might have little experience even writing with a pencil. Voice and 'wizards' do the work now." CreationDate="2020-08-19T11:06:05.433" UserId="5349" />
  <row Id="16859" PostId="6468" Score="0" Text="@ScottRowe, don't talk wet. Paper has always been thrown away, crossed out, rubbed out, or even Tippexed. If you really wanted to emphasise ease of variability or erasability, you could employ a blackboard as the &quot;paper&quot; - people will understand that it still represents a writing surface capable of displaying a &quot;form&quot; (a structure for information), but unlike a surface of wood pulp, a blackboard is more specifically designed for reuse. And to say &quot;many students have never seen a paper form&quot; is an utterly risible assertion. I certainly hope you do not reflect the standard of an educator." CreationDate="2020-08-19T12:51:35.863" UserId="9075" />
  <row Id="16908" PostId="6468" Score="1" Text="A worksheet is one kind of form, isn't it? So if nothing else, as long as the students aren't toddlers who are just starting school, then the form analogy could be converted into a worksheet analogy: The variable &quot;names&quot; are the problem questions, and their values are the students' answers. (There are also the &quot;name&quot; and &quot;date&quot; variables.) You can change your answer (the variable's value) as much as you want while you're working on your worksheet, but you're (supposed to be) always overwriting your old answer. Some functions could include grading and putting the grade into the gradebook." CreationDate="2020-08-29T23:05:02.377" UserId="8132" />
  <row Id="16809" PostId="6469" Score="0" Text="That's a cute example – maybe I'll use it . But the importance of good name choices is really a second level question.  The primary one is that — at least in imperative programming — the variable concept is fundamentally inconsistent with the standard math concept with the same name and look." CreationDate="2020-08-15T08:54:44.107" UserId="8837" />
  <row Id="16810" PostId="6469" Score="0" Text="@Rusi, it's probably more accurate to say the word &quot;variable&quot; is overloaded with many similar meanings. A better word for the administrative/computer concept would be &quot;field&quot;. On a computer as on paper, you are not declaring a variable, you're declaring a field. Mathematics (i.e. non computer science) tends to lack rigour concerning *storage* (where values are put, how that place is referred to, etc.), whereas administration has always been fundamentally concerned about it, so mathematicians tend not to have either the vocabulary nor any explicit understanding of the concept." CreationDate="2020-08-15T10:42:42.717" UserId="9075" />
  <row Id="16811" PostId="6469" Score="0" Text="@Steve I guess we agree on the facts though not the emphasis: if one emphasizes storage enough one gets assembly language! Many modern languages eg python, java, de-emphasise the *management/administration* of storage (by pushing under a garbage collector) but still end up with a leaky abstraction because of the need to clarify reference semantics. Only functional languages provide a variable abstraction layer hard(ened) enough that the programmer **cannot** figure out storage questions. And that's precisely why they are considered &quot;clean&quot;!" CreationDate="2020-08-15T10:53:53.413" UserId="8837" />
  <row Id="16814" PostId="6469" Score="0" Text="@Rusi, you're talking about *memory management*. &quot;Garbage collection&quot; is what paper archivists do when they send old records to pulp after 6 years. I'm talking about the more fundamental concept that every single value handled, including intermediary values, must be stored in a *pre-defined field* in the first place. Clerks are completely used to the concept, because they work constantly with forms. Mathematicians don't tend to work with forms - they work freestyle on blackboards, defining the storage fields on the hoof (usually according to a schema existing only in their own minds). (1/2)" CreationDate="2020-08-15T11:17:12.597" UserId="9075" />
  <row Id="16815" PostId="6469" Score="0" Text="Functional languages, like all computer languages, are still thoroughly explicit about how values are stored. You cannot calculate a value without specifying explicitly *into what field* the result goes. On a blackboard, you can just perform a calculation using space freely and as desired - you don't have to give every field a name or otherwise structure the storage of values up-front in any particular way. This is why some have said that computer science is the engineering of mathematics. (2/2)" CreationDate="2020-08-15T11:28:26.527" UserId="9075" />
  <row Id="16819" PostId="6469" Score="0" Text="Sorry, but I don't see how obfuscating names answers the OPs question at all." CreationDate="2020-08-16T15:37:45.177" UserId="1293" />
  <row Id="16821" PostId="6469" Score="0" Text="@Buffy, this post was not to answer the question directly, since you and other have done a much better job that I could, but to address a second topic that one might discuss when describing what a variable is. Namely the importance of good naming. I wish my answer came after the actual answers." CreationDate="2020-08-17T16:59:28.467" UserId="4301" />
  <row Id="16822" PostId="6469" Score="0" Text="Non answers usually get deleted. This isn't a random discussion site. If you want to ask the associated question yourself and provide your own answer, that is acceptable." CreationDate="2020-08-17T17:01:37.060" UserId="1293" />
  <row Id="16823" PostId="6470" Score="0" Text="Are you looking for more criteria? Or scoring guidelines?" CreationDate="2020-08-17T19:23:23.203" UserId="27" />
  <row Id="16830" PostId="6470" Score="0" Text="I'm looking for more criteria." CreationDate="2020-08-17T21:25:32.597" UserId="8455" />
  <row Id="16850" PostId="6470" Score="0" Text="Okay, I edited your question to include the ask :)" CreationDate="2020-08-18T18:58:40.923" UserId="27" />
  <row Id="16884" PostId="6470" Score="4" Text="Few lines should need a comment. If they do, both are probably wrong." CreationDate="2020-08-22T02:27:32.997" UserId="5219" />
  <row Id="16913" PostId="6470" Score="0" Text="Since you have &quot;Passes all unit tests&quot;, I guess &quot;test coverage&quot; is an implied criterium. Presumably, more unit tests are better, but only if they cover different cases." CreationDate="2020-08-30T12:05:05.270" UserId="2618" />
  <row Id="17056" PostId="6470" Score="0" Text="Scaling is pretty hard to judge. And for a &quot;coding&quot; assignment, rather than for an advanced concepts course, probably inappropriate. Likewise, too many criteria makes it harder to implement. Keep it simple." CreationDate="2020-09-22T16:34:35.153" UserId="1293" />
  <row Id="17057" PostId="6470" Score="1" Text="There are 4 types of comment: To say why, to augment a weakness in the language, to augment a weakness in the programmer, noise." CreationDate="2020-09-22T21:13:47.247" UserId="204" />
  <row Id="18012" PostId="6470" Score="0" Text="I'm not too bad at adding comments but find it is much better to use appropriately named variables and additional variables for greater clarity which the proposer may suggest are unnecessary. What I am poor at is updating comments when refactoring which as has been pointed out renders the program wrong! However, great post and wonder if, Brian, you've got a final rubric." CreationDate="2021-05-17T14:48:59.770" UserId="10537" />
  <row Id="18013" PostId="6470" Score="0" Text="@WattCommunity Welcome to cseducators!!  I converted your answer to a comment since it wasn't actually an answer to the question, but feel free to browse around and answer (or ask) questions!" CreationDate="2021-05-19T01:09:25.657" UserId="27" />
  <row Id="16825" PostId="6471" Score="4" Text="Note that pdf's can be annotated and returned. You can make the original from their source if needed." CreationDate="2020-08-17T19:43:59.780" UserId="1293" />
  <row Id="16826" PostId="6471" Score="0" Text="Yes, it's easy to save these as PDFs (in fact I do this for automating the printing so that I get headers, line numbers and syntax highlighting via bolded keywords). @Buffy How do  you annotate the PDFs? Do you have a stylus and tablet available for this?" CreationDate="2020-08-17T20:09:51.010" UserId="433" />
  <row Id="16827" PostId="6471" Score="2" Text="On a Mac, Preview lets you add a (typed) note anywhere. That's all I've done, but I'm sure there are other solutions." CreationDate="2020-08-17T20:11:32.327" UserId="1293" />
  <row Id="16828" PostId="6471" Score="0" Text="Thanks @Buffy, I'd like the ability to circle, underline, freely annotate the code, so I'm exploring ways of doing that too .. though obviously typing comments will be better for students (more legible:) and me (faster usually) than handwriting." CreationDate="2020-08-17T20:17:19.380" UserId="433" />
  <row Id="16831" PostId="6471" Score="3" Text="[Xournal](https://github.com/xournalpp/xournalpp)   let's you import a pdf and scribble on it in various colors. I guess circling with a standard mouse is doable. Writing is not!!" CreationDate="2020-08-18T00:55:22.133" UserId="8837" />
  <row Id="16832" PostId="6471" Score="1" Text="@Rusi Xournal also allows to type text. In fact for people with my handwriting this might be the preferred method, even in presence of a stylus." CreationDate="2020-08-18T11:08:52.870" UserId="9395" />
  <row Id="16833" PostId="6471" Score="0" Text="@Rusi Thanks I'll have to check it out, didn't know about this - much appreciated" CreationDate="2020-08-18T12:59:53.800" UserId="433" />
  <row Id="16837" PostId="6471" Score="0" Text="Have you thought about checking out of-the-shelf code review solutions? Reviewing code is a solved problem in the workplace. People working for IT companies have to review -- and comment on -- other peoples code every day." CreationDate="2020-08-18T13:26:35.583" UserId="1086" />
  <row Id="16848" PostId="6471" Score="0" Text="@Polygnome If you have any useful links that would help and work in an academic environment (for free) without undue complexity for newbie programmers, I would love to see them. If I was aware of such tools I would not have posted asking for suggestions. Thanks." CreationDate="2020-08-18T16:48:32.013" UserId="433" />
  <row Id="16855" PostId="6471" Score="0" Text="@Buffy  It's not always seamless.  I've been annotating PDFs for a student - and his software can't read the pop-up comments I write (in Okular, Linux) unless I &quot;print&quot; the PDF to a new file." CreationDate="2020-08-19T09:25:28.457" UserId="1127" />
  <row Id="16856" PostId="6471" Score="1" Text="... Xournal (as @Rusi suggests) used to have trouble exporting marked-up PDFs for reading in other software  but I think it's better now" CreationDate="2020-08-19T09:26:11.523" UserId="1127" />
  <row Id="16857" PostId="6471" Score="1" Text="At my university, Canvas has a so-called &quot;speedgrader&quot; tool that allows you to annotate submitted pdfs in the browser. Annotations have to be entered via the computer, but the time lost with that can at least be partially regained by copypasting explanations for common mistakes. Is this tool unavailable to you, or is there some reason you do not want to use it?" CreationDate="2020-08-19T09:42:42.643" UserId="154" />
  <row Id="16875" PostId="6471" Score="0" Text="@Discretelizard I'm looking at it now .. and it may be workable, thanks for the suggestion. Being part of Canvas would certainly simplify things.  Do you have any idea how I can avoid source code lines from wrapping? For some reason the code is presented in portrait orientation, it would print/display fine in landscape. Or if I could set the right margin to say 130 columns. Or, perhaps even reduce the font size ..." CreationDate="2020-08-19T22:54:05.237" UserId="433" />
  <row Id="16878" PostId="6471" Score="1" Text="@Levon Oh, are the pdfs in landscape orientation? I haven't used this tool with landscape oriented pdfs, so I wouldn't know, unfortunately. When I use it (with pdfs in portrait orientation), the pdf displayed on Canvas displays just the same as it would in my pdf reader. If you have more than one screen, one option would be to open the pdf in a reader in landscape mode on another screen and edit in Canvas. However, I'm not too sure how much of an advantage this is over editing directly in a pdf reader." CreationDate="2020-08-20T06:51:52.083" UserId="154" />
  <row Id="16880" PostId="6471" Score="0" Text="@Discretelizard No, these are plain source code (.java) files and Canvas renders them as text files in portrait orientation. The obvious benefit of this is that the code can be downloaded and run. I just haven't found a way to change margins or orientation so that the speedgrader doesn't mess up the formatting if I wanted to do the grading/annotating in it." CreationDate="2020-08-20T13:24:11.490" UserId="433" />
  <row Id="16882" PostId="6471" Score="1" Text="@Levon Ah, I misread the comment about pdfs. I was under the mistaken impression that the students had to submit a pdf. I'm not sure if there's a way to make a pdf of the submitted files and feed it back to the speedgrader. Pdfs are usually formatted correctly by this tool." CreationDate="2020-08-20T14:54:03.383" UserId="154" />
  <row Id="16824" PostId="6472" Score="0" Text="Well, I'm no spring chicken, so perhaps that's why :)  Not sure about the meaning of &quot;have a solar workflow&quot;? Also curious, how do you provide feedback to the students for programming assignments. Happy to consider as many alternatives as I can.&#xA;&#xA;(don't have a tablet computer unfortunately)" CreationDate="2020-08-17T19:30:52.297" UserId="433" />
  <row Id="16829" PostId="6472" Score="1" Text="@Levon &quot;Solar&quot; lol -- sorry, I was using text to speech on my phone and didn't notice! I meant &quot;similar&quot;." CreationDate="2020-08-17T21:21:53.260" UserId="27" />
  <row Id="16852" PostId="6472" Score="1" Text="I used printouts of code in college in the early 1990s, but the reason was that I wanted to be able to read more than 80 columns and 24 rows at a time! The terminals of the day were rarely able to do more. Old habits die hard, as they say, but these days I almost always read code on screen as well. I switched as soon as PC graphics got sufficient screen resolution for it. I think around 1024x768. Though at some point I also bought a large and heavy CRT monitor that did 1600x1200... Once in a blue moon I may still print some code to look at it offline, though that hasn't happened in years." CreationDate="2020-08-19T00:32:18.687" UserId="4575" />
  <row Id="16849" PostId="6473" Score="0" Text="Thanks, I appreciate the post  .. I have thought about the testing suite approach, but esp for these novice programmers, I find it particularly necessary to provide some guidance on coding style etc, so functionality is not the only criteria. The CS 1 students are all using Eclipse, so I'm not sure if it has any of the features you refer to with re VS Live Code Share (haven't used it myself I am not that familiar with it)" CreationDate="2020-08-18T17:02:58.003" UserId="433" />
  <row Id="16834" PostId="6474" Score="1" Text="Thanks, that's a good suggestion .. I may give that a try in my upper level classes, but for my CS I class they are already cognitively fully loaded with new concepts, so I don't want to toss this in on top." CreationDate="2020-08-18T13:01:32.517" UserId="433" />
  <row Id="16851" PostId="6474" Score="1" Text="@Levon could you give them a script to run that commits the code and opens the PR for them? I recall installing WordPress in my undergrad via step by step instructions in a lab once. No idea of what the commands I was running actually were doing." CreationDate="2020-08-19T00:06:22.733" UserId="9399" />
  <row Id="16853" PostId="6474" Score="0" Text="@SandyChapman Thanks for the suggestion, I'm not sure there will be time to set up for this term, but perhaps down the line, esp for the CS 1 class if I can't come up with anything else. Those a bit more experienced could probably manage the necessary commands." CreationDate="2020-08-19T00:32:44.423" UserId="433" />
  <row Id="16854" PostId="6474" Score="4" Text="@Levon FWIW the [github desktop GUI tool](https://desktop.github.com/)  makes working with git very easy. You could probably get your students set up in a single lab session." CreationDate="2020-08-19T01:34:50.577" UserId="2152" />
  <row Id="16861" PostId="6474" Score="2" Text="I agree with this suggestion, but consider data privacy issues and university regulations when asking students to use some tool." CreationDate="2020-08-19T13:12:33.057" UserId="1645" />
  <row Id="16864" PostId="6474" Score="3" Text="GitHub Classroom is an effective way to distribute assignments to students, and it has a feature whereby it will automatically create a PR on the students repo for you to provide feedback. You can add comments to specific lines in the code or provide general feedback. I'll be using this in the upcoming semester, and it aligns very closely with industry code review processes. Beyond using Git there's no additional technical overhead for the students in using GitHub Classroom, it's really a teacher's tool. Repos can be private too which can help with privacy issues." CreationDate="2020-08-19T14:04:12.480" UserId="6633" />
  <row Id="16836" PostId="6475" Score="0" Text="If the staff lives in the hotel, then you have a stored-program computer, with a Von Neumann architecture..." CreationDate="2020-08-18T13:13:48.437" UserId="5349" />
  <row Id="16838" PostId="6475" Score="0" Text="*&quot;Modern computers allow for different sized and shaped boxes, and even on-the-fly shapes like something conveyed with XML.&quot;* - so do paper forms, and have done for centuries. Did you even read my existing answer before posting drivel like *&quot;variables are unique features of computing systems, different from how anything else in the universe functions&quot;*?" CreationDate="2020-08-18T13:33:26.057" UserId="9075" />
  <row Id="16840" PostId="6475" Score="0" Text="@Steve I acknowledged your idea of forms in my answer, did you read it? But you didn't mention things like arrays or lists. Spreadsheets used to be on paper. I was just explaining how a checkbook register works to a young person the other day... Hard to have any concept of a bank account without that visual image. How did we ever manage before the Sumerians found a way to record things on clay 3000 years ago? &quot;*There is nothing new under the Sun.*&quot; And yes, computers are different from paper. I have never seen paper carry out a set of instructions written on paper. Maybe someday." CreationDate="2020-08-18T13:42:02.517" UserId="5349" />
  <row Id="16841" PostId="6475" Score="0" Text="I said &quot;modern computers&quot; because of course early computers only had one size memory cell. For the record, this is why I rarely come on the field in this community to fly ideas (several analogies right there): the lack of collegiality, cooperation and most of all, sense of humor at this SE site." CreationDate="2020-08-18T13:48:39.840" UserId="5349" />
  <row Id="16842" PostId="6475" Score="0" Text="You genuflect to my answer after a number of paragraphs, then immediately contradict it again. What is special about arrays or lists? I have one of those *every time I go shopping*, and the vast majority of paper forms incorporate some array elements. A simple paper receipt will have multiple rows, with multiple fields, to capture a description, item price, quantity, and line total, each for many items. A bank statement is another example of a structured paper form with arrays. As for bank accounts, you are explaining nothing unless you explain double-entry accounting." CreationDate="2020-08-18T13:57:43.000" UserId="9075" />
  <row Id="16843" PostId="6475" Score="0" Text="@steve I guess you don't own a computer then. No need for one." CreationDate="2020-08-18T13:58:55.160" UserId="5349" />
  <row Id="16844" PostId="6475" Score="0" Text="And the question is not to what extent computers differ from paper, the question was how to explain the *coding* concept of a &quot;variable&quot;. The human perfectly well understands that with paper forms, they are the operator. They ought to understand that the computer will be the operator with code. The question is that if the computer is told to establish and use a &quot;variable&quot;, then what is the equivalent of that operation for a human operator using pen and paper? The answer is that it is the equivalent of drawing another box on the form, into which values can be written or retrieved from later." CreationDate="2020-08-18T14:03:25.870" UserId="9075" />
  <row Id="16845" PostId="6475" Score="1" Text="+1 from me. In 1989 [Dijkstra](https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html) said that computers are such a **radical novelty** that all attempts at metaphorizing from the existing store of human knowledge is bound to fail. Then he goes on to say that the solution is the metaphor: programming is math" CreationDate="2020-08-18T14:09:50.693" UserId="8837" />
  <row Id="16846" PostId="6475" Score="0" Text="*&quot;The question is,&quot; said Humpty Dumpty, &quot;which is to be master -- that's all.&quot;* You know the question, just as I did. When I was seven.... And no one I knew had seen a computer, and I wanted to know *How could such a thing possibly work?!?*" CreationDate="2020-08-18T14:30:54.440" UserId="5349" />
  <row Id="16847" PostId="6475" Score="0" Text="@rusi Thank you, but Dijkstra didn't go far enough, he just bunted. Buffy will tell you that programming is not math, it is something much deeper, related to *naming things*, which no other thing in the universe does, so far as we know. &quot;*Anyone who is not shocked by Quantum Mechanics has not understood it.*&quot; Equally so for computers, and there are billions of un-surprised people out there. And our job is to shock them. Piaget said, &quot;*Nothing new is learned until existing systems have failed to maintain equilibrium.*&quot; The quote of the 20th century. Let's get started!" CreationDate="2020-08-18T14:35:09.180" UserId="5349" />
  <row Id="16862" PostId="6475" Score="0" Text="@Rusi, that's an interesting view from Dijkstra - he appears to be talking in total ignorance of the large bureaucracies that grew up before the computer era. For example, the banks (who were one of the first frontiers for computerisation in the 1960s) already had complex and well-engineered systems of accountancy and administration, which were not &quot;analogue&quot; but were akin to &quot;pressing a typewriter key&quot; (as Dijkstra puts it). Concepts like flowcharts and similar predated computing. (1/2)" CreationDate="2020-08-19T13:13:03.603" UserId="9075" />
  <row Id="16863" PostId="6475" Score="0" Text="He goes on to say *&quot;the program is an abstract symbol manipulator, which can be turned into a concrete one by supplying a computer to it.&quot;*. The question then is, why does the computer have to be a machine, why can it not be a human? In fact &quot;computers&quot; were originally human, and they used paper to manipulate symbols haha! There's nothing conceptually radical about them at all - they are simply *fast* at doing what they do. (2/2)" CreationDate="2020-08-19T13:14:21.483" UserId="9075" />
  <row Id="16879" PostId="6477" Score="1" Text="Good idea, but as a non-native English speaker, even when I write a script or memorize everything, I still make silly pronunciation mistakes and sometimes get stuck in saying a word. Anyway, in the end, after many many rehearsals, I just recorded a single take presentation as you suggested, and yes it is not perfect but I guess I'm okay with that." CreationDate="2020-08-20T11:56:45.503" UserId="9335" />
  <row Id="16883" PostId="6477" Score="1" Text="Well done Ella! I don't try to memorize the script... I make sure the script is just underneath my webcam so it looks like I have an amazing memory :)" CreationDate="2020-08-21T00:44:56.383" UserId="9403" />
  <row Id="16891" PostId="6477" Score="0" Text="hahahaha nice :)" CreationDate="2020-08-23T12:37:05.570" UserId="9335" />
  <row Id="17059" PostId="6482" Score="0" Text="If you ever find out how to teach (the use of) git, then please consider adding an answer to https://cseducators.stackexchange.com/q/2897/204" CreationDate="2020-09-22T21:33:35.233" UserId="204" />
  <row Id="16890" PostId="6484" Score="1" Text="Thank you. I agree that Learn Git Branching is a great site. I was already planning to have students make use of it." CreationDate="2020-08-23T01:15:21.690" UserId="283" />
  <row Id="16897" PostId="6485" Score="1" Text="I've been thinking about this question myself, being in a similar position. I'll post an answer if I have any helpful thoughts, but so far I'm in the same place as you." CreationDate="2020-08-23T23:38:56.547" UserId="27" />
  <row Id="17047" PostId="6486" Score="2" Text="If the comments disagree with the code then they are both wrong. (quote from someone, but I don't remember who) Dijkstra-ish, anyway." CreationDate="2020-09-22T00:10:44.183" UserId="1293" />
  <row Id="17048" PostId="6486" Score="1" Text="@Buffy Then I'm lucky they agree!  Though my chosen example is a bad one, because my comment is adding information that would only be otherwise apparent within the following code block.  I will change it." CreationDate="2020-09-22T03:12:51.310" UserId="27" />
  <row Id="17049" PostId="6486" Score="1" Text="@Buffy It's cleaned up now, and makes me want to throw up just an eensy-weensy bit more than it did a few minutes ago.  Nice!" CreationDate="2020-09-22T03:14:16.253" UserId="27" />
  <row Id="16886" PostId="6487" Score="1" Text="Good references. I think though, that the problem of metaphors is that we think we can keep them. We can't. We shouldn't try. It is like a key that unlocks a door: after we are in, the key is useless. The door is now unlocked and we will never have to pass through it again. If we belabor the metaphor and cling to it, we are preventing the students from moving forward. Students have misconceptions because they have conceptions that they tried to take in from someone else's understanding. This will not work. Everyone is an agent and has to create their own understanding. We only point the way." CreationDate="2020-08-22T21:26:02.530" UserId="5349" />
  <row Id="16902" PostId="6487" Score="0" Text="@ScottRowe good point that metaphors eventually need to be tossed aside.  For the purposes of this question, I think the label metaphor more accurately represents how variables &quot;work&quot; and that would give it more longevity." CreationDate="2020-08-27T21:43:36.450" UserId="695" />
  <row Id="16915" PostId="6487" Score="0" Text="I suppose people can have varying opinions, but perhaps a more literal explanation of how computers work is better than a metaphor. It is a machine, like a car. Applying humanistic metaphors for all but the briefest introduction is bound to go wrong. I started a car with a pencil once, and a broomstick another time. It had nothing to do with whether the car wanted to start or not. It had to do with me understanding the cause of the fault, and how a ready at hand item could temporarily fix it. A society where people don't understand electricity, electronics and radio is doomed." CreationDate="2020-08-30T13:07:49.987" UserId="5349" />
  <row Id="16920" PostId="6492" Score="2" Text="Spreadsheets are the most used computer application in the world, last I heard. Certainly seems like an important 'megaphor' in computing." CreationDate="2020-08-31T10:12:42.253" UserId="5349" />
  <row Id="16906" PostId="6493" Score="1" Text="For emacsers : See [org-kanban](https://github.com/gizmomogwai/org-kanban) which has this [demo](https://asciinema.org/a/201532) Inspired by this [blog post](http://agilesoc.com/2011/08/08/emacs-org-mode-kanban-pomodoro-oh-my/). Disclaimer: I've used emacs for over 25 years. And org mode for 10-15. But kanban and above links I've no idea about. Youtube etc will give you a bunch of stuff if you search org mode and GTD (David Allen's book &quot;Getting things done&quot;)" CreationDate="2020-08-29T03:29:05.327" UserId="8837" />
  <row Id="16910" PostId="6494" Score="2" Text="I may well accept this answer, and I almost never believe in doing that. Wonderful!!" CreationDate="2020-08-30T02:56:09.720" UserId="27" />
  <row Id="16919" PostId="6494" Score="0" Text="It's worth pointing out Scrum as well, sometimes referred to as ScrumBan- I use a plugin for Chrome for this myself.  Trello also has some nice ideas on a teaching structure: https://trello.com/b/twkQ9PiL/brainstation-product-resources" CreationDate="2020-08-30T23:34:50.723" UserId="2706" />
  <row Id="16909" PostId="6495" Score="1" Text="Welcome to [cseducators.se] and I'm pleased to see a good question from a coder turned teacher. Refreshing. Anyway, a few points to help me understand the situation. 1) Is this something you do for pay, or volunteer? 2) Are the pupils graded, in their primary pursuit, based on what you teach them? 3) Are they graded by yourself with marks which have significance outside your mentoring? 4) Typically, do the pupils arrive with a goal, or objective, already established which you are to help them achieve?" CreationDate="2020-08-30T02:32:47.453" UserId="104" />
  <row Id="16911" PostId="6495" Score="2" Text="@GypsySpellweaver Hi, this is for pay, yes. I've had students in high school or college computer science classes - yes we were working on subjects they would be graded on. But more of my students are working independently - they just love to code and want to do it better. I don't grade them. The students in classes have specific topics and goals, but the ones who work independently want to be mentored in coding, just always trying to solve harder problems or work on bigger projects. (Those students are a joy.)" CreationDate="2020-08-30T04:16:32.067" UserId="9246" />
  <row Id="16921" PostId="6495" Score="1" Text="I have *zero* background in teaching, but can you find a problem where it's really hard to solve without using functions, and really easy with them? Same for classes. Then don't *require* them to use functions, just let them figure it out by themselves." CreationDate="2020-08-31T15:15:24.900" UserId="1275" />
  <row Id="16922" PostId="6495" Score="2" Text="And regarding the online judge: make it so if he fails 5 times, he fails." CreationDate="2020-08-31T15:16:27.463" UserId="1275" />
  <row Id="16923" PostId="6495" Score="1" Text="I say this because - as a professional programmer and SO user - I've found that a lot of people are just as stubborn about &quot;being clean&quot; as your guy is about not being clean! They will go through all sorts of weird contortions just to make the code look the way they think their professor would want. Like, they learn the lesson &quot;loops are bad&quot; and then start using Java streams for *literally everything*." CreationDate="2020-08-31T15:17:50.457" UserId="1275" />
  <row Id="16926" PostId="6495" Score="1" Text="Re, &quot;I finally said that consider it a limitation on my part.&quot; Wrong response IMO. If that's the only kind of code he ever learns to write, then it will limit _his_ ability to collaborate with _anybody._" CreationDate="2020-08-31T15:49:12.350" UserId="1269" />
  <row Id="16928" PostId="6495" Score="0" Text="Motivate why writing good code is a good idea.  For example, functions limit maintenance by requiring changes to code only in one place, in stead of in several ad hoc places." CreationDate="2020-08-31T16:53:07.780" UserId="5930" />
  <row Id="16942" PostId="6495" Score="1" Text="While coding competitions are fun, they are problematic as they have a very binary rating. Your solution either works or not. Once it works, you will probably never look at it again. Teaching coding with competitions is teaching with throwaway code and projects are small. There is no maintenance phase going on for years. You need to teach  this important distinction between competitions and lasting projects. Your student is simply reacting to the incentives he gets by creating a somehow working solution fast. Clean code focuses on everything that comes afterwards (maintenance phase)" CreationDate="2020-09-01T08:20:54.340" UserId="9449" />
  <row Id="16944" PostId="6495" Score="0" Text="@SolomonSlow While I agree with you that is was a little too &quot;soft&quot; a reply, I didn't want to leave him to go off on his own having remembered our interaction as something negative and critical. He was never going to accept my conditions for lessons anyway. I'm a believer that teachers don't need to be stern or critical - students achieve more, and are more likely to broaden their approach when they feel support. IMO anyway." CreationDate="2020-09-01T09:29:33.270" UserId="9246" />
  <row Id="16945" PostId="6495" Score="0" Text="@user253751 Yes, some people are stubborn about doing things in a longer or more complicated way, just as everyone is at least a little stubborn about something. Your example, though, represents a misunderstanding on their part about what &quot;clean&quot; means. It doesn't mean &quot;no loops&quot;." CreationDate="2020-09-01T09:31:47.703" UserId="9246" />
  <row Id="16946" PostId="6495" Score="0" Text="@composerMike I'm sure you know the type. Someone told them small functions are better than long ones so instead of a 100-line function they now have 200 1-line functions. Someone told them `map` and `filter` are good so now they use them everywhere they can (even when a loop would do perfectly well). This is not &quot;some people&quot;, it's actually pervasive." CreationDate="2020-09-01T10:16:56.993" UserId="1275" />
  <row Id="16947" PostId="6495" Score="1" Text="@JosephDoggie In order to motivate them that way, I think you have to present a problem where it's actually difficult to do it the non-function way. Otherwise it's just empty words. People learn by doing." CreationDate="2020-09-01T10:18:25.017" UserId="1275" />
  <row Id="18476" PostId="6495" Score="0" Text="I teach skating. Skating is not walking. It is not running. It is not moving around on the ice. It is skating. Prior &quot;their way&quot; &amp; &quot;the method most natural to them&quot; are not relevant. Learning that is part of learning." CreationDate="2021-12-09T03:34:22.587" UserId="2485" />
  <row Id="16912" PostId="6496" Score="4" Text="I got interested in USACO a couple years back, but I haven't participated in live competitions yet. So I tend to use these problems for me and students as a chance to develop clean technique. So what about this question: would this slow me down in a competition? Well, some aspects of clean technique take only a little extra typing - you don't need really long variable names, and writing a function in the first place is faster than refactoring it later - and theoretically a clean style would pay dividends in saving or eliminating debugging time" CreationDate="2020-08-30T04:22:52.097" UserId="9246" />
  <row Id="16914" PostId="6496" Score="3" Text="@composerMike Yeah, I agree. Once you have certain habits ingrained, they definitely help. But remember that you have 4 hours to get your problems done, and (for instance) in Java, they require the entire submission to be a single file with no packages, and they officially recommend not using python because python is slow. They are not interested at all in maintainable code! It's all about (1) speed, and (2) down-and-dirty solving the problem.  I've also seen kids get really caught up in USACO and feel like they are really coding and not just puzzle solving." CreationDate="2020-08-30T12:28:49.437" UserId="27" />
  <row Id="16924" PostId="6496" Score="4" Text="@composerMike: You'd be appalled by the number of questions over at StackOverflow where you have to wade through stuff like `#include&lt;bits/stdc++.h&gt;`, one- and two-letter variable names, and non-standard language &quot;features&quot; because no-one ever taught the kids otherwise..." CreationDate="2020-08-31T15:22:38.477" UserId="706" />
  <row Id="16966" PostId="6496" Score="2" Text="@composerMike I don't know about USACO, but I have participated in computing olympiads in my country and similar contests such as ACM team programming contests. At the highest level of competition, there is absolutely no space for &quot;clean coding&quot;. E.g., in team programming contests, there are three team members and one computer. The best teams work like this: each team member works independently on one problem with pen and paper. Once the complete program is written down, the team member is given access to the computer and types it in, compiles, and runs. If the program fails (either due to" CreationDate="2020-09-03T22:51:54.200" UserId="9467" />
  <row Id="16967" PostId="6496" Score="2" Text="compilation error, or due to failed cases), another team member gets access to the computer, and the first one, returns to the pen and paper to sort out what went wrong. There is no debugging, and no &quot;refactoring&quot;. The code has to do exactly what it is meant to do and has no extra elements that are not necesssary." CreationDate="2020-09-03T22:54:00.757" UserId="9467" />
  <row Id="16968" PostId="6496" Score="2" Text="Only sometimes, when the computer is not currently occupied by another team member, one can do some basic fixes or debugging on the machine. Otherwise, not to waste precious time everything is done on pen and paper." CreationDate="2020-09-03T22:57:35.300" UserId="9467" />
  <row Id="16969" PostId="6496" Score="1" Text="Naturally, one could employ &quot;clean coding&quot; on pen and paper, but using very long names and elaborate code with a lot of abstraction and bloat is out of question. Additionally, people use macros and typedefs (at least in C/C++) to shorten most used constructs. E.g. `VI` for `vector&lt;int&gt;`, `ULL` for `unsigned long long`, `REP(i,n)` for `for (int i = 0; i &lt; n; i++)` and so on." CreationDate="2020-09-03T23:01:21.793" UserId="9467" />
  <row Id="16970" PostId="6496" Score="1" Text="@ciamej You should turn that into an answer.  That's quite valuable information for OP's question, and shouldn't be left in comments that will eventually get cleaned out." CreationDate="2020-09-04T01:09:40.083" UserId="27" />
  <row Id="16973" PostId="6496" Score="1" Text="@ciamej Do we have same understanding of clean code? I call it &quot;clean thinking.&quot; As example: I'm teaching turtle graphics to an 8th grader. I asked her to draw several shapes on the same screen - I had her put each shape in a function and then call several functions. She saw the improvement in organization. But trouble  getting the shapes to line up- she began by tweaking functions to leave the turtle in the right place for the next shape. Then something new: she designed every function to leave the turtle in the same place it started and move between function calls. She understood the good!" CreationDate="2020-09-06T05:11:25.930" UserId="9246" />
  <row Id="17180" PostId="6496" Score="1" Text="@composerMike I appreciate clean coding and thinking and I think you're really doing great job teaching the kids all this stuff. Concerning your 'special' pupil who is only interested in computing contests: I think 'clean thinking' (but not the classic 'clean coding') is appropriate for him, but even taken to a higher degree. He actually needs to learn 'algorithmical thinking'. Teach him how to design algorithms, how to analyze them, teach him the math behind them. Let him notice that some work is repeated in a given algorithm, let him devise a better, faster one (asymptotically), and so on..." CreationDate="2020-10-18T13:03:14.723" UserId="9467" />
  <row Id="17181" PostId="6496" Score="1" Text="I think pseudocode and math would be most appropriate for teaching this constest-minded student. Implementing the program in Java has less to do with clear thinking, and there is already no time during contest for clear coding." CreationDate="2020-10-18T13:05:31.820" UserId="9467" />
  <row Id="17182" PostId="6496" Score="1" Text="In terms of actual coding in Java he just needs to learn all the tricks and stuff to do it efficiently and avoid all the pitfalls that easily lead to bugs. E.g. in c/c++ that would be avoiding unsigned integer types in loop control expressions." CreationDate="2020-10-18T13:07:52.580" UserId="9467" />
  <row Id="17183" PostId="6496" Score="0" Text="@ciamej Despite contests having no extra time, I think it's worth practicing clean thinking - just like any skill, you practice it slowly so that you can get faster at it when it counts." CreationDate="2020-10-19T15:03:36.183" UserId="9246" />
  <row Id="16943" PostId="6500" Score="0" Text="Great suggestion about recursion. I had that thought when I was doing a USACO problem myself that needed recursion - that's one technique he won't be able to solve without changing his approach." CreationDate="2020-09-01T08:21:07.520" UserId="9246" />
  <row Id="16950" PostId="6500" Score="0" Text="Can't just about any solution using recursion be recast into an iterative one using an explicit stack or similar structure?  (I'm not saying that would usually be an improvement, of course…)" CreationDate="2020-09-01T14:30:38.770" UserId="9454" />
  <row Id="16957" PostId="6500" Score="0" Text="Recursion might be a little advanced. Plus, you _have_ to use a function for it. Isn't the point of clean coding to _choose_ to write more than you technically must (for readability)?" CreationDate="2020-09-01T19:20:38.697" UserId="8773" />
  <row Id="16958" PostId="6500" Score="0" Text="@gidds: A student who does not understand *functions* is never going to be able to effectively use `java.collections.Stack` (or whatever class) unless they are copying and pasting things from Google without properly understanding what they are actually doing. My understanding is, you can't do that in a competition." CreationDate="2020-09-02T00:07:05.777" UserId="1896" />
  <row Id="16959" PostId="6500" Score="0" Text="@Kevin Using an existing function is easier than writing one. Even more difficult is choosing to pull some code into a new function for readability and testing." CreationDate="2020-09-02T03:29:55.880" UserId="8773" />
  <row Id="16930" PostId="6501" Score="0" Text="We were planning on having physical, paper boards in the room along with post-it notes, but then we were shifted over to full virtual again.  Right now, at least for just that part, Trello seems less cumbersome than a google doc - creating and moving cards around is super streamlined.  Most of the reason I'm asking this question is because I'm looking out for beginner mistakes that I am unaware of, and I want my students to hit the ground running once their projects begin in October or November. (continued below)" CreationDate="2020-08-31T17:15:40.927" UserId="27" />
  <row Id="16931" PostId="6501" Score="0" Text="(continued)   If it turns out to really be as simple as it seems, then there's little cause to do any in-depth teaching.  I just don't want my students to suffer if I've missed something significant :)" CreationDate="2020-08-31T17:16:18.937" UserId="27" />
  <row Id="16938" PostId="6501" Score="0" Text="I have used a google doc as a virtual shared white board. But if the tool you are looking at simulates cards, that can be moved and written on. Then I would expect it to be easier. The essential bit is keep it simple: avoid not value added." CreationDate="2020-09-01T06:42:49.837" UserId="204" />
  <row Id="16941" PostId="6502" Score="1" Text="These are good comments. I set him loose. Yes, he came because he wanted help, but he rejected every suggestion I made, and even spoke of our different approaches as if they were mere differences in opinion (as opposed to 40 years of experience on one side. I do think there's some validity to the idea of a &quot;most natural approach&quot; - in your piano example, that would be letting the student pick the style of music they want. I also think that there's always a bridge from where they're at to someplace better - it might help to let them cross that bridge at their own pace." CreationDate="2020-09-01T08:19:21.243" UserId="9246" />
  <row Id="16937" PostId="6503" Score="0" Text="While I agree in general. It turns out that there are many good examples. And that it is not counting, it is measuring (see other answers). I think I will use your last paragraph as advice for a lot of thinks. I have sometimes just shown students that what they think is normal is not the only way (e.g. base 12/24/60 clocks, so why not binary)." CreationDate="2020-09-01T06:39:23.443" UserId="204" />
  <row Id="16940" PostId="6506" Score="0" Text="Good comments. I want to say, though, about variable names, that I don't think explicit names are the most important part of clean coding. If I have an object of an obvious class `Car` and I create an ArrayList of Car, I don't need to name that `listOfCar`. In a small context, I can just name it `l` with no loss of clarity. In fact I find that short names increase the readability of the code. Clean code has more to do with how it's structured." CreationDate="2020-09-01T08:14:47.377" UserId="9246" />
  <row Id="16954" PostId="6506" Score="0" Text="This x100. You're just telling them the hard way. Why would they voluntarily do things the hard way? Well, they wouldn't. Wait until it's the easy way, then tell them. Or choose a problem where it's the easy way." CreationDate="2020-09-01T18:44:37.303" UserId="1275" />
  <row Id="16955" PostId="6506" Score="0" Text="@composerMike I left out my opinions about naming conventions -- I'll add them" CreationDate="2020-09-01T18:54:38.200" UserId="8773" />
  <row Id="16956" PostId="6506" Score="0" Text="@user253751 Hmmm ... my short description has problems and solutions -- not showing a feature that solves a problem they haven't had yet. I think easy-way/hard-way might be a neater way to express the same idea." CreationDate="2020-09-01T19:11:51.230" UserId="8773" />
  <row Id="16962" PostId="6507" Score="0" Text="Talk to the profs." CreationDate="2020-09-02T20:00:35.540" UserId="2485" />
  <row Id="16964" PostId="6507" Score="0" Text="@philipxy - They don't respond" CreationDate="2020-09-03T00:19:20.633" UserId="9443" />
  <row Id="16993" PostId="6507" Score="0" Text="Learn game theory first. Like economic game theory, Nash equilibria, etc." CreationDate="2020-09-09T10:04:39.160" UserId="9478" />
  <row Id="17746" PostId="6507" Score="1" Text="You can find some lecture notes here: https://ml2.inf.ethz.ch/courses/agt/ I took the course and if I remember correctly there weren't too many prerequisites, although I did have some familiarity with game theory. The lecture notes are a bit sparse, so I recommend using them as a study guide and looking for complementary material on the same topics as you go along." CreationDate="2021-02-25T20:58:25.770" UserId="10159" />
  <row Id="17952" PostId="6509" Score="0" Text="I would say that a variable is a location in memory that holds a value. The name is just a convenience for humans. Lightswitches turn lights on an off, whether they have labels or not. But just writing a label under a lightswitch doesn't do anything. I had students with that misconception, they thought that the name was wired in to the behavior of the language. Names make our job easier, they are no help to the computer at all. We have to cooperate to get the solution. It is like hiring a translator." CreationDate="2021-05-02T02:00:39.133" UserId="5349" />
  <row Id="16939" PostId="6510" Score="1" Text="The use case we had for classes was to make a list of objects and sort them by one of the object's fields. He had written his own sort algorithm, inside a for loop no less adding complexity - instead of just using Collections.sort()" CreationDate="2020-09-01T08:11:59.823" UserId="9246" />
  <row Id="16948" PostId="6510" Score="0" Text="@composerMike It's good if he understands what a sorting algorithm actually does, not just being able to use Collections.sort() , though it is really odd not not use it if it is available. If he is into math it might be a good idea to tell him about the different kinds of sorting algorithms, and challenge him to create an efficient one, that he could use if future, like the Collections.sort function. Might be fun for him." CreationDate="2020-09-01T10:41:53.437" UserId="9447" />
  <row Id="16949" PostId="6510" Score="0" Text="@composerMike when you said he didn't want to use classes I thought he just didn't like the idea of not putting all of the code into main() and having to call it, which is a sentiment I get, if the task is sufficiently simple." CreationDate="2020-09-01T10:44:01.103" UserId="9447" />
  <row Id="16972" PostId="6510" Score="0" Text="His data was a list of groups of three integers. He had three `ArrayList&lt;Integer&gt;` and wrote an algorithm to sort by one of the integers, requiring him to move the other two along with them. What he could have done was put the three integers in a class `C` and implement `Comparable`, then use `Collections.sort` on `ArrayList&lt;C&gt;`" CreationDate="2020-09-04T23:53:05.220" UserId="9246" />
  <row Id="16951" PostId="6511" Score="0" Text="I should have said this is graduate level for a professional masters in computer engineering.  However the educational background of the students is quite varied and some are, quite frankly, not competent at programming when they arrive.  Hence this fairly low-level course." CreationDate="2020-09-01T15:31:03.610" UserId="1074" />
  <row Id="16952" PostId="6511" Score="0" Text="Do you need to project &quot;seriousness&quot; or can it also be a bit of fun, though excellent, and complete?" CreationDate="2020-09-01T15:48:05.100" UserId="1293" />
  <row Id="16953" PostId="6511" Score="1" Text="@Buffy I am not against fun.  I do find that some books try too hard to be fun and end up with silly examples that don't give insight into how an idea might be applied in situations that are likely to come up in the real world." CreationDate="2020-09-01T17:16:55.957" UserId="1074" />
  <row Id="16960" PostId="6511" Score="0" Text="For all of the years I've taught OO, I've never used a textbook as a primary resource.  I think *Liang* has a pretty good one, but I am locked out of my institution (where my books are), so I can't check whether it has good (any?) exercises.  Hence, my hesitation to create an answer." CreationDate="2020-09-02T15:00:42.370" UserId="27" />
  <row Id="16961" PostId="6511" Score="0" Text="@BenI. Thanks.  I guess that's Introduction to Java Programming and Data Structures by Y. Daniel Liang." CreationDate="2020-09-02T15:46:27.437" UserId="1074" />
  <row Id="16965" PostId="6516" Score="1" Text="Hello, and welcome to [cseducators.se]! I just removed the bit at the end.  Please note the most recent incarnation of the [Be Nice](https://cseducators.stackexchange.com/conduct) policy." CreationDate="2020-09-03T01:14:35.507" UserId="27" />
  <row Id="16971" PostId="6516" Score="0" Text="Thanks for the correction, failed to notice the ambiguity." CreationDate="2020-09-04T11:17:33.307" UserId="9464" />
  <row Id="16974" PostId="6519" Score="0" Text="Hi Grzegorz, what language are you using?" CreationDate="2020-09-06T22:29:29.780" UserId="2706" />
  <row Id="16980" PostId="6519" Score="0" Text="Good point, question is about imperative programming languages. Student has to learn C++, PHP, Java." CreationDate="2020-09-07T19:50:35.437" UserId="2799" />
  <row Id="17273" PostId="6519" Score="0" Text="The lack of ability to visualize things internally is actually a condition that affects ~1% of the population - it's called Aphantasia, and it's real. I don't see this impacting programming, though." CreationDate="2020-11-19T20:23:13.980" UserId="8728" />
  <row Id="16978" PostId="6520" Score="0" Text="Thank you! Yes, indeed it's helpful for such person. Still does not help in imagining program before writing it or talking about program together." CreationDate="2020-09-07T16:25:49.113" UserId="2799" />
  <row Id="16991" PostId="6520" Score="0" Text="I've added the flowchart element. Regardless of their preferred thinking mode, programming is primarily about logical thought- structuring a problem into a set of steps to find a solution. Some creativity is an advantage as there are always many solutions that are possible, but these can vary in efficiency and effectiveness.  I don't know if UML Use Case diagrams are part of your course but these are more likely appropriate for an OOP approach.  I'm not sure if there are many other options available in terms of structuring and visualising :)" CreationDate="2020-09-08T22:27:41.157" UserId="2706" />
  <row Id="16977" PostId="6521" Score="0" Text="TL;DR- shapes does not work here + it's also about communication between us. ||| Verbose: Thank you. In general input is interesting. However, As I wrote in question, person does not have visual/photographic nor spacial imagination. Therefore I need different abstractions." CreationDate="2020-09-07T16:24:29.780" UserId="2799" />
  <row Id="16981" PostId="6521" Score="1" Text="@GrzegorzWierzowiecki I guess what I'm suggesting is that that may be the student's perception, but that it is almost certainly false, and the evidence is that they can navigate through doors, open boxes, discern different units of currency, distinguish people's faces from large rivers, etc, etc, etc.  I am also quite sure that they can *draw* and *describe* something like a line, something resembling a circle, a rectangle, an arrow, and something resembling the letter Y, which are all of the shapes that you need in order to visualize the inner workings of code." CreationDate="2020-09-07T20:47:08.503" UserId="27" />
  <row Id="16982" PostId="6521" Score="1" Text="@GrzegorzWierzowiecki (cont) I suspect this is a combination of learned helplessness and misinformation about how the brain works and how we navigate our way through the world.  (Now, if the student has *true* shape blindness, of the sort that Oliver Sacks would be interested in, then you have something much more interesting on your hands, and I would bet that they can't code at all, and would have great, great difficulty reading text.)" CreationDate="2020-09-07T20:49:15.623" UserId="27" />
  <row Id="16976" PostId="6523" Score="0" Text="+1 for using the MIT integrity policy; it's the best I've seen. Also for recognizing that some helping among friends is productive and contributes to learning.  Also, welcome to [cseducators.se]!" CreationDate="2020-09-07T01:57:52.307" UserId="27" />
  <row Id="16979" PostId="6523" Score="1" Text="If a student uses and gives credit for other code, I tell them they also assume responsibility for the correctness of the code. They can not come back and say &quot;But the bug is in the code I got from the web, not in my code!&quot;." CreationDate="2020-09-07T18:40:44.260" UserId="4301" />
  <row Id="16996" PostId="6529" Score="0" Text="StoogeSort is a fun one to write a recurrence for  (using T(2n/3) ) and to get a runtime for, but it's not an example of a useful &quot;real word&quot; algorithm" CreationDate="2020-09-10T23:37:46.577" UserId="9478" />
  <row Id="17066" PostId="6529" Score="0" Text="I accepted an answer, but I'd still love to hear other examples if anyone has them." CreationDate="2020-09-23T21:16:38.003" UserId="5211" />
  <row Id="16997" PostId="6530" Score="2" Text="This is such a central question." CreationDate="2020-09-11T02:26:39.590" UserId="27" />
  <row Id="17003" PostId="6530" Score="1" Text="You can use unsee.cc - But people will take screenshots." CreationDate="2020-09-11T09:01:21.453" UserId="4615" />
  <row Id="17010" PostId="6530" Score="10" Text="If people can in any way see the solution, they can reproduce it in whatever form they want. You are looking for the holy grail of DRM, which nobody has found thus far." CreationDate="2020-09-11T23:14:19.287" UserId="1086" />
  <row Id="17011" PostId="6530" Score="0" Text="@Polygnome, I can understand where you would get that impression, but no, I am not.  See [my comments here](https://cseducators.stackexchange.com/questions/6530/how-to-share-solutions-in-a-way-they-wont-get-uploaded?noredirect=1#comment17000_6534)." CreationDate="2020-09-11T23:16:50.313" UserId="1106" />
  <row Id="17016" PostId="6530" Score="0" Text="Can you add an example of a sample answer that can be copied verbatim without being obvious cheating? Are these answers short enough to make that happen by chance?" CreationDate="2020-09-13T08:20:20.003" UserId="8723" />
  <row Id="17037" PostId="6530" Score="0" Text="This is the best that I can think of https://en.wikipedia.org/wiki/Lenticular_printing" CreationDate="2020-09-19T22:00:45.803" UserId="204" />
  <row Id="17041" PostId="6530" Score="1" Text="@Polygnome not only is it not hound, we have found a mathematical prof of its non existence. I teach about these ideas in my e-safety class. If you can see it then you can copy it. Any attempt to make it harder to copy will come fowl of anti-discrimination / accessibility laws." CreationDate="2020-09-19T22:15:42.557" UserId="204" />
  <row Id="16998" PostId="6533" Score="10" Text="You can take a screenshot to recover a raster image, and OCR it.  This is not much better than just posting the code as a raster image.  This program may be valuable against web scraping; it will likely defeat web scraping web crawlers that can steal text from images, but don't contain full blown HTML rendering logic." CreationDate="2020-09-11T08:05:22.243" UserId="1748" />
  <row Id="16999" PostId="6533" Score="6" Text="`If anyone is interested, Jack has given me permission to post it and I can provide the link to download the script and give it a try.` Yes, please!" CreationDate="2020-09-11T08:27:27.293" UserId="2021" />
  <row Id="17040" PostId="6533" Score="2" Text="Then you get a law suet from the blind kid, because she can not read it." CreationDate="2020-09-19T22:07:24.883" UserId="204" />
  <row Id="17044" PostId="6533" Score="0" Text="Thanks a lot for the script! The obfuscated result is hilarious." CreationDate="2020-09-21T06:47:59.030" UserId="2021" />
  <row Id="17000" PostId="6534" Score="1" Text="I appreciate your taking the time to write an answer, but I don't think this responds to the question.  As I already wrote in my question, &quot;I know I'm not going to make it impossible -- if nothing else, students can take a sequence of screenshots -- but if I make it tedious enough, then I suspect that would help.&quot;  I'm not expecting that I will be able to stop students from doing it.    (continued)" CreationDate="2020-09-11T08:40:45.610" UserId="1106" />
  <row Id="17001" PostId="6534" Score="1" Text="I'm asking if there is a way that will raise the bar... for instance, so that students are more likely to upload something else, when CourseHero prompts them to [upload 10 documents to unlock their account](https://support.coursehero.com/hc/en-us/articles/205142820-Uploads-for-Unlocks).  (What a  business model.)  So what I'm asking for is something less than what you seem to have assumed.  Perhaps it is still impossible, but I don't think your arguments in this answer demonstrate that." CreationDate="2020-09-11T08:40:59.090" UserId="1106" />
  <row Id="17002" PostId="6534" Score="1" Text="I'm [familiar with these type of arguments](https://security.stackexchange.com/a/54464/971) regarding the problems with DRM but I don't think they answer the question that I am asking." CreationDate="2020-09-11T08:44:32.453" UserId="1106" />
  <row Id="17004" PostId="6534" Score="5" Text="@D.W. I´m sorry that you don´t want to hear it, but anything you share online is public. Especially when we are talking about Cs-Students here. Your question is like &quot;How do I stop the sun from shining&quot; so any answer will be unsatisfactory." CreationDate="2020-09-11T09:11:05.180" UserId="4615" />
  <row Id="17005" PostId="6534" Score="5" Text="I specifically answered in this way to illustrate that no matter how high you raise the bar, it can be trivially circumvented.&#xA;&#xA;&#xA;Coursehero's business model etc is just a red herring, students will share among themselves through shared USB sticks and dropbox and the likes anyway, trying to prevent this is impossible." CreationDate="2020-09-11T09:11:09.607" UserId="9494" />
  <row Id="17009" PostId="6534" Score="1" Text="I already understand that point -- you're preaching to the choir.  I already understand that it is impossible to prevent it so I don't need an explanation of that.  This answer shows that any scheme can be circumvented with some effort, but does not address whether it is possible to increase the effort required compared to doing nothing.  If there was a solution where the best students could do is take screenshots, and if the solution was not a major imposition on ordinary use, then I would consider that progress." CreationDate="2020-09-11T16:13:00.750" UserId="1106" />
  <row Id="17015" PostId="6536" Score="5" Text="Teaching students that &quot;low-level code formatting doesn't matter&quot; seems very negative. C is hard enough to read, without littering the code with gratuitous variations like `char* res` and `char *res`.." CreationDate="2020-09-12T14:37:09.033" UserId="1352" />
  <row Id="17017" PostId="6539" Score="1" Text="Why would a teacher want to help students get into a cheating site?" CreationDate="2020-09-13T14:29:31.987" UserId="27" />
  <row Id="17027" PostId="6541" Score="1" Text="Agreed. Traditional mathematics tends to conflate assignment with variable declaration (which also tends to follow a pattern of so-called &quot;static single assignment&quot;), and also to use the equals symbol to assert an equivalence. Meanwhile, on the computer science side, variables often are assigned separately from their declaration, and may be reassigned multiple times. To confound things further, the equals symbol is often used to test for equality, as well as to perform assignment, and the algebraic properties (such as commutativity) of each use are not the same. (1/2)" CreationDate="2020-09-15T19:01:59.370" UserId="9075" />
  <row Id="17028" PostId="6541" Score="0" Text="I would refer to these two operations as the `CopyFrom` and the `SameAs` operators. A further interesting property of the `CopyFrom` operator, is that the left operand cannot be substituted with its value - rather, it represents the *target* of the value on the right, in a copying operation. Typically, this means that the *address* of the variable on the left is *implicitly* taken and then passed as the left operand value, whilst the variable or expression on the right is evaluated as normal. This is all utterly alien to traditional mathematics. (2/2)." CreationDate="2020-09-15T19:12:19.620" UserId="9075" />
  <row Id="18221" PostId="6541" Score="1" Text="“Memory cells” is just (one) implementation. However, we are discussing teaching. Teaching research has shown that this model in not the best model for teaching. Outside of teaching, research has show that it is not the best model. It is what we do in assembler/machine-code, but we use compilers to abstract away from this miss, and toward the human." CreationDate="2021-08-31T07:37:19.463" UserId="204" />
  <row Id="18228" PostId="6541" Score="0" Text="@ctrl-alt-delor If we are abstracting, shouldn't we be very sure we understand the concrete reality of the system? Is this why we teach arithmetic first, then algebra, then geometry and graphs (functions) then calculus (applications)? Does anyone suggest just starting with calculus? I would like to see the teaching research that you refer to." CreationDate="2021-09-02T01:17:19.730" UserId="5349" />
  <row Id="18232" PostId="6541" Score="1" Text="@ScottRowe In Computer Science teaching, abstraction is often confused. Both Computer Science and teaching use the word abstraction. However, They are different. That is, they abstract different things. In teaching, we avoid abstracting away from the concrete: what is already known. Keep it human centered. In Computer Science, we abstract away from the hardware, **toward the human**. So an increase in abstraction in one is a decrease in abstraction in the other." CreationDate="2021-09-02T05:38:42.757" UserId="204" />
  <row Id="17018" PostId="6542" Score="2" Text="Welcome to [cseducators.se]. Your problem is probably more common than you know. While motivation is also a common problem in the education arena, your question doesn't seem to be _about_ education in CS, which is the topic for this site. I'm not sure there is a good place, directly, for this question within the Stack Exchange network of sites. Perhaps, without any knowledge on my part to support it, [workplace.se] might be helpful. I do know that self-interest will be a key element, and a vision and support from the C-level is mandatory for success." CreationDate="2020-09-14T03:15:24.990" UserId="104" />
  <row Id="17019" PostId="6542" Score="1" Text="`$motivated = ($newWork &lt; $oldWork &amp;&amp; $newPay == $oldPay || $newWork == $oldWork &amp;&amp; $newPay &gt; $oldPay);` and `$inspired = ($newWork &lt; $oldWork &amp;&amp; $newPay &gt; $oldPay);`" CreationDate="2020-09-14T03:15:45.030" UserId="104" />
  <row Id="17020" PostId="6542" Score="0" Text="I suspected it might be far fetched for this site, thanks for the helpful words anyway." CreationDate="2020-09-14T05:56:26.747" UserId="9511" />
  <row Id="17021" PostId="6542" Score="0" Text="You have the rep for it, so I'd suggest going to the chat room for [workplace.se] and checking on your question for their site. Maybe not as written, but it probably could be edited enough to work. They've got, collectively, centuries of experience dealing with workplace issues, so they might have a way to find the solution. Luck." CreationDate="2020-09-14T09:27:50.297" UserId="104" />
  <row Id="17022" PostId="6542" Score="0" Text="I'm less concerned that this is off-topic since motivation is central to education, and you are explicitly asking about motivating someone to learn something. That seems topical to me.  You might still have better luck at The Workplace.  If you do post there, you should also delete here (as per stackexchange rules)" CreationDate="2020-09-14T11:06:45.967" UserId="27" />
  <row Id="17029" PostId="6543" Score="0" Text="Unless your students are already familiar with C/C++, I strongly recommend Python. C++ has too many &quot;gotchas&quot; for early learners." CreationDate="2020-09-15T20:36:00.663" UserId="1293" />
  <row Id="17030" PostId="6543" Score="0" Text="I have three students who can handle C++. They have been with me for several years and we've worked through several languages, including Java, Python, TypeScript, and Elm (even Haskell with one student). and bunches of Euler problems. But I've noticed that they really fall apart when asked to do anything big. I'd like one project template I can use with all three of them and any of my students in the future who reach this level." CreationDate="2020-09-16T04:08:15.567" UserId="9246" />
  <row Id="17033" PostId="6543" Score="1" Text="I worry that you are deceiving yourself about their knowledge. &quot;Worked through&quot; several languages can mean a lot of things. One can have a pretty superficial (syntactic) knowledge of several languages without understanding how they really work or how to do things effectively with them. Perhaps your focus is too shallow." CreationDate="2020-09-16T12:20:23.937" UserId="1293" />
  <row Id="17349" PostId="6543" Score="1" Text="@Buffy You could be right. I am the first one to admit, though, as you can in my very question, that they don't have real-world project knowledge. Since writing this I've tutored several college students who are in interesting classes and I've seen how they are assigned complex programs with automatic graders. It makes me think that a college-level course on Coursera or Edx with an automatic grader would be an efficient way of teaching them and they would get a certificate to boot. Might help a college application." CreationDate="2020-12-01T01:07:22.727" UserId="9246" />
  <row Id="17350" PostId="6543" Score="0" Text="Actually, no, not at all. It wouldn't be an efficient way to &quot;teach them.&quot; It would only be an efficient way to &quot;cover/deliver material&quot;. It would be a good way to delude yourself into thinking you were teaching. Put the focus on learning, not on delivering material to the masses." CreationDate="2020-12-01T01:10:15.030" UserId="1293" />
  <row Id="17351" PostId="6543" Score="0" Text="I suspect you have a problem with academia in general." CreationDate="2020-12-01T01:56:23.250" UserId="9246" />
  <row Id="17025" PostId="6544" Score="0" Text="I see your point about seeing the benefits as necessary. Solving short algorithmic challenges like Euler doesn't directly teach clean code, but perhaps I could have them look at their Euler solutions from 6 months ago. That's a  great idea to look at past code." CreationDate="2020-09-15T10:55:44.500" UserId="9246" />
  <row Id="17024" PostId="6545" Score="0" Text="Welcome to CSEducators!!" CreationDate="2020-09-15T10:33:24.200" UserId="27" />
  <row Id="17034" PostId="6547" Score="0" Text="Not a duplicate, but your question reminds me of [this question](https://cseducators.stackexchange.com/questions/3881/is-there-some-meaningful-percentage-of-students-who-cant-learn-to-program)." CreationDate="2020-09-17T11:31:17.400" UserId="27" />
  <row Id="17035" PostId="6547" Score="1" Text="We had a guy just like this. Tried super hard, but just could not recall stuff. Turned out he had gotten part of his brain removed (labotomy). In the end we had to let him go." CreationDate="2020-09-18T08:02:32.923" UserId="9527" />
  <row Id="17045" PostId="6547" Score="5" Text="Not everybody is talented equally. Maybe he'll never become a top software engineer, but is an outstanding electronics hardware expert. So, at some time, he, you and the company should decide if and how to go on." CreationDate="2020-09-21T12:24:27.347" UserId="3966" />
  <row Id="17046" PostId="6547" Score="0" Text="How relevant are the two topics you mentioned (vector copying and hill climbing) to their jobs' everyday tasks?" CreationDate="2020-09-21T12:29:11.343" UserId="3966" />
  <row Id="17050" PostId="6547" Score="0" Text="@RalfKleberhoff STL (at least `vector` and `array`) are directly related to their everyday tasks since they are used in the company projects (it is an automotive company). One of the things that prompted this program was that they were constantly needed but not many of the team were C++ people, but rather C people." CreationDate="2020-09-22T05:54:01.520" UserId="9524" />
  <row Id="17051" PostId="6547" Score="0" Text="@RalfKleberhoff And I realize nobody is completely equal, you're 100% right. The requirement is not &quot;have them be able to write a MSc project in C++ by the end of the year&quot; but rather &quot;know basic OOP, inheritance, etc. and some good practices, also some STL since there were times when people were stuck on their tasks because of no OOP/STL knowledge&quot;. So no high-level stuff, but rather pretty simple stuff." CreationDate="2020-09-22T05:59:56.333" UserId="9524" />
  <row Id="17067" PostId="6547" Score="1" Text="It sounds like you are doing very well at teaching, keep up the great work! Yes, I have seen students who reached a high-water mark early on and were never able to move past it, despite two instructors pouring out great effort. The interesting thing was that in one or two cases, these students did as you said: repeatedly assert that they have finally got it. It started to seem a bit like H.M., and we had to say that we felt it was not a good use of their time to stay in the program of study (a vocational training program). I was a T.A. for a Basic course long ago and saw something similar." CreationDate="2020-09-23T23:59:01.180" UserId="5349" />
  <row Id="17673" PostId="6547" Score="0" Text="I feel like the bit about the &quot;People went from variable names like a, b, ok, x and thousands of lines of copy-pasted code in main()&quot; being copy-pasted in there twice is confusing? Maybe remove one of those?" CreationDate="2021-02-07T08:47:04.917" UserId="8137" />
  <row Id="21651" PostId="6547" Score="2" Text="The example you give with `vector&lt;int&gt; copy = my_vec;` vs. `for (int i = 0; i &lt; my_vec.size(); i++) copy.push_back(my_vec[i]);` makes it look like your colleague has a good understanding of how memory works under things, but only a vague knowledge of how `vector` works, and so the colleague is uncomfortable with `vector&lt;int&gt; copy = my_vec;` because they're not sure whether this makes a copy, or not. Imagine if you had a `int[]` instead of a `vector&lt;int&gt;`: then your colleague would be right. They don't trust the `vector`, so they're doing it in a way that they can trust." CreationDate="2024-02-03T07:54:54.337" UserId="10968" />
  <row Id="17055" PostId="6548" Score="2" Text="Communication skills are invaluable, but I've never understood the value of &quot;pseudocode&quot;. In practice, you have to know a programming language to fathom it at all, and it's almost invariably some awkward pidgin of an existing language plus English comments, just vaguer but certainly not &quot;higher level&quot;." CreationDate="2020-09-22T10:57:32.033" UserId="9075" />
  <row Id="17063" PostId="6548" Score="0" Text="Pseudo-code may sometimes be useless, but it offers an *opportunity* to work with abstraction and cognitive chunking -- https://en.wikipedia.org/wiki/Chunking_(psychology) -- that is what I mean by higher level and that's what I aim for my students to understand." CreationDate="2020-09-23T19:46:53.233" UserId="9246" />
  <row Id="17064" PostId="6548" Score="0" Text="I'd like to see more evidence of the link between pseudocode and &quot;chunking&quot;. For example, you ask for &quot;loop over possible test values (i)&quot;, well isn't that just called a &quot;for each&quot; or &quot;for all&quot; loop? The problem is that you have to understand a real programming language to understand what a &quot;for each&quot; loop is. You also have to understand a programming language to even understand the tenets of block structures (like the nested loops you refer to). This approach of using pseudocode (which lacks the specification and rigour of real code) simply doesn't smell right to me at all." CreationDate="2020-09-23T20:35:23.027" UserId="9075" />
  <row Id="17065" PostId="6548" Score="0" Text="I never said you don't have to understand a real programming language. Pseudo-code comes after concrete experience. The example here is a minor abstraction (doing away with the need to think about limits) but it's only a tiny beginning of what's possible. I value abstraction and chunking in all of their applications - which apply to any higher-level design of code, as well as writing, composing music, playing chess, etc." CreationDate="2020-09-23T21:08:50.210" UserId="9246" />
  <row Id="17068" PostId="6548" Score="1" Text="I wonder whether your students wouldn't ask questions like the following. Firstly, what exactly are the formal features of this &quot;pseudocode&quot;? Is it block structures (and indenting or so-called 'horizontal layout' techniques) with the control statements (and the kind of block) stated freeform in English? A language must be shared - pidgins are less expressive, less widely spoken, and more ambiguous than established languages they are formed from. It's possible your students lack confidence in the usefulness of the pidgin, or lack a clear understanding of the concepts it employs. (1/2)" CreationDate="2020-09-24T11:16:04.270" UserId="9075" />
  <row Id="17069" PostId="6548" Score="1" Text="Secondly, what exactly does &quot;higher level&quot; mean? Does it mean stating complex operations in fewer English words? If so, do you need to build their English vocabulary and communication skills? Are you providing a proper foundational understanding of these &quot;high level&quot; things (as opposed to skirting the specifics, on which an understanding would rest)? And again, do your students have confidence that this vocabulary is industry standard or widely spoken, or that (if you have devised it yourself) that it is credible and sufficiently systematic to be useful and worth spending time to learn? (2/2)" CreationDate="2020-09-24T11:24:38.483" UserId="9075" />
  <row Id="17071" PostId="6548" Score="0" Text="These are good questions. I think I'll work out some of the answers with experience teaching in this way. Right now I don't give them assignments to write pseudo-code on their own - it's a facilitated experience and I give them a rationale for every decision I make, so I think they have a chance to develop a concrete understanding. As far as I can tell they find it useful, just a stretch of their understanding, but something that makes writing code easier afterward. Good question re standard vocab - my understanding is that I'm teaching them mental processes which (1/1)" CreationDate="2020-09-24T21:45:22.003" UserId="9246" />
  <row Id="17072" PostId="6548" Score="0" Text="professional programmers use (not just vocab) which I have inferred from contact with other professionals - often mental processes aren't spoken about, just assumed that you pick up if you work as a coder. I think some programmers flame out because they don't figure out chunking and abstraction on their own. Finally, yes much of this is my style and I do want to avoid the hubris of thinking everyone is better off thinking like me - time will tell what works." CreationDate="2020-09-24T21:51:50.520" UserId="9246" />
  <row Id="17074" PostId="6548" Score="2" Text="If you're interested, I recorded a session today with his permission (taking a student through Euler 38 in C++). We use psedo-code and English to flesh out an understanding. https://youtu.be/jIquuSSdRSw This is an hour long and pretty slow for a third party observer, but if you are interested Steve, I really respect your desire to make this process concrete and would value your feedback." CreationDate="2020-09-25T00:02:03.340" UserId="9246" />
  <row Id="17080" PostId="6548" Score="0" Text="thanks for this, I think that's given me a much clearer impression of the situation, and much to digest! I didn't watch the video in a completely linear fashion, as I had to go off and find out what Euler was, what a &quot;pandigital&quot; was, and so forth. Spontaneously, whilst parsing the statement of the problem, I found myself engaging in my mind in the production of what you've called &quot;pseudocode&quot;, and in particular analysing what the limits of iteration would be. The first thing I note is that this is not what I considered &quot;pseudocode&quot; - rather, I conducted an inner monologue..." CreationDate="2020-09-25T20:08:33.827" UserId="9075" />
  <row Id="17081" PostId="6548" Score="0" Text="...in English (and also manipulated visual imagery), and if I were to write down key points and abbreviated conclusions of that monologue, it would look similar to what you're calling &quot;pseudocode&quot;. In my view, this is not &quot;pseudocode&quot; intended for communication, it's part of one's own mental working. Essentially what you're saying to students is &quot;before writing code, you're going to have to spend time reasoning about what form the algorithm should take, and that reasoning will take place (and be noted down) predominantly and most conveniently in English&quot;..." CreationDate="2020-09-25T20:25:43.427" UserId="9075" />
  <row Id="17082" PostId="6548" Score="1" Text="...So what are you really teaching your students here? In my view, it's the need to engage in analysis, and to somehow record at least some key points of that analysis, because one will refer back to what is recorded as an adjunct to one's own internal memory. And I definitely agree with you that this is an important technique to learn. The other point I made was about whether this &quot;pseudocode&quot; is &quot;high-level&quot; - in my view it isn't, it's actually somewhat wooly and very narrowly focused on recognising the need for, and working out the detailed range for, iteration." CreationDate="2020-09-25T20:45:28.927" UserId="9075" />
  <row Id="17093" PostId="6548" Score="0" Text="Thanks for your comments. I think I know what you mean about &quot;high-level&quot; - it's certainly not high-level compared to a UML diagram of a large system. However, I think it's still a form of abstraction. I teach the general problem solving strategy of &quot;solve a simpler problem first&quot; - helping them to see how to analyze the problem in portions without needing to grasp the whole first. This is related to any kind of analysis or high-level design I think. Concretely that means that any way of making analysis easier will be an inspiration to the way they analyze at all levels...." CreationDate="2020-09-26T21:13:04.760" UserId="9246" />
  <row Id="17094" PostId="6548" Score="2" Text="... I don't if you have encountered this, but many of our students today have ingrained the idea that hard problems should feel hard and difficult to work through, so they don't look for an easier way. And, thinking with words and images is a skill that takes practice, and without guidance they may spend all their practice time making that harder than necessary. Certainly I did. It was only with pedagogic mentors as an adult that I started &quot;looking for the easier way&quot;" CreationDate="2020-09-26T21:16:39.297" UserId="9246" />
  <row Id="17109" PostId="6548" Score="0" Text="That last comment of yours deserve to be embossed and framed @composerMike!! «students today have the ingrained idea that hard problems should feel hard and difficult; so don't look for easier ways» Dunno if you find this useful : Not spectacular code but in the direction (I feel) you wish your students to go http://melaniemkwon.github.io/blog/2017/09/09/haskell-goldbach.html" CreationDate="2020-09-28T05:47:54.510" UserId="8837" />
  <row Id="17042" PostId="6549" Score="1" Text="I understand your point about allowing them to discover it for themselves, but I think sometimes students need to be pushed a little to start doing something that maybe they wouldn't do on their own. They are ready - they are ready to do something new and make progress even if it's uncomfortable." CreationDate="2020-09-20T19:47:55.690" UserId="9246" />
  <row Id="17414" PostId="6550" Score="0" Text="I've never heard of &quot;Fractional languages&quot; -- what are they?" CreationDate="2020-12-18T03:38:47.517" UserId="27" />
  <row Id="17039" PostId="6551" Score="1" Text="Interesting comment, &quot;Programming is too enjoyable.&quot; Sometimes they are wrestling with a problem and really feel quite confused, which I wouldn't call enjoyable, but the only way they see to start work is to dive in and write code, because pseudo-code is too abstract for them to think of. And I think it takes time to be ready to think in the abstract so I don't want to push that too much." CreationDate="2020-09-19T22:05:11.317" UserId="9246" />
  <row Id="17043" PostId="6552" Score="2" Text="Everything you said we have already done in several ways." CreationDate="2020-09-20T20:51:49.183" UserId="9524" />
  <row Id="17075" PostId="6552" Score="1" Text="@raresdima: What language-change did you try?  I can tell you (a) You can teach C++ (b) You can teach programming (c)... Or even CS. But I've never known teaching/learning of programming still less CS **via** C++. People's brains come in a vast variety. If it really matters to you/your employer to pick up this person I'd try Excel, or vba for the Office-app he's good at or...  Millions of possibilities" CreationDate="2020-09-25T08:11:40.160" UserId="8837" />
  <row Id="17076" PostId="6552" Score="0" Text="@Rusi you comment seems to be part a comment about the question (not this answer), and part an answer. If you move the answer part to an answer, then you may get some reputation." CreationDate="2020-09-25T08:16:44.893" UserId="204" />
  <row Id="17095" PostId="6552" Score="0" Text="All true! &#xA;I was just latching onto the snippet: «You: .... re-consider the choice language, — a very hard language,  with very high cognitive load.. @RaresDima: We've tried...»&#xA;I recognize that you've (probably!) +1ed my comment and are saying you'll +1 my answer — thanks for that.&#xA;As some general rules: If I answer I try to do it so the *questioner* is helped.&#xA;I try to avoid polemics!&#xA;My views on this are extreme : Imperative prog is a mistake; OOP is a scam; C++ is among the worst — if this view would help the OP can do... But until then I'd not like to heat up. (this is a nice SE!)" CreationDate="2020-09-27T04:21:24.833" UserId="8837" />
  <row Id="17096" PostId="6552" Score="0" Text="Other eg [this question](https://cseducators.stackexchange.com/q/6563/8837) : I'd say «recursion is easy; it's assignment (as the atomic unit) that makes it hard; mutable data structures even worse.» I could answer along the lines: «Switch to a language not usually needing assignment/mutation — scheme — or even better a language that doesnt have these — haskell — and see your problem vanish.» However the last line of the question — C a given — strongly suggests that this answer would be a non-answer... So I refrain ." CreationDate="2020-09-27T04:41:10.370" UserId="8837" />
  <row Id="17113" PostId="6552" Score="0" Text="@Rusi I struggle to understand your comment. Is it commenting on this answer or on the question? What is it saying? (I grok the no mutation bit, but the rest is lost on me)." CreationDate="2020-09-28T17:02:01.903" UserId="204" />
  <row Id="17114" PostId="6552" Score="0" Text="Well some water has flowed under the bridge. I did try to answer the other [question](https://cseducators.stackexchange.com/a/6568/8837) and seem to have ruffled some feathers (see comments there to see how things get heated and polemical). Which part do you not get? (there are already 3 comments above)  If you quote some lines/phrases I'll certainly try to clarify" CreationDate="2020-09-28T17:12:33.470" UserId="8837" />
  <row Id="17118" PostId="6552" Score="0" Text="@Rusi I just read the other answer, and other comments. I agree on a lot of what you say, but you are hard to understand. You keep chopping between ideas, and talking in fragments. Also I think OOP is a good idea, I would like to see some OOP languages become main stream, and be used in teaching. Alas so far I only see (in the main stream) mock OOP languages OOP is a framework for hanging functional code, and in the 1% to 5% of cases a little procedural (but only when it makes the code better)." CreationDate="2020-09-29T05:48:09.090" UserId="204" />
  <row Id="17119" PostId="6552" Score="0" Text="Umm... That's a serious problem! I'll try to see how I may smoothen the arguments /presentation. (yeah it's months since my git answer. Believe me I have more material for that... But not a clear story line unfortunately)" CreationDate="2020-09-29T07:31:41.080" UserId="8837" />
  <row Id="17052" PostId="6553" Score="1" Text="We are already working with every single person on a case-by-case basis. We switched to this method from the moment it was clear that there were large skill gaps. Fortunately there is 2 of us and 6 of them so it is possible to give everyone ample time for code reviews but even this has had limited to minimal effect." CreationDate="2020-09-22T06:08:22.967" UserId="9524" />
  <row Id="17053" PostId="6553" Score="1" Text="As for Hill Climbing. In much less than 40 years of software development one of the largest projects I spearheaded used Hill Climbing as one of its integral parts. This project gave me at least 2 salary increases and a sizeable promotion. But aside from that, HillClimbing is an insanely simple algorithm. It's not much harder than sorting a bunch of numbers. And in engineering... complicated control flow is an everyday occurrence so a small degree of algorithmic thinking is required for the job. A degree that is a bit above HillClimbing." CreationDate="2020-09-22T06:12:05.487" UserId="9524" />
  <row Id="17054" PostId="6553" Score="0" Text="All in all, thank you for the reply! 1st: After noticing skill differences we have moved to personal tutoring pretty fast. 2nd: Also we have focused more on clean code and only rudimentary functions so there is almost no algorithmic thinking to be done. 3rd: The everyday tasks are engineering-related and unlike most jobs there is a bit of physics and math involved for everyone, so a HillClimbing seems a reasonable standard. I am however open to other ideas of &quot;projects&quot;. 4th: Can you elaborate the deep talk please?" CreationDate="2020-09-22T06:18:29.283" UserId="9524" />
  <row Id="17058" PostId="6554" Score="2" Text="Agree, except: if you are declaring variable long before they are used (because your language makes you declare them at the top of the method), then your methods are too long." CreationDate="2020-09-22T21:19:13.397" UserId="204" />
  <row Id="17060" PostId="6555" Score="7" Text="C++ has a lot of gotcha's that get in the way for beginners." CreationDate="2020-09-22T21:58:44.710" UserId="1293" />
  <row Id="17070" PostId="6555" Score="1" Text="If you had not mentioned C++, then I would agree." CreationDate="2020-09-24T21:13:24.587" UserId="204" />
  <row Id="20924" PostId="6555" Score="0" Text="Maybe relevant https://www.theatlantic.com/national/archive/2012/10/ap-classes-are-a-scam/263456/" CreationDate="2023-01-10T05:11:20.033" UserId="8837" />
  <row Id="17062" PostId="6557" Score="1" Text="Last paragraph is the real reason, and distills down to &quot;Because that's what the bosses want.&quot;" CreationDate="2020-09-23T07:41:33.227" UserId="104" />
  <row Id="17250" PostId="6557" Score="0" Text="Java is ubiquitous at UNC, NCState, and Duke. This is where we send a  lof of our students." CreationDate="2020-11-18T22:24:00.703" UserId="21" />
  <row Id="17131" PostId="6558" Score="1" Text="I like the question. Although I have never (to my knowledge) created a Factory, I do learn a lot from the edge questions, and it made me think, &quot;Hey, that thing I made the other day in ASP.Net, I bet it was a... Factory! One that creates subclassed... things!&quot; So, I hope you stick around and keep challenging Frames. Just watch out for the glass doors (like in the movie *Spanglish*)." CreationDate="2020-10-02T10:43:06.460" UserId="5349" />
  <row Id="20688" PostId="6558" Score="0" Text="I don't understand &quot;_static_ factory.&quot; I thought a factory was an _instance_ of some class with one or more methods that &quot;manufacture&quot; other instances that implement some interface. To me, the whole point of the factory pattern is... Well... Suppose I write a library that needs to create new threads. Instead of simply creating them behind the scenes, I give my clients greater power to do I-dont-even-need-to-know-what by allowing the client to supply a &quot;thread factory&quot; _object_ that my code calls whenever it needs another thread." CreationDate="2022-08-15T00:30:34.093" UserId="1269" />
  <row Id="20882" PostId="6558" Score="0" Text="Be very careful with the square/rectangle problem. It is a highly contested inheritance example." CreationDate="2022-11-25T02:18:37.567" UserId="2164" />
  <row Id="17079" PostId="6560" Score="1" Text="https://cseducators.meta.stackexchange.com/q/481/283" CreationDate="2020-09-25T18:01:53.850" UserId="283" />
  <row Id="17134" PostId="6563" Score="0" Text="I'm not sure that I understand the statement &quot;*the idea that an entire structure is stored in one variable*&quot;... You mean that a pointer to the root is stored in one variable? Otherwise it would be like saying that my entire earnings history is stored in my Social Security Number. Yes? Do students know that a variable is just a memory location that holds something? That the something could be &quot;the address of *another* memory location&quot;? Yes? Without that knowledge, I wonder at how they would understand recursion or anything else in programming." CreationDate="2020-10-05T00:14:34.150" UserId="5349" />
  <row Id="17146" PostId="6563" Score="0" Text="Yes they know what a variable really is, I didn't want to waste words.  What I meant by that comment is that they struggle with accessing a data structure through one variable (memory location storing other memory locations).  Their pointer skills are adequate for how long they've been practicing, recursion is a different story." CreationDate="2020-10-05T15:47:52.303" UserId="9498" />
  <row Id="17176" PostId="6563" Score="2" Text="When I learned about linked data structures, I had the advantage (?) of having to hand in assignments written in a computer language that had neither pointer types, nor reference types. The links in my data structures were integer _indices_ into statically allocated arrays of records. Learning how to use pointers later on was almost painless: It was easy to think of them as just integer indices into a big array called &quot;memory.&quot;" CreationDate="2020-10-15T16:37:37.217" UserId="1269" />
  <row Id="17137" PostId="6564" Score="0" Text="People only understand something they have 'learned' after a night of sleep. I guess it takes about 40 days (and more importantly, 40 *nights*) to learn some things. That is just part of being human, no shortcuts available. Can't tell you how many times I stared dumbfounded at a programming problem one day, and the next morning sat down and polished it off. Naps should be required in programming. Having kids stop taking naps after Kindergarten is really a failure of the educational system. College is great because there is very flexible sleep time." CreationDate="2020-10-05T00:24:41.633" UserId="5349" />
  <row Id="17135" PostId="6565" Score="1" Text="The Russian Doll image is very good, and even better the image of getting paint all over your fingers from trying to do the steps in the 'wrong' order. Coming up with the correct and elegant solution is extremely satisfying, and is what makes programming worthwhile." CreationDate="2020-10-05T00:16:44.127" UserId="5349" />
  <row Id="17331" PostId="6565" Score="0" Text="This answer simply does not address the question. Your knowledge of LL(n) compiler semantics is not appropriate material for a *high school* class where the poor teacher has learners that 'find it hard to understand that a whole structure can be stored in one variable'." CreationDate="2020-11-27T23:02:26.603" UserId="8007" />
  <row Id="17334" PostId="6565" Score="0" Text="@JonGuiton, actually, the point was that the OP needs to review structural induction and understand it deeply, not that they should teach a compiler course. And, I flagged it myself as a not-answer. It is only a path to find an answer." CreationDate="2020-11-27T23:10:33.060" UserId="1293" />
  <row Id="17335" PostId="6565" Score="0" Text="Beg to differ, but *first time learners* in a *high school* where some students find the idea of compound variables tricky do *not* need to review structural induction any more than first time automotive maintenance students need to deeply understand hydrocarbon oxidation theory. It is much more helpful for teaching staff if answers address audience needs and contain practical teaching aids at the appropriate level e.g. examples actually written in C would be useful for a teacher teaching data-structures in C." CreationDate="2020-11-27T23:30:44.943" UserId="8007" />
  <row Id="17336" PostId="6565" Score="0" Text="i.e. which do not use functional programming paradigms with global variables - what kind of example is that setting?" CreationDate="2020-11-27T23:32:16.360" UserId="8007" />
  <row Id="17111" PostId="6567" Score="1" Text="Programming is confusing and it is a big responsibility, like driving a car or dealing with finances. Someday, we will not have those things anymore, but for now we do. Hiding stuff from people does nothing to help them learn and grow. Teach the two hard things immediately and get them nailed down flat from the very beginning." CreationDate="2020-09-28T12:05:29.560" UserId="5349" />
  <row Id="17112" PostId="6567" Score="0" Text="Well we'll have agree to disagree on that @Scottrowe We're in 2020. Quite apart from the fact that functional P is now no more ivory-tower : eg clojure, scala, erlang etc, even mainstream imperative/OO are changing course See this microsoft doc Note the &quot;note&quot; «Better to use immutable value types.» What is this other than «Try to program functionally when possible?» https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types" CreationDate="2020-09-28T13:44:00.393" UserId="8837" />
  <row Id="17120" PostId="6567" Score="0" Text="Python portfolio of examples could be extended with `a += [4]` (mutation)" CreationDate="2020-09-29T08:20:31.580" UserId="9372" />
  <row Id="17122" PostId="6567" Score="1" Text="@aivaarpaalberg yeah sure: &quot;a = a + [4]&quot; assigns to a whereas &quot;a += [4]&quot; mutates a. There are zillions (OK dozens ) of such gotchas waiting the unwary. So what's the point you're making? I'm not sure. My point was (1) to answer why mutation is a problem (2) and worse than assignmentt. eg the well-known [mutable default args](https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments) is (from a pragmatic pov) v important. My point was more philosophic : with all these gotchas why are we teaching? And what exactly are we teaching?" CreationDate="2020-09-29T08:59:49.450" UserId="8837" />
  <row Id="17123" PostId="6567" Score="0" Text="@ScottRowe thinks these things important. I don't. Not sure where you (aivaarpaalberg) stand on this. And hey that's fine There's 7 billion of us on this spinning rock!" CreationDate="2020-09-29T09:05:13.433" UserId="8837" />
  <row Id="17124" PostId="6567" Score="0" Text="Programming languages are made by the people for the people. Programming languages tend to reflect it the same way as the spoken languages. One must know that 'cat has nine lives' shouldn't be taken literally and person saying that has not lost touch with reality :-). My native language has no future tense, no gender pronouns, no definite/indefinite articles etc, but I try to use them when I speak english, russian or spanish (unfortunately often forgetting to use them or using improperly). This is not the fault of these languages - this is my fault not knowing or practicing language enough." CreationDate="2020-09-29T10:19:24.017" UserId="9372" />
  <row Id="17125" PostId="6567" Score="0" Text="@Aivarpaalberg Interesting comment. Isn't the opposite equally true, viz. There are things you can say in Estonian (I'm assuming that's your native language) which you cannot convey with the same nuance and finesse in any other?" CreationDate="2020-09-29T11:48:22.203" UserId="8837" />
  <row Id="17126" PostId="6567" Score="0" Text="@AivarPaalberg I like your comment on how languages vary. I simply think that we must teach the aspects of computers that do not vary, the aspects that are always true, independent of language. Otherwise, it would be like trying to teach about gender pronouns (as you mentioned), without ever knowing or saying what gender is. Let's begin teaching by stating what is. It really is not that complicated: there is assignment / mutation, and there is indirection. That is what makes a computer, a computer. Nothing more, nothing less than those 2 things." CreationDate="2020-09-30T15:54:07.417" UserId="5349" />
  <row Id="18220" PostId="6567" Score="0" Text="I total agree, but find the terminology a bit confusing: What do you mean by assignment?" CreationDate="2021-08-31T07:29:39.190" UserId="204" />
  <row Id="18229" PostId="6567" Score="0" Text="@ctrl-alt-delor Assignment means storing a new value in a variable (memory location). Computers can only do 5 things: fetch, store, arithmetic, compare, branch. Indirect Reference is the other major thing, which modifes the fetch and store operations. If you know of anything else that a CPU can do, please say." CreationDate="2021-09-02T01:22:12.760" UserId="5349" />
  <row Id="18233" PostId="6567" Score="0" Text="@scottrowe I was asking the author. I know what I think it means, but when reading the answer, I wondered what the author meant." CreationDate="2021-09-02T05:44:35.170" UserId="204" />
  <row Id="18240" PostId="6567" Score="0" Text="@scottrowe &quot;homonym&quot; and &quot;synonym&quot; are not synonyms!! When you treat them as such you paint yourself into a corner. Math-variable and program-variable are similar sounding merely by happenstance. See the comments below https://cseducators.stackexchange.com/q/7037/8837 particularly Bob Harper's differentiation of &quot;assignable&quot; — the programming concept — from &quot;variable&quot; — the math one. Also SolomonSlow's comments are remarkably bullseye" CreationDate="2021-09-02T12:47:35.313" UserId="8837" />
  <row Id="18241" PostId="6567" Score="0" Text="There's more that needs be said here but as I told @ctrl-alt-delor cant do it now due to some challenges. Hope to return at some point." CreationDate="2021-09-02T12:54:29.863" UserId="8837" />
  <row Id="17097" PostId="6568" Score="1" Text="Why the insulting tone? Can you make your point otherwise? Note also that the language of instruction may not be up to the instructor or the OP here." CreationDate="2020-09-27T15:20:42.190" UserId="1293" />
  <row Id="17098" PostId="6568" Score="0" Text="@buffy I changed the &quot;you&quot; to &quot;I&quot; in last para. (I actually don't understand all the versions!) Does that help? Or were you thinking of the other question https://cseducators.stackexchange.com/a/6567/8837" CreationDate="2020-09-27T15:28:22.123" UserId="8837" />
  <row Id="17099" PostId="6568" Score="0" Text="Your comments about the teacher and the students in the &quot;warning&quot; section are not called for." CreationDate="2020-09-27T15:33:03.530" UserId="1293" />
  <row Id="17100" PostId="6568" Score="1" Text="@buffy i think there's a communication problem here. I really mean the order is reversed (typically). And the innocent party — student or teacher — is punished for an inept medium of instruction. Anyways... I've made the order more explicit and toned down the epithets. Hope that helps!" CreationDate="2020-09-27T15:44:19.860" UserId="8837" />
  <row Id="17101" PostId="6568" Score="0" Text="Do you teach? Do you think of your students as dumb?" CreationDate="2020-09-27T15:53:40.107" UserId="1293" />
  <row Id="17102" PostId="6568" Score="0" Text="@buffy&#xA;«medium of instruction not a choice» In 1990 I taught a bit of functional approach (scheme) in the discrete math course (the parallel C-based course was proceeding disastrously) In 1991 (thanks to the disaster!) I was allowed to teach the 1st programming course on the condition that minimum C was delivered at end. So I taught Haskellish gofer. It went quite a bit better. So there is always some degree of freedom." CreationDate="2020-09-27T15:59:07.663" UserId="8837" />
  <row Id="17103" PostId="6568" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/113445/discussion-between-rusi-and-buffy)." CreationDate="2020-09-27T16:00:24.623" UserId="8837" />
  <row Id="17136" PostId="6568" Score="0" Text="I am so perplexed that anyone thinks that programming has anything whatsoever to do with math. This seems like a fundamental error in conception that really should be sorted out. I've been programming for 40 years and never had any more complex math to do that managing a circular buffer that allows push and pop (like 'unreading' something). What's with all the math references? I have recently written some SQL statements that would curl your hair, no Math required, Set Theory was nowhere in sight. Someone got the whole study of programming off on the wrong foot with this math stuff." CreationDate="2020-10-05T00:20:25.543" UserId="5349" />
  <row Id="17139" PostId="6568" Score="0" Text="@ScottRowe «I wrote some SQL that would curl your hair... No math, No Set Theory» [Check again!](https://en.m.wikipedia.org/wiki/Tuple_relational_calculus) &#xA;AFAIC SQL is bog standard [modern-math set theory](https://en.m.wikipedia.org/wiki/Set-builder_notation) &#xA;with COBOL syntax. And no offence to COBOL. The key phrase here is that [SQL is a declarative language](https://en.m.wikipedia.org/wiki/SQL) &#xA;which AFAIC is CS-ese for saying SQL is math! We could continue but as Fermat said 4 centuries ago: «The comment section of SE is too narrow». Seriously:we could continue elsewhere, maybe meta" CreationDate="2020-10-05T04:06:17.423" UserId="8837" />
  <row Id="17140" PostId="6568" Score="0" Text="How much thought did you give to grammar, phonetics and word origins while writing your last comment? But what else is written language than those, eh? It takes solving differential equations to balance on a bicycle, or even just stand on one foot. Yet, a bear can ride a bicycle. We have to get over this rubbish that programming is in any way related to math, just like talking is in any way related to the study of language, or biology is chemistry, or psychology is 'just' operant conditioning. These are degenerate thought-functioning, as in: &quot;a point is a degenerate circle&quot;." CreationDate="2020-10-05T10:35:07.670" UserId="5349" />
  <row Id="17142" PostId="6568" Score="0" Text="@ScottRowe I showed 3 pianists [here](https://cseducators.stackexchange.com/a/6164/8837). Putting the first aside do you think the other two just magically play the notes? Or do they know some music theory? And if you do answer the first question as &quot;yes&quot; then graduate from these pianists to the composers they're playing. Put simply: Do you imagine they could write the music without knowing music? OTOH I don't believe that expert musicians &quot;think their theory&quot; while performing or ultimately even composing. I think we're about 1-2 hundred years away from that in programming" CreationDate="2020-10-05T10:42:43.807" UserId="8837" />
  <row Id="17148" PostId="6568" Score="0" Text="&quot;*In theory, there is no difference between Theory and Practice. In practice, there is.*&quot; -- Yogi Berra" CreationDate="2020-10-05T16:18:21.770" UserId="5349" />
  <row Id="17333" PostId="6568" Score="0" Text="Your article on the meta-semantics of the assignment operator and how good you are at finding quotes from Dijkstra on Google doesn't actually answer the question asked." CreationDate="2020-11-27T23:09:06.730" UserId="8007" />
  <row Id="18224" PostId="6568" Score="0" Text="I don't see anything rude about his post. But I don't see correction as an insult. I do worry about the word maths. Many people associate this with school/arithmetic/etc. If you see maths to mean a language, then non-mathematical just means ungrammatical nonsense. Functional (mathematical) programs describe **what** is to be done. Imperative programs describe **how** to do it (leaving you in the dark about **what** it is that is being done)." CreationDate="2021-08-31T08:15:24.033" UserId="204" />
  <row Id="17104" PostId="6569" Score="0" Text="There seems to be a spurious backquote (‛)  in your sum definition. And yes, @buffy suggestion toward structural induction is spot on. I meant to say that but we ended up somewheres...else" CreationDate="2020-09-27T17:32:18.037" UserId="8837" />
  <row Id="17105" PostId="6569" Score="1" Text="spurious backquote fixed" CreationDate="2020-09-27T17:38:03.120" UserId="9549" />
  <row Id="17107" PostId="6569" Score="0" Text="And thanks for reminding me that the beauty of Tex math works on this site — my answer changed accordingly. Seemingly irrelevant but actually germane to the point that recursion becomes easy to the extent that programming becomes math" CreationDate="2020-09-28T04:31:11.350" UserId="8837" />
  <row Id="17332" PostId="6569" Score="0" Text="I have to ask how this is an answer to the question about teaching tree data structures in a high school." CreationDate="2020-11-27T23:06:28.713" UserId="8007" />
  <row Id="17705" PostId="6569" Score="0" Text="A senior CMU Prof makes a similar point: https://existentialtype.wordpress.com/2011/04/12/a-dead-dog/ and https://existentialtype.wordpress.com/2011/03/21/the-dog-that-didnt-bark/" CreationDate="2021-02-14T15:59:42.203" UserId="8837" />
  <row Id="17116" PostId="6570" Score="0" Text="Thanks for this. I'm a little confused why you and Steve have objected to calling it high-level - okay so let's call it chunking. https://en.wikipedia.org/wiki/Chunking_(psychology) What you call the mental model as well as the English description involve chunking - combining several details in a single thought. That's a form of abstraction and a step toward grasping larger and larger abstractions. I call &quot;abstraction&quot; high-level, but maybe I'm using it wrong. You use the words &quot;big picture&quot; and a mental picture &quot;all or most of the way through&quot; which also sound high-level to me. But thanks!" CreationDate="2020-09-28T21:23:22.760" UserId="9246" />
  <row Id="17117" PostId="6570" Score="2" Text="I like &quot;programming by perturbation&quot; - I see that a lot. I've actually seen it more in self-taught adults who come to me to learn to program right. I'm sure it's in a lot of your young students, too." CreationDate="2020-09-28T21:29:36.527" UserId="9246" />
  <row Id="17127" PostId="6570" Score="1" Text="I didn't mean that pseudocode doesn't require thinking at a high level. I meant that for me, the immediate goal is the planning. The practice with thinking more abstractly is just a bonus at this point." CreationDate="2020-10-01T04:38:06.533" UserId="6111" />
  <row Id="17129" PostId="6572" Score="0" Text="One sensible answer! Wish I could +10 it! If out of compassion etc you give fraudulently lenient grades, you may (or not) help a couple of students. But you damage the system at an infinitely larger scale." CreationDate="2020-10-02T04:10:08.630" UserId="8837" />
  <row Id="17141" PostId="6573" Score="0" Text="It gets even weirder when you consider that a second plus a second plus a second is a third, and that you can add unison's (the first) infinitely without ever moving at all." CreationDate="2020-10-05T10:42:31.600" UserId="27" />
  <row Id="17143" PostId="6573" Score="0" Text="Umm.... Cute observation @BenI. But this is a composition of two different things: the minor one being counting from 1 the major one being the wondrous irregularity of the scale. Which itself we experience through two *big* simplifying approximations: the uncountable infinity of frequencies reduced to (western) music (C# spelt different from Db but the C-D whole tone = D-E whole tone). Then reduced once again to 12 notes of the keyboard" CreationDate="2020-10-05T11:06:31.543" UserId="8837" />
  <row Id="17144" PostId="6573" Score="0" Text="Cute observation is what I was going for :)  But it's truly exactly the same observation as octave plus octave is fifteenth, just with smaller numbers." CreationDate="2020-10-05T14:46:27.147" UserId="27" />
  <row Id="17145" PostId="6573" Score="0" Text="There's also a bit of something not quite right, actually. The octave doesn't have 7 notes; the octave is an interval (so at most, it only has 2 notes), and it is named for being the eighth note along the scale up from the tonic. So I think you meant to say &quot;an octave of a major scale only has 7 notes&quot;, but even this wouldn't quite be correct.  It would be correct to say that &quot;an octave of a major scale is comprised of seven notes beyond its initial note&quot;." CreationDate="2020-10-05T14:59:29.857" UserId="27" />
  <row Id="17147" PostId="6573" Score="0" Text="@beni. «but even this wouldn't quite be correct. It would be correct to say that &quot;an octave of a major scale is comprised of seven notes beyond its initial note&quot;» Well there's a programming theorem that every top tested while can be written as a bottom tested do-while. And conversely. I wrote the 7 as CDEFGAB. you could write (reference C) DEFGABC. Which ever way you count there are 7 distinct followed (or preceded) by the &quot;loop&quot;" CreationDate="2020-10-05T15:55:45.497" UserId="8837" />
  <row Id="17149" PostId="6573" Score="0" Text="But neither of those is an octave, those notes outline major and minor sevenths, respectively. The octave only has two notes, such as CC." CreationDate="2020-10-06T03:14:42.593" UserId="27" />
  <row Id="17151" PostId="6573" Score="0" Text="Let me try a different tack @BenI. {a, b, c, d, e, f, g} is a set with 7 elements (cardinality 7). You're not allowed 'h' (unless you're German!). In the music world (assuming a fixed scale/mode, no accidentals, modulation and other fancy stuff) **your palette consists of 7 &quot;colours&quot;**" CreationDate="2020-10-06T03:43:05.473" UserId="8837" />
  <row Id="17152" PostId="6573" Score="0" Text="Perfect. I agree! This is all correct." CreationDate="2020-10-06T10:15:47.130" UserId="27" />
  <row Id="17156" PostId="6578" Score="1" Text="Can't say whatever this q is relevant to here. I'd certainly be pleased and enriched with more data on how KA (type) materal is made.Upvoted" CreationDate="2020-10-11T02:16:02.247" UserId="8837" />
  <row Id="17157" PostId="6578" Score="1" Text="As an educational resource-request, I don't think it's off-topic, though this is a small enough core community that I don't know if you will receive any answers.  While we have a fair amount of knowledge about CS instruction, this is very needle-in-a-haystack. You may get lucky, however. Also, if you eventually find it on your own, a self-answer is always appropriate." CreationDate="2020-10-11T03:04:31.917" UserId="27" />
  <row Id="17158" PostId="6578" Score="0" Text="Just noticed in my comment above that &quot;whether&quot; got changed to &quot;whatever&quot;. Phone typing + spellcorrect!!" CreationDate="2020-10-11T10:44:13.690" UserId="8837" />
  <row Id="17161" PostId="6579" Score="2" Text="How do you finesse 106%? And I worry a lot about such a high-risk final exam." CreationDate="2020-10-12T17:49:51.003" UserId="1293" />
  <row Id="17167" PostId="6579" Score="0" Text="Say something, somewhere about your students. For most students with diverse backgrounds this overall course design is a disaster. If they are all extremely well prepared and motivated it might work, but not in general. Somewhere I think you said you teach in a military academy. Perhaps there is some external motivation here. Some course designs work with people (and only them) who don't need teaching and the only function of the instructor is to sort them into grade levels. Somewhat like the sorting hat at Hogwarts." CreationDate="2020-10-12T19:40:21.807" UserId="1293" />
  <row Id="17169" PostId="6579" Score="0" Text="@Buffy the setting without the bonus assignment worked very well last year - student feedback was excellent. So I want to keep the same scheme as much as possible, just add a bonus exercise." CreationDate="2020-10-13T07:08:28.693" UserId="1873" />
  <row Id="17193" PostId="6580" Score="1" Text="Lovely article — thanks for sharing. It's remarkable how wrong the general pattern of doing things can be and for how long this wrongness can persist [My personal list](http://blog.languager.org/2016/01/how-long.html)" CreationDate="2020-10-30T04:47:38.047" UserId="8837" />
  <row Id="17194" PostId="6580" Score="0" Text="Nice blog and article, thank you too! My addition: we take notes in university not for any real pedagogical value, but because when European universities (Bologna, Sorbonne, Oxbridge) were created in the 11th-12th centuries, the printing press had not been invented yet. So the young scholars would arrive with blank codices to write their own textbooks via dictation. In the age of the educational game and the pdf, 900 years later, we have barely changed our practices. And the rare studies that compare note-taking to analytical reading tend to all favor the latter..." CreationDate="2020-10-30T12:15:32.590" UserId="9588" />
  <row Id="17195" PostId="6580" Score="0" Text="Um... I wonder what you think of [this demo](https://castel.dev/post/lecture-notes-1/#sympy-and-mathematica) of note-taking. See the article from beginning for general pic. Basically the guy takes math-notes directly **in real time** in math classes using fancy vim features for latex!  More realistically, if the teacher is *not* following a text or making pdfs, what do u recommend the students do?" CreationDate="2020-10-30T14:11:41.950" UserId="8837" />
  <row Id="17196" PostId="6580" Score="0" Text="Interesting methodology, but it requires a lot of work, setup, and technical competence that can't really be required of every student. Additionally, it's a solution to a problem that shouldn't be there; scans of lecture notes, or better, LaTeX pdfs should be a requirement for teachers. COVID reveals the bursting seams. Personally, what I'd recommend is for students to find appropriate/recommended textbooks online &quot;by any means necessary&quot; and spend a lot of time in the library or at home reading and taking notes (or making flashcards) of their reading (definitions, intuitions, theorems, etc)." CreationDate="2020-10-30T14:48:30.060" UserId="9588" />
  <row Id="17679" PostId="6580" Score="0" Text="That article was brilliant, thanks for the link. But in the end, while there are a lot of references to packages of historical significance, I'm not sure there's anything like what he describes still in existence, for actually learning to program today. Has anyone implemented a learnable programming environment and made it available in the way that Khan Academy is?" CreationDate="2021-02-08T19:22:36.100" UserId="10097" />
  <row Id="17682" PostId="6580" Score="0" Text="Of the kind that Brett Victor designed ? Not to my knowledge. Though a team that I am a part of is starting to build something of the same kind for a limited subset of TypeScript; with the goal of building a mixed CS+math+functional prog+category theory curriculum. The reason I was looking for this essay was precisely because we're looking to build something like this. We're in very early stages though, and our work isn't public (yet; and probably will not be for at least a couple of years). When we have something to show, I'll be sure to comment about it here." CreationDate="2021-02-09T01:15:16.667" UserId="9588" />
  <row Id="17700" PostId="6580" Score="0" Text="@TristanDuquesne: ooh, I wish that were ready now." CreationDate="2021-02-12T16:54:40.607" UserId="10097" />
  <row Id="17701" PostId="6580" Score="0" Text="@JoshuaFrank Hahaha! so do I, it would make my life a loooot easier. But it's going to need a bunch of design, work and iteration to be done well; so it can't be rushed." CreationDate="2021-02-12T17:33:35.697" UserId="9588" />
  <row Id="17704" PostId="6580" Score="0" Text="@joshua (and Tristan) you may find this interesting https://existentialtype.wordpress.com/2011/03/27/the-holy-trinity/" CreationDate="2021-02-14T03:10:34.040" UserId="8837" />
  <row Id="17706" PostId="6580" Score="0" Text="Interesting article, and blog, thank you :) Funnily enough, many questions related to computational trinitarianism are part of our team's research program." CreationDate="2021-02-14T20:04:03.180" UserId="9588" />
  <row Id="17166" PostId="6581" Score="0" Text="I agree completely, but it isn't an answer. I would add, for the question at hand, why such a lot of work for something essentially inconsequential?" CreationDate="2020-10-12T19:36:05.377" UserId="1293" />
  <row Id="17168" PostId="6581" Score="0" Text="@Buffy My first paragraph is my answer." CreationDate="2020-10-12T21:20:18.337" UserId="27" />
  <row Id="17170" PostId="6581" Score="0" Text="Thanks for the feedback, I will clarify the instructions accordingly. By &quot;run by hand&quot; i just mean writing down the steps of execution of the algorithm on a sample input. We do it all the time on the blackboard when we teach algorrithms (e.g. think of how you teach quicksort, BFS, etc.), so students should know what it means. It is still not trivial since it requires to understand the details of the algorithm." CreationDate="2020-10-13T07:13:36.860" UserId="1873" />
  <row Id="17171" PostId="6581" Score="0" Text="Regarding the high-stakes exam: it's a long story and probably an issue for a different question. In my university, every student is entitled unconcditionally to a &quot;second chance&quot; exam, which is about 1 month after the first exam and should be equivalent to the first. This is exactly because of the &quot;bad days&quot; that you mentioned. Students with special circumstances are sometimes eligible to a &quot;third chance&quot; exam. Having 3 exams throughout the semester would mean actually 6-9 different exams, each of which requires an allotment of rooms and proctors. Unfortunately this is way beyond our budget." CreationDate="2020-10-13T07:16:58.687" UserId="1873" />
  <row Id="17172" PostId="6581" Score="2" Text="@ErelSegal-Halevi, I have to suggest that your university re-think its priorities and policies. It seems, in effect, to prioritize budget over student learning. The policies lead to sub-optimal outcomes. And, of course, those 6-9 different exams aren't comprehensive, but cover only sections of the course. It is a partitioning problem not a &quot;quantity&quot; problem." CreationDate="2020-10-13T13:39:07.717" UserId="1293" />
  <row Id="17173" PostId="6581" Score="0" Text="@Buffy In private institutions the tuition is higher, so there is more budget, less students, and more time to invest in each student. Public institutions aim to provide &quot;higher education for the masses&quot;, and this inevitably results in less than optimal learning." CreationDate="2020-10-13T22:02:55.127" UserId="1873" />
  <row Id="17174" PostId="6581" Score="1" Text="Hmmm. My doctorate is from a public institution. Masters too. Learning needn't suffer. Policies matter." CreationDate="2020-10-13T22:06:11.210" UserId="1293" />
  <row Id="17189" PostId="6583" Score="1" Text="I think the lack of an answer at this point probably *is* the answer.  We're all in the same boat." CreationDate="2020-10-23T17:39:46.077" UserId="27" />
  <row Id="17282" PostId="6583" Score="0" Text="Yeah, based on the title, I was about to recommend repl.it, before reading the details of your post. That's a shame, repl.it was perfect for this!&#xA;&#xA;Some of my student's classes have used https://jupyter.org Jupyter notebooks, which seems decent, but not exactly the same as repl.it's offering" CreationDate="2020-11-20T01:44:35.457" UserId="9757" />
  <row Id="17190" PostId="6592" Score="0" Text="Swell answer! Can you expand on last para? Which disassembler? Also the 61 byte asm... Which assembler is it? Nasm?" CreationDate="2020-10-28T02:32:51.420" UserId="8837" />
  <row Id="17191" PostId="6592" Score="0" Text="@Rusi as for 61 byte -- this is in 16bit mode mode fasm. I have a blogpost about it, but it is in Ukrainian :/ https://danbst.wordpress.com/2010/03/01/os_interpreter/ , full source code in the end. As for disassembler -- IDApro or Ollydbg are the h4ck3r tools." CreationDate="2020-10-28T09:42:09.027" UserId="9632" />
  <row Id="17192" PostId="6592" Score="0" Text="Looks impressive. And google goes a long way with the Ukrainian" CreationDate="2020-10-28T10:35:06.380" UserId="8837" />
  <row Id="17204" PostId="6598" Score="1" Text="I would question if it is harder (compered to engineering). I don't know exactly the difference, but in England we have Honers degrees for Engineering (Does this indicate the higher content, or something). Is CS harder than Engineering? Maybe the programming part is. However I suspect that this is because of the way we teach it." CreationDate="2020-11-16T22:02:00.443" UserId="204" />
  <row Id="17206" PostId="6598" Score="9" Text="many factors but maybe a big one is the high mathematical content, and some abstraction, etc. and lets not forget that simply _science itself_ is &quot;hard&quot; and there are a lot of indicators pointing to erosion in societal widespread scientific focus, awareness, literacy etc... there is also an old expression &quot;nothing very worthwhile is easy...!&quot; _building really great things is hard..._ also there is a well recognized phenomenon of _historical waves_ of students entering the field based on mass media/ hype, eg &quot;social network&quot; movie etc!" CreationDate="2020-11-17T18:36:21.720" UserId="2359" />
  <row Id="17209" PostId="6598" Score="20" Text="The first link says that the drop out rate is 10% for CS, 7% for Business or Engineering, so not a huge difference. It also says that 53% dropped out because they weren't getting enough value for their money, 50% because they were not interested, and 33% because it was too hard. So, the first two causes are the important ones, showing that... these students chose a major that didn't actually fit for them. This is not the fault of CS. Why are we still kicking this can?" CreationDate="2020-11-18T11:42:59.800" UserId="5349" />
  <row Id="17228" PostId="6598" Score="0" Text="@ScottRowe: That specific number is for HESA in the UK. On the other hand, the subtitle to the second link is: &quot;Up to 80% of students in some courses are failing to progress to second year &quot;, and shows overall dropout figures at about one-quarter to one-third (which are about the numbers I usually see for 4-year programs; and likely higher than that in 2-year programs)." CreationDate="2020-11-18T17:24:20.057" UserId="8137" />
  <row Id="17231" PostId="6598" Score="23" Text="I'm speculating that many people go into it because they perceive that this will lead them to great careers, until they realize it's something they're absolutely not into at all. In some countries, like India, computer work has been touted as the way to earn a lot of money and many people rushed into it without being interested in the topic one bit." CreationDate="2020-11-18T17:35:47.757" UserId="9712" />
  <row Id="17237" PostId="6598" Score="0" Text="@Thomas The big advice these days is &quot;Fake it 'til you make it&quot; Or, forever, if you just don't care for the work, I guess. What is the talk about internal vs external motivations? Not being a pauper is a strong motivation in some parts of the world." CreationDate="2020-11-18T18:43:26.240" UserId="5349" />
  <row Id="17245" PostId="6598" Score="2" Text="@ScottRowe, some subjects really require at least some interest to gain enough proficiency. I think tech is one of them." CreationDate="2020-11-18T21:10:44.910" UserId="9712" />
  <row Id="17251" PostId="6598" Score="0" Text="I have a healthy fear of competing with people, because they are often quite clever.  Computer science from the get-go has been solving a set of problems that only need to be illuminated once, and all who follow have a trail marked out for them.  Computer science chops aren't subject to the same laws of supply and demand as other skills. Always be careful to not get into situations where you need to learn how to read something written by a gifted person who just worked for a couple decades on it, pulling their hair out and drinking coffee." CreationDate="2020-11-18T22:32:47.533" UserId="9723" />
  <row Id="17252" PostId="6598" Score="5" Text="Because schools no longer teach how to _think logically_ - even as little as they used to do that they don't bother anymore - and sharing good feelz just don't go too far when it is a computer you're trying to get to do what you want it to.  (I am not joking. Just look around at the questions asked by 1-rep-point newcomers on SO and you'll see a complete inability to even ask a relevant question about stuff so basic it doesn't even qualify as programming, just thinking about how do you something one step at a time.  You'll see plenty of confirmation of my point.)" CreationDate="2020-11-18T22:33:04.597" UserId="1301" />
  <row Id="17277" PostId="6598" Score="0" Text="CS is not hard, it is boring and unfulfilling. I have a CS master and it was the worst thing I could have done. I would much rather be a carpenter, MD - in fact, most other professions where you either work with people or use your body, would've been better. You will realise that I am right on your deathbed because you are never gonna regret that you socialized too much during your life but you will regret spending too much time alone in front of a screen. And some people realise this after just a short while at a CS program. There is your explanation." CreationDate="2020-11-20T00:35:52.577" UserId="6187" />
  <row Id="17278" PostId="6598" Score="0" Text="Also keep in mind there is more demand than supply for CS programs, so some people who might've otherwise continued might end up being forced to drop out (e.g. via grade cutoffs) just due to the lack of room. (I don't have numbers on this unfortunately.)" CreationDate="2020-11-20T00:59:36.023" UserId="823" />
  <row Id="17279" PostId="6598" Score="1" Text="In my experience as a current computer science student and tutor (and what I've heard from other faculty and students), hoping to soon transfer from a 2 year college to a 4 year one, It's not the computer science that's hard, but all the other requirements given for a computer science degree. I've had to spend at least an order of magnitude more time on advanced math classes (Calculus, DE, LA, physics etc), than I have on any computer science class. From what I've heard, CS is too popular and too easy, so they're requiring less relevant math and physics courses to weed out the less motivated" CreationDate="2020-11-20T01:00:12.643" UserId="9757" />
  <row Id="17284" PostId="6598" Score="0" Text="Another consideration in the statement that dropout rate is linked to difficulty is that I know a lot of CS dropouts that work in the CS field, and are very good at it. So a more appropriate question might be &quot;why are these students dropping out?&quot;. I've also met a lot of people who have absolutely no business being near a career in CS, yet graduated with a CS major." CreationDate="2020-11-20T03:59:54.830" UserId="9759" />
  <row Id="17285" PostId="6598" Score="1" Text="Probably related to how accessible Computer Science is.  Some fields, especially those with expensive lab equipment (medicine, chemistry, engineering, physics, etc.) would be difficult for a student to home-study in full.  By contrast, colleges offer relatively little to Computer Science students that they can't get elsewhere, and the tech industry tends to be far less strict about requiring college degrees (as opposed to most STEM fields where various regulations and norms prohibit anyone without a college+ degree)." CreationDate="2020-11-20T05:03:04.270" UserId="39" />
  <row Id="17286" PostId="6598" Score="1" Text="Probably some misalignment between curriculums and student goals, too.  For example, students often want to go into programming, data-science, or other tech job, whereas Computer Science majors often focus on other stuff." CreationDate="2020-11-20T05:19:45.190" UserId="39" />
  <row Id="17289" PostId="6598" Score="0" Text="@d-b Both, Computer Scientists and (good) Programmers spend plenty of time socializing. There's even a derogatory term for those programmers who don't &quot;think&quot; and &quot;talk&quot; but just &quot;produce&quot;: Code Monkeys. I'm sorry for you that you had such a bad experience in your CS Master, at my uni we are quite a social bunch." CreationDate="2020-11-20T09:57:49.837" UserId="9311" />
  <row Id="17290" PostId="6598" Score="0" Text="This is an interesting question. I don't mean in any way to disagree or disrespect those with CS degrees (sometimes I wonder if I'd have been better doing one given my current line of work!). However, as a UK maths grad it was a bit of banter we had with the CS department that it was for those who couldn't get onto the maths program!" CreationDate="2020-11-20T10:33:00.117" UserId="9762" />
  <row Id="17291" PostId="6598" Score="0" Text="@ljrk You and I have different opinions about what constitutes &quot;plenty&quot;. Code monkeys produce simple code, that is the main meaning of that word." CreationDate="2020-11-20T11:41:09.303" UserId="6187" />
  <row Id="17296" PostId="6598" Score="1" Text="@ScottRowe Isn't that saying that 30% less people fail business than comp sci?" CreationDate="2020-11-20T17:40:28.427" UserId="6665" />
  <row Id="17297" PostId="6598" Score="0" Text="@d-b Or we just had different experiences. Our department is *famous* on my uni for being quite one of the most sociable people and hosting the best parties.  We also have many who don't like programming and spent more time in front of the black board than the PC." CreationDate="2020-11-20T21:57:06.107" UserId="9311" />
  <row Id="17298" PostId="6598" Score="1" Text="@PatrickL - &quot;all the other requirements given for a computer science degree&quot; &quot;Calculus, DE, LA, physics etc&quot;. To make the most money, you need to know how to do all that math, and if you can, then why not make even more money as an engineer or w/e. Google says (after an entire page of 'you don't need it'): &quot;**In Computer Science, Calculus is used** for machine learning, data mining, scientific computing, image processing, and creating the graphics and physics engines for video games, including the 3D visuals for simulations.&quot; - all those 'new' things that you want to do but require calculus." CreationDate="2020-11-21T02:22:49.633" UserId="4158" />
  <row Id="17300" PostId="6598" Score="0" Text="@ljrk If you have to tell people you, you aren't. You are missing the point. A nurse's work is to interact with a human, a CS work is to interact with a screen. At your deathbed you are never gonna regret that you interacted too much with humans, you are gonna regret that you spent too much time in front of a screen." CreationDate="2020-11-21T04:14:26.700" UserId="6187" />
  <row Id="17302" PostId="6598" Score="1" Text="@d-b Wow, condescending much. For the record, I only told you because you baselessly claimed otherwise. Anyway, regarding &quot;interacting with the screen&quot;: That's where you are wrong. I told ypu so in the initial comment. CS work is *not* to interact with a screen. Again, I feel sorry for you if that was your experience, but judging from your tone, I'm happy I don't have to interact more with you, goodbye." CreationDate="2020-11-21T08:29:30.460" UserId="9311" />
  <row Id="17304" PostId="6598" Score="0" Text="@ljrk Yes it is indeed. If anything &quot;code monkeys&quot; (who said anything about being &quot;condescending&quot;?) interact with other people (they have to discuss interpretations of requirements with colleagues, the people working in production and so on). If you really work with computer _science_ and, e.g., develop algorithms, you will spend a lot of time alone in front of a screen thinking (preferably in a separate room so you aren't disturbed)." CreationDate="2020-11-21T10:49:02.100" UserId="6187" />
  <row Id="17321" PostId="6598" Score="0" Text="@davidbak Have you ever tried to &quot;explain computers&quot; to people born back when schools did (supposedly) teach logical thinking? It doesn't seem to have made them any better at dealing with the unrelenting literalness and attention to detail of computers." CreationDate="2020-11-23T17:24:07.457" UserId="1407" />
  <row Id="17323" PostId="6598" Score="0" Text="@user3067860 - Back when I started programming college was not required and the vast majority of people did _not_ go to college and did just fine in life (single income families too were the norm).  Grade schools _did_ teach logical thinking, especially in &quot;advanced placement&quot; courses - which were primarily offered only to the college bound.  So yes, once you were in college you were, generally, able to think reasonably logically, especially if you survived the first year.  We no longer have that selection bias in colleges, and grade school no longer teaches thinking to _anyone_." CreationDate="2020-11-23T17:36:56.933" UserId="1301" />
  <row Id="17329" PostId="6598" Score="0" Text="@davidbak It doesn't seems like that's anything about schools teaching better, though. Weeding out isn't the same as teaching. We still have CS students who find things easy, I was one, and I had enough classmates who also found things easy. The question is how they teach the students who don't find it easy." CreationDate="2020-11-25T19:18:13.653" UserId="1407" />
  <row Id="17205" PostId="6599" Score="5" Text="I can relate about teachers in early schools (I don't know the American education enough to know which levels) not knowing programming enough. My first programming lessons were with a math teacher who was good in algorithm but came to me regularly when a student has an issue because I started programming by myself before going to this class.&#xA;I have also seen some people who thought &quot;CS / programming is easy I go on Facebook everyday&quot;, these people did not last a long time in the programming school I went on..." CreationDate="2020-11-17T08:01:12.230" UserId="9513" />
  <row Id="17212" PostId="6599" Score="1" Text="Right, students are not dropping out mostly because it is hard, it is hard because they are not engaged, which is because they personally do not find it interesting / motivating / fascinating / worthwhile etc. People will work very hard with very little help or teaching to learn something that they want to learn. If they want it, they will persist until they either gain some ability, or find that for whatever reason, it does not come to them. Either way, they will probably be ok with it. Not so much if someone pushes them, in or out." CreationDate="2020-11-18T12:03:28.077" UserId="5349" />
  <row Id="17216" PostId="6599" Score="1" Text="&quot;Students program in &quot;rich&quot; languages and environments using only the lowest level concepts, never really understanding abstraction or (gasp) polymorphism. Compare that with big ideas that you find in a philosophy or (hopefully) history course.&quot; - Read SICP." CreationDate="2020-11-18T14:25:06.697" UserId="1437" />
  <row Id="17217" PostId="6599" Score="0" Text="@CeesTimmerman, absolutely, but few people read it and fewer use it." CreationDate="2020-11-18T14:31:53.053" UserId="1293" />
  <row Id="17223" PostId="6599" Score="4" Text="The introductory AP computer science class (at least at my school) is _awful_. It spends more time talking about niche aspects of programming (image manipulation, databases, and so on) than it does about functions, loops, syntax, string and list manipulation. Even worse, AWS basically sponsors it so half the course is just learning to use one particular company's AI stuff. No wonder people do so badly later on..." CreationDate="2020-11-18T15:28:31.253" UserId="9709" />
  <row Id="17224" PostId="6599" Score="1" Text="@RedwolfPrograms DBAdmin isn't so niche as you think. It's not CS, certainly, but there's a pretty big market for those skills in industry. I'm not trying to defend your AP &quot;CS&quot; class, which sounds pretty awful, but being able to use and manage a database is a pretty valuable skill if you want to go into IT or certain fields of software engineering or web development." CreationDate="2020-11-18T15:39:50.193" UserId="9711" />
  <row Id="17225" PostId="6599" Score="1" Text="@AndrewRay I agree it's a useful skill, but not for a beginner when that time could be spent on more common skills." CreationDate="2020-11-18T15:51:39.903" UserId="9709" />
  <row Id="17227" PostId="6599" Score="1" Text="Also, there are a lot of advertisements and programs that, for whatever reason, make it seem like it's easy and something anybody can do.  &quot;Learn to code in 30 days&quot;, etc. I don't think it's hard as much as just harder than it's made out to be" CreationDate="2020-11-18T17:20:23.827" UserId="4417" />
  <row Id="17241" PostId="6599" Score="7" Text="@CeesTimmerman I was in a college course that used SICP almost 40 years ago. Lisp seemed interesting up to around page 300 where they basically said, &quot;But this won't actually work, so we need to use this big hammer to make it work.&quot; Just teach me the big hammer right away and skip the interesting digression. I lost all interest in Lisp after that. C worked from page 1." CreationDate="2020-11-18T19:01:21.990" UserId="5349" />
  <row Id="17243" PostId="6599" Score="7" Text="@ScottRowe And many, many problems faced by the industry stem from the very questionable things C lets you do in order to work from page 1. We would be a lot better off if more software were written in languages that forced you to do things the *right* way rather than letting you get sloppy in exchange for apparent success." CreationDate="2020-11-18T20:07:43.067" UserId="1111" />
  <row Id="17246" PostId="6599" Score="8" Text="I agree with your observations that CS is grossly misunderstood and teaching CS is grossly underestimated. But I'd like to remark none of this is new: [E.W. Dijkstra already made these observations back in the 80's](https://www.cs.utexas.edu/%7EEWD/ewd10xx/EWD1036.PDF). (I think a summary of Dijkstra's essay is worth an answer on its own, as he has more interesting hypotheses on why CS is hard as well, but I unfortunately cannot afford to spend the time on it, so this comment will have to do. )" CreationDate="2020-11-18T21:21:17.807" UserId="154" />
  <row Id="17247" PostId="6599" Score="2" Text="Incidentally, while I'm not sure what you mean by &quot;misspelled mathematics&quot;, [the classes Dijkstra taught back in the day under the name of CS](https://cs.stackexchange.com/questions/54143/on-on-the-cruelty-of-really-teaching-computing-science) could certainly be called &quot;mathematics&quot; nowadays, and they perhaps should have been even back then. (In fact, the people currently responsible for teaching &quot;programming&quot; at the same university likely would feel the need to add &quot;pedantic&quot; to the description of Dijkstra's course)" CreationDate="2020-11-18T21:26:42.420" UserId="154" />
  <row Id="17248" PostId="6599" Score="1" Text="@Discretelizard: Wow, it's hand-written!" CreationDate="2020-11-18T21:28:55.667" UserId="8137" />
  <row Id="17275" PostId="6599" Score="1" Text="You also give school CS quite a benefit of the doubt it seems to me - or it is region specific^^ All school CS below the last year(s) in what internationally would be high school was tinkering with Word, Powerpoint and perhaps Excel in my experience (personal and what I hear from younger ones^^). Few exceptions of CS oriented schools aside perhaps." CreationDate="2020-11-20T00:04:45.517" UserId="3039" />
  <row Id="17276" PostId="6599" Score="3" Text="Another reason might be low penalty for dropping out. If you drop out from a biology, chemistry or medical college program, who needs a half-educated person? But a CS dropout can still get a relevant programming job." CreationDate="2020-11-20T00:11:19.833" UserId="4746" />
  <row Id="17303" PostId="6599" Score="0" Text="+1 for the media hype, students considering higher education are being constantly told that an ability to code in python/js/perl/&lt;insert whatever language they are trying to sell courses for here&gt;, is essential in standing out/getting a job/getting a better salary etc. I know of people who went into a cs course without knowing how to use their os to do little more than check emails, write a document in word and print the document, and they only did that when there was no alternative" CreationDate="2020-11-21T10:05:58.467" UserId="9773" />
  <row Id="17211" PostId="6601" Score="4" Text="So: don't try to write a symphony if you can't write for any single instrument. Don't try to be a Conductor if you can't play any instruments. CS requires, as you say, ability in many areas at once. Why would we think that it is something that can be easily and directly taught? Or that many people could develop a flotilla of abilities at the same time? Because the initial success was with a few very motivated and 'gifted' people. That does not generalize. Let people choose, by doing some of it when they are young. And if they don't like it, they can do something else." CreationDate="2020-11-18T11:58:39.373" UserId="5349" />
  <row Id="17233" PostId="6601" Score="2" Text="Saying much the same thing, I think: computer programming is hard because &quot;math is hard&quot;. Even though there's precious little math in most programming, there's a **LOT** of the same analytical skill required for geometry proofs -- and not only do geometry proofs require skills that most people hate (because apparently most people's brains aren't wired that way), but also because apparently children aren't being taught proofs like I was 40 years ago." CreationDate="2020-11-18T17:48:17.580" UserId="3132" />
  <row Id="17249" PostId="6601" Score="3" Text="Upvoted for pointing out that many of the techniques we learn only make sense when working on big systems and/or teams.  Managing 1,000,000 lines of code is very different from managing 100 — and much harder to demonstrate…" CreationDate="2020-11-18T21:31:10.543" UserId="9454" />
  <row Id="17257" PostId="6601" Score="2" Text="@RonJohn Computer programming per se is not CS. I can program most everyday business applications using existing tools and libraries, but I would be hard pressed if I had to attend university CS, which deals with the math underlying many of the libraries." CreationDate="2020-11-19T08:29:33.790" UserId="2760" />
  <row Id="17259" PostId="6601" Score="0" Text="@Gnudiff maybe I just went to the &quot;wrong&quot; University for a Comp Sci degree.  It was all about algorithms, evaluating them and using them.  (Then again, it was a mid-tier State school in the mid 1980s.  I've done quite well by it, though.)" CreationDate="2020-11-19T14:00:03.490" UserId="3132" />
  <row Id="18123" PostId="6601" Score="1" Text="I wasn't aware of Dijkstra comment, but I completely support it.  The range and scope of what I need to be aware of is incredible in the time domain alone.  When tweaking circuits on a wafer, I need to think in femtoseconds.  When working with signals on a PCB, I'm usually in nanoseconds.  For communication within a room, microseconds.  Network hardware signaling works in milliseconds.  Human reaction times in deciseconds.  Long-range networks in seconds.  And from there the time grows longer.  Subsystem processing times.  Backup retrieval times.  Earth-Mars-Earth comm times. 1::10^18 already." CreationDate="2021-08-06T02:20:06.920" UserId="10901" />
  <row Id="17210" PostId="6602" Score="2" Text="This is somewhat the answer I was going to write - why do people begin a course of study at 18 with no experience? That seems bananas to me, and is the real issue that needs to be addressed. For most complex subjects, apprenticeship is what has worked, historically, and what will work for human beings. The formula is: get people to do simple but useful things when they are young, and gradually raise the level of difficulty so that they gain expertise in a reasonable way. They each top out somewhere and you have the normal range of mastery. The only problem is: you can't package and sell that." CreationDate="2020-11-18T11:53:31.747" UserId="5349" />
  <row Id="17214" PostId="6602" Score="13" Text="@ScottRowe Apprenticeships work well when there are enough unskilled tasks that someone can do whilst learning the skill. The problem with software engineering is that there is so much to learn to be sufficiently competent for the reletively unskilled tasks that apprenticeship style teaching only really becomes relevant once you reach the level that CS undergraduate course teach to." CreationDate="2020-11-18T13:22:14.023" UserId="9706" />
  <row Id="17215" PostId="6602" Score="1" Text="As to why people don't have enough prior experiance, a big part is that software engineering salaries are high enough compared to educators salaries that you really need some other compensation to provide a comparable package to industry, and only academia can offer that where teachers are primarily researchers. And even that is hit and miss." CreationDate="2020-11-18T13:23:44.677" UserId="9706" />
  <row Id="17258" PostId="6602" Score="0" Text="&quot;They come, I think, largely because they believe that this is where the jobs are.&quot; Which is not wrong. CS is one of the fields where it is common to hire dropouts and not too hard to land a job even if you didn't finish the degree. So why would students that are mostly interested in the money side of the equation keep studying when they are already offered well paid jobs long before they reach the end of the program?" CreationDate="2020-11-19T13:20:04.900" UserId="9739" />
  <row Id="17260" PostId="6602" Score="0" Text="@blues I think that this question mostly refers to the students who are dropping out from cs1, because they either didn't like it or couldn't keep up.  But that's certainly a good observation about upperclassmen, and also about graduate students who don't finish because they are specialized enough in something like AI to earn mid-6-figure salaries even without their PhD." CreationDate="2020-11-19T15:48:29.457" UserId="27" />
  <row Id="17324" PostId="6602" Score="0" Text="Do, e.g., business students really come in with a lot of past experience? Engineering students? It seems like they might have some idea of what it is, but maybe more of a Hollywood idea than knowing what actually goes into a degree in the subject." CreationDate="2020-11-23T19:30:18.943" UserId="1407" />
  <row Id="17239" PostId="6604" Score="1" Text="Your last paragraph, is true in general. To get to the 10,000 hour mastery mark, you need to put in those first 9999 hours." CreationDate="2020-11-18T18:49:36.457" UserId="5349" />
  <row Id="17253" PostId="6604" Score="1" Text="This answer matches my experience pretty exactly. I studied CS from the mid-1980s to the early 1990s in a European country. 50% of the students in my cohort dropped out during the first two years as well. The last bullet point in particular rings true for me: I almost failed due to the stringent math requirements, despite doing well in math back in high school." CreationDate="2020-11-18T22:36:27.433" UserId="1940" />
  <row Id="17255" PostId="6604" Score="1" Text="I've always wondered why corporate IT recruiters believe CS is relevant to most of the positions they are trying to fill. The only answer I have been able to think of is: *it has 'computer' in the name*" CreationDate="2020-11-19T03:06:51.953" UserId="1417" />
  <row Id="17280" PostId="6604" Score="1" Text="Your last bullet point is THE reason in my experience, and is still very true in the US today! As a current CS student, I'd love nothing more than to have a computer science class that actually challenged me, but 95% of my time has been spent on the associated math and physics requirements, which is why I'm currently in my 4th year of a &quot;2-year&quot; college, hoping to transfer to a &quot;4-year&quot; college next fall." CreationDate="2020-11-20T01:09:11.167" UserId="9757" />
  <row Id="17226" PostId="6605" Score="6" Text="I agree that there's a long-time institutional failure to distinguish between &quot;computer science&quot; and &quot;software engineering&quot;. But even if we cut out the heavy research/math components: many or most students can't pass even the introductory programming course that you're talking about. Nowadays there are indeed &quot;coding bootcamps&quot; to provide the non-theoretical training. But, they have little oversight, and an interesting tidbit in this article: &quot;only 12% of bootcamp grads didn’t previously complete a four-year college degree&quot; https://www.thepennyhoarder.com/make-money/side-gigs/coding-bootcamp/" CreationDate="2020-11-18T17:09:37.100" UserId="8137" />
  <row Id="17229" PostId="6605" Score="0" Text="I can't access the article - the operators block my country." CreationDate="2020-11-18T17:28:09.677" UserId="9182" />
  <row Id="17230" PostId="6605" Score="0" Text="I don't doubt your quote that &quot;only 12% of bootcamp grads didn’t previously complete a four-year college degree,&quot; but I'm trying to figure out why you need to go to a programming boot camp if you've got a degree." CreationDate="2020-11-18T17:29:56.283" UserId="9182" />
  <row Id="17232" PostId="6605" Score="1" Text="The prior degree is probably in a non-CS subject, and they want retraining for a new career. Example given in article is someone with a prior economics degree. This may possibly support my argument that CS people need a wide domain knowledge in many areas to succeed." CreationDate="2020-11-18T17:41:50.427" UserId="8137" />
  <row Id="17234" PostId="6605" Score="2" Text="It's been 35 years since I implemented a non-trivial hashing algorithm, b-tree, or invert index, and almost as long since I implemented a linked list.  I also was a DP programmer (now a DBA), but even still that background has bee very useful in choosing the best library or database design to use." CreationDate="2020-11-18T17:57:33.683" UserId="3132" />
  <row Id="17238" PostId="6605" Score="0" Text="The best way to get a second degree is to get the first one first. (Sounds like Yogi Berra, or something) The best way to be able to master computer topics is to be able to master topics. If you can get a degree, you can probably do what you did to get the degree." CreationDate="2020-11-18T18:47:44.963" UserId="5349" />
  <row Id="17261" PostId="6605" Score="8" Text="I don't understand why you don't think knowing how algorithms work doesn't make you a better programmer.  Understanding concepts like graphs and time complexity have definitely made me a better programmer.  A lot of people who I've worked with who claim CS isn't helpful for programming make very naive choices that lead to inefficient, overly complex, and inefficient solutions and have no idea how poor their choices were or why." CreationDate="2020-11-19T16:12:30.583" UserId="2087" />
  <row Id="17263" PostId="6605" Score="1" Text="@JimmyJames:  I'm **not** saying that you don't have to understand how an algorithm works.  I'm saying I don't want to do research on better ones.  Just like a mechanic needs to know when to use a flare nut wrench instead of an open end wrench, a programmer needs to know when to use a hash table, or a dictionary or a list.  To do that, you have to know something about how they work, though you don't necessarily need to be able to design the hashing mechanism behind the dictionary." CreationDate="2020-11-19T16:19:56.510" UserId="9182" />
  <row Id="17265" PostId="6605" Score="3" Text="I just found this to be a bit of a non-sequitur &quot;... the theory, the mathematics of how computer logic and algorithms work. That is, studying things that would let you make better computers or discover new algorithms.&quot;  i.e. &quot;... the *physics, the engineering* of how *engines and combustion* work. That is, studying things that would let you make better *cars* or discover *new automotive technologies*.&quot;  Knowing how things work definitely makes you a better technician.  It's not just for research." CreationDate="2020-11-19T16:39:23.013" UserId="2087" />
  <row Id="17266" PostId="6605" Score="5" Text="But overall, I agree with your sentiment.   I personally think CS programs need to get serious about having a software engineering track/degree.  A lot of CS programs are pretty much already there, they just don't call it that.   Maybe your program was a more rigorous CS program that what I experienced.  I also started in Physics and used credits from that program to fulfill some CS requirements so my experience was somewhat unique." CreationDate="2020-11-19T16:42:03.370" UserId="2087" />
  <row Id="17267" PostId="6605" Score="1" Text="A mechanic needs to know about combustion.  He doesn't need to know enough about it to develop a stratified charge combustion chamber.  His job is to fix the motor, not design one.  In the same way, a carpenter building a house needs to know what width of board to use as the joists under a floor for a particular span - but he doesn't have to know how to calculate it from the underlying physics and material  properties." CreationDate="2020-11-19T16:47:41.813" UserId="9182" />
  <row Id="17268" PostId="6605" Score="2" Text="@JRE If that's your point, I agree.  The way it's written in the answer seemed to imply that knowing how algorithms work isn't helpful for development.  My experience is that a distressing number of people think that is the case.  The amount of unnecessary electricity and hardware that is used because of that reason is staggering." CreationDate="2020-11-19T18:10:40.853" UserId="2087" />
  <row Id="17326" PostId="6613" Score="0" Text="&quot;because it’s a branch of symbolic logic&quot;. This is the &quot;CS is misspelled math&quot; fallacy. There is much more to CS than that." CreationDate="2020-11-24T13:35:46.010" UserId="1293" />
  <row Id="17327" PostId="6613" Score="0" Text="@Buffy: yes, there is.  But CS isn’t about what an Ethernet cable does." CreationDate="2020-11-24T23:49:52.487" UserId="9396" />
  <row Id="17328" PostId="6613" Score="0" Text="Hmmm. Given that I taught CS for about 40 years, I understand that and, moreover, what it does include." CreationDate="2020-11-24T23:52:13.307" UserId="1293" />
  <row Id="17292" PostId="6615" Score="0" Text="Actually, computer science is much more than what you suggest. This presents a very narrow view." CreationDate="2020-11-20T16:05:42.793" UserId="1293" />
  <row Id="17294" PostId="6616" Score="3" Text="Let me give a warning about such things, as I've done on another site. Any cheating detection system, automated or not, needs to have the property that it produces zero false positives. But it isn't well understood that a system permitting no false positives will almost invariably produce some false negatives. But the consequences of error in a cheating detection system are so asymmetrical that such a rule is required. So, to use such a script, if it exists, you need additional measures as well to assure fair treatment." CreationDate="2020-11-20T16:37:56.420" UserId="1293" />
  <row Id="17315" PostId="6616" Score="0" Text="If your question is different from the one indicated in the closed message, please edit the question to make the difference clearer and it can be reopened." CreationDate="2020-11-22T22:55:05.427" UserId="27" />
  <row Id="17954" PostId="6622" Score="0" Text="I am not quite grasping, but I think you are saying something like: two similar-seeming conceptualizations are actually about very different things, and this is never made explicit. If it was, the reaction of students might reasonably be: &quot;just teach me the one thing that works instead of two things that I have to learn how to connect together.&quot; This is why I often say, teach how the computer actually works instead of teaching a language-focused approach, like with Lisp or other machine-independent methods. Teach about the machine, then how the language is a tool to work with the machine." CreationDate="2021-05-02T02:23:40.487" UserId="5349" />
  <row Id="17318" PostId="6625" Score="1" Text="BTW, this question is now the subject of a meta.  (link [here](https://cseducators.meta.stackexchange.com/questions/484/is-a-question-about-the-nature-of-education-topical))" CreationDate="2020-11-23T16:20:34.757" UserId="27" />
  <row Id="17319" PostId="6625" Score="1" Text="Where is this? US? Other? Also computer science engineering is an uncommon term and software engineering means different things to different people." CreationDate="2020-11-23T16:40:09.440" UserId="1293" />
  <row Id="17320" PostId="6625" Score="0" Text="Almost sounds like a reversed workplace question. Less &quot;what's the difference?&quot; and more &quot;which do I need?&quot;" CreationDate="2020-11-23T16:51:32.793" UserId="104" />
  <row Id="17322" PostId="6625" Score="1" Text="Does this answer your question? [On studying Computer Science vs. Software Engineering to become a proficient coder](https://cseducators.stackexchange.com/questions/5644/on-studying-computer-science-vs-software-engineering-to-become-a-proficient-cod)" CreationDate="2020-11-23T17:24:30.223" UserId="104" />
  <row Id="17878" PostId="6625" Score="0" Text="Be aware that Computer Science and Software Engineering are completely different fields. Also be aware that some programs are mis-named for various (possibly political) reasons. So a CS degree at one place might be nearly he same as a SE degree at another. Look at the articles on the two at Wikipedia to get an idea." CreationDate="2021-04-07T19:42:28.753" UserId="1293" />
  <row Id="17325" PostId="6626" Score="0" Text="&quot;because it’s a branch of symbolic logic&quot;. That is only a part of CS. There is much more." CreationDate="2020-11-24T13:30:50.963" UserId="1293" />
  <row Id="17341" PostId="6633" Score="0" Text="Did start out in software engineering but courses overlap. So I want to do something... but I'm feeling overwhelmed. For instance, a parent suggested doing edX R course re because they read that python &amp; R used in bioinformatics but I told them it's not used in comp sci really unless data science then they suggested a stochastic modeling course that uses Python. Python, Java, C, MATLAB, R. Probably my Java and C is rusty... And when I did the Bioinformatics courses which used python I think they were more accessible for people with just a 1 programming course rather than stretching skills." CreationDate="2020-11-29T09:24:48.810" UserDisplayName="user9790" />
  <row Id="17366" PostId="6633" Score="3" Text="I can't work out the meaning of the word &quot;re` in the question. It does not make any sense to me in this context." CreationDate="2020-12-06T16:21:41.343" UserId="204" />
  <row Id="20601" PostId="6633" Score="0" Text="I like this template. Grab any of those for your taste to make fun. https://en.wikipedia.org/wiki/Template:Computer_science [![List of Computer Science topics](https://i.stack.imgur.com/Gl2Tp.png)](https://i.stack.imgur.com/Gl2Tp.png)" CreationDate="2020-12-07T14:15:40.090" UserId="9632" />
  <row Id="17339" PostId="6634" Score="0" Text="That's a bit hard to know where to start with ~20 courses... And can't talk to a course tutor because I pulled out due to illness..." CreationDate="2020-11-29T08:53:55.723" UserDisplayName="user9790" />
  <row Id="17340" PostId="6635" Score="0" Text="Haven't done OS yet because I got sick that semester... And that's part of what I meant by weird ordering... and then that messes up other course order... so you do other courses that you can do and then you get sick again..." CreationDate="2020-11-29T09:07:25.950" UserDisplayName="user9790" />
  <row Id="17342" PostId="6635" Score="0" Text="I was doing a theory of computing course but COVID happened... and pulled out.. (Must note the Uni had a information technology, software engineering and science (computer science major) degrees before they introduced a computer science degree and then they introduced a few more specific courses and lot of courses overlapped." CreationDate="2020-11-29T09:30:27.197" UserDisplayName="user9790" />
  <row Id="17955" PostId="6636" Score="0" Text="The successful students get to keep working with computers. They actually get *paid* to do it." CreationDate="2021-05-02T02:24:28.627" UserId="5349" />
  <row Id="17346" PostId="6640" Score="1" Text="Perfect answer given the vagueness of the question!! Nice!" CreationDate="2020-11-29T23:25:44.107" UserId="27" />
  <row Id="17348" PostId="6643" Score="2" Text="Can it write FizzBuzz? Can it write FizzBuzz in a special version that prints &quot;manziel&quot; for every number divisible by 13? While this code generation tool is impressive, I have serious doubts that it can be applied to actually relevant problems. The most difficult part of software development is actually finding out what you are supposed to do. Finding a fast and efficient algorithm or data structure to solve you problem is - while certainly challenging - the simpler part of it" CreationDate="2020-11-30T15:23:58.887" UserId="9449" />
  <row Id="17353" PostId="6644" Score="0" Text="I suggest that you ask a question like this on one of the APCS lists and on the SIGCSE list. You may find people there who have done something like this." CreationDate="2020-12-01T13:39:23.383" UserId="1293" />
  <row Id="17355" PostId="6644" Score="0" Text="You mean mailing lists like this one? https://sigcse.org/sigcse/membership/mailing-lists.html" CreationDate="2020-12-01T20:07:35.217" UserId="6387" />
  <row Id="17356" PostId="6644" Score="0" Text="Yes, the sigcse members list. You need to join SIGCSE but the cost is reasonable (by US standards, anyway)." CreationDate="2020-12-01T20:20:10.410" UserId="1293" />
  <row Id="17367" PostId="6644" Score="1" Text="MIT Scratch is good to start with, then Berkeley snap has everything you need to teach first year undergrad. Then python turtle module for when you need to do text based." CreationDate="2020-12-06T16:26:34.957" UserId="204" />
  <row Id="17371" PostId="6644" Score="0" Text="@Buffy can you share the link to APCS community mailing list with me? I cannot google it by just &quot;apcs mailing list&quot; or &quot;apcs&quot;." CreationDate="2020-12-08T09:55:50.107" UserId="6387" />
  <row Id="17372" PostId="6644" Score="0" Text="AP is part of the College Board: https://apcommunity.collegeboard.org" CreationDate="2020-12-08T12:16:37.730" UserId="1293" />
  <row Id="17359" PostId="6646" Score="0" Text="Well, Scratch is a good choice for sparking the interest, but for the systematic course we're looking for something with text as basis. Fantasy consoles like pico-8, Coumir with executors: https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%9C%D0%B8%D1%80 etc. Something simple as an ecosystem able to show basic concepts at the core of CS." CreationDate="2020-12-03T13:21:18.957" UserId="6387" />
  <row Id="17360" PostId="6647" Score="0" Text="Github is an interesting suggestion. I have considered github-pages to host a web site to display general info about the course, s. a. announcements, schedule and individual sections for each self-contained subject with corresponding course material. But instead, just using a bare bone github interface could be simpler solution. But I am still waiting for an opinion on Microsoft Teams and weather it can serve both as communication &amp; collaboration tool and a as a platform to organize course material thus potentially replacing Discord + Web-site (or github)." CreationDate="2020-12-03T15:36:53.130" UserId="9803" />
  <row Id="17361" PostId="6647" Score="0" Text="Also there is a prospect to expand this project nation-wide to encompass all high-shools. What we are doing now can be seen as a prototype and proof of concept for that bigger project. Of course, for such a ambitious undertaking actual professional educators will (must) take over, but that's actually why I have been considering an LMS because there is this long-term goal in mind." CreationDate="2020-12-03T15:42:42.307" UserId="9803" />
  <row Id="17362" PostId="6647" Score="1" Text="@steakexchange I don't really know Microsoft Teams, so I can't comment on it. Something like that or Google Classroom might be useful, since it scales, and might not require you to do all of the school-level stuff that you don't need.  (I'm sorry that I don't know more about them!)" CreationDate="2020-12-03T15:51:58.540" UserId="27" />
  <row Id="17363" PostId="6647" Score="1" Text="no problem at all, your suggestions and remarks have are very useful. I will be considering github seriously because I like the idea of familiarizing young students with github early on." CreationDate="2020-12-03T15:54:43.480" UserId="9803" />
  <row Id="17364" PostId="6652" Score="0" Text="I'm glad to be wrong about this one! :)" CreationDate="2020-12-04T18:06:37.300" UserId="27" />
  <row Id="18020" PostId="6652" Score="1" Text="These concepts are very important foundational software engineering principles, but complete novices could care less. They want to make interactive stories, animations and games as quickly as possible, and Python is a huge barrier to this happening initially. It's a blank slate where one typo causes the program to stop. Typing is hard to learn and struggling with two things at once can kill interest. Once students have spent a semester or two mastering Scratch and have naturally run into limitations and frustrating bugs, then they'll be receptive to typed languages and SWE principles." CreationDate="2021-05-22T21:10:04.067" UserId="9426" />
  <row Id="17365" PostId="6655" Score="0" Text="This is quite an interesting and different ordering than I'm used to.  I assume that recursion (and functions in general) don't entirely &quot;stick&quot; yet, but must be revisited later.  Is this impression correct?  If so, this is an excellent ordering to begin a nice spiral through introductory programming." CreationDate="2020-12-04T23:36:31.237" UserId="27" />
  <row Id="17369" PostId="6655" Score="0" Text="Functions come first.  They are a key way of avoiding &quot;repeating yourself.&quot; Remembering a procedure under a name is key." CreationDate="2020-12-07T01:06:28.407" UserId="21" />
  <row Id="17373" PostId="6659" Score="0" Text="Nice that the question comes during Advent season. Get some practice now with [Advent of Code](https://adventofcode.com/). Have a little fun at the same time." CreationDate="2020-12-09T02:54:31.320" UserId="104" />
  <row Id="17377" PostId="6659" Score="2" Text="This site is quite good: https://cp-algorithms.com/" CreationDate="2020-12-09T19:53:05.540" UserId="8562" />
  <row Id="17413" PostId="6659" Score="0" Text="@kaya3 it is an excellent resource. Thank you." CreationDate="2020-12-18T03:21:29.020" UserId="9831" />
  <row Id="17375" PostId="6660" Score="0" Text="I am from India." CreationDate="2020-12-09T04:17:35.920" UserId="9831" />
  <row Id="17382" PostId="6663" Score="1" Text="Go through the first hundred or so Project Euler questions, than tackle #120, 140, 160 etc. when things get interesting. See if you can solve problems with less than 200 answers." CreationDate="2020-12-10T11:40:20.080" UserId="4529" />
  <row Id="17378" PostId="6664" Score="0" Text="Out of curiosity, are you having the students purchase this book, or are you only using it as a guide for yourself while designing the course?" CreationDate="2020-12-10T01:50:08.463" UserId="27" />
  <row Id="17379" PostId="6664" Score="0" Text="I would recommend that the students purchase the book, yes" CreationDate="2020-12-10T02:02:40.757" UserId="9840" />
  <row Id="17380" PostId="6665" Score="1" Text="Thanks for your comment. I was looking through the author's github and I see that his license allows redistribution of the notebooks. I think I will use my own &quot;custom&quot; notebooks just for making videos. Then I will distribute the author's notebooks, which have the coding examples." CreationDate="2020-12-10T02:43:59.963" UserId="9840" />
  <row Id="17381" PostId="6665" Score="1" Text="@StrugglingStudent42 I'm glad I could help!" CreationDate="2020-12-10T02:48:36.420" UserId="27" />
  <row Id="17385" PostId="6667" Score="0" Text="Thanks indeed. These are about high mathematics, rocket trajectories and the like. I'm also interested in those who did business calculations, the more profane works." CreationDate="2020-12-11T14:48:24.943" UserId="274" />
  <row Id="17386" PostId="6667" Score="0" Text="Actually, business calculations were automated long before that era since they were more &quot;regular&quot;. Start here (https://en.wikipedia.org/wiki/Punched_card) and click a lot of links. Find the IBM card sorter along the way. But the mathematics employed by Johnson and her peers was Analytic Geometry, which is now considered an elementary subject, but it wasn't then. I once knew a woman (lots older than myself) who earned her PhD for Analytic Geometry. Probably that isn't possible now. Math advances." CreationDate="2020-12-11T15:43:06.587" UserId="1293" />
  <row Id="17387" PostId="6667" Score="0" Text="The book, while less entertaining, is considerably more informative than the movie. Perhaps as a class, the movie could be watched, and then the book recommended. Reference here is to the adult book, as I've never encountered, or knew of, the book for young readers." CreationDate="2020-12-12T04:50:26.233" UserId="104" />
  <row Id="17388" PostId="6667" Score="0" Text="@GypsySpellweaver, there is also an illustrated version for still younger readers as well as translations into many other languages." CreationDate="2020-12-12T12:31:30.507" UserId="1293" />
  <row Id="17407" PostId="6668" Score="0" Text="Indeed this is what I am looking for." CreationDate="2020-12-17T10:27:48.467" UserId="274" />
  <row Id="17400" PostId="6669" Score="1" Text="Are you teaching from a specific textbook? (If so: look closely and follow that notation. It varies by book.)" CreationDate="2020-12-15T06:43:43.283" UserId="8137" />
  <row Id="17405" PostId="6669" Score="0" Text="Yes, our reference textbook writes the logic notation as A NOR B and A NAND B." CreationDate="2020-12-17T05:58:55.017" UserId="9845" />
  <row Id="17406" PostId="6669" Score="0" Text="Then I do think you should follow that same convention. I've seen it other books, too." CreationDate="2020-12-17T06:01:08.247" UserId="8137" />
  <row Id="17392" PostId="6670" Score="2" Text="This question needs some punctuation. As is it fills by head with ideas, only I do not know exactly what they are." CreationDate="2020-12-13T10:54:17.830" UserId="204" />
  <row Id="17393" PostId="6670" Score="1" Text="Are you and the student confusing Copyright infringement with plagiarism?" CreationDate="2020-12-13T10:54:49.183" UserId="204" />
  <row Id="17394" PostId="6670" Score="1" Text="I think I understand Scenario 2, but Scenario 1 is still opaque to me. Can you give more clarification?" CreationDate="2020-12-14T04:10:08.803" UserId="8137" />
  <row Id="17390" PostId="6673" Score="3" Text="Niiiiiiiiice. Love it." CreationDate="2020-12-12T22:00:56.133" UserId="1293" />
  <row Id="17391" PostId="6673" Score="1" Text="@Buffy Getting praise from you always feel particularly satisfying.  :D" CreationDate="2020-12-12T22:01:48.333" UserId="27" />
  <row Id="17479" PostId="6673" Score="0" Text="Very good. Sounds much like the very script I myself use in this situation too!" CreationDate="2021-01-05T22:00:43.450" UserId="694" />
  <row Id="17408" PostId="6674" Score="0" Text="If you could tell what you are looking for what sub-stream within programming and such I could Improve my answer." CreationDate="2020-12-17T14:50:26.913" UserId="9831" />
  <row Id="17412" PostId="6674" Score="0" Text="Again the competition is for competitors wo are interested in the respective field, not the other way around." CreationDate="2020-12-18T03:17:44.767" UserId="9831" />
  <row Id="17398" PostId="6675" Score="0" Text="Oh man, I haven't thought about that book in *years*.  I remember laughing so hard while I read it that I squirted water out of my nose.  And the stories of Los Alamos were pure madlad craziness!" CreationDate="2020-12-14T15:23:24.743" UserId="27" />
  <row Id="17403" PostId="6676" Score="0" Text="When I was self-teaching in 9th grade on a PDP-11 terminal, I wrote simple programs in BASIC (or a script language... I forget after several decades) to create shapes on the terminal screen using asterisks and spaces. This requires nested loops, and pretty quickly rewards creating functions. So, a &quot;**motivating example**&quot; will teach the need for proper design. It is simply too hard to copy-paste the code in multiple places, change it, fix bugs and so on. Then functions seem like &quot;a pretty neat idea.&quot; Simplifying the code becomes an organizing impulse. Choose projects that build." CreationDate="2020-12-16T16:37:21.260" UserId="5349" />
  <row Id="17409" PostId="6680" Score="2" Text="What courses have you had? Data structures? Algorithms? More?" CreationDate="2020-12-17T19:59:25.147" UserId="1293" />
  <row Id="17411" PostId="6680" Score="2" Text="And where did this list of topics come from? Is your instructor learning this stuff along with her students?" CreationDate="2020-12-17T20:12:36.240" UserId="1293" />
  <row Id="17415" PostId="6680" Score="0" Text="I had Data Structures, Algorithms, Discrete Mathematics, Digital logic, C programming, Theory of Computation, and Computer Organization and Architecture, till now, and I have know about the basics of Java... These are the courses which I had @Buffy" CreationDate="2020-12-18T06:06:53.340" UserId="9125" />
  <row Id="17416" PostId="6680" Score="0" Text="`And where did this list of topics come from?`: It is given in our course curriculum list.&#xA;`Is your instructor learning this stuff along with her students?`: I do not know sir, I feel frustrated, she blindly just reads the Hebert Schildt chapter by chapter selectively as class slides and the topics mentioned in the course curriculum are not explained properly. Please help me. I beg." CreationDate="2020-12-18T06:09:33.057" UserId="9125" />
  <row Id="17424" PostId="6680" Score="0" Text="Please help me out, anyone, if possible..." CreationDate="2020-12-19T05:43:48.267" UserId="9125" />
  <row Id="17425" PostId="6680" Score="2" Text="I posted a small answer for you, @RanMouri.  Questions about the material itself are off-topic on our site, but if you have a specific question, like iterators, you could always try your luck in our [chat room](https://chat.stackexchange.com/rooms/59174/the-classroom).  The folks there tend to be very nice." CreationDate="2020-12-19T08:01:21.057" UserId="27" />
  <row Id="17428" PostId="6680" Score="0" Text="&quot;Questions about the material itself are off-topic on our site&quot;: I did not get it @BenI." CreationDate="2020-12-19T08:27:19.220" UserId="9125" />
  <row Id="17430" PostId="6680" Score="2" Text="Given the list of subjects you have already had, I doubt that there is a book other than a highly theoretical one that covers these topics. Big Java (Objects Early) by Cay Horstman covers a lot of it, but it is intended for beginners, so much of it would be boring." CreationDate="2020-12-19T16:00:31.693" UserId="1293" />
  <row Id="17431" PostId="6680" Score="2" Text="I could provide some references that you could use, but it wouldn't be a book for all of it." CreationDate="2020-12-19T16:04:28.297" UserId="1293" />
  <row Id="17404" PostId="6681" Score="0" Text="This is very practical, and very applicable to the age-group.  I've done similar things in the past -- that level of responsibility works wonders for kids at these ages.  I really love this answer." CreationDate="2020-12-17T01:16:38.677" UserId="27" />
  <row Id="17410" PostId="6687" Score="0" Text="This is the first time I've ever encountered multiple multiple assignments in a single statement like that.  Weird!" CreationDate="2020-12-17T20:09:07.490" UserId="27" />
  <row Id="17574" PostId="6687" Score="0" Text="That's rather typical in python. It's called iterator unpacking." CreationDate="2021-01-22T17:57:32.380" UserId="9864" />
  <row Id="17444" PostId="6689" Score="1" Text="My most common use pattern on that is `debug=false`" CreationDate="2020-12-29T15:01:14.163" UserId="4116" />
  <row Id="17418" PostId="6691" Score="2" Text="Are you referring to **CLRS**?" CreationDate="2020-12-18T11:27:38.293" UserId="9831" />
  <row Id="17419" PostId="6691" Score="0" Text="Yes. Basically, I need preliminary curricula or something like that to give it out as an additional reading before the course." CreationDate="2020-12-18T12:48:08.520" UserId="6387" />
  <row Id="17420" PostId="6691" Score="0" Text="Already found the answer from Cormen himself: https://www.quora.com/What-textbook-did-the-CLRS-authors-use-before-CLRS But it's sill interesting who's using which courseware in their local environments. Because Cormen works with Ivy league students, their background is a way different than of regular students." CreationDate="2020-12-18T12:51:31.160" UserId="6387" />
  <row Id="17421" PostId="6691" Score="2" Text="What kind of background do the kids have before you get them?  If they're coming from absolutely zero, then that is a very different question than if they've taken some sort of **cs1** equivalent." CreationDate="2020-12-18T14:53:20.077" UserId="27" />
  <row Id="17432" PostId="6691" Score="0" Text="Zero background, we don't suppose any background like LOGO or Pascal-based programming foundations before." CreationDate="2020-12-21T13:04:36.883" UserId="6387" />
  <row Id="17422" PostId="6693" Score="1" Text="This is a real-world and self-contained example. I like it very much." CreationDate="2020-12-18T17:38:53.300" UserId="793" />
  <row Id="17437" PostId="6694" Score="0" Text="Having taken 6.001 and Algorithms (from Leiserson), I disagree with the recommendation of 6.001. Substitute your local programming course." CreationDate="2020-12-22T03:39:19.383" UserId="283" />
  <row Id="17427" PostId="6696" Score="0" Text="Thanks for the materials. But I know about concepts of chapter 11 in the material shared. I had a basic Java in our high school and as such I know the concepts which are said in chapter 11 about polymorphism, much more related to oops concept. But the place where I am having problem is that I want to know what are &quot;design patterns&quot;, &quot;Iterator patterns&quot;, &quot;model view controller pattern&quot;. I have the Java-Complete Reference- Hebert Schildt, but I have not come across these topics in the text. It would be very helpful for me, if a text book is recommended to me, which deals with these topics." CreationDate="2020-12-19T08:25:47.570" UserId="9125" />
  <row Id="17429" PostId="6696" Score="0" Text="Just googling out the topics is fetching results, but they are not quite explanatory in the sense that they not quite complete or sequential. I am looking for a learning resource which deals with all the topics (possibly) and as well say the pros or cons of an approach with full co-relation between the topics. Ah I see these are too much a demand, but yet I feel a correct textbook should be like this and a reference manual (hebert Schildt) is not supposed to contain these aspects. Rather the text is a bit too dry without creating interest, yet the said is being followed at our place..." CreationDate="2020-12-19T08:35:23.207" UserId="9125" />
  <row Id="17977" PostId="6699" Score="0" Text="The smallest factor (if it exists) if $n$ is guaranteed  to be at most $\lfloor \sqrt{n} \rfloor$" CreationDate="2021-05-04T02:05:10.673" UserId="5219" />
  <row Id="17433" PostId="6700" Score="0" Text="This is a good one. With prime number I introduce them the for loop, for this one I will introduce while loop" CreationDate="2020-12-22T02:26:22.640" UserId="9884" />
  <row Id="17435" PostId="6702" Score="0" Text="I think finding the max, min, avg do have &quot;practical&quot; application." CreationDate="2020-12-22T02:43:46.747" UserId="9884" />
  <row Id="18101" PostId="6702" Score="0" Text="I have further challenged my students about max &amp; min, check my answer about &quot;Buy Low, Sell High&quot; :D" CreationDate="2021-07-16T03:37:55.633" UserId="9884" />
  <row Id="17434" PostId="6703" Score="0" Text="I feel the piggy bank assignment is bit easy for high school kids. Besides, for prime number I introduce for loop, for the answer about quotient/remainder I can introduce while loop, for piggy back, what is the main purpose ? Keeping track of several variables ?" CreationDate="2020-12-22T02:33:45.860" UserId="9884" />
  <row Id="17436" PostId="6703" Score="2" Text="@Qiulang I'm not sure what to tell you, other than that we do it.  `while (! input.equals(&quot;exit&quot;) )` can be a surprisingly hard structure for HS kids to suss out. Figuring out where to collect input, the placement of the `!`, and that you have to use `.equals` are all minor challenges, but they add up when they're put together like that. And, of course, we're talking about *beginner beginners* here -- if they had background, they wouldn't have to be practicing loops without arrays in the first place. The banking aspect is just a way to practice with strings, really." CreationDate="2020-12-22T02:50:40.450" UserId="27" />
  <row Id="17438" PostId="6703" Score="0" Text="On a side note do you explain to them why array index starts from 0 ?" CreationDate="2020-12-22T03:46:57.467" UserId="9884" />
  <row Id="17439" PostId="6703" Score="0" Text="@Qiulang Not that early, no, but eventually we do.  (We have the benefit of a multi-year program.)  On our first pass-through, it is a lot about the mechanics and the Big Ideas -- we don't delve much into smaller details until our second big pass, when they're ready to begin to absorb a lot of the logic behind the mechanisms they've built up practical experience with." CreationDate="2020-12-22T04:36:24.563" UserId="27" />
  <row Id="17441" PostId="6704" Score="0" Text="I will let them do a in-place reverse, otherwise it is too easy. But that introduces another problem, we use python and string is immutable. If I then introduce list and string conversion I fear sidetracking the teaching of loop." CreationDate="2020-12-23T07:10:13.900" UserId="9884" />
  <row Id="17446" PostId="6707" Score="3" Text="You might browse https://en.cppreference.com/w/cpp and look at the various C++ versions and features. When you find something interesting, experiment with it and see if you find it useful." CreationDate="2020-12-29T18:54:03.833" UserId="4301" />
  <row Id="17448" PostId="6707" Score="1" Text="Recommend this lecture by Stroustrup circa 2014 on &quot;The Essence of C++&quot; in which along the way he highlights what he considers canonical C++14 usage: https://www.youtube.com/watch?v=86xWVb4XIyE" CreationDate="2020-12-30T01:00:45.043" UserId="8137" />
  <row Id="17452" PostId="6707" Score="1" Text="I read the list of features that were introduced in each new standard: As I read I smiled an said &quot;aah new feature-a, they took that from Lisp, but a different syntax&quot;, and &quot;aah new feature-b, they took that from Lisp, but a different syntax&quot;, … In the end my heart sank. I could learn this, but how could I ever hire someone that know it: C++ was already too big, now it is bigger." CreationDate="2020-12-31T23:48:09.803" UserId="204" />
  <row Id="17460" PostId="6707" Score="0" Text="Well, it has been \*cough\* decades since I coded Lisp, at uni, but I was thinking &quot;ooh, JS feature envy!&quot; a few times, so I know what you mean (+1). Why bother with promises when you already have callbacks (and Finite State Machines)? Why lambdas, when anything over a 2 or 3 line body is tempting unreadable/unmaintainable code, and anything shorter will be inlined by the compiler?  Fortunately, as I mentioned, most company coding standards forbid many of the frills. But, alas, they don't forbid interviewers from asking about them :-(" CreationDate="2021-01-02T08:41:08.857" UserId="4116" />
  <row Id="17445" PostId="6708" Score="0" Text="I do like Myers, but [he has retired form C++](https://www.reddit.com/r/cpp/comments/7j50cp/effective_modern_c17/). I am not sure why I even asked this, as code, despite being he &quot;be all and end all&quot; is actually the most trivial part of sotware development.  Btw, can hands dirty industry guys help you educators?" CreationDate="2020-12-29T16:49:41.277" UserId="4116" />
  <row Id="17447" PostId="6708" Score="2" Text="@MawgsaysreinstateMonica They help at my institution.  They do curricular review with us as part of our long-term planning and oversight.  It's very helpful!  We also sometimes have professionals come and speak to the students about careers." CreationDate="2020-12-29T20:45:55.140" UserId="27" />
  <row Id="17453" PostId="6708" Score="1" Text="Us industry folk can be the problem: Making students learn Java and C++ before they can program. However Lean, test-driven, revision-control, Unix, Free-software, and a few other practices would not go a miss." CreationDate="2020-12-31T23:52:45.633" UserId="204" />
  <row Id="17449" PostId="6709" Score="3" Text="car/vehicle, animal/dog are not only poor, they are fatally flawed. In teaching OO, you are not, fundamentally, teaching inheritance. I'll try to come up with something to suggest." CreationDate="2020-12-31T11:51:46.610" UserId="1293" />
  <row Id="17451" PostId="6709" Score="1" Text="Real practical example should be just that : real code from libraries or apps used in practice. For python look at popular libraries code such as numpy. Don’t do animals. Pull a hierarchy such as dataframe/series from pandas for instance." CreationDate="2020-12-31T19:30:10.937" UserId="6827" />
  <row Id="17753" PostId="6709" Score="0" Text="School, Student, Teacher, Course, Assignment" CreationDate="2021-03-02T11:49:35.003" UserId="927" />
  <row Id="18874" PostId="6709" Score="0" Text="If you do show them the article Python, you should mention that it's quite dated (in the sense that modern Java does almost every one of those things), but that the article is still worthwhile because of its super clear explanations of a number of programming concepts, and to illustrate that different languages really do have meaningful differences.  (Again, this list of specific differences is now dated, but that if we polled the languages today, there would be other differences now.)" CreationDate="2022-01-07T12:18:58.837" UserId="27" />
  <row Id="18875" PostId="6709" Score="0" Text="I know! The article was published in 2006 and I can't find a modern version of that." CreationDate="2022-01-07T12:23:05.193" UserId="9884" />
  <row Id="21441" PostId="6709" Score="0" Text="I find this question has some good answers too [Interesting Programming Exercises to Teach Inheritance?](https://cseducators.stackexchange.com/questions/4689/interesting-programming-exercises-to-teach-inheritance)" CreationDate="2023-09-17T10:21:54.797" UserId="9884" />
  <row Id="17450" PostId="6710" Score="0" Text="I have been struggling to a find a way teach OO because I have my doubt. Check my question here https://softwareengineering.stackexchange.com/questions/419122/does-oop-overemphasize-the-importance-of-noun-and-thus-put-action-verb-in-the-le" CreationDate="2020-12-31T15:34:20.087" UserId="9884" />
  <row Id="17454" PostId="6710" Score="0" Text="I am quite familiar with http://todomvc.com/ I probably can adapt it to my teaching." CreationDate="2021-01-01T02:38:44.777" UserId="9884" />
  <row Id="17455" PostId="6710" Score="0" Text="There are links to and explanations and examples of MVC (in Java) here: http://csis.pace.edu/~bergin. Sadly, the applet version no longer runs on the web." CreationDate="2021-01-01T13:18:53.283" UserId="1293" />
  <row Id="17457" PostId="6710" Score="0" Text="todomvc is not really about mvc but the the choices and the comparison of different web technologies to implement a todo list. I mentioned because you mentioned Sticky Notes." CreationDate="2021-01-01T15:27:55.780" UserId="9884" />
  <row Id="17525" PostId="6710" Score="0" Text="I found an interesting answer Alan Kay gave and updated my question again." CreationDate="2021-01-13T04:55:16.203" UserId="9884" />
  <row Id="17458" PostId="6711" Score="5" Text="Actually, no, a customer is not a subclass of address. That makes no sense. If it makes no sense then the software is conceptually broken and can't be maintained. One of the worst ideas ever to appear in an elementary book was to make Cylinder a subclass of Circle, just because the Circle class already had some fields that a Cylinder also needs." CreationDate="2021-01-01T21:46:39.140" UserId="1293" />
  <row Id="17459" PostId="6711" Score="0" Text="path is something they know and they notice the difference between windows and unix. Teaching pathlib really teaching something they can learn, think, explore. So it is not boring (my opinion)." CreationDate="2021-01-02T06:07:43.120" UserId="9884" />
  <row Id="17657" PostId="6711" Score="0" Text="Apologies @Buffy, it may not have been apparent that I use a Socratic approach towards trainees' learning. You and I both know about sub-classing and composition!" CreationDate="2021-02-04T22:21:51.243" UserId="5598" />
  <row Id="18050" PostId="6711" Score="0" Text="@Buffy: The inheritance idea was phrased as a question for the teacher to explore with the students. Not as the right answer. Exploring bad ideas that most (if not all) developers intuitively think of before they understand why it's a bad idea, is a really good and pro-active way to help your students get ahead of the curve as opposed to knowingly and unguidedly letting them fall into the trap." CreationDate="2021-06-02T09:40:12.527" UserId="2164" />
  <row Id="17492" PostId="6713" Score="0" Text="Karnaugh maps were useful in the past. I'm not sure they're still useful. Would you spend time teaching about vacuum tubes just because it's in the curriculum?" CreationDate="2021-01-09T12:39:22.557" UserId="1536" />
  <row Id="17493" PostId="6713" Score="0" Text="@YuvalFilmus I'm teaching a processor design class to 16 year olds who haven't ever seen an `and` gate before. The idea of a manageable set of steps to find a minimum number of terms is the important part here, and this one is simple enough to cover in about 35 minutes. I mean, I could do Quine–McCluskey, but I would have to dramatically increase the time I provide to delve into it, and then it becomes more of a course focus and less of a side idea to whet the appetite. Plus, the processor that we will be designing is simple and small enough that k-maps are certainly useful here." CreationDate="2021-01-09T14:51:34.580" UserId="27" />
  <row Id="17465" PostId="6714" Score="1" Text="Related -- Recall advice here that it's best to get away from relying on mnemonics: https://matheducators.stackexchange.com/questions/19289/mnemonics-to-correlate-the-definition-of-asymmetric-relation-and-antisymmetri/" CreationDate="2021-01-05T04:22:46.207" UserId="8137" />
  <row Id="17466" PostId="6714" Score="1" Text="Aside from that: Do you have an instructor who actually said you need to memorize that packet format? That would be mind-boggling." CreationDate="2021-01-05T04:24:25.810" UserId="8137" />
  <row Id="17467" PostId="6714" Score="0" Text="@DanielR.Collins, I had followed the guidance as you said in that math query and since you have made the logic clear to me, I shall not require any mnemonics for that. And yes I even remember that you guided me that many students use mnemonics as a crutch.the thing is that, I am preparing for a competitive exam, and till now computer networks have not been taught in my ug course(it shall be done in a later sem). However in previous year question of the said exam, I found questions, which could be better answered if this format is handy with you. Being a competitive exam, time is a constrain" CreationDate="2021-01-05T06:23:09.383" UserId="9124" />
  <row Id="17468" PostId="6714" Score="0" Text="@DanielR.Collins, I am doing self study, so no instructor said me to memorize that, but it is some thing which I felt that I should do, for the competitive exam..." CreationDate="2021-01-05T06:25:40.807" UserId="9124" />
  <row Id="17469" PostId="6714" Score="1" Text="Perhaps presenting some of the sample questions would be helpful for people to understand what the point is." CreationDate="2021-01-05T06:29:51.613" UserId="8137" />
  <row Id="17470" PostId="6714" Score="0" Text="https://www.geeksforgeeks.org/transport-layer-gq/&#xA;&#xA;This contains many questions which were asked about the various fields in the TCP header, like URG flag, Header size, acknowledgement number, window size ... And that's why I felt that keeping the TCP header format in memory, would give more confidence while solving such questions..." CreationDate="2021-01-05T06:44:02.337" UserId="9124" />
  <row Id="17471" PostId="6714" Score="2" Text="Out of 54 questions on that site, I see only 2 that are possibly answered by memorizing the TCP header format. Question 29 would require this plus 3 other packet formats being memorized. Question 51 just requires recognizing some of the names here. I suggest that memorizing the packet format is not a good use of energy (as usual)." CreationDate="2021-01-05T07:57:39.037" UserId="8137" />
  <row Id="17472" PostId="6714" Score="1" Text="@DanielR.Collins ok, once again thanks for the guidance..." CreationDate="2021-01-05T08:30:31.020" UserId="9124" />
  <row Id="17473" PostId="6714" Score="1" Text="Will you be tested on this?" CreationDate="2021-01-05T16:37:26.290" UserId="204" />
  <row Id="17476" PostId="6714" Score="0" Text="@ctrl-alt-delor not tested really, it is like an entrance exam, if i get good score, I shall be able to get into better universities for masters" CreationDate="2021-01-05T19:04:21.867" UserId="9124" />
  <row Id="17463" PostId="6715" Score="0" Text="Hello, Mr.Technician, and welcome to [cseducators.se]!  Unfortunately, you've come to the wrong forum.  This is essentially a focused forum for educators to do Q&amp;A about teaching strategies within the CS sphere.  That said, I've combined music and CS, so I don't see any reason why film and CS couldn't be combined.  CS is in every field nowadays, so for that sort of targeted advice, I might go to film industry forums and ask around there.  Ask about what people do, and ask about how to position yourself to hit the ground running in those fields.  You're on the right track.  Good luck!" CreationDate="2021-01-05T03:55:52.633" UserId="27" />
  <row Id="17464" PostId="6715" Score="0" Text="Welcome to [cseducators.se], a site designed to help people teach Computer Science, including many of the problems they might face when doing so. Self-learning can be seen as _teaching_, with yourself as the student. How to apply CS learning to different fields of work, however, is a bit beyond the scope of the site. That being said, computers, and those who can program them are just about everywhere, so using your CS education in cinematography ought to be simple enough. The &quot;How&quot; as they say, _is left as an exercise for the reader_." CreationDate="2021-01-05T03:58:31.720" UserId="104" />
  <row Id="17474" PostId="6715" Score="0" Text="Off topic, but: Yes. You sound like the type of person that I would love to teach. Both computer gaming, TV, and movies use both use these skills. In addition story telling will be of help in computer science." CreationDate="2021-01-05T16:53:32.580" UserId="204" />
  <row Id="17482" PostId="6715" Score="0" Text="Thanks! My apologies for being off topic, I will take this question elsewhere. :)&#xA;&#xA;@ctrl-alt-delor That's good to hear. I guess I'm just trying to find my niche and keep that in mind as I go through college." CreationDate="2021-01-06T04:03:45.967" UserId="9913" />
  <row Id="17483" PostId="6715" Score="0" Text="An outstanding cinematographer cum computer scientist could revolutionize our field. For a scratch-the-surface beginning see my answer on [youtube vs books](https://cseducators.stackexchange.com/a/6182/8837). Of course this is not remotely a subject that you chould study as a student yet but cutting edge research... if you want to be the researcher!" CreationDate="2021-01-06T04:27:30.753" UserId="8837" />
  <row Id="17599" PostId="6717" Score="1" Text="Just a note that if you use zoom, you can have the question formatted as you wish on a slide you screen share and set up a poll through zoom with just the answer options - you can see who answered what, I believe, and they can't see what others have answered until you share the poll results. Of course, this doesn't translate back to in person well." CreationDate="2021-01-26T22:01:56.523" UserId="919" />
  <row Id="17515" PostId="6720" Score="0" Text="Two important points, which I feel would add to this answer: 1) bots can read reactions and 2) you can see who gave which reaction. I'd suggest an edit but your answer is so self contained I have no idea where to." CreationDate="2021-01-11T21:05:51.343" UserId="9976" />
  <row Id="17477" PostId="6721" Score="0" Text="you are making valid and good points. I was wondering, how do they compare timing in competitive programming then?" CreationDate="2021-01-05T19:07:45.647" UserId="6410" />
  <row Id="17478" PostId="6721" Score="1" Text="For complete programs, not algorithms, a crude measure such as the difference between two unix times (in seconds) is probably enough. But algorithms are intended to be rather dense instruction sequences." CreationDate="2021-01-05T19:15:37.850" UserId="1293" />
  <row Id="17992" PostId="6721" Score="0" Text="@DrimadesBoy, I served as judge on ICPC once. Programming contests force to code one algorithm for a problem. As far as they allow several languages, each problem has a different timeout (rather generously assigned) for each language (to weed out brute-force style solutions and infinite loops).To me they look based on rough speed comparisons bewteen languages (e.g C/C++ 10 times faster than Java). There are several on-line judges around, check their time allowments for problems," CreationDate="2021-05-09T23:34:45.823" UserId="5219" />
  <row Id="17486" PostId="6727" Score="0" Text="Welcome to [cseducators.se]!  I removed the part of your question that was not within the scope of this site.  Good luck on your journey into programming!" CreationDate="2021-01-08T13:27:28.653" UserId="27" />
  <row Id="17489" PostId="6727" Score="0" Text="Sounds like you want to write a _[desktop GUI application](https://en.wikipedia.org/wiki/Graphical_user_interface)._ For that, you will want to choose and learn an _[application framework](https://en.wikipedia.org/wiki/Software_framework)._ A framework not only library provides library routines for your code to call, but it also provides an application &quot;skeleton&quot; that calls your code. There are many of them from which to choose.  For example, open [this page](https://github.com/fffaraz/awesome-cpp) and scroll down to the &quot;Frameworks&quot; heading." CreationDate="2021-01-08T23:09:07.053" UserId="1269" />
  <row Id="17490" PostId="6727" Score="0" Text="P.S., One thing to watch out for: Some frameworks only target a specific platform (e.g., Windows or Mac OS). Other frameworks allow you to write programs that can be easily &quot;ported&quot; to more than one platform.  The platform-specific ones may give you access to platform-specific features and &quot;themes&quot; or &quot;skins&quot; that the portable ones don't. The advantage of the portable ones should be self-evident." CreationDate="2021-01-08T23:12:43.533" UserId="1269" />
  <row Id="17505" PostId="6730" Score="6" Text="Industrial automation? Go right to a microcontroller with its peripheral registers, which often need individual bit manipulation." CreationDate="2021-01-10T22:57:14.763" UserId="660" />
  <row Id="17508" PostId="6730" Score="0" Text="@Bergi the only time I use bit-manipulation in work is a few SPI devices (that I interface to a Raspberry Pi)" CreationDate="2021-01-11T12:53:06.820" UserId="1127" />
  <row Id="17513" PostId="6730" Score="0" Text="@Bergi There's a class dedicated to microcontrollers later in the curriculum. Mine is about software engineering in general and there's only one lesson for bits topic (because one has to deal with bits here and there). Hardware would be an overkill, unfortunately." CreationDate="2021-01-11T19:24:59.217" UserId="9967" />
  <row Id="17520" PostId="6730" Score="0" Text="@ChrisH The Raspberry Pi runs on a microprocessor, not quite a traditional microcontroller (though marketing people have called some Celeron chips microcontrollers which muddies the waters somewhat but old-school embedded programmers don't think of them as microcontrollers, we created a new name for them instead: SOC). What you normally do in config files on the Raspberry Pi you'd flip bits of individual memory addresses on microcontrollers." CreationDate="2021-01-12T14:08:38.653" UserId="5450" />
  <row Id="17521" PostId="6730" Score="0" Text="@slebetman absolutely true. I also work with Arduinos which really are microcontroller-based (and in one case connected to an RPi  over TTL-232).  I was more commenting on the SPI aspect - the RPi is just a handy way of playing with SPi. 10 bits of ADC data or 12 bits of temperature data packed into 2 bytes, in an illogical order requires a bit of fiddling and shifting.  Configuring devices requires bit-masking config values." CreationDate="2021-01-12T14:17:56.943" UserId="1127" />
  <row Id="17522" PostId="6730" Score="0" Text="... This is getting a bit much for comments, but my thinking was RPi (or Linux box with something like Adafruit's FT232H breakout board) and some SPI devices on the other end to replace the Win32 stuff (which is all PC-based)" CreationDate="2021-01-12T14:18:30.380" UserId="1127" />
  <row Id="17531" PostId="6730" Score="0" Text="Perhaps: Decoding the std::ios_base::openmode bitmask (e.g., mode codes for fstream::open)? https://www.cplusplus.com/reference/ios/ios_base/openmode/" CreationDate="2021-01-13T23:55:50.170" UserId="8137" />
  <row Id="17496" PostId="6731" Score="1" Text="Large bitmap as an integer set representation is a good choice, there are even more applied tasks it's used for. STEM students are familiar with the sieve of Eratosthenes, however, searching for prime numbers won't look very practical to them." CreationDate="2021-01-10T14:03:59.807" UserId="9967" />
  <row Id="17507" PostId="6731" Score="0" Text="@PlushBeaver Both PostgreSQL and Elasticsearch combine index search results by mapping documents/rows to bits in a bitmap and then combining them using bit operations on them. Maybe that's more practical." CreationDate="2021-01-11T09:01:50.797" UserId="4335" />
  <row Id="17497" PostId="6732" Score="2" Text="I should note that the [IBM 7030 Supercomputer](https://en.wikipedia.org/wiki/IBM_7030_Stretch) and their first transistorized computer, didn't have an &quot;adder&quot;. It used table lookup to provide addition. It's nickname inside IBM was CADET (Can't Add, Doesn't Even Try). I knew the guy that gave it this name." CreationDate="2021-01-10T16:44:20.773" UserId="1293" />
  <row Id="17498" PostId="6732" Score="1" Text="Some engineers came to my colleague (hallway conversation) and said that they were having trouble designing an adder (remember, this was long ago) and that the result would be overly expensive - a substantial fraction of the cost. Bill suggested table lookup from which the nickname arose." CreationDate="2021-01-10T16:48:27.173" UserId="1293" />
  <row Id="17499" PostId="6732" Score="0" Text="@Buffy That is an amazing story!" CreationDate="2021-01-10T16:51:30.877" UserId="27" />
  <row Id="17500" PostId="6732" Score="0" Text="Hmmm. I'm getting CADET hits for the [1620](https://en.wikipedia.org/wiki/IBM_1620) instead. Perhaps I remember it wrong. Sneaky synapses." CreationDate="2021-01-10T17:01:10.440" UserId="1293" />
  <row Id="17501" PostId="6732" Score="0" Text="If you can do subtraction with only bit operations (yes, you can) then you can do square roots with only bit operations." CreationDate="2021-01-10T20:05:54.147" UserId="1293" />
  <row Id="17510" PostId="6732" Score="0" Text="I quite like number 1 here (and subsequently number 2). When I was first learning to do bitwise operations, I wasn't really sure what a practical application for them was, but I did find that this was a very fun thing to learn. It's also not overly complicated and can easily be solved on paper and implemented accordingly." CreationDate="2021-01-11T17:10:34.487" UserId="9973" />
  <row Id="17514" PostId="6732" Score="0" Text="After you mentioned case-insensitive string comparison, I started thinking about UTF-8 and varint encoding/decoding. Typically it's library stuff, but used almost everywhere." CreationDate="2021-01-11T19:38:02.497" UserId="9967" />
  <row Id="17517" PostId="6732" Score="0" Text="The IBM 7030 Stretch had two arithmetic units with multiple carry-propagate adders and carry-save adders. (@Buffy, you're thinking of the IBM 1620 which used table lookup.) The 7030's adders are described in http://www.bitsavers.org/pdf/ibm/7030/Bloch_EngrDesOfStretch_1959.pdf" CreationDate="2021-01-12T00:20:04.303" UserId="9978" />
  <row Id="17524" PostId="6732" Score="0" Text="@Buffy I have a vague memory of an ancient book of &quot;programming problems/exercises for the 1620&quot; which included overwriting the arithmetic tables to work in different number bases." CreationDate="2021-01-12T19:48:52.330" UserId="1352" />
  <row Id="17509" PostId="6735" Score="1" Text="And you just gave me an afternoon self-study idea :D" CreationDate="2021-01-11T14:09:35.717" UserId="9972" />
  <row Id="17511" PostId="6735" Score="0" Text="It would take one more 64-bit integer to keep track of the en-passant states of the pawns (just use `1` on any space that contains a pawn that has done it), and since the rules of promotion REQUIRE that pawns promote when they reach the end of the board, the two end rows can safely be used to store information about whether that team has castled.  So, I believe that means you can store a full game state in 8 64-bit ints, with 14 bits of information left over in those two castling rows.  6 for the piece types, one for color, and one for en-passant and castling.  Neat!!" CreationDate="2021-01-11T17:31:29.577" UserId="27" />
  <row Id="17512" PostId="6735" Score="0" Text="@BenI: See also [Smallest chess board compression](https://codegolf.stackexchange.com/questions/19397/smallest-chess-board-compression) challenge on [codegolf.se]." CreationDate="2021-01-11T18:22:27.967" UserId="1439" />
  <row Id="17516" PostId="6735" Score="0" Text="Truly excellent and interesting answer. Thanks." CreationDate="2021-01-11T22:52:04.640" UserId="2021" />
  <row Id="17837" PostId="6735" Score="0" Text="You can use bitboards for tic-tac-toe and simpler games if chess is out of scope." CreationDate="2021-03-29T21:58:22.140" UserId="9426" />
  <row Id="17546" PostId="6746" Score="1" Text="Hi, and welcome to [cseducators.se]!  This answer has a few problems: first, it's a link-only answer, and since we accumulate a lot of links, we ask that people give at least *some* sort of summary in case the link goes dead. Secondly, (and more importantly) it's not specifically an answer to the question being asked.  You can teach virtually anything using the socratic method (to better or worse effect).  There is nothing about binary or binary encoding within your link." CreationDate="2021-01-16T21:00:39.883" UserId="27" />
  <row Id="17548" PostId="6746" Score="0" Text="@BenI. I will update with more detail. That link contains a discussion of binary and binary encoding that takes up the vast, vast majority of the page. Are you sure you followed the correct link?" CreationDate="2021-01-17T12:35:19.057" UserId="4919" />
  <row Id="17549" PostId="6746" Score="0" Text="Ah, I see... I didn't scroll down far enough. On mobile, it appeared to be a very long wall of text about the socratic method, so I didn't go past the first 4 screens.  You're right that there is binary in there." CreationDate="2021-01-17T13:42:19.503" UserId="27" />
  <row Id="17550" PostId="6746" Score="0" Text="Yes. Although he mentions binary early on in the post, you're right it doesn't become exclusively focused on teaching binary until you scroll a half page (on my screen). I should have said it was specifically about teaching binary in my original post, though." CreationDate="2021-01-17T19:37:03.293" UserId="4919" />
  <row Id="17538" PostId="6749" Score="1" Text="What is GSoC?  Could you include a link or description for those unfamiliar?" CreationDate="2021-01-16T17:57:25.707" UserId="27" />
  <row Id="17543" PostId="6749" Score="0" Text="Likely https://en.wikipedia.org/wiki/Google_Summer_of_Code" CreationDate="2021-01-16T19:15:08.327" UserId="1293" />
  <row Id="17539" PostId="6750" Score="0" Text="What level of students are these?  Are they secondary? undergraduate? graduate?  And what sort of institution is providing their education?" CreationDate="2021-01-16T18:19:12.247" UserId="27" />
  <row Id="17540" PostId="6750" Score="0" Text="@BenI. Due to every country using their own system I can't find a proper translation, all I can say is that if they continue their studies (so in about 1 and half years) after this the next step would go to a &quot;university of applied sciences&quot; and start their bachelor degrees." CreationDate="2021-01-16T18:26:22.200" UserId="8867" />
  <row Id="17541" PostId="6750" Score="0" Text="How about the rough ages of the students, then?" CreationDate="2021-01-16T18:33:39.380" UserId="27" />
  <row Id="17542" PostId="6750" Score="0" Text="@BenI. my youngest student is 17, eldest is 24 (3 years younger then me) The majority is between 18/20." CreationDate="2021-01-16T18:38:39.597" UserId="8867" />
  <row Id="17547" PostId="6750" Score="1" Text="As an additional thought, rather than an answer, the manner of presenting your issues to the institution, rather than the reasons and facts, might be addressed on a sister site, [interpersonal.se]. Don't just repost the question there, however. Take what you've heard, and decided, from here and ask there about how to approach the discussion." CreationDate="2021-01-16T21:35:34.197" UserId="104" />
  <row Id="17544" PostId="6751" Score="0" Text="Well the education is focused on all forms of software engineering (including C#, Java and Python). But they start with HTML and CSS as an easy step in, which is fine...but in my opinion they stay to long on the first stepping stone while the students are more then ready for the next step. And all the projects are webby, but also back-end while nearly their entire education seemed to be focused on the front-end." CreationDate="2021-01-16T19:51:01.077" UserId="8867" />
  <row Id="17545" PostId="6753" Score="0" Text="The reasons they have given is to prepare the students for the continuation of their careers, urging them to pursue a Bachelor degree. Our work office cantina is littered with flyers from a school that offers such bachelor degrees (the same school I attended little under three years ago). And in my opinion it doesn't really prepare them that much, and if they don't want to to continue their education after this degree they won't be able to do much more then basic web development and some C#." CreationDate="2021-01-16T20:30:13.670" UserId="8867" />
  <row Id="17551" PostId="6757" Score="0" Text="The point that students are bored and the curriculum doesn't supplement the stated goal would make it more then an opinion issue right?" CreationDate="2021-01-18T10:19:50.267" UserId="8867" />
  <row Id="17553" PostId="6757" Score="0" Text="Not really.  Until you know why and how the department set things up this way it is your 'more than opinion' against those making the decisions about how things should be run in their dept now with covid constrainging things.  No matter what level you are at, since you are new, you should not do anything too actively nor aggressively.  You seem to be upset because your job has changed due to covid19 at least as much as you claim to care about the students.  You also did not tell us what type of school this is as that would also make a big difference.   Looks like majority here agree with me." CreationDate="2021-01-18T16:47:20.397" UserId="10002" />
  <row Id="17554" PostId="6757" Score="0" Text="Actually said what kind of school it is  in the comments in the original post." CreationDate="2021-01-18T16:48:51.403" UserId="8867" />
  <row Id="17559" PostId="6758" Score="2" Text="This depends on when OO concepts are introduced. It is quite different if you teach objects _early_ than if you teach them _late_." CreationDate="2021-01-19T10:46:35.620" UserId="1293" />
  <row Id="17565" PostId="6758" Score="0" Text="@Buffy I provide an answer in order to get more (I hope)" CreationDate="2021-01-20T04:02:19.717" UserId="9884" />
  <row Id="17568" PostId="6758" Score="0" Text="As a side note. I have noticed a difference between teaching a feature (iteration, encapsulation, etc) and teaching a problem and a solution. I have not as yet decided on the best strategy. But think that a solution (language feature) without a problem is hard to learn. This will also make it hard to learn constrained iteration (`foreach item in list: process(item)`), after unconstrained iteration (`for i is 0 while i&lt; length(list): process( item i of list); add one to i` ), as constrained will seem like it is not needed (as it is not needed, but it does make the code simpler)." CreationDate="2021-01-20T10:29:50.520" UserId="204" />
  <row Id="17569" PostId="6758" Score="0" Text="Totally agree, that was the reason I asked 2 other questions here https://cseducators.stackexchange.com/questions/6699/practical-application-of-loop-e-g-check-prime-number and https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i both emphasize the word &quot;practical&quot;!" CreationDate="2021-01-20T10:33:04.533" UserId="9884" />
  <row Id="17556" PostId="6759" Score="0" Text="I hope you don't have a misconception. Few languages were _designed_ for education. Certainly Squeak is a fully professional functional language. Many were used in education (Pascal) but were designed for a larger purpose." CreationDate="2021-01-19T10:37:30.860" UserId="1293" />
  <row Id="17557" PostId="6759" Score="0" Text="Is Squeak a functional? No way: https://en.wikipedia.org/wiki/Squeak It's been designed as an object oriented. Maybe you confused it with Scheme? And yes, I know about half-professional usage (like in case of Turbo Pascal, which was also used in school classes), but I intentionally narrow the scope of their usage." CreationDate="2021-01-19T10:41:41.650" UserId="6387" />
  <row Id="17558" PostId="6759" Score="0" Text="Sorry, yes, OO, not functional. I just woke up and my brain is still asleep. But it is a fully professional language. (Oddly, in my first comment, I was even thinking of Alan Kay.)" CreationDate="2021-01-19T10:44:46.373" UserId="1293" />
  <row Id="17560" PostId="6759" Score="0" Text="The question could be a bit broad if one was considering educational languages for all levels of students. If we include nursery, kindergarden, primary, secondary, high school, college, university, graduate, adult and professional in the mix. For example BASIC was designed at Dartmouth for undergraduate teaching. Pascal was also designed for teaching use in Computer Science, then there are the developments that introduce it to younger classes of learners....." CreationDate="2021-01-19T11:54:29.310" UserId="694" />
  <row Id="17561" PostId="6759" Score="0" Text="@BrianTompsett-汤莱恩 yes, we can enlarge the scope for kids to show them where they are at the moment and where we're going to, which language we choose to develop what. I just chose Logo as an example, because we start with it soon." CreationDate="2021-01-19T12:09:27.867" UserId="6387" />
  <row Id="17562" PostId="6759" Score="0" Text="@BrianTompsett-汤莱恩, actually Pascal wasn't designed &quot;for teaching use&quot;. Quoting Wikipedia: Pascal is an imperative and procedural programming language, designed by Niklaus Wirth as a small, efficient language intended to encourage good programming practices using structured programming and data structuring. It grew out of Dijkstra's (and others) work on structured programming. Encapsulation via nested functions was a key idea." CreationDate="2021-01-19T13:17:19.760" UserId="1293" />
  <row Id="17563" PostId="6759" Score="0" Text="Actually, I just wanted to get the book, covering the history of constructivism as approach to teaching, including projects like logo, like lego mindstorm, like Key's Smalltalk (he was obsessed with education), like micro:bit, etc. I just don't know if it exists or not." CreationDate="2021-01-19T15:14:36.307" UserId="6387" />
  <row Id="17564" PostId="6759" Score="0" Text="Basic, Logo, Scratch, Snap! -- those are the only languages designed for teaching that I'm aware of.  I'd love it if there is a resource like the one you are asking for." CreationDate="2021-01-19T17:34:00.127" UserId="27" />
  <row Id="17566" PostId="6759" Score="0" Text="I am wondering why. You say that then pascal was written to avoid pointers and …. You then get asked what is a pointer. And you have to spend the rest of the session convincing the class to stop thinking about pointers. Where as if you don't talk about these thinks, your talk is abstract." CreationDate="2021-01-20T10:17:41.757" UserId="204" />
  <row Id="17567" PostId="6759" Score="0" Text="@BenI. Eiffel was designed for teaching. And does an Educational language have to be designed for Education, or just used for Education (that could be a wide scope). Choice is part of design." CreationDate="2021-01-20T10:18:12.303" UserId="204" />
  <row Id="17570" PostId="6759" Score="0" Text="@BenI. DrRacket with few Scheme dialects also (HTDP course)." CreationDate="2021-01-20T12:20:35.833" UserId="6387" />
  <row Id="17571" PostId="6759" Score="0" Text="@ctrl-alt-delor about pointers, meanwhile, in Pascal you can make a smooth transition to pointers, not like in C, where the name of the array is an implicit pointer to it's first element. Here: http://c-faq.com/aryptr/index.html" CreationDate="2021-01-20T12:26:56.187" UserId="6387" />
  <row Id="17572" PostId="6759" Score="0" Text="I was suggesting that discussing pointers to beginners is a bad idea. And this is why they are not in educational languages." CreationDate="2021-01-20T14:27:07.960" UserId="204" />
  <row Id="17573" PostId="6759" Score="0" Text="@ctrl-alt-delor at some point, you start with data structures, like linked lists. And then you  should explain somehow how they work to novices. In Pascal, you can do it seamlessly, it's an alienable entity, you may not touch it up to the moment without breaking the programming process." CreationDate="2021-01-20T15:33:39.727" UserId="6387" />
  <row Id="17577" PostId="6765" Score="1" Text="Smart pointers are a device to manage the automatic destruction of dynamically allocated objects... Talking about objects first seems unavoidable" CreationDate="2021-01-25T04:29:30.750" UserId="2103" />
  <row Id="17587" PostId="6765" Score="1" Text="If you have an established curriculum and/or textbook, I'd advise not going off on a totally different path from their sequence and scaffolding. The work to support and make it coherent may snowball surprisingly fast for you. Let some textbook maker do this switch first." CreationDate="2021-01-25T15:50:12.117" UserId="8137" />
  <row Id="17603" PostId="6765" Score="1" Text="From what I remember the implementation in OO and or templates. But the usage is not. Therefore focus on the usage. Or even better, don't (I agree with Ben)." CreationDate="2021-01-27T16:15:47.410" UserId="204" />
  <row Id="17609" PostId="6765" Score="0" Text="Yes, I can see now this may be not be the best course to follow. Heading your advises. Thanks folks &amp; @Ben I. for the answer." CreationDate="2021-01-29T20:41:15.487" UserId="8489" />
  <row Id="17579" PostId="6767" Score="1" Text="What sort of employer do you have? Are you a professor or other instructor working for an educational institution? Or are you on the commercial side?" CreationDate="2021-01-25T14:11:41.903" UserId="1293" />
  <row Id="17580" PostId="6767" Score="2" Text="I'm also confused by the context here." CreationDate="2021-01-25T14:13:28.983" UserId="27" />
  <row Id="17581" PostId="6767" Score="1" Text="@Buffy Commercial side, I am hired by the company to help the students (i have no educational experience other then tutoring during college)." CreationDate="2021-01-25T14:24:18.060" UserId="8867" />
  <row Id="17582" PostId="6767" Score="0" Text="@BenI. hope it is a bit more clear now." CreationDate="2021-01-25T14:24:31.130" UserId="8867" />
  <row Id="17583" PostId="6767" Score="0" Text="@A.bakker Yes, much clearer now!" CreationDate="2021-01-25T14:48:06.113" UserId="27" />
  <row Id="17586" PostId="6767" Score="3" Text="Not sure this is a good fit for this site. (1) 2nd paragraph, &quot;he has become rather critical&quot;; who is &quot;he&quot;? (2) 3rd paragraph, &quot;similar sites from major companies&quot;; are the projects all websites (arguably not CS)? (3) this just seems like a bad idea to hand of fully paid projects to students." CreationDate="2021-01-25T15:46:25.197" UserId="8137" />
  <row Id="17588" PostId="6767" Score="0" Text="@DanielR.Collins 1: why not? 2: My employer, 3:different projects, but the ones he is mainly critical of are the websites, 4:and yea...that's kinda my question...how do i tell him that in a proper way..." CreationDate="2021-01-25T16:08:18.557" UserId="8867" />
  <row Id="17589" PostId="6767" Score="1" Text="@A.bakker: Because your problem isn't fixable by any change in curriculum, instructor, or teaching method. The question, as you say, is with your employer. I'm guessing SE Workplace would be more likely to get the answer you seek." CreationDate="2021-01-25T17:16:45.967" UserId="8137" />
  <row Id="17595" PostId="6767" Score="1" Text="I'm still a bit confused who `he` is in `he has become`, `he thinks` and `he knows`. Maybe a manager in one of the paying companies? Probably not a student? Possibly an officer in the middle-man organisation?" CreationDate="2021-01-26T04:49:46.507" UserId="10035" />
  <row Id="17607" PostId="6767" Score="0" Text="What are the goals &amp; commitments of the parties involved, and why would you possibly expect them to be met, and how could we answer without them? PS You can't necessarily convince anybody of anything. PS You get what you pay for." CreationDate="2021-01-27T23:12:57.000" UserId="2485" />
  <row Id="17584" PostId="6768" Score="1" Text="This concern is something my students have even voiced, saying they were pretty much free employees instead of there to learn anything. And it was hard for me to disagree... some projects are laughably simple and offer nothing in ways of teaching (one such being to edit the content of a word-press website). And another issue is that there is no documentation for any project. Apparently my boss has meetings with the project suppliers and communicates this to me through a meeting...(asked a dozen times for actual papers or being present with the project suppliers) but was declined each time." CreationDate="2021-01-25T14:54:43.843" UserId="8867" />
  <row Id="17585" PostId="6768" Score="1" Text="This total lack of documentation has left the project in a liquid state, with each week the demands being slightly altered and the students (and me) not knowing what to expect... his go to answer is that the student should ask what they don't know... and that's all fine and dandy but even I don't know what to ask on this point seeing the details  are constantly lost in translation. He expects a half a page of information to base the entire project on because the students are supposed to &quot;interpret&quot; the wishes and demands of the suppliers...without having even met them :|" CreationDate="2021-01-25T14:57:53.583" UserId="8867" />
  <row Id="17881" PostId="6768" Score="0" Text="Google Summer of Code is a way to introduce aspiring developers into real-world projects, extending or rounding out some open source project. They aren't just &quot;gun projects for learning&quot;." CreationDate="2021-04-09T23:11:50.990" UserId="5219" />
  <row Id="17610" PostId="6776" Score="0" Text="The answers would have to be somewhat institution-specific.  Where I am, one unique course is one prep.  If you teach multiple sections of the same course, then that is still one prep." CreationDate="2021-02-02T14:33:34.043" UserId="27" />
  <row Id="17611" PostId="6776" Score="1" Text="I feel like this question might be too specific to your school and curriculum for others to be able to provide much useful guidance.  Have you tried talking to your colleagues and department head?" CreationDate="2021-02-02T14:35:34.413" UserId="27" />
  <row Id="17612" PostId="6776" Score="0" Text="Does your contract say that you have some number of &quot;preps&quot; each term? If so, what is the number? Probably not 1 or 2 like Dartmouth and probably less than 7, but I'd expect it to be high for a community college." CreationDate="2021-02-02T16:11:22.613" UserId="1293" />
  <row Id="17615" PostId="6776" Score="0" Text="You are teaching `C++`, and how to program at the same time. Cognitive load theory say that teaching two complex things together is not effective. Learning to program is hard. Learning C++ is very hard (if experienced programmer, harder if not)." CreationDate="2021-02-03T10:17:18.637" UserId="204" />
  <row Id="17616" PostId="6776" Score="0" Text="What is a &quot;prep&quot; is in a USA thing? Is it an abbreviation?" CreationDate="2021-02-03T10:18:44.920" UserId="204" />
  <row Id="17638" PostId="6776" Score="0" Text="@Buffy If we go more than 4 preps we have an overload that would be paid separately than your regular salary." CreationDate="2021-02-04T10:49:07.107" UserId="6065" />
  <row Id="17639" PostId="6776" Score="0" Text="@ctrl-alt-delor Preps is just a contraction for preparations. I think I mentioned it on my question. As for cognitive overload, you might be right there. In fact we are currently proposing to have a pre-programming class before taking C++. We don't go OOP on our C++ intro class of course. We do go up to array as the last topic." CreationDate="2021-02-04T10:51:50.770" UserId="6065" />
  <row Id="17640" PostId="6776" Score="0" Text="@BenI.Thank you for your response. Yeah, I understand that this could be institution specific. But I just want to know how it is done in different institutions so that I might have a reference that I could use. As for talking to the department head, the answer yes I did so. But the decision honestly is not on him/her but on higher ups that has less knowhow that I want him/her to be." CreationDate="2021-02-04T11:03:20.420" UserId="6065" />
  <row Id="17650" PostId="6776" Score="0" Text="Have a look at `golang` a modern `C` like language. Or `lisp` a good teaching language, and much simpler than `C`, and easier to learn and use." CreationDate="2021-02-04T19:49:25.437" UserId="204" />
  <row Id="17651" PostId="6776" Score="0" Text="OK. So what is a preparation." CreationDate="2021-02-04T19:52:25.593" UserId="204" />
  <row Id="17755" PostId="6776" Score="0" Text="@ctrl-alt-delor Sorry for this late reply. A preparation or preps is like this. Let's say I am teaching chemistry class. On lecture time I focused on the theoretical part of chemistry (so that's one preparation). However, in my laboratory I prepare different instruments &amp; chemicals that students play around with for their activities. And that's another prep separate from the lecture. So, that would mean two preps/preparations. On the other hand i am teaching history with no lab that's one prep. The tricky part is programming wherein you can have both lecture and lab. Is it 2 preps or 1 prep?" CreationDate="2021-03-04T05:11:37.020" UserId="6065" />
  <row Id="17758" PostId="6776" Score="0" Text="@edper So these preps are they for the teacher? I am still guessing here. Are they paid preparation time allocated to the teacher?" CreationDate="2021-03-07T10:25:51.850" UserId="204" />
  <row Id="17765" PostId="6776" Score="0" Text="@ctrl-alt-delor Yes, these are for teachers and yes they are paid. In our case the payment scheme and computations is based on either credits or preps." CreationDate="2021-03-09T22:44:09.187" UserId="6065" />
  <row Id="17613" PostId="6777" Score="0" Text="What material do you cover in the course?  How old are the students?  Is the main focus of the course on OOP, or on imperative programming rudiments?" CreationDate="2021-02-03T03:50:16.707" UserId="27" />
  <row Id="17617" PostId="6777" Score="0" Text="Are you teaching graphics also?" CreationDate="2021-02-03T10:44:51.447" UserId="1293" />
  <row Id="17618" PostId="6777" Score="0" Text="@BenI. I added an update above, but they are typical undergrads (18 - 22'ish), we'll be focusing on the imperative coding aspects of the language, I just want them to acquire some basic competency with coding, including reading/writing simple text files (and csv)." CreationDate="2021-02-03T12:54:46.283" UserId="433" />
  <row Id="17619" PostId="6777" Score="0" Text="@Buffy I'm not currently planning to cover graphics, but if there's a nice easy way to create GUIs in Python or do some basic graphics I think it would be good and engaging (I'm only aware of pygame, but I haven't looked at GUIs or graphics in quite a while)." CreationDate="2021-02-03T12:56:23.337" UserId="433" />
  <row Id="17621" PostId="6777" Score="1" Text="graphics is a lot harder in Python than in Java. Let me think about how an idea would work without graphics." CreationDate="2021-02-03T13:00:50.587" UserId="1293" />
  <row Id="17622" PostId="6777" Score="0" Text="@Buffy Thanks, I appreciate it  ... that's one area where I think Python falls short. I love the language otherwise, it's my own go-to language to use for coding. C# does it really easy and well, and students like putting together programs with GUIs." CreationDate="2021-02-03T13:10:38.210" UserId="433" />
  <row Id="17623" PostId="6777" Score="2" Text="I've used Tcl/Tk bindings with Python, but it is painful." CreationDate="2021-02-03T13:13:54.750" UserId="1293" />
  <row Id="17625" PostId="6777" Score="0" Text="@Buffy Yes I have used Tcl/Tk and it is beautiful. But when doing it in python, it feels like it does not know what it wants to be (half TCL, half Python, half fly)." CreationDate="2021-02-03T14:30:58.603" UserId="204" />
  <row Id="17626" PostId="6777" Score="0" Text="Is SDL any good in python? It is not a widget based system, but good for games." CreationDate="2021-02-03T14:32:17.570" UserId="204" />
  <row Id="17628" PostId="6777" Score="0" Text="@Buffy Ugh .. yes, I have used Tcl/Tk with Python before too, not going to subject these newbie coders to it .. trying to get them to possibly consider the major, not run away from it  :)" CreationDate="2021-02-03T23:21:23.467" UserId="433" />
  <row Id="17635" PostId="6777" Score="1" Text="@Levon You may check this https://realpython.com/tutorials/projects/ I got some ideas from here https://realpython.com/intermediate-python-project-ideas/" CreationDate="2021-02-04T06:34:49.347" UserId="9884" />
  <row Id="17641" PostId="6777" Score="3" Text="Back in the 80s, at high school, we had Commodore PETs.  By the end of the 1st semester, I had managed to create a very simple, but playable 'breakout' game, in BASIC.   We weren't able to save our programs, so every week, I had to type the program in again from memory.  By the end of the term, I was able to type it in, and then play it for 5 minutes before the end of the 30 minute lesson. 'Graphics' doesn't have to mean 3d rendered artwork.  Just moving a letter 'O' and '-----'  around a console window is graphical enough to play breakout." CreationDate="2021-02-04T11:51:28.513" UserId="9451" />
  <row Id="17656" PostId="6777" Score="2" Text="If you give up GUI and settle on 2D graphics with manually generated RGB, you can do something quite easily if you provide your students with a basic `pygame` structure. Take a look [here](https://gitlab.com/-/snippets/2071525) - my code is pretty much lines 15-30, rest is taken from SO answers. I've programmed for a few years already, but have almost no Python experience. Total time taken: ~2 hours." CreationDate="2021-02-04T21:42:59.743" UserId="9976" />
  <row Id="17658" PostId="6777" Score="0" Text="Have them code something in BrainFuck." CreationDate="2021-02-05T03:26:27.103" UserId="2316" />
  <row Id="17667" PostId="6777" Score="0" Text="Seconding Pygame for graphics, it's pretty easy AND teaches you much, much more about programming and graphics then a gui tool." CreationDate="2021-02-05T20:44:26.800" UserId="2797" />
  <row Id="17671" PostId="6777" Score="1" Text="I did taught programming in Python, and we *asked* students to propose their project ideas" CreationDate="2021-02-06T12:49:29.653" UserId="3822" />
  <row Id="17620" PostId="6778" Score="0" Text="I appreciate the suggestion re Turtle graphics, I have to think about it, my initial reaction is that this would be more age appropriate to younger students (these are undergrads, so 18 - 20) though I guess it could be used to help demonstrate concepts,  looping and writing functions come to mind." CreationDate="2021-02-03T12:58:09.523" UserId="433" />
  <row Id="17624" PostId="6778" Score="1" Text="I added two more suggestions. I agree that the turtle may be better of younger students. The hard bit is finding something relevant (and this depends on their interests), so maybe a mixture of things." CreationDate="2021-02-03T14:27:58.693" UserId="204" />
  <row Id="17631" PostId="6778" Score="0" Text="Thanks for expanding on your answer. The Jupyter notebook is something I hope to introduce them to at some point toward the end of the course, esp since it is relatively easy to plot data in the notebook and visualize it. Maybe scikit  has something I can use for the text based idea, I'll have to check it out." CreationDate="2021-02-03T23:30:13.523" UserId="433" />
  <row Id="17634" PostId="6778" Score="1" Text="@Levon For an intro to programming course, you probably don't want to assume much about the level of understanding of the students - particularly if they're coming from other majors. At least a few weeks covering basics like loops/functions is almost a must. An intro course I took (as a CS major, but other majors were in the class) used Python and had us use Turtle to draw a variety of country flags in the second week, and some people did struggle with that. Depending on what majors are included in your class, some may never have written a line of code in their lives." CreationDate="2021-02-04T01:57:51.880" UserId="10071" />
  <row Id="17649" PostId="6778" Score="0" Text="@Kayndarr Yes I agree that you must start at the beginning. The trick is choosing the correct beginning." CreationDate="2021-02-04T19:38:54.460" UserId="204" />
  <row Id="17630" PostId="6780" Score="0" Text="Thanks .. I'm not sure I'd want to hoist more pandemic type themed work on them give that the world around us is dealing with it. However, this reminded me of a similar project where wildfires were simulated - so very close, but different theme. Thanks for the reference too." CreationDate="2021-02-03T23:26:22.343" UserId="433" />
  <row Id="17633" PostId="6780" Score="14" Text="Given that some students may have lost loved ones to the coronavirus pandemic, I think this topic should be treated very sensitively if at all. Doing a similar kind of simulation task with a different context could well be a good idea." CreationDate="2021-02-03T23:55:22.457" UserId="8562" />
  <row Id="17652" PostId="6780" Score="0" Text="Honestly, isn't this just putting a story behind [Conway's Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life)? With some probability elements added, that is." CreationDate="2021-02-04T20:06:21.527" UserId="9976" />
  <row Id="17653" PostId="6780" Score="0" Text="@JanDorniak, similar, but you can make it a realistic simulation if you work at it. You can model lots of things with this basic structure." CreationDate="2021-02-04T20:26:04.850" UserId="1293" />
  <row Id="17662" PostId="6780" Score="0" Text="This seems pretty complicated for non-CS majors with no programming background.  The concept could be fun, with a special exception for a small number of individuals (see kaya3's comment), but the problem being solved sounds really involved for something being used by a lot of the students like a 2nd year elective." CreationDate="2021-02-05T13:04:36.597" UserId="10081" />
  <row Id="17663" PostId="6780" Score="0" Text="@Panzercrisis. Actually, once you know about two dimensional arrays, this can be built up incrementally and students can contribute ideas for the next iteration. They don't need an overall specification of some final result. Think of it as an exploration. There are more options here than I described, also, such as the possibility of a mutating virus, changing the infection probability and/or the rate of spread. It is a canvas on which to explore ideas and develop programming skill. You can even do this with a one dimensional world (or three, or ...) Lots of options." CreationDate="2021-02-05T13:08:17.940" UserId="1293" />
  <row Id="17632" PostId="6781" Score="0" Text="Ah .. interesting idea, thank you, I will definitely check this out." CreationDate="2021-02-03T23:31:15.063" UserId="433" />
  <row Id="17629" PostId="6782" Score="0" Text="I believe this approach would be an option once COVID times are over, thank you for sharing." CreationDate="2021-02-03T23:24:13.020" UserId="433" />
  <row Id="17644" PostId="6784" Score="0" Text="Thanks .. I'm familiar with the Sweigart book (use some of it for my own) and plan to show some of this to the students. Not familiar with the others, but will check them out." CreationDate="2021-02-04T14:53:38.003" UserId="433" />
  <row Id="17643" PostId="6786" Score="2" Text="Interesting, though it is _perhaps_ a bit to much like math. I don't like to give the students the impression, early on, that CS is just a branch of math. But, given that the OP wants to emphasize imperative programming (hmmm, why use Python) this will do the job. There is a current discussion on the SIGCSE mailing list about whether CS is a branch of engineering. It is worth a look and some thought." CreationDate="2021-02-04T13:47:54.417" UserId="1293" />
  <row Id="17645" PostId="6786" Score="1" Text="I also enjoy Project Euler (thanks for reminding me) - perhaps one or two of those simpler problems could be appropriate. I used it to bone up on my maths, the coding was easy :) .. @Buffy Python because it's a friendly language with a low entry barrier :) , and in wide use (some of my students are interested in informatics, so that's good too). Also, I'm not so much emphasizing imperative coding,  more accurately perhaps, I just won't get too much (or perhaps at all) into the OOP aspects (though they will use objects of course)." CreationDate="2021-02-04T14:57:17.413" UserId="433" />
  <row Id="17672" PostId="6786" Score="0" Text="This is how I got started learning programming but I think the mathematical/non-programming-analysis barrier becomes prohibitive for most people relatively quickly, within fewer than say 50 problems." CreationDate="2021-02-06T21:38:16.237" UserId="2684" />
  <row Id="17642" PostId="6787" Score="1" Text="I'm a big believer in &quot;extra prep work&quot;. I normally provide some scaffolding for projects, especially important ones." CreationDate="2021-02-04T13:45:32.247" UserId="1293" />
  <row Id="17646" PostId="6788" Score="0" Text="An interesting experiment. I have no answers, and merely a guess that it's a compiler optimization of some kind. Rather I have a suggestion for how to get a good answer. I'm not sure of the reception there, but you're more likely to get expert insight by asking the question on StackOverflow, where you already have an account anyway." CreationDate="2021-02-04T16:06:30.583" UserId="104" />
  <row Id="17647" PostId="6788" Score="0" Text="local variables `d1` and `e`?  You said `d` and `e`, but `d` appears to be in `main`." CreationDate="2021-02-04T16:45:33.923" UserId="27" />
  <row Id="17648" PostId="6788" Score="0" Text="Thank you Ben, I updated the variable names." CreationDate="2021-02-04T17:08:22.573" UserId="192" />
  <row Id="17665" PostId="6788" Score="0" Text="FYI: In an abstract sense, the call stack is a stack of data objects known as [_activation records_](https://en.wikipedia.org/wiki/Call_stack#ACTIVATION-RECORD) (a.k.a., &quot;activation frames,&quot; &quot;stack frames,&quot; etc.) Each one holds the state of one &quot;activation&quot; (a.k.a., &quot;call to&quot;) a function. Activation records can take many forms. If I remember correctly, in the [Self programming language](https://en.wikipedia.org/wiki/Self_(programming_language)), Activation records actually were allocated from the heap, and they were first-class objects that could be manipulated just like any other object." CreationDate="2021-02-05T15:21:54.967" UserId="1269" />
  <row Id="17991" PostId="6790" Score="0" Text="That is the calling convention on x86-64. Others may differ. The &quot;take the variable's address&quot; forces the compiler to give it a place in memory so there is an address to take. A *truly* smart compiler may even figure out nothing useful is done with the variable through the pointer, and put each in turn at the very same spot." CreationDate="2021-05-09T23:08:14.390" UserId="5219" />
  <row Id="17654" PostId="6792" Score="1" Text="A randomizer is less likely with a stack, though. There was once an implementation of (I think) BASIC that used a linked list for the stack." CreationDate="2021-02-04T20:28:26.433" UserId="1293" />
  <row Id="17655" PostId="6792" Score="1" Text="Not that random. The stack from will still have to be in the same place, but the order of items in the frame can be randomised.Items in the stack of accessed with register offset addressing, so any change in order has to be matched with changes to the offsets in the assembler code. There is no run time cost in doing this, only compile time cost. All the variable mentioned (arguments and locals) are usually in the stack frame." CreationDate="2021-02-04T20:35:31.597" UserId="204" />
  <row Id="17660" PostId="6793" Score="0" Text="Thanks for the suggestion, I will check this out, not not for them, for me for sure :) I use Thonny as the Python IDE, very highly recommended for newbie programmers, in this class which has support for MicroPython (how I heard about it in the first place). It may be too late for this term, but definitely something to consider for next time I teach this course a year from now, hopefully back on campus. I have used the Raspberry Pi before in class (more advanced elective Linux class based on group projects)" CreationDate="2021-02-05T12:20:48.367" UserId="433" />
  <row Id="17666" PostId="6793" Score="1" Text="I was going to add an answer much like this - consider a simple hardware-related project - especially one where with advance planning you could arrange to have already _built_ hardware - consider this [persistence-of-vision toy](https://www.instructables.com/Spinning-LED-Display/) - programmed via microprolog, you can spin it on its axis, as here, or whirl it about at the end of a string, wire wrap it to a bicycle wheel, or who knows what.  Could cost &lt;$25 I imagine, if prebuilt there'd be no time pressure for the project on that score, fun, creative, etc. etc." CreationDate="2021-02-05T18:15:03.347" UserId="1301" />
  <row Id="17659" PostId="6794" Score="0" Text="Thanks for the suggestion, I already showed them some simple code to automate the opening of some web sites for them, this may fit nicely with this." CreationDate="2021-02-05T12:18:47.710" UserId="433" />
  <row Id="17664" PostId="6794" Score="1" Text="Note about parsing HTML with regular expressions: https://stackoverflow.com/a/1732454/2436687 &#xA;&#xA;It's good enough for playing and learning regexes, but for more serious uses, Python has a HTML parser in the standard library." CreationDate="2021-02-05T14:09:49.240" UserId="2235" />
  <row Id="17669" PostId="6796" Score="1" Text="I do like the idea of a project that can be continued to be improved upon by the strong students, and that's also a longer term project that can evolve during the semester. Thanks for the suggestion." CreationDate="2021-02-05T22:38:07.423" UserId="433" />
  <row Id="17670" PostId="6797" Score="0" Text="Neat, thanks - I can think of a number of ways working with this project." CreationDate="2021-02-05T22:38:56.437" UserId="433" />
  <row Id="17668" PostId="6799" Score="0" Text="Thanks, I like a multimedia approach, may try this next time. In the meantime I'd have to get more familiar with audio files and the relevant libraries myself so that I  could help students and flesh out assignments. Thanks for the suggestion." CreationDate="2021-02-05T22:36:51.973" UserId="433" />
  <row Id="17702" PostId="6801" Score="0" Text="Your point #2 is pretty universal: rationality asserts the ability to solve problems. It is the Juggernaut that is the only tool which eventually will solve every problem. And, to a kid with a Juggernaut, everything is something to drive over. If we could teach people only one thing, it should be that thoughts can be wrong, too. Skepticism of mental processes would reduce suffering dramatically, including for students. (I think the Buddha said that. Or maybe it was Socrates. Abraham? Confucius...)" CreationDate="2021-02-12T17:55:42.500" UserId="5349" />
  <row Id="17727" PostId="6801" Score="1" Text="In my experience in teaching grade 11 and 12, early'ish OOP is better than late.  If students don't learn OOP in grade 11, it feel like breaking (bad?) habits in grade 12.  I also feel the same about functions.  I have grade 9s build games is Scratch that are quite modular with custom blocks.  I think making decomposition and modularity core components early on helps all learners.  Without it, I find the weaker students struggle with advanced algorithms, and the strong students try to brute force the solution successful, but their code is a mess." CreationDate="2021-02-18T00:08:24.943" UserId="695" />
  <row Id="17740" PostId="6801" Score="0" Text="Another reason maybe because GUI is everywhere (especially for kids never touch linux world) , students may tend to feel OOP is THE solution for every programming problem." CreationDate="2021-02-23T07:30:30.263" UserId="9884" />
  <row Id="17699" PostId="6802" Score="2" Text="There is some material available on the concept of &quot;Notional Machine&quot;, which is the idea that someone has of how the machine works. When you say &quot;some fundamental stuff they have yet to grasp&quot;, it seems similar. This is why I like to stress teaching how computers actually work, rather than starting at a more abstract level. But then I get a storm about transistors and electrons from people. Good luck." CreationDate="2021-02-12T16:10:23.050" UserId="5349" />
  <row Id="17698" PostId="6803" Score="1" Text="Equality of Opportunity good, Equality of Outcome ungood. Wrong Expectations doubleplusungood." CreationDate="2021-02-12T16:07:54.193" UserId="5349" />
  <row Id="17674" PostId="6804" Score="0" Text="There are probably more resources available in Java as well as more complete graphics libraries. Are you willing to consider that? I like Python, but it feels &quot;incomplete&quot; so far." CreationDate="2021-02-08T14:47:31.337" UserId="1293" />
  <row Id="17675" PostId="6804" Score="0" Text="I didn't mean that it should be Python, just that I was aware of that particular tutorial as a long term, linear way to study the language." CreationDate="2021-02-08T14:48:59.323" UserId="10097" />
  <row Id="17676" PostId="6804" Score="2" Text="You may find this [recent q-n-a](https://cseducators.stackexchange.com/q/6578/8837) useful" CreationDate="2021-02-08T15:37:56.807" UserId="8837" />
  <row Id="17677" PostId="6804" Score="2" Text="I learned programming, at nearly the same age, by changing variable declarations in a Fortran program.I have no links to toolkits or course-type materials that fit the bill. Rather, a mere suggestion: provide raw resources ([a set of JS docs](https://www.w3schools.com/jsref/default.asp), unlimited encouragement and support (the only stupid question is the one that never gets asked), and dedicated space on her computer for expirements). Using git/GitHub/GitLab wouldn't be bad either just for the rollback ability. (Maybe should be an answer if I wasn't so lazy today.)" CreationDate="2021-02-08T18:22:49.313" UserId="104" />
  <row Id="17683" PostId="6804" Score="2" Text="Also see https://cseducators.stackexchange.com/q/6402/8837" CreationDate="2021-02-09T13:14:20.527" UserId="8837" />
  <row Id="17681" PostId="6805" Score="1" Text="I'm worried that this might be a bit too challenging of an algorithm for newbie programmers, no?" CreationDate="2021-02-08T22:09:51.850" UserId="433" />
  <row Id="17690" PostId="6805" Score="1" Text="For a student that already knows the game I don't think so. I had never tried Sudoku before but was able to have it working within a week or less. I spent more time on the visual output and input processing then the logic. They will need to understand functions and arrays so probably mid-term or later project in most classes." CreationDate="2021-02-10T20:41:29.553" UserId="10103" />
  <row Id="17686" PostId="6808" Score="0" Text="I'm having trouble with the Usborne links as it redirects. After some trial and error note that the book uses Scratch (which is good) but supposedly isn't available in US. The publisher is in UK. But... Amazon... https://www.amazon.com/Lift-Flap-Computers-Coding-IR/dp/0794535747" CreationDate="2021-02-10T19:40:23.520" UserId="1293" />
  <row Id="17687" PostId="6808" Score="1" Text="I thought linking to the Publisher would be a better vendor-neutral place to give information on the book, but of course I could not detect regional specific viewing! Thanks for the note." CreationDate="2021-02-10T19:51:23.383" UserId="694" />
  <row Id="17688" PostId="6808" Score="0" Text="Further facts: It does appear to be available in the US in Spanish: https://usborne.com/us/los-ordenadores-y-la-programacion-9780794546038" CreationDate="2021-02-10T19:53:27.163" UserId="694" />
  <row Id="17689" PostId="6808" Score="0" Text="And the English version for the US is here: https://usborne.com/us/lift-the-flap-computers-and-coding-9780794535742" CreationDate="2021-02-10T19:55:26.333" UserId="694" />
  <row Id="17691" PostId="6809" Score="0" Text="That's one of my favorite games, but may be a bit beyond newbie programmers, unless I find and set up some sort of framework to visualize this and they just work with the rules." CreationDate="2021-02-11T00:49:25.640" UserId="433" />
  <row Id="17693" PostId="6809" Score="1" Text="Think console and they only need to use spaces and O, 0, or even '.' for active cells makes things much easier. Just suggest widths and heights that match the console so each refresh scrolls the old one off the screen so no clear screen is needed. If they use an array of strings the data and the visual can be the same which should make a lot more sense to them then say a boolean 2d array  and having to translate it for display. The rules for neighboring cells is much harder then displaying the results." CreationDate="2021-02-11T22:26:44.363" UserId="10103" />
  <row Id="17695" PostId="6810" Score="1" Text="Matt Parker et al made a [video](https://www.youtube.com/watch?v=R9c-_neaxeU) of a team doing this (tik tak too / noughts and crosses) at the museum of industry in Manchester." CreationDate="2021-02-12T08:10:59.783" UserId="204" />
  <row Id="17703" PostId="6810" Score="0" Text="@ctrl-alt-delor this is a nice alternative to this game." CreationDate="2021-02-12T17:59:27.230" UserId="2324" />
  <row Id="17694" PostId="6811" Score="1" Text="We will need to know who the target audience is. Yes you, so tell us a little about your self. What is you experience / level of education? What is your motivation for learning this?" CreationDate="2021-02-12T08:05:59.420" UserId="204" />
  <row Id="17696" PostId="6811" Score="1" Text="kindergarten. interested." CreationDate="2021-02-12T11:49:49.440" UserId="1532" />
  <row Id="17707" PostId="6811" Score="0" Text="&quot;Everything I needed to know, I Iearned in kindergarten.&quot; - Robert Fulghum. If only that were true of all of us." CreationDate="2021-02-15T01:16:21.207" UserId="5349" />
  <row Id="17708" PostId="6811" Score="0" Text="I don't see much when I search, except for references to my favorite missing in action person, Bret Victor. You could try this link as a starting point: [A World Without Agile, Can You Imagine?](https://hurlbert.medium.com/without-agile-where-would-you-go-11712c15403c). I am not sure of the need for concurrency in much mainstream development, but I suppose things could change. People could get sharper wits. (&quot;The universe is full of magical things patiently waiting for our wits to grow sharper&quot; - Eden Phillpotts)" CreationDate="2021-02-15T01:25:09.510" UserId="5349" />
  <row Id="17711" PostId="6811" Score="0" Text="@ScottRowe what are needed in mainstream development?" CreationDate="2021-02-15T20:03:32.207" UserId="1532" />
  <row Id="17712" PostId="6811" Score="0" Text="@Tim What I was thinking of is the large amount of basic data and forms programming, with just 'CRUD' data access (Create record, Read, Update, Delete). Object Oriented is not needed for that really, and concurrency certainly is not, beyond adding a timestamp to the Where clause. What is your interest in Actor? It was designed for systems where resources are being continually reused at high speed, like a telephone system. I created a multithreaded data server, but there was no contention, just separate requests, so not much need for concurrency. What would you like to find out?" CreationDate="2021-02-16T11:56:54.000" UserId="5349" />
  <row Id="17709" PostId="6814" Score="0" Text="Thanks for the insightful advice. Can I ask more about what differs the two languages specifically ? I would like to have a throughout understanding so I might not get on the wrong foot with the Java." CreationDate="2021-02-15T06:14:27.997" UserId="10115" />
  <row Id="17710" PostId="6814" Score="0" Text="An &quot;object&quot; in C++ is created on the stack normally, though you can also create one on the heap. In Java it is always created on the heap and will be garbage collected automatically. Every C++ program that creates objects on the heap has to also have a management strategy for them. The difference may seem small but affects how you think about problem solution. There is no &quot;natural&quot; dynamic polymorphism in C++." CreationDate="2021-02-15T12:29:51.163" UserId="1293" />
  <row Id="17721" PostId="6814" Score="0" Text="Re, &quot;an 'object' in C++ is created on the stack...&quot; I think what you are trying to say is that a C++ object can be stored _in a variable._ A variable could be a local (on the stack), or it could be elsewhere. And, a C++ assignment, `a=b;` is a function call that is conventionally expected to create a _copy_ of object `b` in the variable `a` after it first _destroys_ the previous value of `a`. In Java, on the other hand, a variable can never hold an object, it can only ever hold a _reference_ to an object, and an assignment can only ever create a new reference to the same object." CreationDate="2021-02-16T15:50:47.093" UserId="1269" />
  <row Id="17722" PostId="6814" Score="0" Text="@SolomonSlow, yes, all of that is true and well stated. Thanks." CreationDate="2021-02-16T15:54:51.807" UserId="1293" />
  <row Id="17713" PostId="6816" Score="1" Text="One think you don't mention in this question is how engaged you have been with the exercises in the texts you read. Reading isn't learning. Watching videos even less so. How many exercises have you completed? Have you gotten any feedback on your solutions?" CreationDate="2021-02-16T14:14:16.647" UserId="1293" />
  <row Id="17714" PostId="6816" Score="0" Text="I have solved most of the exercise questions of CLRS (except for the $\star$ questions) mostly on my own but only for once, long a ago, while reading the text for the first time. Some questions even took a single day to think (too slow indeed). Rosen has a huge no of questions at the end of each text, that too I have solved not all but selectively as I found few problems repetitive there, and that too I have done only once. But I have read the text many more times (that too selectively), so that I do not forget the things which I have learnt..." CreationDate="2021-02-16T14:40:23.397" UserId="9124" />
  <row Id="17716" PostId="6816" Score="0" Text="should I resolve each and every question again and again?" CreationDate="2021-02-16T14:45:04.537" UserId="9124" />
  <row Id="17717" PostId="6816" Score="1" Text="I would think that re-solving them would be a good plan. I'd also think that making notes  on the important ideas in the books would be a good plan. Notes on paper, I mean. I use index cards for a lot of such things. But I'm guessing that a video isn't what you need unless you are a true &quot;visual learner&quot;. Repetition is good for learning. But feedback is also needed so that the repetition doesn't reinforce the wrong thing. Harder for a self learner, I realize." CreationDate="2021-02-16T14:48:19.737" UserId="1293" />
  <row Id="17718" PostId="6816" Score="0" Text="I did not get any feedback, as to whether they are right or wrong. https://cseducators.stackexchange.com/q/6422/9124 Here I had asked this when I was solving the exercise questions. @Buffy you had warned me that solution manual is not an appropriate thing. But yes, it is difficult for a self learner. For Rosen it is not an issue as I had crosschecked with solution manual at the end of text and from the instructor's solution manual available..." CreationDate="2021-02-16T14:50:48.307" UserId="9124" />
  <row Id="17719" PostId="6816" Score="0" Text="could you guide me in an algorithmic manner, so that i am improve myself..." CreationDate="2021-02-16T14:53:33.597" UserId="9124" />
  <row Id="17720" PostId="6816" Score="1" Text="Another plan might be to implement a few of the important algorithms and then test them. But for a guide, you want someone local." CreationDate="2021-02-16T15:06:46.987" UserId="1293" />
  <row Id="17724" PostId="6817" Score="1" Text="+1 for teaching to firm up learning, especially." CreationDate="2021-02-16T21:02:46.590" UserId="1293" />
  <row Id="17725" PostId="6818" Score="0" Text="(a) looks like a syntax error/typo, and without a proper (a) the problem is not a solvable." CreationDate="2021-02-17T17:04:13.007" UserId="3799" />
  <row Id="17726" PostId="6818" Score="0" Text="@ErikEidt Thank you for catching that!" CreationDate="2021-02-17T23:56:51.803" UserId="27" />
  <row Id="17728" PostId="6818" Score="3" Text="I'm worried that anyone with any form of dyslexia will be disadvantaged by such problems. Should I be?" CreationDate="2021-02-18T20:09:58.250" UserId="1293" />
  <row Id="17729" PostId="6818" Score="0" Text="@Buffy They are meant to decrease cognitive load, and there is certainly research to that effect.  It could be that dyslexic individuals would have comparatively *less* advantage, but I would be quite surprised if the activity is purely harder than &quot;code this method&quot; for anyone." CreationDate="2021-02-18T22:10:36.727" UserId="27" />
  <row Id="17730" PostId="6821" Score="2" Text="&quot;Oh, and debuggers are your friend when trying to capture and understand runtime behaviors!&quot;&#xA;Please go on." CreationDate="2021-02-18T23:00:13.703" UserId="8043" />
  <row Id="17731" PostId="6821" Score="1" Text="Actually, I hate debuggers." CreationDate="2021-02-18T23:41:21.390" UserId="1293" />
  <row Id="17732" PostId="6822" Score="1" Text="Practice, practice, practice." CreationDate="2021-02-19T15:24:36.823" UserId="2103" />
  <row Id="17750" PostId="6822" Score="1" Text="If you have mastered `C` then your are 5% there." CreationDate="2021-02-27T22:13:00.390" UserId="204" />
  <row Id="17748" PostId="6823" Score="1" Text="I think you nailed it by making that distinction between &quot;the solution to a question&quot; and &quot;an (ongoing) system that does things&quot;." CreationDate="2021-02-26T11:14:09.350" UserId="8696" />
  <row Id="18022" PostId="6824" Score="0" Text="**Do not confuse C and C++**. They look similar, C is (almost) a subset of C++, but they are profoundly differerent languages." CreationDate="2021-05-23T15:36:14.223" UserId="5219" />
  <row Id="18025" PostId="6824" Score="0" Text="@vonbrand I didn't, I was referencing C in the second part because it is a language that op says they already know. I will edit to make that clearer." CreationDate="2021-05-23T22:02:16.687" UserId="27" />
  <row Id="17734" PostId="6826" Score="1" Text="What is it that you want to teach about spreadsheets? How deeply do you want to go? All the way to designing/creating spreadsheet software? Please edit the question to clarify." CreationDate="2021-02-21T12:03:54.597" UserId="1293" />
  <row Id="17735" PostId="6826" Score="0" Text="Updated.This is about introductory spreadsheets. But happy to see lit on other areas." CreationDate="2021-02-21T12:07:46.597" UserId="48" />
  <row Id="17738" PostId="6826" Score="1" Text="You may find some tips/pointers from one of the biggest names in functional programming https://www.slideshare.net/mobile/kfrdbs/peyton-jones" CreationDate="2021-02-22T11:58:52.220" UserId="8837" />
  <row Id="17741" PostId="6826" Score="1" Text="Teach them to do *what* with spreadsheets? You can do some things of ridiculous complexity with spreadsheets, although maybe you shouldn't. I think one of the dangers of spreadsheets as a familiar tool is that people keep using them when something has become so big that it should probably be done in a different, more specialized application. Some spreadsheets would make a fine SQL database - and be faster and more reliable for it. So if you want to teach people about spreadsheets - **what do you want them to learn about them?**" CreationDate="2021-02-23T10:18:06.587" UserId="8696" />
  <row Id="17742" PostId="6826" Score="0" Text="I'm relatively agnostic on this, if someone has researched pedagogy for teaching introductory spreadsheets, then I'd like to know their approach and their curriculum. Is there research on the best way to introduce components of SS? Programming is covered, but what about the rest?" CreationDate="2021-02-23T12:41:06.753" UserId="48" />
  <row Id="17737" PostId="6827" Score="0" Text="I imagine there is a pedagogy for swimming, not that I know of one! Your answer sounds very sensible, and maybe the answer is that there isn't any specific pedagogy, other than common (teacher) sense. It's strange that there appears to be a lack of research here though." CreationDate="2021-02-22T10:55:00.897" UserId="48" />
  <row Id="17751" PostId="6833" Score="0" Text="Hi Layke, welcome to [cseducators.se]!  Without further expansion, this is a low-quality answer.  It would be helpful if you edited it to provide further justification to your position." CreationDate="2021-02-28T05:39:12.527" UserId="27" />
  <row Id="17752" PostId="6833" Score="0" Text="OK, will comply!" CreationDate="2021-02-28T16:11:54.180" UserId="10160" />
  <row Id="17749" PostId="6836" Score="1" Text="What is the age range of the students?" CreationDate="2021-02-27T13:34:33.703" UserId="27" />
  <row Id="17761" PostId="6836" Score="3" Text="Not entirely related, but here's a really nice game for teaching flexbox that I used to teach myself: https://flexboxfroggy.com/" CreationDate="2021-03-09T20:41:10.403" UserId="58" />
  <row Id="17756" PostId="6840" Score="0" Text="Oh wow! I had never heard of or seen repl.it before. That seems like a very interesting tool, and I will certainly check it out in the morning. I may be able to make something work using that and other platform like Zoom or Discord. Thank you very much for your suggestion!" CreationDate="2021-03-05T13:12:09.727" UserId="10076" />
  <row Id="17757" PostId="6840" Score="0" Text="VSCode has a live share plugin - https://code.visualstudio.com/learn/collaboration/live-share - that'll let you code on the same file at the same time, similar to repl.it. I've used it a few times with remote students." CreationDate="2021-03-05T13:36:42.167" UserId="30" />
  <row Id="17760" PostId="6841" Score="1" Text="Hi! Welcome to [cseducators.se]! Right now your question is a bit broad and hard to give a specific answer to. You mention more basic things like looping and outputting data in addition to more complicated things like using a database. Could you provide some more details about what you'd like to use PHP for / what your motivation for learning it is?" CreationDate="2021-03-09T20:35:14.143" UserId="58" />
  <row Id="17762" PostId="6841" Score="1" Text="@thesecretmaster Ok I edited my question" CreationDate="2021-03-09T21:17:11.167" UserId="10216" />
  <row Id="17763" PostId="6841" Score="1" Text="Thanks for adding that information! Honestly I think the best advice I can give you is to start with the basics of HTML and CSS. I that it's really easy to motivate yourself to work on that stuff because of the immediate visual feedback as you work. You could also start to learn backend web development if that's more interesting!" CreationDate="2021-03-09T21:23:31.877" UserId="58" />
  <row Id="17764" PostId="6841" Score="0" Text="Ok thanks. I already know how to output things, how to insert, select, delete and update things in the database, the different loops etc. I was just wondering if there was anything else on the basics side I needed to cover before moving on" CreationDate="2021-03-09T21:48:13.197" UserId="10216" />
  <row Id="17766" PostId="6841" Score="0" Text="If you're not already familiar, I'd get to know how HTML/CSS work and definitely try to understand how HTTP works and the distinction between back end and front end." CreationDate="2021-03-10T20:29:22.893" UserId="58" />
  <row Id="17768" PostId="6845" Score="1" Text="Note that this isn't the current edition of the book, though for  first course (everywhere but Stanford, perhaps) it is more than enough. You might be better off finding a local person who knows about compilers and language principles and ask them the questions you have." CreationDate="2021-03-12T20:27:06.237" UserId="1293" />
  <row Id="17769" PostId="6845" Score="1" Text="You might also want to get a copy of Sethi's language principles book and go through it first. It will give you some good background. https://www.amazon.com/Programming-Languages-Concepts-Constructs-2nd/dp/0201590654. I've taught out of both book, but the Languages book/course was a prerequisite for the compiler course." CreationDate="2021-03-12T20:30:57.567" UserId="1293" />
  <row Id="17770" PostId="6845" Score="1" Text="@Buffy finding a local person at my place who knows compiler and language principles to ask him my questions is an ordeal with the added pandemic situation...:(" CreationDate="2021-03-12T21:11:11.263" UserId="9124" />
  <row Id="17986" PostId="6847" Score="0" Text="If you have to struggle to come up with a relatable, practical usage example, why teach the concept at all?" CreationDate="2021-05-08T18:31:02.100" UserId="9426" />
  <row Id="17988" PostId="6847" Score="0" Text="@ggorlen My goal here is to teach .NET expression trees, which are types and objects that model pieces of programs. Expression trees have two use cases: 1. translating various programming operations for use in another environment, and 2. enabling dynamic programming languages in a statically typed world. Self-modifying code is part and parcel of 2." CreationDate="2021-05-09T05:07:33.193" UserId="4125" />
  <row Id="17774" PostId="6849" Score="0" Text="I still don't know what a _di-monarchial caste colony_ is (from one of the questions). :) But this looks excellent, particularly as it neatly parallels the dynamic type handling I described in the question." CreationDate="2021-03-15T15:46:00.357" UserId="4125" />
  <row Id="17775" PostId="6849" Score="0" Text="Since users supply the new &quot;animals&quot;, some of them will just toy with the system." CreationDate="2021-03-15T15:56:17.800" UserId="1293" />
  <row Id="17794" PostId="6849" Score="1" Text="This was an early 1980's game on an Apple-II. But I think it just used a text file to store the Q's (but Apple-II's allowed self-modifying code, mostly as copy-protection)." CreationDate="2021-03-21T04:41:49.897" UserId="8773" />
  <row Id="17795" PostId="6849" Score="0" Text="@OwenReynolds, it has a lot of possible implementations, including one using SQL in a database course. Another might use a spreadsheet." CreationDate="2021-03-21T11:23:25.647" UserId="1293" />
  <row Id="17776" PostId="6850" Score="1" Text="I'm not super familiar with Snap! but it seems to me like it might be possible simply by removing elements from some of the files in the [libraries directory](https://github.com/jmoenig/Snap/tree/master/libraries)? It appears that [this file](https://github.com/jmoenig/Snap/blob/master/libraries/LIBRARIES) is a list of what functionality is in which XML file in the library folder." CreationDate="2021-03-17T20:00:27.837" UserId="58" />
  <row Id="17777" PostId="6850" Score="3" Text="One of the creators is Brian Harvey of UCBerkeley. He has an active web page there with a visible email address. Maybe he would be willing to help. He is retired but spent his career catering to beginners." CreationDate="2021-03-17T20:42:36.257" UserId="1293" />
  <row Id="17778" PostId="6852" Score="1" Text="I have some ideas to give you guidance, but they aren't an answer to your question. But I'd need to know more about why you want to learn Python specifically. The insight I have is that learning a lot of languages at an elementary level isn't really a CS education. But if Python is truly important to you then the answers would be different. Can you edit the question to say more? BenI. also has some ideas that may complement mine." CreationDate="2021-03-18T19:34:02.143" UserId="1293" />
  <row Id="17779" PostId="6852" Score="1" Text="It might actually help to know the size of the largest, most complex, Java program you've written." CreationDate="2021-03-18T19:40:05.490" UserId="1293" />
  <row Id="17801" PostId="6852" Score="0" Text="@Buffy Thank you for your reply, Dr. Buffy--I edited my question as you requested. This year, I was accepted into an economics major program at a university, but I am thinking about double majoring in computer science. The reason why I wanted to study economics was because I was interested in applying mathematics to study society. But after I read more about Lee Sedol's loss to Alphago back in 2016, I wanted to learn more about deep learning and A.I.--two fields of computer science that also frequently use mathematics." CreationDate="2021-03-22T10:47:55.523" UserId="10242" />
  <row Id="17800" PostId="6853" Score="0" Text="Thank you for the reply--I checked the website, and it seemed to be a useful tool..!" CreationDate="2021-03-22T09:08:01.083" UserId="10242" />
  <row Id="17783" PostId="6854" Score="0" Text="Hi Hileamlak, welcome to [cseducators.se]! I appreciate you sharing your analogy, however here on Stack Exchange we generally prefer if you can summarize the linked content on our site, so that we can avoid issues of link rot and so that readers don't have to click through another link to get their answer. Could you please [edit] your post to include a summary of the linked content?" CreationDate="2021-03-19T22:57:06.013" UserId="58" />
  <row Id="17828" PostId="6854" Score="1" Text="I'm always surprised by how florid some analogies on this subject become. The most straightforward analogy is a filing cabinet and a secretary. Unlike the warehouse and the warehouse manager, whose primary focus is the storage of quantities of goods, the secretary is fundamentally concerned with records (i.e. information). And most people are familiar with all the tools of the secretary's trade - paper, forms, files, cabinets, photocopiers, etc. - if not all the tricks of their trade (i.e. organising their records and performing their work in an efficient and correct fashion)." CreationDate="2021-03-27T10:45:06.373" UserId="9075" />
  <row Id="17784" PostId="6859" Score="6" Text="It has been my experience that Project Euler problems are *maths* problems and not so much *programming* problems. It's probably not a coincidence that the website is named after one of the most famous mathematicians of all time, not after a programmer. There is nothing in Project Euler that actually teaches the most important parts of programming: abstraction and reuse, and even more importantly, teamwork, communication, and documentation." CreationDate="2021-03-20T07:37:51.863" UserId="945" />
  <row Id="17789" PostId="6859" Score="0" Text="Thanks for the answer. Looking at it, I agree with Jorg that Project Euler is for the very mathematically inclined. It's good for me though!" CreationDate="2021-03-21T01:50:03.120" UserId="10249" />
  <row Id="17791" PostId="6860" Score="0" Text="Thank you for your answer." CreationDate="2021-03-21T01:54:08.527" UserId="10249" />
  <row Id="17790" PostId="6861" Score="0" Text="Thank you for your answer, this looks great!" CreationDate="2021-03-21T01:50:19.283" UserId="10249" />
  <row Id="17785" PostId="6862" Score="1" Text="I suppose you're trying to teach how to conceive programs by a object approach.  It's handy to have some drawings to explain how things are made / connected / are talking to each other. UML helps for communication, as a standardized notation, but don't turn your course into Technical Drawing 101." CreationDate="2021-03-20T16:40:21.537" UserId="2103" />
  <row Id="17793" PostId="6862" Score="0" Text="The Design Patterns book uses what it calls OMT (Object Modelling Technique), which seems to be a precurser to UML. So at least Intro to UML seems required if you use that book." CreationDate="2021-03-21T04:35:50.730" UserId="8773" />
  <row Id="17797" PostId="6862" Score="0" Text="Related reading: https://ronnieschaniel.medium.com/object-oriented-design-patterns-explained-using-practical-examples-84807445b092" CreationDate="2021-03-21T15:27:44.633" UserId="2122" />
  <row Id="17823" PostId="6862" Score="1" Text="This question and the answer below brings back some memory more than 20 years ago! When I first learned UML, OOA and read grady booch's books. I was amazed at first. My then employer also required us to use cleacase and other Rational tools. Then something just didn't add up. I remembered saw some quote said something along the line like, if UML, grady booch was supposed to teach us OO, why clearcase and all Rational tools were such terrible software! The memory and quote was so vivid that I still remember it now." CreationDate="2021-03-26T07:08:33.843" UserId="9884" />
  <row Id="17836" PostId="6862" Score="0" Text="Mostly in response to your last sentence (question) https://news.ycombinator.com/item?id=24056901 Only makes sense if &quot;patterns&quot; can be significantly widened beyond &quot;OO patterns&quot;" CreationDate="2021-03-29T05:25:54.887" UserId="8837" />
  <row Id="17859" PostId="6862" Score="0" Text="I can't find the quote I guess it was too long ago. But this article was written probably in 2010, which shown clearcase was still terrible https://daedtech.com/how-rational-clear-case-stole-my-innocence-and-nearly-ruined-my-life/, to quote &quot;So don’t let Clear Case or anything else steal your innocence or ruin your life; don’t tolerate a tool that constantly forces you to think about it as you battle it.&quot;" CreationDate="2021-03-31T06:42:19.413" UserId="9884" />
  <row Id="17860" PostId="6862" Score="0" Text="@Qiulang What does Clear Case have to do wit UML?  UML isn't version control." CreationDate="2021-03-31T16:45:18.807" UserId="27" />
  <row Id="17861" PostId="6862" Score="0" Text="I know clear case has nothing to do with UML. It is Rational Rose. I remembered it was terrible too. The fact that Rational hired grady booch and some other OO experts to as their team leads while their softwares were so terrible was my point. It was 20 years ago and your question just brought back that memory." CreationDate="2021-03-31T17:59:28.600" UserId="9884" />
  <row Id="17862" PostId="6862" Score="0" Text="@Qiulang Sorry to bring back your pain!" CreationDate="2021-03-31T18:29:09.657" UserId="27" />
  <row Id="17864" PostId="6862" Score="1" Text="@Quilang :&#xA;Thanks for the clear-case blog-link. It helps me in something I'm just writing on the edu-costs of bad tooling. &#xA;Ben I. : You have seen [Larman : Applying uml and patterns](https://www.amazon.com/Applying-UML-Patterns-Craig-Larman/dp/0137488807) ??" CreationDate="2021-04-01T05:14:58.173" UserId="8837" />
  <row Id="17865" PostId="6862" Score="0" Text="@BenI. from then now I was NOT a strong advocate of object-oriented programming any more :D" CreationDate="2021-04-01T07:52:26.903" UserId="9884" />
  <row Id="17786" PostId="6864" Score="0" Text="Presumably, the book you mention is *Introduction to Algorithms*." CreationDate="2021-03-20T23:05:47.860" UserId="6719" />
  <row Id="17787" PostId="6864" Score="0" Text="@J.G. True, thank you. Edited." CreationDate="2021-03-21T01:00:14.573" UserId="182" />
  <row Id="17792" PostId="6864" Score="0" Text="Thank you for your answer." CreationDate="2021-03-21T01:54:24.533" UserId="10249" />
  <row Id="17796" PostId="6864" Score="2" Text="Can you explain why you advise against Project Euler?" CreationDate="2021-03-21T13:01:04.267" UserId="5925" />
  <row Id="17798" PostId="6864" Score="0" Text="@Jasper Project Euler is not about programming. It is about math. Usually, once you figure out the correct way to approach the problem, the programming part reduces to a one-liner." CreationDate="2021-03-21T17:29:56.643" UserId="182" />
  <row Id="17788" PostId="6865" Score="4" Text="I'm sure each software developer's career is different.  But I not only found that I managed to get away with almost-UML for over a decade, learned intuitively by examples, but that once I learned the actual formal UML rules, I became less effective at communicating my ideas using the diagrams." CreationDate="2021-03-21T01:05:24.013" UserId="812" />
  <row Id="17804" PostId="6868" Score="0" Text="Actually, I recommend against this. Accept Python for what it is. Pretend you don't actually know Java when solving problems." CreationDate="2021-03-22T16:17:21.907" UserId="1293" />
  <row Id="17818" PostId="6869" Score="0" Text="Thank you for the detailed response, Dr. Buffy. I took a careful look at the courses offered at my university's computer science department, and it appears that data structure, algorithms, and databases are courses offered to sophomores and juniors. If possible, I will attempt to preview those subjects, which I think would be a wise thing to do before I challenge myself to a project of such scale. Thank you again for your response." CreationDate="2021-03-24T15:40:44.973" UserId="10242" />
  <row Id="17820" PostId="6871" Score="1" Text="*&quot;Compiling is like voting in Chicago: do it early and often&quot;* made me laugh.  Nice." CreationDate="2021-03-24T17:24:09.493" UserId="27" />
  <row Id="17821" PostId="6871" Score="1" Text="Christ, seeing this thread again made me nostalgic." CreationDate="2021-03-25T18:05:02.667" UserId="6282" />
  <row Id="17874" PostId="6878" Score="1" Text="Yes Hungarian and flamenco dances on you tube, for search and sort. (also other visualisations on there)" CreationDate="2021-04-06T22:25:59.477" UserId="204" />
  <row Id="17879" PostId="6882" Score="0" Text="Thanks for those resources!" CreationDate="2021-04-07T21:04:32.990" UserId="27" />
  <row Id="18667" PostId="6888" Score="0" Text="cplusplus.com is extremely outdated. I would definitely not recommend it. Especially since you clearly indicate that it's important to &quot;grab a new one&quot;." CreationDate="2022-01-03T00:33:03.757" UserId="11453" />
  <row Id="17882" PostId="6891" Score="1" Text="We use this game in our core curriculum. It's fantastic!" CreationDate="2021-04-10T18:56:23.457" UserId="27" />
  <row Id="17891" PostId="6895" Score="2" Text="I may write an answer later, but note that there are copyright issues. Copyright law varies greatly around the world though. But in the US translations require permission from copyright holders: https://copyright.uslegal.com/enumerated-categories-of-copyrightable-works/translation/" CreationDate="2021-04-12T15:49:12.753" UserId="1293" />
  <row Id="17892" PostId="6895" Score="1" Text="I also advise that you register for this site. Among other things you will become eligible to chat in our chat room." CreationDate="2021-04-12T15:55:19.207" UserId="1293" />
  <row Id="17893" PostId="6895" Score="0" Text="FYI, the link to the chatroom is [here](https://chat.stackexchange.com/rooms/59174/the-classroom)." CreationDate="2021-04-12T17:57:08.220" UserId="104" />
  <row Id="18884" PostId="6895" Score="1" Text="As a total aside, for someone who wants to create courses, your use of language is extremely sloppy. Find a good proof reader / editor." CreationDate="2022-01-07T21:20:13.383" UserId="6346" />
  <row Id="17884" PostId="6896" Score="1" Text="&quot;You can submit someone else's entire paper...&quot; That seems very wrong. &quot;submit&quot;????" CreationDate="2021-04-12T15:38:26.540" UserId="1293" />
  <row Id="17885" PostId="6896" Score="0" Text="@Buffy It's a terrible idea.  I suppose someone could argue that, no matter how clearly you designate &quot;BUFFY'S PAPER, NOT WRITTEN BY ME&quot; at the top of the essay, by submitting it, you have *de facto* represented it as your own work, but it would certainly be an interesting case for an academic honesty tribunal to take up, and the outcome would be far from certain.  More likely, I'd expect it to be treated as an unsubmitted assignment, with the additional effect of getting the prof rather (reasonably) upset at you." CreationDate="2021-04-12T15:41:22.733" UserId="27" />
  <row Id="17886" PostId="6896" Score="0" Text="@Buffy In any case, it's the most dramatic example I can think of of the importance of citing :)" CreationDate="2021-04-12T15:42:21.350" UserId="27" />
  <row Id="17887" PostId="6896" Score="0" Text="But you seem to be ignoring copyright. Unless you have a different idea about &quot;submit&quot; than I do. Note that videos that have background music, even short snippets, get takedown notices." CreationDate="2021-04-12T15:43:45.113" UserId="1293" />
  <row Id="17888" PostId="6896" Score="0" Text="You can point to things. You can quote short snippets (with citation), but &quot;entire paper&quot;??? I'm still confused." CreationDate="2021-04-12T15:45:32.660" UserId="1293" />
  <row Id="17889" PostId="6896" Score="0" Text="@Buffy I'm pretty sure photocopying someone's essay would constitute fair use in an educational setting.  By &quot;submit&quot;, I mean putting the essay on top of the teacher's desk, in the pile of submitted essays." CreationDate="2021-04-12T15:45:42.070" UserId="27" />
  <row Id="17890" PostId="6896" Score="0" Text="@Buffy I'm moving to the chat room" CreationDate="2021-04-12T15:46:43.067" UserId="27" />
  <row Id="17894" PostId="6897" Score="0" Text="That cover _does_ show its age. An IBM-PC (or clone) is a might old device." CreationDate="2021-04-14T04:16:47.853" UserId="104" />
  <row Id="20923" PostId="6897" Score="1" Text="&quot;Crafting interpreters&quot; is what you need." CreationDate="2023-01-09T13:04:31.577" UserId="12938" />
  <row Id="17897" PostId="6900" Score="2" Text="Yea it is hard to find proper information about it, which is weird seeing SSIS is so damn useful. Currently teaching it to college kids who just started out and half of them are in love with it." CreationDate="2021-04-14T20:18:26.100" UserId="8867" />
  <row Id="17898" PostId="6900" Score="0" Text="SSIS is lovely. I got to know it during my internship... I want to learn and master it!!" CreationDate="2021-04-15T14:59:09.527" UserId="10403" />
  <row Id="20946" PostId="6902" Score="0" Text="Sipser does *not* have programming exercises. I'd claim it shouldn't. It has great exercises matching the great content. Unfortunately, one can use them only as inspiration to make new ones because the answers to almost all of Sipser's questions are available online." CreationDate="2023-02-08T12:04:55.710" UserId="13024" />
  <row Id="17900" PostId="6903" Score="3" Text="Why would you think any of them were no longer relevant? To abandon these at K-12 is probably foolish." CreationDate="2021-04-17T21:47:09.607" UserId="1293" />
  <row Id="17901" PostId="6903" Score="4" Text="That many of the on-line high stakes &quot;tutorials&quot; do not follow the laws does not invalidate them. Good teaching is still good." CreationDate="2021-04-17T21:49:08.340" UserId="104" />
  <row Id="17902" PostId="6903" Score="2" Text="However, see the [Moore Method](https://en.wikipedia.org/wiki/Moore_method) of instruction." CreationDate="2021-04-17T21:50:21.240" UserId="1293" />
  <row Id="17903" PostId="6903" Score="1" Text="@user178758 Welcome to Computer Science Educators SE. I see you cross-posted basically the same question, but asking about math education instead, on the Mathematics Educators site at [How many of &quot;The Seven Laws of Teaching&quot; are still relevant for teaching maths today?](https://matheducators.stackexchange.com/q/20759/12978). Note that such cross-posting of relatively similar questions, even though they each ask it from a somewhat different perspective, is generally discouraged here. However, if you do this, please at least included a link to the other related question. Thanks." CreationDate="2021-04-18T00:42:34.387" UserId="9731" />
  <row Id="18856" PostId="6905" Score="0" Text="&quot;More than this, you know there's nothing.&quot;" CreationDate="2022-01-07T02:33:20.370" UserId="5349" />
  <row Id="17906" PostId="6907" Score="3" Text="What is your goal?  What is your rough level / background?" CreationDate="2021-04-21T17:58:00.503" UserId="27" />
  <row Id="17907" PostId="6907" Score="0" Text="I am a new Ph.D. student. I need to master Golang before I graduate so I can apply in 'FAANG' companies" CreationDate="2021-04-22T06:18:28.137" UserId="10403" />
  <row Id="17915" PostId="6907" Score="1" Text="[This](https://golang.org/doc) is the official documentation." CreationDate="2021-04-25T12:10:47.720" UserId="6719" />
  <row Id="17922" PostId="6907" Score="0" Text="Thanks @J.G. .." CreationDate="2021-04-27T20:52:24.033" UserId="10403" />
  <row Id="18040" PostId="6907" Score="0" Text="PHD in what?, what is your programming experience?" CreationDate="2021-05-28T15:32:45.517" UserId="204" />
  <row Id="18042" PostId="6907" Score="0" Text="Ph.D. in Information Quality. I have worked as a programmer analyst for almost 4 years in a Multi-National Company. I have some knowledge about C, C++, Cobol, Python. Among the databases; I prefer SQL Server to other databases..." CreationDate="2021-05-29T19:17:27.870" UserId="10403" />
  <row Id="18010" PostId="6908" Score="0" Text="Thanks, will check it out." CreationDate="2021-05-18T20:31:05.600" UserId="10249" />
  <row Id="17911" PostId="6910" Score="5" Text="This is a strangely constrained choice.  None of the above.  Why only these two?" CreationDate="2021-04-23T20:38:02.497" UserId="27" />
  <row Id="17912" PostId="6910" Score="2" Text="Maybe, also more context would be nice: What age? Are the students already into computers or do you want to excite them for the topic or do you want to give them something they could practically use later on the job? I also agree with Ben: why only these two? I would at least add in Javascript as choice to not confuse them with unnecessary things like classes." CreationDate="2021-04-24T11:14:00.533" UserId="10203" />
  <row Id="17914" PostId="6910" Score="2" Text="I put only these two languages for choice as in some of the Asian countries like India etc. C is the first language that is taught to students. They learn the syntax, core concepts, and even the advanced concepts like pointers. In ICSC syllabus format they even use Java for grade 9, 10. and advanced Java with data structures like binary trees, etc. in grade 11, 12. But, now Python is being introduced to students..." CreationDate="2021-04-24T12:35:42.467" UserId="10403" />
  <row Id="17917" PostId="6910" Score="2" Text="I would only teach C before assembly -- to teach pointers and memory allocation, which are obscured in other languages, but not for a first language." CreationDate="2021-04-25T23:15:54.317" UserId="3799" />
  <row Id="17972" PostId="6910" Score="0" Text="Possible duplicate: https://cseducators.stackexchange.com/questions/212/is-it-more-effective-to-teach-low-level-languages-before-high-level-ones-or-vice" CreationDate="2021-05-03T19:07:25.150" UserId="215" />
  <row Id="17909" PostId="6911" Score="2" Text="I don't think that any such resource exists, though I would **love** to be wrong about that." CreationDate="2021-04-22T12:27:15.263" UserId="27" />
  <row Id="17913" PostId="6911" Score="0" Text="Can you be more specific on &quot;practice for OOP&quot;? Maybe looking in the SELF / Smalltalk / old Javascript area or reading through Bertrand Meyer's books might be helpful." CreationDate="2021-04-24T11:29:07.730" UserId="10203" />
  <row Id="19425" PostId="6911" Score="2" Text="Why not take any book with exercises and do them online? And why is online so much better than in a local IDE?" CreationDate="2022-02-27T15:10:56.200" UserId="6346" />
  <row Id="21069" PostId="6911" Score="0" Text="@VictorEijkhout  And why is online so much better than in a local IDE? – As in answer below regarding REPL.IT, code can be shared with and executed by a teacher / mentor / more experienced programmer, who can help learning overcome difficulties - and can be done in real-time while discussing the code and reasons for the chnages - I do this all the time when supporting new learners of Python. W3Schools &quot;embedded&quot; code is also a very powerful teaching aid - if the student attempts the exercises." CreationDate="2023-04-21T12:40:11.523" UserId="8155" />
  <row Id="17910" PostId="6912" Score="4" Text="Hear, hear!  I second &quot;C only in specific contexts&quot; -- languages are the second choice you make, with learning goals as the first choice -- and there are very few learning goals for which C is the best choice.  We use C in two different contexts within our 4-year program, and both are for well-considered reasons and fairly limited in scope." CreationDate="2021-04-23T20:33:28.977" UserId="27" />
  <row Id="17947" PostId="6912" Score="0" Text="I thought it was funny that you used the abbreviation **IPL**. Of course you know what that meant for mainframe computers - deliberately loading the OS in a separate step between powering it on and then running user programs. So, teaching the initial programming language is exactly the same thing for students: you load the OS of how to program in to their heads. As we know, if you don't know where you are going, any road will get you there. People have learned to program using all sorts of languages and systems. We are very good at figuring things out." CreationDate="2021-05-02T01:09:43.543" UserId="5349" />
  <row Id="18039" PostId="6912" Score="0" Text="Never C or C++ as a first language. C++ only after you have mastered Object Orientation. And only for very specialist uses. I am not even sure that ever is the best for kernel, device-driver, fast-code, definitely not compilers. C may be good when studying HOW thinks work. Or defining the output of a compiler." CreationDate="2021-05-28T15:31:18.460" UserId="204" />
  <row Id="17918" PostId="6914" Score="5" Text="This would depend more on what your students already know of the languages than anything. What is their primary language now? Or are you a student asking a theoretical question?" CreationDate="2021-04-26T14:07:00.387" UserId="1293" />
  <row Id="17929" PostId="6916" Score="2" Text="I can't speak to the Apache Mentoring Program specifically, but informally, I think that many of the larger open source projects have onboarding and mentoring processes designed for beginners.  When my students have gotten involved in the likes of musescore in the past, there is always community support there for beginners to get involved." CreationDate="2021-04-28T15:23:09.610" UserId="27" />
  <row Id="17925" PostId="6920" Score="1" Text="&quot;Python&quot; isn't really essential here. The same examples work in other OO languages. I'll give some ideas later today, I think." CreationDate="2021-04-28T12:40:33.420" UserId="1293" />
  <row Id="17927" PostId="6920" Score="0" Text="In the short term think about teaching Strategy immediately before Decorator. Strategies are a natural thing to decorate." CreationDate="2021-04-28T13:01:10.727" UserId="1293" />
  <row Id="17928" PostId="6920" Score="0" Text="I am asking about the concept of decorators.. it is specific to python in my case" CreationDate="2021-04-28T14:28:04.587" UserId="10403" />
  <row Id="17930" PostId="6921" Score="0" Text="This?  https://www.freecodecamp.org/news/boost-programming-skills-read-git-code/amp/" CreationDate="2021-04-29T02:38:56.137" UserId="8837" />
  <row Id="17931" PostId="6921" Score="0" Text="@Rusi no, I remember it was an university lecture." CreationDate="2021-04-29T08:05:10.850" UserId="10453" />
  <row Id="17935" PostId="6921" Score="0" Text="IIRC, CMU does a big git-creation lab, though I can't find any links.  (&quot;git&quot; is such a popular search term!)" CreationDate="2021-04-30T12:31:59.997" UserId="27" />
  <row Id="18019" PostId="6921" Score="0" Text="Not a university lecture, but [build your own git](https://github.com/danistefanovic/build-your-own-x#build-your-own-git) has a handful of useful resources." CreationDate="2021-05-22T20:21:29.760" UserId="9426" />
  <row Id="18038" PostId="6921" Score="0" Text="I am guessing that you are asking about the beautifully elegant internals of `git`, not the ugly user interface." CreationDate="2021-05-28T15:23:09.687" UserId="204" />
  <row Id="17943" PostId="6923" Score="6" Text="*&quot;It is a well known fact that we have shortage of COBOL programmers&quot;* - is it? The lobby groups of all industries constantly claim to have a shortage of workers - it doesn't usually reflect the reality. Usually they are just holding out the begging bowl, wanting the state to cover training costs or ramp up immigration from low-wage economies." CreationDate="2021-05-01T19:37:12.457" UserId="9075" />
  <row Id="17956" PostId="6923" Score="0" Text="@Steve unfortunately a lot of COBOL coders passed away in Covid and many got retired.. there is a shortage....indeed.." CreationDate="2021-05-02T05:29:30.223" UserId="10403" />
  <row Id="17957" PostId="6923" Score="3" Text="Trust me, it's the same dismal chorus we hear every time the employers have to pay above minimum wage or have to plan their workforce needs more than a couple of months ahead." CreationDate="2021-05-02T07:58:26.303" UserId="9075" />
  <row Id="17932" PostId="6924" Score="1" Text="I do not agree with you. I think we are not doing justice with COBOL...." CreationDate="2021-04-30T04:15:35.440" UserId="10403" />
  <row Id="17934" PostId="6924" Score="1" Text="@TalhaTayyab Which sentence could you possibly disagree with?  I didn't think there was anything even a bit controversial within this answer." CreationDate="2021-04-30T12:30:16.723" UserId="27" />
  <row Id="17936" PostId="6924" Score="1" Text="@BenI. I agree with  &quot;There is more to a CS education than programming&quot; but still we teach a couple of languages to students. In some places they teach 3 - 4 languages a part from Data Structures, Design of Algorithms, Automata, Compilers, etc.  COBOL is ignored altogether by one and all." CreationDate="2021-04-30T13:53:39.050" UserId="10403" />
  <row Id="17937" PostId="6924" Score="1" Text="Cobol might be discussed in a programming languages course." CreationDate="2021-04-30T14:21:40.487" UserId="1293" />
  <row Id="17938" PostId="6924" Score="0" Text="+1 for @Buffy's comment" CreationDate="2021-04-30T20:29:12.357" UserId="10403" />
  <row Id="17939" PostId="6924" Score="1" Text="Don't be too hasty. I said &quot;discussed&quot;, not taught. The normal purpose of the programming languages course isn't &quot;examples of...&quot; but &quot;principles of...&quot;. I once taught COBOL to information systems students, actually. More recently, I was the professor for both programming languages and compiler implementation." CreationDate="2021-04-30T20:44:52.860" UserId="1293" />
  <row Id="17940" PostId="6924" Score="3" Text="&quot;And the goal of a CS program isn't to create programmers for industry.&quot; I sympathize with this. But let's acknowledge this is a prescriptive statement. Not a descriptive one. Historically ppl have differed on what the mission of higher education is. Some c it as something that should cater to the imperatives of the market. While others think it should stand at some remove from those needs. U can c these tensions at work in books like Veysey's &quot;The Emergence of the Am. Univ.&quot; in which the ideal of &quot;utility&quot; was lauded in community and land grant colleges but less so at trad 4 year univ." CreationDate="2021-05-01T18:21:35.883" UserId="10353" />
  <row Id="17961" PostId="6924" Score="0" Text="I also agree with your first sentence, but if people emerge from four years of an expensive cocoon unable to get work, something is wrong. I graduated in a recession and it took inordinately long to find any job. This is inappropriate for human worth and dignity, but I guess that is not anyone's' job. Yet. Such a position - maximizing human potential - should be. Universities are not doing that, and maybe they can't. But revolutions are repeatedly fought over this point and it persists." CreationDate="2021-05-02T12:12:18.380" UserId="5349" />
  <row Id="18021" PostId="6924" Score="0" Text="&quot;And the goal of a CS program isn't to create programmers for industry&quot; -- even if it was, it's not obvious that educating everyone in COBOL would be a good way to fufill the industry's needs on the whole. Even with a shortage of engineers in the mainframe niche, it's still a niche, and training people in COBOL isn't useful to most roles. Hop on any job board and it's predominantly modern technologies. Necessity is the mother of invention: if the COBOL shortage was truly as severe as advertised, we'd probably already see these classes." CreationDate="2021-05-23T01:08:47.130" UserId="9426" />
  <row Id="17942" PostId="6925" Score="5" Text="*&quot;there are also important reasons that the language is dying...&quot;* - the listed reasons turned out to be less than compelling. The efficient handling of decimals by Cobol (and the underlying mainframe architecture, compared to Intel) is surely one of the reasons it *is still* used, rather than a reason why it is ceasing to be used." CreationDate="2021-05-01T19:30:37.007" UserId="9075" />
  <row Id="17974" PostId="6925" Score="1" Text="@Steve, today's &quot;enterprise applications&quot; run on oversized PCs." CreationDate="2021-05-04T00:03:24.450" UserId="5219" />
  <row Id="17941" PostId="6927" Score="5" Text="You're correct that the norms are (slightly) different, since many of the choices we face are more oriented towards tradeoffs than towards strictly &quot;correct&quot; answers -- there are rarely strictly correct or strictly incorrect approaches to teaching, since it is ultimately about creating patterns in highly variable wetware instead of highly regularized hardware :)  We do still close questions for being opinion-based, but more rarely." CreationDate="2021-05-01T19:23:11.217" UserId="27" />
  <row Id="17944" PostId="6927" Score="1" Text="Reminds me of Neil Postman's first rule in &quot;Five Things We Need To Know About Technological Change&quot;: &quot;The first idea is that all technological change is a trade-off. I like to call it a Faustian bargain. Technology giveth and technology taketh away.&quot; https://web.cs.ucdavis.edu/~rogaway/classes/188/materials/postman.pdf" CreationDate="2021-05-01T19:47:17.440" UserId="10353" />
  <row Id="17962" PostId="6927" Score="0" Text="Hi new contributor! I hope you enjoy this site. I am not familiar with any of the TLAs or word salad you mentioned although I am sure it is tasty. Textbooks on Github? Didn't know about that. I have used exactly one library from Github for one small but important project. I guess I am thinking that a textbook might best be about something really basic and fundamental. Starting with most of the hundreds of languages, frameworks, toolsets and so on available today seems to me like taking off way beyond the starting line, but perhaps I have misunderstood. Good luck!" CreationDate="2021-05-02T12:24:48.720" UserId="5349" />
  <row Id="17973" PostId="6927" Score="0" Text="There are lots of open source books around, even ones with full source on github. Two examples are [&quot;Beej's Guide to C&quot;](https://github.com7beejjorgensen/bgc) and Downey's [&quot;Think Python&quot;, 2nd edition](https://github.com/AllenDowney/ThinkPython2). Search for &quot;open textbook&quot;." CreationDate="2021-05-03T23:59:42.397" UserId="5219" />
  <row Id="18079" PostId="6927" Score="0" Text="Hi, I provided an answer based on my own experience, including an &quot;ill-attitude&quot; toward mongodb, so if anyone downvotes my answer I am totally fine. lol" CreationDate="2021-07-01T08:22:04.413" UserId="9884" />
  <row Id="17945" PostId="6928" Score="0" Text="And you should teach quality while you are at it." CreationDate="2021-05-01T20:56:45.240" UserId="5349" />
  <row Id="17946" PostId="6928" Score="1" Text="When people assert that 'state' is the primary obstacle to understanding computers, this just completely dumbfounds me. Well, what more IS there to a computer than state? Really? What is a computer without state? A fancy set of lightswitches. People, please... get a clue." CreationDate="2021-05-02T01:05:33.903" UserId="5349" />
  <row Id="17953" PostId="6928" Score="1" Text="+1 I like this answer a lot, thanks for writing it." CreationDate="2021-05-02T02:11:10.373" UserId="8137" />
  <row Id="17958" PostId="6929" Score="3" Text="Enterprise systems don't work like that, actually. This is the COBOL &quot;problem space&quot;." CreationDate="2021-05-02T11:30:52.363" UserId="1293" />
  <row Id="17959" PostId="6929" Score="0" Text="@Buffy That does indeed seem like a *problem*. We should never be so attached to something or so dependent on it that we are unable to replace it with something better. I would say that Enterprises ought to see such painful reliance as an &quot;existential risk&quot; and correct it as fast as they can. If you are not using your computer to get to the Moon, you will not die if it fails, and so you should be able to fix it without it becoming a crisis. Unless your computer is driving the vehicle that is taking you to the hospital, I guess... Every system has an Achille's Heel (said Goedel)." CreationDate="2021-05-02T12:05:52.243" UserId="5349" />
  <row Id="17960" PostId="6929" Score="0" Text="Systems are cheap these days, so just have multiple ones, and when one springs a leak, switch it off and the others keep going while you create yet another. Evolution comes to the world of enterprise software." CreationDate="2021-05-02T12:08:30.837" UserId="5349" />
  <row Id="17970" PostId="6929" Score="3" Text="Sorry, but no. NO. Why would a company discard an asset that they spent millions to develop and refine? COBOL is very stable and its quirks are known. Python is cool, but evolving, with potential faults yet to be discovered. Why would a company discard hundreds of cumulative experience-years in a technology for the &quot;next new thing&quot;.  The problem isn't with COBOL as much as it is with the fact that the experts with that accumulated knowledge are retiring/dying with no replacement in sight. I'd guess IBM has thousands of experience-years invested in COBOL. Maybe another order of magnitude more." CreationDate="2021-05-03T12:05:44.360" UserId="1293" />
  <row Id="17975" PostId="6929" Score="1" Text="@Buffy, just look at Netscape (Remember them?  Their browser was *the* browser in use, and they had a nice collection of other software offerings.). They decided sometime in the '90s to rewrite Netscape from scratch, as they considered (probably with good reasons) that it was too full of cruft. Never finished the rewrite, the company went under in large part because of the effort diverted into the rewrite away from bug fixes/new product development." CreationDate="2021-05-04T00:08:07.937" UserId="5219" />
  <row Id="17980" PostId="6929" Score="0" Text="@vonbrand I am thinking that there is very little new product development going on with COBOL systems that are almost as old as I am. If there are still bugs in software that old, it would be mysterious." CreationDate="2021-05-05T21:25:58.900" UserId="5349" />
  <row Id="17981" PostId="6929" Score="0" Text="@Buffy It seems to me that the absolutely vital stuff should be in basically platform-independent form, and should not really be changing/ So OK, it could stay in COBOL, but 95% of the code is a wrapper that could be migrated, modified, redeveloped, etc.  That is what I would do. Leave the engine alone but change the rest of the car as much as you want. The accumulated knowledge should be expressed in something that doesn't need to change. Can we say Domain Specific Language? Sure. Martin Fowler has proposed that since I was first programming, and I got the idea from people who taught me." CreationDate="2021-05-05T21:30:04.093" UserId="5349" />
  <row Id="18075" PostId="6929" Score="0" Text="@ScottRowe, most &quot;maintenance&quot; isn't &quot;fixing bugs&quot;, it is porting to the new machine, connecting to this new-fangled &quot;web&quot; thingy, replacing the backend that worked with database X to use database Y, some law changes and the way some quantity is computed has to be updated." CreationDate="2021-06-25T18:17:51.040" UserId="5219" />
  <row Id="17964" PostId="6930" Score="3" Text="Ask the session chair put you in contact with the speaker if you don't have info and then ask. But I don't think the statement is all that controversial. People learn and develop differently." CreationDate="2021-05-02T21:38:45.510" UserId="1293" />
  <row Id="17965" PostId="6930" Score="1" Text="Thanks! It was a comment in a discussion and I lost track of who it was. I'm hoping to find some &quot;big guns&quot; to bring to bear both on counselors and the math department, but also to use to help bolster the confidence of students who try but get discouraged." CreationDate="2021-05-02T21:46:49.620" UserId="134" />
  <row Id="17966" PostId="6930" Score="4" Text="And don't lose track of the fact that you aren't &quot;training&quot; professionals. We teach everyone math (I hope) but don't expect them to become mathematicians. But computational thinking is useful in a lot of ways, as is history, writing, and all the rest." CreationDate="2021-05-02T21:54:59.110" UserId="1293" />
  <row Id="17967" PostId="6930" Score="2" Text="Exactly, I want to &quot;snare&quot; the curious and intrigue them and create a space where they can start doing computational thinking and other &quot;CSish stuff&quot; and experience the fun and challenges that lurk within without doubting their worth as they see others for whom in seems easy." CreationDate="2021-05-02T22:00:24.660" UserId="134" />
  <row Id="17969" PostId="6930" Score="3" Text="It sounds like an off-the-cuff remark, and stated so strongly that it's almost certainly untrue.  How could there be no *correlation*, unless we also come to the conclusion that those with early, obvious talent are no more likely to pursue the field than students who struggle mightily right out the gate?" CreationDate="2021-05-03T10:30:49.687" UserId="27" />
  <row Id="18003" PostId="6930" Score="0" Text="As best I know, about half of all research is not reproducible. It is also the case that 'research' can demonstrate any point someone wishes to make. Some students eventually do well in a subject area, or even get jobs in that area, and others do not. This is the great mystery of having 7 billion people. I came to the conclusion a while back that the results of teaching is not my concern. I have no control over how it is received or used. As long as I put the info out in a good way and am as helpful as I can manage, that is it. Forget about the results." CreationDate="2021-05-15T22:42:03.167" UserId="5349" />
  <row Id="18387" PostId="6930" Score="0" Text="I can't seem to cough it up right now, but a fairly old paper talked about how the single thing that predicted how introductory computer science students did was &quot;Ability to build a consistent mental model.&quot;  They backed this up by giving out a test at the beginning of the semester which was just arbitrary rules and directions.  The students who could build a consistent mental model *even if incorrect* and then apply it did well in the course even if they started out knowing nothing about computers." CreationDate="2021-11-04T05:48:26.693" UserId="2273" />
  <row Id="17968" PostId="6931" Score="1" Text="thanks... I like your answer" CreationDate="2021-05-02T23:45:38.840" UserId="10403" />
  <row Id="17971" PostId="6931" Score="2" Text="&quot;Almost all software that you use daily is written in C&quot; -- this doesn't seem right.  Most of the software we use on a daily basis has some C components, but it's often a tiny minority of the actual code.  (That's not to understate the *importance* of the code that tends to get written in C!)  Windows, for instance, has the kernel in C and... that's it.  Only one major browser uses C at all, and that only within the JavaScript engine.  While Android is built atop Linux, virtually none of what we actually *think of* as Android is built in C.  C is often an important minority." CreationDate="2021-05-03T12:26:35.917" UserId="27" />
  <row Id="17976" PostId="6932" Score="0" Text="Welcome to [CSEducators.se]! I hope we hear more from you." CreationDate="2021-05-04T00:59:27.833" UserId="27" />
  <row Id="17979" PostId="6932" Score="1" Text="Thanks, Ben! ☺ I appreciate the welcome" CreationDate="2021-05-05T12:06:54.557" UserId="10464" />
  <row Id="17978" PostId="6933" Score="1" Text="I'm not asking about allowing a program to self-modify itself in a completely arbitrary way; I'm asking about using it as a technique for solving a specific problem for which there isn't enough information at the time the program is written. It's possible to establish -- and guard against -- invalid operations, just like it's possible to establish similar limits for other program operations." CreationDate="2021-05-04T05:04:53.050" UserId="4125" />
  <row Id="17982" PostId="6938" Score="5" Text="My advice would be not to use flowcharts at all, especially traditional box and arrow charts. There are too many degrees of freedom in drawing such charts and they lead to extremely poor and convoluted programs. There used to be &quot;structured flow charts&quot; which match the actual nested statement structure of modern programs. David Gries, one of the pioneers, calls them &quot;flaw charts&quot;, and I agree." CreationDate="2021-05-07T20:01:00.557" UserId="1293" />
  <row Id="17985" PostId="6938" Score="4" Text="Note that flowcharts were created when the primary means of program flow was the goto statement. The arrows in flowcharts are just goto structures. We left all that behind decades ago." CreationDate="2021-05-07T23:42:49.233" UserId="1293" />
  <row Id="18034" PostId="6938" Score="0" Text="Yes to what @Buffy said. Scratch (and just about every modern language) is a much higher level (easier) language than flow-charts. Scratch is also visual. If you are doing it because you think it is &quot;the correct way&quot;, then note professionals don't use them. They are no use what so ever in understanding a program. However they can be used to write programs for humans (e.g. CPR `check if breathing → breath into mouth` etc). However a good grasp of structured programming is needed to create a good flow-chart." CreationDate="2021-05-28T15:07:38.567" UserId="204" />
  <row Id="17983" PostId="6939" Score="3" Text="Actually, the Scratch program frame is really almost exactly &quot;structured flow charts&quot;." CreationDate="2021-05-07T20:58:43.690" UserId="1293" />
  <row Id="17984" PostId="6939" Score="1" Text="@Buffy Yes, which would leave you with a flowchart representing a more detailed flowchart." CreationDate="2021-05-07T23:39:38.777" UserId="27" />
  <row Id="17987" PostId="6939" Score="1" Text="Thank you for the detailed answer. What I'm hearing is:&#xA;1) Unstructured flowcharts (i.e. blocks where you can type anything) may make understanding CT harder, not easier&#xA;2) If I do use flowcharts, I should make it clear how those ideas translate to code and vice versa (Students struggling to translate pseudocode to code is the core issue. So the idea of having them play with both directions is really cool.)" CreationDate="2021-05-09T02:38:07.113" UserId="10464" />
  <row Id="17989" PostId="6939" Score="0" Text="@RandiW I'm no researcher, so this is just my guesswork, informed by my own understandings of cognition and developing brains.  What does CT stand for?  I would agree that if you use flowcharts, direct instruction on how to do it (and perhaps slower initial expectations) would be helpful, and going in both directions might help them grasp a second level of abstraction." CreationDate="2021-05-09T11:31:39.423" UserId="27" />
  <row Id="17990" PostId="6939" Score="3" Text="@RandiW Once you've actually done it, I hope you'll leave a self-answer to the question with your experiences for future visitors!" CreationDate="2021-05-09T11:33:23.767" UserId="27" />
  <row Id="18036" PostId="6939" Score="0" Text="I don't see a need for pseudo code ether. Pseudo code is only useful to help a novice in expressing an idea it a text based language (before they know this language)." CreationDate="2021-05-28T15:11:37.650" UserId="204" />
  <row Id="18037" PostId="6941" Score="0" Text="I hate flow-charts, but up-voted this. There is a lot of truth. I think what you said may be suitable for college students, but not young students. I would love to see a programming environment where at the click of a button, one could switch between structured-flow-chart, stretch-like, and text. And be able to edit in any one (flow-chart editor would have to constrain to structured. I have seen a flow-chart editor that does this)." CreationDate="2021-05-28T15:19:47.653" UserId="204" />
  <row Id="17993" PostId="6942" Score="0" Text="Thanks! This pretty much cemented my decision to only teach a few diagrams, and to do it without a huge amount of detail.  The author there talked about the &quot;sketch&quot; use... my two goals are to &quot;describe&quot; an OOP pattern, and to have students &quot;sketch&quot; some ideas out. So, no enterprise-level tooling, no Rational, nothing like that.  Just, &quot; what do we need to communicate this pattern well enough for you to internalize it?&quot;" CreationDate="2021-05-10T10:16:19.643" UserId="27" />
  <row Id="19546" PostId="6942" Score="0" Text="@BenI. I recently hit a similar problem and would like to hear your experience. When will you use flowchart or sequence diagram to describing a sequence of operations or activities? I am not referring to UML diagrams but flowchart and sequence diagram in general sense." CreationDate="2022-04-02T02:24:05.780" UserId="9884" />
  <row Id="19547" PostId="6942" Score="0" Text="For example when describe an algorithm, which in the simplest sense is from an input get an output, both flowchart and sequence diagram can do the job. They may focus on difference aspects of operation, e.g. sequence diagram may focus on interaction and flowchart focus on control flow but they also have overlapping areas. So I would like to hear your opinion." CreationDate="2022-04-02T02:28:33.863" UserId="9884" />
  <row Id="18014" PostId="6950" Score="1" Text="Hi Inuyasha! Welcome to [cseducators.se]! We mostly take questions about teaching computer science, so this question about more general CS academia / studying CS would be off topic for us, which is why it's been closed." CreationDate="2021-05-19T20:08:15.160" UserId="58" />
  <row Id="18015" PostId="6950" Score="0" Text="@thesecretmaster I understand. I should have posted the question on Academia.SE. I did not post it there since I thought that the question is very specific to my field so it might get answered there. But I got a helpful answer here. Thanks!" CreationDate="2021-05-19T20:21:10.547" UserId="9996" />
  <row Id="18009" PostId="6953" Score="0" Text="+1 good answer.." CreationDate="2021-05-18T13:03:32.263" UserId="10403" />
  <row Id="18018" PostId="6958" Score="0" Text="thanks @user33593..I am waiting for some more examples. Let us C!" CreationDate="2021-05-21T13:04:01.300" UserId="10403" />
  <row Id="18027" PostId="6961" Score="0" Text="This is a fantastic answer -- I'm not sure how I missed it before.  (I tend to read every word on this site, so it's rare that something slips my gaze) -- welcome to CSEd!!" CreationDate="2021-05-26T20:19:53.053" UserId="27" />
  <row Id="18028" PostId="6961" Score="0" Text="Thanks for reading and the welcome! I was worried the answer didn't recommend enough Python Turtle courses after writing it all out, but I'll update it if I find more." CreationDate="2021-05-26T20:31:44.160" UserId="9426" />
  <row Id="20770" PostId="6962" Score="2" Text="REPlit.com Teams for Education is now free." CreationDate="2022-09-13T23:32:10.443" UserId="695" />
  <row Id="21445" PostId="6962" Score="0" Text="Yes, I was paying for it myself as it was worth having.... I was glad to see it become free though.  It is massively beneficial that I can see who has started a lab (shows fork time), who has coded a solution, who tested and submitted, and who has had it reviewed (by me).  Compared to when I used to have them upload to moodle, then download and review, now I write tests for all the lab functions, can leave comments (not #, but a thread like in MS Word) and so on.  I can't recommend it enough." CreationDate="2023-09-28T19:09:32.783" UserId="2706" />
  <row Id="18044" PostId="6964" Score="0" Text="Yowsers - that really *is* a lot.  Do you have any notion of how much is absorbed/retained?" CreationDate="2021-05-30T20:26:16.057" UserId="27" />
  <row Id="18048" PostId="6964" Score="0" Text="Not much probably... Yet the goal may differ from other teaching situations. The main goal is that these teachers are exposed to the concepts and to the global picture. Later they may have to introduce at least some of this content to pupils, and they can refer to my lecture notes and other sources I gave to absorb the content they need, digest it before they restore it class." CreationDate="2021-05-31T11:10:31.303" UserId="10594" />
  <row Id="18043" PostId="6965" Score="1" Text="It seems like you've already found quite a lot -- why are you seeking out more?  Do you have particular goals for things you're trying to demonstrate?" CreationDate="2021-05-30T20:21:42.827" UserId="27" />
  <row Id="18049" PostId="6966" Score="0" Text="Also note: the array's name is const; you cannot increment it." CreationDate="2021-05-31T11:29:09.713" UserId="21" />
  <row Id="18051" PostId="6967" Score="0" Text="Thanks for the ideas! Some suggestions, a.  I use python so I believe we will first use dictionary not array to build the first version b. this is a good example to introduce 'id' concept, id for customer, id for video." CreationDate="2021-06-02T10:17:29.993" UserId="9884" />
  <row Id="18052" PostId="6967" Score="0" Text="@Qiulang: Absolutely. While this does muddy the line a bit between OOP and data normalization, these two concepts are thematically linked and often feed into each other in actual business projects, so I very much like that you learn a bit of both at the same time." CreationDate="2021-06-02T10:20:50.973" UserId="2164" />
  <row Id="18822" PostId="6967" Score="0" Text="A video store is a nice example of an object-oriented design. But how do you use it? Are you going to keep an array of customers, and at random times they visit the store? What are those times? How do you make this realistic? That driver program may actually be harder to program than the classes. And how do you determine that your whole program does what it's supposed to do?" CreationDate="2022-01-06T12:02:02.897" UserId="6346" />
  <row Id="18823" PostId="6967" Score="0" Text="@VictorEijkhout: I'm not quite sure what you're focusing on here. The answer is focused on an example that drives the design of a video rental application, not a simulation of how it will be used during a real day. How to realistically simulate usage in a specific scenario is a completely different topic and not at all something OOP-learners should be concerned by. Part of this exercise is to let the students find a solution and then showcasing betters ways of doing the same thing; which precludes giving a pre-formatted input as this would start revealing the intended design." CreationDate="2022-01-06T12:31:53.757" UserId="2164" />
  <row Id="18824" PostId="6967" Score="0" Text="@VictorEijkhout: Your last question implies you're bring up TDD (or some kind of testing at least). While I appreciate the value of TDD (and testing in general), the first introduction to OOP is not the right time to also introduce testing, nor should the two be merged into a single practical exercise for the students." CreationDate="2022-01-06T12:36:05.677" UserId="2164" />
  <row Id="18825" PostId="6967" Score="0" Text="@Flater I wouldn't go as far as doing TDD or Unit Testing, but I'm sticking to my point that if you assign a project, you should outline not only the design but some usage scenarios. I don't know if you're an active teacher, but it's my experience that students will happily do insufficient &quot;testing&quot; whether their code is actually sensible." CreationDate="2022-01-06T14:25:09.970" UserId="6346" />
  <row Id="18826" PostId="6967" Score="0" Text="@VictorEijkhout: You're thinking of a much bigger exercise than what I am describing here. The only part where I suggested that students try it themselves (before showing them how OOP can do it better) would take around an hour (maybe two) to complete. Everything after that is described as the teacher working through the OOP implementation, not the students. It's of course a good idea to also give students some exercises themselves but I never claimed that my answer contains a complete curriculum; just a practical example that easily highlights what OOP can be leveraged for." CreationDate="2022-01-06T14:30:15.117" UserId="2164" />
  <row Id="18827" PostId="6967" Score="0" Text="@VictorEijkhout: The focus in this answer is also not on UI or end-user interaction, but rather how to model the internal workings of the application (specifically its data structure) based on a straightforward use case. The use case is very intentionally chosen to be both trivial to understand (person rents thing), and easy to adjust its complexity to gradually introduce extra requirements which highlight more advanced OOP principles (examples provided in the answer at the end). If you want to review and test every student's work, by all means; but that is simply not what this focuses on." CreationDate="2022-01-06T14:34:25.683" UserId="2164" />
  <row Id="18125" PostId="6968" Score="0" Text="Where are you based?" CreationDate="2021-08-07T22:18:50.683" UserId="204" />
  <row Id="18053" PostId="6969" Score="1" Text="That’s perfect, thank you very much indeed. I’ll take a look at the recourses given. I was planning to do a E-safety spin off to try make it work." CreationDate="2021-06-02T22:42:14.323" UserId="10607" />
  <row Id="18054" PostId="6969" Score="0" Text="I think I heard you say, &quot;Cyber Security is about protecting _systems,_ while E-safety is about protecting _users._&quot;" CreationDate="2021-06-03T21:10:53.173" UserId="1269" />
  <row Id="18055" PostId="6969" Score="1" Text="Not really, Solomon. That's a generalisation which misses out on all the useful detail." CreationDate="2021-06-04T11:16:56.897" UserId="2357" />
  <row Id="18056" PostId="6969" Score="0" Text="@SolomonSlow I think it's more like &quot;E-Safety is about users protecting *themselves* from all of the dangers of the internet, both digital and analog.&quot;" CreationDate="2021-06-11T12:14:34.333" UserId="27" />
  <row Id="18057" PostId="6969" Score="0" Text="@BenI., Well, yeah. In the context of this forum, it would be about _teaching_ users to protect themselves, and Cyber Security would be about teaching (future) owners and (future) administrators to protect their systems and their client's data." CreationDate="2021-06-11T14:29:29.677" UserId="1269" />
  <row Id="18058" PostId="6969" Score="0" Text="@SolomonSlow Nicely said." CreationDate="2021-06-12T12:20:56.617" UserId="27" />
  <row Id="18065" PostId="6977" Score="0" Text="I was completely sure that this was on our site already, but I can't find it, so I'm going to just leave an answer here.  If someone else finds it, we can point this question to that one." CreationDate="2021-06-17T14:46:14.293" UserId="27" />
  <row Id="18070" PostId="6977" Score="0" Text="I once got a massive tax refund (that I later had to pay back), because I forgot to anwer the question about my income." CreationDate="2021-06-20T08:23:15.700" UserId="204" />
  <row Id="18071" PostId="6977" Score="1" Text="The invention of `null` was an error https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/" CreationDate="2021-06-20T08:28:26.443" UserId="204" />
  <row Id="18078" PostId="6977" Score="0" Text="Null doesn't have a single consistent definition in all cases, but the most straightforward analogy is the difference between writing &quot;0&quot; on a page, and writing nothing." CreationDate="2021-06-30T23:11:46.363" UserId="9075" />
  <row Id="18080" PostId="6977" Score="0" Text="I would like to point out that python is bit different in term of the concept null, it is None https://realpython.com/null-in-python/, which makes it easy to explain the difference between 0 and None (null)." CreationDate="2021-07-01T08:49:39.467" UserId="9884" />
  <row Id="18067" PostId="6978" Score="2" Text="Designing &quot;data&quot; use-cases should be primary problem here. It is easy to justify and explain Excel (or Google Docs) if student was confronted with data analyzing issues before. Best if data issues stemmed from personal (or course) projects. When I was in highschool we had Excel lessons, but they were totally uninteresting, so I had to rediscover it much later." CreationDate="2021-06-19T19:55:56.827" UserId="9632" />
  <row Id="18068" PostId="6978" Score="1" Text="In the UK, learning spread sheets is considered Digital Literacy not Computer Science. I would expect it to be tought in other subjects: e.g. science (collection of experimental data, analysis, and plotting), maths (exploring of mathematical functions, charts, statistics, etc)." CreationDate="2021-06-20T08:12:41.060" UserId="204" />
  <row Id="18069" PostId="6978" Score="1" Text="Teaching a product &quot;Excel&quot; is marketing, teaching a tool &quot;Spread-sheets&quot; is Training." CreationDate="2021-06-20T08:14:32.903" UserId="204" />
  <row Id="18073" PostId="6980" Score="0" Text="Java also has Optional. Its fully-qualified name is java.util.Optional.  There are also ad hoc Optional classes such as OptionalInt for primitives." CreationDate="2021-06-24T20:09:34.750" UserId="21" />
  <row Id="18066" PostId="6983" Score="1" Text="Say something about the course level. &quot;Introductory&quot; can mean a lot of things." CreationDate="2021-06-18T16:46:50.070" UserId="1293" />
  <row Id="18072" PostId="6985" Score="1" Text="I think u mean if an application doesn't offer the Null option in the age field when it's irrelevant &amp; some users don't want to write it, u would be like forcing them to write zero. Now if the application uses this data in some kind of statistic gathering it may lead to wrong results, if u  care to know the av age of ur customers for ex., or even worse if u r an automated system describing medical dosage according to age (a just born baby do have an age zero if the database involve hospitals). So, this is really a good ex for Developers on the importance of offering the Null option" CreationDate="2021-06-20T08:45:26.273" UserId="9131" />
  <row Id="18086" PostId="6987" Score="0" Text="Nltk was the thing. Nowadays there seem to be more https://www.activestate.com/blog/natural-language-processing-nltk-vs-spacy/" CreationDate="2021-07-08T11:13:58.690" UserId="8837" />
  <row Id="18087" PostId="6987" Score="0" Text="Hi @Rusi... I came across 'spacy' by explosion. It is very cool and open source... I am looking further to explore" CreationDate="2021-07-08T19:45:16.583" UserId="10403" />
  <row Id="18088" PostId="6987" Score="0" Text="Er... I don't get what you mean: &quot;explosion&quot; ?!" CreationDate="2021-07-09T07:28:51.987" UserId="8837" />
  <row Id="18093" PostId="6987" Score="0" Text="Check this out https://spacy.io/" CreationDate="2021-07-10T04:43:09.867" UserId="10403" />
  <row Id="18094" PostId="6987" Score="0" Text="explosion is the company which created spacy" CreationDate="2021-07-10T04:43:31.220" UserId="10403" />
  <row Id="18076" PostId="6996" Score="1" Text="Can you give an example of a guiding class with a runner? How would this work where students are using Scanner for input and System.out for output?" CreationDate="2021-06-29T20:04:34.867" UserId="9960" />
  <row Id="18077" PostId="6996" Score="0" Text="@ub3rst4r Done!" CreationDate="2021-06-30T02:31:24.230" UserId="27" />
  <row Id="18082" PostId="6999" Score="3" Text="There is a lot of wisdom and experience boiled into this answer.  It seems like you have a lot to offer, and I hope we hear more from you." CreationDate="2021-07-04T12:57:02.103" UserId="27" />
  <row Id="18083" PostId="7000" Score="1" Text="TIL Jupyter notebooks can be updated in real time.  I had no idea.  The closest thing I've seen to what you're asking for is [cocalc](https://cocalc.com/doc/jupyter-notebook.html), but it doesn't appear to have pre-made lessons.  Hopefully someone else will pipe in with an answer." CreationDate="2021-07-07T14:26:43.923" UserId="27" />
  <row Id="18084" PostId="7000" Score="0" Text="Thank you! I don't need the lessons to be pre-made, I can write the code while talking to the students :)" CreationDate="2021-07-07T15:42:49.520" UserId="10754" />
  <row Id="18085" PostId="7000" Score="2" Text="In that case, I'll convert my comment into an answer!" CreationDate="2021-07-08T01:29:14.487" UserId="27" />
  <row Id="18095" PostId="7001" Score="1" Text="I have just tested. It works with about a second of lag (for 2 tabs on same machine). I did not sign up. There is a bit of screen wasted telling me &quot;sign up to be able to save work&quot;. (only tested for about 1 minute, nothing complex)" CreationDate="2021-07-11T08:52:24.403" UserId="204" />
  <row Id="18176" PostId="7003" Score="1" Text="Another classical example is &quot;Can I optimize an operation that I will have to repeat `m` times on my collection of items, by first moving my `n` items into a well-suited data structure?&quot; And then you need to compare the cost of building a data structure (which depends on n and will be higher for a complex structure) with the repeated cost of the operation (which is of the form `m * something(n)` where the something might be lower for a complex structure)." CreationDate="2021-08-26T15:01:43.067" UserId="10968" />
  <row Id="18103" PostId="7004" Score="1" Text="This does not seem to be about teaching or learning strategies." CreationDate="2021-07-17T17:25:30.300" UserId="204" />
  <row Id="18096" PostId="7005" Score="5" Text="Do you literally mean &quot;popular&quot; or something like &quot;effective&quot;? What is your goal here? Likewise, By CS are you focused just on programming, or the wider field?" CreationDate="2021-07-12T11:30:05.220" UserId="1293" />
  <row Id="18098" PostId="7005" Score="0" Text="If someone is a teacher, he can write in which books he uses" CreationDate="2021-07-13T09:15:12.267" UserId="10782" />
  <row Id="18102" PostId="7005" Score="3" Text="Hi 3SAT, this question is not getting much attention because it is just too broad.  We use all sorts of different books for all sorts of different things.  Start with learning goals. Are you trying to teach OOP? Imperative programming? Computational thinking? Book choice is typically the second question." CreationDate="2021-07-16T11:50:43.100" UserId="27" />
  <row Id="18113" PostId="7013" Score="0" Text="Did you mean **interactive** programming interpreter? (2nd to last bullet point)" CreationDate="2021-07-30T10:09:17.140" UserId="204" />
  <row Id="18107" PostId="7014" Score="1" Text="This is an interesting idea. The touch UI might be much more intuitive for a kid. I'm cautious to introduce the iPad since I see so many kids zoned out of life on their iPads but I think this would be substantively different since only creative tools would be available." CreationDate="2021-07-25T07:05:07.633" UserId="10809" />
  <row Id="18112" PostId="7014" Score="0" Text="I think this would satisfy the stand-alone and keep-the-child-safe criteria. However I don't think it will give the freedom needed to allow progression." CreationDate="2021-07-30T10:08:31.077" UserId="204" />
  <row Id="18106" PostId="7015" Score="0" Text="Welcome to CSEd! Nice first post. I hope we hear more from you. ☺️" CreationDate="2021-07-25T00:20:16.673" UserId="27" />
  <row Id="18110" PostId="7016" Score="0" Text="Welcome to [cseducators.se]. I hope we hear much more from you!" CreationDate="2021-07-27T02:31:25.940" UserId="27" />
  <row Id="18109" PostId="7018" Score="0" Text="Is it accessible outside of UK teachers?" CreationDate="2021-07-27T02:28:39.227" UserId="27" />
  <row Id="18111" PostId="7018" Score="0" Text="@BenI. Yes because as far as I'm aware you don't need to be a UK teacher to get a login for the CAS website." CreationDate="2021-07-29T13:52:04.997" UserId="10817" />
  <row Id="18131" PostId="7018" Score="0" Text="I didn't realize that. I've admired CAS for a long time!  I just signed up for a membership :)" CreationDate="2021-08-10T17:26:26.377" UserId="27" />
  <row Id="18114" PostId="7021" Score="1" Text="Can you improve the question by telling us: What age, What prier knowledge (can students program in another language?, do students know `HTML` and/or `CSS`?, do students know the difference between a web-browser, internet, web, …?" CreationDate="2021-07-30T10:16:38.400" UserId="204" />
  <row Id="18119" PostId="7021" Score="0" Text="Do you need a _textbook_ per se? I've taught web programming (I assume you mean basically HTML5: HTML/CSS/vanilla JS) for years but I've never used a book for it. Some colleges require(?) courses to be based on textbooks, so more context/motivation for why you need a textbook as opposed to any other resources would be nice. Are there particular skills you are hoping to teach? Any particular emphasis you want to place on apps, sites or games? Front-end web development is a broad topic. If you are open to using libraries and frameworks (React, Vue, p5, three.js etc), the scope blows up." CreationDate="2021-07-30T15:47:03.947" UserId="9426" />
  <row Id="18120" PostId="7021" Score="0" Text="Related: [Beginner Javascript course - recommended books](https://cseducators.stackexchange.com/questions/5151/beginner-javascript-course-recommended-books)" CreationDate="2021-07-30T16:06:04.847" UserId="9426" />
  <row Id="18115" PostId="7025" Score="1" Text="The question is interesting and the purpose seems good. However, the format isn't a good for for the site. You might join the, usually slow chatroom." CreationDate="2021-07-30T14:41:58.667" UserId="104" />
  <row Id="18116" PostId="7025" Score="0" Text="It is also badly tagged, but I can't think of better tags and don't recommend creating new ones here." CreationDate="2021-07-30T14:56:36.210" UserId="1293" />
  <row Id="18117" PostId="7025" Score="2" Text="And, of course, many of us want to answer: me, me, me. ;-)" CreationDate="2021-07-30T15:03:30.680" UserId="1293" />
  <row Id="18121" PostId="7025" Score="0" Text="I don't think there's an objective way to assess educators to make this not opinion-based. It's a simple question and you get the idea. How would I change it to make it answerable?" CreationDate="2021-07-31T15:30:50.910" UserId="10865" />
  <row Id="18126" PostId="7031" Score="0" Text="Redis is an &quot;in memory&quot; database." CreationDate="2021-08-08T10:40:15.497" UserId="1293" />
  <row Id="18127" PostId="7031" Score="0" Text="Your requirements seem inconsistent. &quot;University level&quot; implies the student has background." CreationDate="2021-08-08T10:41:49.690" UserId="1293" />
  <row Id="18128" PostId="7031" Score="2" Text="RedisLabs provides [courses](https://university.redislabs.com/#courses) on redis, which may be useful to look into. How far is your class expected to go?" CreationDate="2021-08-08T14:25:04.043" UserId="58" />
  <row Id="18129" PostId="7031" Score="0" Text="@thesecretmaster for about 3-4 weeks, 10-13 topics we plan to cover" CreationDate="2021-08-08T17:10:24.897" UserId="6387" />
  <row Id="18134" PostId="7033" Score="3" Text="https://www.w3schools.com/ &#xA;Is pretty much first year of college in the Netherlands haha." CreationDate="2021-08-15T18:17:48.877" UserId="8867" />
  <row Id="18135" PostId="7033" Score="1" Text="@A.bakker You should turn that into an answer, since it's probably the correct place to go in any case." CreationDate="2021-08-15T18:27:52.803" UserId="27" />
  <row Id="18136" PostId="7033" Score="0" Text="@BenI. will do, but with some more info haha." CreationDate="2021-08-15T18:36:11.167" UserId="8867" />
  <row Id="18137" PostId="7034" Score="2" Text="Hi, thanks, yes that looks perfect - well structured and simply written :)" CreationDate="2021-08-15T19:52:29.500" UserId="10941" />
  <row Id="18138" PostId="7034" Score="2" Text="Really? The w3schools company has a pretty bad reputation in the JS community, which even led to the launch of https://www.w3fools.com. They improved, but their documentation is still lacking, [MDN](https://developer.mozilla.org/) is a much better resource." CreationDate="2021-08-16T00:59:09.450" UserId="660" />
  <row Id="18139" PostId="7034" Score="2" Text="@Bergi from what I have seen as a sort of teacher, the students find MDN a bit overwhelming as beginners. W3Schools is, a bit more beginner friendly up to the point that high-schoolers seem to be able to follow it with relative ease." CreationDate="2021-08-16T06:42:49.370" UserId="8867" />
  <row Id="18144" PostId="7034" Score="0" Text="https://www.khanacademy.org/computing/computer-programming/html-css or https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML" CreationDate="2021-08-18T04:09:22.213" UserId="9884" />
  <row Id="18158" PostId="7034" Score="0" Text="Thanks for the help - yes the site looks like a good &quot;fit&quot;" CreationDate="2021-08-22T10:27:21.000" UserId="10941" />
  <row Id="18140" PostId="7035" Score="1" Text="For my degree requirements for a B.S. in computer science a logic course was required but it was not a `prerequisite for the first programming course`. I think making it a prerequisite before any programming course would make getting to the higher level courses, think critical path, such as complier design all that harder and thus would not expect to see it as a prerequisite before the first programming course. In other words such a requirement would extend the critical path for all programming classes for such a degree." CreationDate="2021-08-17T08:13:09.013" UserId="2516" />
  <row Id="18142" PostId="7035" Score="1" Text="I don't, however, advocate that digital logic be taught before programming in a CS curriculum. It is at the bottom of the stack (from the CS standpoint) but not the first thing taught." CreationDate="2021-08-17T15:04:49.653" UserId="1293" />
  <row Id="18146" PostId="7035" Score="0" Text="I suspect that there will be no answer because there probably isn't such a program.  (It certainly seems like a bad idea to me to create a program that literally starts there.)" CreationDate="2021-08-18T20:05:30.577" UserId="27" />
  <row Id="18143" PostId="7037" Score="1" Text="Assignment is a [bad construct](https://cseducators.stackexchange.com/a/6568/8837). Don't teach them (too early) if you've any say in the matter. The creator of assignment said so [most clearly](https://amturing.acm.org/award_winners/backus_0703524.cfm). And mutation is [even worse](https://cseducators.stackexchange.com/questions/2808/why-would-mutation-be-considered-by-some-as-a-difficult-concept-to-grasp/6567#6567). Stated more positively: teach functional programming" CreationDate="2021-08-18T02:00:03.927" UserId="8837" />
  <row Id="18147" PostId="7037" Score="0" Text="If those are assignments (as opposed to declarations,) and if the language is any procedural language other than C++,\* then `a` and `f` are not abstract labels &quot;stuck on to&quot; a value or an object. They are _variables._ They are concrete locations in memory into which a value or a reference to an object may be stored, and the assignment represents the _run-time action_ of storing the value or the reference." CreationDate="2021-08-19T18:40:55.520" UserId="1269" />
  <row Id="18148" PostId="7037" Score="0" Text="\* Don't ask me to talk about C++.  Just don't!" CreationDate="2021-08-19T18:41:14.537" UserId="1269" />
  <row Id="18150" PostId="7037" Score="1" Text="Your points are important and well taken @SolomonSlow. Yet I need to say that they reiterate a mistake by misunderstanding the misnomer — &quot;variable&quot;. The English word &quot;vary&quot; of course is used for *time-varying* and is common language. But &quot;variable&quot; was almost exclusively math-speak at least until FORTRAN. And it always meant *space-varying*. The math : &quot;Let x be a complex variable&quot; means quite unambiguously &quot;x can take any value from the space C&quot;. There is no suggestion or implication of a process in time." CreationDate="2021-08-20T03:50:58.270" UserId="8837" />
  <row Id="18151" PostId="7037" Score="1" Text="[Bob Harper](http://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf)&#xA; (pg 311)&#xA; Prof at CMU:&#xA;«The language maintains a sharp distinction between **variables** and **assignables**. Variables are introduced by λ-&#xA;abstraction, and are given meaning by substitution (timeless). Assignables are introduced by a declaration, and are given meaning by assignment and retrieval&#xA;of their contents... (in time).&#xA;&#xA;Expressions *evaluate* to values, and have no effect on assignables. Commands are *executed* for their effect on assignables...»" CreationDate="2021-08-20T03:51:33.820" UserId="8837" />
  <row Id="18152" PostId="7037" Score="0" Text="That's Bob Harper senior Prof at CMU who has [kicked out OOP](https://existentialtype.wordpress.com/2011/03/15/teaching-fp-to-freshmen/)&#xA;from the CMU core curriculum for being &quot;anti-modular and anti-parallel&quot; " CreationDate="2021-08-20T03:53:29.233" UserId="8837" />
  <row Id="18153" PostId="7037" Score="0" Text="@Rusi, Yes. That is one of the most important things that new programmers--especially if they come from a math background--need to learn: The traditional meaning of &quot;variable&quot; in the nomenclature of procedural programming languages always is different from what it means in mathematics. Looks like Bob Harper wants to fix that." CreationDate="2021-08-20T13:27:40.617" UserId="1269" />
  <row Id="18154" PostId="7037" Score="0" Text="@Rusi, Re, &quot;no suggestion or implication of a process in time.&quot; In math, &quot;time&quot; _is_ a &quot;space.&quot; A mathematical space is a continuum that can represent a physical space, or time, or some metric on the stock market, or any of an endless list of increasingly abstract ideas." CreationDate="2021-08-20T13:34:04.630" UserId="1269" />
  <row Id="18174" PostId="7037" Score="0" Text="@SolomonSlow That's a good point ; when discussing an algorithm in a mathematical proof (for instance to prove its correctness), a variable `x` from the algorithm should not be translated into a mathematical variable `x`, but into a **sequence** of variables `x_t` describing the value of `x` at time `t`." CreationDate="2021-08-26T13:49:31.120" UserId="10968" />
  <row Id="18217" PostId="7037" Score="0" Text="@SolomonSlow You are correct that mutation is confusing. The solution to this is not to teach that assignment and variables in programming are different to maths. The solution is to avoid mutation, for as long as possible. I do this when teaching python (python has mutation, but we don't have to use it). In the structure and interpretation of computer programs  (lecture version) we get to about hour 20 (½ way through the course), before mutation is used." CreationDate="2021-08-31T07:05:59.080" UserId="204" />
  <row Id="18243" PostId="7037" Score="0" Text="I think that if we tell students that a computer is an electrical machine that holds integer values in memory locations, and that new values can be placed there, then assignment will not be mystifying. If we explain that a memory location can hold the address of another memory location, then indirect reference will also be understood. With that, basically you have fully explained what is important about how computers differ from all other things in the universe. How does this get overlooked?" CreationDate="2021-09-03T00:57:54.307" UserId="5349" />
  <row Id="18172" PostId="7038" Score="0" Text="*&quot;But, by the time that you get to arrays in a course, the idea of an assignment will already be so ingrained that the complication is unlikely to arise.&quot;* There are many courses on C programming which consider that variables and assignment are a simple concept that will be easily understood by every student, but that pointers and arrays are super complex and won't be understood easily. And indeed students tend to fail when they arrive at the &quot;pointers&quot; part of the course. In many cases, this is due to the course not properly explaining the concept of assignment, so that (...)" CreationDate="2021-08-26T13:45:04.630" UserId="10968" />
  <row Id="18173" PostId="7038" Score="0" Text="(continued) so that it's not &quot;ingrained&quot; like you say, by the time the students get to pointers and arrays." CreationDate="2021-08-26T13:45:26.207" UserId="10968" />
  <row Id="18218" PostId="7038" Score="2" Text="You say that you prefer `reference` to `label`, but then use `name` (Which means `label`). Therefore, it looks like you prefer `label`. I also like label: One reason for this is that the label can be associated with a reference, or a value." CreationDate="2021-08-31T07:13:17.160" UserId="204" />
  <row Id="18219" PostId="7038" Score="1" Text="The primitives vs non-primitives distinction is unique to Java: Mutable/immutable, value/reference, and primitive/non-primitive, are all independent concepts, and should be orthogonal in the language design. However, Java (somewhat) ties them together." CreationDate="2021-08-31T07:18:58.587" UserId="204" />
  <row Id="18155" PostId="7040" Score="0" Text="I had a whole course about logic, which helped me a lot, but I'm on a specific field at the boundary between CS engineering and electronical engineering, so this was really necessary. But I guess this would help any CS student to be familiarized with abstraction without having to learn a specific language. It helps at the very beginning to stick to paper and learn to abstract things." CreationDate="2021-08-20T15:05:49.833" UserId="4900" />
  <row Id="18156" PostId="7041" Score="0" Text="I come from an Engineering faculty, but even in other places I worked on like Computer &amp; Information Sciences ( gets divided in 4th year to IT, Computer Science, Scientific Computing) it is almost the same; An Introduction before /with 1st programming course, digital logic design in 2nd year or 2n semester before Computer Architecture ( I think Assembly lang, System Programming, Compilers,.. need Digital Logic; &amp; they r necessary even for a developer to understand tokens, EVM,.. better for ex.)" CreationDate="2021-08-20T15:32:57.960" UserId="9131" />
  <row Id="18168" PostId="7044" Score="13" Text="This is like wanting to train swimming, but without a body of water. Habitually applying algorithmic thinking in non-programming domains or situations comes from having efficiently honed it via programming, not *vice versa*." CreationDate="2021-08-26T07:03:08.257" UserId="1748" />
  <row Id="18184" PostId="7044" Score="0" Text="@Kaz That's just silly, go tell the ancient greeks that. https://en.wikipedia.org/wiki/Timeline_of_algorithms" CreationDate="2021-08-26T23:19:28.833" UserId="10973" />
  <row Id="18185" PostId="7044" Score="2" Text="Pencil-and-paper arithmetic uses algorithms, such as long division. Students who can perform long division already have an algorithmic concept. Symbolic games and puzzles include algorithmic concepts. These things all have one thing in common: they provide some representation of the data structure, but the manipulations of it to search through the possible space are left to the human." CreationDate="2021-08-26T23:48:48.117" UserId="1748" />
  <row Id="18187" PostId="7044" Score="6" Text="You could use English, but you'd end up structuring &amp; formalising it to the point that it was basically pseudocode, which is arguably a programming language since you can program carbon units with it. So I'm not sure what you're asking is even possible." CreationDate="2021-08-26T17:37:15.950" UserId="10971" />
  <row Id="18191" PostId="7044" Score="0" Text="What do you mean? Could you give an example of &quot;algorithmic thinking per se&quot; without programming language? Or perhaps you mean &quot;without being concerned with the minute details of a particular programming language&quot;? I think any precise description of an algorithm is a programming language. Do you want to be even independent of paradigm (imperative, functional, logical)?" CreationDate="2021-08-27T14:45:29.030" UserId="5077" />
  <row Id="18192" PostId="7044" Score="0" Text="_now if we could just sort all the answers by length ..._" CreationDate="2021-08-27T18:24:04.243" UserId="3350" />
  <row Id="18205" PostId="7044" Score="0" Text="you don't have to use a programming language to understand the difference between linear search &amp; binary search, bubble sort/ insertion sort/quicksort/merge sort/... etc; Probabilistic Algorithms worked fine with Pseudo code for post-graduates. Most available lectures for MIT, Stanford,...etc do not go into programming details in Algorithms &amp; Data structures courses, we only do that sometimes or make lab stress on it because it's a chance for students to practice programming skills as well" CreationDate="2021-08-28T18:41:22.807" UserId="9131" />
  <row Id="18206" PostId="7044" Score="2" Text="If you want high school Mathematics style, there is this book *The Teaching &amp; Learning of Algorithms in School Mathematics. 1998 Yearbook* &#xA; https://eric.ed.gov/?id=ED419669. I just bought it out of curiosity or maybe as intellectual exercise" CreationDate="2021-08-29T12:58:24.323" UserId="9131" />
  <row Id="18207" PostId="7045" Score="0" Text="Could this help? https://mobile.twitter.com/AliceRaffaele1/status/1392857916365959168" CreationDate="2021-08-29T13:15:53.323" UserId="9131" />
  <row Id="18216" PostId="7045" Score="0" Text="Your short summary can be shorter, by not including the words &quot;a short summary&quot;. Also, putting this up front makes it harder to read. There is a lot of detail, that we don't yet know the relevance of. Start with the key problem, then add detail." CreationDate="2021-08-31T06:53:21.643" UserId="204" />
  <row Id="18162" PostId="7047" Score="2" Text="The OP asked for something other than &quot;books that teach how to do algorithms in language X or Y&quot;. CLRS is a book that teaches how to do algorithms in pseudocode. How is this not a &quot;book that teaches how to do algorithms in language X or Y&quot;? Except the added disadvantage that you can't even run the code in the book to see how it works." CreationDate="2021-08-25T19:24:25.040" UserId="945" />
  <row Id="18163" PostId="7047" Score="1" Text="@JörgWMittag Please read the question again, carefully. The OP states `Do you know any book or Internet resource for that?`" CreationDate="2021-08-25T19:44:29.950" UserId="2516" />
  <row Id="18169" PostId="7047" Score="0" Text="The point is when u teach using pseudo code, u concentrate on the ideas irrelevant of the Programming language the students learn/use that could vary through the years. What usually happens when I used to teach is the TA in the lab (there r secs&amp;labs associated with the course) might help the students in the their assignments of turning pseudo code to program. The language differs thru the years (or faculties)Pascal,C,C++,Java. However, now Python is much easier since it's Algorithmic in nature; both MIT &amp; Tim Roughgarden use it in their Algorithms &amp; Data Structures courses" CreationDate="2021-08-26T09:09:11.180" UserId="9131" />
  <row Id="18170" PostId="7047" Score="0" Text="Let me add that, the idea that I give u the grade on this course according to ur understanding of the concepts choosing the right algorithm technique or data structure to approach the problem irrelevant of ur practice or excellence in programming skills as a developer, that's the responsibility of other courses. If I am a company to hire u according to ur grades either in a developer or a designer job I should know which evaluates which, although they're connected." CreationDate="2021-08-26T09:16:40.677" UserId="9131" />
  <row Id="18178" PostId="7047" Score="0" Text="@ShAr  can you give me an example of a programming language that *isn't* &quot;algorithmic in nature&quot;?  I'm not even sure what it means." CreationDate="2021-08-26T17:32:19.370" UserId="10971" />
  <row Id="18181" PostId="7047" Score="1" Text="@BlokeDownThePub: Prolog (it's pretty purely declarative), AWK, the combination of Lex and YACC.  Not every problem is best described/solved by a user-written algorithm." CreationDate="2021-08-26T19:54:35.523" UserId="9979" />
  <row Id="18209" PostId="7047" Score="0" Text="@ShAr, if you go the pseudocode path, you must state what is --and isn't-- valid pseudocode, so you don't get &quot;algorithms&quot; that read &quot;solve the problem&quot;. Surprise: You just invented a specific programming language, with all the irking quirks. With the *heavy* disadvantage that you can't check/execute/test the programs at all." CreationDate="2021-08-29T22:48:30.410" UserId="5219" />
  <row Id="18210" PostId="7047" Score="0" Text="@BlokeDownThePub, Prolog is &quot;declarative&quot; in that you don't state the execution order; but if you aren't acutely aware how the backtracking search works, you get nowhere. Worst of both worlds." CreationDate="2021-08-29T22:51:42.133" UserId="5219" />
  <row Id="18212" PostId="7047" Score="0" Text="Not really, you just have to make it clear &amp; understandable, and discribe the complexity of each step/statement; it is called &quot;Pseudo&quot;. Anyways this whole debate is endless; if the question asker care about Algorithmic Thinking from a Mathematical point of view I added another book link in one of those comments, although high school book it's what he's asking and can give the intuition about the methodology. https://www.amazon.com/Teaching-Learning-Algorithms-School-Mathematics/dp/0873534409" CreationDate="2021-08-30T06:26:48.223" UserId="9131" />
  <row Id="18165" PostId="7048" Score="1" Text="Though if you want to look at a really prodigious mental calculator, I'd suggest John von Neumann. He looked to have the ability _innately_ like a savant as it was there ever since his youngest years; meaning it was genetic pot luck - lots of it, like winning the jackpot. For the rest of us without such luck to be able to &quot;just know&quot;, then it has to be built up, as you suggest, like a building. But in this case, the question I believe could be asked as &quot;can you 'build that building' _without a programming language_ specifically?&quot; _not_ &quot;can you skip building the building?&quot;" CreationDate="2021-08-25T23:58:10.620" UserId="4693" />
  <row Id="18166" PostId="7048" Score="1" Text="(Note: just to get in before anyone objects to my characterization, yes JvN also had to go through much rigorous education and learning and stuff too, but it was all _atop_ that innate foundation. Which is what put him above all the rest, even others considered &quot;geniuses&quot; of his time. It's like everyone's building a building, but his was being built atop a mountain. Guess which one reaches higher, and/or who has to build more and who has to build less?)" CreationDate="2021-08-25T23:59:23.783" UserId="4693" />
  <row Id="18179" PostId="7048" Score="0" Text="@The_Sympathizer  TIT somehow JvN &quot;won the genetic lottery&quot; is dangerous and closeminded.  It's not even clear if humans compared to those that don't have cognitive disorders *can* be geniuses to other people in the sense that they are strictly more intelligent on the basis of genetics.  IQ tests basically never transfer to other groups of people, and even the idea of thinking about numbers linearly is not how humans naturally think about numbers.   What *does* appear to happen, is that all these &quot;prodigies&quot; are well exposed to ideas and practice in these fields well before anyone else does." CreationDate="2021-08-26T18:50:15.943" UserId="3168" />
  <row Id="18180" PostId="7048" Score="3" Text="@The_Sympathizer Often, a child has a *slight* inclination for something and an adult sees it and is amazed, and feels they have a &quot;genius&quot; on their hand, then gives *that* child all the resources in the world to succeed in that thing.  JvN and co's &quot;intelligence&quot; is far more likely explained by the opportunity complex than anything else.  If you taught an 8 year old calculus, would you not expect to be better at calculus than other kids?  Assumptions otherwise are pedestal lifting, lionizing and hubris.  It's the same sort of thinking that lead people to believe in superior races of people." CreationDate="2021-08-26T18:54:17.167" UserId="3168" />
  <row Id="18186" PostId="7048" Score="0" Text="@Krupip: Yes, but how do you know that he had only a &quot;slight&quot; natural inclination? And I'm not saying the other stuff doesn't matter - it's more _both,_ not one xor the other. And moreover, failure to provide such resources should be considered a crime of the state (i.e. like a human rights abuse), provided it has the power to do so." CreationDate="2021-08-27T00:24:19.833" UserId="4693" />
  <row Id="18188" PostId="7048" Score="0" Text="@The_Sympathizer That's only viable in the post-scarcity world. My government absolutely can provide the resources to learn various fields for all underage citizens at the expense of infrastructure, healthcare, and military budget. Doesn't mean the government and voters are going to approve it." CreationDate="2021-08-27T05:02:49.257" UserId="1649" />
  <row Id="18193" PostId="7048" Score="0" Text="@ben-i hi, I hope my question isn't directly off topic to OP's question. But based on your answer, I am wondering, is your answer one of the reasons why the SICP course (6.001) fell out of favor nowadays because the concepts in the book are too abstract for beginners? I am not a teacher BTW, I just came here because I am a little intrigued by your answer." CreationDate="2021-08-27T18:52:25.960" UserId="10982" />
  <row Id="18194" PostId="7048" Score="1" Text="@lightning_missile I've never used SICP for beginners, only for 3rd year students.  Is that even a thing?  It seems inappropriate to me.  OTOH, some college and university classes try to winnow out students that aren't exceptional in their intro classes, so maybe that's a good technique to eliminate students who would need a lot of support." CreationDate="2021-08-27T19:32:30.687" UserId="27" />
  <row Id="18199" PostId="7048" Score="0" Text="@The_Sympathizer beware the fixed mind set ( https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve?language=en ) It will hold you and your students back. Another observation on nature vs nurture: I say a presentation that said that nearly all mental illness comes from environmental stress. This stress breaks us. However, genetic factors [and past history], effect **where** we will break." CreationDate="2021-08-28T09:28:28.750" UserId="204" />
  <row Id="18201" PostId="7048" Score="0" Text="“experts use surprisingly small numbers of neutrons to accomplish tasks”—That should be “neurons,” as the amount of “neutrons” involved in any macroscopic object is going to be simply staggering :P (Also, I’d be kind of surprised if Einstein or Feynman spent much, if any, time thinking about how to perform cube roots in their heads. Maybe Feynman, he seems quirky like that...)" CreationDate="2021-08-28T12:58:02.183" UserId="1246" />
  <row Id="18202" PostId="7048" Score="0" Text="@KRyan Haha good catch! I'm going to blame that on fat thumbs and autocorrect " CreationDate="2021-08-28T13:51:31.823" UserId="27" />
  <row Id="18164" PostId="7049" Score="0" Text="For me it was drawing a smiley face on a whiteboard. Imo this is the correct answer. This really shows how the &quot;programmer mindset&quot; is." CreationDate="2021-08-25T21:57:54.433" UserId="9512" />
  <row Id="18167" PostId="7049" Score="10" Text="For a concrete example of how such teaching might go, try the [&quot;can you teach me to make a PB&amp;J sandwich?&quot;](https://www.youtube.com/watch?v=Ct-lOOUqmyY) video." CreationDate="2021-08-26T04:29:19.303" UserId="3171" />
  <row Id="18177" PostId="7049" Score="0" Text="Tnx @Danielwagner that was worth an answer!" CreationDate="2021-08-26T16:54:20.587" UserId="8837" />
  <row Id="18200" PostId="7049" Score="1" Text="Yes, I remember the days. You could not see the black-board for all the smoke." CreationDate="2021-08-28T09:30:44.150" UserId="204" />
  <row Id="18175" PostId="7051" Score="2" Text="Have you considered graphics?" CreationDate="2021-08-26T14:31:05.223" UserId="3799" />
  <row Id="18189" PostId="7051" Score="0" Text="But Graphics requires only vectors. It doesn't really require any Euclidean Geometry" CreationDate="2021-08-27T12:02:58.557" UserId="10967" />
  <row Id="18195" PostId="7051" Score="2" Text="Ironically, Machine Learning and classification in particular, is all about looking at data from a geometric perspective." CreationDate="2021-08-27T23:15:00.000" UserId="10968" />
  <row Id="18196" PostId="7051" Score="1" Text="Have you considered the field of computer vision? Image analysis, image classification, 3d image reconstruction, pointclouds manipulation, etc. This is all Euclidean geometry. And will involve machine learning. It has applications such as medical imaging, autonomous cars, and video games." CreationDate="2021-08-27T23:17:06.663" UserId="10968" />
  <row Id="18203" PostId="7051" Score="0" Text="I understand that computer vision requires geometry and I search for some examples on google and I found that most of them are actually Coordinate geometry rather than Euclidean geometry. That means Computer vision is more about Coordinate geometry and vectors and stuffs like Combinatorial geomery" CreationDate="2021-08-28T14:57:01.043" UserId="10967" />
  <row Id="18208" PostId="7051" Score="1" Text="Could this help? https://www.quora.com/What-are-some-uses-of-Plane-Euclidean-geometry-in-Computer-Science" CreationDate="2021-08-29T13:19:32.190" UserId="9131" />
  <row Id="18213" PostId="7051" Score="0" Text="@ShAr I just read it and found that Mostly 3D geometry is used in Computer Science. But  there is little to no use of euclidean geometry" CreationDate="2021-08-30T11:53:37.463" UserId="10967" />
  <row Id="18214" PostId="7051" Score="0" Text="What is used in VR &amp; 3D applications to determine the change of eye view, dimensions of objects while moving,...etc doesn't involve Euclidean Geometry?. I think there are mapping to some NP-Hard problems to geometric problems, maybe the max indep set problem; but I can't find the paper now, &amp; honestly I don't know if the origins of the Geometric Brownian Motion in Stochastic random walks comes from Euclidean Geometry. Sorry if this is not helpful, it is not my area." CreationDate="2021-08-30T12:14:35.413" UserId="9131" />
  <row Id="18215" PostId="7051" Score="0" Text="https://www.sciencedirect.com/science/article/pii/S0925772112000740 Here's the one I mean for  geometric set covering&amp; packing  , and also this one for Geometric Bin Packing https://arxiv.org/abs/2105.02827" CreationDate="2021-08-30T12:29:35.803" UserId="9131" />
  <row Id="18226" PostId="7051" Score="0" Text="Proving Euclidean Geometry uses many of the same skills: Problem/puzzle solving." CreationDate="2021-08-31T21:24:44.497" UserId="204" />
  <row Id="18227" PostId="7051" Score="1" Text="My experience, as a computer programmer, is that the only maths is boolean-algebra, set-theory, pattern-matching (I may have missed one), and whatever is needed for the particular problem." CreationDate="2021-08-31T21:28:34.700" UserId="204" />
  <row Id="18263" PostId="7051" Score="2" Text="More than just graphics, game development tends to boil down to complex geometry. For example, calculating the trajectory of a bullet, or figuring out if player A can see object B or if it is obscured. There is a lot of 2D and 3D geometry going on, depending on the specific gameplay. _&quot;But Graphics requires only vectors.&quot;_ Simple graphics, maybe. But try calculating ambient occlusion or accurate reflections. You can't not take geometric bodies into consideration when trying to calculate those." CreationDate="2021-09-13T13:36:07.823" UserId="2164" />
  <row Id="21499" PostId="7051" Score="1" Text="@muchin You wrote that Computer Science is &quot;mainly about number theory and combinatorics and probability.&quot;  I would not describe computer science that way. One branch of computer science is Algorithms and Data-Structures. One of the older textbooks in that field is ***Introduction to Algorithms*** by Cormen, Thomas H, Leiserson, Charles E, Rivest, Ronald L, Stein, Clifford. I saw that textbook used during the 2010s at two different American Universities. Computer Science is not pure mathematics. Number theory, combinatorics, and probability theory are all more mathematical than Computer Sci." CreationDate="2023-11-04T01:38:17.083" UserId="9253" />
  <row Id="21554" PostId="7051" Score="0" Text="Actually we can flip your question around. &quot;Can I do machine learning without linear algebra or without calculus?&quot; The answer to that question is no. If you go into machine learning with a background education in math, you'll have a **tremendous** advantage over people who don't have that background. And that's just for machine learning. Other programming problems use additional kinds of maths." CreationDate="2023-12-03T15:55:16.497" UserId="10968" />
  <row Id="21589" PostId="7051" Score="1" Text="Check this https://math.stackexchange.com/questions/74146/is-there-any-good-reason-for-a-programmer-to-study-geometry" CreationDate="2024-01-09T05:42:01.863" UserId="9884" />
  <row Id="18197" PostId="7057" Score="1" Text="I think the issue in many age groups and school cultures is that students simply tune out when off camera.  There are kids in my neighborhood who used to go out and play basketball once they &quot;signed in&quot; to class." CreationDate="2021-08-27T23:24:29.597" UserId="27" />
  <row Id="18198" PostId="7057" Score="0" Text="@BenI.: Good? As a college instructor, that's preferable to the case of bored students taking the opportunity to intentionally disrupt the class for everyone else. There are no &quot;sign-ins&quot; to my class, and that's conventional, considering the responses to this question on SE Academia: https://academia.stackexchange.com/questions/120218/my-university-requires-that-i-take-attendance-how-should-i-treat-students-who-a" CreationDate="2021-08-27T23:41:08.930" UserId="8137" />
  <row Id="18251" PostId="7058" Score="0" Text="Are you looking for a more mathematical book that covers using programs to model computer graphics or are you looking for a book that covers more real world programming problems that use computer graphics? In other words are you looking to come from the bottom up or the top down? The problem with top down books is that they will have to drill all the way down from the top to get to the mathematical models, the problem with bottom up books is that they rarely connect the concepts to real world problems. Continued." CreationDate="2021-09-11T10:26:54.223" UserId="2516" />
  <row Id="18252" PostId="7058" Score="0" Text="There might be some books in the middle but I have not looked for books on computer graphics for some time as I learned the basics for my degree many decades ago and have been able to keep a pulse the on the progress over time so have a better understanding of the landscape and where to find resources to solve my problems for which are never specifically covered in books." CreationDate="2021-09-11T10:32:09.290" UserId="2516" />
  <row Id="18253" PostId="7058" Score="1" Text="I want my students to do practical projects to implement really basic graphics concepts from scratch. I imagine building a 3d rasterizer will take several weeks: introducing the graphics library, drawing lines, projecting from 3d, camera transformations, z-buffers, anti-aliasing. Similarly when we talk about shaders I want to focus on implementing the basics by hand: Lambertian and Blinn-Phong lighting, normal maps, vertex displacement, image-based lighting etc. I would want to talk about the basic mathematical theory, then we implement the theory by hand in code." CreationDate="2021-09-11T13:30:38.540" UserId="10999" />
  <row Id="18254" PostId="7058" Score="0" Text="I don't think I can do better than some of the answers to this [question](https://gamedev.stackexchange.com/q/12299/108025) on the Game Dev sister site. If you find a part of that of value then post that as an acceptable answer. I am not after points here just useful information. Remember that a bounty is not for an answer but for more people to look at your question." CreationDate="2021-09-11T13:56:26.483" UserId="2516" />
  <row Id="18255" PostId="7058" Score="0" Text="The link above also notes a more detailed write up at [Computer Graphics - Resource&#xA;Materials for self-study](https://legends2k.github.io/note/cg_resources/) HTH" CreationDate="2021-09-11T14:02:22.010" UserId="2516" />
  <row Id="18256" PostId="7058" Score="1" Text="I would suggest moving to the [CS-SE](https://cs.stackexchange.com/) since you want a math-theory outlook and the folks there are more theory centered than out here" CreationDate="2021-09-11T15:31:59.110" UserId="8837" />
  <row Id="18273" PostId="7058" Score="0" Text="Thanks for awarding the bounty. Really was not expecting it. :)" CreationDate="2021-09-17T13:55:39.323" UserId="2516" />
  <row Id="18272" PostId="7059" Score="0" Text="Awarding bounty for your links in the comments above. Thanks!" CreationDate="2021-09-17T13:38:26.487" UserId="10999" />
  <row Id="18281" PostId="7064" Score="0" Text="thank you for your answer looks like a nice book however I have some data related to the number of exercises of Deitel Python 2020 there are 538 examples and 471 exercises. I see a few in the Downey's book if we compare this book with Deitel." CreationDate="2021-09-29T07:47:31.873" UserId="11027" />
  <row Id="18274" PostId="7066" Score="2" Text="How did you choose that class?  What are your goals?" CreationDate="2021-09-24T15:17:40.100" UserId="27" />
  <row Id="18275" PostId="7066" Score="0" Text="To learn as much computer science as I can without going to a university. @BenI." CreationDate="2021-09-24T16:09:17.930" UserId="11006" />
  <row Id="18276" PostId="7066" Score="5" Text="With the goal of... being a programmer in industry?  Being a programmer for fun projects on your own?  Learning the mathematical foundations of CS?  Imitating a CS degree?  Those are all vastly different goals.  CS is huge field.  It's like saying you want to learn about the arts, and asking whether a particular course on oboe repair is a good place to start.  It might be, but it all depends on where you're trying to go with it." CreationDate="2021-09-24T17:17:55.703" UserId="27" />
  <row Id="18277" PostId="7066" Score="0" Text="I think I want to imitate a cs degree and ,(more importantly), gain as much knowledge as I can on the CS field,(I just might dive in security related stuff later on). From your answer, I think I'm gonna go for it, Thank you for your time @BenI. &lt;3" CreationDate="2021-09-24T18:04:41.597" UserId="11006" />
  <row Id="18278" PostId="7066" Score="2" Text="If you want to learn a &quot;CS degree equivalent&quot;, take a look at the [ACM/IEEE guidelines](https://www.acm.org/education/curricula-recommendations), that gives you a good idea what that (should) cover, and to what depth. Just be clear that this will be some 4-6 years of continuous effort." CreationDate="2021-09-26T01:23:46.743" UserId="5219" />
  <row Id="18287" PostId="7067" Score="1" Text="This is by far the best answer, cutting through all the detail to the real issue: files don't actually exist. (Folders doubly so.) No one has seen one at any time, they are a made up idea in a made up system in... a made up world. Until someone gets it that we invented everything except gravity and the integers, they will not see the way in which this question could even arise." CreationDate="2021-10-01T10:07:25.113" UserId="5349" />
  <row Id="18288" PostId="7067" Score="1" Text="Wasn't it Pascal who said something like: *Geometry is not 'true', it is convenient.*" CreationDate="2021-10-01T10:10:37.847" UserId="5349" />
  <row Id="18279" PostId="7069" Score="0" Text="From the description on that wikipedia page (and from the article you linked to as well), it sounds like git uses persistent data structures rather than retroactive.  Github at least uses blobs, which are immutable." CreationDate="2021-09-27T17:34:12.553" UserId="27" />
  <row Id="18290" PostId="7069" Score="0" Text="@BenI. While I am not Git Jedi I do recall that deep down in Git one can retroactively change a commit, thus retroactive instead of persistent. I don't have the time at present to research this but the 8-ball says `sounds reasonable`" CreationDate="2021-10-01T12:05:18.740" UserId="2516" />
  <row Id="18294" PostId="7069" Score="0" Text="No, no, I mean that the reference you linked to states outright that it's persistent." CreationDate="2021-10-03T14:21:13.397" UserId="27" />
  <row Id="18282" PostId="7070" Score="1" Text="Do you mean &quot; L1 and L2  are _regular_ languages on the same alphabet&quot;. I haven't seen the concept before. Which textbook(s). Hopefully plural. I'd expect the book author(s) to give some reasonable examples." CreationDate="2021-09-29T16:22:57.417" UserId="1293" />
  <row Id="18283" PostId="7070" Score="0" Text="@Buffy, the definition makes sense for all languages, not just regular ones. And proving that such constructions give regular languages if $L1$ and $L2$ are regular is a popular exercise." CreationDate="2021-09-29T18:49:43.713" UserId="5219" />
  <row Id="18291" PostId="7075" Score="2" Text="BlueJ is not the problem. It is just an IDE like any other but especially useful for teaching. Your issues lie elsewhere. But knowing the basics of a language isn't enough." CreationDate="2021-10-02T18:24:15.373" UserId="1293" />
  <row Id="18293" PostId="7075" Score="1" Text="`Where should I get started?` On sites like GitHub for issues they will sometimes tag them as easy enough for a beginner. See: [Links for beginners willing to contribute to OpenSource projects](https://gist.github.com/stefanmaric/d5a03eeb89af81e5537e2efe7dd479cf) I would make this an answer but it really just a link and link only answers really are not answers. But if that is acceptable here can easily make it an answer." CreationDate="2021-10-03T07:41:32.577" UserId="2516" />
  <row Id="18364" PostId="7077" Score="0" Text="this is incorrect. A name is just the name of a single file or directory. What you describe as name is a path. Also, the name is part of the path." CreationDate="2021-10-29T15:26:28.607" UserId="11210" />
  <row Id="19635" PostId="7077" Score="0" Text="good, but I wouldn't start with &quot;a series of ones and zeros&quot; in the most basic explanation, since there's basically no simple way for students to view files as a series of ones and zeros.  I feel like starting with &quot;a series of letters, numbers, and about 200 other symbols&quot; will let them explore better, and next they can learn that these symbols are representations of ones and zeros." CreationDate="2022-04-28T20:26:30.427" UserId="12000" />
  <row Id="19639" PostId="7077" Score="0" Text="@MichaelScottAsatoCuthbert _&quot;a series of letters, numbers, and about 200 other symbols&quot;_ does not in my opinion adequately cover what a file is, it is one specific way (of countless many) of how a file can be interpreted. Yours is a more concrete example use case of a file and I agree that this helps with understanding the general purpose of a file; which is why my answer pretty much _immediately_ discusses interpretation after stating that a file is a sequence of ones and zeroes; but it is not a good base definition of a file in and of itself." CreationDate="2022-04-29T08:33:02.560" UserId="2164" />
  <row Id="19640" PostId="7077" Score="0" Text="@linuxUser123: The answer builds up the understanding of file names and paths step by step. I refer to the name (i.e. filename) first before then introducing paths which are used to further organizes these files (which up until then only had names, not paths). The wording I used was intentionally chosen to be layman-readable. As mentioned in the final paragraph of that section, my explanation is an oversimplification. This answer favors layman-human-readability over technical pedantry. It should not be used as a technical reference, only as a basic grasp on the components at play." CreationDate="2022-04-29T08:39:15.220" UserId="2164" />
  <row Id="18296" PostId="7081" Score="2" Text="IMHO you are asking two different questions. 1. How to use the command line. 2. How the file system works and how to navigate it. The first is hard, the second is easier." CreationDate="2021-10-09T13:11:06.997" UserId="2516" />
  <row Id="18297" PostId="7081" Score="0" Text="If you just want them to know enough to be functional then a reference book might be better as it force them to read all of the nitty gritty details. Unless I am working with Bash scripts I really don't do more than use a few man(ual) pages. When I read or write Bash I try to avoid pulling my hair out. There is a big gap between the two needs." CreationDate="2021-10-09T13:14:40.247" UserId="2516" />
  <row Id="18298" PostId="7081" Score="0" Text="For the CLI I just need them to &quot;Learn Enough Command Line to Be Dangerous&quot;, for the file system I need them to have some basic idea more than &quot;it is a folder&quot;. But I don't need them know how the fs works." CreationDate="2021-10-09T13:25:26.113" UserId="9884" />
  <row Id="18300" PostId="7081" Score="0" Text="For special files/directories see https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard" CreationDate="2021-10-09T16:06:21.297" UserId="8837" />
  <row Id="18301" PostId="7081" Score="3" Text="What exactly are your overall objectives? To learn how to use Unix/Linux' command line when they only know/use Windows is useless (in the day to day), so it will be very hard to get the point across. They'll learn by *using*, not by looking at presentations or reading books." CreationDate="2021-10-09T16:53:00.277" UserId="5219" />
  <row Id="18302" PostId="7081" Score="0" Text="Hi I updated my question based on your comments." CreationDate="2021-10-11T02:15:52.640" UserId="9884" />
  <row Id="18303" PostId="7081" Score="0" Text="related: https://cseducators.stackexchange.com/questions/3535/introducing-file-systems-to-students-who-really-dont-understand/3544#3544" CreationDate="2021-10-11T09:30:27.180" UserId="204" />
  <row Id="18305" PostId="7081" Score="3" Text="If you were teaching students to drive a car, would you expound on &quot;benefits of learning gas pedal?&quot; I think you could set a higher-level goal. E.g., Use command-line tools to compile, and link, and run a simple command-line program. As far as &quot;resources&quot; go, I don't think you'd need much more than a one-page &quot;cheat sheet,&quot; and maybe another page of ideas to try at home. As for benefits: Those same compile and link commands can be _scripted._ If you use an IDE, or an automated build tool, they may actually _be_ scripted somewhere within its configuration files." CreationDate="2021-10-12T01:48:29.803" UserId="1269" />
  <row Id="18306" PostId="7081" Score="1" Text="Actually it was when I taught them to compile some c files that I found they had little idea of command line &amp; fs." CreationDate="2021-10-12T01:55:22.347" UserId="9884" />
  <row Id="18325" PostId="7081" Score="0" Text="A potential issue is students end up ignoring the theory and merely learning these commands by-rote without real-world context.   This risks being neither useful nor interesting to those students; potentially with them only memorising command names/parameters without knowing if/how/when to use them in a real situation.   Consider framing this in the context of some useful scenarios which they can relate to the real world and the rest of their learning.  (For example, tasking them to serve HTML files in subdirectories from nginx, and working towards that goal by learning the relevant commands)" CreationDate="2021-10-22T06:51:33.700" UserId="6562" />
  <row Id="18623" PostId="7081" Score="0" Text="A recent link https://www.theverge.com/platform/amp/22684730/students-file-folder-directory-structure-education-gen-z" CreationDate="2021-12-23T03:12:55.730" UserId="8837" />
  <row Id="18307" PostId="7085" Score="1" Text="What country are you in? Does your employer have a research department beyond just product research? What is your highest degree?" CreationDate="2021-10-14T19:27:41.953" UserId="1293" />
  <row Id="18308" PostId="7085" Score="1" Text="Also, this is easier if you actually register for the site." CreationDate="2021-10-14T19:29:40.190" UserId="1293" />
  <row Id="18309" PostId="7086" Score="1" Text="Thanks for the links for these interesting resources!" CreationDate="2021-10-17T17:48:59.357" UserId="1873" />
  <row Id="19673" PostId="7086" Score="0" Text="@ErelSegal-Halevi the repl Teams for Edu are now FREE. I paid when I joined as it was worth it for me to have those features." CreationDate="2022-05-07T15:21:42.273" UserId="2706" />
  <row Id="18311" PostId="7087" Score="2" Text="This isn't a lot to go on.  Can you give a bit more about what would make for a good project?  What are your learning goals for your students?  (You must have something in mind or you wouldn't have precluded financial / accounting in particular)" CreationDate="2021-10-20T10:20:03.700" UserId="27" />
  <row Id="18312" PostId="7087" Score="0" Text="Thanks for the reply. I precluded accounting package as it was used last term. It is ok if I consider the accounting package as an external entity, which communicates with my software, but not as the main functionality.  I am looking for something. I need something with various stakeholders, different privileges, and software needs to have functionality beyond adding/removing customers and performing simple calculations" CreationDate="2021-10-20T11:10:54.330" UserId="11137" />
  <row Id="18313" PostId="7087" Score="1" Text="[Text-based game](https://en.wikipedia.org/wiki/Text-based_game). My personal favorites are the adventure kind. I would make this an answer but it is only a link, so not really a fully fleshed answer." CreationDate="2021-10-20T11:15:08.093" UserId="2516" />
  <row Id="18320" PostId="7087" Score="0" Text="Regarding **&quot;_[you] need something with various stakeholders, different privileges, and [...]_&quot;**: Are you basically saying you want a program that multiple users interact with?" CreationDate="2021-10-21T04:19:40.263" UserId="39" />
  <row Id="18321" PostId="7087" Score="0" Text="Consider implementing some simple scripting language (something [lua](https://lua.org/) like) in C++. See also [RefPerSys](http://refpersys.org/)" CreationDate="2021-10-21T05:17:35.027" UserId="3822" />
  <row Id="18324" PostId="7087" Score="0" Text="A lot of universities use Processing for illustrating OO concepts.  The nice thing about using Processing for education is how easily students can be challenged to use visual on-screen entities where you might naturally expect complex behaviour and complex variations in that behaviour  (For example, different variations of object display, shape, composition, movements, transformations.   Also variations in behaviour for collisions of those objects - e.g. simulating material properties, etc.). Keep in mind OO is fundamentally all about behaviour modelling and interactions between objects." CreationDate="2021-10-21T17:58:09.817" UserId="6562" />
  <row Id="18326" PostId="7087" Score="1" Text="_&quot;it is preferable that web-based projects are not considered, as they require extensive coding challenges&quot;_ What coding challenges, specifically? Creating a basic webpage (not pretty) is about as complex as creating a WPF form. While console applications are easier for basic input and output, they actually have a reasonably high threshold for any menu/UI driven interaction that is more than just &quot;string in, string out&quot;. In all mentioned cases, most of the UI interaction can be prepared for by the course instructor, leaving students to fill in the business logic more so than the actual UI." CreationDate="2021-10-22T08:58:28.550" UserId="2164" />
  <row Id="18315" PostId="7088" Score="1" Text="Note that the greenfoot site has a very large inventory of projects." CreationDate="2021-10-20T15:05:52.703" UserId="1293" />
  <row Id="18314" PostId="7089" Score="2" Text="This is an incredibly good answer.  One caveat, however: a recursive descent compiler would be far beyond AP Computer Science A, for which you don't even need to be able to write a recursive method." CreationDate="2021-10-20T14:47:39.250" UserId="27" />
  <row Id="18316" PostId="7089" Score="0" Text="@BenI., I really mourned the end of the AB course." CreationDate="2021-10-20T15:33:51.767" UserId="1293" />
  <row Id="18318" PostId="7089" Score="1" Text="I would add one note, for the benefit of students who are forced to learn C++. We can effectively declare an interface in that language by declaring a pure virtual (i.e., abstract) class, and we can effectively implement the interface by inheriting from the pure virtual class, but the &quot;inheritance&quot; in that case is not the same as the inheritance that you would discourage your students from using." CreationDate="2021-10-20T15:50:05.803" UserId="1269" />
  <row Id="18319" PostId="7089" Score="1" Text="@SolomonSlow, I don't discourage inheritance. What I discourage is new public methods in sub classes. A superclass can provide part of an implementation of a new class and the implementation of an existing public method can be changed, but keep the list of public methods (the interface, whether named that in the language or not) the same as you go down any hierarchy. Among other things this avoids casting (which is a [code smell](https://en.wikipedia.org/wiki/Code_smell))." CreationDate="2021-10-20T15:56:07.683" UserId="1293" />
  <row Id="18322" PostId="7089" Score="0" Text="@Buffy whaat - you write all your programs using only methods you inherited from Object (or whatever your chosen language calls its mother of all objects..)? That's some trick.. (I know what you mean, but how it reads...)" CreationDate="2021-10-21T11:46:50.930" UserId="3688" />
  <row Id="18323" PostId="7089" Score="1" Text="@CaiusJard, I note that library developers often break these rules - especially for graphics and such. But imagine what a large and complex program would be like if every object reference were declared &quot;Object&quot; and every message required a cast. If you obey the rules your programs become much more coherent with lessened chance of errors. You can also, of course, write nested if statements 30 or so levels deep, but then try to find the bug." CreationDate="2021-10-21T12:16:38.473" UserId="1293" />
  <row Id="18818" PostId="7089" Score="0" Text="@Buffy you gave a similar answer to my question https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i  I just updated my question and I will argue that to make calculator a good project to practice OO, it may need some design for the project." CreationDate="2022-01-06T04:24:59.140" UserId="9884" />
  <row Id="18329" PostId="7092" Score="0" Text="Thanks for a link. I find it is a bit like https://ubuntu.com/tutorials/command-line-for-beginners I listed in my question." CreationDate="2021-10-25T07:02:42.193" UserId="9884" />
  <row Id="18330" PostId="7093" Score="5" Text="Weirder in what way? The object models are very similar. Python misses explicit interfaces, of course. The big difference is when a reference is checked for validity." CreationDate="2021-10-25T11:44:05.523" UserId="1293" />
  <row Id="18331" PostId="7094" Score="5" Text="Are you looking for web programming?  Mobile apps?  To get involved in an open source project?  &quot;Projects&quot; is very vague." CreationDate="2021-10-26T06:32:28.473" UserId="27" />
  <row Id="18332" PostId="7094" Score="0" Text="I mainly want to learn to code projects. ie know programming basics enough so that I can be able to learn any technology and make projects. It could be web dev or android dev as most jobs are there in these fields. I feel like my programming basics aren't strong enough." CreationDate="2021-10-26T06:41:28.450" UserId="11163" />
  <row Id="18333" PostId="7094" Score="0" Text="What level are you in your education. Secondary school? University?" CreationDate="2021-10-26T11:05:23.730" UserId="1293" />
  <row Id="18334" PostId="7094" Score="0" Text="@buffy University, studied CS concepts in college as I am doing cs degree." CreationDate="2021-10-26T11:19:53.880" UserId="11163" />
  <row Id="18335" PostId="7094" Score="0" Text="Try an internship." CreationDate="2021-10-26T17:01:57.303" UserId="660" />
  <row Id="18336" PostId="7094" Score="4" Text="Cross-posted: https://cseducators.stackexchange.com/q/7094/1106, https://cs.stackexchange.com/q/145123/755.  Please [do not post the same question on multiple sites](https://meta.stackexchange.com/q/64068).." CreationDate="2021-10-26T18:44:28.033" UserId="1106" />
  <row Id="18337" PostId="7094" Score="1" Text="Where exactly is the line between &quot;small programs&quot; and &quot;good stuff&quot; in your opinion?" CreationDate="2021-10-26T19:11:57.233" UserId="1577" />
  <row Id="18338" PostId="7094" Score="1" Text="@D.W. How do you always find these cross-posts?  Do you just make it a point to check on the network behavior of new posters?" CreationDate="2021-10-26T19:12:39.510" UserId="27" />
  <row Id="18339" PostId="7094" Score="0" Text="@BenI., something like that, but only for a small fraction of posts based on my experience." CreationDate="2021-10-26T19:47:44.753" UserId="1106" />
  <row Id="18340" PostId="7094" Score="4" Text="https://projecteuler.net/ is a great way to get some practice in." CreationDate="2021-10-26T20:37:52.523" UserId="11171" />
  <row Id="18342" PostId="7094" Score="3" Text="Big projects are often just small projects that got bigger and bigger and bigger." CreationDate="2021-10-27T10:14:01.423" UserId="1275" />
  <row Id="18348" PostId="7094" Score="0" Text="I wouldn't really expect any CompSci undergrad to have the faintest idea how to approach any kind of large project - 3 years at any university (even the very best ones) barely scratches the surface.    See https://norvig.com/21-days.html  -- The &quot;10000 hours&quot; estimate is a bit rough but also fairly realistic;  most programmers need many thousands of hours to gain the skills which would progress them beyond a 'Junior' stage in their career.  (e.g. 3 years at University plus 2-3 years working professionally)" CreationDate="2021-10-27T16:35:25.250" UserId="6562" />
  <row Id="18349" PostId="7094" Score="0" Text="I don't plan to post this as a answer. In your title you note `don't know how to code projects`. OK so find a current project you like, e.g. something from GitHub that is some what complex but not over your head. Then pick a programming language you like or would like to learn and translate the project into that programming language. If picked correctly you will have to learn about what I refer to as the ethos of both programming languages and in translating the code will understand what it takes to code projects in both languages. HTH" CreationDate="2021-10-27T16:43:03.777" UserId="2516" />
  <row Id="18341" PostId="7095" Score="0" Text="&quot;The professor that teaches architecture probably has a machine specification that can serve as the basis.&quot; I suspect you might be showing your age a bit there, Buffy. What university would teach Assembly code nowadays, when nobody in industry uses it anymore?" CreationDate="2021-10-27T03:40:35.877" UserId="7971" />
  <row Id="18345" PostId="7095" Score="2" Text="The purpose of building a machine simulator isn't to learn assembly language program, @nick012000, but to get an idea of how low level computation actually works. Building a Turing Machine simulator is also valuable for learning, but has little &quot;practical&quot; use." CreationDate="2021-10-27T14:52:56.873" UserId="1293" />
  <row Id="18381" PostId="7095" Score="0" Text="@nick012000 Almost all universities I've known teach assembly nowadays. Why? It's foundational to how computers work. It's untrue that _nobody_ in the industry uses assembly. Sure, if your goal is to make React apps, assembly is not helpful and in that sense, I understand your point. Universities still teach CS and deeper knowledge than exclusively &quot;just get me a job ASAP&quot; skills, although they do that too." CreationDate="2021-11-02T17:12:32.340" UserId="9426" />
  <row Id="18360" PostId="7096" Score="0" Text="The most obvious difference between Python and Java is multiple inheritance, but since Python uses MI with *linearization*, there is still a single, well-defined, linear chain of ancestors for each class, just like in Java." CreationDate="2021-10-29T13:44:58.050" UserId="945" />
  <row Id="18361" PostId="7096" Score="0" Text="@JörgWMittag, Java has multiple inheritance? Since when? Implementing multiple interfaces isn't the same thing." CreationDate="2021-10-29T13:56:21.127" UserId="1293" />
  <row Id="18362" PostId="7096" Score="0" Text="Java doesn't, but Python does, hence it's (at least to me) the most obvious difference between Java and Python." CreationDate="2021-10-29T14:05:17.697" UserId="945" />
  <row Id="18425" PostId="7096" Score="0" Text="I say &quot;Java is a Victorian convent and Python is a nudist colony,&quot; because Java has a much stronger form of encapsulation in the form of access specifiers.  There is no compiler to enforce privacy in Python.  This amounts to a very significant difference.  Python has no notion of finality either." CreationDate="2021-11-20T14:29:19.823" UserId="21" />
  <row Id="18346" PostId="7100" Score="6" Text="This is by far the best suggestion, all these &quot;JuSt CoNTrIbUtE To OpEnSoUrcE!&quot; answers are way too naive.  You can't &quot;just&quot; contribute to open source.  If you don't understand real code, you won't easily be able to navigate their codebase.  And the sense of accomplishment is probably *far far off*.  With puzzle challenges (and I'd recommend Advent of code as well) you get a lot quicker with the gratification loop and are encouraged to program more in a much simpler easy to verify environment (even if the challenges themselves are hard)." CreationDate="2021-10-27T16:13:07.070" UserId="3168" />
  <row Id="18380" PostId="7100" Score="1" Text="While good advice, solving programming challenges seems unrelated to _projects_ as I understand them. I'm guessing OP wants to make a &quot;real&quot; application, like a game, web app, mobile app, etc. Algorithm challenges are solved with tiny scripts that run on the command line and can be solved with 20-30 lines of code seem disjoint to making apps. OTOH, open source projects are far too intimidating and prohibitive to get involved with -- _too_ real." CreationDate="2021-11-02T17:08:31.760" UserId="9426" />
  <row Id="18343" PostId="7101" Score="1" Text="Those are some very interesting resources!" CreationDate="2021-10-27T11:14:00.370" UserId="27" />
  <row Id="18344" PostId="7102" Score="5" Text="Other than the fact that this will probably bury the OP, this is pretty awesome." CreationDate="2021-10-27T13:36:03.650" UserId="1293" />
  <row Id="18353" PostId="7102" Score="0" Text="I freely admit that most of these are pre-made soapboxes I have preached on before that I just pulled off my shelf. (Have I strained the metaphor enough?) One soapbox that I left out is Project Euler and friends, which I find to be interesting *Maths* exercises, but, at least for me, don't seem to be doing much for *programming* and certainly not for software engineering." CreationDate="2021-10-27T21:54:03.190" UserId="945" />
  <row Id="18354" PostId="7102" Score="0" Text="I think this answer would be better without the lists of &quot;paradigms&quot; and &quot;concepts&quot;, which seem arbitrary. Otherwise, right on the point! Regarding language concepts, [7 languages in 7 weeks](https://pragprog.com/titles/btlang/seven-languages-in-seven-weeks/) is also popular" CreationDate="2021-10-28T02:41:44.953" UserId="660" />
  <row Id="18355" PostId="7102" Score="0" Text="*&quot;in German, it is called Informatik, in French informatique, in Italian informatica – all are a portmanteau neologism based on information and mathematics&quot;* Every single source I've read about this says the word comes from &quot;information&quot; and &quot;automatique&quot;, not &quot;mathematiques&quot;. Etymologically, &quot;Informatique&quot; is about automated processing of information." CreationDate="2021-10-28T16:24:15.323" UserId="10968" />
  <row Id="18356" PostId="7102" Score="0" Text="@Stef: Interesting. Both according to Wikipedia and Wiktionary, the term *Informatik* was coined by Karl Steinbuch, shortly before he became a professor in Karlsruhe. I studied in Karlsruhe under a professor who was himself a student under Steinbuch. He was the one who told us that. But actually, according to both Wikipedia and Wiktionary, we are both wrong, and Steinbuch simply added the Greek suffix *-ik* with no special reference to either mathematics or automatic." CreationDate="2021-10-28T16:37:44.960" UserId="945" />
  <row Id="18357" PostId="7102" Score="1" Text="The best answer about the industry/discipline I've ever seen on SE and something I've personally been wondering about for a while, especially about the difference between the different degrees; thanks for this and please don't get rid of the paradigms and concepts part. Is there a good resource for learning all of the &quot;concepts&quot; in either Object-Oriented Programming or Functional Programming?" CreationDate="2021-10-28T21:55:46.803" UserId="11198" />
  <row Id="18359" PostId="7102" Score="0" Text="There is no &quot;Greek suffix _-ik_ for what it's worth. I think you are thinking of [the Latin suffix _-icus_](https://en.wiktionary.org/wiki/-icus#la) which is cognate with the Ancient Greek suffix _-ikos_, but _-ik_ isn't a thing as far as I know." CreationDate="2021-10-29T10:44:37.033" UserId="986" />
  <row Id="18373" PostId="7102" Score="0" Text="Just a note that Berkeley's cs61a course is based off a version of SICP and has its lectures, labs, hw, projects, etc entirely online for past semesters, which can be useful to go through alongside the book - see cs61a.org." CreationDate="2021-11-02T00:59:47.900" UserId="919" />
  <row Id="18374" PostId="7102" Score="0" Text="I would also be interested in your thoughts on Code Complete as a software engineering text, as I've seen it recommended a lot but never made it through the whole thing (partly because I started reading it well before I actually needed it.)" CreationDate="2021-11-02T01:04:21.867" UserId="919" />
  <row Id="18358" PostId="7103" Score="0" Text="I'm currently in the same situation as you prior to your CS degree, and am deciding whether to study CS or something else. Do you think the CS degree was worth it in the end, or do you think you might have benefitted more from doing something like Software Engineering, or even just studying online programming courses?" CreationDate="2021-10-28T22:01:20.293" UserId="11198" />
  <row Id="18376" PostId="7103" Score="1" Text="For me it was perfect. I find almost all CS topics very interesting, and while the occasions where I could really apply the knowledge from those studies were very sparse in the last decades, occasionally it did happen. If I had not studied CS, I would never have come in contact with most of these topics (i.e., functional aspects - lambda calculus etc., logic programming (as in prolog or constraint programming), theoretical CS (temporal logic, complexity theory etc.) and so on and so forth. Even our even then very old-fashioned Compiler courses were benefitial at one point for me... ;)" CreationDate="2021-11-02T09:58:07.610" UserId="652" />
  <row Id="18377" PostId="7103" Score="1" Text="That said, if you are just thinking in terms of increasing the worth of your CV, a more practically oriented course might maybe be more efficient, hard to know. If I'm looking at applications, I am looking at the whole picture, not just the degree." CreationDate="2021-11-02T09:59:37.320" UserId="652" />
  <row Id="18379" PostId="7103" Score="0" Text="Thank you, I appreciate the answer." CreationDate="2021-11-02T16:32:10.903" UserId="11198" />
  <row Id="18347" PostId="7104" Score="2" Text="I doubt you will find a textbook, but there might be a professional book or two. But if you Google &quot;macros in C&quot; you will find some tutorials and such." CreationDate="2021-10-27T16:24:45.900" UserId="1293" />
  <row Id="18350" PostId="7104" Score="0" Text="could you just the professional books" CreationDate="2021-10-27T17:00:50.993" UserId="9124" />
  <row Id="18351" PostId="7104" Score="1" Text="Sorry, I don't have any to suggest." CreationDate="2021-10-27T18:23:59.593" UserId="1293" />
  <row Id="18352" PostId="7104" Score="0" Text="@Buffy ok now issues" CreationDate="2021-10-27T18:45:40.750" UserId="9124" />
  <row Id="18365" PostId="7104" Score="1" Text="Re, &quot;What is its connection with assembly language?&quot; Just like how macros are part of the &quot;C&quot; programming language, but not some other programming languages; macros are part of _some_ &quot;assembly&quot; languages (Most famously, [Microsoft's MASM language](https://docs.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=msvc-160)), but not others.  Note: I  put &quot;assembly&quot; in scare quotes there because MASM somewhat violates the 1:1 correspondence between source code lines and machine instructions that most of us expect from an assembly language." CreationDate="2021-10-29T16:03:49.627" UserId="1269" />
  <row Id="18592" PostId="7104" Score="0" Text="These are macros for an assembler (a tool that translates assembler language to machine code).&#xA;&#xA;You need to find out what assembler language it is, and get the manual for the assembler.&#xA;&#xA;A macro is processed by the assembler pre-processor. It converts each macro to one or more (hence macro: macro=large) assembler instructions." CreationDate="2021-12-17T22:49:33.350" UserId="204" />
  <row Id="18386" PostId="7107" Score="2" Text="Welcome to [cseducators.se]!  Your question is unclear.  What qualifies as the &quot;best&quot; resource?  What are you trying to get out of this material?  What are your goals?  There is not enough information here to even make a serious suggestion about what would help you." CreationDate="2021-11-03T18:21:23.637" UserId="27" />
  <row Id="18397" PostId="7107" Score="0" Text="There are quite a few threads on this on the site for textbooks and resources related to CS theory, for example [Any website or textbook with problems/solutions for Computer Science Theory?](https://cseducators.stackexchange.com/questions/6366/any-website-or-textbook-with-problems-solutions-for-computer-science-theory/6367#6367). Have you checked these yet, and if the existing resources weren't sufficient, could you clarify what you're looking for specifically? Thanks." CreationDate="2021-11-06T13:11:26.553" UserId="9426" />
  <row Id="18394" PostId="7108" Score="1" Text="Good answer with visual feedback. I use that from time to time. It has been a while since I used it. Thanks for recharging the memory banks." CreationDate="2021-11-05T12:52:22.050" UserId="2516" />
  <row Id="18382" PostId="7109" Score="0" Text="I think you have misunderstood my question: I am after a CYOA-style book that *contains* code listings. I am not after a computer game that is a *conversion* from an original CYOA-book." CreationDate="2021-11-03T00:33:23.260" UserId="11226" />
  <row Id="18383" PostId="7109" Score="0" Text="Do the search. You may find what you want." CreationDate="2021-11-03T00:41:18.123" UserId="1293" />
  <row Id="18384" PostId="7109" Score="1" Text="I have indeed searched much, in vain, prior to asking this question" CreationDate="2021-11-03T00:48:00.387" UserId="11226" />
  <row Id="18388" PostId="7110" Score="0" Text="Yeah I agree that there isn't enough here for searching. Even with the LOC link, that would only work *if* &quot;BASIC&quot; was in the title... but I don't think it was or this book. Probably in the description or similar - so would need to be fulltext search... My hope was that someone here would come across this and coincidentally also happen to trigger some (now ancient) memories." CreationDate="2021-11-04T10:58:00.247" UserId="11226" />
  <row Id="18389" PostId="7110" Score="0" Text="@bguiz Those aren't titles, those are subject categories, so basic wouldn't need to be in the title. As long as your book was registered with the library of Congress, which, if it was published, it probably was, it will be in there." CreationDate="2021-11-04T16:39:27.743" UserId="27" />
  <row Id="18390" PostId="7110" Score="0" Text="Exploring the LOC site a bit more - thanks for your tip on categories btw - I discovered subcategories. I manually went through all 111 titles under the &quot;BASIC (Computer program language)--Juvenile literature&quot; subcategory, to no avail. I think I might have to scan all 2221 titles under the full &quot;BASIC (Computer program language)&quot; category. Is there a way to search by category *and* exclude &quot;BASIC&quot; from the title?" CreationDate="2021-11-05T02:39:17.523" UserId="11226" />
  <row Id="18391" PostId="7110" Score="0" Text="My attempts thus far to do the above have been unsuccessful, as unable to &quot;negate&quot;: https://catalog.loc.gov/vwebv/search?searchArg1=BASIC&amp;argType1=all&amp;searchCode1=KSUB&amp;searchType=2&amp;combine2=and&amp;searchArg2=BASIC&amp;argType2=all&amp;searchCode2=KTIL&amp;combine3=not&amp;searchArg3=&amp;argType3=all&amp;searchCode3=GKEY&amp;year=1521-2021&amp;yearOption=range&amp;fromYear=1970&amp;toYear=1999&amp;location=all&amp;place=all&amp;type=am&amp;language=ENG&amp;recCount=25" CreationDate="2021-11-05T02:45:58.597" UserId="11226" />
  <row Id="18392" PostId="7110" Score="0" Text="@bguiz I'm afraid I know little about the LOC search functionality, or even the LOC in general. It is just my understanding (which might not even be right!) that virtually all books printed by publishers outside of the &quot;self-publish&quot; circuit are all registered there, which makes it my best guess about how to locate a really obscure volume." CreationDate="2021-11-05T06:07:50.053" UserId="27" />
  <row Id="18393" PostId="7110" Score="0" Text="hmm yeah - I got you, it's 99.9% gonna be in that list. this book was likely published in the 80s when self-publishing wasn't as prevalent as it is today. In lieu of being able to figure out the advanced search functions on the LOC site... I might just manually scan the 2K or so in titles." CreationDate="2021-11-05T06:13:19.217" UserId="11226" />
  <row Id="18395" PostId="7110" Score="3" Text="@bguiz If you do find it, I hope you post your answer. I'm quite curious now!" CreationDate="2021-11-05T14:44:56.090" UserId="27" />
  <row Id="18399" PostId="7110" Score="0" Text="So far I have found this: https://www.goodreads.com/book/show/21995995-at-the-heart-of-the-mountain - it isn't the specific one I recall though, although it seems to be rather similar." CreationDate="2021-11-07T07:42:34.243" UserId="11226" />
  <row Id="18400" PostId="7110" Score="0" Text="Also, I have found that LOC doesn't seem to consistently &quot;tag&quot; metadata on the books in its catalogue. For example, the category appears to be &quot;Plot your own stories&quot;. But see how 2 different books from the same publisher (and series) differ in their metadata: https://lccn.loc.gov/2001555228 vs https://lccn.loc.gov/2011459346" CreationDate="2021-11-07T07:54:47.630" UserId="11226" />
  <row Id="18401" PostId="7110" Score="0" Text="Do you remember anything about the story?  It seems like you're on the right track, and might have even fingered the book itself in one of those listings." CreationDate="2021-11-07T14:13:42.507" UserId="27" />
  <row Id="18402" PostId="7110" Score="0" Text="I have a vague/ hazy memory of the book in terms of the actual story/ plot. The only specific thing that comes to mind is that one of the code listings featured &quot;encrypting/decrypting&quot; strings by swapping odd and even ASCII characters. Also that the reader didn't have to even write any of the code, simply type out the full listing into QBASIC, and run it." CreationDate="2021-11-07T14:24:56.537" UserId="11226" />
  <row Id="18396" PostId="7111" Score="0" Text="This is really the answer. Structured assignments that prevent cheating avoid the problem of detection in the first place" CreationDate="2021-11-05T18:12:44.587" UserId="27" />
  <row Id="18404" PostId="7113" Score="0" Text="What is CFG? That is new to me." CreationDate="2021-11-11T10:59:55.747" UserId="1293" />
  <row Id="18405" PostId="7113" Score="1" Text="@Buffy   [CFG](https://en.wikipedia.org/wiki/Context-free_grammar) - Context Free Grammar." CreationDate="2021-11-11T13:09:46.433" UserId="2516" />
  <row Id="18406" PostId="7113" Score="0" Text="@GuyCoder Hmmm. It shouldn't have flown by me, I guess." CreationDate="2021-11-11T13:20:52.903" UserId="1293" />
  <row Id="18407" PostId="7113" Score="0" Text="You need to say more. The structure of a CFG is standard. Are you asking about finding a grammar for a given language? Or about creation of a context free language through a grammar definition? Something else? Distinguishing LL languages/grammars from LR?" CreationDate="2021-11-11T13:22:54.780" UserId="1293" />
  <row Id="18411" PostId="7113" Score="2" Text="@GuyCoder, actually, I taught language principles and compilers for about 20 years. Getting old. Not Dead Yet." CreationDate="2021-11-11T14:26:16.273" UserId="1293" />
  <row Id="18412" PostId="7113" Score="2" Text="I'm not sure why this is being close-voted, I think it's an excellent question, with important bearing for educators. There *are* some standard formations that will get you pretty far, and teachers would certainly benefit from thinking through them.  I've thought through them for PDAs, and I provide those to my students for practice, but I don't have them specifically in CFG form." CreationDate="2021-11-11T16:02:29.633" UserId="27" />
  <row Id="18414" PostId="7113" Score="0" Text="@BenI. dear sir, can you please share that pdf here? i have already learnt pda but types will be very helpful." CreationDate="2021-11-16T08:54:23.373" UserId="11256" />
  <row Id="18419" PostId="7113" Score="0" Text="@supcem I don't have a pdf, I have a series of exercises spread out over two consecutive powerpoints, with the strategies conveyed orally to the students after they try each exercise.  If it were easier to pull together for this sort of purpose, I would have already done it :)" CreationDate="2021-11-16T13:22:07.910" UserId="27" />
  <row Id="18421" PostId="7116" Score="3" Text="I guess I don't completely understand the question.  Isn't this what anyone does when they sit with a student who is generally doing okay, but is currently stuck on something?" CreationDate="2021-11-16T20:46:49.340" UserId="27" />
  <row Id="18422" PostId="7116" Score="0" Text="Are you asking for formalized scaffolding systems to be used in formative education within industry?" CreationDate="2021-11-16T20:47:35.237" UserId="27" />
  <row Id="18423" PostId="7116" Score="0" Text="Hi @BenI., yes I'm asking regarding the existence of any system involving *formalized* interview-like 1:1 scaffolding interactions followed up by a verbal evaluation of the student's identified capability gaps. And preferably longer (e.g. 15mins or more) interactions, involving having the student deal with a complete task." CreationDate="2021-11-17T00:37:26.857" UserId="2119" />
  <row Id="18427" PostId="7118" Score="0" Text="Have you considered implementing [Fizz Buzz](https://en.wikipedia.org/wiki/Fizz_buzz)? I have heard stories (possibly apocryphal) that some Silicon Valley companies use this as a quick check of an interview candidates' basic programming skills. Supposedly (!) more people struggle with this than one might naively assume." CreationDate="2021-11-20T23:27:45.650" UserId="1940" />
  <row Id="18428" PostId="7118" Score="0" Text="Thank you this is a good one definitely" CreationDate="2021-11-22T01:54:54.883" UserId="11276" />
  <row Id="18429" PostId="7118" Score="0" Text="This brings nim to mind, perhaps for the quickests" CreationDate="2021-11-22T01:57:42.547" UserId="11276" />
  <row Id="18586" PostId="7118" Score="0" Text="Are use programming in assembler/machine code? If so, then in the implementation of a counting loop `repeat n times:`" CreationDate="2021-12-17T22:33:02.590" UserId="204" />
  <row Id="18430" PostId="7121" Score="0" Text="How do such systems indicate xor, implies, and iff?" CreationDate="2021-11-22T13:07:40.780" UserId="27" />
  <row Id="18446" PostId="7121" Score="0" Text="@BenI. Boolean algebra is really only three operations: or, and, and not.  The other operations are beyond that.  If you want a comprehensive text-based language you can use VHDL but it is pretty verbose." CreationDate="2021-11-26T06:30:53.460" UserId="11279" />
  <row Id="18448" PostId="7121" Score="0" Text="I guess I want to gently push back on your statement about what boolean algebra is, since that is neither the historical origins, the mathematical basis, nor the minimal number of required operations for boolean algebra, so the statement seems arbitrary at best.  After all, why draw the line there in particular?  You could as well say that boolean algebra is just one operation (NAND or NOR, pick your poison).  While XOR is surely not strictly required, the translation to actual digital logic feels like it would be laborious without it." CreationDate="2021-11-26T06:58:53.163" UserId="27" />
  <row Id="18457" PostId="7121" Score="0" Text="@BenI. I agree my statement was a bit stronger than it should have been but or, and, and not are pretty core to Boolean Algebra as they are the most common operational basis set (a single closed set of operations which can used to create all possible Boolean operations).  Per Wikipedia &quot;the main operations of Boolean algebra are the conjunction (and) denoted as ∧, the disjunction (or) denoted as ∨, and the negation (not) denoted as ¬&quot;.  I agree the the singe operations of nand and nor also can suffice as an operational basis but they are rarely used notationally." CreationDate="2021-12-01T17:21:51.867" UserId="11279" />
  <row Id="18458" PostId="7121" Score="0" Text="@BenI. Regarding XOR, it does have a common graphical symbol but no textural one that I am aware of (other than using VHDL).  Also, it does not belong to any traditional operational basis set (mostly because it is not orthogonal to any other operation) and it does not play well with Boolean minimization rules (you have to convert it to ands and ors first)." CreationDate="2021-12-01T17:32:53.187" UserId="11279" />
  <row Id="18432" PostId="7122" Score="1" Text="How would you check the correctness/performance of your algorithm? It's not that you can't learn to drive without getting in a car, but it's not going to be easy and any facsimile is likely going to be imperfect at teaching you all the required skills. I'd almost expect that having to manually and mentally test your algorithm at every turn would be as much of a burden; but I can't make that judgment on your behalf." CreationDate="2021-11-23T16:55:15.243" UserId="2164" />
  <row Id="18433" PostId="7122" Score="0" Text="Talk to a doctor about your migraines. For some versions there are easy solutions. See: https://www.allaboutvision.com/conditions/ocular-migraine.htm, for example." CreationDate="2021-11-23T19:25:09.837" UserId="1293" />
  <row Id="18452" PostId="7122" Score="0" Text="I don't understand the relationship between time complexity and your health situation (migraines). A lot of O(n) solutions are very difficult to derive, some not, and same for exponential algorithms. Usually the best solution in most competitive programming sites is not exponential." CreationDate="2021-11-27T15:06:48.860" UserId="9426" />
  <row Id="18436" PostId="7124" Score="2" Text="Could you edit your question to include an example?  I'm not sure what you're asking." CreationDate="2021-11-24T16:21:39.687" UserId="27" />
  <row Id="18437" PostId="7125" Score="1" Text="To what end?  UML can get very detailed and very nitpicky.  What is your goal in teaching UML?" CreationDate="2021-11-24T16:22:13.323" UserId="27" />
  <row Id="18438" PostId="7125" Score="0" Text="They have a project where they need to produce a requirement and design documents and they use UML in their documents." CreationDate="2021-11-24T16:54:02.323" UserId="11137" />
  <row Id="18439" PostId="7125" Score="0" Text="Do you mean use case diagrams? Or possibly class diagrams?  State diagrams are about capturing a moment of runtime behavior, and aren't, to my knowledge, in frequent use." CreationDate="2021-11-24T17:09:14.570" UserId="27" />
  <row Id="18440" PostId="7125" Score="0" Text="Please see https://www.uml-diagrams.org/state-machine-diagrams.html.  They show state of objects or sub-systems." CreationDate="2021-11-24T19:15:19.010" UserId="11137" />
  <row Id="18581" PostId="7125" Score="0" Text="State diagrams got in to UML, because the company that made a good state modelling tool, had a seat on the UML board. There is also much left out of UML." CreationDate="2021-12-17T22:25:39.513" UserId="204" />
  <row Id="18441" PostId="7127" Score="1" Text="Nice answer, of course.  I think another aspect is that procedural programmers sometimes don't realize that there are intermediate objects that help in &quot;process&quot;.  Without identifying these immediates, it can be more difficult where to place the methods.  In short, there are sometimes shorter-lived entities that should also be manifest as objects with responsibilities/capabilities and this is sometimes the answer of where functionality should go.  Evaluate lifetime of state (both in objects and in local variables) to help identify missing objects." CreationDate="2021-11-25T01:24:51.847" UserId="3799" />
  <row Id="18449" PostId="7127" Score="1" Text="Thank you for the answer. It is very helpful. I would appreciate if you could also provide a reference, even if it is your own (as you use a nickname here, I won't even know if it is your material or someone else!!)" CreationDate="2021-11-26T06:59:25.480" UserId="11137" />
  <row Id="18453" PostId="7131" Score="0" Text="Welcome to CSE! What are your goals in programming? _&quot;I tried learning by making projects, but found myself in a place where I would mug up things rather than learning anything.&quot;_ -- what makes you think mugging things up isn't educational? Can you provide more details about the projects you've tried and mugged up? Thanks." CreationDate="2021-11-27T15:13:35.017" UserId="9426" />
  <row Id="18454" PostId="7131" Score="0" Text="my goal is to get a web developer job. so mugging up is right??" CreationDate="2021-11-28T07:43:42.740" UserId="11298" />
  <row Id="18455" PostId="7131" Score="2" Text="Yes, the point of projects is to struggle and learn from the failures as well as the successes, right? (assuming I'm understanding &quot;mugging&quot; correctly). If your goal is to be a web developer, then you'll definitely need to write many project applications (since that's essentially the job). I wouldn't let a few failed attempts affect you. Keep coding and moving forward and you'll eventually build the portfolio you want." CreationDate="2021-11-28T14:24:21.740" UserId="9426" />
  <row Id="18450" PostId="7132" Score="0" Text="that book is not available currently neither in pdf nor anywhere in nepal(only popular books are available here in nepal that too if you have luck unless they get sold already). Can you guide me a short very short roadmap to learn python and get a web developer job?" CreationDate="2021-11-27T05:58:51.103" UserId="11298" />
  <row Id="18451" PostId="7132" Score="1" Text="I am currently learning from a textbook and an udemy course of python for absolute beginners plus lots of stackoverflow and articles as you know. I am learning sth and starting to feel confident about my basics, but I am not sure if this is right way. I am solving every programming exercises, mcqs, print the output types of programs. Is this correct way to master the basics? At the moment, my goal is to just master the basics." CreationDate="2021-11-27T06:26:48.490" UserId="11298" />
  <row Id="18456" PostId="7135" Score="0" Text="Thanks! These are good. The quadratic equation will blend right in with our previous  exercises." CreationDate="2021-11-30T13:56:33.333" UserId="11276" />
  <row Id="18459" PostId="7135" Score="0" Text="@Vladimir If you decide to use solving a quadratic equation as an example, I would suggest to make sure to introduce the numerically advantageous way (e.g. along the lines of what I outlined [here](https://stackoverflow.com/questions/48979861/numerically-stable-method-for-solving-quadratic-equations/50065711#50065711), so as not to proliferate bad practices that one later finds deployed in real-life code. The other proposed exercises do not seem to carry such risk." CreationDate="2021-12-02T08:44:55.723" UserId="1940" />
  <row Id="18460" PostId="7135" Score="0" Text="Hi! They are mostly high-school so I'm first concerned about simple formula-code translation, grasping the intuition... I will mention that there are some quirks around floating points though. The previous exercise might be for example coding pythagoras theorem, prompting for whether one is looking for a hypotenuse or a hick." CreationDate="2021-12-03T14:35:32.943" UserId="11276" />
  <row Id="18899" PostId="7136" Score="0" Text="What a well-written Answer! I love it. Perhaps we could put it right out in front of potential students somehow. A little sanity at the beginning goes a long way." CreationDate="2022-01-09T13:05:56.383" UserId="5349" />
  <row Id="18461" PostId="7137" Score="2" Text="To my knowledge, there has been limited industrial use of theorem provers like ACL2 to prove software correct since the mid 1990s. This was initially limited to specialty code like portions of the microcode inside microprocessors. At the time, microcode was sometimes non-trivial to update and also fairly small (1000 lines of code or less). Back then it took an expert (usually a mathematician) several months to formulate the proofs, with only the checking being automated via the theorem prover. In other words, it was an expensive undertaking. I do not know what the current state of the art is." CreationDate="2021-12-04T11:04:48.083" UserId="1940" />
  <row Id="18462" PostId="7137" Score="2" Text="Warren A. Hunt, Matt Kaufmann, J Strother Moore, and Anna Slobodova, &quot;Industrial hardware and software verification with ACL2,&quot; *Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences*, 375.2104 (2017): 20150399 ([online](https://doi.org/10.1098/rsta.2015.0399))" CreationDate="2021-12-04T11:23:10.960" UserId="1940" />
  <row Id="18463" PostId="7137" Score="1" Text="&quot;If it is possible, why it is used so seldomly? &quot; Simply because it's extremely expensive. It's doable to some extent for super critical software (e.g. space), but if it was necessary for software like operating systems, we would still be using the technology from 30 years ago (it would be very reliable though)." CreationDate="2021-12-04T11:40:42.910" UserId="6125" />
  <row Id="18515" PostId="7137" Score="0" Text="First formally define the definition of a bug" CreationDate="2021-12-16T05:09:44.780" UserId="11351" />
  <row Id="18474" PostId="7138" Score="0" Text="But, is writing an internally consistent set of assertions that completely describes the correct behavior of a software system under all possible conditions any easier than writing the code that behaves correctly under all possible conditions? (If you've ever written code in strict accordance with the rules of _Test Driven Development,_ then you'll know why I am smiling.)" CreationDate="2021-12-08T04:00:40.170" UserId="1269" />
  <row Id="18475" PostId="7138" Score="0" Text="P.S., About that Halting Problem: If I give you a supposedly consistent and complete set of assertions that describe a &quot;halt tester&quot; function, and you deliver code that fails to give the correct answer in finite time for certain inputs, Is that a bug? and which one of us shall we blame for it?" CreationDate="2021-12-08T04:05:59.327" UserId="1269" />
  <row Id="18497" PostId="7138" Score="0" Text="@GuyCoder I rolled back the vandalism to the post, though I left it deleted.  If you have a special reason to remove this beyond deletion, you can reply to me here or find me in chat." CreationDate="2021-12-13T03:36:37.367" UserId="27" />
  <row Id="18466" PostId="7139" Score="0" Text="`pre and post conditions` I have never read book but are you aware of [Hoare logic](https://en.wikipedia.org/wiki/Hoare_logic)?" CreationDate="2021-12-05T08:28:35.953" UserId="2516" />
  <row Id="18467" PostId="7139" Score="0" Text="@GuyCoder, yes, of course. The Gries book is based on it, and on the work of Dijkstra." CreationDate="2021-12-05T11:47:52.130" UserId="1293" />
  <row Id="18468" PostId="7139" Score="0" Text="I was surprised that you did not note that in your answer. The book is expensive, unless you buy it used. the Wikipedia page while dense, is free." CreationDate="2021-12-05T13:21:07.783" UserId="2516" />
  <row Id="18469" PostId="7139" Score="0" Text="@GuyCoder, the book is incredibly rich in exercises for learning. There is more to learning than reading text." CreationDate="2021-12-05T13:27:21.183" UserId="1293" />
  <row Id="18494" PostId="7139" Score="1" Text="@Guy Coder had a good but brief answer." CreationDate="2021-12-12T16:09:01.377" UserId="204" />
  <row Id="18495" PostId="7139" Score="0" Text="Note that a proof that it is possible to write a program that can not be reasoned about (the halting problem). Does not prove that it is impossible to write a program that can be reasoned about: We need to stop making excuses, and start writing better quality programs. I do not claim that we can eliminate all bugs, but we can eliminate 90% of them." CreationDate="2021-12-12T16:11:21.923" UserId="204" />
  <row Id="18496" PostId="7139" Score="0" Text="@ctrl-alt-delor, yes, good individual and team practice can prevent those pesky bugs from flying unwanted into our programs. But 90% is far too low a standard." CreationDate="2021-12-12T16:15:11.920" UserId="1293" />
  <row Id="18500" PostId="7139" Score="0" Text="https://xkcd.com/844/" CreationDate="2021-12-13T19:58:56.780" UserId="1293" />
  <row Id="18557" PostId="7139" Score="0" Text="@Buffy. Yes, we can do a lot better, but if I were to say that, then I would not be believed." CreationDate="2021-12-17T18:14:42.587" UserId="204" />
  <row Id="18477" PostId="7141" Score="0" Text="Thanks for the suggestions, much appreciated!" CreationDate="2021-12-09T03:44:22.527" UserId="11321" />
  <row Id="18584" PostId="7141" Score="1" Text="Definitely Dot. Ultra simple input format, which I often generate from another program, rather than by hand." CreationDate="2021-12-17T22:30:37.277" UserId="6346" />
  <row Id="18634" PostId="7141" Score="1" Text="Of interest: [Handbook of Graph Drawing and Visualization](https://cs.brown.edu/people/rtamassi/gdhandbook/) - Algorithms for laying out an drawing edge-vertex graphs." CreationDate="2021-12-30T09:06:25.647" UserId="2516" />
  <row Id="19327" PostId="7141" Score="0" Text="If you like this answer you should bookmark it. That way when I update this you will know. :)" CreationDate="2022-02-15T11:48:32.700" UserId="2516" />
  <row Id="18479" PostId="7142" Score="0" Text="I'm not going to make this an &quot;answer&quot; because I am not actually an educator, but I would search for ways in which students can _share_ work stations. When I was learning the basics, back in the 1970s, I did a lot of design and debugging on paper, and then I waited my turn to sit down in front of a keyboard for ten or fifteen minutes to type my program in, and give it a try." CreationDate="2021-12-09T17:19:04.530" UserId="1269" />
  <row Id="18480" PostId="7142" Score="0" Text="Also, consider having students work in pairs—have them &quot;walk-through&quot; each other's paper programs before taking them to the work station. But, IMO, you can't do it without _some_ computer hardware. Computer programming is an art form. You can't become skilled at it just by reading. You need to practice it. And finally, don't forget the printer: If each student can't have their own screen, then they're going to want a print-out to take back to their desk after they get their turn to try their luck at the keyboard." CreationDate="2021-12-09T18:00:00.673" UserId="1269" />
  <row Id="18481" PostId="7142" Score="2" Text="What equipment is typically available to them? And when?" CreationDate="2021-12-09T19:41:55.870" UserId="1293" />
  <row Id="18482" PostId="7142" Score="1" Text="Are these kids normally in urban or rural environments?" CreationDate="2021-12-09T19:43:12.350" UserId="1293" />
  <row Id="18483" PostId="7142" Score="0" Text="Thanks, @SolomonSlow, I understand that sharing resources could be one way. But that may be the next stage. I agree that the computer is like learning to cycle which can't be done without a bicycle. Though looking for some ways to reach out to kids who don't have access to computers also." CreationDate="2021-12-10T06:23:17.623" UserId="11328" />
  <row Id="18484" PostId="7142" Score="0" Text="@Buffy, Kids do not have access to computers. They can be urban and rural. I am currently looking for solutions for rural. Currently, they don't have access to laptops/computers. But they may have access to &quot;Smartphones&quot; of their parents." CreationDate="2021-12-10T06:25:09.967" UserId="11328" />
  <row Id="18486" PostId="7142" Score="1" Text="@GuyCoder I have Raspberry PI but did not know about its history. My target audience is a low-income family which does not yet have the resources to buy a laptop/computer. Even making them purchase a $50 items which additionally would need a monitor, mouse keyboard to work upon. For a medium-income group, especially for Tinkering, I am sure Respberry PI is a great idea. Thanks for your input &#xA;&#xA;Based on this discussion, 1. I am seeing that some paper-pen puzzles that can set the foundation for computer programming 2. A mobile app might lead us to some solution." CreationDate="2021-12-10T09:38:07.013" UserId="11328" />
  <row Id="18490" PostId="7142" Score="1" Text="Is the goal for them to be able to write software professionally or to teach the fundamentals of computer science? Teaching how a Turing machine works would be possible with very minimal resources. https://teachinglondoncomputing.org/turingmachine/" CreationDate="2021-12-10T14:24:28.707" UserId="11336" />
  <row Id="18493" PostId="7146" Score="1" Text="If they could have computers as powerful as a chromebook, then there would be no need for the Linux server." CreationDate="2021-12-11T20:12:44.683" UserId="1269" />
  <row Id="18501" PostId="7146" Score="0" Text="Chromebooks are inexpensive but the cheap ones have limited memory." CreationDate="2021-12-13T23:01:14.460" UserId="21" />
  <row Id="18498" PostId="7148" Score="2" Text="Do students have a book on Design Patterns? I don't recommend the original GOF book as it was written before understanding about patterns had solidified (I know three of the authors and have worked with one of them). There is a later, more complete book that is equivalent in coverage but Java based and more mature (Patterns in Java: Grand). There are a lot of C# design pattern books but I don't recognize any of the authors and most are focused on dot net." CreationDate="2021-12-13T15:33:26.170" UserId="1293" />
  <row Id="18499" PostId="7148" Score="1" Text="@Buffy They have the free book Game Programming Patterns (https://gameprogrammingpatterns.com/), which makes sense for our context.  I've given them a printout of the introduction to the GoF book since I like the way that it orients the mind, but otherwise, we're not particularly using that (or any) book.  The internet is our oyster." CreationDate="2021-12-13T16:02:50.213" UserId="27" />
  <row Id="18563" PostId="7148" Score="0" Text="@Buffy: I fully agree. I always like to say that GoF is *not* a book about patterns, it as a book *of* patterns, a catalog. Teaching patterns with the GoF book is like teaching English by reading a dictionary." CreationDate="2021-12-17T20:25:16.090" UserId="945" />
  <row Id="18504" PostId="7149" Score="1" Text="I'm checking out Livable Spaces.  It seems to be pdf'd on *many* professors' pages at universities.  You are correct that &quot;forces&quot; is the most unclear part of your list - I'm hoping to make some sense of it with the book you mentioned." CreationDate="2021-12-14T15:57:40.323" UserId="27" />
  <row Id="18505" PostId="7149" Score="1" Text="@BenI. The only way a search for Livable Spaces turned up anything useful was if I added Christopher Alexander to the search. He has a wikipedia page, also." CreationDate="2021-12-14T17:22:04.810" UserId="1293" />
  <row Id="18564" PostId="7149" Score="0" Text="Regarding your essential components, I would also add an essential property: patterns should be part of a *pattern language*, which also implies that patterns have *relationships*. That's one of the biggest flaws of the GoF book: it *does* have relationships (although it misses some, such as Iterator and Subject/Observer being category-theoretic duals of each other), but it is not a pattern language." CreationDate="2021-12-17T20:57:42.640" UserId="945" />
  <row Id="18565" PostId="7149" Score="0" Text="@JörgWMittag, no, it isn't a pattern language. As I said, the GoF book was written too early. We learned a lot after that, but a lot of that learning was actually generated by the existence of the book. Note that the &quot;Principle of Relativity&quot; is due to Galileo (IIRC), but it took until Einstein for a deeper understanding." CreationDate="2021-12-17T21:07:21.870" UserId="1293" />
  <row Id="18506" PostId="7151" Score="1" Text="I hope that the answer to this is &quot;yes&quot;, but I'm unaware of one." CreationDate="2021-12-15T19:39:11.197" UserId="27" />
  <row Id="18508" PostId="7151" Score="2" Text="@ben exactly. There are *way* too many *professional* certification exams in this scripting language, that database, or that other API that clutter up resumes and job boards but I've never found a product-independent certification on stack frames, graph traversal, Lambda calculus, or b-trees." CreationDate="2021-12-15T19:55:36.683" UserId="1931" />
  <row Id="18512" PostId="7151" Score="0" Text="In UK the Open University offers degrees done remotely. But they have restrictions (or did) about where students live. They once tried a US operation but it didn't fly." CreationDate="2021-12-15T21:55:26.757" UserId="1293" />
  <row Id="18513" PostId="7151" Score="1" Text="And Coursera offers actual degrees from good universities: https://www.coursera.org/degrees/computer-science" CreationDate="2021-12-15T21:58:47.610" UserId="1293" />
  <row Id="18514" PostId="7151" Score="0" Text="@Buffy those two examples are just ways to do degrees online. I'm specifically asking about alternative credentials that don't involve degree coursework." CreationDate="2021-12-15T22:13:12.203" UserId="1931" />
  <row Id="18516" PostId="7151" Score="2" Text="Since any degree-type credentials would have to be backed by a credential-issuing institution, such as a university or college, I doubt that such a concept would work without the degree coursework. The closest thing might be to &quot;test-out&quot; of the coursework and convince the university to grant the degree. Without the backing of an institution, and such credentials wouldn't be acknowledged by &quot;industry,&quot; hence defeating the purpose of having one in the first place." CreationDate="2021-12-16T06:58:56.760" UserId="104" />
  <row Id="18730" PostId="7151" Score="1" Text="What does CS certification mean outside of programming? I think your question is similar to &quot;Can I get a physics degree outside of academia?&quot;." CreationDate="2022-01-04T15:13:38.580" UserId="6346" />
  <row Id="18507" PostId="7152" Score="1" Text="I love the comments idea." CreationDate="2021-12-15T19:43:48.243" UserId="27" />
  <row Id="18526" PostId="7154" Score="6" Text="At the danger of starting an OT discussion but I'm surprised -- .NET/C# is both a revelation (*so* much is handed to you on a silver platter that you needed to hand-craft in C++) and a let-down (no RAII/deterministic destruction? You cannot write serious programs in such a language)." CreationDate="2021-12-16T11:04:50.720" UserId="1675" />
  <row Id="18527" PostId="7154" Score="1" Text="My experience, also roughly 20 years ago, was I taught OOP and abstract interfaces in C++ just fine; then Java was switched to purely since it was so hot; then (I believe) 5 years later we found out students were weak on pointers. The controversy was &quot;why don't we teach in the language our students will probably use?&quot;" CreationDate="2021-12-16T13:41:04.157" UserId="8773" />
  <row Id="18531" PostId="7154" Score="10" Text="@Peter-ReinstateMonica Define &quot;serious programs.&quot;  I've seen (and helped to write) software that supports the needs of Fortune 500 companies, written in C#, no RAII necessary (or wanted).  If that's not serious, what is?" CreationDate="2021-12-16T16:08:44.980" UserId="2746" />
  <row Id="18532" PostId="7154" Score="22" Text="Since we gave up with Fortran, students are weak on gotos." CreationDate="2021-12-16T16:59:57.797" UserId="2103" />
  <row Id="18536" PostId="7154" Score="8" Text="You have tagged your question with 'undergraduate', but one big controversy is if CS education should begin in pre-school or if waiting until kindergarten is acceptable. A bit of exaggeration, but really not much." CreationDate="2021-12-16T19:30:35.917" UserId="1407" />
  <row Id="18545" PostId="7154" Score="5" Text="@Mason, nothing that essentially _just_ changes numbers (including money) is serious. Truly serious software is the one that controls equipment, especially the one that can kill you." CreationDate="2021-12-17T07:04:11.807" UserId="11373" />
  <row Id="18560" PostId="7154" Score="1" Text="@MichelBillaud commerce may have given up on Fortran. Physics is still thinks it's hot stuff. Actually, just last week I had to remember how to load an F77 compiler on the university cluster." CreationDate="2021-12-17T19:00:07.023" UserId="11382" />
  <row Id="18582" PostId="7154" Score="0" Text="@MichelBillaud I sincerely hope that's a joke. Gotos are a bad idea in any language. And Fortran continues to evolve. It's now up to the 2018 standard, after 2003/8, after 90/95." CreationDate="2021-12-17T22:26:33.473" UserId="6346" />
  <row Id="18602" PostId="7154" Score="1" Text="Not sure how much this is controversial vs. just almost-unanimously-disagreed with; but there is an argument by Andrew Luxton-Reilly, published with the provocative title [*Learning to Program is Easy*](https://dl.acm.org/doi/abs/10.1145/2899415.2899432), that the reason so many students fail introductory programming courses is simply because the standards are too high, and therefore we should lower our expectations of what students will be capable of after an introductory course." CreationDate="2021-12-18T10:55:16.207" UserId="8562" />
  <row Id="18609" PostId="7154" Score="0" Text="@VictorEijkout the point is, within a limited number of hours, if you teach more subject A, you'll teach less B. And some people will complain students have more difficulties with the very important definitely fundamental subject B taught for decades." CreationDate="2021-12-19T05:44:51.270" UserId="2103" />
  <row Id="19304" PostId="7154" Score="0" Text="@MasonWheeler lets not act like Fortune500 companies are the benchmark here ;) Half the banking and insurance industry is still running on COBOL code from the 70s or so." CreationDate="2022-02-11T13:42:31.883" UserId="11138" />
  <row Id="19309" PostId="7154" Score="0" Text="Not sure what point you're trying to drive @Max...? Its arguable Java, Cobol are in roughly a similar obsolescence category. The other extreme of bleeding-edge-or-bust runs thusly https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f. Better?" CreationDate="2022-02-12T04:18:17.720" UserId="8837" />
  <row Id="19550" PostId="7154" Score="0" Text="On the other hand, I teach Java in year one and C/C++ in year two.  Many students have difficulty with pointers in C/C++, which suggests they were using references in Java without really understanding what they were doing, despite discussing what references were for, with lots of examples, in year one and explaining in detail the differences and similarities between Java references and C/C++ pointers (and later C++ references) in year two.  I suspect some students form a mental model of programming very early and have difficulty understanding different models when introduced  later." CreationDate="2022-04-02T07:42:45.193" UserId="11932" />
  <row Id="19551" PostId="7154" Score="0" Text="@MichelBillaud even worse, since giving up on Intercal students have become weak on come froms!" CreationDate="2022-04-02T07:44:33.230" UserId="11932" />
  <row Id="18523" PostId="7155" Score="1" Text="What do you expect that a new book would add of value that a classic book is missing? I ask because for an introductory course I would not expect there to be a need beyond using a classic book." CreationDate="2021-12-16T10:00:20.657" UserId="2516" />
  <row Id="18539" PostId="7155" Score="0" Text="@GuyCoder possibly new exercises, quizzes, online resources, slides, NoSQL new technologies, etc." CreationDate="2021-12-16T22:40:45.787" UserId="6410" />
  <row Id="18550" PostId="7155" Score="1" Text="I don't plan to write an answer. IMHO in your list the only item that can not be found in a classic book is the NoSQL and new technologies. See: [Neo4j books](https://neo4j.com/books/). Learning Neo4j help me understand the pitfalls of SQL that are not typically advertised. That is not saying SQL should not be used but that for certain problems SQL is the wrong tool." CreationDate="2021-12-17T11:19:31.247" UserId="2516" />
  <row Id="18605" PostId="7155" Score="1" Text="I'd look at books (like)  [Data Analysis Using SQL and Excel](https://www.amazon.com/dp/111902143X/ref=cm_sw_r_awdo_navT_g_2VXHEBVGVSMKPE13V3R2). (Disclaimer I've not seen it myself. Just that the direction seems good)" CreationDate="2021-12-18T15:50:24.710" UserId="8837" />
  <row Id="18607" PostId="7155" Score="0" Text="@Rusi thank you! That book does not seem to cover the theory of relational database design, i.e. normal forms, functional dependencies, etc." CreationDate="2021-12-19T04:17:05.517" UserId="6410" />
  <row Id="18612" PostId="7155" Score="0" Text="I guess not... But if you want &quot;current-spiciness&quot; plus stable timeless theory it's likely hard to find in one single place. Put differently the difference between a modest and a stellar course is likely that the first sticks to one text whereas the second mixes and matches material to teacher's taste/student possibilities. However **WARNING** : Too many a struggling teacher has moved from modest to disaster by over reaching their capabilities! (And I'm chary of the nosql fad)" CreationDate="2021-12-19T07:14:23.543" UserId="8837" />
  <row Id="18624" PostId="7155" Score="1" Text="@GuyCoder Just about everything the original Neo4j book said about relational DBs was wrong so I wouldn't trust anything about the relational model written from a Neo4j source." CreationDate="2021-12-23T05:07:08.493" UserId="2485" />
  <row Id="18520" PostId="7156" Score="10" Text="Professional practice has moved on to &quot;automate as much of this as possible&quot;. It's worth arguing over intelligible names, but the format of the code is a job for clang-format or whatever." CreationDate="2021-12-16T09:15:54.877" UserId="5406" />
  <row Id="18546" PostId="7156" Score="5" Text="The Go community is a great example of that. 1) There is no myriad of code formatters. Since `gofmt` ships as part of the compiler, nobody else has felt the need to write one. 2) `gofmt` also has no configuration options, there is no way to choose or influence how it formats the code. 3) `gofmt` is automatically ran over every commit to the main Go compiler / stdlib repository. 4) The code review system automatically rejects every pull request that is not &quot;idempotent under `gofmt`&quot; – i.e. all submissions must be already formatted with `gofmt`. 5) The Go language team encourages everybody to …" CreationDate="2021-12-17T09:44:01.657" UserId="945" />
  <row Id="18547" PostId="7156" Score="4" Text="… do the same. This has some interesting implications: there is the obvious one, which is that all Go code in the entire community is formatted the same way. There is no discussion over tabs vs. spaces, where the parentheses go, etc. Less obvious is the productivity benefit of simply not having to think about these things. But a rather surprising benefit is that *this allows backwards-incompatible syntax changes and even some semantic changes without pain*. You can teach `gofmt` to convert the old syntax / old code into the new code, and since everybody runs `gofmt` all the time, their code …" CreationDate="2021-12-17T09:46:52.787" UserId="945" />
  <row Id="18548" PostId="7156" Score="4" Text="… is automatically updated to the new language version over time." CreationDate="2021-12-17T09:47:10.513" UserId="945" />
  <row Id="18603" PostId="7156" Score="0" Text="@JörgWMittag: That's good. This is really the most important point about formatting : as long as every team member uses the same formatting, it really doesn't matter much how it's defined. There's nothing worse than useless commits replacing spaces by tabs or vice-versa." CreationDate="2021-12-18T12:55:24.803" UserId="2021" />
  <row Id="18610" PostId="7156" Score="0" Text="I can't believe in the 2020's we're still stuck with tab vs spaces considerations. The automatic code formatter is only one keystroke away with any IDE/text editor. And using it is a valuable help while programming. Better insist on finding appropriate names for variables classes methods etc." CreationDate="2021-12-19T05:58:33.677" UserId="2103" />
  <row Id="18622" PostId="7156" Score="1" Text="Both camps are right and wrong. Discuss style and why it is important, show students how to use a tool." CreationDate="2021-12-22T21:38:36.780" UserId="11413" />
  <row Id="19552" PostId="7156" Score="0" Text="&quot;involves carefully reading&quot; that sounds like a good thing to me!  Being able to carefully read (and understand) your own code is a key skill when first learning to program, especially as these days students tend to like cut and pasting from on-line example code." CreationDate="2022-04-02T07:49:50.513" UserId="11932" />
  <row Id="18511" PostId="7158" Score="2" Text="Good point about the paradigm shift. In 2001, *everything* was supposed to be object-oriented or interpreted in an OOP context. Mobile phones existed but were used for calling people - nobody worth mentioning was writing &quot;apps&quot;. We wrote in C++ on Solaris shell accounts and we *loved* it!" CreationDate="2021-12-15T21:11:52.740" UserId="1931" />
  <row Id="18518" PostId="7158" Score="2" Text="your answer is one-of-a-kind, you have posted a lot of &quot;A vs B&quot; things. That is great, because this question isn't expecting one completed answer, let alone, what kind of &quot;controversies&quot; they are.&#xA;&#xA;Pretty good you actually read the mailing list." CreationDate="2021-12-16T09:04:29.447" UserId="11353" />
  <row Id="18525" PostId="7158" Score="1" Text="@VScode_fanboy Exactly. Upvoted because this is not just anecdotal or a subjective opinion." CreationDate="2021-12-16T11:01:11.360" UserId="1675" />
  <row Id="18529" PostId="7158" Score="0" Text="@Peter-ReinstateMonica thanks, first comment like this." CreationDate="2021-12-16T15:59:59.010" UserId="11353" />
  <row Id="18530" PostId="7158" Score="3" Text="&quot;I see some discussion about whether using a sophisticated IDE or the command line is preferable.&quot;  Wow.  The rest of the world decided this question definitively 30+ years ago: GUIs are just orders of magnitude better than CLIs.  It's kind of sad to see so many people at the very heart of the computer industry stuck in the 1970s!" CreationDate="2021-12-16T16:04:44.460" UserId="2746" />
  <row Id="18533" PostId="7158" Score="0" Text="IDE better for what? Everyday programming work, of course. Understanding what happens (compilation, linkage, execution, seamless project management, ...) is another question." CreationDate="2021-12-16T17:02:25.633" UserId="2103" />
  <row Id="18537" PostId="7158" Score="3" Text="@MasonWheeler I think some people have basically an integrated development environment on the console. Maybe the emacs enthusiasts a bit more than the vi(m) faction. If you know your keystrokes you are much faster for most tasks; plus you have written the first function before your IDE accepts the first interaction after initializing. (I personally like VS because my memory is too bad for all the keystrokes but have some emacs envy.)" CreationDate="2021-12-16T20:15:03.380" UserId="1675" />
  <row Id="18541" PostId="7158" Score="1" Text="@Peter-ReinstateMonica That's a common myth that empirical data suggests is *just not true,* and that's been known to be false for decades. &quot;We’ve done a cool $50 million of R&amp;D on the Apple Human Interface. We discovered, among other things, two pertinent facts: *Test subjects consistently report that keyboarding is faster than mousing. *The stopwatch consistently proves mousing is faster than keyboarding. This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster.&quot; -- https://bit.ly/3yCqxt5, published in 1989" CreationDate="2021-12-17T00:25:55.290" UserId="2746" />
  <row Id="18542" PostId="7158" Score="3" Text="@MasonWheeler I think the Association of Wine-Growers has published libraries full of studies proving that wine is good for your health ;-). Also it is anecdotally evident that people who are really good with the mouse *suck* with the keyboard (kb/mouse are essentially two different camps on the spectrum between Web interfaces and embedded), so the study is perhaps not surprising on more than one dimension." CreationDate="2021-12-17T00:30:23.867" UserId="1675" />
  <row Id="18551" PostId="7158" Score="1" Text="To the CLI-IDE arguers  : &lt;tongue-in-cheek&gt;Do show me a programmer who writes their programs with *only* a mouse. [Hint: Synonym for &quot;write&quot; is??] Applies more strongly for an author writing a book. And even more for a musician preparing scores&lt;/tongue-in-cheek&gt; On a more serious note *IDE-command-line* dichotomy is really the *IDE-language* dichotomy. See [my answer](https://cseducators.stackexchange.com/a/7165/8837)" CreationDate="2021-12-17T11:33:38.397" UserId="8837" />
  <row Id="18552" PostId="7158" Score="1" Text="@MasonWheeler: Wow, Apple compared apples to oranges 30 years ago, and declared that apples are better. Incredible! Seriously, though, depending on what you want to do, VisualStudio/Netbeans/Eclipse/Pycharm will undeniably be the best tools, but for other tasks, it will be hard to beat zsh+ssh+git+(vim or emacs)+plugins+.... Many tasks won't even be possible with just the mouse." CreationDate="2021-12-17T12:13:11.650" UserId="2021" />
  <row Id="18555" PostId="7158" Score="2" Text="@EricDuminil I'd say it's not so much apples vs oranges as users vs programmers that people fail to get. Let's grant that **for the user** mouse is better then KB. Further even the most wizened programmer is more user than programmer. Eg I'm **a user** of emacs, git, firefox, linux-kernel, gnome.... Not to mention gcc, python, haskell etc etc... in hundreds... The issue is how to make a user -- pretty much anyone in 21 century -- into a programmer. That's CSE by definition. For that a KB is essential. See my comment above" CreationDate="2021-12-17T12:41:37.580" UserId="8837" />
  <row Id="18556" PostId="7158" Score="0" Text="\*rolling eyes\* Yes, obviously nothing gets done with *only* the mouse.  The point was that *on user-interface tasks specifically,* having a GUI is not only obviously more discoverable than a CLI, it's also, counterintuitively but provably, faster as well." CreationDate="2021-12-17T15:09:48.333" UserId="2746" />
  <row Id="18559" PostId="7158" Score="3" Text="At the very least, this comment thread demonstrates that IDEs are a very real contention for people who use stackexchange." CreationDate="2021-12-17T18:56:22.177" UserId="11382" />
  <row Id="18604" PostId="7158" Score="0" Text="Could you tell us the name of the prominent author and the titles of the books? Just curious." CreationDate="2021-12-18T13:54:22.833" UserId="11393" />
  <row Id="18648" PostId="7158" Score="0" Text="I read once that one fourth of all animal species are beetles, so I suppose I should get over being surprised at the continuous development of new languages and the 'balkanization'. I thought that the point of Engineering was to find and formalize deep underlying realities, not to create contestants for popularity contests? But hey, we are subject to Evolution, there is no escaping it. If our peacock feathers become non-adaptive, we will perish as surely as the prior 99% of species." CreationDate="2022-01-01T22:07:34.037" UserId="5349" />
  <row Id="18608" PostId="7159" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132445/discussion-on-answer-by-ben-i-what-controversies-in-computer-science-education)." CreationDate="2021-12-19T04:51:12.563" UserId="27" />
  <row Id="18637" PostId="7159" Score="0" Text="Undergrad: programming, grad: theory. Of course you have to start with some background info at the beginning..." CreationDate="2021-12-31T02:10:59.347" UserId="5349" />
  <row Id="18630" PostId="7160" Score="0" Text="I asked a similar question https://cseducators.stackexchange.com/questions/6699/what-are-good-practical-labs-and-activities-for-unnested-loops" CreationDate="2021-12-28T07:55:26.117" UserId="9884" />
  <row Id="18631" PostId="7160" Score="0" Text="Do you know [Processing](https://processing.org/)? I do think Octave is too difficult /too math oriented for 12/13 kids. In Prcessing, basic ideas and notions of programming can be visualized by animated geometry examples. It was deveolped in a school of art with the idea of being a didactical tool too. (scrivo dall'Italia anche io :-) )." CreationDate="2021-12-28T15:06:47.083" UserId="232" />
  <row Id="18896" PostId="7160" Score="0" Text="How is it possible, in Italy or anywhere else, that standard examples aren't available to all teachers?" CreationDate="2022-01-08T23:55:34.023" UserId="9185" />
  <row Id="18574" PostId="7162" Score="0" Text="Disagree on waiting to introduce for loops, since they're very useful for things like iterating over arrays. For instance, in python, &quot;for var in var_list:&quot;" CreationDate="2021-12-17T21:37:21.863" UserId="7971" />
  <row Id="18577" PostId="7162" Score="3" Text="@nick012000 I see that -- in fact, I've even taken that approach for many years.  I eventually switched to doing `while` first because I've found over the years that it helps my students avoid cognitive traps and understand better what a loop is doing.  And usefulness hardly matters when we're only talking about 2 to 3 periods before we've covered both anyway -- we certainly cover `for` loops!  I just have to make sure it all gets into their head in a sensible way." CreationDate="2021-12-17T22:19:07.510" UserId="27" />
  <row Id="18613" PostId="7162" Score="1" Text="Remark 1. Your examples are largely of &quot;temporal loops&quot;: each iteration has to follow the previous, for instance because it corresponds to a subsequent event. However, in for-loops the loop index is often extraneous: you really want to perform an action , or test a predicate, over all elements in a collection. Thus, the python `for i in whatever` or C++ `for ( auto e : collection )` are more natural than indexed loops, let alone while loops. So I would distinguish between two types of loops: strict sequences, and &quot;for all&quot; loops. Neither should be reduced to the other." CreationDate="2021-12-19T21:04:57.227" UserId="6346" />
  <row Id="18614" PostId="7162" Score="0" Text="Remark 2. If a for loop is syntactic sugar around a while loop, and you teach the latter first, shouldn't you argue that a while loop is syntactic sugar around a `if / goto` combination and teach that first? Or maybe I'm just kidding. I do think that showing some mechanism later because it can be reduced is the wrong approach. I try to teach the highest abstraction first." CreationDate="2021-12-19T21:07:17.630" UserId="6346" />
  <row Id="18900" PostId="7162" Score="0" Text="@VictorEijkhout I tend to point out early on that all of programming is made up, but that the CPU is more of a 'given', because we have to construct a physical thing to run a nonphysical process. That is the leap which makes programming different from everything else. The interface between transistors and a program is the 5 operations a CPU can do, and it is well worthwhile to pierce the bubble of obscurity about computers right at the start. Then there is some basis for the abstraction. Variables are unlike anything else in the universe. It is a wonder to behold." CreationDate="2022-01-09T22:52:56.213" UserId="5349" />
  <row Id="18901" PostId="7162" Score="0" Text="@ScottRowe I'm not exactly sure what you are arguing. Variables were not mentioned in any of the foregoing. But I think the CPU should stay out of elementary teaching. We have a language with a defined syntax and semantics, and that's our computer. Whether that's executed underneath by electrons, water power, or voodoo, is immaterial." CreationDate="2022-01-09T22:58:46.800" UserId="6346" />
  <row Id="18902" PostId="7162" Score="0" Text="@VictorEijkhout WRT remark 2, putting aside for-each loops, which are ultimately a different beast, plain vanilla `for` loops are `while` loops with the advantage of everything being declared at the top, but the (corresponding) disadvantage of having the ordering be unintuitive.  If you take the sections `for(1;2;3) {4(...)}`, your looping order becomes 1 2 4 3 2 4 3 2.  By contrast, a while loop is written in execution order. `1; while(2) {3(...) 4;}` executes as 1 2 3 4 2 3 4 2.  I think this is the primary reason I've had better luck teaching `while` first, with `for` soon after." CreationDate="2022-01-09T23:08:00.077" UserId="27" />
  <row Id="18903" PostId="7162" Score="0" Text="Not to mention that the word `while` lends itself to loops in natural, everyday English in a way that `for` does not.  I think that both `for` and (eventually) `goto` can most naturally be explained from `while`, which is the most intuitive of the bunch." CreationDate="2022-01-09T23:11:55.967" UserId="27" />
  <row Id="18904" PostId="7162" Score="0" Text="@VictorEijkhout I was just responding to your statement that you like to teach the highest abstraction first. Combined with your next statement, that the CPU should be kept out of elementary teaching, you have built a bridge to the absurd. I don't understand why this is not clear to educators. We should start with the germ of the idea, just as we do with language, something children can learn with no teaching at all." CreationDate="2022-01-09T23:16:13.003" UserId="5349" />
  <row Id="18905" PostId="7162" Score="0" Text="@ScottRowe We don't teach language beginning with word roots.  What are you talking about?  We start with the simplest point of entry, and then work our way *out* from there. Babies start with conversational &quot;aaaa&quot;, then move on to phonemes, then get a few key words, and then develop vocabulary for a long time with no lower-level understanding of diphthongs, fricatives, vowels, consonants, etymologies, word roots, or the neural basis of language.  In other words, they get NONE of the &quot;germ of the idea&quot; for a very long time. You may try to teach it to them at the start, but good luck with that." CreationDate="2022-01-09T23:22:36.750" UserId="27" />
  <row Id="18906" PostId="7162" Score="0" Text="We are hard-wired to learn language essentially in that order.  Start with the most intuitive, at whatever level of abstraction that is, and then slowly expand your understanding.  You make these claims, but you did not start learning about computers with Turing Machines and Von Neumann architectures. Just like the rest of us, you began at the level of abstraction that best reflected whatever computer you, personally, started on, because that was what was open to you at the time.  And then you explored out from there, because that's what we all do." CreationDate="2022-01-09T23:28:07.630" UserId="27" />
  <row Id="18907" PostId="7162" Score="0" Text="@ScottRowe I'm with Ben on the levels of abstraction thing. I mostly teach C++, and there are people who approach that as &quot;C with extras&quot;, teaching first C and the basic mechanisms, ,and then C++ and how it gives a higher level of abstraction over the C mechanisms. I completely disagree with that, and I have some very reputable people to back me up. While it's not entirely analogous, I feel that way about your notions of starting with an understanding of the CPU too. I only discuss the CPU in cases like when students get integer overflow, then I tell them about 32-bit ints." CreationDate="2022-01-09T23:53:30.590" UserId="6346" />
  <row Id="18908" PostId="7162" Score="0" Text="I would think that students would like to know how computers work. Didn't you?" CreationDate="2022-01-10T00:51:21.937" UserId="5349" />
  <row Id="18909" PostId="7162" Score="0" Text="@ScottRowe Are you dodging on purpose?  The argument isn't about whether to cover it. The issue is about *when* to cover it.  Before a graduate school level, there are no topics that we learn from first principles, in computer science, or out of it.  That's not how the human brain works.  Not for language, not for numbers, not for song, not for writing... we don't begin at the underlying foundation.  We begin at the easiest point of entry, and then we explore out.  Computer Science is no different, because the wetware is no different." CreationDate="2022-01-10T01:50:53.127" UserId="27" />
  <row Id="18910" PostId="7162" Score="0" Text="I teach processor design and architecture.  I take my kids all the way down to the wires and the boolean gates, and they build an entire processor that way.  I don't argue against teaching low-level stuff, I think it's very important.  But it's not a class for freshmen.  I take them after they've done programming and assembly first." CreationDate="2022-01-10T01:53:23.590" UserId="27" />
  <row Id="18912" PostId="7162" Score="0" Text="Ben, I'm sorry that I keep bringing up this question and always get the same mystifying responses from most everyone. Today I was thinking that you-all are perceiving what I say from an Academic point of view. That's not what I'm saying at all. I am saying, how do you tell a kid how a computer, an electrical machine that can answer questions, can do that. Just like, what makes a car go, or, why do planes fly. Have you lost your memory of having that thought? Without some satisfying answer early on, I would have stuck with electronics, where the few books I found actually explained things." CreationDate="2022-01-10T10:54:39.493" UserId="5349" />
  <row Id="18913" PostId="7162" Score="0" Text="I watched the moon landing and I watched Nixon resign. If someone wasn't direct and to the point with me when I was a child, I disregarded them and went on to get the answers myself. I guess kids now are not that way." CreationDate="2022-01-10T11:04:55.017" UserId="5349" />
  <row Id="18914" PostId="7162" Score="0" Text="@ScottRowe If a total beginner asked me the question (they usually don't), I would tell them that, as crazy as it sounds, it all comes down to true and false, and, or, and not, and that if they find that intriguing, they should... then I would tell them the sequence of courses they need to arrive at processors at my school.  I've a flair for the dramatic! I like to think that I make such things sound intriguing in person. If you had been my student, I don't think you would have abandoned ship!  " CreationDate="2022-01-10T11:52:27.470" UserId="27" />
  <row Id="18534" PostId="7163" Score="5" Text="[The Social Implications of Computing](https://cs.uwaterloo.ca//current/courses/course_descriptions/cDescr/CS492) was the best course I took in my undergrad.  This type of course should be mandatory for all CS students everywhere." CreationDate="2021-12-16T17:55:38.923" UserId="11362" />
  <row Id="18615" PostId="7163" Score="2" Text="But this is nothing new. Welcome to engineering!" CreationDate="2021-12-20T00:28:39.220" UserId="11373" />
  <row Id="18636" PostId="7164" Score="0" Text="No one wonders if Architects still need to know about arches and load bearing. What is up with CS that we seem to want to kill all our children like a jealous Cronos or something? Why can't we see what is fundamental about the task of computing?" CreationDate="2021-12-31T01:57:12.177" UserId="5349" />
  <row Id="18641" PostId="7164" Score="1" Text="Try some [Douglas Adams](https://douglasadams.com/dna/19990901-00-a.html) @ScottRowe -- about 3 paras down. It's therapeutic. Ppl in my (I guess same as your) generation would be **unable** to use a computer without files/directories. Doesn't mean they're made by God. Heck even the original (cardboard) files which metaphorize into macine fles are not" CreationDate="2021-12-31T05:54:29.717" UserId="8837" />
  <row Id="18643" PostId="7164" Score="0" Text="@Rusi *that* Douglas Adams? Interesting. It was a while ago. Anyway, we should not create systems that entirely hide what we are doing from ourselves. If you are in the kitchen and you put something away in the wrong cabinet, that is still stupid and you still have to learn to organize yourself, no matter how much technology your kitchen has. Stuff is stuff and using things is using things. Virtual things doubly so. Propose something better than files and folders? Really. What would it be? Hierarchy is part of existence." CreationDate="2021-12-31T11:34:56.383" UserId="5349" />
  <row Id="18644" PostId="7164" Score="1" Text="@ScottRowe *Leave the clutter be; let desktop search do the work* The kids are **already** doing it that way if the verge article is to be believed. IOW hierarchy may be part of **your* life; its evidently less and less part of theirs. Windows/Apple tried to go that way circ 2004; in MSworld it was called longhorn/WinFS, in apple it was spotify.  That it didnt stick is another matter...  The verge article basically amounts to this that google has succeeded in doing what MS/Apple/Linux failed to do" CreationDate="2021-12-31T12:02:17.053" UserId="8837" />
  <row Id="18646" PostId="7164" Score="0" Text="@Scottrowe &quot;*Propose something better than files and folders?*&quot; Here's some discussion https://stackoverflow.com/questions/1575155/what-is-a-database-file-system" CreationDate="2022-01-01T10:23:22.033" UserId="8837" />
  <row Id="18647" PostId="7164" Score="0" Text="@Rusi your link shows a couple Answers saying that the idea never took off. Sure, add tags and a search box. But where *are* the files you're searching for? Uber means you don't have to use GPS. GPS means you don't have to use a map. Map means you don't have to know already where something is. But, it certainly IS somewhere, and thank heaven for that!" CreationDate="2022-01-01T12:52:22.367" UserId="5349" />
  <row Id="18635" PostId="7165" Score="0" Text="Pretty soon we will no more be writing programs than we saddle horses or hoist sails. Just driving a car is about to drop off. Of course, I am able to do those things, and build radio equipment and use a darkroom, but who really does?" CreationDate="2021-12-31T01:47:29.490" UserId="5349" />
  <row Id="18638" PostId="7165" Score="0" Text="The Blub idea is interesting but perhaps dated. I create simple web apps that use data accessed with SQL. So... 'Language' = HTML with ASP tags + CSS + code behind (C# or VB.Net) + SQL and perhaps other things. I do what is easiest and most maintainable with each one. This isn't even including any OO stuff, which is unnecessary for these types of apps. Could Lisp replace all these usages, and if so, how?" CreationDate="2021-12-31T02:32:50.300" UserId="5349" />
  <row Id="18642" PostId="7165" Score="0" Text="@Scottrowe You're describing an intelligent &quot;full-stack developer&quot; -- a term which Graham didn't have. Re [Lisp equiv](https://docs.racket-lang.org/db/index.html).&#xA;Doesn't mean I recommend lisp today. AFAIC scheme &amp; python are the &quot;same&quot; language modulo syntax. For your kind of work it's usually less pain to stay within mainstream. Teaching is another matter entirely: educating with {Java, python,etc} produces oodles of blub : Alan Kay's [Stanford=Java certification](https://quotepark.com/quotes/1893866-alan-kay-i-fear-as-far-as-i-can-tell-that-most-undergradu) applies to python equally today" CreationDate="2021-12-31T11:16:00.887" UserId="8837" />
  <row Id="19303" PostId="7165" Score="0" Text="Not to keep kicking the anthill hon, but, a heuristic I so often use is that the more contentious and strident people are about some distinction, like choice of CS language or paradigm, the less it actually *matters*. Because people tend to see the surface features and symbology, not the underlying reality. Yes! Even the Experts! Especially the experts get so wrapped up in the decades they have sunk into developing their theories about reality, that they are lost from reality. That bothers me, as you know. Why do people see symbols instead of what is? Can't they have an unmediated experience?" CreationDate="2022-02-11T11:11:09.767" UserId="5349" />
  <row Id="19306" PostId="7165" Score="0" Text="@ScottRowe &quot;hon&quot;?" CreationDate="2022-02-11T21:43:57.627" UserId="6346" />
  <row Id="19311" PostId="7165" Score="0" Text="@ScottRowe: «Strident ⇒ Doesn't matter» Fine so far.&#xA;But then beyond that...&#xA;Ok lets try an experiment: Take your five favorite Genesis-created ops: &quot;fetch/store/arithmetic/test/jump&quot; Pls open up some machine nearby and show them to me. While I'll open up a dictionary (you can make the choice of dict to obviate any possible accusation that I'm slanting the experiment) and I'll show them to you. My points: (a) What you consider fundamental, most of us see as linguistic happenstance." CreationDate="2022-02-12T05:18:59.377" UserId="8837" />
  <row Id="19313" PostId="7165" Score="0" Text="(b) Everyone can only ever have language-mediated experience. (See [Wittgen](https://slate.com/human-interest/2015/09/take-a-wittgenstein-class-he-explains-the-problems-of-translating-language-computer-science-and-artificial-intelligence.html) or [Whorf](https://en.wikipedia.org/wiki/Linguistic_relativity)) The diff between machine-folks (mf) and language-folks (lf) is that while the mfs are blissfully unaware of their languages' unconsious mediations, we lfs collect multiple languages precisely to mitigate this inexorable limitation of human cognition. I invite you to choose your camp" CreationDate="2022-02-12T05:32:19.237" UserId="8837" />
  <row Id="19315" PostId="7165" Score="0" Text="Mmm, most of human experience has nothing to do with language. Most arts, crafts, activities... have no language component. In one of my books I said: &quot;*The point has been made that after the development of paper, writing and math, much of the world's activity has revolved around linear, visual and symbolic reasoning. That is such a small subset of our capacity as to be absurd.*&quot; Language is just not that important. Our egos *think* it is. We should doubt every single thing that they say." CreationDate="2022-02-12T13:24:29.067" UserId="5349" />
  <row Id="19317" PostId="7165" Score="0" Text="Sit for a meditation retreat with a competent adept @ScottRowe. And you will see how we **label every single thing**.  When one stops doing it and just stays with the sensation its a wonderfully liberating experience.  But that's a rare state.  You make out that that is the norm. It may be... for cats or dolphins. It may even be that in some sense they're  better off than us. **But they're not us!!!**." CreationDate="2022-02-12T13:47:47.140" UserId="8837" />
  <row Id="19318" PostId="7165" Score="1" Text="Ive spoken of the normal lower levels (words, thoughts) and the higher-than language levels (insight, transcendence) https://yogainternational.com/article/view/4-degrees-of-human-speech. Yes its a lofty goal to try going beyond the lower 2 to(wards) the upper two. The difficulty with you is you talk as though its easy, trivial. Somewhat like writing to some ashram, or spiritual center and saying: *Ive got three days in your city. Can you make me Buddha?. (Im ready to pay!)* [Its of course true &quot;Most human experience has nothing to do with language&quot; Its even more true we live nth hand from such" CreationDate="2022-02-12T13:54:04.447" UserId="8837" />
  <row Id="19319" PostId="7165" Score="0" Text="It is interesting, your post seems to say that the things we think matter, do not. So... What does matter? Only Insight, in my opinion. And, &quot;You can't teach insight&quot;, to paraphrase the famous basketball coach. Your link to Dijkstra said he thought that in 1972. So what is CS teaching? What is any teaching that is not apprenticeship and imitation? I am actually asking, not being snarky. When I was teaching a few years ago, I talked with my more experienced co-instructor about this a lot." CreationDate="2022-02-12T14:32:56.683" UserId="5349" />
  <row Id="19321" PostId="7165" Score="0" Text="@ScottRowe Continue on [chat](https://chat.stackexchange.com/transcript/59174/2022/2/12)" CreationDate="2022-02-12T14:47:32.040" UserId="8837" />
  <row Id="18558" PostId="7166" Score="0" Text="I'm not based in the UK but I love teachcomputing.org.  It's such a tremendous resource!" CreationDate="2021-12-17T18:36:12.897" UserId="27" />
  <row Id="18561" PostId="7167" Score="0" Text="I'm currently only using chapter 1 of that book, because that is the document where the authors laid out, philosophically, why this should be an area of study, and provided a lot of interesting general insights.  No other book that I've seen has attempted the same.  For the actual patterns, we're mostly hewing to &quot;Game Programming Patterns&quot;, which is a much more modern take." CreationDate="2021-12-17T19:28:06.360" UserId="27" />
  <row Id="18562" PostId="7167" Score="0" Text="I disagree about singleton. Preventing multiple instances is sometimes an essential requirement. And what &quot;original&quot; patterns book are your referring to?" CreationDate="2021-12-17T20:06:35.430" UserId="1293" />
  <row Id="18566" PostId="7167" Score="0" Text="The lack of coverage in GoF is due entirely to the early stage of understanding at which it was written. New design patterns are published every year at PLoP and at EuroPLoP among others." CreationDate="2021-12-17T21:09:30.577" UserId="1293" />
  <row Id="18567" PostId="7167" Score="0" Text="@buffy https://arl.human.cornell.edu/linked%20docs/Alexander_A_Pattern_Language.pdf" CreationDate="2021-12-17T21:14:05.937" UserId="204" />
  <row Id="18568" PostId="7167" Score="0" Text="I don't understand why you say the GoF patterns are primarily about GUI. I think the Observer pattern qualifies as it is a fundamental part of Model View Controller architecture. But I've use a lot of these &quot;classic&quot; patterns in building models with no UI components at all. I use Strategy and Decorator constantly (together). Iterator is used in many algorithms over data structures." CreationDate="2021-12-17T21:15:06.703" UserId="1293" />
  <row Id="18569" PostId="7167" Score="0" Text="@buffy Preventing more than one, is almost always, mixing a factory with another class." CreationDate="2021-12-17T21:15:50.037" UserId="204" />
  <row Id="18570" PostId="7167" Score="0" Text="@Buffy no GOF patterns are not GUI pattern. However all the examples in the GOF book are GUI. I found it hard to separate from GUI, so had to re-write them in a way that I could read. I now use the head-first book when I need to refer to these patterns, (or other book for other patterns)." CreationDate="2021-12-17T21:18:08.327" UserId="204" />
  <row Id="18571" PostId="7167" Score="0" Text="A Pattern Language wasn't about software at all. It took a leap of understanding to apply it to software. The required number of patterns in one field (physical architecture) is unrelated to that in another field. But yes, there are a lot more than 23 patterns as even the authors of GoF agree." CreationDate="2021-12-17T21:18:26.023" UserId="1293" />
  <row Id="18573" PostId="7167" Score="0" Text="See the [Wikipedia page for Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) for more cogent criticisms of GoF and design patterns in general." CreationDate="2021-12-17T21:37:13.207" UserId="1293" />
  <row Id="18587" PostId="7169" Score="2" Text="That is an awfully narrow view of education." CreationDate="2021-12-17T22:41:04.060" UserId="1293" />
  <row Id="18589" PostId="7169" Score="0" Text="@Buffy I think that taking any other view is to do a disservice to the students and the taxpayers that fund their education." CreationDate="2021-12-17T22:41:55.163" UserId="7971" />
  <row Id="18596" PostId="7169" Score="1" Text="CFGs irrelevant?! Seriously??!! The only (significant) language that was implemented without things like CFG led to nonsensical -- by today's standard -- bugs like [this](https://arstechnica.com/civis/viewtopic.php?t=862715). More significantly, after this goofup things changed enough that the same Backus behind this mistake studied/created the theory called BNF (Backus-Naur form) which is mostly synonymous with CFGs. Having said that I have some sympathy with your anti-theory/math stance. I've taught this kinda stuff for 40 y and there's always more programming in my delivery than is typical" CreationDate="2021-12-18T03:36:55.263" UserId="8837" />
  <row Id="18716" PostId="7169" Score="0" Text="When did the halting problem become irrelevant?  You can't code for more than an hour without running directly into it.  It's the direct reason for many of the language constraints and compiler errors you deal with every day.  The halting problem proves that we can't know, outside of some trivial examples, whether any particular line of code will ever execute short of actually running the program.  `if (x&lt;5) {int v = 5;} if (x &gt;= 5) {int v = 8;} print(v);` is an error at the last `v` because of the halting problem." CreationDate="2022-01-04T10:53:16.310" UserId="27" />
  <row Id="18745" PostId="7169" Score="0" Text="@BenI. That code (or, at least, its linguistic equivalent) runs in Python just fine. No compiler errors at all. Just tested it on an online REPL." CreationDate="2022-01-04T20:20:17.267" UserId="7971" />
  <row Id="18746" PostId="7169" Score="0" Text="@nick012000 I'm not a Pythoner.  Apparently Python is designed to allow you to use a variable without guaranteeing that you have initialized it.  That can be a fine choice, but that also means that if initialization is required, Python is deferring that to a run-time check instead of a compile-time check.  (This is a halting problem result)" CreationDate="2022-01-04T20:26:50.280" UserId="27" />
  <row Id="18611" PostId="7171" Score="3" Text="I'd be bolder than Buffy and Ben. See [status of Javascript](https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f). (With regards to Quilang https://cseducators.stackexchange.com/a/6998/8837)" CreationDate="2021-12-19T06:15:25.647" UserId="8837" />
  <row Id="18616" PostId="7174" Score="1" Text="I think you meant to do `- 1` somewhere." CreationDate="2021-12-20T21:50:09.737" UserId="11404" />
  <row Id="18618" PostId="7174" Score="0" Text="Oops. Yes. Thanks." CreationDate="2021-12-20T22:56:05.783" UserId="6346" />
  <row Id="18621" PostId="7176" Score="1" Text="If OP is still around, I hope that they accept this answer." CreationDate="2021-12-22T21:12:46.167" UserId="27" />
  <row Id="18625" PostId="7176" Score="0" Text="looks pretty promising!" CreationDate="2021-12-23T07:58:47.537" UserId="5925" />
  <row Id="18628" PostId="7181" Score="0" Text="Hi Tavi, thank you for your thoughts!  I like the distinction you've made about identifying versus reproducing, and I will modify my ask somewhat along these lines.  Game Programming Patterns is already our textbook, so that's a good start already!" CreationDate="2021-12-27T23:36:03.767" UserId="27" />
  <row Id="18629" PostId="7181" Score="0" Text="I probably should have read the comment that mentioned your textbook oops. I'll try and reorganize/clean up my answer at some point." CreationDate="2021-12-27T23:50:23.680" UserId="11428" />
  <row Id="18650" PostId="7186" Score="3" Text="Two very different answers. Theoretical answer : Godel's second incompleteness theorem guarantees that language &quot;power&quot; is an infinite hierarchy. Real (aka practical) answer: real-politik: How much gap between C# and Java? The answer depends entirely on whether it's a scientific, technical, managerial or political question. Also note that the variety generated by the theory {assembly, C, Haskell, python} is vastly different from practicality" CreationDate="2022-01-02T13:40:35.573" UserId="8837" />
  <row Id="18651" PostId="7186" Score="38" Text="Why isn't there one human/natural language instead of so many?" CreationDate="2022-01-02T16:01:17.830" UserId="3799" />
  <row Id="18654" PostId="7186" Score="44" Text="https://xkcd.com/927/" CreationDate="2022-01-02T21:18:21.040" UserId="6214" />
  <row Id="18657" PostId="7186" Score="5" Text="In 1970 we used Algol, APL, Fortran at my university. The Polytechnic also taught Cobol. I recall someone from the Computer Science Department giving an enthusiasm presentation on the Language of the Future, PL/1 (Programming Language 1), which was going to sweep the others away. Instead we saw the situation that @NickMatteo described. (I removed PL/1 from my CV in 1985, after I landed a contract fixing bugs in a PL/1 payroll application. I hear they eventually rewrote in Cobol)." CreationDate="2022-01-02T22:33:59.277" UserId="11451" />
  <row Id="18658" PostId="7186" Score="0" Text="BTW, here is the [Tower of Babel](https://www.cs.uaf.edu/~cs331/notes/Babel.gif) from Communications of the Association for Computing Machinery in January 1961. I recall reading an article in CACM some time during the 1970s; the Tower of Babel had now reached 400 languages, and they couldn't afford to spend resources listing the names of languages any longer." CreationDate="2022-01-02T22:40:19.357" UserId="11451" />
  <row Id="18661" PostId="7186" Score="0" Text="In the near future, you'll just need to know English to speak with the multitudes of AI things sprouting from every surface and striving to handle your every whim." CreationDate="2022-01-02T23:33:02.797" UserId="5349" />
  <row Id="18672" PostId="7186" Score="15" Text="The almost [identical question](https://cs.stackexchange.com/q/451/24043). With similar answers being repeated.... Including cartoons " CreationDate="2022-01-03T03:37:59.970" UserId="8837" />
  <row Id="18674" PostId="7186" Score="1" Text="@Rusi The question looks the same, but it is asked in a different context. In this SE, we are talking about education, so here the question is about why students need to learn more than one." CreationDate="2022-01-03T08:37:19.033" UserId="1055" />
  <row Id="18675" PostId="7186" Score="16" Text="The question doesn't appear to be about anything; it includes two statements that are both clearly controversial if even factual. The title is the only place a question mark appears, and the sentence before it shows this is a duplicate of what Rusi has suggested." CreationDate="2022-01-03T10:21:16.417" UserId="11459" />
  <row Id="18677" PostId="7186" Score="1" Text="Is this about a single programming course which uses 2 or more languages? Or a 2-semester sequence which switches languages after the 1st, or a program which starts in 1 language but uses different ones for database, compiler, AI... courses? Or...?" CreationDate="2022-01-03T15:50:12.140" UserId="8773" />
  <row Id="18680" PostId="7186" Score="0" Text="I am personally baffled by the existence of more than one hammer type/style/weight so hang in there!" CreationDate="2022-01-03T16:30:20.197" UserId="2698" />
  <row Id="18684" PostId="7186" Score="1" Text="Why isn't there just one of anything? Why isn't there just one stackexchange site? Why isn't there just one question?" CreationDate="2022-01-03T17:33:32.580" UserId="3688" />
  <row Id="18686" PostId="7186" Score="2" Text="@CaiusJard 42 ." CreationDate="2022-01-03T18:22:33.407" UserId="660" />
  <row Id="18689" PostId="7186" Score="1" Text="Closing as a duplicate of answer with ID 42..." CreationDate="2022-01-03T18:55:01.753" UserId="3688" />
  <row Id="18692" PostId="7186" Score="2" Text="@ErikEidt I think the reasons for diverse natural languages and diverse programming languages are very different...." CreationDate="2022-01-03T20:10:16.477" UserId="11203" />
  <row Id="18694" PostId="7186" Score="1" Text="Where is your research, or even your own opinion?" CreationDate="2022-01-03T21:26:19.150" UserId="9185" />
  <row Id="18707" PostId="7186" Score="4" Text="How on Earth did this get upvotes? The only person who could possibly ask it has obviously never done those things, much less taught them to someone else!" CreationDate="2022-01-04T01:51:23.907" UserId="1790" />
  <row Id="18711" PostId="7186" Score="2" Text="@ovi  for that. Dijkstra used to fulminate against &quot;anthropomorphisms&quot; one of which was &quot;language&quot;. As he pointed out a PL is really a mathematical notation; analogising it to a natural language is a source of endless confusion" CreationDate="2022-01-04T03:56:52.237" UserId="8837" />
  <row Id="18722" PostId="7186" Score="0" Text="@NickMatteo the Alt text is even more funny now given that we're now up to USB-C.. and there are so many different standards that now go through that identically shaped connector. It's almost become even worse." CreationDate="2022-01-04T11:29:33.173" UserId="11189" />
  <row Id="18735" PostId="7186" Score="4" Text="@StigHemmer Yes, there's a decent &quot;why don't all ComSci programs agree on a single language for teaching purposes and consistancy&quot; Q which could be asked. But this poorly-written Q is clearly about why multiple languages were developed. And so are the answers (IMHO it's typical HotQuestions nonsense where no-one looks at the Room name). I suspect the OP didn't even mean to post on Educators." CreationDate="2022-01-04T17:16:49.647" UserId="8773" />
  <row Id="18740" PostId="7186" Score="3" Text="I'm kinda amused by the OP's choice of username; I can't help but think the eponymous operation was not executed" CreationDate="2022-01-04T18:15:12.047" UserId="3688" />
  <row Id="18741" PostId="7186" Score="1" Text="If there were only only one language it would be Common Lisp. Do you know it?" CreationDate="2022-01-04T18:57:50.070" UserId="1888" />
  <row Id="18749" PostId="7186" Score="2" Text="As the answers show, this question is actually a good spring-board for discussion.  Obviously, there is a need for many languages, but many of the answers show why, or good analogies such as a tool-box." CreationDate="2022-01-04T20:52:29.193" UserId="5930" />
  <row Id="18758" PostId="7186" Score="0" Text="If there were only only one language it would be R6R. Do you know it?" CreationDate="2022-01-05T03:27:54.260" UserId="1582" />
  <row Id="18775" PostId="7186" Score="0" Text="academia: why are there different citation formats?" CreationDate="2022-01-05T14:35:23.517" UserId="10440" />
  <row Id="18788" PostId="7186" Score="0" Text="@JosephDoggie But you know Q's which are &quot;a good springboard for discussion&quot; aren't allowed, right? SE is for questions with answers; that's why the replies are called Answers. You also understand this is the ComSci Educators area, and the Q isn't about education?" CreationDate="2022-01-05T19:57:55.487" UserId="8773" />
  <row Id="18790" PostId="7186" Score="1" Text="One could trivially rephrase it to make it about education (which may be implied in the question):  Why isn't there one language to used to teach computer science (etc) instead of different programming languages?" CreationDate="2022-01-05T20:10:51.460" UserId="5930" />
  <row Id="18797" PostId="7186" Score="1" Text="Imagine there was one language and someone had an idea to make it better. Then what?" CreationDate="2022-01-05T21:04:22.947" UserId="1275" />
  <row Id="18895" PostId="7186" Score="1" Text="Go on, then… tell us about that one language." CreationDate="2022-01-08T23:46:55.137" UserId="9185" />
  <row Id="18915" PostId="7186" Score="0" Text="the goal is to keep thing simple and easy for learn language that is it" CreationDate="2022-01-10T20:41:41.447" UserId="11448" />
  <row Id="21469" PostId="7186" Score="0" Text="The proper counter-questions are probably &quot;Which one and why?&quot;" CreationDate="2023-10-11T22:02:26.583" UserId="1213" />
  <row Id="18652" PostId="7187" Score="4" Text="You advocate C as a good first-choice language, and then you talk about allocation bugs. Yep, that's C. But you equivocate C++ with C in that respect and that's wrong. C++ has &quot;RAII&quot; which means that you basically never have to worry about leaks and de-allocation. I teach my students to use `std::vector` for arrays, and they never have memory leaks or deallocation bugs. For students that you would teach in C, modern C++ (meaning 17 and later) is a better language." CreationDate="2022-01-02T20:31:20.563" UserId="6346" />
  <row Id="18653" PostId="7187" Score="4" Text="@VictorEijkhout, my comments about C++ are accurate for the time that this occurred. I'll make that a bit clearer. But the programmer there still needs to use the right libraries, so the problem hasn't gone away. So, in a way, you are making my point." CreationDate="2022-01-02T20:34:16.600" UserId="1293" />
  <row Id="18655" PostId="7187" Score="4" Text="&quot;you basically never have to worry about leaks and de-allocation&quot; modern C++ helps a bit in that you no longer have to do the deallocation manually, but you still have to think about when it will happen and whether the time it will happen is appropriate for your program." CreationDate="2022-01-02T21:49:54.627" UserId="1287" />
  <row Id="18656" PostId="7187" Score="0" Text="@VictorEijkhout - `std::vector` and an array aren't the same..." CreationDate="2022-01-02T22:27:09.693" UserId="11354" />
  <row Id="18659" PostId="7187" Score="0" Text="@Persistence I never said they were. I said that if you need something that behaves like an array, always use `std::vector`. Maybe `std::array`, but not `int x[5]`. Or `new int[5]`." CreationDate="2022-01-02T22:58:50.920" UserId="6346" />
  <row Id="18660" PostId="7187" Score="2" Text="@PeterGreen For sophisticated enough examples (stack overflow in destructing a very long linked list) you're right. But that's not something beginnning programmers have to worry about. First learn programming with safe mechanisms, worry about the fine points later." CreationDate="2022-01-02T23:01:26.197" UserId="6346" />
  <row Id="18662" PostId="7187" Score="0" Text="I think we should resist being encouraged to think a certain way." CreationDate="2022-01-02T23:40:25.830" UserId="5349" />
  <row Id="18669" PostId="7187" Score="3" Text="&quot;*that assure that deallocation is done correctly*&quot; Correctly, sure - but now you have a different problem, which is the time delay between a program finishing using memory and the memory being available for use again. On a PC with small quantities of data and ludicrously large RAM, this isn't a problem. But with big data or not much RAM, this fails ***hard***. I have personally seen this when working on a car multimedia box using C# and .NET Compact Framework. I believe team members spent much longer on getting GC to work with limited resources than had we just used C++." CreationDate="2022-01-03T01:42:41.200" UserId="1864" />
  <row Id="18679" PostId="7187" Score="0" Text="C would be a terrible choice of first/only language for someone who wants to create &quot;apps, websites, games, AIs, etc.&quot; Nobody uses C for these things. I've been a professional business software developer since 2005, and I've never used C at all." CreationDate="2022-01-03T16:28:26.860" UserId="11359" />
  <row Id="18681" PostId="7187" Score="1" Text="@TechInquisitor, yes if you want to do a particular thing, use an appropriate language. But if you want one and only one programming language for everything, then C will work, even if badly for some things." CreationDate="2022-01-03T16:47:49.890" UserId="1293" />
  <row Id="18682" PostId="7187" Score="0" Text="@Buffy The OP didn't say &quot;everything.&quot; You're answering a different question." CreationDate="2022-01-03T16:54:34.473" UserId="11359" />
  <row Id="18683" PostId="7187" Score="0" Text="@TechInquisitor, but the OP _did_ ask about _one programming language_." CreationDate="2022-01-03T17:24:08.083" UserId="1293" />
  <row Id="18685" PostId="7187" Score="0" Text="@Buffy ...for a list of purposes that notably does *not* include the kinds of things (e.g., operating systems, embedded devices) that would make C a compelling answer." CreationDate="2022-01-03T18:18:39.827" UserId="11359" />
  <row Id="18691" PostId="7187" Score="0" Text="C is terrible for web sites, but C# is peachy. Because... Someone implemented an environment that makes it work well." CreationDate="2022-01-03T20:05:50.510" UserId="5349" />
  <row Id="18695" PostId="7187" Score="0" Text="@VictorEijkhout - wait, now _C++17_ is &quot;modern&quot; (and all else, by implication,  passé)?  My how time flies!  (I'm so old I remember when _C++11_ was considered &quot;modern&quot; ... and we had to wait patiently for a compiler to support it ...)" CreationDate="2022-01-03T21:49:11.490" UserId="1301" />
  <row Id="18701" PostId="7187" Score="0" Text="@davidbak, to further emphasize my points, note that while the name remains the same, the language designed by Stroustrup isn't the same as today's C++. It has commonalities, but is a different language in many ways." CreationDate="2022-01-03T22:57:33.330" UserId="1293" />
  <row Id="18705" PostId="7187" Score="1" Text="_Just as you don't need to understand Sanskrit to understand English, you don't need to understand machine language to understand Scheme or Java._ Maybe change Sanskrit to Proto-Indo-European? Although I'm not certain that such a comparison is useful since all high level languages must be executed as CPU instructions, whereas the same is not true for natural languages; natural languages don't translate down to a (frequently common) lower level language." CreationDate="2022-01-04T00:33:06.503" UserId="1279" />
  <row Id="18873" PostId="7187" Score="0" Text="@VictorEijkhout - I'd argue that vectors and arrays behave very differently. Sure, you can use them interchangeably for a lot of things but they also have a few very important differences that are crucial to understand. As long as you explain those to your students, I suppose it's not a bad approach though" CreationDate="2022-01-07T12:07:18.590" UserId="11354" />
  <row Id="21422" PostId="7187" Score="0" Text="The first computer language you learn forms your brain and there is a lot to unlearn when going on to other languages.    For that reason alone C is not a good first language, but an excellent choice later if you need to go close to the hardware." CreationDate="2023-09-14T21:26:19.720" UserId="1213" />
  <row Id="18664" PostId="7188" Score="2" Text="Maybe we should decide what we want to achieve before we pick up the tools? Then choose the tool that makes it easier for us. Why are people being shaped by what they learn? I thought that the point of education was to learn to think for yourself." CreationDate="2022-01-03T00:06:12.740" UserId="5349" />
  <row Id="18666" PostId="7188" Score="5" Text="Or, put the other way, there are different ways that it is useful for programmers to think, and different languages are better for writing those thoughts in." CreationDate="2022-01-03T00:30:52.533" UserId="8562" />
  <row Id="18699" PostId="7188" Score="0" Text="@ScottRowe because it's extremely hard to figure out what language you *really* want - there are an awful lot of languages out there, and chances are, a better one is just not as popular - hence you won't find it, let alone use it. also, a) it's a lot easier to use a language you already know than it is to learn a new one (potentially risking much frustration, encountering shortcomings etc.) and b) sometimes a project needs to be worked on by several people, some of whom just don't have the time to learn a new language (esp. fluently enough to write good programs with it)" CreationDate="2022-01-03T22:16:25.843" UserId="2401" />
  <row Id="18706" PostId="7188" Score="0" Text="@somebody the problems you mention exist because there are so many languages. It's the same with spoken and written language: we would be better off with just 2 (French is so good for swearing, someone said)." CreationDate="2022-01-04T00:55:12.097" UserId="5349" />
  <row Id="18713" PostId="7188" Score="1" Text="@somebody you're spelling out the [blub paradox](http://www.paulgraham.com/avg.html) : viz the languages you'll likely consider are minor variations of your known-set. For the significant game changer (a) you would not know of it (as you point out) Or (b) you would know of it merely as a name Or (c) you will study it as a strange and convoluted way of replicating your familiar set, **never really getting why on earth anyone does that changeover.** As the saying goes: You can write FORTRAN programs in any language " CreationDate="2022-01-04T05:22:21.873" UserId="8837" />
  <row Id="18755" PostId="7188" Score="1" Text="*&quot;there are an awful lot of languages out there, and chances are, a better one is just not as popular&quot;* - on the other hand, the less popular a language is, the less *useful* it is, because unpopular languages don't have as good third-party libraries, support, or learning resources. So even if you insist on learning *the most useful* language rather than just a language which is good enough for your purposes, you don't have to consider literally every language ever designed; you don't even need to consider languages below a certain popularity unless there is a strong reason for a specific use." CreationDate="2022-01-05T00:51:31.817" UserId="8562" />
  <row Id="21439" PostId="7188" Score="0" Text="@kaya3 the devil is in the phrase “better language”. There might be technical or political reasons for a given language to be better than another.  I’ve been in a situation where Perl was the best option for business critical high performance code and in others where Java was the _only_ option for solving a problem across a complex network. Thankfully docker and kubernetes lessen the pain." CreationDate="2023-09-16T14:32:04.860" UserId="1213" />
  <row Id="21440" PostId="7188" Score="1" Text="And I agree that the languages you know influence the way you think.  If you know Prolog and Lisp and Haskell you have more tools in your box" CreationDate="2023-09-16T14:33:59.593" UserId="1213" />
  <row Id="18663" PostId="7189" Score="1" Text="As best I know, Excel is the most used application on Earth. (Not sure about any other planets.)" CreationDate="2022-01-03T00:01:32.927" UserId="5349" />
  <row Id="18671" PostId="7189" Score="6" Text="What's good about this answer is your exemplar set : {excel, C, mathematica}. With such a wide-based set the variegatedness  of PLs becomes obvious. What I tried to explain v briefly in [my comment](https://cseducators.stackexchange.com/questions/7186/why-there-isnt-one-language-to-use-instead-of-different-programming-language#comment18650_7186) is that that variety is not just a matter of fact; it's a matter if necessity. That this point obscures the other dimension -- needless variety -- is unfortunately left out (in all answers so far). IOW q is genuine" CreationDate="2022-01-03T03:29:20.527" UserId="8837" />
  <row Id="18676" PostId="7189" Score="4" Text="Different languages for different purposes are not unlike different solutions for various tasks we have in any other domain. E.g. to make drawings on paper we can use pens, pencils, crayons, a laser printer, or an offset press - vastly different methods with vastly different uses." CreationDate="2022-01-03T11:22:43.103" UserId="4884" />
  <row Id="18678" PostId="7189" Score="5" Text="For an example of an unfashionable but useful language in an analog vein to Excel, in a past life I wrote a couple systems in dBase/FoxPro. It was incredibly easy to set up an application to access and use a database for a small business." CreationDate="2022-01-03T16:13:03.900" UserId="6142" />
  <row Id="18704" PostId="7189" Score="3" Text="Note:  &quot;Want to create a program to rapidly edit and make visualizations of data in C?&quot;  This was done; the name of one of these programs is Excel.  Though they may have used C++." CreationDate="2022-01-04T00:15:57.510" UserId="11477" />
  <row Id="18732" PostId="7189" Score="4" Text="@Technophile While Excel itself is written in C or a close derivative, I think Ben I. was referring to the actual formulas end users write into the spreadsheet cells." CreationDate="2022-01-04T16:18:26.443" UserId="2477" />
  <row Id="18739" PostId="7189" Score="1" Text="@8bittree  I agree; just filling out the &quot;you could spend years on it&quot; part." CreationDate="2022-01-04T17:57:21.553" UserId="11477" />
  <row Id="18748" PostId="7189" Score="1" Text="@Technophile I don't follow." CreationDate="2022-01-04T20:34:16.230" UserId="2477" />
  <row Id="18665" PostId="7190" Score="2" Text="Anyone can create a Domain Specific Language to solve a particular problem, I have done that several times. I didn't expect anyone else to want to use it though." CreationDate="2022-01-03T00:10:26.710" UserId="5349" />
  <row Id="18668" PostId="7190" Score="1" Text="@ScottRowe I'm talking more about general purpose languages, but yeah there's bound to be zillions of languages used personally/within companies, or made [for fun](http://esolangs.org/wiki/Main_Page)." CreationDate="2022-01-03T01:35:46.120" UserId="9709" />
  <row Id="18670" PostId="7191" Score="1" Text="Well of course the Ada functionally failed, it was a government project after all... And yes, one of the big issues with Ada is that it tries to do everything. This is a recurring issue with a _lot_ of DoD projects actually." CreationDate="2022-01-03T02:19:11.837" UserId="2523" />
  <row Id="18673" PostId="7191" Score="7" Text="Of the DoD projects my favorite was [APRANET](https://en.wikipedia.org/wiki/ARPANET). As bad as it is, it was still a success of some degree." CreationDate="2022-01-03T04:45:51.577" UserId="104" />
  <row Id="18687" PostId="7191" Score="1" Text="Having some industry level experience with Ada, I have observed lots of Ada-“bashing” from people who where actually unaware of many (if any) of its numerous strengths, and how valuable they are once you get acquainted with. Some" CreationDate="2022-01-03T18:26:22.987" UserId="11470" />
  <row Id="18688" PostId="7191" Score="2" Text="Sometimes, I feel that one thing is forgotten : it is not just about tools and usage, but programming community is also subject to trends/hype/fashion, which is not always guided by pure problem&lt;-&gt;tool relationship." CreationDate="2022-01-03T18:30:39.763" UserId="11470" />
  <row Id="18690" PostId="7191" Score="4" Text="And there is that GPS thing, but who uses that?" CreationDate="2022-01-03T20:00:53.730" UserId="5349" />
  <row Id="18697" PostId="7191" Score="2" Text="Let's be fair to Ada and the government (military), huh?  The situation back then was that for every machine architecture they were buying equipment in - and there were a _lot_, even military &quot;standardized&quot; ones - they _each_ had their own language(s), and thus their own toolsets.  Don't be fooled by the fact that many of those languages were named &quot;JOVIAL&quot; - in many respects they were sufficiently different dialects that there were several (well, at least 2) companies whose entire business model was making one compiler toolchain after another for different JOVIALs for different projects ..." CreationDate="2022-01-03T21:54:32.577" UserId="1301" />
  <row Id="18698" PostId="7191" Score="0" Text="( .... and not just toolchains, but documentation, training, practices, etc. etc. etc. etc.  The military desire/need for Ada was to solve a real problem ...)" CreationDate="2022-01-03T21:55:43.423" UserId="1301" />
  <row Id="18702" PostId="7191" Score="0" Text="@LoneWanderer Thanks for the feedback. I tried to have my answer be relatively objective, balanced and fair. Although I don't know much about Ada, I agree it has various significant strengths. I hope you didn't consider my answer to be Ada-&quot;bashing&quot;. On rereading it, I realized I could improve its balance so I've edited it, e.g., I mention I'm unsure how much the Sydney programmers knew about Ada, the Quora thread mentions various strengths, and Ada failing was also due to subjective reasons. I hope this is better, but please let me know if there's anything you can suggest to improve it." CreationDate="2022-01-03T23:03:00.820" UserId="9731" />
  <row Id="18703" PostId="7191" Score="0" Text="@davidbak As I mention in my response above to LoneWanderer, I tried to be fair, but  made some changes just now to try to improve that. Although my knowledge of the US DoD's needs and Ada are very limited, from what I've read &amp; learned just recently when researching for my answer, it seems to me that what you wrote is very reasonable." CreationDate="2022-01-03T23:03:16.040" UserId="9731" />
  <row Id="18724" PostId="7191" Score="2" Text="I do not consider there are any bashing here ;) I feel that the DoD failed with its Ada project. But Ada in itself was far ahead of the competition. E.g : Discriminent records existed long before other languages considered “optional”s. (The quora thread is interesting, although opinions are a bit dated : compiler is the first tier for Ada code checking, linter exists in the form of compiler + libadalang, language has a 2012 standard and a 2015 coming, formal proofs tool exists (SPARK)…" CreationDate="2022-01-04T11:46:09.447" UserId="11470" />
  <row Id="18754" PostId="7191" Score="2" Text="@LoneWanderer - one thing I always considered unique and innovative: tasks were first class types that could be _members of packages_ with decent semantics defined for that ownership relationship.  Contrast with nearly all languages today for which tasks (i.e., threads) are merely the thinnest possible wrapper over an OS construct and you're own your own w.r.t. all thread operation semantic." CreationDate="2022-01-05T00:38:36.447" UserId="1301" />
  <row Id="18778" PostId="7191" Score="1" Text="One issue with Ada was that the compiler would not fit on a PC.  I reviewed an implementation that came with its own 4MB expansion card and the software only worked with that specific card (this was before &quot;DOS Extenders&quot;).  I recall complaints (from mainstream implementations) that compiling and linking was ridiculously slow.  Of course, C++ (that is, the Cfront implementation) would not fit on a PC either." CreationDate="2022-01-05T17:02:40.653" UserId="1116" />
  <row Id="18779" PostId="7191" Score="1" Text="Re _But Ada in itself was far ahead of the competition._  I got the impression that Ada missed the boat.  The Object Oriented _paradigm shift_ had started, and a design decision was that Ada was fundamentally unable to do run-time polymorphism.  The philosophy was that once some code was done and tested, nothing else in the program should be able to alter that behavior.  So, no pointers to functions: any such choice had to be a fixed `case` statement listing all the possibilities up front.  BTW, discriminated records are in Worth's Pascal." CreationDate="2022-01-05T17:06:48.933" UserId="1116" />
  <row Id="18787" PostId="7191" Score="1" Text="@JDługosz It doesn't seem to have mattered in the end, since most developers never grokked OOP, and later generations [hate it](https://thenewstack.io/why-are-so-many-developers-hating-on-object-oriented-programming/) because they [never saw it used properly](http://nomad.uk.net/articles/developers-who-hate-on-oop-don't-know-how-to-use-it.html). We watched the same thing unfold with checked exceptions." CreationDate="2022-01-05T19:45:35.457" UserId="11359" />
  <row Id="21430" PostId="7191" Score="1" Text="Wonder what the world would have looked like if Microsoft had made Ada.Net." CreationDate="2023-09-15T04:38:35.263" UserId="1213" />
  <row Id="18693" PostId="7192" Score="3" Text="3 tools, Ok. 300 though? Once you have the basic useful ways to solve a problem, why create more ways? I wonder why we are still creating more languages? Architecture pretty much stopped with the advent of steel framing and reinforced concrete, 100 years ago. What do they know about solving problems that we don't?" CreationDate="2022-01-03T20:11:48.540" UserId="5349" />
  <row Id="18696" PostId="7192" Score="7" Text="@ScottRowe I think you answered your own question.  Computer hardware is continuing to evolve, so there are now problems to be solved that did not even exist when older languages were designed.  For example, in the 1960s most input/output was on punched cards.  Nobody had screens or keyboards.  &quot;User interface&quot; was not even a thing that languages tried to address.  When the fancy new-fangled &quot;command line interface&quot; was introduced, languages came along to make use of it, then later GUIs,  etc." CreationDate="2022-01-03T21:52:24.253" UserId="11469" />
  <row Id="18700" PostId="7192" Score="2" Text="@ScottRowe it's like saying &quot;once you have three fields of mathematics, why create more fields?&quot;. it's like saying &quot;once you have civil engineering, mechanical engineering, and architecture, why do other engineering disciplines exist?&quot;. the short answer is, there are more goals here than just &quot;if it's strong enough it's good enough&quot;. especially considering (using an architecture analogy because why not) the building will need to periodically change to incorporate new features, so the (complicated) plans will have to be easy to understand" CreationDate="2022-01-03T22:26:38.617" UserId="2401" />
  <row Id="18708" PostId="7192" Score="4" Text="@somebody At a more fundamental level: when I was a student the two metrics that an algorithm would/should optimize were space and time. Come phones and a third more crucial appears : battery-life!!" CreationDate="2022-01-04T03:13:32.783" UserId="8837" />
  <row Id="18709" PostId="7192" Score="10" Text="A funny version just saw of world changing : I asked my daughter to hand me the phone book.  She laughed at me, called me a dinosaur and handed me her iphone. So the spider is dead, the iPhone is broken and daughter furious" CreationDate="2022-01-04T03:34:33.617" UserId="8837" />
  <row Id="18723" PostId="7192" Score="0" Text="@Rusi for a moment I thought that you meant you had damaged a web crawler. What did people often use the Sears catalog for 100 years ago? Don't try that with your phone! xkcd.com/2212/" CreationDate="2022-01-04T11:34:02.047" UserId="5349" />
  <row Id="18733" PostId="7192" Score="2" Text="@ScottRowe So it took some 10000 years to (dubiously) completely solve architecture? Great, only about 9900 years to go for computer architecture!" CreationDate="2022-01-04T16:41:08.910" UserId="2477" />
  <row Id="18765" PostId="7192" Score="4" Text="@ScottRowe Have you ever seen how many different types of screw there are? Or even just how many different [types of screw _head_](https://en.wikipedia.org/wiki/List_of_screw_drives)? Phillips introduced crosspoint drive; Pozidriv brought further improvements; then there's JIS B 1012, Supadrive, Phillips II, Frearson, French recess, Motorq… and that's before we get onto the square ones, hex, pentalobes, hexalobes, combinations, external drives, and _then_ all the security screws designed specifically to be incompatible with everything else… Carpentry may be a better example than it seemed :-)" CreationDate="2022-01-05T12:42:43.017" UserId="9454" />
  <row Id="21423" PostId="7192" Score="1" Text="@ScottRowe Your assumption that we have found the optimal way of expressing how to instruct a computer to do things, is probably not holding up.  We are still trying to figure out how to write short, elegant stuff that actually work _and_ scale." CreationDate="2023-09-14T21:29:29.700" UserId="1213" />
  <row Id="21424" PostId="7192" Score="0" Text="@ThorbjørnRavnAndersen I agree that it is a complex field, but I have seen and created a lot of 'simple' ways to solve particular problems. Usually they are too limited or are not widely used. Complex methods are great once you are an expert, but hard to learn and still have vexing hidden pitfalls. I suppose I should have taken aim at the overly elaborate and optimistic requirements and expectations instead? Make the problem simpler first. In a previous job, we used to tell the Sales people to learn to say No. Let someone else say Yes and wade in to the tar pit :-)" CreationDate="2023-09-15T00:25:17.670" UserId="5349" />
  <row Id="21429" PostId="7192" Score="1" Text="@ScottRowe in my experience, if something allows a simple solution it is because somebody did a lot of work allowing it to be simple.  Excel is a good example of an environment allowing you to create quick and simple solutions for a data based problem.  The amount of work gone into excel is staggering." CreationDate="2023-09-15T04:35:49.910" UserId="1213" />
  <row Id="21433" PostId="7192" Score="0" Text="@ThorbjørnRavnAndersen Excel was said to be the most used application in the world. I do agree that it is amazing and so is the level of effort for, what, almost 40 years? This tablet browser gives me fits though! :-)" CreationDate="2023-09-15T16:56:58.107" UserId="5349" />
  <row Id="21436" PostId="7192" Score="1" Text="@ScottRowe  Yes.  Why would you need anything else?" CreationDate="2023-09-15T21:18:22.227" UserId="1213" />
  <row Id="19011" PostId="7193" Score="0" Text="Funny that competition hasn't brought the cost of a supercomputer down." CreationDate="2022-01-15T18:32:54.977" UserId="5349" />
  <row Id="19013" PostId="7193" Score="0" Text="Well, they got lots and lots faster, so you can choose: same power less price, or same price more power. And there is probably something about the 1-10M$ price point that makes it a plausible number for universities / labs / funding agencies." CreationDate="2022-01-15T18:51:17.830" UserId="6346" />
  <row Id="19014" PostId="7193" Score="0" Text="If we can do the same real work using a laptop today which required a huge expensive machine decades ago, I wonder why we are still furiously improving computers and also what more is being done with them? If I could drive to work at 1% of C, any improvement beyond that would probably not be noticable. Wait, I don't have to drive to work anymore, I get it... But only because I work in IT, a field that basically didn't exist when I was born. What value add am I really giving to the human experience?" CreationDate="2022-01-15T18:58:49.497" UserId="5349" />
  <row Id="19015" PostId="7193" Score="0" Text="@ScottRowe &quot;same real work&quot; is of course not the case. The old machines had a lot more bandwidth relative to their compute power. With current processors it's extremely hard to get close to peak performance. And of course OSses are getting ever more bloated, which means that the user experience is not getting much faster. But of course there has been progress. In the 1990s my Mac could barely play digital audio. Then it could record it, then it could generate it with real-time effects processing.  There has been progress....." CreationDate="2022-01-15T19:27:46.347" UserId="6346" />
  <row Id="19017" PostId="7193" Score="0" Text="Ok. So supercomputers are now so fast that we can't keep them busy, except with new forms of entertainment.  I just remember when I was a child and no one I knew had seen a computer, wondering what they were good for. Work expands to fill the available time-sharing, I guess. Perhaps I should inquire into what people do with supercomputers these days. Read recently about an architecture for handling stock trading, it was a good design. But are we that much better off trading stocks in milliseconds than, say a minute? Would child me think this was a social good?" CreationDate="2022-01-15T21:31:39.143" UserId="5349" />
  <row Id="19018" PostId="7193" Score="0" Text="@ScottRowe Oh, we can keep them busy. It's just that now we have thousands of processors running at 10 percent efficiency rather than 4 at 90. And what are they used for? Every time you get a bigger machine you can predict the weather more accurately. Don't ask me why, but colliding black holes take a boat load of processors. Computational chemistry, et cetera." CreationDate="2022-01-15T21:55:44.603" UserId="6346" />
  <row Id="18720" PostId="7194" Score="1" Text="My mother used to say that the best form of government is a benevolent dictatorship. Kind of like saying one time pad is the best 'encryption' method, this is indisputable, but not too practical also. But, some dictation in the form of standards and accepted methods would be beneficial just about now." CreationDate="2022-01-04T11:25:16.230" UserId="5349" />
  <row Id="18772" PostId="7194" Score="0" Text="“Today the only computer language they support is javascript.” –And WebAssembly. Which is of course almost never written directly by humans. And even JavaScript is often not written in JavaScript, but in another language that compiles to JavaScript. What _is_ possible though is to write both front- and backend code in e.g. Rust, Go or Haskell and compile the backend to server-native machine code and the front end to WebAssembly." CreationDate="2022-01-05T14:17:54.700" UserId="1157" />
  <row Id="18721" PostId="7196" Score="1" Text="This is a well thought out answer!" CreationDate="2022-01-04T11:27:56.487" UserId="5349" />
  <row Id="18777" PostId="7196" Score="1" Text="Your history of Microsoft's Java work is somewhat distorted. Java hit the development world by storm in the mid-1990s and Microsoft joined in. By the time Sun sued Microsoft, the Microsoft JVM was significantly faster than Sun's (and may have been the fastest), it was the most used JVM in the world, and by some accounts, the most compliant to the spec (but, because Sun controlled the the testing process, they never showed MSFT's compliance numbers).  Microsoft extended Java in order to make it interop with Microsoft's existing technologies and they didn't implement JNI - that was the complaint" CreationDate="2022-01-05T15:37:34.537" UserId="9979" />
  <row Id="18816" PostId="7196" Score="0" Text="I learnt Java at Uni and was pro Java for a long time because the MSFT JVM was incredibly good. We all sense that Sun were worried about how MSFT were going to commercialise or profit from Java, especially with Visual Studio's growing popularity as an IDE. But the reason cited in the litigation was simply that MSFT compiled java and their JVM was not 100% compatible with Suns, so I wanted first to highlight how a legal confrontation between heavy weights was a contributing factor to how a really good candidate for a ubiquitous general-purpose language became superseded by another." CreationDate="2022-01-06T03:53:41.253" UserId="11481" />
  <row Id="18817" PostId="7196" Score="0" Text="@Flydog57 It is telling that the direct reason JVM, Java and variants were removed from Visual Studio was specifically part of the settlement with Sun, not as a derivative of the litigation, they were specifically told to remove it. I think the final nail in the coffin with the MS JVM was an anti-trust suit against it being distributed with IE but I can't find any   good references to back this up. (I have toned down my criticisms in the post, was not intentional)" CreationDate="2022-01-06T04:12:39.817" UserId="11481" />
  <row Id="18819" PostId="7196" Score="2" Text="@chris: it was in all the papers: https://www.cnet.com/news/sun-microsoft-settle-java-suit/. Sun's argument was that Microsoft's JVM wasn't compatible with the standard. Sun's advantage was they were the adjudicators of compatibility. Published independent reports showed that the MSFT JVM was as compatible as Sun's (IIRC) - except for the absence of JNI. Microsoft swapped in a COM &amp; native Windows interop mechanism (using the standard `@` notation) to replace JNI. Sun somehow argued that no-JNI broke &quot;write once, run anywhere&quot;. Note, by the time of the settlement, I was fulltime at Microsoft." CreationDate="2022-01-06T04:45:24.193" UserId="9979" />
  <row Id="18820" PostId="7196" Score="0" Text="Thanks @Flydog57 that's a good link and summary and pretty much what I was trying to paraphrase from a conceptual viewpoint, I just tried to dumb it down a bit, the details are not important to this discussion, just the fact that legalities around commercial interests are a very real aspect of the evolution of programing languages, even when the theory or conceptual ideas are sound, the practical implementation of a languages in a commercial environment mean we will probably never have one single ubiquitous language." CreationDate="2022-01-06T07:13:46.547" UserId="11481" />
  <row Id="18888" PostId="7198" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132992/discussion-on-answer-by-hobbs-why-isnt-there-one-language-to-use-instead-of-dif)." CreationDate="2022-01-07T22:58:34.650" UserId="27" />
  <row Id="18751" PostId="7199" Score="0" Text="The mistake is in premise 2. A language being Turing-complete has nothing to do with its capacity to program an operating system. In fact, C, used to program most operating systems, [is not even technically Turing-complete](https://cs.stackexchange.com/q/60965/)." CreationDate="2022-01-04T21:08:27.187" UserId="11490" />
  <row Id="18729" PostId="7201" Score="1" Text=" Ppl familiar with the ideas of Paul Graham's [On lisp](https://en.m.wikipedia.org/wiki/On_Lisp) will recognize how true is your observation.  One can (and as you say must for large enough systems) build the domain specific language in C, Python, C++ or what ever. Only lisp makes it pleasant and trivial" CreationDate="2022-01-04T14:55:14.330" UserId="8837" />
  <row Id="18760" PostId="7201" Score="0" Text="@Rusi In fact, I've been using Common LISP as my main language from around 1987 till 2003 (switched mainly to Java afterwards), and it has deeply influenced my way of developing software." CreationDate="2022-01-05T10:04:06.500" UserId="3966" />
  <row Id="18764" PostId="7201" Score="0" Text="Interesting about domains and language. We humans seem to get stuck on defining nouns and verbs, but what is more important is *what you are talking about*. Data is important, code and language not." CreationDate="2022-01-05T11:41:37.833" UserId="5349" />
  <row Id="18774" PostId="7201" Score="1" Text="Heh! One lisper smells out another . I can hardly remember as much pleasure as Scheme gave me in the 80s. Ok a tie with Basic. And C close behind. It's strange how clueless the paradigm-pundits are about the sheer joy that a beautiful language can give. Oh, and the largest C I've written is a lisp implementation ... For which I would pore over the Steele common lisp bible. No and I did not come close to implementing CL " CreationDate="2022-01-05T14:30:27.607" UserId="8837" />
  <row Id="21426" PostId="7201" Score="0" Text="Object Oriented Programming Systems (Oops!) make this idea of a custom hammer for every nail more explicit. Many people say it is an unhelpful approach, but many say it is indispensable. I guess it depends on how good you are at using (and selectively not using) the technique." CreationDate="2023-09-15T00:32:17.477" UserId="5349" />
  <row Id="18821" PostId="7202" Score="0" Text="A way to improve your answer would be to note that LaTeX will generate a `TeX` document but also one could use plugins and have LaTeX have a side effect of generating assembly or something. In other words if a plugin can have a side effect of creating an error message or log apart from the TeX document then leverage that into outputting the operating system as a side effect." CreationDate="2022-01-06T08:21:57.013" UserId="2516" />
  <row Id="18731" PostId="7203" Score="2" Text="It seems you have replicated your answer rather than correcting/editing it. better to merge this into that I think??" CreationDate="2022-01-04T16:07:44.107" UserId="8837" />
  <row Id="18781" PostId="7203" Score="0" Text="If you're limiting the comparison to procedural imperative languages." CreationDate="2022-01-05T17:33:20.820" UserId="1116" />
  <row Id="21425" PostId="7203" Score="0" Text="Object Oriented Programming Systems (Oops!) make this idea of a custom hammer for every nail more explicit. Many people say it is an unhelpful approach, but many say it is indispensable. I guess it depends on how good you are at using (and selectively not using) the technique." CreationDate="2023-09-15T00:31:03.950" UserId="5349" />
  <row Id="18886" PostId="7205" Score="1" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132990/discussion-on-question-by-cocomac-how-to-respond-to-the-two-handed-approach-to-s)." CreationDate="2022-01-07T22:58:20.953" UserId="27" />
  <row Id="18747" PostId="7206" Score="3" Text="Let me add that to justify using the simple (sequential, explicit temp) model, ask the students to think about all the ways the two handed model could go wrong. Especially how the simple model doesn't have those defects." CreationDate="2022-01-04T20:29:01.607" UserId="1293" />
  <row Id="18848" PostId="7206" Score="1" Text="It would also be fine to add the caveat that &quot;right now in our example, the computer only has one hand.&quot; This would be less technically incorrect without distracting the student too much, I think." CreationDate="2022-01-06T20:42:47.957" UserId="2547" />
  <row Id="18849" PostId="7206" Score="0" Text="@2rs2ts Sure! But realize that you do that basically for your own benefit. It won't help the student, and *might*, by admitting that more complex layers exist, hinder them in their current struggle. But I don't want to sound too negative; I play those sorts of word games every day, and could scarcely stop it if I tried.  After all, it bothers *me* to say it wrong.  I just have to be cautious about how much additional complexity I allow into a model that the student *already isn't getting* (ie they're already at the edge of their cognitive limits). In those moments, when in doubt, leave it out." CreationDate="2022-01-06T22:32:39.097" UserId="27" />
  <row Id="18851" PostId="7206" Score="0" Text="One name for the &quot;small, clear mental model&quot; you mentioned is **Notional Machine**, as someone else commented. This idea is why I often say that we have to teach people *how computers actually work*. I say: computers can only do 5 things - fetch, store, arithmetic, compare and jump. With that in mind, students are more likely to understand programming than if we start with something other than a Notional Machine." CreationDate="2022-01-07T02:04:34.243" UserId="5349" />
  <row Id="18753" PostId="7208" Score="4" Text="I do like your crane idea, and in hindsight, I should have done that... however, how do you come up with these ideas for alternate ways to phrase problems to get students to think about it in a certain way or come to a specific answer?" CreationDate="2022-01-04T23:27:01.803" UserId="11487" />
  <row Id="18757" PostId="7208" Score="2" Text="I actually ran into a very similar problem, but it was about communcating processes. After a student uses the two-handed solution, I now tell them, &quot;you have only one communication channel, so put your left hand in your pocket, and use your right hand&quot;. So I had to learn the hard way, like you." CreationDate="2022-01-05T01:41:46.167" UserId="6346" />
  <row Id="18762" PostId="7208" Score="1" Text="@cocomac -- apart from the obvious canned answer of &quot;practice will do it&quot; that, although true, doesn't help you up front :-), mostly just by going the opposite direction. To think about it first, like &quot;I don't want them to use both hands, so I need to come up with some setup that makes it one hand only, so I need an interface between two-handed people and one-handed manipulator, let me see&quot;." CreationDate="2022-01-05T11:23:39.220" UserId="6216" />
  <row Id="18784" PostId="7208" Score="0" Text="This is a good answer, but it has an issue. Some cranes have the ability to &quot;double pick&quot;, and so does a hand. This means the student could pick up both pencils with the same hand at the same time, then either swap them with some movement of their fingers (FIFO) or place the 2nd pencil before placing the 1st pencil they picked up (FILO). As this answer says, this could be solved by specifying the language or methods allowed for movement of the pencils." CreationDate="2022-01-05T18:31:09.450" UserId="11508" />
  <row Id="18789" PostId="7208" Score="5" Text="@computercarguy And I'm sure there are people who can juggle with one hand, so they could still do the swap without a temporary variable. Analogies are always imprecise." CreationDate="2022-01-05T20:05:17.117" UserId="6346" />
  <row Id="18791" PostId="7208" Score="1" Text="@VictorEijkhout, juggling usually means you can handle more than one object with one hand. I've juggled for over 35 years and can do 3 balls in one hand, for example. So yes, the analogy is imprecise, but that doesn't mean it can't still work. I said there was an issue, not a problem. I should have been more precise that it wasn't a critical reason not to use the analogy. This issue with the analogy can easily be avoided by specifying the language, as you say, by not allowing double-picking. We just need to know how to specify the language to avoid these issues, that's all." CreationDate="2022-01-05T20:23:18.423" UserId="11508" />
  <row Id="18854" PostId="7208" Score="1" Text="Notional Machine is the operative concept here. If you don't define it for your students, how can they hope to understand anything?" CreationDate="2022-01-07T02:26:08.563" UserId="5349" />
  <row Id="18767" PostId="7210" Score="2" Text="Except you perfectly well can translate the solution with two hands into code.  Not picking up both simultaneously, sure - at least on most systems - but one at a time works fine." CreationDate="2022-01-05T13:36:37.247" UserId="1864" />
  <row Id="18795" PostId="7210" Score="0" Text="except you *cannot* just let it slide without explanation - it's *extremely* important to make sure the student is understanding it how you think they are. so you'd at the very least have to explain (and get the student to agree) that they are describing a 4 step process `left = a; right = b; a = right; b = left` rather than a 1 step process `a, b = b, a`. the problem with this is that it runs the same risk of the student asking why the process must be split into those steps." CreationDate="2022-01-05T20:49:23.400" UserId="2401" />
  <row Id="18803" PostId="7210" Score="1" Text="@Graham By &quot;the solution with two hands&quot; I refer to the one in the OP where a student picks up both items with both hands at the same time. If you interpret hands as variables rather than as the computer's action of moving (or really, copying) a value from one variable to another, then there are other two-handed solutions, but &quot;the&quot; two-handed solution still doesn't work. As for &quot;on some systems&quot;, we are talking about whatever language the students are learning, not the capabilities of all programming languages." CreationDate="2022-01-05T22:51:01.507" UserId="8562" />
  <row Id="18855" PostId="7210" Score="0" Text="Maybe someday we will build computers that can do many things at once. Quantum, massively parallel, whatever. Then we will not be able to teach anyone how to program them, but we won't have to." CreationDate="2022-01-07T02:29:51.750" UserId="5349" />
  <row Id="18864" PostId="7210" Score="0" Text="@ScottRowe I don't know what future you're imagining where nobody is a computer programmer, but I want no part of it - I like programming!" CreationDate="2022-01-07T06:03:50.490" UserId="8562" />
  <row Id="18871" PostId="7210" Score="0" Text="@kaya3 I liked using a darkroom, but Kodak didn't think it was worth producing film, paper and chemicals just for me. So schools don't teach it anymore. Can you sail a boat or ride a horse or repair a Zenith Trans-Oceanic without a schematic? I could, but opportunities are few now. Starting a car with a pencil not likely possible now." CreationDate="2022-01-07T11:34:13.840" UserId="5349" />
  <row Id="18872" PostId="7210" Score="0" Text="I liked your answer by the way, I just wanted to say why the one-hand explanation is necessary. But clearly it won't be for long. Lord help us then!" CreationDate="2022-01-07T11:36:41.970" UserId="5349" />
  <row Id="18887" PostId="7211" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/132991/discussion-on-answer-by-graham-how-to-respond-to-the-two-handed-approach-to-swap)." CreationDate="2022-01-07T22:58:24.017" UserId="27" />
  <row Id="18898" PostId="7211" Score="0" Text="I've added an answer that shows your LeftHand, RightHand version as actually better — for one extant architecture — than the OP's : https://cseducators.stackexchange.com/a/7223/8837" CreationDate="2022-01-09T05:55:20.763" UserId="8837" />
  <row Id="19001" PostId="7211" Score="1" Text="The gcc compiler happily turns the &quot;standard one temp variable&quot;  in C into a 2 registers &quot;both hands&quot; versions. Probably because it is more efficient (read-write, cache...)" CreationDate="2022-01-13T21:27:56.680" UserId="2103" />
  <row Id="19058" PostId="7211" Score="0" Text="@Michelbillaud That's really worth an answer! Hard data that the less efficient notionally is the more efficient actually. Just (1) input program (2) output cut down to relevant parts (3) gcc flags if any (4) gcc version just in case" CreationDate="2022-01-18T04:09:43.603" UserId="8837" />
  <row Id="19075" PostId="7211" Score="0" Text="Well compiling this with gcc -03 -S&#xA;&#xA;`void swap(int *a, int *b) { int c = *a; *a = *b; *b = c;  }`&#xA;&#xA;produces this assembler code `movl (%rdi), %eax ; movl (%rsi), %edx ; movl %edx, (%rdi) ; movl %eax, (%rsi) ; ret`" CreationDate="2022-01-21T09:30:31.370" UserId="2103" />
  <row Id="18833" PostId="7212" Score="0" Text="Why does &quot;single processor&quot; keep getting brought up?  How would you sequence operations by 2 cores to get a swap done correctly?  The relevant thing here is a *scalar* CPU, as opposed to modern superscalar CPU cores that literally can execute two independent load instructions in the same clock cycle.  (e.g. AMD since K8, Intel since Sandybridge: https://www.realworldtech.com/sandy-bridge/7/).  Intel since Ice Lake can even execute two store-data uops in the same clock cycle, although commit from store-buffer to L1d cache can only commit two stores in 1 cycle if they're to the same line." CreationDate="2022-01-06T16:19:27.320" UserId="1654" />
  <row Id="18834" PostId="7212" Score="0" Text="As you say, a normal swap is 2 loads then 2 stores (assuming an optimizing compiler for an AoT compiled language for a register machine), whether we name one or both temporaries.  (Or in Python, neither).  For (much) more advanced students of CPU architecture, this might be a good illustration of hazards like write-after-read when finding parallelism between operations: you have to finish picking up an object (loading into regs) before a store of the other object writes that location." CreationDate="2022-01-06T16:27:05.180" UserId="1654" />
  <row Id="18844" PostId="7212" Score="0" Text="@PeterCordes *&quot;Why does &quot;single processor&quot; keep getting brought up?&quot;* Not because using multiple processors or multiple threads would enable a different solution, but because if you are explaining to a student why they have to solve the problem with one hand then the analogy is justified by the fact that their program can &quot;only do one thing at a time&quot;." CreationDate="2022-01-06T17:10:17.373" UserId="8562" />
  <row Id="18847" PostId="7212" Score="0" Text="@kaya3: Thanks, you're right, I was thinking in terms of finding instruction-level parallelism within instructions for a sequential model of execution, not the need for there to be a sequence in the first place.  I think I'd find it less weird to say the code or program is single-threaded, rather than to say there's only one processor to execute it on.  As you rightly pointed out, the issue here is the execution model of the programming language, not the CPU details." CreationDate="2022-01-06T18:17:38.983" UserId="1654" />
  <row Id="18853" PostId="7212" Score="0" Text="@PeterCordes Because if you ask a centipede how it knows which leg to move next, it gets in a hopeless tangle. (That's just a metaphor, of course.)" CreationDate="2022-01-07T02:19:53.797" UserId="5349" />
  <row Id="18794" PostId="7214" Score="0" Text="well... to be fair you *do* need to &quot;pre-make&quot; variables in most languages..." CreationDate="2022-01-05T20:43:38.693" UserId="2401" />
  <row Id="18805" PostId="7214" Score="0" Text="@somebody My understanding is the Scratch language has no declarations -- variables are created manually through the GUI. I assume a Scratch user learning a text-based language would be surprised at something like *int x=4*. But I've only seen Scratch a few times, is there a better example?" CreationDate="2022-01-05T23:27:51.240" UserId="8773" />
  <row Id="18807" PostId="7214" Score="0" Text="well. while that's true i'd argue that scratch variables are all global, and global variable declarations in other languages are little different from that of scratch - you still &quot;create variables manually&quot;. to look at it another way, in scratch, not just variables but *everything* is created &quot;through the GUI&quot;, no? (equivalently, scratch has *no (official) textual syntax* at all). but either way the point is, imo &quot;pre-making variables&quot; (and scratch in general) is little different from the so-called &quot;computer rules&quot;" CreationDate="2022-01-05T23:47:32.063" UserId="2401" />
  <row Id="18808" PostId="7214" Score="0" Text="tl;dr imo how variables are created in scratch are mostly a side effect of being a graphical (?) language rather than it being fundamentally different from other lanugages" CreationDate="2022-01-05T23:48:28.723" UserId="2401" />
  <row Id="18806" PostId="7216" Score="0" Text="Gosh, you stumped me: I can't think of a witty comment for this long Answer!" CreationDate="2022-01-05T23:31:36.677" UserId="5349" />
  <row Id="18804" PostId="7217" Score="2" Text="To a kid with JavaScript, everything is a web page." CreationDate="2022-01-05T23:20:47.740" UserId="5349" />
  <row Id="18815" PostId="7218" Score="0" Text="&quot;a * b + c * d&quot; : lovely! This insight is at the heart of functional programming : elide useless names. The more technical name for that is *combinatory logic*. (The proper name &quot;Haskell&quot; is the name of its second founder)" CreationDate="2022-01-06T03:45:22.300" UserId="8837" />
  <row Id="18852" PostId="7218" Score="0" Text="@Rusi Are there any Functional Machines? Computers that execute your high level idea of the calculation and not some lower level translation? I would like to see such a machine. I would also like to get to work using a map instead of a car, but you can't have everything. (Where would you put it?) Brains really do seem to implement a Neural Network, but computers not so much. Some day perhaps." CreationDate="2022-01-07T02:11:53.787" UserId="5349" />
  <row Id="18857" PostId="7218" Score="1" Text="@Scott: [Lisp machine](https://en.m.wikipedia.org/wiki/Lisp_machine), [Scheme88](https://dspace.mit.edu/handle/1721.1/6042). In fact [Data flow architectures](https://en.m.wikipedia.org/wiki/Dataflow_architecture) were actually made for improving efficiency of von Neumann languages eg [SISAL](https://en.m.wikipedia.org/wiki/SISAL). In fact among theoretical models, lambda calculus is more realiable than Turing machines because the latter has an infinite sub part -- the tape. How the F does an engineer make an infinite object?! Nothing infinite about the lambda calculus. Evolution...... is slow" CreationDate="2022-01-07T02:51:57.657" UserId="8837" />
  <row Id="18859" PostId="7218" Score="0" Text="@ScottRowe All that FP does is generalize &quot;a * b + c * d&quot; from numbers to arbitrary memory data structures. Heck even python Java C# etc -- the whole current mainstream gang -- will allow you to handle complex data structures, *manage* ing the memory with gc etc. Only difference is the modern crop [mess up memory semantics](https://cseducators.stackexchange.com/a/6567/8837). FPLs don't. Java, C#, JS are identical modulo syntax and minor details." CreationDate="2022-01-07T03:23:15.937" UserId="8837" />
  <row Id="18862" PostId="7218" Score="0" Text="Of course **IF** you're prepared to go outside the mainstream there are heroic exceptions. Eg Rust which strives for C-level efficiency, memory-footprint. Plus almost haskellish purity. And is even highly portable (Compare to C's autoconf!!!). **IF**... Are you?? (In 1987 [I pioneered](https://dl.acm.org/doi/10.1145/126459.126471) and initiated C in edu. It was as new and uncharted then as it's passe now. Today I would use rust for that space (if I were younger... If...))&quot;" CreationDate="2022-01-07T03:42:27.650" UserId="8837" />
  <row Id="18870" PostId="7218" Score="0" Text="@Rusi I learned C in college in 1986, I think. My point was that since real machines can be explained as being something like a simple RISC / registers CPU, maybe education should start by making that model clear? It's nice to have a common reference for understanding new things. After people know the &quot;5 operations&quot; model, we can add to it." CreationDate="2022-01-07T11:28:55.313" UserId="5349" />
  <row Id="18876" PostId="7218" Score="0" Text="@ScottRowe &quot;Can be explained&quot; = &quot;Best explained&quot;??" CreationDate="2022-01-07T13:05:13.093" UserId="8837" />
  <row Id="18882" PostId="7218" Score="0" Text="@Rusi The Question that got me started learning about computers when I was 7, was when I wondered &quot;*How could such a thing possibly work?*&quot; If you don't answer that, you have said nothing. Virtus Dormitiva and all." CreationDate="2022-01-07T17:09:37.703" UserId="5349" />
  <row Id="18883" PostId="7219" Score="2" Text="Neat! Hand not the mover (verb) but the place (noun) " CreationDate="2022-01-07T17:43:38.717" UserId="8837" />
  <row Id="18889" PostId="7221" Score="3" Text="Could you edit the question to include a bit more about their background and your course goals?  You've given a few hints, but an expansion would be very helpful.  Do you have a direction that you are already leaning?" CreationDate="2022-01-08T04:17:44.000" UserId="27" />
  <row Id="18890" PostId="7221" Score="1" Text="`make some living as well`. Getting into game development is hard. Getting into [A listed game](https://en.wikipedia.org/wiki/List_of_video_games_considered_the_best) development is even harder, probably more about who you know than what you know." CreationDate="2022-01-08T10:09:35.413" UserId="2516" />
  <row Id="18891" PostId="7221" Score="1" Text="`would be an ideal course outline` Search other schools for their course outline and check the work the teachers do related to what they teach. Some just teach a class some are a focal point in the community and their cv shows it." CreationDate="2022-01-08T10:15:14.743" UserId="2516" />
  <row Id="18892" PostId="7221" Score="0" Text="The [Unity Game Engine](https://unity.com/) was the go to software for teaching game design but IIRC they changed their pricing structure and it fell out of favor with college level teachers. You should verify that. However they have many resources related to what you seek, so much so that students may realize they can learn just as much for free on their own and not have to pay for a course." CreationDate="2022-01-08T10:23:32.680" UserId="2516" />
  <row Id="19307" PostId="7221" Score="0" Text="I'm still itching to provide help here, though you're probably in the middle of your semester.  What is the background of the students?" CreationDate="2022-02-12T01:37:03.173" UserId="27" />
  <row Id="19308" PostId="7221" Score="0" Text="What did you wind up doing?" CreationDate="2022-02-12T01:37:46.000" UserId="27" />
  <row Id="19333" PostId="7221" Score="0" Text="@BenI. Well I was initially thinking of Unity but I have a thinkpad x220 so I am now leaning towards Harward's CS50 GameDev https://cs50.harvard.edu/games/2018/ . I think their approach is more towards teaching actual engineering while keeping the creation tools / engines as minimal as possible. What do you think ?" CreationDate="2022-02-15T17:50:22.800" UserId="11521" />
  <row Id="19334" PostId="7221" Score="0" Text="@GuyCoder Well I think there is also an educator plan. Check it out: https://unity.com/products/unity-education-grant-license. What do you think ?" CreationDate="2022-02-15T18:02:34.383" UserId="11521" />
  <row Id="19469" PostId="7221" Score="0" Text="@BenI. I chose Harward's GD 50  https://cs50.harvard.edu/games/2018/" CreationDate="2022-03-20T15:53:43.623" UserId="11521" />
  <row Id="19470" PostId="7221" Score="0" Text="@BenI. But now I need to see what kind of assignments or projects I can give along with this course." CreationDate="2022-03-20T15:54:36.443" UserId="11521" />
  <row Id="18994" PostId="7223" Score="1" Text="Premature optimization is... Oh, you already heard that one. Could we venture to teach beginning students something without having to teach them everything? I had a great welding instructor, he could cover one topic or technique each class night. I still think of him as one of the best teachers I had, and still smile when I recall him whistling during class as he thought about going out with his wife afterwards." CreationDate="2022-01-13T01:40:39.433" UserId="5349" />
  <row Id="18997" PostId="7223" Score="1" Text=" @ScottRowe. In upholding the &quot;Premature...&quot; proverb you'll find me more extreme left (or is it right?) than anyone. The point of this post was.... O well... May the blessing of [Fermat](https://en.m.wikipedia.org/wiki/Fermat%27s_Last_Theorem) be on these comment columns..." CreationDate="2022-01-13T02:54:53.760" UserId="8837" />
  <row Id="18999" PostId="7225" Score="0" Text="Yes, objects are bundles of behavior. The public methods define that behavior. But if you implement objects with other objects at a lower level, then things composed of things is still a valid way to think. But each is defined by its behavior, not by its implementation structure." CreationDate="2022-01-13T20:35:13.320" UserId="1293" />
  <row Id="19000" PostId="7225" Score="0" Text="@Buffy Agree, &quot;things composed of things&quot; smacks of a data-oriented way of looking at things. However, each level of composition is an abstraction level, with its own vocabulary of public methods. Teaching abstraction levels is a Good Thing btw, and OO programming is a great way to do that. (In my above example the levels are of course not strictly contained because you can ask for the distance of a Point to a Line.)" CreationDate="2022-01-13T20:45:06.650" UserId="6346" />
  <row Id="19002" PostId="7225" Score="0" Text="Regarding things/actions I asked a question at https://softwareengineering.stackexchange.com/questions/419122/does-oop-overemphasize-the-importance-of-noun-and-thus-put-action-verb-in-the-le  even though it was closed and has 2 delete votes I still think my question is valid." CreationDate="2022-01-14T04:46:34.857" UserId="9884" />
  <row Id="19004" PostId="7225" Score="0" Text="@Qiulang邱朗 Interesting stuff. I wonder how we can move this discussion to chat." CreationDate="2022-01-14T14:16:34.423" UserId="6346" />
  <row Id="18916" PostId="7226" Score="3" Text="Ultimately this is a question about levels. What level are you suggesting? Transistors? ... Scheme? Computer languages define a machine, even if an abstract one." CreationDate="2022-01-10T13:32:02.827" UserId="1293" />
  <row Id="18917" PostId="7226" Score="0" Text="@Buffy The level of: there are memory variables and a CPU that can only do 5 things. And with just that, you can build up systems to do anything digital that is possible. Kind of like how with 3 elementary particles you can build up anything we can see, or with 4 DNA bases, you can represent all forms of life, or with 12 notes in a scale you can play most music. This is called a Generative description, and to me, it's the only description worth learning. It answers the question of how a *thing* can *make decisions*, which is profound. Descriptions that don't go that way don't seem interesting." CreationDate="2022-01-10T17:43:25.313" UserId="5349" />
  <row Id="18918" PostId="7226" Score="4" Text="@ScottRowe You really need to study alternate-to-Turing models https://en.wikipedia.org/wiki/Turing_machine_equivalents . You keep on harping on your 5 op machine as though its a God-made law. Its just a human artifact and concoction. (See my Simon Newell quote) Its your preferred mode and manner of thinking and teaching. And maybe you do a good job.  But its not necessary or inevitable just your preference. Peter Wegner had an insightful paper showing that OO:empiricism  :: FP:rationalism. Its not a question of fact but of perspective" CreationDate="2022-01-10T18:42:07.357" UserId="8837" />
  <row Id="18919" PostId="7226" Score="0" Text="JFTR: I consider voting on meta misguided and absurd.  Ie downvote not mine" CreationDate="2022-01-10T19:05:44.627" UserId="8837" />
  <row Id="18920" PostId="7226" Score="0" Text="You could teach kids how the non-Turing machines work, that would be great. Many kids probably would like to know." CreationDate="2022-01-10T19:06:22.263" UserId="5349" />
  <row Id="18921" PostId="7226" Score="1" Text="Re: Voting in Meta - “*At the devil’s booth are all things sold. Each ounce of dross costs its ounce of gold.*&quot;" CreationDate="2022-01-10T23:13:17.627" UserId="5349" />
  <row Id="18931" PostId="7226" Score="2" Text="Like Buffy says, there's way too many levels for a 1 hour discussion.  You can teach two levels and how they relate, but even that's complicated.  Toward the bottom, there's the hardware, which is an interpreter of machine code instructions (and below that, there's sequential and combinational logic, and below that there's gates, and below that process technology).  The hardware has physical storage that simply exists.  Layered above that, there's logical models of computing with variables that come and go, logical constructs like loops, objects, methods, data structures, commands &amp; inquiries." CreationDate="2022-01-11T01:27:04.183" UserId="3799" />
  <row Id="18934" PostId="7226" Score="0" Text="@ErikEidt Sure. I think most people realize this, but they still want the &quot;punch line&quot; answer. What counts is the **level crossing** part where the computer-y stuff hits the hard physical-y stuff. That's what I wanted an answer to. All the rest is just your usual over-thought academic rubbish that we all don't want or need. Can be done in an hour. I reduced Normalization to 4 simple sentences. Easy to learn, hard to master, like Othello. Or...  Go. Unless you are a computer already. Then we'll have to explain how our brains could have designed *them*. See how that works?" CreationDate="2022-01-11T11:12:39.207" UserId="5349" />
  <row Id="18936" PostId="7226" Score="0" Text="Migration, Moved to Chat... It would only be polite to ask first." CreationDate="2022-01-11T11:27:04.130" UserId="5349" />
  <row Id="18937" PostId="7226" Score="0" Text="Related QuestIon: [Concept of Variable](https://cseducators.stackexchange.com/questions/6462/concept-of-variable)" CreationDate="2022-01-11T11:40:17.870" UserId="5349" />
  <row Id="18970" PostId="7226" Score="0" Text="@ScottRowe : Your objection to the migration proves its rightness more than you realize. CS is a subject. CSE is meta-CS already. Meta-CSE is meta² CS. Do you *really* want the square? Why do you not get metaness? Same reason you don't get functional programming perhaps? And that brings us back to the (wrong)  premises of your question " CreationDate="2022-01-12T04:41:05.320" UserId="8837" />
  <row Id="19040" PostId="7226" Score="0" Text="_&quot;Why not teach people how computers work **right away**?&quot;_ A driving lesson does not start with a mechanic course. A cooking class does not begin with a chemistry class. A house painter can start working before they know how to make paint and pigments. Musicians don't learn to build an instrument before they learn to play it. _&quot;That's what I wanted an answer to.&quot;_ This is not a baseline for what kind of information would be interesting/relevant to everyone. You're also conflating things such as (a) interesting (b) easily explained (c) necessary knowledge and (d) relevant to the course goal." CreationDate="2022-01-17T10:00:16.537" UserId="2164" />
  <row Id="19041" PostId="7226" Score="1" Text="This is worth a proper answer @Flater. By and large I'd agree but I'd pick few bones also" CreationDate="2022-01-17T12:15:43.350" UserId="8837" />
  <row Id="19042" PostId="7226" Score="1" Text="@Rusi Rephrased as an answer, albeit with some modifications." CreationDate="2022-01-17T13:48:22.550" UserId="2164" />
  <row Id="19073" PostId="7226" Score="0" Text="Related QuestIon: [Considering What Can Be Taught - Meta](https://cseducators.meta.stackexchange.com/questions/477/considering-what-can-be-taught)" CreationDate="2022-01-19T21:23:56.200" UserId="5349" />
  <row Id="19122" PostId="7226" Score="0" Text="@Flater I think of programming as Engineering - building something that lasts which other people use instrumentally, to do other things. Yes, cooking is a responsibility if others consume the food. Maybe playing music is too if it will distract people so badly that they crash their car or fall off a cliff. But writing software is like designing food, or a car. It's not just a fun creative activity. Even writers are probably taught from the beginning that they will be held responsible for what they write, even if it is just on Twitter or something..." CreationDate="2022-01-27T10:49:07.757" UserId="5349" />
  <row Id="19124" PostId="7226" Score="0" Text="@ScottRowe: In the &quot;programming as recipe-writing&quot; analogy, where the compiler/computer is the actual chef; you have to consider that the chefs (computers) have gotten better over time and need less explicit instructions today. In the past you needed to explain to your chefs the precise steps on how to make a béchamel sauce; but chefs today already know how to make it, so the recipe writer only needs to write down &quot;Make a béchamel sauce&quot;, not the low-level instructions. Therefore, the specifics of how béchamel sauce is made is not longer _essential_ when teaching people how to write recipes." CreationDate="2022-01-27T11:43:55.180" UserId="2164" />
  <row Id="19126" PostId="7226" Score="0" Text="@Flater yes, but you are still responsible for knowing what is in it and not serving it to people with a food allergy. (Spoiler alert: I used to run a retreat center and cooked for and served lots of guests with all kinds of food issues.) So the level of the instructions doesn't affect your need to know what is happening - where important - at each level. There is not a way to automate out the responsibility, no matter how opaque the system becomes. That's why simplicity is always preferable." CreationDate="2022-01-27T18:40:09.487" UserId="5349" />
  <row Id="18923" PostId="7227" Score="0" Text="How do computers make decisions? How does a material object do that? No description that does not include physical and logical can properly answer. So, the physical must be part of it or you are just going in circles. I have no patience for that, I want answers that terminate in stuff I know that is indisputable. And I wanted that as a child also. Aren't you glad someone does?" CreationDate="2022-01-10T17:49:43.580" UserId="5349" />
  <row Id="18924" PostId="7227" Score="0" Text="They dont; *you do*. Computers are no more &quot;deciders&quot; than my gpas old vacuum-tube radio. Just think: When you write a program; with one result you say: *Hurrah it works!* With another you say: *O hell; A bug!* You say: Do you notice?? **YOU** not the computer. If it could it would and thered be no bugs!" CreationDate="2022-01-10T18:07:51.640" UserId="8837" />
  <row Id="18925" PostId="7227" Score="0" Text="@ScottRowe Notice that your question *What is it about being in Academics that makes you not hear a simple question with a simple answer?* I already answered. More bluntly: Assignment is as unnecessary as ptolemaic epicycles were post Copernicus. How is it that when your question is answered you always dont hear?" CreationDate="2022-01-10T18:25:37.713" UserId="8837" />
  <row Id="18926" PostId="7227" Score="0" Text="How can a material object (a brain) make decisions? I should have gone in to Neuroscience, but programming humans is frowned upon." CreationDate="2022-01-10T19:04:24.800" UserId="5349" />
  <row Id="18927" PostId="7227" Score="0" Text="Someday soon the computers will 'notice' and we had better be ready." CreationDate="2022-01-10T19:09:33.823" UserId="5349" />
  <row Id="18928" PostId="7227" Score="0" Text="Who said brains decide?? I said **you** decide. If you want to identify yourself with some body part... Go ahead. However I'd recommend a look at Lakoff embodied cognition https://en.m.wikipedia.org/wiki/Embodied_cognition As one road to curing 4 centuries of Cartesian dualism" CreationDate="2022-01-10T19:09:40.933" UserId="8837" />
  <row Id="18929" PostId="7227" Score="0" Text="The mind-body problem enters stage right." CreationDate="2022-01-10T19:10:40.503" UserId="5349" />
  <row Id="18930" PostId="7227" Score="0" Text="So it isn't just the brain, it's lots of physical things involved. Restated: How can any conceivable partly physical system make decisions? It is easier just to stick with the original question, because it has already been answered by someone." CreationDate="2022-01-10T20:13:26.430" UserId="5349" />
  <row Id="18933" PostId="7227" Score="0" Text="@ScottRowe Since I gather what you're *really* grumbling about is [stratospheric abstraction in OOP](https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/)&#xA;I added a clarifying aside on that though that's a quite different q. Also a new header in the hope that you will rethink your &quot;five magic ops&quot;" CreationDate="2022-01-11T04:44:22.473" UserId="8837" />
  <row Id="18938" PostId="7227" Score="0" Text="Joel said, &quot;*Sometimes smart thinkers just don’t know when to stop*&quot; I suggest you ponder that and come up with a concise answer instead of dismissing the basis for the question. Unfortunately, this question was migrated to a place where it is not in scope. Not sure whose idea that was." CreationDate="2022-01-11T13:19:51.910" UserId="5349" />
  <row Id="18935" PostId="7228" Score="0" Text="Fetch Store Arithmetic Test / Compare Jump - these are things people can relate to, they are part of real machines and they're sufficient. &quot;*More than this comes of evil.*&quot; Can we agree that bridging this to the CPU would satisfy most kids? Could you do that once and for all, right at the start, and that it would prevent huge amounts of misunderstanding? So... Do." CreationDate="2022-01-11T11:19:29.203" UserId="5349" />
  <row Id="18941" PostId="7228" Score="1" Text="@ScottRowe Interesting abstraction layer. Each of the five 'operations' is an abstraction of its own, again demonstrating the fact that we, as humans, are driven to abstraction." CreationDate="2022-01-11T14:35:48.257" UserId="104" />
  <row Id="18967" PostId="7228" Score="0" Text="@ScottRowe I teach that stuff in my processors elective, but modern computers don't do these any more. The processor isn't even aware of RAM addresses in modern computers. There's a whole other architecture to deal with read and write that starts with paging and ends in security measures. I'm not trying to be obstinate. I genuinely feel like the abstract layer you hold up as the most important just *isn't* the most important, nor the most helpful. I can't speak for every population, but I can say with certainty that the population I teach would not be happy if I started where you suggest." CreationDate="2022-01-12T02:09:30.407" UserId="27" />
  <row Id="18939" PostId="7229" Score="0" Text="It enlightens the programmer, or in this more important case, the student. It only need be precise enough to get the point across, like all other human communication." CreationDate="2022-01-11T13:31:03.350" UserId="5349" />
  <row Id="18940" PostId="7229" Score="0" Text="But then you're back at my previous statement that the syntax/semantics of the programming language is precise enough." CreationDate="2022-01-11T14:03:32.043" UserId="6346" />
  <row Id="18942" PostId="7229" Score="1" Text="«*The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise*» That's Dijkstra again!  Though I agree with @ScottRowe more than he realizes . If you need to talk of memory you basically need a machine model.  The crucial difference we have is that he thinks its necessary, inevitable. I know its not necessary in a pure functional language.  But if you take that as too fringe for serious consideration (better than not knowing abt it at all!!) then you implicitly prove his point" CreationDate="2022-01-11T15:11:31.570" UserId="8837" />
  <row Id="18943" PostId="7229" Score="0" Text="@VictorEijkhout The language cannot explain how it can affect the physical world, so more is needed." CreationDate="2022-01-11T15:17:42.583" UserId="5349" />
  <row Id="18944" PostId="7229" Score="0" Text="@Rusi &quot;*Everyone* talks *about the weather, but no one* does *anything about it!*&quot;" CreationDate="2022-01-11T15:20:44.003" UserId="5349" />
  <row Id="18961" PostId="7229" Score="1" Text="@Rusi The machine model you refer to is the Von Neumann architecture. And a lot of the misery in my field of high performance computing is that the instruction set of a computer offers a Von Neumann API (so to Scott the CPU indeed looks simple) while underneath is a whole bunch of magic (see the random keywords in my answer) to make it look that way, while it isn't remotely that." CreationDate="2022-01-11T19:03:58.223" UserId="6346" />
  <row Id="18968" PostId="7229" Score="1" Text="You [too](https://cseducators.stackexchange.com/questions/7226/driven-to-abstraction/7229?noredirect=1#comment18954_7233) are proving @ScottRowe point more than you probably realize. My restatement of point: We have too many layers of abstraction. If theyre not working why aren't we rethinking them? Ans1 (cynical): Because no one's in charge.. Ans2 : (enthusiastic) cutting edge research is all the time just doing that! Join the fray! I guess the truth is in between?" CreationDate="2022-01-12T04:27:00.610" UserId="8837" />
  <row Id="18969" PostId="7229" Score="0" Text="Case in point:  I had a friend who did his PhD in getting past Intel's cache hierarchy. Don't remember the details. But the summary is quite aligned to @ScottRowe : We make fancy abstractions. Then we do PhD's getting past/gaming them. Why... Why? Ans:Because there's no &quot;We&quot; at least in charge" CreationDate="2022-01-12T04:30:44.637" UserId="8837" />
  <row Id="18976" PostId="7229" Score="0" Text="@Rusi Yes. Someone is in charge of flying a plane. Should computers be able to contradict them? Then who's in charge?" CreationDate="2022-01-12T10:57:03.847" UserId="5349" />
  <row Id="19038" PostId="7230" Score="0" Text="The full body bit is all about the lens, and distance from the camera." CreationDate="2022-01-17T09:36:01.350" UserId="204" />
  <row Id="19039" PostId="7230" Score="0" Text="I can not see how this is about teaching computing." CreationDate="2022-01-17T09:36:18.887" UserId="204" />
  <row Id="18955" PostId="7231" Score="0" Text="I don't understand how this answers the question.  This appears to be debating whether a solution document should show one solution or multiple solutions, but that was not my question.  My question was how to ensure that students don't redistribute the solution document.  I think my question is applicable whether the document contains one solution or multiple solutions." CreationDate="2022-01-11T18:06:18.993" UserId="1106" />
  <row Id="18960" PostId="7231" Score="0" Text="If you read more than just my first paragraph you'll see that I was arguing for giving only the relevant bit of any solution, not a full working code. For a future student to reuse that, they'd have to figure out setup and teardown code from the given fragment which is a lot of work." CreationDate="2022-01-11T19:00:40.853" UserId="6346" />
  <row Id="18963" PostId="7231" Score="0" Text="The issue I have with that is: To be useful to the current student, a solution document has to make it clear how to solve the problem.  That in turn then means that if next semester's students get access to the solution document, cheating is easy.  Students are not limited to merely copy-pasting from the solution document in its entirety; in my experience, they are capable of adding the straightforward missing stuff." CreationDate="2022-01-11T19:08:40.660" UserId="1106" />
  <row Id="18962" PostId="7232" Score="3" Text="Good answer. I'll just remark that your &quot;One of the reasons&quot; section can be characterized as &quot;Pedagogy recapitulates ontogeny&quot; and that most people think this is bad. &quot;most of what I've learned is actually obsolete&quot; That takes courage to admit. I usualy don't come further than to say &quot;I'm waiting for the concept of XYZ to make a come-back&quot; :-)" CreationDate="2022-01-11T19:07:53.357" UserId="6346" />
  <row Id="18966" PostId="7232" Score="0" Text="As we develop more levels and abstractions, I think it's important to have a through line that terminates on something real, so that if you ever do need to start a car with a pencil or broomstick, you can." CreationDate="2022-01-12T00:27:39.870" UserId="5349" />
  <row Id="19020" PostId="7232" Score="0" Text="When I first learned Lisp, around 1985, I thought it made sense because it was built on car, cdr and cons, which all related directly to machine operations. I could see the exact interface where the machine met the language, the hoofprint where the winged horse struck off. But 300 pages later in SICP they jump out of a perfectly good airplane, which we realize was never going to leave the ground. If Lisp is based in simplicity, and I am arguing for simplicity, why didn't Lisp live up to its promise after 60 years? If it is a good starting point why doesn't teaching start there?" CreationDate="2022-01-16T03:30:47.707" UserId="5349" />
  <row Id="19035" PostId="7232" Score="1" Text="@ScottRowe Your last 2 sentences/questions are on point.  Perhaps the best answer in a short space is *Lisp fell between 2 stools* To the mainsream imperative programmers Lisp looks too weird and by implication mathematical to be useful. To the functional programmers (in 2022) Lisp is not a functional language but more or less python/ruby/javascript with idiosyncratic syntax.  There are other answers of course like *Lisp didnt live up?!  Look at clojure*  But I dont like this answer because the battlefield of TIOBE indices is unsavory to settle pedagogical questions." CreationDate="2022-01-17T06:53:43.093" UserId="8837" />
  <row Id="19036" PostId="7232" Score="0" Text="Remember Fortran was functional in 1957. And Haskell will give way to Idris(ish) Agda(ish) in 2030 if I peer in my crystal ball. Lisp was FP between 1960 and 1980. From 80 it coalesced into Common Lisp plus Scheme. And after &quot;Real World Haskell&quot; I'd say the mantle passed. [JFTR: I love scheme and think Haskell has missed the boat/point. I'm describing the status quo not my preferences] As for SICP dropping subst model at pg 300 just switch to Haskell — there simply is no imperation/mutation ie Lisp's informal culture of FP gets baked into Haskell's formal semantics" CreationDate="2022-01-17T07:00:45.003" UserId="8837" />
  <row Id="18945" PostId="7233" Score="4" Text="Computers work by magic. The &quot;special level&quot; that you talk about is the lowest level that any given person understands. Everything above that special level makes sense, everything below it is magic. Most of us just ignore the magic and get on with our jobs. I think the OP's goal is to bring the student's &quot;special level&quot; down to match his own. They don't need to understand anything at a lower level than that because everything below that level is the magic stuff that _he_ feels comfortable ignoring." CreationDate="2022-01-11T15:57:42.867" UserId="1269" />
  <row Id="18947" PostId="7233" Score="0" Text="@SolomonSlow Well one could add one more list upwards: Assembly, C, C++, Haskell, Idris, Lean. And (speaking for myself) my comfort zone ends below Idris. Between Idris (etc) and Lean (etc) the level gap is really special (IMHO) -- the Turing computable level. So its more like we inhabit a comfort zone neighborhood : lowest level I consider relevant to highest level grokkable to my wits!" CreationDate="2022-01-11T16:13:05.527" UserId="8837" />
  <row Id="18948" PostId="7233" Score="0" Text="Also I dont know a fig about solid state physics; though I studied some quantum physics in college. ie the knowledge is usually scattered hole-y. And I add C++ with some reservations... Dont believe OOP is much good to anybody-- students, teachers, professionals -- but C++ gives some things independent of OOP" CreationDate="2022-01-11T16:13:41.087" UserId="8837" />
  <row Id="18950" PostId="7233" Score="0" Text="@SolomonSlow Thank you. For me the important point is where the program level affects the physical world level. The goal is to reveal how the magic works. Then it's not magic anymore. Above there are levels, yes, and below there are levels, but right at that interface is the part that really demands an explanation. How a computer is different from everything else. Didn't you want to know that somewhere early on? Did you wait patiently for someone to get around to explaining it?" CreationDate="2022-01-11T16:56:26.363" UserId="5349" />
  <row Id="18953" PostId="7233" Score="3" Text="@ScottRowe, My &quot;special level&quot; was the gate level. I have an armchair understanding of what MOSFETs and relays do. BJTs are magic, but I understand how they can be combined to make logic gates. Once I dug down the the point where I understood how to build a rudimentary computer out of  NAND gates, I felt like I &quot;knew&quot; how a computer worked. OTOH, modern, high-performance, multi-core, super-scalar, desktop/server/mobile-device CPUs are pure magic as far as I know, and I am content to write out magic spells (Python, Java, and C++ code) that summon them to do my dark bidding." CreationDate="2022-01-11T17:48:13.890" UserId="1269" />
  <row Id="18954" PostId="7233" Score="1" Text="And that kinda proves ScottRowe's point @solomonslow. There is point where it's as though the rubber hits the road -- you can hear the scream, smell the sulphur. We are all *explaining it away* rather than *conveying the magic*. For me a giddy point was scheme when I wrote functions taking and returning functions. And used that to actually grade my students without variables" CreationDate="2022-01-11T18:00:35.403" UserId="8837" />
  <row Id="18956" PostId="7233" Score="1" Text="If @ScottRowe says modern computer (teaching) has taken away the fun the mystery, I have to agree ... somewhat reluctantly" CreationDate="2022-01-11T18:06:32.597" UserId="8837" />
  <row Id="18984" PostId="7233" Score="1" Text="My &quot;special level&quot; is at the digital logic level.  Once I saw everything move to booleans, it all connected for me.  And in particular, it was the carry adder that was my big a-ha moment.  @ScottRowe's special level still left everything feeling like magic to me, because it didn't answer the basic questions about physicality.  What was memory?  How did a command *happen*?  How could a computer even receive a &quot;command&quot;?  How could a computer manipulate numbers when it only had wires?" CreationDate="2022-01-12T14:05:03.623" UserId="27" />
  <row Id="18989" PostId="7233" Score="0" Text="@Ben I guess the larger meta() point Scott is making is that we teachers dont bother enough this sense of magic. In fact a teacher passionate about some level would/could convey the magic of that level for any/every level. What Scott doggedly does not get (as Buffy and others said) is that the &quot;physical level&quot; is only physical into-quotes: there are no gates, just transistors, no transistors/wires as the schematic shows, just a doped silicon wafer. I was actually contemplating making a CW answer with sense of magic(s) which *I* can imagine. And others fill others. 3 answers! A bit much" CreationDate="2022-01-12T15:03:11.797" UserId="8837" />
  <row Id="18991" PostId="7233" Score="0" Text="(cont) See this [&quot;old joke&quot;](https://matheducators.stackexchange.com/questions/1403#comment8485_1403). OTOH what @ScottRowe does get better than most but communicates more emotively is that we are in a mess with all this ill-thought-through abstraction. Right now Ive spent half a day grappling with this: firefox refuses to open local files. And with a strange `File not found` error. Turns out ubuntu has moved firefox from apt to snap -- a new snazzy shiny abstraction which loves me so dearly it treats me as my own intruder! Dozens of such glorious progresses I - or anyone -- could recount..." CreationDate="2022-01-12T15:05:20.717" UserId="8837" />
  <row Id="18992" PostId="7233" Score="0" Text="@BenI. Maybe the Frank Herbert quote &quot;*In lieu of red tape*&quot; should be applied to runaway development of computer systems. I did say that there is NO magic, and so any mysterious aspects should be explained." CreationDate="2022-01-12T18:34:42.537" UserId="5349" />
  <row Id="19019" PostId="7233" Score="0" Text="@ScottRowe : Heh! An accept!! And for an answer that was not meant to be an answer. But maybe it can become one?? As I was musing above maybe I &quot;CW it&quot; (community wiki). And then everyone can express their &quot;special level&quot; from the place of their own passion?  More at meta..." CreationDate="2022-01-16T03:17:23.227" UserId="8837" />
  <row Id="19021" PostId="7233" Score="0" Text="Your Answer is the only one that referred to levels. My whole question was about the point where one kind of thing links to another kind of thing, where &quot;greenness disappears&quot;. That's what is meant by Science, everything else is just blithering." CreationDate="2022-01-16T03:34:47.947" UserId="5349" />
  <row Id="18949" PostId="7234" Score="0" Text="Give a bit more background. What is the student/staff ratio for such a large course? How many TAs/graders etc. are involved? I think that other questions you've ask suggest you have a near impossible task." CreationDate="2022-01-11T16:30:49.467" UserId="1293" />
  <row Id="18951" PostId="7234" Score="1" Text="@Buffy students present their homework in &quot;lab&quot; hours. There are 15 lab hours per week, so 20 students per lab. Assuming 5 presentations per hour, each student gets to present once in 4 weeks, which is 3 times per term (so they can present 3 out of 5 assignments). Indeed, it is very challenging. I asked to have 13 students per lab, but it was not approved due to budget considerations." CreationDate="2022-01-11T17:34:09.960" UserId="1873" />
  <row Id="18952" PostId="7234" Score="0" Text="So, are you alone managing this class?" CreationDate="2022-01-11T17:38:40.010" UserId="1293" />
  <row Id="18957" PostId="7234" Score="0" Text="@Buffy I am currently the lecturer in charge. There are two other lecturers that are responsible for teaching, and 5 TAs that are responsible for tutoring and handling the labs." CreationDate="2022-01-11T18:09:57.233" UserId="1873" />
  <row Id="18958" PostId="7234" Score="3" Text="I have a strong sympathy with this question -- I've on occasion disliked myself for the grades I gave" CreationDate="2022-01-11T18:26:25.987" UserId="8837" />
  <row Id="18965" PostId="7234" Score="0" Text="Is there a problem? You used the term &quot;mediocre code&quot; for the students that turned out to have worked alone. I'm fine with students consulting each other. In fact, I tell them to formalize grouping of up to 3 and submit just once, with all their names on it. I'm sort of assuming that they themselves will deal with the ones not pulling their weight." CreationDate="2022-01-11T23:35:39.973" UserId="6346" />
  <row Id="18974" PostId="7234" Score="2" Text="@VictorEijkhout Until two years ago I, too, encouraged group submissions. Then, due to COVID we had to do oral examinations. I found out that some students, who got 100% homework grade, could not write a single line of code. When I asked &quot;how did you get 100% homework without writing code?&quot; they said  &quot;my partner wrote all the code. My job was just to submit the solution to Moodle&quot;... Since then, I switched to individual submission." CreationDate="2022-01-12T10:35:11.630" UserId="1873" />
  <row Id="18975" PostId="7234" Score="0" Text="@GuyCoder students get 1 point for the automatic submission, and 16 points for the interview, where they also get personal feedback on their submission. It is important for students to know exactly how their grade is computed - this is why we need a transparent grading scheme." CreationDate="2022-01-12T10:51:43.537" UserId="1873" />
  <row Id="19028" PostId="7234" Score="0" Text="Make 30% of the grade be for originality? It is an old issue that the ones getting As are basically just good at regurgitating and gaming the school, and the capable students are annoyed, withdrawn, misunderstood and told they will never amount to anything, like that guy... Uh... Einstein, that's it. How to solve this? Switch to apprenticeship. Ramanujan had an individual tutor who recognized his brilliance, or else he might have spent his life in the village where he was born." CreationDate="2022-01-17T00:08:45.387" UserId="5349" />
  <row Id="19037" PostId="7234" Score="1" Text="@ScottRowe We have a kind of apprenticeship at the 3rd year, when students do individual projects. The course I am talking about is 2nd year, it should give students basic tools for doing projects." CreationDate="2022-01-17T09:25:37.393" UserId="1873" />
  <row Id="18964" PostId="7235" Score="1" Text="As an aside, I remember hearing a social scientist explaining that Tolstoy was wrong about this: that unhappy families all tend to have the same few problems, while happy families all find different ways of working them out. (Your answer still stands, despite that, of course!)" CreationDate="2022-01-11T22:35:19.740" UserId="9454" />
  <row Id="18971" PostId="7235" Score="0" Text="@gidds The quote is certainly glib, but I think that, in truth, everyone and every situation is unique.  You have to apply a grouping lens to see commonality, but truly, that's an artifact of our own brains.  We *really* like to group things.  In truth, I am quite sure there are exactly as many ways people are unhappy as there are unhappy people, and the same can be said for ways to be happy as well.  Tolstoy and your professor were applying different lenses to map their understanding, but the map is not the territory." CreationDate="2022-01-12T05:16:27.187" UserId="27" />
  <row Id="18985" PostId="7235" Score="2" Text="Thanks for the feedback. I understand that there is a limited number of perfect solutions. But I still feel that the current grading scheme does not do much to encourage originality and self-effort. In fact, it encourages students to just ask the top students in class to share their ideas with the group. I am trying to tweak the scheme a bit." CreationDate="2022-01-12T14:32:43.657" UserId="1873" />
  <row Id="18977" PostId="7236" Score="0" Text="I do not want to forbid collaboration altogether. I just want to reward students who did a larger effort to solve the exercise on their own. The idea of &quot;extensions&quot; seems very useful. I can design an exercise with 80% &quot;fixed part&quot; (e.g. write a binary tree class) and 20% &quot;variable part&quot; (e.g. write a function that prints out the tree in a nice format). Since 'nice' format is subjective, I can expect to have more originality (of course, the variable part cannot be graded automatically, only during the interview)." CreationDate="2022-01-12T10:59:02.760" UserId="1873" />
  <row Id="18982" PostId="7236" Score="0" Text="&quot;*After all, in the real world, collaboration is expected and the quality of the product is paramount. In an educational environment, it is the learning that is paramount, not the product. Students don't always understand that you didn't ask them to do something because you want the result. After all, you could have produced it yourself much more easily.*&quot; - I **really** wish StackOverflow would understand that. There are quite a few good quality questions which explain that OP can't use feature `X` and SO generally goes crazy about how dumb teachers are for forbidding using particular tools." CreationDate="2022-01-12T12:02:36.173" UserId="11453" />
  <row Id="19022" PostId="7242" Score="4" Text="Amazing answer. Mind reformatting a bit your English so it’s easier to read. For example I’ve and not “ive” unless you have tried to imitate the style of a young student or something." CreationDate="2022-01-16T08:01:48.643" UserId="11545" />
  <row Id="19023" PostId="7242" Score="1" Text="Just hurriedly typed on less than convenient kb... Sorry ! Need a few hours... Editing certainly needed. Also want to add one more section" CreationDate="2022-01-16T08:46:59.690" UserId="8837" />
  <row Id="19025" PostId="7242" Score="1" Text="Ive done a first quick bunch of cleanups @0x90.  I'll run through it more fine tomorrow. And also expand last &lt;to-be-filled&gt; section" CreationDate="2022-01-16T16:25:41.440" UserId="8837" />
  <row Id="19026" PostId="7242" Score="2" Text="What's the source of that Dijkstra quote? It doesn't really sound like him. You know that he was an excellent programmer?" CreationDate="2022-01-16T18:30:59.123" UserId="6346" />
  <row Id="19027" PostId="7242" Score="3" Text="*&quot;Write a python regexp that matches brackets. And of course the answer is NO CAN DO.&quot;* Beware: what Python calls a regex is not really a regular expression in the theoretical sense, and [matching balanced parentheses is possible](https://stackoverflow.com/q/26385984/12299000) using Python's `regex` library, because it supports recursive patterns. Most programming languages have so-called regexes which support backreferences, if not recursion, so you can match e.g. `{a^nba^n | n in N}` with a so-called regex like `(a*)b\1`. So be *very* careful with setting regex homework involving real code." CreationDate="2022-01-16T19:35:10.183" UserId="8562" />
  <row Id="19029" PostId="7242" Score="1" Text="Thanks for asking that  @VictorEijkhout — I had quoted that Dijkstra-aphorism slightly differently. I have amended it to match exactly the original and inserted the link to the source.  Which also contains the next line [*[Medical researchers are not required to suffer from the diseases they investigate.]* to amplify his point.  If you want to delve deeper into why he says this and from what angle see eg https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1012.html\  Dijkstra is of course always simultaneously bullseye and excessive " CreationDate="2022-01-17T02:45:05.577" UserId="8837" />
  <row Id="19030" PostId="7242" Score="1" Text="Oooops @kaya3!! Good catch.  I guess one could replace that by some more classical re engine like egrep (But I wouldnt be surprised if even that has been enhanced beyond the regular domain...)" CreationDate="2022-01-17T02:47:01.833" UserId="8837" />
  <row Id="19031" PostId="7242" Score="1" Text="@Rusi I wonder what Dijkstra was referring to here. He has a famous statement that computer science is as much about computers as astronomy is about telescopes, but I don't think he is sneering here. Considering that these are answers to questions from the audience, and in view of the previous question, I wonder if he's only talking to the fact that he doesn't necessarily want to use a computer for doing presentations." CreationDate="2022-01-17T04:54:47.607" UserId="6346" />
  <row Id="19032" PostId="7242" Score="1" Text="These are two independent axes @VictorEijkhout. Yeah he didn't think it hip to over use technology such as computers-ppt etc.  But here the point is different. And quite key to much of his work --- teach programming as mathematics. ie instead of &quot;running around with the program counter&quot; grok the program in terms of predicates -- invariants, pre/post conditions etc.  This is what he calls (in staid language) operational approach vs postulational approach [here](https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1012.html). His characteristic hyperbolic  &quot;Being a CSist vs computer&quot;" CreationDate="2022-01-17T05:23:59.223" UserId="8837" />
  <row Id="19033" PostId="7242" Score="1" Text="There is a conundrum in dealing with Dijkstra's ideas is that (a) he espouses **imperative programming** (2) **Approached declaratively**  He switched from this contradiction end of his life https://www.cs.utexas.edu/users/EWD/transcriptions/OtherDocs/Haskell.html" CreationDate="2022-01-17T05:24:37.333" UserId="8837" />
  <row Id="19034" PostId="7243" Score="1" Text="At the CS level we could go over these points. But this is more meta than your original q and may better be there??" CreationDate="2022-01-17T06:26:42.370" UserId="8837" />
  <row Id="19050" PostId="7243" Score="0" Text="You cannot articulate an outcome advantage, so you instead ask, *isn't it good that someone cares about this?*   Was the original question largely rhetorical?  If so, then do not say that others could not persuade you because their reasoning was not sound, because in truth, you came to it with a closed mind and could not ever have been persuaded.  (There is real wisdom in some of these answers, and I hope you do come back to them in time and think about them more carefully.)" CreationDate="2022-01-17T15:44:41.400" UserId="27" />
  <row Id="19051" PostId="7243" Score="0" Text="That last comment was not to attack you, but to prompt you to honestly consider your motive in asking the question.  Were you trying to learn, or trying to persuade?" CreationDate="2022-01-17T15:45:27.363" UserId="27" />
  <row Id="19052" PostId="7243" Score="0" Text="Also, on a moderator note, if someone has attacked you (and not just your idea), please flag it. (Including, I suppose, my own comment above us if you believe it to be an attack. We have multiple moderators, and I certainly do not handle flags on my own work.)" CreationDate="2022-01-17T15:47:33.370" UserId="27" />
  <row Id="19060" PostId="7243" Score="0" Text="@BenI. I had originally asked this Question on Meta, and I wish that had been respected. As for me being able to be persuaded, no. See my comment to Flater's Answer where I mention Weather. This fundamental knowledge is not optional, it's the whole point of how computers got created. Somehow people have lost sight of this. It is baffling to me, like forgetting to realize that food dishes were made because we need calories, not to look good on the plate." CreationDate="2022-01-18T13:04:48.500" UserId="5349" />
  <row Id="19064" PostId="7243" Score="0" Text="@ScottRowe It's not a question about the governance of the site, so it's not meta." CreationDate="2022-01-18T13:35:07.143" UserId="27" />
  <row Id="19065" PostId="7243" Score="0" Text="@ScottRowe That analogy is bizarre.  One is about *purpose* of the action, and the other is... not.  At all.  We did not create computers with the PURPOSE of making &quot;five&quot; operations.  You're examining an implementation detail at one level and declaring it to be the most important, most fundamental point.  It's important!  But it's one level of abstraction, and in spite of your protestations to the contrary, it's *not* where the physical meets the computational, and it never has been." CreationDate="2022-01-18T13:39:55.307" UserId="27" />
  <row Id="19066" PostId="7243" Score="0" Text="You are keenly intelligent, but I find your inability to &quot;see&quot; even the most basic fact patterns and baby-basic facts about this topic frustrating to say the least.  You confidently assert things that are strictly and obviously incorrect, use those assertions to justify your position, and refuse to see otherwise simply because you refuse to see.  You have Made Up Your Mind.  This was never a reasoned discussion because you were never intending to be reasonable.  I find your intransigence frustrating, so I am going to disengage now.  I am done discussing this topic with you." CreationDate="2022-01-18T13:58:03.847" UserId="27" />
  <row Id="19072" PostId="7243" Score="0" Text="I side with @BenI on the facts  (90%). And with Scott on the emotion 95% — if Sturgeon's law is a universal truth how come we don't apply it to CSE? ...whence it becomes a Meta-CSE question" CreationDate="2022-01-19T03:10:57.057" UserId="8837" />
  <row Id="19128" PostId="7243" Score="0" Text="Re new additions: Yes its true @ScottRowe : Some of the most significant innovators in CS have been motivated by AI considerations. Off the bat I can think of Turing, McCarthy, Minsky.  All these were primarily interested in AI but their contributions o far beyond. I particularly recommend Minsky's [Turing Award](https://amturing.acm.org/award_winners/minsky_7440781.cfm)" CreationDate="2022-01-29T04:46:22.190" UserId="8837" />
  <row Id="19129" PostId="7243" Score="0" Text="@Rusi Ok, I wasn't thinking about AI particularly. Rather Ada Lovelace's insight about representing symbols as numbers then conveniently meets a number handling tool, and a completely new world opens up. But that doesn't mean that the people blind to that stunning change-point will get it. I have a friend with 2 PhDs, a major book and 4 patents in information algorithms, but as far as I know everyone is ignoring her. &quot;*See and see but do not perceive, hear and hear but do not understand*&quot;" CreationDate="2022-01-29T11:06:43.153" UserId="5349" />
  <row Id="19140" PostId="7243" Score="0" Text="If you think a CPU is not an app, explain to me what branch prediction is, prefetch streams, out-of-order execution. Transcendental function through look-up tables &amp; iterative refinement. Hashing functions for address translation. Your CPU is full of algorithms that address the deeper levels, invisible to us." CreationDate="2022-01-29T17:16:25.083" UserId="6346" />
  <row Id="19143" PostId="7243" Score="0" Text="@VictorEijkhout Those things are not *necessary*. We need to start teaching with what really *must* be there, because it's the place to start. There was a really cool book by a ship captain called, &quot;First you have to row a little boat&quot;. I don't see people in other fields with this delusion, early math doesn't suffer with the urge to impart Ramanujan's findings, or physics throwing General Relativity at early students. People in CS seem just very bewildered. Maybe they didn't learn the basics first?" CreationDate="2022-01-29T21:18:43.120" UserId="5349" />
  <row Id="19123" PostId="7245" Score="0" Text="So teach the principles." CreationDate="2022-01-27T10:51:44.423" UserId="5349" />
  <row Id="19163" PostId="7245" Score="0" Text="@ScottRowe `and` and `or` are true no mater if done with transistors, or cogs. Pattern matching and arithmetic are true no mater if done with Boolean logic, or the way (one of the ways) you learnt in maths class. The principles are up the abstraction. AN implementation is down. Yes teach implementations as well as principles, but don't teach that it is the only implementation, or that it is fundamental. It is not. We have many ways to implement it. For now it is CMOS transistors implements Boolean logic implements, adders, multipliers, etc, implements ..." CreationDate="2022-01-31T14:20:12.800" UserId="204" />
  <row Id="19168" PostId="7245" Score="0" Text="I often wonder what will come next, it will be fascinating to see. But *for now*, it makes sense to simply pull the curtain back for a few minutes and show what the thing is doing. Some day, it might well be beyond human understanding, once computers start evolving themselves. Blink and we could miss it." CreationDate="2022-01-31T15:25:51.077" UserId="5349" />
  <row Id="19043" PostId="7246" Score="0" Text="Overall +1. But you need to examine your third bullet point. Course goals can be self serving.  Mostly we take these as given. And then within the frame of that as a given make judgments. But when the question is broad and more philosophical than specific like OP we need to be careful of our assumption.  eg When I was a student my COBOL course was among the more interesting  Should we then look to making the COBOL course better and better? Ok in a frame... But sometimes we also should (and do as for COBOL) ask: Is this course necessary in the larger picture?" CreationDate="2022-01-17T13:53:38.673" UserId="8837" />
  <row Id="19044" PostId="7246" Score="0" Text="JFTR: You are likely to find me in the more pro COBOL camp than most out here. But thats because of things like https://www.theserverside.com/feature/How-COVID-19-created-a-demand-for-COBOL-basics. Not the good course I had in student days!" CreationDate="2022-01-17T13:54:59.750" UserId="8837" />
  <row Id="19045" PostId="7246" Score="0" Text="@Rusi: I understand your point, and it is sort of why I avoided concrete stating what OP's course goal is because this can change the consideration. But given OP is talking about assignment and variables; I infer they're thinking about a programming course, in which I don't think such low level constructs meaningfully teach a student how to write software in the relatively high level languages we use nowadays." CreationDate="2022-01-17T13:55:45.627" UserId="2164" />
  <row Id="19046" PostId="7246" Score="0" Text="@Rusi: Even 10 years ago, my college gave us a week of COBOL and FORTRAN (each) as part of &quot;the basics&quot;. While interesting, I don't quite agree that it is _relevant_ in today's development ecosphere. You are correct that some governmental applications still rely on ancient codebases; but I don't think you can correctly extend that to needing to include it in your average curriculum. It's a dying breed (although it's taken longer than it should to die out), and it's akin to requiring architects (building, not software) to learn medieval housebuilding techniques because of some old churches." CreationDate="2022-01-17T13:59:27.483" UserId="2164" />
  <row Id="19047" PostId="7246" Score="0" Text="Course goals can — and should — span a range from effective doing to up the [DIKW ladder](https://en.wikipedia.org/wiki/DIKW_pyramid). (From my pov) the difficulty with OP is that he is right in demanding more stuff up the ladder. And then suggesting that imperative programming is fine!!" CreationDate="2022-01-17T14:00:55.370" UserId="8837" />
  <row Id="19048" PostId="7246" Score="0" Text="Well... Thats a different argument: (In my book) Java is more obsolete than C++. And C++ more obsolete than C. Java has exactly one useful concept — interfaces. And one genuine use case — android. A choice which has cost google a billion dollars. But this is an argument for a different place... When a company spends to the tune of a billion dollars to advertise a technology, it behoves academics to be suspicious of it https://www.theregister.com/2003/06/09/sun_preps_500m_java_brand/" CreationDate="2022-01-17T14:04:44.737" UserId="8837" />
  <row Id="19049" PostId="7246" Score="0" Text="@Rusi: I think this cycles back to the goal of the curriculum. Based on OP's &quot;assignments and variables&quot; mention, I'm still in the mindset of a basic programming course, where such deep specifics and niches are a bit overkill. Not saying it won't be valuable to _anyone_ but I am suggesting it will only have value to a limited subset of people, limited enough that this course is likely not the time and place for it." CreationDate="2022-01-17T14:11:11.943" UserId="2164" />
  <row Id="19059" PostId="7246" Score="0" Text="I agree with Father's first paragraph, however, there is an overriding consideration for software. A similar case is Weather: the most important fact in weather is the energy of phase change of water. Without knowing how much that makes weather what it is, you essentially know nothing. Without knowing how a machine can choose and then affect the world, you know nothing. It is really as simple as that. An auto mechanic who didn't know that gasoline is flammable *and* explosive would be a danger to themselves and others. We are training software *mechanics*, not drivers." CreationDate="2022-01-18T12:56:00.030" UserId="5349" />
  <row Id="19061" PostId="7246" Score="0" Text="Someone saw fit to make software that changed where I wrote Flater above to father. You are a bad mind-reader!" CreationDate="2022-01-18T13:08:23.137" UserId="5349" />
  <row Id="19062" PostId="7246" Score="0" Text="@ScottRowe: Your analogy is IMHO flawed, as your weather scenario involves investigating the root cause (energy of phase change of water) of the effect (weather events) you're predicting. &quot;What makes a computer different from an electrical device&quot; is _not_ a root cause to learning how to write software. At this point in time it is an esoteric and superfluous piece of trivia that does not directly drive knowledge on how to write basic code. Picking up your analogy, I'd counter that you don't need to know the energy of phase change of water in order to correctly use a barometer or pluviometer." CreationDate="2022-01-18T13:12:09.963" UserId="2164" />
  <row Id="19063" PostId="7246" Score="0" Text="But why would you even need to use a barometer if there was no water in the air? Why would we even bother to teach programming if a piece of metal was not in some mysterious way different from all other pieces of metal in being able to answer questions, decide and act? It is simply that people are not sufficiently grateful. They are asleep to the miracle and inured to how much our lives have been altered by it, in good ways, but now also harmful and dangerous ways. I have nothing more to say at this time." CreationDate="2022-01-18T13:20:07.870" UserId="5349" />
  <row Id="19067" PostId="7246" Score="1" Text="@ScottRowe: Education does not have to occur chronologically. Just because it is relevant in the complete understanding of how everything works does not make it relevant for the first X hours of basic education. Our bodies are the result of evolution over milennia but you don't need to know the physiology of a Neanderthal when studying medicine. You're arbitrarily drawing the line at what makes a computer a computer; but why draw the line there? Why not draw it at mining silicon, or the physics behind electricity? You're conflating what you find interesting with what is educationally relevant." CreationDate="2022-01-18T14:03:30.947" UserId="2164" />
  <row Id="19068" PostId="7246" Score="0" Text="@ScottRowe: If you were to require that every underlying principle going into X should be taught when teaching X, then education would stall as time goes on and technology progresses; and you'd be adding _tons_ of details that would simply overload beginner students and negatively impact both their learning and their desire to learn. I'm not saying it's not an interesting topic, I'm saying that it's not educationally relevant to bring up from the start, and can be left as an optional piece of trivia or a more advanced deep dive when the basics have already been taught." CreationDate="2022-01-18T14:05:35.917" UserId="2164" />
  <row Id="19053" PostId="7247" Score="0" Text="Is that a term of art, or is it you own? I've never heard those kinds of skills grouped together under any term.  I love it!" CreationDate="2022-01-17T21:30:45.463" UserId="27" />
  <row Id="19054" PostId="7247" Score="0" Text="@BenI. That term comes from Greg Wilson. See https://software-carpentry.org/ in particular https://software-carpentry.org/scf/history/ Yes, it's a great one." CreationDate="2022-01-17T21:34:46.153" UserId="6346" />
  <row Id="19074" PostId="7247" Score="0" Text="Another argument in favor of apprenticeship." CreationDate="2022-01-20T21:02:49.797" UserId="5349" />
  <row Id="19085" PostId="7250" Score="3" Text="I'm not sure that there exists a &quot;best programming language&quot;.  What are your goals?" CreationDate="2022-01-24T05:31:41.883" UserId="27" />
  <row Id="19086" PostId="7250" Score="4" Text="Most ppl start with [blub](http://www.paulgraham.com/avg.html).  Most ppl dont know they are starting with blub. That's the mechanism that ensures why most start and stay with blub" CreationDate="2022-01-24T07:12:46.307" UserId="8837" />
  <row Id="19087" PostId="7250" Score="0" Text="See [TIOBE Index](https://www.tiobe.com/tiobe-index/). Note it does not cover applications like databases and technologies like containers but probably should. Also I program in Prolog which is [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity); once you use this feature you really don't want to touch another language that does not have it." CreationDate="2022-01-24T08:41:09.543" UserId="2516" />
  <row Id="19088" PostId="7250" Score="0" Text="Chose a language that will maximize learning. Not one that you will see on a job advert. By doing this you will get to your goal quicker." CreationDate="2022-01-24T13:57:05.983" UserId="204" />
  <row Id="19089" PostId="7250" Score="0" Text="@Rusi thanks, that explains a lot. I think I will have another look at LISP. I learnt a lot from it last time, but now realise that there is a lot more to learn." CreationDate="2022-01-24T14:18:22.283" UserId="204" />
  <row Id="19090" PostId="7250" Score="0" Text="@ctrl-alt-delor, note that the varieties of LISP are quite different. The linked article recommends Common Lisp. Scheme is quite different in some important ways. LISP is a family of languages, not a language." CreationDate="2022-01-24T14:21:50.643" UserId="1293" />
  <row Id="19091" PostId="7250" Score="0" Text="@ctrl-alt-delor Beware! Its easier to get Paul Graham wrong than right.  To wit: Its easier to see lisp as a *technology* than as an *idea*.  PG himself adumbrates it with the quip: *When people tell me that lisp is obsolete I ask them if quicksort -- same age as lisp -- is obsolete.*" CreationDate="2022-01-24T14:26:02.403" UserId="8837" />
  <row Id="19093" PostId="7250" Score="2" Text="Beware! The second language is the hardest! Because you learned Java first, you will have unknowingly acquired a prejudice for Java. You will think that the way Java works is The Natural Way. You will think that the patterns used by Java programmers are The Natural Way. Your next language will seem strange—wrong even. But there are many ways, which is part of the reason why there are many languages." CreationDate="2022-01-24T15:17:11.610" UserId="1269" />
  <row Id="19094" PostId="7250" Score="1" Text="@ctrl-alt-delor, In another essay, Mr. Graham argued that the evolution of modern programming languages is converging on LISP-equivalence. You may find less novelty in LISP today than a programmer from twenty or thirty years ago would have found." CreationDate="2022-01-24T15:27:12.427" UserId="1269" />
  <row Id="19098" PostId="7250" Score="0" Text="At what level are you studying currently? High School or University? If university, are you a first-year?? Note that there is a good chance to reopen this if you say a bit more about your needs and goals." CreationDate="2022-01-24T16:10:01.433" UserId="1293" />
  <row Id="19099" PostId="7250" Score="0" Text="This question has been closed.  OP, please edit it to provide more detail.  *What are your goals?*" CreationDate="2022-01-24T16:16:44.557" UserId="27" />
  <row Id="19118" PostId="7250" Score="0" Text="Your school only teaches Java? Sounds like a lousy school (unless it's a high school or grade school)." CreationDate="2022-01-26T18:52:05.590" UserId="283" />
  <row Id="19092" PostId="7251" Score="3" Text="To be fair, I have yet to meet any fresh graduate (or even experienced dev) who actually knows &quot;one of each of these kinds&quot;. Don't get me wrong, it's a good list, but a student will need to pick and specialize a bit. (which sort of brings them back to square one - should they learn verilog or Java+android, with an answer of &quot;whatever you see yourself liking more&quot;)." CreationDate="2022-01-24T15:01:17.637" UserId="543" />
  <row Id="19095" PostId="7251" Score="0" Text="I'm missing the mobile app part, but other than that I could check all those after graduating but I went from CS BSc to computer engineering MSc and hat a lot of jobs on the side." CreationDate="2022-01-24T16:00:28.927" UserId="11138" />
  <row Id="19096" PostId="7251" Score="1" Text="So my list would be something like: Ruby, C++, PostgreSQL, bash, Haskell, qt, RoR, Ogre, C, --, Verilog/VHDL, Piet." CreationDate="2022-01-24T16:01:57.337" UserId="11138" />
  <row Id="19155" PostId="7257" Score="0" Text="Interesting post, but I was not intending that students should learn about or even *care* about efficiency by learning a bit about how the machine works at the beginning. It would be just: &quot;*Here is how the CPU runs instructions, **it's not magic**. Any questions? Good...*&quot; Then they have the **Notional Machine** that clears up any possible confusion about variables, assignment and indirection, so those will never give them a problem again. Inoculate them against all these ills the first day. Any questions? Good..." CreationDate="2022-01-30T18:10:45.667" UserId="5349" />
  <row Id="19162" PostId="7257" Score="0" Text="I'll look at the update and language references. I still just feel that there is something *schizophrenic*, something *reality-denying* about trying to sprout wings and fly away from the fact that a computer is an **electrical machine**. As long as you sneak that in before everything else, and make sure everyone gets it, I'll accept your experience and authority to pile things on top. Without it, your students are &quot;lost in space&quot;, in my opinion." CreationDate="2022-01-31T11:59:19.997" UserId="5349" />
  <row Id="19177" PostId="7257" Score="0" Text="For FP, abstraction is not a positive. [See](https://cseducators.stackexchange.com/a/7262/8837)" CreationDate="2022-02-01T03:31:03.947" UserId="8837" />
  <row Id="19146" PostId="7258" Score="2" Text="Since they are freshmen, can you ask current sophomores or juniors who took the class in the past what was done?" CreationDate="2022-01-30T14:19:57.603" UserId="27" />
  <row Id="19149" PostId="7258" Score="0" Text="@BenI. I actually did, but my predecessor kinda neglected the course entirely... the assignments he had were fully theoretical and didn't come close to what was promised to the students." CreationDate="2022-01-30T15:42:56.053" UserId="8867" />
  <row Id="19240" PostId="7258" Score="0" Text="What kind of hardware can the school provide for the students to work with? That may be the biggest factor because if the answer is &quot;none&quot; or &quot;we have all these workstations but you can't change anything&quot; then it becomes all &quot;virtual&quot;." CreationDate="2022-02-03T20:37:40.623" UserId="2460" />
  <row Id="19241" PostId="7258" Score="0" Text="@manassehkatz-Moving2Codidact  don't have any insight in to the budget, but a few hundred euro's should be possible." CreationDate="2022-02-03T20:41:47.463" UserId="8867" />
  <row Id="19242" PostId="7258" Score="0" Text="If it is a few hundred Euros per group of 3 students, then there is likely quite a bit you could do using Raspberry Pis or similar tiny machines + some IO devices/sensors/etc. Sounds interesting. Closest I had was as a junior (I think) where we got to use pairs of brand new IBM PC ATs to write our own bare-bones networking software with interprocess/networked message passing, etc. Those were the days..." CreationDate="2022-02-03T20:51:01.950" UserId="2460" />
  <row Id="19243" PostId="7258" Score="1" Text="@manassehkatz-Moving2Codidact already got 4 pies with some sensors but well nothing i know of for them to do with them xD Also got some severs even :|" CreationDate="2022-02-03T20:53:22.500" UserId="8867" />
  <row Id="19147" PostId="7259" Score="0" Text="If you look at Linux running... Lets see... from desktops to Android to most of the world's cloud servers to random devices IOTs modems... etc, Linus Torvalds is arguably the world's greatest programmer. And this is his view of C++ http://harmful.cat-v.org/software/c++/linus . Ten years on he seems to not have changed his mind https://medium.com/nerd-for-tech/linus-torvalds-c-is-really-a-terrible-language-2248b839bee3 .Do I believe Linus???  That's a non-trivial question and you will have to ask it with some care and research to get good answers.  If you dont your questionsstart getting closed" CreationDate="2022-01-30T14:56:57.480" UserId="8837" />
  <row Id="19148" PostId="7259" Score="0" Text="@Rusi : But in my case i prefer the languages  which is best in there fields/use . for example we use python for DS , ML etc.  And also use its framework for backend web development .On the other hand we use Java or Swift for app Development . and most of programmer who prefer me to learn C++ as a beginner and for DSA ." CreationDate="2022-01-30T15:07:06.953" UserId="11579" />
  <row Id="19150" PostId="7259" Score="2" Text="What are your actual goals. Do you want to just become a developer or do you want a deep understanding of computing in all of its facets?  Is your goal graduate school and beyond or not?" CreationDate="2022-01-30T15:55:46.063" UserId="1293" />
  <row Id="19151" PostId="7259" Score="1" Text="@Buffy : yes I want deep understanding  of computing !!!" CreationDate="2022-01-30T16:00:42.467" UserId="11579" />
  <row Id="19156" PostId="7259" Score="0" Text="@Rusi What I've read of Linus' comments on C++ can be said of any high-level language/process/anything: it introduces useful features which everyone can understand, but which inevitably are not perfectly suited to every scenario to which they are applied, so there is always dissonance. The fact that everyone and his dog can use those features and that you don't have to re-implement them for each and every project is a massive practical benefit that he clearly values less than his performance considerations. Personally, I would encourage people to ignore such debates when learning." CreationDate="2022-01-31T08:28:10.243" UserId="1333" />
  <row Id="19157" PostId="7259" Score="0" Text="You — we all — are free to choose our favorite desiderata (and bugbears) @VisualMelon. But you are misrepresenting Linus views as *performance considerations*, when he makes it clear that he dislikes C++ because «**C++ leads to really really bad design choices**».  I am not remotely in the same league as LT. And I am sure there are many great C++ programmers who would give strong arguments to him re C++. But I am teacher who's taught for decades. And I can vouch for the LT observation from the pedagogical side: **C++ early spoils kids**" CreationDate="2022-01-31T08:45:50.973" UserId="8837" />
  <row Id="19158" PostId="7259" Score="0" Text="@Rusi perhaps I am, for which I would apologise (to mention performance wasn't meant as a negative remark: it _is_ a real concern, but the point like any concern it is one among others, and without a serious project they cannot always be weighed); I must say I was unsure what your original comment is getting at, and personally I wouldn't point a newbie at that sort of thing (by LT or anyone else): I'd welcome some expanded discussion on the learning side of things in one of your full answers (reading back I'm not sure how much the OP knows already, and I was probably under-estimating it)." CreationDate="2022-01-31T09:03:58.347" UserId="1333" />
  <row Id="19159" PostId="7259" Score="0" Text="@VisualMelon Happy for a fuller discussion on some other q/as here! Regarding exchange with *this OP* see this recent comment thread https://cseducators.stackexchange.com/q/7252/8837. And if thereafter you feel something is still inappropriate/out-of-line I'd like to know!" CreationDate="2022-01-31T09:10:35.537" UserId="8837" />
  <row Id="19160" PostId="7259" Score="1" Text="@Rusi sorry, I hope I didn't come across meanly, certainly nothing inappropriate! My own experience is that such discussions can confuse and disenchant beginners (regardless of their merit), but I don't have anything like the teaching experience you do." CreationDate="2022-01-31T09:20:41.627" UserId="1333" />
  <row Id="19152" PostId="7260" Score="0" Text="yes you are right but which  resource is for learn new features of C++ ? there is site know as cpp reference but this one is not for me :( because i don't  understand  the concepts form documentation  . can you plz guide me !" CreationDate="2022-01-30T16:26:15.263" UserId="11579" />
  <row Id="19154" PostId="7260" Score="2" Text="The books by Stroustrup (the author of C++) are good, for instance &quot;Programming, principles and practices using C++&quot;. However, they are expensive, so I hope your library has them. You can also check out my book: https://tinyurl.com/vle322course" CreationDate="2022-01-30T17:18:29.503" UserId="6346" />
  <row Id="19164" PostId="7261" Score="0" Text="Eiffel  ? can you plz explain what is this ? btw I know the concepts of OOP but I don't know about modern C++ ." CreationDate="2022-01-31T14:46:39.643" UserId="11579" />
  <row Id="19165" PostId="7261" Score="0" Text="`Eiffel` is an OO language. When you have used it, you will realize that `java` is not real OO. (smalltalk is another interesting OO)  It compiles to `C`. It is fast. It is easy to learn. It is easy to use. It is powerful." CreationDate="2022-01-31T14:50:43.497" UserId="204" />
  <row Id="19166" PostId="7261" Score="0" Text="much batter then C++ . ?  : |" CreationDate="2022-01-31T14:54:31.947" UserId="11579" />
  <row Id="19279" PostId="7261" Score="1" Text="Eiffel... Yeah it's a good reminder.  70-80s Pascal was the de facto teaching language. 80s shifted to scheme.  Eiffel never became as big as these but it (was) still a good teaching language in the 90s.  Post 2000 everyone's jumped onto some industry omnibus such as Java, Python, C++. And this baby — to teach programming one needs a *teaching oriented* language — is forsaken and destitute" CreationDate="2022-02-05T14:12:37.117" UserId="8837" />
  <row Id="19169" PostId="7262" Score="0" Text="The above gives an FP view of FP&#xA;One could also make a C view of FP&#xA;ie start with a C program as a C programmer would write&#xA;Then gradually FP-ize it.&#xA;If this is deisred I'll add one such example" CreationDate="2022-01-31T16:31:32.453" UserId="8837" />
  <row Id="19289" PostId="7262" Score="1" Text="I would love such an example." CreationDate="2022-02-07T19:45:54.847" UserId="27" />
  <row Id="19290" PostId="7262" Score="0" Text="Perhaps it would have to be a second Answer? I once asked a Question about recasting Asp.Net as more OO." CreationDate="2022-02-07T23:29:29.513" UserId="5349" />
  <row Id="19172" PostId="7263" Score="0" Text="You say &quot;but remember - nowadays C++ is not really used as a more powerful C.&quot; And I say, any time someone says &quot;remember&quot; they are about to say something completely unsubstantiated. Case in point: I write a lot of stuff that I could write in C, but C++ 1. has automatic memory management, so no leaks 2. parameter passing without having to count &quot;**&quot;s. Seriously, how do you teach students to write a routine that outputs a malloc'ed array in a parameter? 3. Arrays know how long they are through &quot;.size()&quot;. 4. The copy constructor. In C you have to write your own copy routine. Horrors. Etc." CreationDate="2022-01-31T21:09:07.173" UserId="6346" />
  <row Id="19173" PostId="7263" Score="1" Text="&quot;GUI application [versus] console game for the 5th time.&quot; There is more to life than graphics and games. I teach &quot;scientific programming&quot;, and my students do stuff like infectuous disease propagation, delivery truck planning, climate change, et cetera. (At the end of their first semester.) All of those require substantial programming, and with no ancillary libraries. If they want to visualize something, they pipe their numbers into some simple graphing tool. I guess it depends on your audience. Just don't think that your audience is representative. Mine isn't either, but I don't generalize." CreationDate="2022-01-31T21:14:31.760" UserId="6346" />
  <row Id="19174" PostId="7263" Score="0" Text="@VictorEijkhout there are no universal points that hold true for every single instance, although by &quot;nowadays C++ is not really used as a more powerful C&quot; I didn't mean that C++ cannot replace C in certain areas. It can, just as you explained. But many people tend to treat C++ as the same hell with `**`s and lack of memory safety, *but with classes and templates*. This is what I meant by &quot;more powerful C&quot;. C++ is not C. It's not an add-on. It's a completely distinct language in which you need a different mindset to program compared to C. And I feel like you proved my point in your comments :)" CreationDate="2022-01-31T21:35:45.253" UserId="11453" />
  <row Id="19175" PostId="7263" Score="0" Text="Ok, if you're talking about &quot;C with classes&quot;, yes, that is pretty much universally recognized as a bad idea. See Kate Gregory's &quot;Stop Teaching C&quot; talk. I see you've edited your answer to clarify, so I guess we agree. Except that I think C++ is great for getting close to the hardware, on anything but a Linus Torvalds level. I do my bandwidth/associativity/false sharing epxeriments all in C++. It's just easier to write for the reasons given. So I'm far less down on C++ than you are. But I'll grant you the network/graphics/package manager points. That's why I also speak python." CreationDate="2022-01-31T21:52:46.913" UserId="6346" />
  <row Id="19176" PostId="7263" Score="0" Text="I've seen &quot;Stop Teaching C&quot; around 5 times. It's a great talk! I also agree that C++ is great for getting close to the hardware. I just don't think that if the goal is to teach hardware interaction, it is wise to choose C++ over C and bring the whole complexity package with it. My high-level language of choice is Kotlin. Have done some serious things in Python and dynamic typing seems to not really be my thing :)" CreationDate="2022-01-31T22:07:31.600" UserId="11453" />
  <row Id="19179" PostId="7263" Score="0" Text="@Fureeish : can you tell me how C++ is close with hardware  as compare to python ?" CreationDate="2022-02-01T11:25:29.283" UserId="11579" />
  <row Id="19192" PostId="7263" Score="1" Text="@Hamza C++ *can* be very close to the hardware. Python *is* very far from it - by design. C++ has *language features* that enable you to interact with hardware directly, but Python needs *library features* to do the same. What's more, those libraries that Python relies on are usually written in C or C++!" CreationDate="2022-02-01T18:53:41.750" UserId="11453" />
  <row Id="19523" PostId="7263" Score="0" Text="@VictorEijkhout &quot;C with classes&quot; is substantially better than &quot;C without classes&quot;." CreationDate="2022-03-31T13:51:57.203" UserId="4529" />
  <row Id="19185" PostId="7265" Score="0" Text="can i learn DSA ? for logic building and memory management ? after learning these 8 concepts ?" CreationDate="2022-02-01T16:36:42.290" UserId="11579" />
  <row Id="19186" PostId="7265" Score="0" Text="What is DSA? If that's a specific application, then of course you're free to learn it." CreationDate="2022-02-01T16:54:09.903" UserId="6346" />
  <row Id="19187" PostId="7265" Score="0" Text="Data structure and algorithm !!" CreationDate="2022-02-01T17:06:48.993" UserId="11579" />
  <row Id="19188" PostId="7265" Score="0" Text="@Hamza you can not study &quot;dsa&quot; independent of the language. For instance, pointers are the best illustration of trees. If you learn about complexity and you want to measure runtimes you need `chrono`. Other example: In engineering applications, the most common data structure is an array. But the algorithms take a whole math/physics class.  So again, you can not study DSA by itself." CreationDate="2022-02-01T17:13:31.190" UserId="6346" />
  <row Id="19189" PostId="7265" Score="1" Text="means first i now the concepts of `pointer` , `chrono` etc then i start learning DSA ?" CreationDate="2022-02-01T17:33:39.250" UserId="11579" />
  <row Id="19180" PostId="7266" Score="1" Text="Are you asking for input for a &quot;first course&quot; that uses FP or for the situation where the students have already studied computing in another paradigm?" CreationDate="2022-02-01T15:28:36.367" UserId="1293" />
  <row Id="19181" PostId="7266" Score="0" Text="@Buffy Either. I've outlined a sequence of exercises in my &quot;from zero&quot; class. What would a corresponding sequence be in FP and would it make any difference. My second scenario is one of the suggested end-of-semester coding projects, so feel free to suggest the sort of project that would be doable better in FP for a student with a semester of coding behind them." CreationDate="2022-02-01T16:06:29.557" UserId="6346" />
  <row Id="19182" PostId="7266" Score="0" Text="Actually, I think he answers would be very different. Learning a first paradigm is much easier than changing paradigms." CreationDate="2022-02-01T16:11:29.053" UserId="1293" />
  <row Id="19183" PostId="7266" Score="0" Text="@Buffy I see what you're saying. I wasn't actually much thinking about changing paradigms, more: what would good assignments be at two different levels of difficulty." CreationDate="2022-02-01T16:14:20.057" UserId="6346" />
  <row Id="19193" PostId="7266" Score="1" Text="The 'infection' assignment sounds interesting, have you seen the old Atari game Agent USA?" CreationDate="2022-02-01T23:06:37.147" UserId="5349" />
  <row Id="19194" PostId="7266" Score="0" Text="@ScottRowe No, why?" CreationDate="2022-02-01T23:29:59.450" UserId="6346" />
  <row Id="19195" PostId="7266" Score="1" Text="It was a teaching game, one of the few video games I thought was worth playing. It has a metaphor of an infection that the player is trying to defeat, so I thought of it from your assignment idea. I have never heard of anyone else using that example in an assignment, but perhaps I am ignorant." CreationDate="2022-02-01T23:39:10.677" UserId="5349" />
  <row Id="19184" PostId="7267" Score="1" Text="Please clarify: those five introductory steps, would they be handled differently in an OO paradigm, or would it be a case of same-approach-different-syntax? And yes, I realize that step 4 is &quot;stateful&quot;. How *would* you approach that in FP?" CreationDate="2022-02-01T16:17:06.420" UserId="6346" />
  <row Id="19199" PostId="7267" Score="0" Text="@VictorEijkhout I hope I clarified!" CreationDate="2022-02-02T04:40:24.123" UserId="27" />
  <row Id="19202" PostId="7267" Score="0" Text="At the level that my students code, having a `nextprime` function that takes an int and gives an int would be fine. However, conceivable, a stateful `primegenerator` object could retain history to be more efficient than that. Is there an FP way out of that?" CreationDate="2022-02-02T17:16:01.777" UserId="6346" />
  <row Id="19204" PostId="7267" Score="0" Text="@VictorEijkhout Yes, absolutely.  Pass your state (such as your list of primes) as a parameter to your next function call.  This is why stateful calculation is not FPs strongest suit.  Passing state like this will also prevent some compiler optimizations such as automatic memoization (a big advantage that stateless languages can provide).  In general, the reason that compiled Haskell code is most comparable to C is because they take really excellent advantage of presuppositions that are only safe because of statelessness." CreationDate="2022-02-02T20:28:24.423" UserId="27" />
  <row Id="19205" PostId="7267" Score="0" Text="@VictorEijkhout That said, if your compiler *does* do automatic memoization, you might find that passing state the way I describe actually provides no benefit at all, since your prior results will already not need to be recalculated.  I'm sure Rusi would know more about this part than me." CreationDate="2022-02-02T20:31:26.737" UserId="27" />
  <row Id="19206" PostId="7267" Score="0" Text="Thanks. But passing state explicitly is the sort of uglyness that OO languages elegantly solve by keeping it internal. Automatic memoization: never thought of it as a compiler technique, though it's conceivable. In extremely simple cases. I think compiler optimization are rather the stateless type: they can reason when instructions can be executed in a different order from specified (because they are independent) to make them more efficient. Btw, that's another reason I don't like FP languages: if you formulate everything recursively you're throwing up roadblocks for compiler optimizations." CreationDate="2022-02-02T21:47:49.847" UserId="6346" />
  <row Id="19207" PostId="7267" Score="0" Text="@VictorEijkhout In FP, statements can be executed in almost any order. It makes it very easy to parallel process, and automatic memoizing is a real thing. I think you're backwards about the compiler optimisations, though. We're writing code that seems like it should be much slower, and winding up with close-to-c speeds because statelessness triviality allows for compiler optimizations that no imperative compiler could ever automatically perform." CreationDate="2022-02-03T00:02:02.413" UserId="27" />
  <row Id="19209" PostId="7267" Score="0" Text="I think we should stop the discussion. Move to chat or find my email. But I don't believe for a second that FP code can be competitive in speed or parallelism. I understand the argument, I just don't buy it. Does a Haskell compiler do loop exchange to increase cache usage? Does an FP code have nonzero cache reuse to begin with? Anyway. Let's call it a night. Day. Whatever." CreationDate="2022-02-03T00:30:59.297" UserId="6346" />
  <row Id="19210" PostId="7267" Score="0" Text="@VictorEijkhout That's fine.  I'm not even necessarily arguing with you.  I'm not an expert in this area by any stretch.  I just see things like this, and I am perhaps a bit too credulous: https://stackoverflow.com/q/35027952. It could all be exaggerated, and I would not be shocked.  I'm pretty sure that the optimisations are surprisingly good, even if they're not generally what people claim, if only because I regularly see pages like the one I just linked to." CreationDate="2022-02-03T00:47:10.410" UserId="27" />
  <row Id="19246" PostId="7267" Score="0" Text="@victoreijkhout State threading is a (the) fundamental use case why Haskell uses monads: classic prehistory paper https://www.microsoft.com/en-us/research/wp-content/uploads/1993/01/imperative.pdf (there's much packed into the cute title)" CreationDate="2022-02-04T03:15:17.443" UserId="8837" />
  <row Id="19248" PostId="7267" Score="0" Text="When I talk of &quot;conspective view&quot; the first and most obvious thing I'm throwing out the window is efficiency. Efficiency is not unimportant mind you (even in my book ) But if we don't reasonably **separate** efficiency questions from existential ones the conversation soon becomes confused and pointless. In short we need to have *three separate* conversations: (1) existential (2) efficiency (3) why rigorously separate the 2. I gave my key efficiency-dictum (I called it &quot;slogan&quot;) here https://cseducators.stackexchange.com/a/7257/8837. Do reflect on it" CreationDate="2022-02-04T03:29:40.877" UserId="8837" />
  <row Id="19190" PostId="7268" Score="0" Text="Thanks for writing this much. Now, overlooking ridiculous statements that some page of Lisp would &quot;cover the field of language implementation&quot; (wish I'd know that before I took a 2 semester compiler writing course!), can you explain that Catelan example? What is `c.[1,2]`? Catelan numbers have one index, not 2 or 3. And why doesn't it output a number? Your syntax is far from self-explanatory to me." CreationDate="2022-02-01T18:14:41.473" UserId="6346" />
  <row Id="19196" PostId="7268" Score="0" Text="I'm afraid I still don't get it. I figured out that `c.[1,2]` was like `c(1,2)`, but why are there 2 or 3 parameters to begin with? Where is the code that says `c.4 =&gt; 75` or whatever it is? And why splitting the list? I don't see any lists in the math, let alone split lists. And what does the `: [Tree.Int]` notation do? Maybe you can use some pseudo notation that gets the idea across without bogging me down in counter intuitive syntax." CreationDate="2022-02-02T02:49:03.713" UserId="6346" />
  <row Id="19197" PostId="7268" Score="0" Text="@VictorEijkhout Check now Heres equivalent python code; shud run in python (3)" CreationDate="2022-02-02T03:17:43.733" UserId="8837" />
  <row Id="19198" PostId="7268" Score="0" Text="@VictorEijkhout «Why are there 2 or 3 parameters?» Theres exactly one list parameter.  Sorry I missed the type of `c`. Type inference is a pleasant luxury; but disconcerting to the onlooker Inserted type of `c` now.  More logical reordering now" CreationDate="2022-02-02T03:36:11.383" UserId="8837" />
  <row Id="19203" PostId="7268" Score="0" Text="@victoreijkhout  Towards reducing the outlandish feel to &quot;cover the field of language implementation&quot; to &quot;be a HelloWorld to the field of language implementation&quot; would it convey something without the feeling of absurdity?" CreationDate="2022-02-02T19:50:33.857" UserId="8837" />
  <row Id="19228" PostId="7268" Score="0" Text="Ok, so why is there a list parameter? C(n) is a function of an integer. Also, your code in either language does not output an integer. So I don't know if it's correct because the code is not &quot;obviously correct&quot;. For instance why does a sum-of-products involve splitting a list? Please have your code print out a number. I get &quot;C_20 = 6564120420&quot; (or maybe that's 19). How long does your program take for that, in seconds? It's a pity I can not paste code blocks in this comment." CreationDate="2022-02-03T18:14:31.107" UserId="6346" />
  <row Id="19229" PostId="7268" Score="0" Text="It *enumerates* the actual trees @victoreijkhout. The first line comment correlates with the Wikipedia entry which it's mirroring" CreationDate="2022-02-03T18:18:05.853" UserId="8837" />
  <row Id="19236" PostId="7268" Score="0" Text="I guess you were leading me astray by showing one formula and then computing something that gives the same result, but with a different computation. I was looking at that sum-of-products and your trees and really not seeing the relation.&#xA;Anyway, that sum of products gets really slow around C17 (on my laptop). Hence my question how long it takes you to compute the actual value of C20. (Since you're creating recursive trees I'm guessing your machine will actually barf before it gives the result. Computing the trees and then enumerating has the right time but wrong space complexity.)" CreationDate="2022-02-03T19:33:12.673" UserId="6346" />
  <row Id="19292" PostId="7269" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/133971/discussion-on-question-by-marcus-what-to-tell-students-that-plagiarised-their-pr)." CreationDate="2022-02-08T20:23:17.143" UserId="27" />
  <row Id="19200" PostId="7270" Score="2" Text="Thank you for your answer. I already submitted my comments to my supervisor. I'm not sure what will happen next, but I hope the other students don't complain too much." CreationDate="2022-02-02T15:08:09.460" UserId="11620" />
  <row Id="19201" PostId="7270" Score="7" Text="@Marcus Follow your supervisor's lead, and don't worry too much about the complaints.  Run responses by your supervisor before you send them out, and make sure that they are present at all meetings.  If a student corners you, tell them that you would be happy to schedule a meeting to discuss it.  The only way you can get yourself into hot water here is if you don't follow your supervisor's lead." CreationDate="2022-02-02T15:15:08.293" UserId="27" />
  <row Id="19208" PostId="7270" Score="12" Text="It's worth also noting that plagiarism specifically &amp; usually [everywhere I've been] falls under Academic Misconduct policies. As such it likely has explicit policy based guidelines for proper handling; for example, for my institution, there's an entire flowchart: https://www.montana.edu/deanofstudents/academicmisconduct/academicmisconduct.html . So, @Buffy definitely has the best way to handle this in the future: to pass your suspicions and related documentation/evidence back to the professor to handle at their discretion, rather than assigning a grade yourself based on suspected plagiarism." CreationDate="2022-02-03T00:27:56.123" UserId="2780" />
  <row Id="19216" PostId="7270" Score="5" Text="At my undergraduate university, a first infraction would result in an automatic 0 for *the entire course*." CreationDate="2022-02-03T15:14:14.710" UserId="1299" />
  <row Id="19217" PostId="7271" Score="2" Text="Unless you're talking about something that's only a couple dozen lines of code, exact duplication except for variable names seems very unlikely. The larger the project, the easier it becomes to recognize plagiarism like this." CreationDate="2022-02-03T15:17:11.123" UserId="1471" />
  <row Id="19219" PostId="7271" Score="2" Text="@Barmar Absolutely agreed.  I assumed that they were different since, in my experience, cheaters usually think to change those (often *only* those!), and because OP didn't mention that they were the same, which would have been a pretty material tell in establishing cheating." CreationDate="2022-02-03T15:36:30.143" UserId="27" />
  <row Id="19220" PostId="7271" Score="1" Text="The OP wrote &quot;Sometimes they change variable names but the implementation as a whole is just too similar. &quot;" CreationDate="2022-02-03T15:50:18.790" UserId="1471" />
  <row Id="19221" PostId="7271" Score="1" Text="Of course, it will usually be a judgement call, but unless you're just talking about a couple of `for` loops, I think it will usually be pretty clear unless the grader is biased." CreationDate="2022-02-03T15:52:20.810" UserId="1471" />
  <row Id="19225" PostId="7271" Score="5" Text="@Barmar I didn't notice that line.  As a crazy aside, one weird variable naming thing I noticed is that students will tend to use whatever variable you use for `for` loops.  If you almost always use `k` as your iterator, so will they.  Same for `i`, `m`, etc.  I once had an entire class of students use the same iterator as is my habit, and caught a cheater because she used a *different* iterator that I've never seen anyone use, which led me to a published solution that I wasn't aware of for the problem I'd given.  (There's no broader lesson there, just a weird thing that happened to me.)" CreationDate="2022-02-03T17:46:01.850" UserId="27" />
  <row Id="19226" PostId="7271" Score="1" Text="Beginners have trouble distinguishing coding requirements from arbitrary choices, so they just copy what they see, as a form of cargo-culting." CreationDate="2022-02-03T17:52:41.210" UserId="1471" />
  <row Id="19227" PostId="7271" Score="0" Text="Although you have to be careful -- the student who didn't copy your habits might just be smart enough to realize that they can use different variables." CreationDate="2022-02-03T17:53:26.927" UserId="1471" />
  <row Id="19230" PostId="7271" Score="6" Text="@Barmar They weren't. They copied a full, published solution, down to the comments, though they managed to cut off the final two `}`s, leaving it unable to compile, and they couldn't solve that problem.  That specific student was... certainly an outlier.  They were one of the causes of my question on this site about whether there are students who can't learn to code." CreationDate="2022-02-03T18:18:45.860" UserId="27" />
  <row Id="19231" PostId="7271" Score="1" Text="Obviously if you found the original it was indeed plagiarism, so the clue worked. But it *could* have been a sign that they actually learned something. I know that's rare, so this is a horse, not a zebra." CreationDate="2022-02-03T18:20:30.757" UserId="1471" />
  <row Id="19262" PostId="7271" Score="0" Text="@BenI. When I was a CS TA, dealing with classes of 250+ students, we ran all submissions through a utility which compared them *semantically* to flag potential cheaters (humans still had final say over the tool - it just pointed out likely copying).  So changing variable/function names would not fool it.  As a test, and knowing roughly how the utility works, I tried copying one of the better submissions and seeing how much I had to change in order to not be flagged - it took quite a bit of work - to the point where if you know enough to fake it, you should be able to just do it for real." CreationDate="2022-02-04T18:08:19.110" UserId="11641" />
  <row Id="19263" PostId="7271" Score="0" Text="@DarrelHoffman I've always been interested in using a system like that.  I never quite got around to setting up MOSS.  I'd assume that those kinds of tools work better on larger labs, while for small prompts, there would be many false flags." CreationDate="2022-02-04T18:12:19.763" UserId="27" />
  <row Id="19267" PostId="7271" Score="0" Text="For sure, we didn't use it on simple assignments, but that was really only the first one (a glorified &quot;Hello World&quot;).  Most assignments were complex enough to have any number of valid approaches, so 2 students solving it in the exact same way (semantically) would indeed be a pretty likely case of copying.  But most cheaters were not sophisticated enough to try changing names or even comments - we caught many people due to copied *whitespace*.  One had a comment at the top that was stolen from a previous student, then a fellow TA - with his name still in the comment.  Fun times." CreationDate="2022-02-04T19:54:21.110" UserId="11641" />
  <row Id="19269" PostId="7271" Score="0" Text="@DarrelHoffman Whoa, a TA provided his work to a current student? Crazy! What did the prof do???" CreationDate="2022-02-04T20:12:59.010" UserId="27" />
  <row Id="19270" PostId="7271" Score="0" Text="The TA was innocent, his code had been provided as an example in another class by a different professor - not realizing that the same assignment was being given to this one.  Lack of communication on their parts.  It led to an effort to stop reusing assignments from one year to the next, but coming up with new ones every semester takes a lot more work." CreationDate="2022-02-04T20:17:21.340" UserId="11641" />
  <row Id="19280" PostId="7271" Score="1" Text="If someone is not smart enough to edit the comments, I can't imagine how they think they could manage to code. What *is* the thought process behind this? Maybe wage pressure is more of a problem than we realize? I was so glad to finally finish college and start working!" CreationDate="2022-02-05T16:47:01.030" UserId="5349" />
  <row Id="19282" PostId="7271" Score="2" Text="@ScottRowe Those kids don't even look at the comments. They've learned that it's not part of the code, and they've become afflicted with Comment Blindness.  I know that they're cheating, but I also find it kind of cute " CreationDate="2022-02-05T20:38:50.657" UserId="27" />
  <row Id="19214" PostId="7272" Score="2" Text="Seems you have a problem similar to Sal who started Khan Academy. Perhaps you should do what Sal did, focus on clearly explaining each topic as they come up. If Khan academy already has the topic covered and you can not add more value to it then just point the student to the topic link." CreationDate="2022-02-03T08:15:09.157" UserId="2516" />
  <row Id="19235" PostId="7273" Score="1" Text="Thanks for this incredibly thoughtful and helpful response!" CreationDate="2022-02-03T19:29:59.270" UserId="11621" />
  <row Id="19238" PostId="7273" Score="1" Text="@VicinNewYork Aw, thank you!!" CreationDate="2022-02-03T19:50:00.063" UserId="27" />
  <row Id="19224" PostId="7274" Score="11" Text="Great answer. Though I think &quot;execute any students&quot; is a bit harsh :-)" CreationDate="2022-02-03T16:37:37.720" UserId="2460" />
  <row Id="19239" PostId="7274" Score="0" Text="@manassehkatz-Moving2Codidact Sounds a bit *lenient* to me, but I dealt with some rather persistent plagiarists when I was a TA, which may have skewed my perspective. :-)" CreationDate="2022-02-03T20:33:11.147" UserId="827" />
  <row Id="19250" PostId="7274" Score="1" Text="Some of my university courses asked us on assignments to declare any classmates we discussed the assignment with. I guess this gives the instructor advance notice in case some solutions look similar, instead of the instructor needing to discover that from scratch." CreationDate="2022-02-04T05:23:45.993" UserId="891" />
  <row Id="19211" PostId="7275" Score="3" Text="V good answer. I was thinking of making similar but thought it too scandalous. Copying/non-reinventing  is a software-engineering **positive**. (Modulo licences etc) It's deleterious effects are remote from morality -- student is **evil**. More of a logistical question : In the face of copying how to evaluate/grade? Once that is recognized the next step is patent : copying represents not failure of student but of system. Dijkstra said it; I've generally followed: One big reason to eschew mainstream omnibus languages is precisely to obviate the *cut-paste from stackoverflow* bug" CreationDate="2022-02-03T04:59:06.277" UserId="8837" />
  <row Id="19212" PostId="7275" Score="2" Text="I liked the quote in ur profile: Don't reinvent the wheel, realign it! That said the teacher's task is non trivial. Children need to reinvent... Electrical with mechano, buildings with Lego .... They need to step thru Pythagoras' proof even if that doesn't make them Pythagoras. Not invalidating any of above. Just reasserting: To he effective, academics needs to be in a walled garden; not just evaluating but teaching also" CreationDate="2022-02-03T05:41:14.143" UserId="8837" />
  <row Id="19213" PostId="7275" Score="3" Text="It was too hard to escape the irony of learning to NOT copy code, only to find commercially it is practical on a number of levels to copy existing documented code patterns. Realistically understanding how to research APIs and best practices and when to copy code can be a great skill itself." CreationDate="2022-02-03T06:27:02.940" UserId="11481" />
  <row Id="19222" PostId="7275" Score="3" Text="@ChrisSchaller I've actually had a senior officer in the company ask me why programmers were writing their own code and not just copying it off the internet." CreationDate="2022-02-03T16:01:59.907" UserId="3698" />
  <row Id="19249" PostId="7276" Score="0" Text="Kinda a weird question to ask on SE... +1. Say, &quot;Good job, just like in the real world.&quot; ?" CreationDate="2022-02-04T04:16:13.980" UserId="4158" />
  <row Id="19253" PostId="7276" Score="0" Text="@stighemmer &quot;If they can explain it, they have cooperated. If they can't, they have plagiarized.&quot; Yes! (Ooops! Did I plagiarize your comment? Ah, well)" CreationDate="2022-02-04T13:54:47.007" UserId="8155" />
  <row Id="19252" PostId="7277" Score="1" Text="&quot;Do you to get students punished by the uni for their behavior? They may get suspended or expelled which hurts their education and future prospects.&quot;  This is not exactly untrue, but it is a twisted way of thinking about it. Who broke the rules in spite of being made very aware of the consequences? There are consequences to actions determined by the institution *that the students agreed to when they matriculated*.  You may choose to have mercy, but you make it sound like the instructor (as a representative of the school) should feel *culpable* for enforcing the rules. They should not." CreationDate="2022-02-04T13:23:37.243" UserId="27" />
  <row Id="19268" PostId="7280" Score="1" Text="I really wish you would define your syntax. &quot;pE :   [a] → [[a]]&quot; means &quot;for a given element a, the list with single element a is mapped into the list with as element the list of a&quot;. Yes? You're being about 200% too metaphorical in your notation. I can sort of imagine what it means, but not really. Or maybe this is standard notation, but in an area that I don't know about." CreationDate="2022-02-04T20:05:38.880" UserId="6346" />
  <row Id="19271" PostId="7280" Score="0" Text="Yeah, I could never be a mathematician. Parents wanted me to go in to EE, but the mathness was a little bit too much. I just watched an old music video where they showed a coffee pot as surfaces of revolution and I burst in to tears: *so beautiful!* So the FP stuff is also ravishing, and not for me." CreationDate="2022-02-04T22:52:13.223" UserId="5349" />
  <row Id="19278" PostId="7280" Score="0" Text="Comments at chat : https://chat.stackexchange.com/rooms/59174/the-classroom" CreationDate="2022-02-05T09:28:45.647" UserId="8837" />
  <row Id="19600" PostId="7280" Score="0" Text="@VictorEijkhout: `pE : [a] → [[a]]` is just standard typing syntax in almost any arbitrary functional programming language. It would be legal (or almost legal) in Gofer, Haskell, ML, Standard ML, OCaml, F#, Elm, Idris, and many others and immediately recognizable to a Scala programmer as well. It means &quot;`pE` is a function from list-of-`a`s to list-of-lists-of-`a`s&quot;, where `a` is a type parameter, IOW `pE` is a parametrically polymorphic function. It is really *the* standard way to write a function type." CreationDate="2022-04-10T11:05:21.770" UserId="945" />
  <row Id="19605" PostId="7280" Score="0" Text="@JörgWMittag (Since you're a couple of months late to the party). Here's the link to the longer chat ensuing from here https://chat.stackexchange.com/transcript/59174/2022/2/5" CreationDate="2022-04-11T15:14:41.007" UserId="8837" />
  <row Id="19314" PostId="7284" Score="0" Text="+1 To be unbalanced is one feature of being human . But CS has it worse than elsewhere because no one agrees on a core/canon of the subject. Note: «How much math?» And «What **kind** of math?» are v v different questions. V V often mixed up. Your unfortunate experience is from the &quot;More is Better&quot; camp with no one stopping to ask &quot;More of **what**?&quot; Here's a striking quote I recently found on Math-SE to illustrate: *Geometry is to encourage thinking; Algebra is to avoid thinking*" CreationDate="2022-02-12T05:40:39.947" UserId="8837" />
  <row Id="19320" PostId="7284" Score="0" Text="I think people learn to program by programming, and all the math hoo-ha is people with too much time on their hands caught up in world-building. &quot;*But the real work is being done outside, by someone digging in the ground.*&quot; (Rumi)" CreationDate="2022-02-12T14:42:21.113" UserId="5349" />
  <row Id="19322" PostId="7284" Score="0" Text="Well, to be fair, the whole program was devised as a &quot;we need programmers for the math department&quot;. Didn't work out so well... 20 years later and the math department still won't acknowledge that the needs might have shifted and still holds on to the &quot;if you are going to learn maths, you need to do it the proper way&quot;. Which again, is a fair point, IF all your graduates are going to be working on numerical simulations or computer algebra systems or whatever. But basically no one did." CreationDate="2022-02-14T10:35:41.453" UserId="11138" />
  <row Id="19323" PostId="7284" Score="0" Text="Also &quot;what kind&quot; might be a bit misleading. I didn't mean Algebra vs. Geometry or anything like that. But rather &quot;how&quot;. The strictly mathematical method of: definition - theorem - proof - (corollary/lemma/proposition) vs. a more application specific &quot;here is how you solve a PDE and this is how you calculate a coordinate transformations matrix." CreationDate="2022-02-14T10:42:33.903" UserId="11138" />
  <row Id="19329" PostId="7284" Score="0" Text="The relation between math &amp; CS **is always** fraught. How old is the word &quot;compute&quot;?  &quot;Variable&quot;? Etc What is their &quot;provenance&quot;?  **UNTIL TURING** a comput-er was a mathematician doing a computation. Turing's contrib was to home into the mechanizable aspects. So CS= math is an error but minor compared to CS= hw engineering" CreationDate="2022-02-15T15:04:00.403" UserId="8837" />
  <row Id="19330" PostId="7284" Score="1" Text="As for the theorem-lemma-proof style it's probably much more culture dependent than ppl realize. Ramanujan did almost none of it. He's one of the all time great mathematicians. And **as far as he was concerned** the supreme Goddess was dictating the results in his dreams. What does that mean? How do *we* replicate that?? No idea! But one thing is absolutely clear: He was not following the standard math-paradigm. Which inexorably means that the standard paradigm is only contingently but not necessarily related to actual math" CreationDate="2022-02-15T15:11:57.263" UserId="8837" />
  <row Id="19331" PostId="7284" Score="0" Text="@Rusi It seems that we each worship a different Goddess." CreationDate="2022-02-15T16:51:59.103" UserId="5349" />
  <row Id="19332" PostId="7284" Score="0" Text="@ScottRowe I'd sure love to have her phone number!" CreationDate="2022-02-15T17:08:48.027" UserId="8837" />
  <row Id="19337" PostId="7284" Score="0" Text="@Rusi, Not a notification I was expecteing on a post in CSE ;)" CreationDate="2022-02-16T07:47:06.073" UserId="11138" />
  <row Id="19339" PostId="7284" Score="0" Text=" Continuing on chat https://chat.stackexchange.com/rooms/59174/the-classroom. Pls join if you like" CreationDate="2022-02-16T13:00:20.103" UserId="8837" />
  <row Id="19324" PostId="7285" Score="1" Text="Interesting, nice to see things like Boolean operations substituting for the ? operator. I found a good use for the comma operator once, so I could invoke a macro in place of a function call. Thanks for going to the effort of creating the example!" CreationDate="2022-02-14T19:56:35.127" UserId="5349" />
  <row Id="20842" PostId="7285" Score="1" Text="@Rusi Thanks! Really enjoyed this explanation." CreationDate="2022-10-23T06:07:15.670" UserId="12383" />
  <row Id="20843" PostId="7285" Score="1" Text="Tnx @TaimoorZaeem for reminding me to this old discussion!  Our paper on teaching recursion FP style was just published in [IEEE-FIE](https://www.fie2022.org/detailed-program/). Methinks I should include it here..." CreationDate="2022-10-23T08:34:24.757" UserId="8837" />
  <row Id="20845" PostId="7285" Score="1" Text="Just noticed you're a student @TaimoorZaeem! You may find my other answers on functional prog useful.  Eg https://cseducators.stackexchange.com/a/7257/8837 ... Nearing 40 years now doing/teaching FP!" CreationDate="2022-10-23T11:37:41.690" UserId="8837" />
  <row Id="20846" PostId="7285" Score="0" Text="@Rusi Thank you so much for this." CreationDate="2022-10-23T13:15:14.047" UserId="12383" />
  <row Id="19335" PostId="7286" Score="0" Text="The image of each person taking out a notepad just reminds me of Dr Seuss somehow. He had some things that were self-referential in his stories, I think. Very visual and memorable." CreationDate="2022-02-16T02:23:42.097" UserId="5349" />
  <row Id="19336" PostId="7286" Score="0" Text="Like https://2.bp.blogspot.com/-G5cMV3yjXCU/VOyZkzIYGlI/AAAAAAAAHMc/yJmT_WHduqs/s1600/51kRVqJxa3L.jpg ?" CreationDate="2022-02-16T03:27:13.780" UserId="6346" />
  <row Id="19338" PostId="7286" Score="0" Text="&quot;Oh, no you don't, Mr Feynman! It's turtles all the way down.&quot; I had some of those books as a child. Others I saw at the pediatrician's office. Yes. Pretty brilliant. We need more teaching like that. And Mr Rogers..." CreationDate="2022-02-16T11:04:55.243" UserId="5349" />
  <row Id="19325" PostId="7287" Score="0" Text="If you'd keep nothing but first n last sentence you'd get not just my +1 but a bounty as well .  More seriously everyone seems to agree (almost) that all the famous inheritance egs are broken. But then hedge about saying that. (you come closest). So I guess the real question : When did the tide turn? And can you situate it in the mouths of some &quot;big OO guy&quot; like Stroustrup, B Meyer, Booch etc?? Closest I get is &quot;Accelerated C++&quot; saying «Forget all the fancy C++ . Just use STL. Write real significant programs to a flying start»" CreationDate="2022-02-15T04:21:46.377" UserId="8837" />
  <row Id="19326" PostId="7287" Score="0" Text="I haven't been part of the C++ community long enough to have seen a tide turn. Inheritance definitely has its uses. In my field of scientific computing there are enough packages that use it. Maybe it only comes into play at a certain level of complexity. But yes, I really dislike the person/animal/whatever toy examples. From a taxonomical point of view they may make sense but not from a programming point where an object is a &quot;packet of behaviors&quot; as someone (you?) put it." CreationDate="2022-02-15T05:48:36.223" UserId="6346" />
  <row Id="19341" PostId="7289" Score="7" Text="You ask &quot;what can I do in the years leading up to this?&quot;  What access do you have to the students in the years leading up to this?" CreationDate="2022-02-16T19:39:41.463" UserId="27" />
  <row Id="19343" PostId="7289" Score="5" Text="I feel your pain. My students have to ssh to a machine for some assignments. They try to enter the machine name in the browser. &quot;Hey, it has something-dot-something, it must be a URL&quot;." CreationDate="2022-02-16T21:10:59.603" UserId="6346" />
  <row Id="19395" PostId="7289" Score="2" Text="@VictorEijkhout That sounds like a good DNS (and URL protocol) teaching opportunity, if most of them are doing it." CreationDate="2022-02-18T22:06:23.007" UserId="6174" />
  <row Id="19422" PostId="7289" Score="6" Text="I feel that there has been a missed step in the education system on how to use a general purpose computer.  Perhaps that needs to be more addressed?" CreationDate="2022-02-24T14:44:37.190" UserId="11781" />
  <row Id="19428" PostId="7289" Score="0" Text="@ScottRowe I have voted on most. Purely based on whether they answer the question (not even whether I agree). There are some that have good information, but don't answer the question. They belong somewhere but not here. I voted them down. (the criteria is &quot;did they answer the question&quot;). I will vote on the remainder latter, and may even choose a winner." CreationDate="2022-02-27T20:20:15.630" UserId="204" />
  <row Id="20160" PostId="7289" Score="0" Text="This has been asked in 2016 and has no accepted answer. Seems like I now have to teach those kids in university..." CreationDate="2022-06-01T08:25:45.580" UserId="8497" />
  <row Id="19380" PostId="7290" Score="0" Text="I was reading about log4j, which was *designed* to be able to yank and run arbitrary remote code automatically gotten from anywhere else on the web, with no validation, and invoke it from deep within a supposedly secure area, perhaps not even directly accessible from the internet at large. You can't make this stuff up! I conclude that it was designed that way deliberately as a back door to be exploited later. There is no other good explanation. Strange world." CreationDate="2022-02-18T11:39:13.240" UserId="5349" />
  <row Id="19403" PostId="7290" Score="1" Text="And we call that software malware." CreationDate="2022-02-19T14:52:28.300" UserDisplayName="anon" />
  <row Id="19411" PostId="7290" Score="0" Text="@Evi1M4chine Perhaps we should have a procedure to keep that from happening? Some kind of company, that would control what went in to the software, and could be held responsible for it?" CreationDate="2022-02-20T01:01:49.820" UserId="5349" />
  <row Id="19344" PostId="7291" Score="7" Text="Thank you, this is really informative. I hadn't thought of these things. Long ago I used PCs that wiped themselves after I logged off, so in some ways this is similar. But I never worried about breaking anything. The PCs failed often and could take my disk with them, and the shared machines were tanks and basically unbreakable. So the fear of breaking something is hard for me to relate to." CreationDate="2022-02-17T01:54:41.167" UserId="5349" />
  <row Id="19354" PostId="7291" Score="2" Text="If you can't mess up a computer at school, where can you?" CreationDate="2022-02-17T16:24:58.980" UserId="5349" />
  <row Id="19368" PostId="7291" Score="0" Text="@nelson. Breaking a miss-configured MS-Windows machine, is an IT-support problem. If you school can fix it in under 30 seconds, then like where I work, they need to get their act together. see https://www.youtube.com/watch?v=f8Co37GO2Fc" CreationDate="2022-02-18T11:02:30.727" UserId="204" />
  <row Id="19424" PostId="7291" Score="1" Text="Wow, this answer perfectly describes the computer situation for all of the computers in the grade schools in my county, at least while I was in grade school. Seeing it all laid out like this... really makes it clear how the logistical concerns behind these policies and configurations clashes with what students (and maybe faculty?) ought to be learning about computers and how they work, or at least the order in which they learn that." CreationDate="2022-02-25T06:06:16.327" UserId="8132" />
  <row Id="19451" PostId="7291" Score="0" Text="&quot;believe they are going to get in trouble for exploring other parts of the computer than the web browser&quot; is absolutely a real concern. I recall getting called into the office and banned from the school computer lab back in ~2008 because they thought that switching users was hacking. I hope CS educators are up front about what students are allowed to do and establish that they're not as incompetent as the average teacher." CreationDate="2022-03-04T14:08:06.777" UserId="3878" />
  <row Id="19410" PostId="7292" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/134285/discussion-on-answer-by-scott-rowe-problems-with-students-stuck-in-web-browser-a)." CreationDate="2022-02-19T23:55:24.123" UserId="27" />
  <row Id="19355" PostId="7293" Score="3" Text="Explaining URLs... I well remember when I read that TCP was originally created to provide remote procedure calls *on a single machine*. Like designing a car just so you could drive down to your mailbox." CreationDate="2022-02-17T18:17:33.443" UserId="5349" />
  <row Id="19371" PostId="7293" Score="2" Text="Dolphin is a good tool. I suspect it will help with the transition from navigating local files using the GUI, to using the command line (But not tested with students). It has integration of the two: changing directory in one, also changes it in the other (Clicking a directory X, types `cd X`. And clicking back types `cd ..`)." CreationDate="2022-02-18T11:10:31.280" UserId="204" />
  <row Id="19359" PostId="7295" Score="0" Text="No dictation was used in the making of this Answer." CreationDate="2022-02-17T19:04:14.593" UserId="5349" />
  <row Id="19365" PostId="7295" Score="2" Text="I very much doubt that typing will disappear. Sure maybe some people will interact with computers only through voice commands, just as some people only use GUIs. But the command line is still alive and well and will always be preferred by power users for some tasks due to its expressiveness and precision. Also, good typists can type faster than they can speak. Some years ago people argued that typing commands would be completely replaced by GUIs, yet recently I've seen a reverse trend: many people have moved from plotting data with GUI tools to plotting with Python packages." CreationDate="2022-02-17T23:12:38.253" UserId="8253" />
  <row Id="19372" PostId="7295" Score="0" Text="@WaterMolecule I can still: ride a horse, drive a manual (less common in the US), sail a boat, use a darkroom and entirely manual camera, fix old radios, etc... But these things are in schools less and less, and in homes rarer still. If people don't need them, they have no concept, like the many people under 20 who have no idea that files and folders exist. Google it. Where do we start then, if college students can't locate their work, let alone turn it in? A Bridge Too Far." CreationDate="2022-02-18T11:15:35.350" UserId="5349" />
  <row Id="19381" PostId="7295" Score="1" Text="@ScottRowe I thought about this more and changed my mind. I can see keyboards getting mostly replaced by another technology. +1" CreationDate="2022-02-18T15:12:21.420" UserId="8253" />
  <row Id="19382" PostId="7295" Score="1" Text="Because it turns out that natural language is hard and understanding (any kind of understanding) is impossible for computers as we know them (at best a computer can fake understanding, but there's simply not one ounce of understanding happening there). Otherwise there would already be software to turn a business analyst's design into more software without actual programmers being needed--but instead, we can (notoriously) not even turn a design into perfect software even with a whole team of developers, actually the BA can't even create a perfect design from a customer description!" CreationDate="2022-02-18T16:52:25.867" UserId="1407" />
  <row Id="19385" PostId="7295" Score="0" Text="@user3067860 Right, understanding is hard, but you can get surprisingly far with good guessing, just ask a dog. They often know what we are feeling or are about to do before we realize it ourselves! I think that computers could write much better software than humans, but they should leave art, music and comedy to us. If it can be automated though it will." CreationDate="2022-02-18T17:19:40.757" UserId="5349" />
  <row Id="19386" PostId="7295" Score="0" Text="One thing I often do is what I call &quot;Car Talk&quot;. That's when I explain to my car when it beeps at me for straying past the lane markers or getting too close to that car ahead that is turning, *why* I did that. I know it isn't listening now, but soon it will, and will tell its billion buddies. Then things are going to change fast. &quot;*If I'd asked people what they* wanted, *they would have said, 'smarter cars'*&quot;" CreationDate="2022-02-18T17:28:18.237" UserId="5349" />
  <row Id="19387" PostId="7295" Score="0" Text="@ScottRowe You're reminding me of the professor who assigned &quot;computer vision&quot; as a summer project to a grad student in the 1960s. If a computer replaces my job anytime in my lifetime I will be extremely happy because 1) there will have been huge advances to medical technology in order to extend my lifespan that long, 2) I will be enjoying learning about it on Mars, and that's cool." CreationDate="2022-02-18T18:10:54.027" UserId="1407" />
  <row Id="19388" PostId="7295" Score="0" Text="@user3067860 I hear that a computer beat the best Go player in the world. How did it get to Carnegie Hall? You don't have to outrun the bear, you just have to run faster than me." CreationDate="2022-02-18T20:10:44.673" UserId="5349" />
  <row Id="19391" PostId="7295" Score="0" Text="@ScottRowe You sweet summer child. Go has a handful of rules which can be fully and completely written down in a single page of text. Tell me how many pages of text you are going to need to describe all of the &quot;rules&quot; of, say, a word processor...and don't leave _even a single one_ out." CreationDate="2022-02-18T20:37:46.233" UserId="1407" />
  <row Id="19393" PostId="7295" Score="0" Text="@user3067860 have the Go computer analyze word processor usage, and it will probably come up with useful rules no one even thought of. The bear can run pretty fast." CreationDate="2022-02-18T22:03:34.410" UserId="5349" />
  <row Id="20681" PostId="7295" Score="1" Text="Voice is essentially imprecise, compared to writing, which runs into a wall with highly-precise and low-redundancy languages like math and computing. Voice doesn't seem like a good idea anyplace where other people are around: in a workplace, mass transit, a home with a relaxing family member, etc. (consider how much cross-talk there would be in a standard cube farm)..." CreationDate="2022-08-10T22:16:50.040" UserId="8137" />
  <row Id="20682" PostId="7295" Score="0" Text="Fred Brooks was predicting the takeover of voice by 1995 (_Mythical Man Month After 20 Years_, &quot;... speech is surely the right way to express the verbs. Tools such as Voice Navigator for the Mac and Dragon for the PC already provide this capability...&quot;), and here we are ~30 years later and still waiting for that predicted takeover." CreationDate="2022-08-10T22:17:55.780" UserId="8137" />
  <row Id="20694" PostId="7295" Score="0" Text="@DanielR.Collins Maybe voice languages (or, just have one?) should be precise and low redundancy? Maybe cube farms are a bad idea? It took a while to get Microsoft dictation to work well, but we wound up with the &quot;two way wrist TV&quot; long before I thought it would happen. Sometimes the software is ahead of the current hardware and sometimes it's the other way. Always, the humans are behind where they should be. Don't blame technology for what can adequately be explained by ignorance." CreationDate="2022-08-16T10:26:19.510" UserId="5349" />
  <row Id="19400" PostId="7296" Score="0" Text="I remember using Karel the Robot in high school and remember it being fairly fun/educational." CreationDate="2022-02-19T05:22:29.403" UserId="11735" />
  <row Id="19409" PostId="7296" Score="1" Text="One problem is that different people have different (possibly preferred) ways of learning and different kinds of documentation and tutorials are better/worse for different kinds of learning." CreationDate="2022-02-19T19:01:39.117" UserId="2178" />
  <row Id="19417" PostId="7296" Score="4" Text="Learning to program ≠ Learning C++ ≠ Leaning computer science" CreationDate="2022-02-20T12:42:07.190" UserId="204" />
  <row Id="20775" PostId="7296" Score="0" Text="You already have some excellent answers but I want to repeat your words here  &quot;they start learning form some random stuff and after some thing they realize I am just wasting my time&quot; So why did you learn C++ in the first place? If you just want to a programming language C++ should be your first or second languge." CreationDate="2022-09-15T06:27:37.953" UserId="9884" />
  <row Id="20777" PostId="7296" Score="0" Text="@Qiulang邱朗 :: i say that &quot;after some time they realize I am just wasting my time, just like my case I haven't wasted my time but I think my concepts are not good / clear  &quot; it mean this is just example in my case situation is not that one ... my concepts are not clear but i am trying . .. read again my question" CreationDate="2022-09-15T06:35:33.460" UserId="11579" />
  <row Id="19383" PostId="7297" Score="1" Text="@Hamza “The key to learning almost anything is reinforcement and feedback. … hence the need for feedback in what you do.” So well put. Consider that phrase stolen. Believing there is one, direct, royal road to understanding is an illusion. Understanding can come for one person from different resources, take unknown amounts of time, require back-tracking from misunderstandings, generalising special cases, giving specific examples of impenetrable, generalised definitions, and many, many other things." CreationDate="2022-02-18T16:58:57.180" UserId="8155" />
  <row Id="19384" PostId="7297" Score="3" Text="There always comes a point when the student has to strike out and try to apply their incomplete, partial understanding – only to find there a gaps in the student’s knowledge and more study is needed if the student genuinely wants to  progress and improve." CreationDate="2022-02-18T16:59:02.047" UserId="8155" />
  <row Id="19389" PostId="7297" Score="0" Text="sorry comments above were aimed mainly at Buffy - the author of the answer. My error on at-label thing." CreationDate="2022-02-18T20:16:51.440" UserId="8155" />
  <row Id="20776" PostId="7299" Score="0" Text="The only thing I can add to your answer is I would ask him why would you want to learn C++, is there  a particular need for that or just like what he said in his question, &quot;When a beginner starts learning some new thing like programming language and they start learning form some random stuff&quot;?  Then C++ is a terrible choice." CreationDate="2022-09-15T06:30:17.487" UserId="9884" />
  <row Id="19406" PostId="7300" Score="0" Text="If I understand the term &quot;inner platform&quot; then unfortunately this is a fact of modern computer usage. See Facebook which to many people *is* the internet. There are no web pages: just facebook pages/groups. Actually, I'm thankful for Discord taking off because it is another community, and outside of FB.&#xA;&#xA;But these inner platforms are a fact of life. Going back to MSDOS (in a manner of speaking) doesn't sound realistic to me. You'll have to wean them carfully off the computer==browser mindset. Rebooting to the 1980s (or whatever) is not going to work." CreationDate="2022-02-19T16:11:51.720" UserId="6346" />
  <row Id="19408" PostId="7300" Score="2" Text="&quot;You’re basically surprised why a car driver opens the car door instead of getting below the car.&quot; I don't necessarily agree with the main prescription you've outlined, but I *love* this analogy." CreationDate="2022-02-19T17:02:48.297" UserId="27" />
  <row Id="19416" PostId="7300" Score="0" Text="@VictorEijkhout Don't go back to MSDOS, when you can go forward to Unix (e.g. Gnu/Linux)." CreationDate="2022-02-20T12:09:49.280" UserId="204" />
  <row Id="19415" PostId="7301" Score="1" Text="Meanwhile there's two ways of doing things (computing) and neither is necessarily wrong, they're just different - and assuming they may have eg. the same Linux distribution locally and remote, this should be comparable." CreationDate="2022-02-20T02:03:05.980" UserId="11742" />
  <row Id="19419" PostId="7302" Score="1" Text="I've never seen anyone use a CLI to build a unity project, especially not beginners. Usually, we just use the &quot;play&quot; button to get things going in the editor, and use namespaces to make sure it doesn't take too long to compile." CreationDate="2022-02-23T21:56:15.643" UserId="27" />
  <row Id="19420" PostId="7302" Score="0" Text="Also, welcome to cseducators!  It's a nice first post, and I hope we hear more from you!" CreationDate="2022-02-23T21:56:49.430" UserId="27" />
  <row Id="19421" PostId="7304" Score="2" Text="I had a look. It looks like every student will have to sign up to github (or other service). This will lead to safeguarding problems. Am I correct about this, or is it possible to easily use in anonymously?" CreationDate="2022-02-24T12:24:19.827" UserId="204" />
  <row Id="19423" PostId="7304" Score="1" Text="Standard gitpod does require signing into a service. If you're willing to host a service for your students, you can use this: https://www.gitpod.io/blog/openvscode-server-launch - it doesn't require any authentication whatsoever." CreationDate="2022-02-24T16:09:33.713" UserId="11779" />
  <row Id="19431" PostId="7306" Score="2" Text="Hmmm. Do you have a copyright problem? In much of the world you would." CreationDate="2022-03-01T20:46:41.263" UserId="1293" />
  <row Id="19432" PostId="7306" Score="0" Text="Thanks for the note. But unfortunately in my country we don't have any mechanism to apply copyright law." CreationDate="2022-03-02T04:35:05.780" UserId="11797" />
  <row Id="19437" PostId="7306" Score="0" Text="Sorry, but there are also ethical issues around taking someone else's content without permission." CreationDate="2022-03-02T15:26:55.133" UserId="1293" />
  <row Id="19438" PostId="7306" Score="0" Text="You are absolutely right, I will contact them and ask for their permission. But even if I do that, the whole country would still steal academic literature and no one would be able to change a thing. For example I really want to buy tons of textbooks, but we don't have amazon or any online payment service, what should we do then? I'll make sure to ask for permission and to acknowledge the original sources to students." CreationDate="2022-03-02T16:08:02.887" UserId="11797" />
  <row Id="19474" PostId="7306" Score="1" Text="Umm was that book really published in  2004!? I feel like anything pre-resnet (2015) would be pretty useless for students that intend to contribute to the field or work in industry. Maybe a statistics book would be better before jumping into modern ml." CreationDate="2022-03-23T11:13:59.923" UserId="3878" />
  <row Id="19475" PostId="7306" Score="1" Text="The third edition of the book was published in 2014, so yeah it is kinda of old. Thanks for the suggestion." CreationDate="2022-03-23T11:31:57.710" UserId="11797" />
  <row Id="19477" PostId="7306" Score="1" Text="Yeah 2014 is pretty old. I might be biased since my research is focused on something that only became practical in the last decade (GANs) but if I were you, I’d do a quick refresher on ml/statistics (logistic regression, ridge regression, bias/variance tradeoff), and then skip ahead to deep learning. The linked course looks decent to me. You could probably skip/skim over SVMs, but besides that it looks like a reasonable intro to ML." CreationDate="2022-03-23T12:12:34.867" UserId="3878" />
  <row Id="19478" PostId="7306" Score="1" Text="Thanks a lot, your suggestions are really helpful." CreationDate="2022-03-23T13:58:18.810" UserId="11797" />
  <row Id="19446" PostId="7307" Score="2" Text="Quite the broad question. You'd get better answers if you mention why you're learning C++ and what your hobbies are." CreationDate="2022-03-03T10:49:33.110" UserId="3878" />
  <row Id="19447" PostId="7307" Score="1" Text="@Navin: i want to start gui development!" CreationDate="2022-03-03T14:00:48.480" UserId="11579" />
  <row Id="19449" PostId="7307" Score="2" Text="@Hamza QT is a quite popular and portable framework for GUI programming. If you want to combine it with 3D you can look at Unity or OpenGL or DirectX.." CreationDate="2022-03-03T17:04:44.653" UserId="1933" />
  <row Id="19450" PostId="7307" Score="0" Text="@mathreadler : yes i am learning qt!" CreationDate="2022-03-03T17:46:24.300" UserId="11579" />
  <row Id="19471" PostId="7307" Score="0" Text="I will argue that C++ GUI is probably not a good idea. Non modern OSs choose C++ as GUI development." CreationDate="2022-03-21T02:21:17.457" UserId="9884" />
  <row Id="19472" PostId="7307" Score="0" Text="@Qiulang邱朗 :i am also thing/reading   about that but ... i want to learn any cpp framework ! can you suggest ?" CreationDate="2022-03-22T16:07:09.033" UserId="11579" />
  <row Id="19473" PostId="7307" Score="1" Text="@Hamza sorry I don't have any suggestion I have been trying to avoid c++ for years." CreationDate="2022-03-23T02:12:37.987" UserId="9884" />
  <row Id="19516" PostId="7307" Score="0" Text="Interestingly, I haven't used any C++ libraries or frameworks for GUI development as far as I can remember. The latest big thing in my area is SwiftUI - based on Swift, with libraries written in a style that makes it almost look like a different language." CreationDate="2022-03-31T13:39:14.147" UserId="4529" />
  <row Id="19433" PostId="7308" Score="0" Text="i will accept your answer but i have question : almost every programmer can use stl ok but i want to develop something live gui program or something which appears on screen .. then what can i do ?" CreationDate="2022-03-02T14:33:19.903" UserId="11579" />
  <row Id="19434" PostId="7308" Score="1" Text="@Hamza learn different GUI libraries" CreationDate="2022-03-02T14:57:01.543" UserId="11816" />
  <row Id="19435" PostId="7308" Score="0" Text="@bb1950328 : but i don't know which lib , and   how to ?" CreationDate="2022-03-02T15:05:23.743" UserId="11579" />
  <row Id="19441" PostId="7308" Score="0" Text="GTK, Wx, and Qt are all solid choices for GUI. Personally, I've found Tk (that's different than GTK, by the way) to be very simple and easy-to-learn, at the cost of not being as powerful." CreationDate="2022-03-02T20:47:36.910" UserId="4146" />
  <row Id="19443" PostId="7308" Score="2" Text="You probably mean the C++ standard library. STL is a distinct and previous library and searching for it online will give you out of date results that only diverge further as C++ adds more features. https://stackoverflow.com/questions/5205491/whats-the-difference-between-stl-and-c-standard-library" CreationDate="2022-03-03T02:46:25.140" UserId="11819" />
  <row Id="19440" PostId="7309" Score="0" Text="can u tell me how to learn these GUI libraries  . and what about other C++ libraries ? std2 etc ..." CreationDate="2022-03-02T18:20:50.863" UserId="11579" />
  <row Id="19442" PostId="7309" Score="0" Text="@Hamza you spend a lot of time here asking about way too manythings. May I suggest that you first learn one thing before you go on to the next?" CreationDate="2022-03-03T02:25:45.317" UserId="6346" />
  <row Id="19444" PostId="7309" Score="3" Text="@Hamza, To actually learn it, you need to use it. When you have a goal (it doesn't need to be a complicated one; break it it up into tiny chunks if it is), you'll keep on asking yourself &quot;how do I do this particular thing&quot;, and that's when you'll have to read documentation or find already answered questions on forums. I spend my time trying to find the best practice for a particular task, or figuring out what a particular function does. Task -&gt; code draft -&gt; Question(s) -&gt; documentation/forums -&gt; THEN code. Start by writing ANYTHING to avoid the blank page then fill in the blanks." CreationDate="2022-03-03T10:02:19.893" UserId="11821" />
  <row Id="19445" PostId="7309" Score="0" Text="Also, don't forget to compile regularly to see a small list of errors and warnings before you get drowned in problems." CreationDate="2022-03-03T10:04:45.287" UserId="11821" />
  <row Id="19448" PostId="7310" Score="0" Text="[For you too](https://cseducators.stackexchange.com/questions/7307/which-c-libraries-and-frameworks-should-i-learn#comment19443_7308): You probably mean the C++ standard library. STL is a distinct and previous library and searching for it online will give you out of date results that only diverge further as C++ adds more features. https://stackoverflow.com/questions/5205491/whats-the-difference-between-stl-and-c-standard-library" CreationDate="2022-03-03T16:44:26.863" UserId="2047" />
  <row Id="19452" PostId="7312" Score="3" Text="Is there a reason you want.at&amp;t syntax specifically?  Every debugger and recompiler I'm aware.of.can generate both (it's a setting/flag) and, in any case, once you learn x86 assembly in one, it's not hard to learn the other syntax.  The commands are exactly the same commands, but written out slightly differently.  I only ask because I have been led to understand that there are more resources aimed at beginners using intel syntax." CreationDate="2022-03-06T15:25:47.250" UserId="27" />
  <row Id="19453" PostId="7312" Score="1" Text="Actually I want to understand the xv6 operating system coding... And the xv6 operating system: https://iitd.github.io/os/2022/xv6.pdf uses the AT&amp;T syntax. That's the main reason. And the os video lectures of the professor here: https://iitd.github.io/os/2022/ on youtube also explains parts of x86 AT&amp;T syntax. So, I thought of considering the AT&amp;T syntax as it would help me understand it better..." CreationDate="2022-03-06T15:33:35.840" UserId="9124" />
  <row Id="19454" PostId="7312" Score="2" Text="Those are pretty solid reasons.  The commands are 1 to 1, since they're really the same language, so even after you find a good at&amp;t reference, always know that if an explanation is confusing, you can find the corresponding Intel command and find another explanation of the same command :)" CreationDate="2022-03-06T15:48:14.690" UserId="27" />
  <row Id="19455" PostId="7312" Score="0" Text="@BenI., I find the intel syntax utterly confusing (after dabbling in 6505, some VAX 11 under BSD and others; yes, weaned on AT&amp;T syntax)." CreationDate="2022-03-09T13:57:11.437" UserId="5219" />
  <row Id="19456" PostId="7312" Score="2" Text="@vonbrand Haha that's amazing! My background is so similar, 6502, but weaned on Intel, and I find at&amp;t basically impossible to read  But I did use my trick when I got confused a few times and look up the corresponding command in AT&amp;T syntax for a second explanation" CreationDate="2022-03-09T21:09:40.823" UserId="27" />
  <row Id="19459" PostId="7313" Score="0" Text="Good q. But could be improved with some &quot;block graphics&quot; code snipptes. Plus your preferred equivalent." CreationDate="2022-03-10T07:30:17.223" UserId="8837" />
  <row Id="19463" PostId="7313" Score="1" Text="What age of students? For kids, getting something interesting to show on the screen is a big draw, and block graphics doesn't take much sophistication." CreationDate="2022-03-11T18:17:14.337" UserId="5349" />
  <row Id="19464" PostId="7313" Score="1" Text="@ScottRowe Usually approximately 14. And mostly without prior knowledge in programming." CreationDate="2022-03-11T18:56:21.660" UserId="8354" />
  <row Id="19465" PostId="7313" Score="0" Text="Well there's your answer. &quot;Even dwarfs started small&quot;" CreationDate="2022-03-11T19:45:42.167" UserId="5349" />
  <row Id="19466" PostId="7313" Score="1" Text="@ScottRowe The point why I'm asking this is that it's overly time-consuming(while not being complex or challenging) without any benefit. As I mentioned above: 1. it's DOS, which isn't really in use anymore, 2. it's not even a proper algorithmic exercise." CreationDate="2022-03-11T19:53:05.513" UserId="8354" />
  <row Id="19467" PostId="7313" Score="0" Text="Re, &quot;without any benefit.&quot; There's _always_ benefit to learning something new even if there is more benefit to be had from learning something that is both new and useful." CreationDate="2022-03-17T17:37:39.357" UserId="1269" />
  <row Id="19457" PostId="7314" Score="1" Text="Well, ncurses was released in 1993. It isn't cutting edge at all, but it's a library which is still used in the real world. The only point I can make up is that they want to avoid using libraries..." CreationDate="2022-03-09T22:35:11.283" UserId="8354" />
  <row Id="19460" PostId="7314" Score="1" Text="The point with asking the teacher directly sadly isn't really realistic as I'm just a private tutor for some (school and university, but block graphics are mostly taught in schools) students. And a student wouldn't get any useful answer, I guess...&#xA;There's a slight difference between your answer and my question. You are teaching something for a clear reason, which is to understand principles of a language family. That's perfectly logical and serves a clear purpose. I tried to make up a reason for teaching block graphics but I couldn't really find a &quot;solution&quot;..." CreationDate="2022-03-10T18:45:00.107" UserId="8354" />
  <row Id="19461" PostId="7314" Score="1" Text="@csabinho Yeah, I don't know specifically - I've never taught graphics at all.  I just now the reason that I often wind up with out of date technology is clarity, so it occurred to me that the professor might be up to something similar, though I obviously have no way to know.  (Also, I know *nothing* about graphics, so I can't comment more specifically on the graphic choice.)" CreationDate="2022-03-10T19:10:03.080" UserId="27" />
  <row Id="19462" PostId="7314" Score="0" Text="The Egyptian civilization is old. The dinosaurs are old. You could say one is older than the other. You could also say both are way older than my furthest back ancestor. In the age when web graphics is replacing gui (proper) graphics, it's good to remember @csabinho, ncurses is really old. Put differently, living on the bleeding edge  is hardly a plus in an edu setting. (BTW I consider Pascal better, *considerably* better to introduce prog in cs101 than almost all that's done today)" CreationDate="2022-03-11T11:28:58.030" UserId="8837" />
  <row Id="19479" PostId="7316" Score="0" Text="This question is better asked on the APCS mailing list. The people there know the rules. But IIRC, for free response questions there aren't &quot;forbidden but correct&quot; constructs. I hope that is still true. But the student has, in fact failed both tests unless they get a hit on the first element. But I'm not a grader." CreationDate="2022-03-25T19:54:01.557" UserId="1293" />
  <row Id="19480" PostId="7316" Score="1" Text="@Buffy I would not direct AP teachers away from this site; we have plenty of AP expertise here, I think.  And our format is *much* better than that mess of a mailing list for addressing such questions." CreationDate="2022-03-26T03:20:29.920" UserId="27" />
  <row Id="19483" PostId="7316" Score="0" Text="@BenI., I disagree for questions like this one. The advice given there for questions like this reflect official policy due to the folks that answer there." CreationDate="2022-03-26T15:30:50.540" UserId="1293" />
  <row Id="19484" PostId="7316" Score="0" Text="@Buffy I mean, we're not the official college board site, though questioners here would presumably know that. AP teachers all have to sign up through the college board process, and register through AP Classroom.  But the listserver there is a morass, difficult to use, and practically unsearchable.  Answers here remain searchable, and can be fixed at any time." CreationDate="2022-03-26T16:54:32.823" UserId="27" />
  <row Id="19481" PostId="7317" Score="0" Text="Actually the loop doesn't access all necessary entries." CreationDate="2022-03-26T11:18:05.823" UserId="1293" />
  <row Id="19482" PostId="7317" Score="0" Text="@Buffy Only if you neglect point 1 it doesn't.  If you begin to get overly technical with these rubric wordings, they stop working entirely.  Students can give outright incorrect answers to questions, but still get awarded every point on the rubric.  These all have to be taken in a spirit of intentionality, or they just stop making sense." CreationDate="2022-03-26T12:32:00.200" UserId="27" />
  <row Id="19485" PostId="7317" Score="0" Text="Thanks for sharing your experience. I like the idea that I can treat the points as separate concerns and award them accordingly." CreationDate="2022-03-26T23:01:55.720" UserId="2122" />
  <row Id="19487" PostId="7317" Score="1" Text="What am I missing here? The method/function that contains this code returns after examining only one element. It clearly doesn't &quot;access all necessary elements&quot;. The returns short circuit both the loop and the containing method. The student is clearly confused. I'd like to see what an official ruling would be. This seems clearly wrong to me." CreationDate="2022-03-27T13:40:36.330" UserId="1293" />
  <row Id="19488" PostId="7317" Score="0" Text="@Buffy We can ask on the listserver. I would be surprised if it came out differently.  Separate the loop (basically just the declaration) from its contents. Each major component should be read as if the other code  around it was appropriate.  I believe that the rationale for this is that it avoids point cascades. Under the stricter reading you are using, for instance, the second point is always inaccessible if the first point is unearned, no matter what else the student does." CreationDate="2022-03-27T14:23:58.743" UserId="27" />
  <row Id="19489" PostId="7317" Score="0" Text="@BenI. But you have to treat a premature return or break or whatever as part of the loop declaration: `while(i&lt;array.size)` is NOT equal to `while(i&lt;array.size &amp;&amp; !found)` . And I'd argue it's easier to construct code that makes the return part correct than the loop part. So I'd rather give credit for the second part depending what the focus should be, the actual return or the correct array access." CreationDate="2022-03-28T09:17:14.383" UserId="11138" />
  <row Id="19493" PostId="7317" Score="0" Text="@Max I can see that way of thinking about it, too.  I'm not sure how the AP graders would come out on it specifically, though I am reasonably confident that one (and only one) of the two points would be awarded." CreationDate="2022-03-28T15:06:17.193" UserId="27" />
  <row Id="19486" PostId="7318" Score="3" Text="What are you studying (major field)? Why do you need both of these languages?" CreationDate="2022-03-27T12:35:44.340" UserId="1293" />
  <row Id="19495" PostId="7318" Score="1" Text="Books are good for learning in general how to talk about software systems and how to construct software systems, but to really learn a _language,_ you have to _speak_ the language. Practice writing code!" CreationDate="2022-03-28T18:40:00.170" UserId="1269" />
  <row Id="19496" PostId="7318" Score="0" Text="@Buffy My major field is software engineering" CreationDate="2022-03-29T16:23:18.417" UserId="11902" />
  <row Id="20632" PostId="7318" Score="1" Text="Asking for the &quot;best&quot; book is fruitless as you only get opinions. Few people answering know all the available books. Beware of any answer. For me, the best book is one that has a lot of programming exercises and several large projects. You learn programming by doing programming, not by reading a book." CreationDate="2022-07-28T19:58:33.633" UserId="1293" />
  <row Id="20656" PostId="7318" Score="0" Text="I wrote my own." CreationDate="2022-08-02T00:01:13.587" UserId="21" />
  <row Id="19490" PostId="7319" Score="0" Text="I disagree, actually. See: https://cseducators.stackexchange.com/q/4427/1293. On the other hand, I write very short methods where it isn't an issue. I strive for [Cyclomatic complexity](https://en.wikipedia.org/wiki/Cyclomatic_complexity) = 1." CreationDate="2022-03-28T14:27:22.957" UserId="1293" />
  <row Id="19491" PostId="7319" Score="1" Text="I see your point about minimizing mentally retained state. However, in my above distinction of eixsts/forall loops this presupposes that the student has already recognized that there is a exists problem, where indeed early return is possible. In this case, the question asks about accessing &quot;all&quot; elements so an early return is not possible and the whole code structure is wrong. So my second point stands that they need to start by analyzing the propositional status of the for loop." CreationDate="2022-03-28T14:49:32.170" UserId="6346" />
  <row Id="19492" PostId="7319" Score="1" Text="Addressing your objections to my first point explicitly: I like deriving code by textual refinment. And your early returns are not amenable to such an approach. In fact, I find early returns kind of a hackerish solution with the main justification that &quot;it works&quot;. How do *you* teach when early returns are possible and when not?" CreationDate="2022-03-28T14:51:14.823" UserId="6346" />
  <row Id="19494" PostId="7319" Score="1" Text="@Buffy Another thought: most programming language lack introspection so data is the only thing that is visible. With early returns you're teaching students a pattern that they need to process completely mentally, and the code is either all right or all wrong, with no visual indication as to the structure of that pattern. So I think you *are* overloading their mental capacities: they have to consider code paths entirely in their head. Whereas in my approach the code is clearly leveled, with each textual refinment having a clear function." CreationDate="2022-03-28T16:31:23.037" UserId="6346" />
  <row Id="19497" PostId="7320" Score="3" Text="Fast feedback loops!" CreationDate="2022-03-30T19:09:32.450" UserId="5152" />
  <row Id="19502" PostId="7320" Score="3" Text="Depending on the language and the pattern, it may also be to get better at using recursion properly. Assuming I was told to do a parameterized implementation of either of your examples in a language like Elixir (or pretty much any other language with proper TCO) I would actually jump first to a recursive implementation even if looping were possible in the language." CreationDate="2022-03-30T23:08:34.950" UserId="2523" />
  <row Id="19534" PostId="7320" Score="1" Text="Turning a mathematical expression or idea into an algorithm is not always a 1:1 translation.  It seems to be a &quot;hard thing&quot;, generally, for programmers to adapt mathematics into code.  This type of practice helps those skills, and they are important in many fields of applied science and engineering." CreationDate="2022-04-01T16:01:21.747" UserId="2976" />
  <row Id="19563" PostId="7320" Score="0" Text="@AustinHemmelgarn These sort of patterns would likely be poor applications of recursion for imperative languages, though, which is the common case. CS educators forcing students to use recursion for O(n^2) loop problems like this causes a lot of hapless students to wind up in [the recursion tag](https://stackoverflow.com/questions/tagged/recursion) on Stack Overflow." CreationDate="2022-04-05T15:41:19.600" UserId="9426" />
  <row Id="19564" PostId="7320" Score="0" Text="@ggorlen Agreed, which is why I prefaced my comment with ‘depending on the language’. I would never consider recursion for something like this in a language like C or Python, but would absolutely prefer it to any other looping-equivalent construct in something like Elixir or Erlang." CreationDate="2022-04-05T16:44:00.987" UserId="2523" />
  <row Id="19565" PostId="7320" Score="0" Text="@AustinHemmelgarn Yes, you nailed it in the original but I wanted to over-emphasize for posterity. Misapplication of recursion in education is a pet peeve of mine." CreationDate="2022-04-05T17:10:46.980" UserId="9426" />
  <row Id="19504" PostId="7321" Score="6" Text="Practical applications of algorithms that can generate such patterns do exist and are very common. They include: generating node traversal sequences in pathfinding or graph crawling algorithms, generating brute force password sequences, similar to the brute force, generating permutations or combinations to solve word problems (eg, Wordle solver, Scrabble solver or the first part of decoding an encrypted message if you have a rough idea of some of the content of the message) etc.." CreationDate="2022-03-31T03:02:18.247" UserId="5450" />
  <row Id="19505" PostId="7321" Score="4" Text="I almost applied for a job once at a company building sewing machines with lots of very clever software - yes, I might have written lots of code to create patterns. Seriously :-)" CreationDate="2022-03-31T10:01:53.270" UserId="4529" />
  <row Id="19555" PostId="7321" Score="0" Text="The `tree` command is another nice example of loops, recursion and printing. It is great visual tool for understanding the structure of directories and their contents." CreationDate="2022-04-02T15:35:44.413" UserId="4301" />
  <row Id="19498" PostId="7323" Score="10" Text="&quot;*Don't claim loops are more flexible […]. They aren't.*&quot; - well hardcoding a pattern works well for a *single* pattern. Now make the exercise to print the pattern in an arbitrary size, or to print the first N lines of the infinite pattern… I can't see how you'd do that without the flexibility of a loop (or recursion)." CreationDate="2022-03-30T21:11:17.777" UserId="660" />
  <row Id="19501" PostId="7323" Score="3" Text="@Bergi That isn't more flexibility. That's parameterizing. A student with access to copy and paste and the code has the same flexibility and easier to debug code. The trick is getting them to see why changing N is better than copy and paste. The answer is sometimes you don't know N until this code is running on some server at 3am. I could have my boss wake me up with phone call about it but I'd rather sleep through the night." CreationDate="2022-03-30T21:35:16.380" UserId="1401" />
  <row Id="19503" PostId="7323" Score="9" Text="By this argument, no code is more flexible than a collection of special-cases.  I'd argue the flexibility provided by loops is the flexibility provided to another individual, who may not have the same knowledge as you do.  In many cases, this is a user who provides input, in the form of a file or otherwise.  In the case of `std::sort`, it is in the form of a developer who may not have the understanding of sorting algorithms, or may not wish to exercise said understanding." CreationDate="2022-03-31T02:30:47.073" UserId="812" />
  <row Id="19506" PostId="7323" Score="1" Text="If bugs love to hide in loops, then shouldn't students be taught *not* to use them? None of the examples in the question require loops, they can be solved using unfolds, folds, and maps. In fact, I have rarely seen a problem that required a loop or even was made simpler by one." CreationDate="2022-03-31T10:03:04.947" UserId="945" />
  <row Id="19507" PostId="7323" Score="0" Text="@JörgWMittag writing loops gets students to write bugs. There is no substitute for having to fix your own bug. And no better teacher that already debugged canned loop alternatives are often preferable to writing your own loop." CreationDate="2022-03-31T11:18:31.607" UserId="1401" />
  <row Id="19508" PostId="7323" Score="0" Text="That said. Loops aren’t going away. Students should respect them and master them. Doesn’t mean they must prefer them." CreationDate="2022-03-31T11:31:45.597" UserId="1401" />
  <row Id="19509" PostId="7323" Score="1" Text="@candied_orange Loops are basically the reason why you program. Solved problem and need to do it 1000 times more? Wrap it into a loop... done! Without loops you'd constantly repeat yourself and where's the fun in that? Seriously I'm actually astonished people could not like loops. For real, &quot;algorithms&quot; are just breaking up a problem into a series of simpler problems with the intention of letting the computer run those simple problems in a loop. Without loops you wouldn't so much program you'd operate a machine. Seriously I can't wrap my head around how you could not think loops are cool." CreationDate="2022-03-31T11:38:02.160" UserId="11921" />
  <row Id="19510" PostId="7323" Score="0" Text="@haxor789 I program to solve problems not write loops. Loops are cool except when I'm tired and want to go home but can't because this custom loop you made me look at still wont behave. If you want to fall in love with something try abstraction." CreationDate="2022-03-31T12:43:50.257" UserId="1401" />
  <row Id="19511" PostId="7323" Score="0" Text="@candied_orange As said you basically solve actual real world complex problems by breaking them down into machine processable parts, because machines are faster at doing those things and they are faster because of constructs like loops if you actually have to write down the commands you could almost do it yourself. Sure if you abstract things behind functions and program calls you're able to do a ton of magic, but then you're not teaching computer science you're instructing a user." CreationDate="2022-03-31T12:52:32.210" UserId="11921" />
  <row Id="19512" PostId="7323" Score="1" Text="@haxor789 That way of thinking leads back to writing goto &quot;like a real programmer&quot;. No, show me you can do abstraction well and I've got much more respect for you than if you just show me you know how to crank out a loop." CreationDate="2022-03-31T12:59:49.573" UserId="1401" />
  <row Id="19513" PostId="7323" Score="3" Text="@haxor789: The only time I ever need loops is to work around deficiencies in the programming language and/or the library. In most languages I work in, if you're using a loop you're doing it wrong. Some of them don't even have loops. I, personally, find recursion patterns like anamorphisms, catamorphisms, or hylomorphisms much easier to understand and most importantly much harder to get wrong (can't have an off-by-one indexing error if there's no index). If all else fails, there's always tail-recursion." CreationDate="2022-03-31T13:14:22.803" UserId="945" />
  <row Id="19514" PostId="7323" Score="0" Text="@JörgWMittag completely agree (except, be aware that not every language optimizes tail-recursion)." CreationDate="2022-03-31T13:19:48.783" UserId="1401" />
  <row Id="19515" PostId="7323" Score="2" Text="@candied_orange JörgWMittag The point is about the coding patterns that let you avoid repetition, perform an operation stepwise, let's you manipulate datastructures manually if necessary instead of relying on knowledge of the commands of a particular language and stuff like that. Whether you use go to, for/while/do-while/for each or recursions doesn't really matter. Does it even conceptually matter whether the language optimizes tail-recursions?" CreationDate="2022-03-31T13:31:52.983" UserId="11921" />
  <row Id="19517" PostId="7323" Score="0" Text="@haxor789 it does when you blow the stack" CreationDate="2022-03-31T13:40:26.530" UserId="1401" />
  <row Id="19518" PostId="7323" Score="1" Text="@haxor789 If the language doesn't optimize tail-recursions, they're quite limited in the number of iterations they can do. They certainly can't emulate a loop from 1 to a million, for example." CreationDate="2022-03-31T13:44:26.477" UserId="11922" />
  <row Id="19519" PostId="7323" Score="0" Text="@candied_orange Fair enough I had that stackoverflow joke coming. Though that just shows for why functions are not ideal to use as loops as they produce a lot of overhead necessary for functions but unnecessary for the loop part that you're interested in." CreationDate="2022-03-31T13:44:36.517" UserId="11921" />
  <row Id="19522" PostId="7323" Score="2" Text="@haxor789 : ) ok seriously, you seem to think I'm arguing against loops. I'm not. I'm arguing that loops are buggy, hard to read, untrustworthy piles of code that any pro will regard with deep suspicion. They are powerfully expressive and they aren't going away no mater how many abstractions language designers throw at them. So they are a perfect lesson for new programmers to learn. Just give them plenty of time because this stuff aint easy." CreationDate="2022-03-31T13:51:07.997" UserId="1401" />
  <row Id="19527" PostId="7323" Score="2" Text="@candied_orange I mean I get that you argue for loops as a means for learning debugging. But I'd argue against the assertions that they are inherently buggy, hard to read or untrustworthy. They are as safe as their user. Sure if you multiply your coding power with a loop the impact of small bugs is getting amplified as well. But having that power is kinda what you aim for and would bite you with abstraction in pretty much the same way. Not to mention that you can always unroll a loop whereas rolling up a loop, so to say, is an actual challenge. And of course grasping a few lines is easier." CreationDate="2022-04-01T12:11:21.050" UserId="11921" />
  <row Id="19528" PostId="7323" Score="0" Text="I must protest against you teaching a new generation of developers to think of bugs as mischievous actors who inevitably creep into our code when we aren't looking and &quot;hide in loops.&quot; If your code does not make the machine behave as you expected it to behave, then your code is _defective._ It's long past time for software developers to acknowledge that when code contains a defect—no matter how subtle—it always was the programmer (or team of programmers) who created it and, who bear responsibility for finding it and fixing it." CreationDate="2022-04-01T12:29:42.717" UserId="1269" />
  <row Id="19531" PostId="7323" Score="0" Text="@SolomonSlow sigh. The point of the lesson is to experience the bugs: creating them, finding them, and fixing them. They do inevitably creep into our expressions. Note how many times I had to edit my answer. Heck I even deleted and reposted some of my comments. Call them defects, bugs (See Grace Hopper), or typos; reality often falls short of the ideal. This isn't even a new idea. Plato argued that any form of triangle we experience is an imperfect form of the ideal triangle. So we should expect the bugs. Or as my 11th grade English teacher put it: &quot;Did you read this before you gave it to me?&quot;" CreationDate="2022-04-01T14:49:27.140" UserId="1401" />
  <row Id="19532" PostId="7323" Score="0" Text="You're completely missing my point. But I guess that's on purpose, so I won't argue it any further." CreationDate="2022-04-01T15:03:43.153" UserId="1269" />
  <row Id="19533" PostId="7323" Score="0" Text="If I'm missing something I'm not doing it willfully. If someone is willing to make me see it I'm willing to listen. Look at my profile to see how I approach this." CreationDate="2022-04-01T15:16:14.747" UserId="1401" />
  <row Id="19535" PostId="7323" Score="0" Text="OK, That's fair. My point is, I can divide developers with whom I have worked into two groups; those who said &quot;bug,&quot; and those who said &quot;defect.&quot; The ones who said &quot;bug&quot; tended to create more software defects and, tended to show less concern for them than the ones who said, &quot;defect.&quot; An attitude—not a common attitude, but one that was exclusive to the &quot;bugs&quot; crowd—said, &quot;It's not my problem, until the testing department reports it.&quot; (Same crowd also was more likely to look down on the testers, or even to consider them as adversaries.) In short: the &quot;defect&quot; people were better team players." CreationDate="2022-04-01T16:45:27.090" UserId="1269" />
  <row Id="19536" PostId="7323" Score="0" Text="@SolomonSlow I had thought you wanted me to back up my thesis that loops are hard to read.  Which I can if you like. But now it seems you want me to choose to use stuffy formal language to express myself because it will somehow make me a better coder. I really don't know where that idea came from. In my experience everyone says bug and defect and choses which to use based mostly on who they are talking to. Students certainly should know both terms. But if you have some actual data or study that backs up your claim I'd love to see it." CreationDate="2022-04-01T17:02:23.520" UserId="1401" />
  <row Id="19537" PostId="7323" Score="1" Text="Re, &quot;don't know where that idea came from.&quot; It came from my personal experience—40+ years of writing code. You said, &quot;bugs love to hide...&quot; OK, that sounds more fun than saying &quot;its really hard to write defect-free code.&quot; But, when you personify bugs like that, IMO, it sounds like an invitation to shift the blame. In my experience, developers who personify bugs have more of a lax attitude toward them. It's as if, at _some_ level, when they say, &quot;Weird! I don't know how that bug got in there&quot; instead of saying, &quot;Damn! I sure ***ed that up,&quot; they're denying their culpability for the problem." CreationDate="2022-04-01T17:35:23.957" UserId="1269" />
  <row Id="19542" PostId="7323" Score="1" Text="@SolomonSlow I'm not sure that translates to every team. On my team, the people who say &quot;bug&quot; are more likely to be interested in making the software work right no matter how things happened. The people who say &quot;defect&quot; are more interested in figuring out how to assign blame." CreationDate="2022-04-01T20:29:01.623" UserId="1407" />
  <row Id="19521" PostId="7325" Score="3" Text="You are right about the first one, that is a classic stack, but you missed the second one, it's a simple nested loop. You wouldn't use a stack for this and if you use a queue then you've overcomplicated things, there are better patterns to compare stacks to queues." CreationDate="2022-03-31T13:47:42.257" UserId="11481" />
  <row Id="19524" PostId="7325" Score="3" Text="+1 unlike in many other exercises, the output closely matches the flow of the program, making it easy to visualize whats happening in the code. It looks just like the output of a &quot;printf-debugged&quot; program." CreationDate="2022-03-31T14:05:04.123" UserId="9165" />
  <row Id="19541" PostId="7325" Score="0" Text="@PhilipRoman: I think [Owen Reynold's answer](https://cseducators.stackexchange.com/a/7326/1654) comes closer to saying exactly that, but yeah, I'm not sure anyone's posted an answer where that's the main point.  Except the question's not asking why these are good teaching exercises, so maybe not." CreationDate="2022-04-01T20:27:28.787" UserId="1654" />
  <row Id="19525" PostId="7326" Score="0" Text="It's not really &quot;cool designs&quot; from way back. It's to get non-programmers their first experience with looping. - I taught CS." CreationDate="2022-03-31T19:26:32.780" UserId="8381" />
  <row Id="19526" PostId="7326" Score="1" Text="@RickHenderson They are from way back -- books of BASIC programs from the 1980's had them. But thanks for the &quot;for non-majors&quot; idea. That aligns with my 1st para that it's easy to assume these are cutsie junk, useless for &quot;real&quot; CS majors." CreationDate="2022-03-31T20:47:58.210" UserId="8773" />
  <row Id="19539" PostId="7326" Score="1" Text="*Off-by-one errors are very easy to spot in these pictures* - I think that's really the key point.  Not only is the desired output tied closely to each step of execution, like a debug-print and unlike for example a sorting algorithm, the actual shape will be visually wrong for some kinds of bugs.  For students who might not have learned how to use a debugger yet, this code is still very debugable except in the very lowest-level languages (like assembly) where even printing numbers as ASCII digit-strings takes some work and there are calling-conventions you can get wrong." CreationDate="2022-04-01T20:20:16.003" UserId="1654" />
  <row Id="19540" PostId="7326" Score="0" Text="Loops where you aren't printing something every iteration as part of the desired output don't have this feature, and debugging them might require single-stepping in a debugger (or adding debug-prints), and could still be trickier to follow." CreationDate="2022-04-01T20:23:46.730" UserId="1654" />
  <row Id="19543" PostId="7326" Score="0" Text="@OwenReynolds The idea holds that it's still about learning loops and not pretty pictures. There are CS majors who start first year having never coded before. Trust me." CreationDate="2022-04-01T22:45:10.887" UserId="8381" />
  <row Id="19562" PostId="7326" Score="0" Text="It's funny how one person's &quot;cutsie junk&quot; is another person's art. I see no harm in making CS fun, even if patterns like this didn't have obvious practical application (they do). What's the problem with making programming accessible to non-CS majors, exactly? That seems like a social imperative in this day and age to me." CreationDate="2022-04-05T15:36:32.320" UserId="9426" />
  <row Id="19529" PostId="7328" Score="6" Text="Not an answer, just an anecdote: From my experience teaching first years, it takes a while to convince students that unlike the Windows &quot;Help&quot; button, a Linux man-page is actually useful (more or less (pun intended)). Also students switch from being taught  everything by a teacher to having to figure out things by themselves for the first time." CreationDate="2022-04-01T13:27:04.427" UserId="11138" />
  <row Id="20108" PostId="7328" Score="0" Text="@NOTCSEducator That link appears to go to a completely unrelated chat transcript." CreationDate="2022-05-27T20:31:45.030" UserId="11923" />
  <row Id="19572" PostId="7329" Score="0" Text="Apprenticeship... Wait, I've said that already. And it's not a shortcut. But it might be the shortest path in the NP hard problem of learning a profession. Not a new idea at all. We just have to care enough about people to help them flourish. But that's not really profitable in the short run. Long run.... The only answer." CreationDate="2022-04-07T10:30:08.527" UserId="5349" />
  <row Id="19601" PostId="7329" Score="1" Text="There is a reason why *technical writing* is a separate profession and you can even get advanced degrees in it. It is sufficiently different from both &quot;technical&quot; and &quot;writing&quot; in general." CreationDate="2022-04-10T11:07:15.957" UserId="945" />
  <row Id="19567" PostId="7330" Score="1" Text="&quot;The people who wrote it are usually experts on the subject and rather spend their time being experts than write documentation for other people&quot; -- most &quot;true&quot; experts I know are all about documenting their knowledge, not only for their future self reference, but usually because they genuinely care about a library or product's longevity (reducing the [bus factor](https://en.wikipedia.org/wiki/Bus_factor)) and simply sharing knowledge about a thing they're passionate about." CreationDate="2022-04-05T23:37:02.503" UserId="9426" />
  <row Id="19545" PostId="7331" Score="0" Text="&quot;Documentations are written in a very specific format that follows certain rules.&quot; I'm not sure I communicated myself clearly. My primary goal here is to figure out *concretely* what those rules are, so that I can explicitly state them rather than just intuitively understanding them." CreationDate="2022-04-02T00:58:25.840" UserId="11923" />
  <row Id="19544" PostId="7332" Score="0" Text="This seems like a great list of things to keep in mind for *writing* documentation, but I don't think it gets me closer to my goal." CreationDate="2022-04-02T00:57:15.013" UserId="11923" />
  <row Id="19548" PostId="7332" Score="1" Text="@KarlKnechtel I'm sorry to hear that.  I'll give you a sense of where this would fit into my thinking, though, in case that helps you.  When I design lessons for catch-up skills, where students went wrong is often my starting point, and I devise my lessons from there towards my goals.  I don't believe that young professionals would have much problem with documentation; I believe that they have learned from early on that it's not useful, and my answer outlines roughly how I think that happened.  The teaching then, would be oriented towards breaking down those specific problems." CreationDate="2022-04-02T04:19:00.667" UserId="27" />
  <row Id="19549" PostId="7332" Score="2" Text="@KarlKnechtel The other result, if my outline is correct, is that very early students are actually *right* not to go to the documentation.  It will not help them without additional hand-holding.  They need at least a sprinkling of background and maturity in the field to begin to make good use of those resources." CreationDate="2022-04-02T04:21:02.093" UserId="27" />
  <row Id="19556" PostId="7332" Score="0" Text="I think the issue I have is that it *won't* generally be useful for the new student unless you artificially make it so, but the skill needs to be learned *in advance* for when it will be useful later as a professional. So my current thinking (oriented towards book-writing) is that it needs to be an explicit topic, introduced only at the right time." CreationDate="2022-04-03T10:55:01.713" UserId="11923" />
  <row Id="19558" PostId="7332" Score="1" Text="@KarlKnechtel Yes, I think that's accurate.  In my 4-year program, we introduce documentation at multiple passes over the first three years.  The first pass is essentially pre-digested, with a short excerpt that contains only the five methods that we are talking about at that moment, and we discuss how to interpret what we are looking at.  At the next exposure, a few months later, we do it again, but it's easier.  From then on we provide api-style method lists..." CreationDate="2022-04-03T17:32:47.903" UserId="27" />
  <row Id="19559" PostId="7332" Score="0" Text="... with confidence that the students can read them.  Later, we get into full (simple) API documents, and we have guided hunting expeditions.  The guidance diminishes over time as they get used to it." CreationDate="2022-04-03T17:34:11.580" UserId="27" />
  <row Id="19560" PostId="7332" Score="0" Text="For the whole next year, we will point them towards object documents, and eventually towards packages with many objects, and only support as needed.  In the following year we start again with API documents in scheme instead of Java." CreationDate="2022-04-03T17:35:18.767" UserId="27" />
  <row Id="19561" PostId="7332" Score="0" Text="By the time our kids get to their fourth year, they are pretty capable of looking through documentation.  But, of course, some of that is because of this instruction, and some of it is just because by the fourth year, they also have a generally rich background, so they understand a lot in general by then" CreationDate="2022-04-03T17:36:48.447" UserId="27" />
  <row Id="19570" PostId="7332" Score="0" Text="I am trying to guess how many long sentences are in *Atlas Shrugged* :-) My take on what I have seen of the evolution of languages and tools over the last 30 years is that there has been an exponential explosion of layers and possibilities, such that starting off now to learn the fundamentals is probably out of reach for most humans. It was always arcane, but usually with a pretty restricted list of separate areas to learn. Compare today's environment with *The C Programming Language* and a text editor and compiler commands. Why exactly did we go in this direction? Where is it leading?" CreationDate="2022-04-07T10:15:00.360" UserId="5349" />
  <row Id="19568" PostId="7334" Score="2" Text="Right, if someone is &quot;trying to solve a programming problem&quot; that doesn't make them a programmer any more than me trying to solve a medical problem makes me a doctor. If someone wants to deeply understand the system they are working with and why it is that way, I suppose that makes them a software engineer. Students eventually go either the first way and to another major, or towards a strong capacity in programming. If you want to understand something, obstacles are just part of the process. One time I bought a second reference book to solve a problem, and discovered an error in the first." CreationDate="2022-04-07T10:04:17.583" UserId="5349" />
  <row Id="19569" PostId="7334" Score="2" Text="Part of the problem is that these days there are a lot of frameworks and libraries that make it easy to &quot;do&quot; some quite impressive things without having a deep understanding of what you are doing.  Students aren't necessarily aware that there is more to programming than that (and a deeper level of understanding is possible).  Also a *lot* of education (perhaps just in the U.K.) is goal-oriented rather than understanding-oriented, so I don't think this is a flaw in the students, but a product of the educational environment?" CreationDate="2022-04-07T10:14:05.623" UserId="11932" />
  <row Id="19571" PostId="7334" Score="1" Text="Yes, I think it's better when doing impressive things requires deep understanding. Making deep things reachable with a shallow understanding and a few syntax details does not make them safe to build large systems on. I'm not sure how this will all work out. &quot;AI will save our behinds&quot;, is my usual answer. I hope some idiot can whip together a sufficiently smart AI soon." CreationDate="2022-04-07T10:20:50.343" UserId="5349" />
  <row Id="19573" PostId="7334" Score="0" Text="I think AI is going to make things a lot worse as it will take the work that would normally be done by junior programmers, which raises the question of where the senior programmers will come from later on?  20 years ago you could make money setting up basic commercial websites, but wix &amp; wordpress etc. have put an end to a lot of that.  I suspect CoPilot will eventually do the same for low-end programming.  I don't think that is a good thing." CreationDate="2022-04-07T10:38:28.953" UserId="11932" />
  <row Id="19577" PostId="7334" Score="1" Text="I was thinking larger and long-term: humans would make beer, create art and music, and do standup comedy, and AI would run the planet." CreationDate="2022-04-07T14:59:49.177" UserId="5349" />
  <row Id="19578" PostId="7334" Score="2" Text="Bit of a pity, programming can be good fun! ;o)" CreationDate="2022-04-07T15:02:01.377" UserId="11932" />
  <row Id="20011" PostId="7335" Score="0" Text="@downvoter - some feedback on what is wrong with my answer would be appreciated." CreationDate="2022-05-19T04:55:21.653" UserId="11932" />
  <row Id="19557" PostId="7336" Score="1" Text="My general approach towards jargon is to address the essential things head-on at the beginning (the programming meaning of `string` is perhaps not obvious, but there isn't any getting around it) and avoid the rest. I hope that's an appropriate foundation for approaching documentation. As for unknown unknowns: I suppose that reading *error messages* is a more fundamental skill (and possibly the biggest reason that jargon is necessary)" CreationDate="2022-04-03T10:58:48.377" UserId="11923" />
  <row Id="19588" PostId="7339" Score="4" Text="Couldn't you ask the same question about languages with built-in functions for high-level operations like sorting? Yet educators still teach students about sorting algorithms." CreationDate="2022-04-08T14:21:43.923" UserId="1471" />
  <row Id="19589" PostId="7339" Score="3" Text="The difference is that CoPilot is a general tool that will replace problem solving skills, at least for the types of programming task used to help students learn problem solving skills.  This is because the data on which they were trained will contain solutions to those problems.  Abstraction is an important tool in CS, but there are occasions where it is fine to use an abstraction without understanding how it works and times when it isn't.  Sorting is a good example if we have a lot of things that need sorting." CreationDate="2022-04-08T14:52:28.967" UserId="11932" />
  <row Id="19598" PostId="7339" Score="1" Text="We have to think about why we are teaching people stuff. What is the goal?" CreationDate="2022-04-08T23:19:28.977" UserId="5349" />
  <row Id="19602" PostId="7339" Score="2" Text="Do you know how your compiler works?" CreationDate="2022-04-10T15:05:44.823" UserId="1213" />
  <row Id="19603" PostId="7339" Score="2" Text="as an experiment, I gave a demo of assembler and what the compiler does in the first week of my programming module (making it clear that it wasn't examined, just thought it would be a good way to introduce sequence for the more practically minded students).  Ideally I want students to be able to be comfortable with programming both as an abstract activity, but also as a hardware-related activity, according to the needs of the job at hand (I am more at the hardware end)." CreationDate="2022-04-10T16:03:40.747" UserId="11932" />
  <row Id="19604" PostId="7339" Score="1" Text="I think it is quite a good idea to have a reasonable idea of how your compiler works.  In most craft activities understanding and appreciating your tools is essential in doing good work." CreationDate="2022-04-10T16:48:13.457" UserId="11932" />
  <row Id="19575" PostId="7341" Score="3" Text="I think my concern is more that it will be difficult for students to gain understanding and develop algorithmic thinking if they are using tools that do these things for them.  AI is quite a good example of this as there are an awful lot of practitioners that are using tools (such as SciKit learn) following recipies that they have seen on blogs to solve problems without having a fundamental understanding of the methods they are using (and likely finding pitfalls without knowing about them)." CreationDate="2022-04-07T14:08:18.553" UserId="11932" />
  <row Id="19576" PostId="7341" Score="3" Text="I don't think programming skills actually will become obsolete (because the AI we have is not going to understand what it is doing), just jobs for junior programmers.  We will still need programmers that understand the program, it just isn't clear that an eduction with AI tools widely used will produce them." CreationDate="2022-04-07T14:25:23.687" UserId="11932" />
  <row Id="19579" PostId="7341" Score="1" Text="Eh? I think I trust you (or me!) to be intelligent, even though I'm sure you can't use your intelligence to produce a copy of your own intelligence; conversely, it's easy to write a quine in most languages, and those quines are not intelligent merely by virtue of being able to reproduce their own source, because that's all they can do. I think your answer would be improved by removing the parenthetical aside." CreationDate="2022-04-07T21:33:21.403" UserId="11475" />
  <row Id="19580" PostId="7341" Score="0" Text="@PatrickStevens, actually, a Quine can contain arbitrary other code. Read Ken Thompson's Turing Award Lecture: [_Reflections on Trusting Trust_](https://users.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf) (PDF)." CreationDate="2022-04-07T21:41:33.713" UserId="1293" />
  <row Id="19581" PostId="7341" Score="0" Text="I do know that, and have read the paper. My point stands that &quot;quine&quot; is unrelated to &quot;intelligent&quot;, and I don't see its relevance to your answer." CreationDate="2022-04-07T21:42:39.870" UserId="11475" />
  <row Id="19582" PostId="7341" Score="0" Text="@PatrickStevens, you miss the point that even though a programmer can produce a Quine it might be interesting if an AI could do it. And note that in general at the moment and for the past 60 years, AI programs are not _intelligent_ in a real sense." CreationDate="2022-04-07T21:45:35.060" UserId="1293" />
  <row Id="19583" PostId="7341" Score="1" Text="Well, Codex can almost certainly produce a quine, though not a quine which contains Codex. But I can't produce a quine which contains me, either, so that's an extremely unfair demand!" CreationDate="2022-04-07T21:47:05.510" UserId="11475" />
  <row Id="19584" PostId="7341" Score="0" Text="If copilot can &quot;generate&quot; a fast inverse square root function, I'm sure it can generate a quine provided there are some in the dataset it is trained on.  I don't think the current direction of &quot;AI&quot; is going to produce understanding any time soon.  But then again it is possible to do a fair bit of coding without understanding - codex and copilot are not doing anything that some students haven't done for decades, just faster." CreationDate="2022-04-08T07:01:16.883" UserId="11932" />
  <row Id="19597" PostId="7341" Score="1" Text="It is not very hard for a human to produce another human. Animals and plants reproduce themselves pretty well too. Even bacteria do it. It doesn't take intelligence to produce intelligence. This is why I keep saying that it will 'evolve' (literally, to give off) quite suddenly. We didn't try to duplicate bird muscles to make an airplane." CreationDate="2022-04-08T23:17:07.890" UserId="5349" />
  <row Id="19646" PostId="7341" Score="1" Text="I'm actually not sure I agree with the start of this answer - I'd call the counterpoint K-12 math education and the presence of Wolfram Alpha and similar programs. Hard to use them effectively and catch when you set it up wrong if you don't know the underlying principles to begin with." CreationDate="2022-04-30T20:28:43.327" UserId="919" />
  <row Id="19585" PostId="7342" Score="1" Text="I don't think code generated by such AI tools would be considered plagiarism, indeed one of the criticisms of these tools for use in industry is that they sanitise plagiarism from the code that was used to train them.  Hiring humans on the other hand would be a very serious offence if caused (likely to cause the students to be expelled)." CreationDate="2022-04-08T07:02:28.513" UserId="11932" />
  <row Id="19586" PostId="7342" Score="1" Text="&quot;A lot of these new requirements smell a lot like much high-level data science, deep learning and ML. &quot;  I work in ML, the use of tools without understanding is a *big* problem there. It isn't true that you can safely use these tools without a fundamental understanding of the maths," CreationDate="2022-04-08T07:08:51.953" UserId="11932" />
  <row Id="19587" PostId="7342" Score="1" Text="This answer (+1) is also missing the question of how we are going to bridge the gap from where we are with programming to the point where AI can do the programming for us, which isn't going to happen any time soon (the current approach is not likely to produce an AI that understands the specifications or the code)." CreationDate="2022-04-08T07:11:30.687" UserId="11932" />
  <row Id="19591" PostId="7342" Score="2" Text="&quot;The use of tools without understanding...&quot; -- yep, that's a big problem in all high-level domains I suspect, from databases to distributed systems to functional programming to networking... you can never really escape the low-level details popping up and ruining the party sooner or later, so it's best to know them. But my post is assuming that everything with AI code just works to the extent the hype promises. I'm giving it the benefit of the doubt and (hopefully) showing that it's still not (yet) a game-changer given the cheating that's already pretty much rampant." CreationDate="2022-04-08T16:15:14.773" UserId="9426" />
  <row Id="19592" PostId="7342" Score="0" Text="&quot;everything with AI code just works to the extent the hype promises&quot; I don't think it is promising more than just helping out with the boilerplate programming.  I've been doing a bit of reading and it seems that running code through CoPilot may be enough to protect the user against copyright/licence infringement prosecution, and it can generate multiple solutions, so I don't think it will be as easy to deal with CoPilot plagiarism as it is for code cut and pasted from the web." CreationDate="2022-04-08T16:18:43.400" UserId="11932" />
  <row Id="19593" PostId="7342" Score="0" Text="One solution to cheating is programming tests in exam conditions.  Give them the specifications beforehand, but the student then has to implement the solution in the lab with the WWW blocked (except for local copies of particular resources).  Unless they have a photographic memory, that would be a difficult test to pass without understanding.  Pretty stressful for the student though." CreationDate="2022-04-08T16:20:57.853" UserId="11932" />
  <row Id="19594" PostId="7342" Score="0" Text="I'm sure you're aware, but [searching for &quot;will GPT 3 replace coders&quot;](https://html.duckduckgo.com/html?q=will%20gpt%203%20replace%20coders) shows plenty of articles that are discussing repercussions of AI code beyond boilerplate generation. Yeah, the &quot;lab conditions&quot; approach you mention is another possible solution among others, but isn't scalable, especially in a remote-first, post-COVID world for education and hiring. Many other approaches are possible, like AI proctoring and monitoring, but none are a silver bullet, of course." CreationDate="2022-04-08T16:33:54.783" UserId="9426" />
  <row Id="19595" PostId="7342" Score="0" Text="&quot;I don't think it will be as easy to deal with CoPilot plagiarism as it is for code cut and pasted from the web&quot; -- yes, but as my post argues, the human-hire-based cheating is almost certainly harder to detect than either of those, and that's already endemic and has been around forever (and only become more appealing with remote learning/hiring)." CreationDate="2022-04-08T16:38:00.140" UserId="9426" />
  <row Id="19599" PostId="7342" Score="0" Text="The point I was making is that the use of CoPilot may not be treated as plagiarism (or at least may not be enforcible).  That would mean it's use would not even be covert.  In my experience human hire cheating is not that difficult to spot - typically using more advanced techniques than taught and a lack of adherence to the requirements (and guidance given in lectures that the programmer hadn't seen)." CreationDate="2022-04-09T05:24:35.523" UserId="11932" />
  <row Id="19590" PostId="7343" Score="1" Text="Yes, that is my primary concern, thanks for the reference!" CreationDate="2022-04-08T15:46:20.360" UserId="11932" />
  <row Id="19607" PostId="7346" Score="1" Text="Can't speak for any other university since I hadn't done any research in that regard, but it has been present in my university since around year 2000." CreationDate="2022-04-16T11:01:59.177" UserId="11453" />
  <row Id="19608" PostId="7346" Score="0" Text="Thanks! This is roughly the kind of delay I would imagine between its emergence in industry and being written into syllabuses" CreationDate="2022-04-16T11:05:39.907" UserId="11957" />
  <row Id="19609" PostId="7346" Score="3" Text="I think it's an interesting question. I waste a lot of hours reading questions about multithreading on StackOverflow, and many of them seek help with homework assignments that seem to come from instructors who have only a weak understanding of how to use threads. (E.g., the student is asked to make two or more threads take turns performing some set of tasks such that the tasks are performed sequentially, and in a strictly specified order.) I would love to hear how educators discuss teaching threads." CreationDate="2022-04-16T14:43:02.350" UserId="1269" />
  <row Id="19616" PostId="7346" Score="2" Text="@SolomonSlow in my experience, it's not just multithreading that's taught with poor examples in CS. Recursion, OOP, design patterns and all manner of other CS concepts are often presented in ways that are misapplied and contrived, leaving students with an unclear motivation for why the tool exists, what class of problems it's supposed to solve, or when to use it effectively." CreationDate="2022-04-18T18:11:04.217" UserId="9426" />
  <row Id="19617" PostId="7346" Score="0" Text="@WobbleMeister Just for context, what are you trying to understand or infer based on the answers to this question, or is it pure curiosity?" CreationDate="2022-04-18T18:12:27.547" UserId="9426" />
  <row Id="19618" PostId="7346" Score="0" Text="@ggorlen just curiosity really (piqued by related research into educational tools for helping students with mulithreading in Java)" CreationDate="2022-04-18T21:09:56.113" UserId="11957" />
  <row Id="19620" PostId="7346" Score="0" Text="I did it as a student circa 1991-1995" CreationDate="2022-04-20T10:00:22.077" UserId="204" />
  <row Id="19621" PostId="7346" Score="0" Text="@ctrl-alt-delor was it as part of an OS architecture module, or a programming module?" CreationDate="2022-04-20T10:02:18.290" UserId="11957" />
  <row Id="19622" PostId="7346" Score="0" Text="@SolomonSlow yes. Too much emphasis on no synchronisation of threads (or how to make your complex multi-threaded come more complex and perform like sequential code). Not enough no techniques that make it simple (no mutation / functional programming, pipes, etc )" CreationDate="2022-04-20T10:03:55.140" UserId="204" />
  <row Id="19623" PostId="7346" Score="0" Text="@WobbleMeister I did it as a student circa 1991-1995: Partly as OS architecture, partly programming with libraries (probably in the OS arch module), and partly programming with a specialist language (I am not sure that many of us did this last one)." CreationDate="2022-04-20T10:05:56.820" UserId="204" />
  <row Id="19625" PostId="7346" Score="0" Text="@ctrl-alt-delor maybe not, but it's useful to me to know that it was an option available to you in the early 90s! Thank you" CreationDate="2022-04-20T10:26:01.700" UserId="11957" />
  <row Id="19681" PostId="7346" Score="0" Text="Just to provide you a little more data... threading was introduced to me for the first time fifteen years ago as part of my undergraduate Programming 3 course. I was familiar with multitasking all the way back in the mid-80s and write code that was part of a cooperative multitasking system in the mid-90's. As a current CS teacher at the high school level, I introduce the topic of threading to my post APCS-A students." CreationDate="2022-05-11T15:10:11.600" UserId="12011" />
  <row Id="19610" PostId="7347" Score="1" Text="Have you kept in mind the fact that simply some of them (even maybe up to 50% of them) may not be interested in algorithms at all? They may be aspiring frontend developers, DevOpses, network administrators... CS is about the broad knowledge revolving around computers and students need to be able to grasp at least the bare minimum of everything you teach there, but from my experience peaks of 50% of the students actively participating in any algorithms and data structures courses is a very decent result. You can't engage everyone. Without more details, it's gonna be hard to offer decent advises" CreationDate="2022-04-18T11:00:01.620" UserId="11453" />
  <row Id="19611" PostId="7347" Score="4" Text="@Fureeish, that sounds very wrong. A CS degree isn't a jobs program. It is an education program." CreationDate="2022-04-18T11:26:22.417" UserId="1293" />
  <row Id="19612" PostId="7347" Score="1" Text="What do you mean by &quot;interactive&quot;? Or do you intend &quot;active learning&quot;? Not quite the same thing. How many students do you have?" CreationDate="2022-04-18T11:27:19.517" UserId="1293" />
  <row Id="19613" PostId="7347" Score="2" Text="@Buffy why would that sound very wrong? And while I agree that in principle, CS degree is not about landing a job but about obtaining knowledge, ultimately this knowledge is meant to be used. Majority of CS students want to land a job after they finish university. If your students mostly consist of people that seek knowledge just for the sake of seeking knowledge, I do surely envy you. And I believe that CS degree should be on par with current jobs' requirements and expectations." CreationDate="2022-04-18T11:45:53.577" UserId="11453" />
  <row Id="19614" PostId="7347" Score="0" Text="@  Buffy, Class of size 60. Interactive means students participate in the activities which I do in the class. Like if I aks something then they respond and given me answers /opionions." CreationDate="2022-04-18T14:43:06.003" UserId="11594" />
  <row Id="19615" PostId="7347" Score="0" Text="@ Fureeish Yes students here are mostly interested in Webdesign, full stack development etc." CreationDate="2022-04-18T14:44:34.853" UserId="11594" />
  <row Id="19619" PostId="7347" Score="0" Text="@Shi Does this course use a textbook like Skiena's *The Algorithm Design Manual*? I am asking because some algorithms courses are oriented towards the theoretical, while others are oriented towards the practical, encouraging experimentation by the students. I am a hands-on learner myself. When I was a CS student (a long time ago; retired software engineer now), the first kind of class would bore me to no end, while the latter kind would get me all fired up, inspiring me to experiment and research the literature beyond what was needed for class." CreationDate="2022-04-19T22:59:18.323" UserId="1940" />
  <row Id="19624" PostId="7347" Score="0" Text="@Fureeish There are algorithms in front end. sort, search, square-root, etc are not the only algorithms.And front-end devs will use the back-end algorithms. Get them interested in how to choose an implementation. Teach then algorithms that are relevant to them." CreationDate="2022-04-20T10:11:17.360" UserId="204" />
  <row Id="19626" PostId="7347" Score="0" Text="@ctrl-alt-delor I really dislike arguments like these, because one can strech them further indefinitely. Should an aspiring web-developer learn assembly because - after all - the code they write will be transformed into it? I don't think so. It's *good* to have a basic understanding of it, but it won't be pleasant for everyone. Algorithms are a little bit different. They are way closer to maths. Should everyone learn maths? Yes, beacuse it teaches *a way of thinking*. Should everyone at a CS program learn algorithms? Yes, for the same reason. Will everyone enjoy maths / algorithms? No, never." CreationDate="2022-04-20T10:50:37.337" UserId="11453" />
  <row Id="19627" PostId="7347" Score="0" Text="@ njuffa, I assign problems from the skiena's book but I cover theory part from coreman or jeff erickson's lecture notes." CreationDate="2022-04-20T13:43:21.053" UserId="11594" />
  <row Id="19630" PostId="7350" Score="0" Text="I feel you have just started with a cultural assumption which is location specific There is an FAQ for this in Academia.SE: https://academia.meta.stackexchange.com/questions/4471/academia-varies-more-than-you-think-it-does-the-movie" CreationDate="2022-04-27T07:42:50.993" UserId="694" />
  <row Id="19642" PostId="7350" Score="1" Text="I have noticed that you ask great questions.  This isn't really a comment about this question specifically, so it doesn't really belong here and I'll delete it in a day or so.  I just wanted to say that I really appreciate your posts." CreationDate="2022-04-29T13:48:04.920" UserId="27" />
  <row Id="19632" PostId="7353" Score="3" Text="Actually, if the decorator function invokes the decorated function then it is actually quite close to GoF usage, though there the emphasis is on objects and interfaces." CreationDate="2022-04-27T22:19:09.610" UserId="1293" />
  <row Id="19633" PostId="7353" Score="0" Text="@Buffy a function is just an object with a single method, the simplemost interface :-)" CreationDate="2022-04-28T04:43:54.887" UserId="660" />
  <row Id="19641" PostId="7354" Score="0" Text="I love this answer." CreationDate="2022-04-29T13:46:32.533" UserId="27" />
  <row Id="19643" PostId="7354" Score="0" Text="@BenI. Note that the answer might be quite different if it were one professor and one TA. But, thanks. Fun to think about these issues again." CreationDate="2022-04-29T13:51:42.533" UserId="1293" />
  <row Id="19644" PostId="7354" Score="0" Text="Good point regarding the experience needed to give lectures that drive the learning of the students. Regarding the grading, my concern was not about variability of grading, it was about the quality of feedback. For example, when I see students that write messy code, I can explain to them very clearly why this is bad, because I have written a lot of messy code myself, and I know how much trouble it can cause down the road... But the TAs do not have enough &quot;down the road&quot; experience." CreationDate="2022-04-29T14:06:00.643" UserId="1873" />
  <row Id="19645" PostId="7355" Score="0" Text="How is such a thing &quot;interactive&quot;?" CreationDate="2022-04-30T11:04:06.077" UserId="1293" />
  <row Id="19647" PostId="7357" Score="0" Text="The objection to overly harsh grading is right, but I take it into account when I grade. If a solution is imperfect based on criteria that the students could not have known, then I can give it full mark, but still give verbal feedback on what should be improved. IMO, the verbal feedback is more important than the actual grade." CreationDate="2022-05-01T05:41:42.613" UserId="1873" />
  <row Id="19648" PostId="7357" Score="0" Text="@ErelSegal-Halevi That makes more sense.  You might want to mention to students that if anyone is interested in more detailed feedback in order to improve, you might be willing, time permitting.  It wouldn't impact their grade, then, it would just be to get thoughts about how to make the best code that they can make." CreationDate="2022-05-01T11:16:18.160" UserId="27" />
  <row Id="19649" PostId="7358" Score="0" Text="This isn't answering the question, which was how it will affect teaching programming.  &quot;It is no different in type to the problem of assigning students to write an assembler-language program, and they writing it in C, compiling it, and handing in the result.&quot; this isn't actually true.  As I pointed out, it means that the students can produce code that they don't understand.  I have already observed this as a result of students being able to manually download code from the WWW, having a tool to do it for them makes that worse." CreationDate="2022-05-01T12:51:26.423" UserId="11932" />
  <row Id="19650" PostId="7358" Score="0" Text="BTW I don't think it is a good idea for undergraduate assignments to be very well specified with little ambiguity.  That causes the student not to think about the specifications, or question them.  I have a forum for students to ask questions about the specifications of the coursework (so all students can see the answers) and I encourage them to look for ambiguity or issues with the specifications.  It is part of software development." CreationDate="2022-05-01T13:12:45.960" UserId="11932" />
  <row Id="19657" PostId="7358" Score="1" Text="@DikranMarsupial I agree, and have read and agreed to many of your other comments. But I do think there are similarities to the past, but not exactly the same type. However, the conclusion &quot;adapt&quot;, I think is probably correct. Sorry to not give any advice on how to do this." CreationDate="2022-05-01T21:13:07.393" UserId="204" />
  <row Id="19659" PostId="7358" Score="0" Text="@crtl-alt-delor a discussion of *how* it will affect teaching would also be of interest.  It is somewhat of a concern that these tools are being developed without any investigation of their effect advantages and disadvantages." CreationDate="2022-05-02T10:42:35.057" UserId="11932" />
  <row Id="19651" PostId="7360" Score="0" Text="No, I doubt it.  The problem is that these AI tools don't understand the code they produce.  If the programmer doesn't either, that is hardly a recipe for reliable good quality software.  So how do we teach programmers to understand code if they don't write it (and as typical pedagogical tasks are likely in the training set the AI tools can answer the exercises we currently use to teach understanding).  They are basically a quick way to look up/launder code on the WWW." CreationDate="2022-05-01T17:54:14.407" UserId="11932" />
  <row Id="19652" PostId="7360" Score="0" Text="I don't think that these AI tools can be looked on as a level of abstraction as it isn't clear what they do or how they do it (or what they are going to do), and they don't necessarily produce good code." CreationDate="2022-05-01T18:02:02.260" UserId="11932" />
  <row Id="19653" PostId="7360" Score="0" Text="At each &quot;step&quot; there were always trade-offs between correctness, productivity enhancements/ convenience and performance-losses/inefficiencies/larger overhead (due to being farther away from the bare metal)." CreationDate="2022-05-01T18:10:11.607" UserId="8768" />
  <row Id="19655" PostId="7360" Score="0" Text="is there a correctness trade-off in compiler?" CreationDate="2022-05-01T19:05:39.040" UserId="11932" />
  <row Id="19656" PostId="7360" Score="0" Text="Some compilers you can tell to be fuzzy,e.g. specify how Typescript 2.0's &quot;null- and undefined-aware types&quot; or how its &quot;control flow based type analysis&quot; should work in detail (for edge cases), Aggressive optimization in gcc compilers (`-O4, or -ffloat-store`) comes with trade-offs w.r.t thread-safety or numerical accuracy AFAIK. I'm not an expert in this matter." CreationDate="2022-05-01T21:08:48.700" UserId="8768" />
  <row Id="19658" PostId="7360" Score="0" Text="the compiler is still conforming to a specification (even where it's behaviour are undefined, they are defined as undefined).  AI tools on the other hand have no guarantees that the code they produce will do what you ask it to.  I am not against the use of these tools by people that understand the code they produce.  My question is about how they will affect the production of programmers capable of using them safely." CreationDate="2022-05-01T21:15:40.180" UserId="11932" />
  <row Id="20066" PostId="7361" Score="0" Text="My professor tried the first method. Nobody understood anything. 2nd year students don't understand what a debugger is and why they'd ever need it." CreationDate="2022-05-20T18:54:03.360" UserId="12143" />
  <row Id="19660" PostId="7363" Score="2" Text="It sounds like what you have is lovely, very idiosyncratic, and quite beneficial to the students.  I don't believe you will find such a collection, but I would love to be proven wrong.  Little, deeply thoughtful *discoveries* are not the main and the plain, and the larger resources stick to that." CreationDate="2022-05-02T18:32:55.293" UserId="27" />
  <row Id="19661" PostId="7363" Score="0" Text="Yea... I've been scouring the internet looking for something like a forum where people share their achievements. Something like Creative Computing in the late 70's.  Nothing so far." CreationDate="2022-05-02T18:49:10.573" UserId="12011" />
  <row Id="19671" PostId="7363" Score="0" Text="I tend to post my code snippets in [this discord server](https://discord.gg/programming). Usually short snippets, sometimes larger stuff." CreationDate="2022-05-06T05:25:47.590" UserId="12023" />
  <row Id="19668" PostId="7364" Score="2" Text="There's a difference between learning algorithms in the context of CS theory and &quot;hands on&quot; algorithms necessary to pass job interviews. For example, learning a bunch of NP-reductions, compiler optimizations and FFT is great for the first category but basically useless for the second, which is more about utilizing basic data structures. Then there's competitive coding, which is sort of its own thing... maybe more pertinent to job interviews but not necessarily. So, just to clarify, you're interested in algorithm skills for interviews?" CreationDate="2022-05-05T17:15:00.453" UserId="9426" />
  <row Id="19669" PostId="7364" Score="1" Text="@ggorlen I agree with you! yes exactly for interviews." CreationDate="2022-05-05T17:18:02.510" UserId="12012" />
  <row Id="19663" PostId="7365" Score="0" Text="This is a weird and false history.  Counting from 1 still *exists* because it is useful in many contexts. The question you are responding to is about why counting from zero is useful in *this* context." CreationDate="2022-05-04T22:48:15.677" UserId="27" />
  <row Id="19664" PostId="7365" Score="0" Text="Which exact fact is false @BenI.? You don't say. Counting from zero is useful in any context, Intelpedia gives many examples unrelated to computers." CreationDate="2022-05-04T23:08:20.053" UserId="12015" />
  <row Id="19665" PostId="7365" Score="0" Text="The second article you linked to makes one generalized mention of the problems with zero-based numbering, though since it's an article about the benefits, it isn't a surprise that it doesn't speak more to it.  Zero-based counting is excellent for distances (such as arrays) and its analogs, but disallows the ordinal and cardinal count to match.  If you have index zero, you now have one element, and that mismatch is permanent.  And if you have zero elements, then the question of index becomes undefined...." CreationDate="2022-05-05T02:58:41.530" UserId="27" />
  <row Id="19666" PostId="7365" Score="0" Text="... Sometimes we want distance measuring, sometimes we want ordinal and cardinal to match, such as when we are counting eggs in an egg container.  Both systems have their use and their place." CreationDate="2022-05-05T03:00:09.760" UserId="27" />
  <row Id="19667" PostId="7365" Score="0" Text="You intimate a history in which habit, not clear usefulness, is the reason that standard counting is still around, and it's simply not true.  Every school in the world teaches traditional counting to small children, and children everywhere learn that most people have ten fingers, and learn how to count them so that they *arrive at that number.*  It's a big benefit, and should not be discounted." CreationDate="2022-05-05T03:05:19.537" UserId="27" />
  <row Id="19670" PostId="7365" Score="0" Text="So you don't think we counted from 1 before zero was invented?" CreationDate="2022-05-06T04:37:59.297" UserId="12015" />
  <row Id="19672" PostId="7365" Score="0" Text="We did, I don't contend that you are wrong about everything.  The false history is the part where you say that we kept standard counting because of &quot;habit&quot; instead of &quot;usefulness&quot;.  Both systems are useful." CreationDate="2022-05-06T13:13:14.200" UserId="27" />
  <row Id="20157" PostId="7365" Score="0" Text="&quot;Both systems have their use and their place&quot; - you're justifying habit better than I would ever have." CreationDate="2022-06-01T01:16:33.860" UserId="12015" />
  <row Id="20158" PostId="7365" Score="0" Text="Even in programming, no programming language has removed the standard count.  It would be nonsensical to use positional notation for the size of an array, and we don't, ever.   When your maximum index is [0] (positional counting), your list size is 1 (standard counting, which also matches the maximum ordinal number).  If we all &quot;switched over&quot; you list size would now be zero if your only position was zero, and you would no longer be answering the question &quot;how many items are in this list&quot;, because that is not a positional question." CreationDate="2022-06-01T01:36:30.160" UserId="27" />
  <row Id="20161" PostId="7365" Score="0" Text="You're very very close. I've never seen someone explaining pure convention so well while falling so short of realizing it's just convention. Fascinating." CreationDate="2022-06-02T02:25:34.410" UserId="12015" />
  <row Id="20163" PostId="7365" Score="0" Text="**Person 1:** *holds up an apple* How many apples am I holding?  **Person 2:** Zero.  **Person 1:** *puts down the apple* How many now?  **Person 2:** an undefined number.  If that conversation sounds useful to you, then this conversation probably isn't." CreationDate="2022-06-02T02:53:51.800" UserId="27" />
  <row Id="19700" PostId="7368" Score="1" Text="I like your opening point. Clear and Concise. I encounter a lot of examples where the point is buried is huge examples, or hidden behind obfuscated code. Python is particularly horrendous when it comes to hunting down examples as everyone goes off in their own confusing direction." CreationDate="2022-05-12T13:30:58.383" UserId="12011" />
  <row Id="19675" PostId="7373" Score="1" Text="What level are your students? High school? College? And what do you mean by 40 hours of contact time? You only see them for 40 hours?" CreationDate="2022-05-11T12:41:33.133" UserId="12011" />
  <row Id="19678" PostId="7373" Score="1" Text="Can I say I wish I'd spoken to you both about 10 weeks ago!" CreationDate="2022-05-11T14:21:10.427" UserId="12035" />
  <row Id="19683" PostId="7373" Score="0" Text="There's always a next semester." CreationDate="2022-05-11T16:05:29.997" UserId="6346" />
  <row Id="19686" PostId="7373" Score="5" Text="For those with no coding experience… can you start with something other than C++?" CreationDate="2022-05-11T21:01:56.907" UserId="660" />
  <row Id="19688" PostId="7373" Score="1" Text="Can you explain why c++? It doesn't seem to make much sense for this group of non-coders. Python and many other options (eg R, Matlab, Mathematica...) likely make more sense as they are easier to start with plus students are more likely to use them afterward." CreationDate="2022-05-12T07:35:40.843" UserId="12042" />
  <row Id="19689" PostId="7373" Score="0" Text="Not my choice, I'm afraid. Python does seem like an obvious answer though" CreationDate="2022-05-12T09:05:00.430" UserId="12035" />
  <row Id="19698" PostId="7373" Score="0" Text="C++ introduced without pointers/references and move-semantics, etc. is a fairly direct and readable language. Variables, assignments, functions, loops, and conditionals... that's fundamental programming and it's perfectly approachable in C++. Introduce C++ as merely a particular syntax to procedural programming in general." CreationDate="2022-05-12T12:26:11.820" UserId="12044" />
  <row Id="19892" PostId="7373" Score="1" Text="Why are your students learning C++? What is the goal of the class? If they're postgrads, I assume they're highly specialized in some discipline or another (are they all from the same background, if so, which, if it's relevant?) and are in the class in some context of that discipline. This would have a potentially large impact on what you're teaching and how you approach it relative to a random general audience wanting to pick up coding basics. C++ and programming in general are huge topics and there are so many approaches depending on goals." CreationDate="2022-05-14T18:34:56.070" UserId="9426" />
  <row Id="19940" PostId="7373" Score="1" Text="I just wanted to mention that you _can_ use Jupyter notebooks to teach C++, see https://github.com/jupyter-xeus/xeus-cling" CreationDate="2022-05-16T07:39:47.157" UserId="12124" />
  <row Id="19979" PostId="7373" Score="1" Text="Just because it's *possible* to do C++ in jupyter does it make it reasonable? (genuinely asking!)" CreationDate="2022-05-17T12:49:57.117" UserId="8837" />
  <row Id="20024" PostId="7373" Score="0" Text="@Rusi presumably it allows you to embed working code fragments within the documentation that explains the concept being demonstrated.  That sounds like a useful thing to me, especially if you are teaching a class that has previously studied Python." CreationDate="2022-05-19T13:48:36.510" UserId="11932" />
  <row Id="20025" PostId="7373" Score="1" Text="@DikranMarsupial Yes Knuth-style &quot;literate programming&quot; is one attraction of jupyter. But with a beginner having to just get through basic C++ being the mammoth task it is, I'd question whether secondary frills n spices like LP are relevant here. To me, jupyter &quot;cheats&quot; by postponing the bare necessities of pragmatic programming -- setting up a dev env -- to later" CreationDate="2022-05-19T14:20:24.373" UserId="8837" />
  <row Id="20026" PostId="7373" Score="0" Text="@Rusi that is a fair point.  The sort of beginners that are suitable for C++ are the sort that would be happy with vi and make.  I wouldn't teach C++ to beginners anymore, I did back in the late 90s, but the language has evolved so much since then it is a language for experts these days.  It's not just baroque, it's the full Rococo ;o) (but I *like* Rococo)" CreationDate="2022-05-19T14:24:04.133" UserId="11932" />
  <row Id="20029" PostId="7373" Score="1" Text="@DikranMarsupial Baroque = Bach I like. Baroque = C++ I don't . And I'm reasonably certain that even one who (claims to) love baroque will have his limits. Eg in our time vi, make, ranlib, gdb, etc were de facto part of learning C/C++. Would you add autoconf ?" CreationDate="2022-05-19T15:36:10.277" UserId="8837" />
  <row Id="20031" PostId="7373" Score="1" Text="True, I like Rococo C++, but I like build systems to be more &quot;twinkle twinkle little star&quot; for recorder ;o)" CreationDate="2022-05-19T15:39:06.117" UserId="11932" />
  <row Id="20065" PostId="7373" Score="0" Text="I have been teaching c++ for many years, the most useful tool I use is codio.com we do pay a subscription but it is worth it!&#xA;You will find a full course ready for you in there." CreationDate="2022-05-12T20:34:37.100" UserId="12049" />
  <row Id="19677" PostId="7374" Score="0" Text="Formative assessment at it's finest.  :-)" CreationDate="2022-05-11T14:18:22.800" UserId="12011" />
  <row Id="19684" PostId="7374" Score="1" Text="@codingCat Right. Giving them a week to get completely stuck on a homework assignment is the best way to lose them entirely." CreationDate="2022-05-11T16:14:55.457" UserId="6346" />
  <row Id="19679" PostId="7375" Score="1" Text="In general I agree with your answer but I disagree on classes. Students don’t seem to have much trouble with it and on the contrary they seem to appreciate the elegance of code organization. Maybe it helps that I give them exercises that are elegantly expressed with objects." CreationDate="2022-05-11T14:32:16.147" UserId="6346" />
  <row Id="19680" PostId="7375" Score="3" Text="Agree to disagree. I have students that get organization right from the start, but most students need to drink in the idea of coding and confront a page full of endless left justified code before the need for organization sinks in.  Functions is actually the second topic I cover in my intro course -- right after they get to know the IDE. But, I don't touch on objects in intro at all. The organization of class structure is straight forward, but the fact that you can instantiate multiple instances of the class, each with its own instance variables, can be a bitter pill to swallow." CreationDate="2022-05-11T14:58:38.260" UserId="12011" />
  <row Id="19682" PostId="7375" Score="0" Text="Happy to disagree.  I used to teach `struct`s before classes, just to get the notion of &quot;bundle of data&quot; in to their heads. Have since stopped mentioning structs altogether, but the examples / exercises still have objects that are data-like. For instance `class Point { double x,y; ...... }` so that you can have `Point Point::shift(....)` and `Rectangle::Rectangle( Point,Point )` (rectangle from topleft/botright points). I don't recall there ever being a problem with that. (Are your materials online?)" CreationDate="2022-05-11T16:04:11.183" UserId="6346" />
  <row Id="19891" PostId="7375" Score="0" Text="Why should I bundle data or use classes? I only care about it after I've tried to manage 16 separate variables and methods that represent one entity and run into problems. I'm unlikely to understand or care about loops or arrays until I've tried to write `person0`, `person1`, ... `person16` and print each one's name or figure out their average age. Students don't typically appreciate a solution without experiencing a problem first." CreationDate="2022-05-14T18:31:48.463" UserId="9426" />
  <row Id="19906" PostId="7375" Score="1" Text="If you are not going to teach pointers or references, it is an indication that you shouldn't be teaching C/C++ - they are fundamental to the way the language works and the benefits that C++ has over e.g. Java (the complexity of C++ is the cost you pay for that benefit).  +1 for live coding though." CreationDate="2022-05-15T07:37:44.520" UserId="11932" />
  <row Id="19942" PostId="7375" Score="1" Text="@Dikran Marsupial I would tend to agree. C/C++ should not be the language you try to teach to first semester students. However, if you are stuck starting students out in C/C++ you should try to soften the blow as much as possible and leave the ramifications of pointer manipulation until they have some mastery over the basic idea." CreationDate="2022-05-16T12:08:51.627" UserId="12011" />
  <row Id="19943" PostId="7375" Score="0" Text="@codingCat indeed, just because you can do arithmetic on pointers, doesn't mean you should! ;o)" CreationDate="2022-05-16T12:10:45.737" UserId="11932" />
  <row Id="19687" PostId="7377" Score="0" Text="Your loop back spot appears before the `for` declaration.  Why?" CreationDate="2022-05-12T03:27:30.997" UserId="27" />
  <row Id="19694" PostId="7377" Score="0" Text="The loop back spot is the for declaration.  Hard to show using text. When I'm explaining this in class I simply write a 2 and draw an arrow pointing at for." CreationDate="2022-05-12T11:55:26.867" UserId="12011" />
  <row Id="19728" PostId="7379" Score="4" Text="+1 I was going to ask after the same thing. Although I would have phrased the question: Is it _reasonable_ to award zero for non-compilation?" CreationDate="2022-05-12T19:52:37.097" UserId="8137" />
  <row Id="19730" PostId="7379" Score="3" Text="Might help to edit the link to the Academia question in here. Most of the comment-discussion has now been moved to chat. General consensus in comments &amp; answers is that should be a base expectation: https://academia.stackexchange.com/questions/185044/grading-on-a-curve-in-required-doctoral-course-failing-as-a-result" CreationDate="2022-05-12T20:11:24.387" UserId="8137" />
  <row Id="19737" PostId="7379" Score="19" Text="I had this exact constraint imposed in college back in the early 90s (I'm old). Prof was very clear on grading criteria for the whole class. Last project of the year &quot;final&quot; project grade - if I got 100%, or 0% I'd still get a &quot;B&quot; in the class (quirk of scoring and my previous tests / projects). I submitted a file entirely of comments, explaining what I would do, in pseudo code, if I had time, but had to study for other things. Made sure the entry/exit points were correct so it cleanly compiled, but did nothing when run. Got 15 / 20 points for demonstrating understanding." CreationDate="2022-05-12T21:45:08.420" UserId="12052" />
  <row Id="19777" PostId="7379" Score="1" Text="What is the level of the course and what is expected? I think any answer will highly depend on it." CreationDate="2022-05-13T09:27:40.630" UserId="11919" />
  <row Id="19778" PostId="7379" Score="2" Text="@Mayou36 I was mostly thinking of first and second year undergraduate courses.  I wasn't really thinking of advanced programming courses as they would be unlikely to have students that would submit a non-compiling program.  Not all CS students end up (or even intend) specialising in areas that require programming, but all should have some basic competence, in which case the classes taken by all CS students will have a wide variation in interest/aptitude." CreationDate="2022-05-13T09:31:50.783" UserId="11932" />
  <row Id="19838" PostId="7379" Score="4" Text="A program that doesn't compile on the teacher's machine might well have compiled and ran fine on the student's machine. Sometimes a slightly different version of the exact same framework, or just what libraries are installed (and what versions they have), or what OS they are running, might make a difference. The only reason I didn't turn this into an answer because I don't know how well this possibility has been taken into account, as the question is quite short on details." CreationDate="2022-05-13T17:20:41.007" UserId="4999" />
  <row Id="19864" PostId="7379" Score="3" Text="@vsz I give them a server to use that compiles and tests their program and formats it all as a .pdf file containing the code (formatted and the files in the right order), compiler messages, console output, output files etc.  That means they have exactly the same target environment that the marker does.  It saves a *lot* of marking time, and eliminates a lot of these sorts of difficulties.  Lack of detail was intentional - the resulting discussion has been *very* informative - many thanks to all contributors - much appreciated!" CreationDate="2022-05-13T22:06:12.683" UserId="11932" />
  <row Id="19889" PostId="7379" Score="1" Text="Is this a 0 on a traditional 100 point scale? A 0 on a 4 point scale (F, D, C, B, A) has different mathematical properties (such as how easy it is to recover from)." CreationDate="2022-05-14T18:04:56.050" UserId="10999" />
  <row Id="19890" PostId="7379" Score="0" Text="@TomKern yes, I was thinking of 0 as a traditional percentage.  A non-compiling program is very likely to be a fail (less than 40% at my institution), but not necessarily so." CreationDate="2022-05-14T18:07:08.840" UserId="11932" />
  <row Id="19893" PostId="7379" Score="1" Text="I am not a computer science educator, but given that *computer science* is about theory and not directly about programming, I don't see why syntax errors should result in an automatic failure.  To the people who automatically fail such submissions: are you teaching computer science or programming?" CreationDate="2022-05-14T18:52:08.290" UserId="2828" />
  <row Id="19894" PostId="7379" Score="1" Text="@jamesdlin there is more to computer science than theoretical computer science - I would view programming as part of computer science, just as work on developing better telescopes like the JWST is part of astronomy (Dijkstra may have disagreed ;o), as is developing computer models of protoplanetary disks etc." CreationDate="2022-05-14T18:56:03.467" UserId="11932" />
  <row Id="19896" PostId="7379" Score="2" Text="So someone that submits a program that doesn't compile gets the same mark as someone who does nothing and submits nothing, seems harsh!  A large deduction of points or a fail seems reasonable bit 0 not so sure." CreationDate="2022-05-14T20:13:38.330" UserId="6440" />
  <row Id="19690" PostId="7380" Score="1" Text="I like this answer, though it sounds like a gargantuan effort to set up!" CreationDate="2022-05-12T11:32:11.857" UserId="27" />
  <row Id="19691" PostId="7380" Score="0" Text="We developed it over a number of years, so it wasn't too bad (and was offset in the reduction in the amount of time I spend marking).  The biggest step was implementing it as a reasonably secure server, but that turned out to provide the greatest benefit.  I am very fortunate in having made a good choice of Mrs Marsupial (she is a much more productive programmer than I am ;o)" CreationDate="2022-05-12T11:36:28.663" UserId="11932" />
  <row Id="19988" PostId="7381" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/136371/discussion-on-answer-by-ben-i-if-a-program-does-not-compile-should-it-get-a-ma)." CreationDate="2022-05-17T14:15:23.740" UserId="27" />
  <row Id="19919" PostId="7382" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/136313/discussion-on-answer-by-codingcat-if-a-program-does-not-compile-should-it-get-a)." CreationDate="2022-05-15T14:52:36.583" UserId="27" />
  <row Id="20035" PostId="7383" Score="1" Text="Tnx the Linux link. I was taught by a teacher who once (casually!!) said *What the goto does to control structure, the assignment does to data structure*. That statement was quite an earthquake for me personally. From then on when I'm religious (ie &quot;pure&quot;) I stick to functional programming. When not I use goto/break/continue &amp; assignment (in C, python, what-have-you) with equal alacrity." CreationDate="2022-05-19T16:08:10.970" UserId="8837" />
  <row Id="20042" PostId="7383" Score="0" Text="@Rusi That sounds too limiting. People like Dijkstra and Hoare have shown how you can perfectly well do formal reasoning about programs with assignments. Those are not nearly as bad as goto's. You don't have to go all the way to single assignment." CreationDate="2022-05-19T19:20:57.213" UserId="6346" />
  <row Id="20053" PostId="7383" Score="0" Text="@VictorEijkhout Hoare admitted that his formal approach had broadly failed https://en.wikipedia.org/wiki/Tony_Hoare#Apologies_and_retractions. Just as denotational semantics uses environments to mathematize assignment, it uses continuations for gotos. The programming/compiling technique called CPS (continuation passing style) comes from this. And Dijkstra's foibles would overflow this chat medium " CreationDate="2022-05-20T04:41:30.747" UserId="8837" />
  <row Id="20054" PostId="7383" Score="1" Text="BTW @codingcat, I read Linus diatribe not primarily as one of «speed and efficiency is your thing» but of cleanliness. Linus finds deep unnecessary nesting uglier (more cognitive load) than strictly stylized goto use. Maybe this should be read in conjunction https://www.zdnet.com/google-amp/article/linus-torvalds-prepares-to-move-the-linux-kernel-to-modern-c/ Which to me can be prized open as *innocuous-looking assignments can pose huge risks*" CreationDate="2022-05-20T04:56:09.500" UserId="8837" />
  <row Id="20055" PostId="7383" Score="0" Text="@Rusi The topic is assignemnts, not null references. The fact that his techniques did not get taken up does not imply that they don't work. I've used them successfully myself." CreationDate="2022-05-20T11:52:35.817" UserId="6346" />
  <row Id="20056" PostId="7383" Score="0" Text="@VictorEijkhout I was referring to the second quote in the wiki link re apologies &amp; retractions." CreationDate="2022-05-20T12:19:17.500" UserId="8837" />
  <row Id="20058" PostId="7383" Score="0" Text="@Rusi when you look at compiled assembler/opcode you quickly see that cleanliness and speed/efficiency are often the same thing. While working on driver/system software I would often write while-true loops, followed by a list of if-break statements.  In addition to being much easier to follow logically, the compiled code was universally more efficient." CreationDate="2022-05-20T12:55:17.300" UserId="12011" />
  <row Id="20061" PostId="7383" Score="0" Text="@Rusi my second sentence referred to his 2nd remark." CreationDate="2022-05-20T14:24:45.873" UserId="6346" />
  <row Id="20064" PostId="7383" Score="0" Text="Right... So??? Do we have some disagreement @codingCat?? What I find striking about the kernel mailing list exchange you posted is the religious fervour of the anti-goto person.  There is almost not a single *reason/argument* there.  Just an absolute reliance on the EWD-papal bull *Dijkstra said &quot;goto is evil&quot;. So it of course is*" CreationDate="2022-05-20T15:40:39.843" UserId="8837" />
  <row Id="19726" PostId="7385" Score="2" Text="Generally a good answer, except that version control capable code repositories (GIT, etc) are notoriously difficult for beginners to understand." CreationDate="2022-05-12T19:27:37.383" UserId="1293" />
  <row Id="19733" PostId="7385" Score="0" Text="@buffy not just beginners ;o)" CreationDate="2022-05-12T20:28:59.913" UserId="11932" />
  <row Id="19735" PostId="7385" Score="3" Text="Or have an online grading tool - [SPOJ](https://www.spoj.com/) was initially written by the TAs at the university I attended, and was used in grading assignments for basic coding and algorithms class. Sadly, this only works for programs which *can* be tested automatically." CreationDate="2022-05-12T20:39:13.030" UserId="9976" />
  <row Id="19742" PostId="7385" Score="9" Text="Approaching this as a professional developer (rather than as an educator,) I'd give this another +1 just because of the inherent value of teaching students about version control and build servers from the beginning. Sure, some of its concepts can be a bit difficult to understand at first, but it will make their life _much, much easier_ both during and after school once they've learned those concepts and learned to put _everything_ in version control. And having a build server system where submitted revisions are automatically built with compiler feedback given is even better!" CreationDate="2022-05-12T22:14:37.003" UserId="1319" />
  <row Id="19747" PostId="7385" Score="2" Text="@Buffy But kids these days are often learning in Python and other magical import antigravity languages, so they should have plenty of brain power left over now for learning about version control instead. If people could learn FORTRAN and COBOL when they had to submit a program to run overnight on the mainframe, at least Git you will find out much faster that you screwed it up." CreationDate="2022-05-13T00:35:04.250" UserId="1407" />
  <row Id="19751" PostId="7385" Score="1" Text="@user3067860 There's nothing magical about imports. It makes it tolerable. Wait until you have to deal with version conflicts and dig into dependencies. Solving dependency conflicts are not fun. In the past, publicly available libraries simply were not that common and many companies go proprietary, so there were no conflicts to deal with because it simply wouldn't work, and neither side would ever give you the light of day to fix it, so you come in and hack in your 3rd version." CreationDate="2022-05-13T03:38:21.743" UserId="1285" />
  <row Id="19753" PostId="7385" Score="0" Text="@Nelson We are currently in the middle of doing a log4j 1-&gt;2 migration in legacy software on old WebLogic servers, so runtime class path errors and being very friendly with mvn dependency are just normal things for me right now. But the kids don't have to deal with any of that, at least from my distant memories of school...certainly not with horrible enterprise-y overly complicated headaches (WHY EJB WHY). So a little Git is not so bad. (And they don't even normally have to deal with someone else screwing up the repo, it's less bad when it's at least your own mistake you're fixing...)" CreationDate="2022-05-13T04:13:34.230" UserId="1407" />
  <row Id="19806" PostId="7385" Score="1" Text="@reirab You can't teach everything all at once, and many people (including me) would argue that *actual programming* is the most important thing to teach first... it's fine to give automated feedback on the online submission form, it's not fine to expect them to learn Git and Jenkins" CreationDate="2022-05-13T14:05:27.710" UserId="1275" />
  <row Id="19828" PostId="7385" Score="2" Text="Honestly, I think this finds a lot of &quot;computer science&quot; woes and the subject of many Questions - where does one draw lines between CS being applied math theory, software design, real-world/legacy spelunking, and the history of assistive tools?Should new students be immediately ready to labour in the infinite Java mines or produce new works? In my experience, non-CS and largely math-focused CS students tend to understand and produce better programs. Did CS lose others? What should undergrads be taught first to improve later studies? Just lambda calculus? &quot;normal&quot; calculus? Java?(ever?) C? git?" CreationDate="2022-05-13T14:58:29.010" UserId="3350" />
  <row Id="20916" PostId="7385" Score="0" Text="The system we (mostly Mrs Marsupial) implemented at my department for our programming modules does exactly this, outputing a pdf file containing the formatted source code, the compiler messages and the program output (which is essentially the test cases in the way I tend to set up the assessments).  It has save no end of marking time and student complaints (e.g. &quot;well, it works on my computer&quot;)." CreationDate="2022-12-31T15:06:16.017" UserId="11932" />
  <row Id="19972" PostId="7387" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/136352/discussion-on-answer-by-daniel-r-collins-if-a-program-does-not-compile-should)." CreationDate="2022-05-17T02:19:07.820" UserId="27" />
  <row Id="19980" PostId="7387" Score="0" Text="@DanielR.Collins Your commentary on my comments in your answer is a gross and insulting misrepresentation of what was actually said. (i) we do not have to deal with &quot; some kind of strange, out-of-control build environments&quot; it is a long term support (LTS) release of the Java Development Kit. It is a very sensible policy not to use a bleeding edge release that is not guaranteed to be supported throughout the academic year." CreationDate="2022-05-17T13:05:21.263" UserId="11932" />
  <row Id="19981" PostId="7387" Score="0" Text="(ii) &quot;routinely get &quot;legal but doesn't compile&quot; submissions, &quot; we don't &quot;routinely&quot; get submissions that don't compile. We get far fewer than we did before we implemented the preparation system, indeed that is exactly WHY we introduced it. (iii) &quot; I'll say that in my situation the idea of students maintaining multiple build environments and toolsets is completely unimaginable &quot; it is a shame, the students that do this tend to be very good and very keen students. IDEs are designed to allow that sort of thing." CreationDate="2022-05-17T13:05:44.670" UserId="11932" />
  <row Id="19982" PostId="7387" Score="0" Text="The students are not required to have multiple toolchains, they choose to do so. (iv) &quot; I feel highly responsible ...&quot; implying that I don't? &quot;... in trying to ensure that there's one consistent environment used in the labs, lectures, my grading suite, &quot; oddly enough, that is exactly what the submission preparation tool does. It ensures that the build environment used is exactly the same as the one in the lab, the same one that I use in the lectures and the same one that is used by the markers, and more importantly, the student can see any compiler messages..." CreationDate="2022-05-17T13:06:00.960" UserId="11932" />
  <row Id="19983" PostId="7387" Score="0" Text="that the marker would see. It is also the same environment they use on their computers if they follow the instructions on installing it that I give them (video). It couldn't be more consistent. &quot; (and take quite a bit of time)&quot; oddly enough, a lot of time, thought and effort went into our system and it was well worth the reduction in submissions problems that it produced." CreationDate="2022-05-17T13:06:13.607" UserId="11932" />
  <row Id="19984" PostId="7387" Score="0" Text="&quot;But my advice would be that if you are in that situation, then get your build environment under control.&quot; that looks rather a cheap jibe to me." CreationDate="2022-05-17T13:06:29.493" UserId="11932" />
  <row Id="20914" PostId="7387" Score="0" Text="The new addition about students writing large amounts of code before trying to compile is something I have increasingly observed over the last decade.  &quot;despite my constant verbal and written recommendations&quot;  my solution is to *show* them how to code by writing code live in the lecture.  This has been facilitated by COVID resulting in us going to flipped classes with pre-recorded lectures with the technical material, so I can use the live in-person lectures for presenting the parts of programming that can only really be taught by demonstration, which includes writing incrementally." CreationDate="2022-12-31T14:33:15.720" UserId="11932" />
  <row Id="20915" PostId="7387" Score="0" Text="I used to do a fair amount of live programming pre-COVID, but I can do much more of it than I used to.  However, there are some lessons you can only learn by doing, if the students are unwilling to give it a try, they are not going to see the benefits first hand.  Another thing that would help is for student to learn how to debug by &quot;running the program in their heads&quot; (or using a debugger) so they understand why the program is doing what it is doing, before trying to fix it, rather than just changing things to see if it helps.  I think it is a Kahneman &quot;Thinking, Fast and Slow&quot; thing." CreationDate="2022-12-31T14:36:39.387" UserId="11932" />
  <row Id="19744" PostId="7389" Score="8" Text="For me the points here that mattered were: 1) students are clearly told that programs must compile and 2) it's not some &quot;in the real world...&quot; thing -- it's that fixing compile errors then rerunning the grading script is a huge pain. Of course if programs are hand-graded this wouldn't apply (but in practice I've never seen a non-compiling program that was worth more than a few points, once made to run)." CreationDate="2022-05-12T22:56:35.573" UserId="8773" />
  <row Id="19757" PostId="7389" Score="13" Text="This is reasonable, but only, ONLY, if the student has access to a standardized &quot;grading machine&quot;.  As Ben I. points out, builds fail for all sorts of reasons, and the student need to be given feed backback on that before the deadline runs out." CreationDate="2022-05-13T07:21:06.687" UserId="1055" />
  <row Id="19760" PostId="7389" Score="1" Text="@StigHemmer Yes, if the student develops and demonstrably builds and runs successfully on a recent gcc on their Linux distro and it fails on the teacher's then this rule does not apply. But those should be rare cases. I mean, these days you can even provide virtual machine images to use." CreationDate="2022-05-13T08:29:49.523" UserId="1675" />
  <row Id="19789" PostId="7389" Score="1" Text="You nailed it with the &quot;it is not gradable&quot; blurb. This is exactly what I was going for with my post.  :-)" CreationDate="2022-05-13T12:10:18.357" UserId="12011" />
  <row Id="19817" PostId="7389" Score="9" Text="What do you mean by &quot;it is not gradable&quot;. When I get a submission regardless of how it compiles, there are a number of things I should evaluate. e.g. &quot;did they document it?&quot; &quot;is the structure reasonable?&quot; &quot;is the formatting and variable naming good?&quot;. It's not like the only thing determining a mark is the output and the resource use." CreationDate="2022-05-13T14:28:42.657" UserId="11382" />
  <row Id="19822" PostId="7389" Score="2" Text="@Clumsycat It's like grading an axe that has no blade, grading a milk cow that doesn't give milk, grading a house that doesn't stand. Looks nice, moos nice, has nice bricks but alas: Neither one is gradable. Now there *is* a circular element to my reasoning because I *could* grade the nice handle, the nice fur or the nice bricks but the submissions missed the mark by such a wide margin that I refuse. Partly because this is the first exercise to produce an axe, a house, a cow, so we really want the proper thing. Later we may focus on color schemes etc. and then I may grade the color..." CreationDate="2022-05-13T14:44:08.623" UserId="1675" />
  <row Id="19826" PostId="7389" Score="4" Text="@Peter-ReinstateMonica not really, I often meet programs that I need to do my work that don't compile. Then how well documented they are, how nicely formatted and how logical the structure is matter rather a lot. Those things change it from a program that might take days to salvage, to something that I can recover in a few hours. So these things are actually even more important in a non-compiling program than in a program that does compile." CreationDate="2022-05-13T14:49:15.503" UserId="11382" />
  <row Id="19837" PostId="7389" Score="0" Text="As I point out in my answer, I _was_ giving partial credit for readability &amp; documentation issues, but the time &amp; effort to do that with otherwise garbage submissions was driving me crazy. I was at a point where my options were (1) refuse to look at non-compiling programs, or (2) write a custom auto-grader to automate those latter issues. Personally I picked option (2); but as Peter comments, (1) is quite reasonable (esp., for a busy research professor)." CreationDate="2022-05-13T17:03:51.213" UserId="8137" />
  <row Id="19874" PostId="7389" Score="4" Text="“It's like asking to grade an architect's house which collapses“ – which architecture class requires the students to build actual houses? And why should a house with a perfect first floor but a collapsed roof not give at least some points? “Grading by reading would take too long” – this is a poor excuse, no other field would even think of grading submissions without reading them." CreationDate="2022-05-14T07:33:02.183" UserId="12094" />
  <row Id="19882" PostId="7389" Score="0" Text="@ipsec: It's not true that no other field will do a full-reject in certain cases. In graduate school for mathematics once I got a 5-page homework back with a single word of feedback in red: &quot;No&quot;, because the approach was fundamentally flawed. The more you get on the STEM/math end of the continuum, the more likely that is." CreationDate="2022-05-14T14:38:01.997" UserId="8137" />
  <row Id="19885" PostId="7389" Score="3" Text="@DanielR.Collins: As an example applicable to *any* field, suppose a chemistry student who was tasked with writing a paper on peroxide synthesis hands in a paper about the history of opera during the Baroque period.  If the professor's normal policy is to accept late homework after assessing a penalty, the professor shouldn't grade the music paper as a zero, but instead make reasonable efforts to notify the student that they seem to have submitted the wrong paper and, if the student responds by submitting the right paper, accept that with no prejudice beyond possibly assessing a late penalty." CreationDate="2022-05-14T17:15:57.500" UserId="2073" />
  <row Id="19887" PostId="7389" Score="2" Text="@DanielR.Collins The point is that a program that does not compile is not necessarily fundamentally flawed. Your math assignment will also not (or should not!) be rejected just because you wrote X instead of x somewhere." CreationDate="2022-05-14T17:50:51.850" UserId="12094" />
  <row Id="19900" PostId="7389" Score="1" Text="@ipsec: This recurring one-character anecdote is a straw man argument and not worth addressing. In practice it's never like that." CreationDate="2022-05-14T21:36:57.623" UserId="8137" />
  <row Id="19902" PostId="7389" Score="0" Text="@supercat: Analogous case: when a student submits apparently plagiarized work to me, I first enter a grade of 0 into the online gradebook as at least a temporary placeholder. I then make an attempt to reach out to the student, but frequently at our institution the students will just ghost us in cases like these, so I need to not have the grade in limbo. I would rather expect the chemistry professor to do the same." CreationDate="2022-05-14T21:46:22.530" UserId="8137" />
  <row Id="19910" PostId="7389" Score="2" Text="@DanielR.Collins The referral to “practice” is a no true Scotsman fallacy. As the other answer shows, such one-character cases do occur. And of course there are also countless other practical examples on the spectrum where an error should not automatically reduce the overall score to 0. I find the notion ridiculous, that every program that does not compile, for whatever reason, must always be so fundamentally flawed that it can only be worth 0 points." CreationDate="2022-05-15T11:34:10.150" UserId="12094" />
  <row Id="19911" PostId="7389" Score="2" Text="@ipsec Almost any rule that is categorically enforced is &quot;fundamentally flawed&quot;. Somebody was diagnosed with cancer, misses the deadline, we'll try to accommodate them. No common build machine, weird and demonstrable discrepancy between student's machine and teacher's, not their fault. But those are not the cases we discuss here, are they? My answer concerns programs that don't build period, because of a flaw the student didn't (know how to) fix." CreationDate="2022-05-15T11:52:10.607" UserId="1675" />
  <row Id="19927" PostId="7389" Score="0" Text="@DanielR.Collins I would be concerned about any institution that did not have a well-documented plagiarism policy and a formal procedure in place, rather than leave it to the marker to deal with it ad-hoc.  &quot;but frequently at our institution the students will just ghost us in cases like these,&quot; they tend not to do that if there is a formal plagiarism procedure." CreationDate="2022-05-15T17:29:24.253" UserId="11932" />
  <row Id="19946" PostId="7389" Score="1" Text="@DikranMarsupial: Don't know why you'd infer lack of a formal plagiarism process. [Here it is.](https://www.cuny.edu/about/administration/offices/legal-affairs/policies-resources/academic-integrity-policy/)" CreationDate="2022-05-16T15:57:50.920" UserId="8137" />
  <row Id="19947" PostId="7389" Score="0" Text="@DanielR.Collins because you made no mention of it (my previous comment indicates the issue of ghosting).  I'm glad to see that there is, it is interesting how they vary from one institution to another." CreationDate="2022-05-16T16:17:11.220" UserId="11932" />
  <row Id="19879" PostId="7390" Score="1" Text="Corrupted in transit but in a way that prevents that from being obvious? Single bit fl8p somewhere? Possible but unlikely, and regardless could always be countered by “But it works on my machine”…" CreationDate="2022-05-14T13:17:40.823" UserId="9396" />
  <row Id="19895" PostId="7390" Score="0" Text="@jmoreno Corruption in transit due to the network is unlikely (given that TCP is a reliable protocol.) Corruption in transit due to anti-virus software on the e-mail servers (for e-mail submissions) is much more likely. This can be anything from complete non-delivery to seemingly-random parts missing due to matching some overly-aggressive detection heuristic." CreationDate="2022-05-14T19:22:31.467" UserId="1319" />
  <row Id="19897" PostId="7390" Score="0" Text="That is exactly my point.  A policy of zero tolerance, doesn’t actually have to mean zero tolerance.  If the file gets turned into garbage in transit, that’s different from a missing semicolon or using Integer when it should be int. If you have a policy of no make up test, and you accidentally run a student over in the parking lot, and they spend a couple of days in the hospital (missing the test) you better make an exception to your policy." CreationDate="2022-05-14T20:58:21.397" UserId="9396" />
  <row Id="19898" PostId="7390" Score="0" Text="And if corruption happens on “your” machine, you need to deal with it not the student." CreationDate="2022-05-14T21:01:15.337" UserId="9396" />
  <row Id="19903" PostId="7390" Score="1" Text="@jmoreno If there are files missing and/or parts of files missing, it's not always easy to know that it was the fault of your IT department rather than the student submitting it that way, though, which was my point. At any rate, that was only one reason. That still ignores the configuration management problems, for example. The over-arching point was that there are lots of potential reasons for a program to not compile that aren't the student's fault at all. Those were just some examples that I personally encountered; they were not intended to be an exhaustive list." CreationDate="2022-05-14T22:57:23.447" UserId="1319" />
  <row Id="19787" PostId="7393" Score="3" Text="Learning C is actively detrimental to learning C++. Yes, you must learn pointers, linkage, etc. but there is no reason to learn C itself since a great many things in C have been superseded in modern C++ (or even old C++)." CreationDate="2022-05-13T11:47:04.863" UserId="2172" />
  <row Id="19907" PostId="7393" Score="0" Text="@JackAidley the fact that a lot of systems programming is (best) done in C is a good reason to learn C.  The other advantage of C is that the students are capable of fully understanding it all as they learn, because it is all very simple and nothing is hidden.  Learning C++ directly requires the students to take a lot on trust, and using things without understanding what you are doing seems somewhat antithetical to university education (and is a bad habit students easily fall into because the are often goal-directed).  Both approaches have advantages/disadvantages." CreationDate="2022-05-15T08:02:32.857" UserId="11932" />
  <row Id="19908" PostId="7393" Score="1" Text="@DikranMarsupial There may be many good reasons to learn C, but in order to learn C++ is not one of them." CreationDate="2022-05-15T10:34:14.660" UserId="2172" />
  <row Id="19912" PostId="7393" Score="0" Text="@JackAidley C++ is a superset of C, you can't learn C++ without learning C, it is just a matter of emphasis on which parts of it you use.  If you want to learn OOP, then learning Java first is better than C++.  C++ is no longer a good language to learn first (as it was back in the late 1980s) - it is too complex and compilers too unfriendly (due to the complexity of the language)." CreationDate="2022-05-15T12:05:03.137" UserId="11932" />
  <row Id="19913" PostId="7393" Score="0" Text="Having said which, learning C+=0.5 (i.e. C but without OOP), which is the approach some take, is the worst of all worlds." CreationDate="2022-05-15T12:08:35.060" UserId="11932" />
  <row Id="19916" PostId="7393" Score="1" Text="@DikranMarsupial It is not true that you need to learn the C subset in order to learn C++. Many C features have been superseded in C++ and are rarely used in C++ - certainly not at the beginner level. malloc/free would be the most obvious but there are others. What's more the way you program in C and the way you program in C++ are different, learning the C way - as a beginner - is unhelpful to learning the C++ way." CreationDate="2022-05-15T14:42:47.987" UserId="2172" />
  <row Id="19917" PostId="7393" Score="0" Text="@JackAidley malloc/free is part of the standard library, not the language.  The only fundamental difference between the ways you program in C++ that you don't in C are OOP (you can do this in C, but it isn't worth the hassle), operator overloading and templates (although you can do that in C if you want in the way C++ did before templates were part of the language).  C++ uses much the same control structures, fundamental types and functions as C." CreationDate="2022-05-15T14:50:04.800" UserId="11932" />
  <row Id="19918" PostId="7393" Score="0" Text="&quot;C++ way&quot; is a superset of &quot;C way&quot;, you can do all the same things, but with more stuff added.  C++ is a multiparadigm language - &quot;C way&quot; is one of those paradigms.  And as I said (possibly another thread) C++ is not a beginners language anymore (IMHO)." CreationDate="2022-05-15T14:50:52.757" UserId="11932" />
  <row Id="19937" PostId="7393" Score="0" Text="Re, &quot;C++ is a superset of C.&quot; That was true back in the early days of C++, but the C++ language has diverged from C in subtle ways. If you want to teach C++, then by all means, start with a small subset, and build on that subset bit-by-bit. But you could have avoided most of this argument simply by not calling the subset, &quot;C.&quot;" CreationDate="2022-05-15T19:41:56.070" UserId="1269" />
  <row Id="19967" PostId="7393" Score="0" Text="Unless you have experimental evidence of your notions, I will disagree. 1 First learning C leads to really bad C++ code. 2. Many parts of C are not needed because C++ does things better. 3. Many experts (find Kate Gregory's lecture &quot;Stop teaching C&quot;) agree with me." CreationDate="2022-05-16T21:06:25.400" UserId="6346" />
  <row Id="19976" PostId="7393" Score="0" Text="@SolomonSlow most of the things that are legal in C but no longer legal in C++ are things that most C programmer wouldn't do anyway (at least not anymore).  The reason for teaching C first is because the student may need C in it's own right, I am not saying that it is a good way to teach C++ if teaching C++ is your *only* goal.  I would also say that C++ is not a good first programming language anymore (it was back in the late 80s/early 90s)." CreationDate="2022-05-17T09:56:45.200" UserId="11932" />
  <row Id="19977" PostId="7393" Score="0" Text="@VictorEijkhout for 1 it largely depends on how you teach C, C doesn't encourage good programming, but it doesn't forbid it either.  However I agree with you that if your only aim is to teach C++, then teach C++." CreationDate="2022-05-17T10:00:11.040" UserId="11932" />
  <row Id="19775" PostId="7394" Score="1" Text="That is an interesting and valid take: Make both goals (algorithm/knowledge and technical/programming) explicit and grade them separately." CreationDate="2022-05-13T09:18:57.463" UserId="1675" />
  <row Id="19761" PostId="7395" Score="0" Text="&quot; However, when courses are aiming to teach high performance computing languages &quot; for an advanced level course, it makes more sense.  I was mostly thinking of introductory courses.  I wouldn't expect to see non-compiling code on an advanced level course." CreationDate="2022-05-13T08:31:57.550" UserId="11932" />
  <row Id="19765" PostId="7395" Score="0" Text="I’ve rarely seen an intro level course for an academic subject done in anything other than: python, R, matlab, etc. all interpreted. It’s either advanced programming or advanced theory, rarely both at the same time. (Ironically my intro to programming for physics as an undergrad was in C - so there are some exceptions, but it was mostly for the programming)." CreationDate="2022-05-13T08:45:33.280" UserId="2993" />
  <row Id="19766" PostId="7395" Score="1" Text="Java is *very* commonly used.  R is a special purpose language, and to a lesser extent MATLAB and only suitable for beginners in stats or numerical science.  Python is a very useful language, but it is not a good language for teaching students to code *well* (worse than C which used ta attract that criticism)." CreationDate="2022-05-13T08:49:27.367" UserId="11932" />
  <row Id="19769" PostId="7395" Score="1" Text="I've heard of Java being more popular in Computer Science settings. In my experience for Physics it is mostly Python, C, and Matlab, and for Maths/Stats it is Matlab, Maple, R, Mathematica, Python, C++. For almost all courses I've seen it is &quot;write a program&quot; rather than &quot;write a good/clean program&quot;. Students are rarely taught to code well, and in honesty I think academia isn't a environment that fosters nor encourages good programming. The standard for programming in academia in my experience is extremely poor unfortunately, because it's not the focus for most research areas." CreationDate="2022-05-13T08:56:01.813" UserId="2993" />
  <row Id="19771" PostId="7395" Score="0" Text="This is the Computer Science Educators SE!  &quot;and in honesty I think academia isn't a environment that fosters nor encourages good programming.&quot; I think you would have to be familiar with computer science departments to be able to judge that.  Teaching students to program well was the aim when I was a student (&gt; 40 years ago) and it still is today.  I was trained as an electronic engineer, and it was considered important there (my introductory programming course was taught by the CS department rather than EE, but we had in-house programming modules later)." CreationDate="2022-05-13T09:03:20.153" UserId="11932" />
  <row Id="19772" PostId="7395" Score="1" Text="I expect computer science would put good programming practices and standards in a high regard than e.g. maths and physics, but I wouldn't imagine it being too dissimilar. Personally, I wish coding quality were generally regarded as importantly (or even more so) as code correctness, but I've not seen this in my experience. While I've not been in a computer science department, I can comment on what I saw from the maths and physics side of things. For the mathematicians, I all to often see (sadly) that code correctness is binary, and code quality is a second class citizen." CreationDate="2022-05-13T09:08:47.803" UserId="2993" />
  <row Id="19774" PostId="7395" Score="0" Text="&quot; but I wouldn't imagine it being too dissimilar. &quot; I've been teaching programming in CS for the last 25 years.  I don't have to imagine.  You are incorrect." CreationDate="2022-05-13T09:18:03.600" UserId="11932" />
  <row Id="19776" PostId="7395" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/136270/discussion-between-oliversm-and-dikran-marsupial)." CreationDate="2022-05-13T09:19:11.187" UserId="2993" />
  <row Id="19786" PostId="7396" Score="3" Text="Let me tell you the sad truth: A program that does not compile is not a working program. Almost counts in horseshoes and hand grenades - but not for programs." CreationDate="2022-05-13T11:43:17.687" UserId="12072" />
  <row Id="19791" PostId="7396" Score="4" Text="@CharonX in maths a derivation that contains an error is not a derivation - should it be awarded zero, no matter how much of the derivation is correct?" CreationDate="2022-05-13T12:32:17.747" UserId="11932" />
  <row Id="19809" PostId="7396" Score="2" Text="@CharonX Almost does not count for hand grenades. A hand grenade that does not explode is not a hand grenade. Nor for horseshoes. A horseshoe that cannot go on a horse is not a horseshoe. Do you think computer programs are somehow special?" CreationDate="2022-05-13T14:13:23.347" UserId="1275" />
  <row Id="19841" PostId="7396" Score="2" Text="Respectfully: &quot;99.9% correct code with that missing semicolon&quot; is a straw-man argument; I've never seen that in 20 years of grading code submissions. IME, the usual case of a non-compiling program submission is sheer nonsense that would take an hour or more to fix up." CreationDate="2022-05-13T17:30:05.800" UserId="8137" />
  <row Id="19862" PostId="7396" Score="1" Text="@CharonX a program that does not compile *can* be a very useful. I'd infinitely rather work out how to fix compilation errors in a program for calculating an obscure cross section that write it from scratch myself. If there is only one compilation error to find, all the better. So actually, &quot;almost&quot; compiling can be worth rather a lot to many people." CreationDate="2022-05-13T21:53:33.373" UserId="11382" />
  <row Id="19888" PostId="7396" Score="3" Text="@DanielR.Collins Then your policy should be to give 0% for submitting nonsense, not for submitting code with a compilation error." CreationDate="2022-05-14T18:02:27.253" UserId="2828" />
  <row Id="19899" PostId="7396" Score="0" Text="@jamesdlin: Spending an hour to confirm that it's nonsense is not a good use of time. You can see my answer for my actual policy." CreationDate="2022-05-14T21:35:44.993" UserId="8137" />
  <row Id="19968" PostId="7397" Score="0" Text="C &quot;pointers&quot; are really memory addresses, and are almost never needed in C++. So if you're teaching that on the way to C++ it's a waste of effort, and you'll probably teach them bad habits. C++ does have real pointers, usually called &quot;smart pointers&quot;, but those are not needed in many applicaitons. In other words, I disagree with many aspects of your teaching strategy." CreationDate="2022-05-16T21:09:58.297" UserId="6346" />
  <row Id="19970" PostId="7397" Score="1" Text="Well, you wrote &quot;As we do C and then C++&quot; so it does sound like you're using C as a precursor to C++.  For what it's worth, I teach C++ first, and then show how some things that are simple in C++ can be hacked around in C." CreationDate="2022-05-16T21:23:52.370" UserId="6346" />
  <row Id="20019" PostId="7397" Score="0" Text="What you call &quot;pointers&quot; are not pointers. They are addresses. Smart pointers are to your &quot;pointers&quot; as `std::vector` is to automatic arrays: a better way to do stuff that is error-prone in C. You can perfectly well use smart pointers to implement linked lists and such with out ever having seen C &quot;pointers&quot;. A wider point about &quot;understanding things&quot;: it's called abstraction. You can teach to a level of abstraction, and as long aas that's a consistent and rich enough vocabulary, you don't have to teach the layer below it. So: I teach `std::vector` and not `new x[5]`; ditto pointers." CreationDate="2022-05-19T12:58:55.780" UserId="6346" />
  <row Id="20028" PostId="7397" Score="0" Text="Well, I do point out the costs of re-allocation in `std::vector`, in the abstract. I think the lower layer should only be taught when it has a detectable impact." CreationDate="2022-05-19T15:25:55.387" UserId="6346" />
  <row Id="20032" PostId="7397" Score="0" Text="You're right, I don't care about linked lists as such. However, linked lists are the simplest example of a Directed Acyclic Graph. And DAGs are very common in computational science." CreationDate="2022-05-19T15:42:18.760" UserId="6346" />
  <row Id="20036" PostId="7397" Score="0" Text="No, you are completely wrong. I have no idea how you manage to misread me this much. The topic was smart pointers vs bare pointers and I said I use smart pointers to teach linked lists. I never mentioned the `linked_list` container API, you did. The thing I don't teach is how smart pointers are based on bare pointers." CreationDate="2022-05-19T16:43:05.213" UserId="6346" />
  <row Id="20038" PostId="7397" Score="0" Text="When do you need the `get()` method?" CreationDate="2022-05-19T16:54:58.993" UserId="6346" />
  <row Id="20041" PostId="7397" Score="0" Text="No I don't. If you do that they need to understand rvalue, lvalue, .... before they can understand the simplest mechanisms." CreationDate="2022-05-19T19:12:52.697" UserId="6346" />
  <row Id="20046" PostId="7397" Score="0" Text="With my apologies for an easily misunderstood remark, let me clarify. I teach to undergraduate engineering students. Those are maybe not average beginners, and you may very well teach to a very different audience. Fact is that I do get students with minimal or no programming experience, who need C++ in their further career, and they seem to deal with it just fine." CreationDate="2022-05-19T20:48:50.033" UserId="6346" />
  <row Id="19813" PostId="7398" Score="4" Text="Most programming languages don't have most functions. For example, most programming languages don't have a &quot;hello world&quot; function. Why not? Because you can easily make it yourself." CreationDate="2022-05-13T14:18:13.230" UserId="1275" />
  <row Id="19861" PostId="7398" Score="0" Text="because programmers need to learn how to implement recursion ;o)" CreationDate="2022-05-13T21:34:58.920" UserId="11932" />
  <row Id="19792" PostId="7400" Score="0" Text="I believe the point that the people in the &quot;give them a zero&quot; camp are making is that a program that doesn't compile is equivalent to submitting math homework in an English class.  It may show a lot of effort, but it doesn't meet the minimum requirements for meaningful feedback or evaluation." CreationDate="2022-05-13T13:13:44.850" UserId="12011" />
  <row Id="19793" PostId="7400" Score="4" Text="Also in professional environments code that doesn't compile isn't really an issue. Professional software developers produce code that doesn't compile from time to time, but it is never shipped to customers. Because if that ever happens you have a problem with your continuous integration pipeline or your testing strategies, and not with your software developers." CreationDate="2022-05-13T13:18:28.380" UserId="12077" />
  <row Id="19801" PostId="7400" Score="0" Text="This is an interesting perspective... Honestly, as a former student, I'm certain that I put in _many_ more hours per week (probably at least twice as many most weeks) for my university undergraduate Computer Science courses (as a whole, not each class individually) than I do now for my full-time senior software engineering position. Even in graduate school when I was only taking one class at a time (while also working a full-time software development job,) the hours put in on it were at least equivalent to a half-time job and sometimes closer to full-time." CreationDate="2022-05-13T13:50:14.127" UserId="1319" />
  <row Id="19802" PostId="7400" Score="3" Text="@codingCat &quot;a program that doesn't compile is equivalent to submitting math homework in an English class. &quot; I don't think that is a reasonable analogy.  It is more like a maths student handing in a proof with an error - it doesn't meet the requirements (an incorrect proof is not a proof), but it would not deserve a mark of zero if it demonstrated some competence and understanding." CreationDate="2022-05-13T13:54:21.440" UserId="11932" />
  <row Id="19808" PostId="7400" Score="0" Text="@Dikran Marsupial  Hmmmm... let's put a finer point on it... perhaps the proof equivalency is submitting a proof without a thesis or a conclusion. In this case there is no way to gauge if the student made a valid point or not." CreationDate="2022-05-13T14:08:42.737" UserId="12011" />
  <row Id="19810" PostId="7400" Score="1" Text="@codingCat Accidentally adding &quot;v&quot; at the start of your file when submitting does not transmute English homework into math homework." CreationDate="2022-05-13T14:15:09.737" UserId="1275" />
  <row Id="19811" PostId="7400" Score="1" Text="In the case of the accidental &quot;v&quot; this is more like submitting an otherwise valid proof with an arithmetic error in the tenth decimal place! The mistake is incredibly trivial." CreationDate="2022-05-13T14:15:54.650" UserId="1275" />
  <row Id="19812" PostId="7400" Score="0" Text="@codingCat In a piece of coursework/exam, that would be provided by the question.  It seems to me that an error in a proof (or derivation) is directly analogous.  How about making it a syntax error, such as omitting an operator?" CreationDate="2022-05-13T14:16:18.063" UserId="11932" />
  <row Id="19816" PostId="7400" Score="0" Text="@user253751 Agreed. The typo point was an example of a case where they would not receive a zero." CreationDate="2022-05-13T14:27:42.060" UserId="12011" />
  <row Id="19819" PostId="7400" Score="0" Text="Dikran Marsupial That would be  drifting into another analogy. A simple syntax error (like a missing semicolon) might be over looked. An incorrect comparison operator would count as a logic error and be graded accordingly.  A missing comparison operator resulting in a syntax error would seem like an attempt at getting around rubric requirements and would likely receive a very low grade, or a zero." CreationDate="2022-05-13T14:32:05.783" UserId="12011" />
  <row Id="19820" PostId="7400" Score="1" Text="@codingCat I was specifying the error in the mathematical proof, not the program.  Omitting an operator means that the proof is syntactically incorrect and hence cannot be parsed, which seems to me to be directly analogous to a compiler error.  I can't see how that would be different to e.g. omitting a semi-colon." CreationDate="2022-05-13T14:35:37.920" UserId="11932" />
  <row Id="19821" PostId="7400" Score="1" Text="@codingCat The fact that the &quot;v&quot; student would not receive a zero, is precisely why absolutely nobody should be in the &quot;give them a zero&quot; camp." CreationDate="2022-05-13T14:43:57.593" UserId="1275" />
  <row Id="19823" PostId="7400" Score="0" Text="@Dikran Marsupial apologies. I automatically parsed the use of the word syntax to suggest a switch back to coding. An incorrect comparison operator in a mathematical proof is not on the same level as missing semicolon in a computer program because math isn't engineering. With programming there is an expectation of functionality that is absent from pure mathematics." CreationDate="2022-05-13T14:46:27.003" UserId="12011" />
  <row Id="19824" PostId="7400" Score="0" Text="@user253751 agree to disagree. I see that as a false conclusion." CreationDate="2022-05-13T14:47:43.047" UserId="12011" />
  <row Id="19825" PostId="7400" Score="1" Text="&quot;An incorrect comparison operator in a mathematical proof &quot; I didn't say an incorrect operator.  I said that one had been omitted, such that the mathematical expression could not be parsed.   In mathematics, there is an expectation that a proof actually does prove what it is supposed to.  BTW in maths computer based proving tools are in quite widespread use, so that is also supports the analogy." CreationDate="2022-05-13T14:48:38.873" UserId="11932" />
  <row Id="20012" PostId="7400" Score="0" Text="@codingCat I don't think there is any need for a analogy. A student should not have to uphold the same standards that one might expect from someone coding commercially. With the average students circumstances in mind, there is no reason to not take a closer look at the turned in work and grade whatever is submitted." CreationDate="2022-05-19T07:13:09.827" UserId="12075" />
  <row Id="20018" PostId="7400" Score="0" Text="@Squary94 minimum expectations is the reason _not to_ .  Again, if you are a student, you should not expect a teacher to take the time to grade a project, if you can't be bothered to get it to run or ask for help as needed.  I am not advocating this as an educational industry wide standard. Nor and I suggesting that once a zero is issued that it needs to be etched in stone. By playing devils advocate I was simply making the point that there are valid reasons for giving a zero if the submission doesn't compile." CreationDate="2022-05-19T12:04:41.050" UserId="12011" />
  <row Id="20057" PostId="7400" Score="0" Text="@codingCat At this point I would really have to ask, what could anyone even expect a teacher to do if he can't even be bothered to look at the turned in assignments he handed out? Only because it is convenient in terms of time management for professors to hand out immediate 0s doesn't mean that they should do so. In addition, if a student can't get his programm to run then he simply couldn't and asking questions to professors is more often than not a rather discouraging experience." CreationDate="2022-05-20T12:38:31.853" UserId="12075" />
  <row Id="20059" PostId="7400" Score="0" Text="@Squary94 You seem to be suggesting the unlikely scenario that a student asking for help and encountering a &quot;discouraging experience&quot; would then realistically expect that that same professor to give thoughtful feedback to an assignment that didn't follow the instructions." CreationDate="2022-05-20T13:06:23.450" UserId="12011" />
  <row Id="20060" PostId="7400" Score="0" Text="@codingCat When a student turns in work that doesn't compile then that student does so in hope of not getting a 0 and that is all it is. I personally believe it would only be fair to grade whatever is presented and not uphold the same standards as someone developing software in a company. In addition, I would hope that if the method of grading is to time taxing for the teacher, that he in turn would find ways that allow him to grade whatever is presented without throwing those under the bus that struggle to fit his time saving requirements." CreationDate="2022-05-20T13:51:10.703" UserId="12075" />
  <row Id="20062" PostId="7400" Score="0" Text="@Squary94 obviously _&quot;and that is all it is&quot;_ is not actually all it is. Otherwise this question and the resulting answers/discussion would not exist.  If item 1 on the rubric says &quot;app must run to be considered for grading&quot;, if the submission system validates the code, checking for syntax errors, and the student get get assistance judgement free; then it is not unreasonable to give a zero for a submission that does not compile.  I am not suggesting this as a blanket policy and you may disagree with the point of view; but such a policy is reasonable." CreationDate="2022-05-20T14:25:43.390" UserId="12011" />
  <row Id="20070" PostId="7400" Score="0" Text="@codingCat I am arguing based on the perspective of a student. A student hopes when turning in non-compiling work that it won't be graded a 0. Even if you argue that it may be a reasonable policy, it is still a policy that is harsh just for the sake of the professors convenience." CreationDate="2022-05-23T08:14:14.130" UserId="12075" />
  <row Id="20072" PostId="7400" Score="0" Text="@Squary94 I was actually channeling the perspective of a student when I wrote this response. Remembering back when I was a student myself, and how aware I was of the rubric requirements for each assignment. And, seeing how my students approach assignments today. There are two types who would turn in a non-functional program. 1)careless/lazy and 2)lost/timid. In all cases as soon as they see a zero entered and the effect it has on their grade they are quick to correct a problem and resubmit. And it never happens again. Of course they hope for more then a zero. Everyone hopes for the best." CreationDate="2022-05-23T12:02:33.313" UserId="12011" />
  <row Id="19794" PostId="7401" Score="1" Text="I believe the point being made is that a program that does not compile, especially one submitted through an auto grader, does equate to submitting a an encrypted assignment. More to the point, one written in French. Expecting translation is disrespectful of the instructors time." CreationDate="2022-05-13T13:20:35.113" UserId="12011" />
  <row Id="19797" PostId="7401" Score="1" Text="@codingCat That is a valid point of view about that argument that I just don't happen to completely agree with. Auto graders are convenient tools used to facilitate easier job for instructors, but not to completely absolve them from any responsibility; I get your point, but one usually does not accidentally translate their essay from English to French by the virtue of a swift missclick, as in some cases of compiler errors. Regardless, I believe a fair compromise would be not to reject, but not to grade either: instead, get the grading on hold and allow student to fix the error {continues}" CreationDate="2022-05-13T13:29:17.533" UserId="12078" />
  <row Id="19798" PostId="7401" Score="0" Text="@codingCat themselves while the educator is watching. BTW I really appreciate your mentality of _&quot;little [being] more entertaining that a good argument&quot;_, and no disrespect from me, just partial disagreement, cheers!" CreationDate="2022-05-13T13:29:40.103" UserId="12078" />
  <row Id="19799" PostId="7401" Score="0" Text="a zero is not necessarily a rejection.  I will regularly enter zeros for assignments the moment that a deadline pass, but happily grade the late assignment (often without penalty) once it is handed in. The zero is to get their attention and to let them know that inattentiveness will not be tolerated. The same goes for a program that does not compile." CreationDate="2022-05-13T13:49:32.747" UserId="12011" />
  <row Id="19800" PostId="7401" Score="0" Text="Oh, and the props are appropriated. :-)" CreationDate="2022-05-13T13:49:47.493" UserId="12011" />
  <row Id="19803" PostId="7401" Score="0" Text="@codingCat For some reason I was initially silently assuming that people talking about giving zero score for non-compiling programs intend those scores to be ultimate. Assuming they will allow the students to grade late assignment as you are doing and reading arguments of those people again makes them much more reasonable. Cheers :)" CreationDate="2022-05-13T13:57:53.150" UserId="12078" />
  <row Id="19839" PostId="7401" Score="0" Text="Respectfully, &quot;if the compiler error is caused by something that could be fixed within less than a minute, like a missing semicolon or a stray character&quot; (and similar hypotheticals from the &quot;instructor fixes it&quot; camp) is a straw-man argument. In 20 years I don't think I've ever seen that; usual case is a flood of 20-40 distinct errors. Betting that a particular non-compiling program has a 1-minute fix, and checking for that, has a large negative expected time value." CreationDate="2022-05-13T17:22:19.840" UserId="8137" />
  <row Id="19851" PostId="7401" Score="2" Text="@DanielR.Collins I think you have merit there and that is valid criticism of my answer. And no feelings of being disrespected on my part, don't worry about this, I welcome the critical comments. I will think about updating my answer, maybe fixing the wording a bit to avoid the strawman thing. Cheers." CreationDate="2022-05-13T19:25:48.073" UserId="12078" />
  <row Id="19814" PostId="7402" Score="2" Text="I like this passage &quot;most complete code that does compile&quot;. I will be adding that to the project rubrics.  :-)" CreationDate="2022-05-13T14:25:49.010" UserId="12011" />
  <row Id="19855" PostId="7403" Score="0" Text="Based on this argument, how would you explain the countless other functions that most language standard libraries do contain then?" CreationDate="2022-05-13T19:41:22.617" UserId="11997" />
  <row Id="19860" PostId="7403" Score="1" Text="@EdwinDalorzo they are worth the backward compatibility cost, but factorial isn't (the gamma function might be ;o)" CreationDate="2022-05-13T21:33:15.400" UserId="11932" />
  <row Id="19904" PostId="7403" Score="0" Text="@Edwin Dalorzo the explanation is is the term “standard library” they are not part of the language specification. They are a group of tools that were developed after the fact that have been implemented on every platform." CreationDate="2022-05-15T05:50:01.113" UserId="12011" />
  <row Id="19909" PostId="7403" Score="0" Text="I don’t think the question was why the factorial function is not in the language specification, but why is it not defined somewhere where the language puts its built-in functions. For example, why doesn’t Java have a `factorial` function defined in its JDK API? Unless we have designed a specific language, most answers will be opinionated. My take is the factorial function is simply not useful enough in those languages, that’s all." CreationDate="2022-05-15T10:45:18.940" UserId="11997" />
  <row Id="19944" PostId="7403" Score="0" Text="@Edwin Dalorzo Ageed. Others did a good, in depth analysis of why factorial itself would be a bad choice for inclusion in a language or even a standard library.  I simply felt it important to point out that at their core, most languages try to leave the door open to innovation rather than defining specifics." CreationDate="2022-05-16T12:15:01.760" UserId="12011" />
  <row Id="19827" PostId="7404" Score="0" Text="&quot;The purpose of any course is to cultivate understanding of the material,&quot; that seems inconsistent with not recognising the understanding shown in the program simply because it didn't compile.  &quot;In such a higher-level course, boneheaded mistakes ... can be covered by an allowance for resubmission.&quot;  Not necessarily, at my institution we don't have that discretion and resubmission is only permissible if you have an &quot;extenuating circumstance&quot; (e.g. illness or SPLD)." CreationDate="2022-05-13T14:53:45.017" UserId="11932" />
  <row Id="19829" PostId="7404" Score="0" Text="@DikranMarsupial ah, bureaucracy. I think that it's possible to create policies with a similar end effect in many situations though. Wrzlprmft mentioned the grader spending up to 1 minute fixing trivial compilation errors. And a build server preventing noncompiling submissions solves the problem cleanly." CreationDate="2022-05-13T15:03:21.177" UserId="11357" />
  <row Id="19830" PostId="7404" Score="0" Text="As for understanding, it would certainly be ideal to recognize the student's partial understanding, but what really matters is feedback about their misunderstandings so that they can learn. The grader is now looking at those through fog and the student is distracted by basic language problems, creating a real risk of falling behind under a mountain of multi-level understanding gaps. Forcing them to make their submissions compile means they can actually focus on the course-related feedback after grading. And if they truly can't figure out compilation, it can be triaged with their advisor." CreationDate="2022-05-13T15:04:15.270" UserId="11357" />
  <row Id="19831" PostId="7404" Score="0" Text="bureaucracy indeed!  We provide them with a build server that also tests and packages their results as a pdf file for submission, which clearly indicates when it doesn't compile.  They only have one chance at submitting the work though and we have to mark what they submit.  I only give ~20% for getting the right answer, and that is what they lose for non-compiling code, which seems reasonable." CreationDate="2022-05-13T15:08:57.627" UserId="11932" />
  <row Id="19832" PostId="7404" Score="0" Text="&quot;but what really matters is feedback about their misunderstandings so that they can learn.&quot;   I don't agree there, they grade/mark should be representative of their level of understanding.  &quot; it can be triaged with their advisor. &quot; I meet with every student that fails to put a work plan to get back on track (whether they follow it is up to them)" CreationDate="2022-05-13T15:11:26.303" UserId="11932" />
  <row Id="19842" PostId="7405" Score="3" Text="I think you're comparing apples to oranges here. Most CS instructors here are focused on the majority case: introductory programming courses in the first few semesters. E.g., all of the assignments I give out of the textbook in the first year are submitted as a single C++ code file of maybe 40-100 lines, in a well-defined standard environment. In 20 years I've never seen environment factors ever come into play (aside from some students not knowing where their CPP file was on a MacOS to submit it in the first place)." CreationDate="2022-05-13T17:38:21.360" UserId="8137" />
  <row Id="19859" PostId="7405" Score="0" Text="@DanielR.Collins line endings frequently trip up Java programs (if the students don't use readline as I demonstrate in the lecture/seminar sessions)" CreationDate="2022-05-13T21:28:34.770" UserId="11932" />
  <row Id="19865" PostId="7405" Score="1" Text="There are plenty of instructors that provide a &quot;well-defined standard environment&quot; that isn't standard..." CreationDate="2022-05-13T22:29:33.930" UserId="4529" />
  <row Id="19870" PostId="7405" Score="0" Text="@DanielR.Collins an issue that may prevent compilation is that my institution requires an LTS (Long Term Support) version of Java and we were using LTS11 (which is a bit long in the tooth) as LTS17 arrived just too late to be installed before the start of the academic year.  Some students installed a more recent release (my instructions showed how to install LTS11 for compatibility) and their IDE prompted them to use more recent language features (switch) and their code doesn't compile despite being legal.  Similar story for C++17 and C++20.  It does happen." CreationDate="2022-05-14T05:21:30.493" UserId="11932" />
  <row Id="19881" PostId="7405" Score="0" Text="@DikranMarsupial: Never seen such a thing, never heard of such a thing, sounds crazy. Again, as my answer states, I assume a reasonable effort and double-check at a reasonable environment has been made. That really should go without saying. These bizarro edge-cases aren't helpful in establishing general best practices." CreationDate="2022-05-14T14:27:44.863" UserId="8137" />
  <row Id="19883" PostId="7405" Score="0" Text="@DanielR.Collins It isn't an edge case.  It happened this week.  It is hardly &quot;bizarro&quot; that a student installs the most recent toolchain rather than the one I tell them to (back in October) and has forgotten months later when the coursework is due (it is a full year course)." CreationDate="2022-05-14T14:44:10.720" UserId="11932" />
  <row Id="19884" PostId="7405" Score="0" Text="In this case, the student emailed to let the lecturer know and it was sorted out, but some students leave it to the last possible moment and may leave it too late to get help.  It is perfectly reasonable for a good student to have a more up to date toolchain for work on other projects (best if students enjoy hobby programming - it is something I encourage)." CreationDate="2022-05-14T14:58:13.673" UserId="11932" />
  <row Id="19901" PostId="7405" Score="0" Text="@DikranMarsupial: Our experiences are irreconcilably different." CreationDate="2022-05-14T21:38:50.417" UserId="8137" />
  <row Id="19926" PostId="7405" Score="1" Text="@DanielR.Collins I don't think they are *irreconcilably* different.  I think the difference is the level at which we are teaching.  &quot;I get are pretty frequently massively scrambled up, nonsensical, often show no understanding of the assignment, &quot; is something that I *very* rarely see, and it is not at all unusual to have students in my class that are already highly proficient (and happily maintain several toolchains on their IDEs for their own projects).  The problems with my servers are almost always provoked by the very good students wanting to go beyond the learning objectives." CreationDate="2022-05-15T16:07:45.907" UserId="11932" />
  <row Id="19863" PostId="7407" Score="2" Text="+1 this is pretty much what I do (20% of the marks are for getting the right answer, and they would lose that if it doesn't compile), except I don't have the option to give it back to them as resubmissions are handled centrally by the administrators and only permitted if there are &quot;extenuating circumstances&quot;." CreationDate="2022-05-13T21:56:27.680" UserId="11932" />
  <row Id="19905" PostId="7408" Score="3" Text="Does that mean that a maths student should get zero for a proof or derivation that contains an error invalidating the proof?" CreationDate="2022-05-15T06:20:10.223" UserId="11932" />
  <row Id="19871" PostId="7410" Score="1" Text="I don't agree with this at all.  I very rarely see a program that doesn't compile, and I don't think I have seen one that is complete garbage where I can't understand any of it.  Compilers are *very* fussy, human brains aren't (which is one of the reasons programming can be tricky to learn), so a compiler will reject code that does demonstrate understanding of programming, but which isn't quite righty." CreationDate="2022-05-14T05:26:42.240" UserId="11932" />
  <row Id="19936" PostId="7412" Score="3" Text="Re, &quot;...no programming language is designed to be beginner friendly.&quot; Who said that? What did they mean? There are a number of programming languages that were created specifically to fill a perceived need for a &quot;beginner friendly&quot; language." CreationDate="2022-05-15T19:34:29.203" UserId="1269" />
  <row Id="19939" PostId="7412" Score="0" Text="@SolomonSlow indeed - BASIC apparently stands for Beginners' All-purpose Symbolic Instruction Code" CreationDate="2022-05-15T20:59:25.270" UserId="11932" />
  <row Id="19954" PostId="7412" Score="0" Text="_'Therefore, the said online community bans asking questions like &quot;Which programming language should I pick to learn how to program?&quot; and if such a question is asked then it bans...'_ If you're referring to Stack Overflow, the reason the question is off-topic and &quot;banned&quot; (closed) is because it's opinion-based. _&quot;It does not matter; pick absolutely any, flip a coin if you like, and stick to this choice&quot;_ isn't a community/moderator/official consensus at all, just someone's opinion. [Gorilla vs Shark](https://stackoverflow.blog/2011/08/16/gorilla-vs-shark/) is worth a read." CreationDate="2022-05-16T18:52:32.817" UserId="9426" />
  <row Id="19955" PostId="7412" Score="0" Text="@ggorlen I'm not refering to StackOverflow." CreationDate="2022-05-16T18:57:59.430" UserId="12104" />
  <row Id="19956" PostId="7412" Score="0" Text="Would you mind sharing the site you're referring to, then? I'm surprised that a &quot;well known internet community dedicated to programming&quot; would have official positions that are false, like &quot;No programming language is designed to be beginner friendly&quot;. (Folks tend to misconstrue Stack Overflow moderator responses to question closures as &quot;official positions&quot;)." CreationDate="2022-05-16T19:02:53.617" UserId="9426" />
  <row Id="19957" PostId="7412" Score="0" Text="@ggorlen The exact quote is: &quot;*Languages are **not** based around being good at being a first language.*&quot;. Link: https://discord.com/channels/244230771232079873/607627702869950484/610063687562166273 (*sigh*, and I wanted to avoid would could risk badmouthing a concrete community by unintentionally misrepresenting their views...)" CreationDate="2022-05-16T19:13:17.360" UserId="12104" />
  <row Id="19958" PostId="7412" Score="0" Text="Thanks. I can't really access the link and I don't understand the quote though. If you take exact quotes and provide context, then it's not badmouthing or misrepresenting; it's just citing your reference. Paraphrasing, failing to provide context and direct evidence seems like a great way to unintentionally misrepresent things, though." CreationDate="2022-05-16T19:16:40.747" UserId="9426" />
  <row Id="19959" PostId="7412" Score="0" Text="@ggorlen But I can't provide exact quotes at length. If I would, then, to my understanding, I would run afoul of copyright laws. IANAL, but IIUC I *must* paraphrase. And if I do paraphrase then I tend to avoid providing the source, because I fear that the people I quote may get angry at me either for unintentionally misrepresenting what they said or bringing their words to public attention at all, even if not misrepresented... And this did happen in practice to me sometimes. Perhaps this behavioral pattern of mine is incorrect." CreationDate="2022-05-16T19:23:07.800" UserId="12104" />
  <row Id="19973" PostId="7412" Score="0" Text="Well, I'd think the community in question is perhaps achieving the right answer illogically - to wit: if someone wants to learn to program, the best thing to do is for them to find a thing they want to program and a language suitable for that, and then go with that. This doesn't mean that some languages aren't better/worse for a beginner, but simply that motivation is a far more powerful thing than language-ease, for the most part (exceptions: maybe don't start with brainf*ck). (Anyway, the answer's Python.)" CreationDate="2022-05-17T03:19:44.500" UserId="919" />
  <row Id="20040" PostId="7412" Score="1" Text="Side note: you probably want to clarify if you consider LISP/Haskell/F# as &quot;languages&quot; - all posts so far are about non-functional languages and it probably means &quot;is functional of procedural languages better as first one&quot; should be separate question." CreationDate="2022-05-19T17:01:08.433" UserId="11495" />
  <row Id="19914" PostId="7413" Score="0" Text="I think objects early suits some students and objects late suit others, some students are happy with programming as an abstract activity, whereas some are more practically minded.  The average performance probably doesn't change, it is just a different sub-population of students that is advantaged/disadvantaged.  I prefer objects late(ish) because objects early can be a hurdle that some students can't manage, so it seems to reduce the number of students that don't learn to program adequately." CreationDate="2022-05-15T13:18:35.220" UserId="11932" />
  <row Id="19934" PostId="7413" Score="0" Text="@DikranMarsupial, I'm pretty sure that what you describe is a function of teaching, not student preference or ability. Teachers often have clear views (even prejudices) on object early v late." CreationDate="2022-05-15T19:04:55.193" UserId="1293" />
  <row Id="19938" PostId="7413" Score="0" Text="@Buffy, I think it does extend to students, at least it did when I was one.  Objects first would have been a stumbling block for me - it only really clicked when I found out about v-tables and knew how it all worked (and I had the advantage of having written programs where it would have been useful).  I find abstraction difficult if I don't understand what is being abstracted (and still do).  Not everybody is like me though (thankfully).   I try and take an approach that works either way, hence &quot;late-ish&quot; rather than &quot;late&quot;." CreationDate="2022-05-15T20:15:24.163" UserId="11932" />
  <row Id="19966" PostId="7416" Score="0" Text="(Not your downvoter, BTW). But when you say &quot;Optimally...&quot;, you are expressing a personal choice (which I happen to agree with), but not a law of nature. There are lots of folks who want to teach a purely bottom up curriculum, following the historical development too a large extent." CreationDate="2022-05-16T20:44:23.007" UserId="1293" />
  <row Id="19974" PostId="7416" Score="1" Text="As @Buffy said, &quot;optimally&quot; is highly opinionated and unlike Buffy I would doubt that very much. &quot;outright bugged one as C++&quot;, ah what? If you are using `.global_start:` as an example why you shouldn't use C++ as a beginner language you are doing something VERY wrong. It takes about 10 minutes time to turn C++ into a beginner friendly language. I have used cin/cout perfectly fine without any callstack knowledge and I'd argue the difference between numbers and strings is one of the five most fundamental things in CS. Arguably Pythons &quot;I'll do whatever the f*%&amp; you want&quot; approach can produce" CreationDate="2022-05-17T08:17:56.123" UserId="11138" />
  <row Id="19975" PostId="7416" Score="0" Text="fast result but can be detrimental to actual understanding (as I said arguably, both have pros and cons but you make it seem like anyone who learns the difference between int and char before their fourth year, will be scarred for life). Overall your answer gives off the sentiment of either &quot;CS students must, under no circumstances, be challenged at all&quot; or just an outright rant about a worst possible teaching practice (while twisting arguments in a weired way)." CreationDate="2022-05-17T08:45:24.363" UserId="11138" />
  <row Id="19989" PostId="7416" Score="0" Text="@Max C++ is indeed heavily bugged and there are a lot of different examples. For instance, would you guess what does `cout&lt;&lt;ptr` do if `p` is a pointer to a volatile variable? [Legit and totally reasonable behavior -- it's not bug, it's a feature!](https://stackoverflow.com/q/2501737) Another example is [buggy std::vector behavior](https://stackoverflow.com/questions/14603395). `.globl _start:` is a line from assembly language that I listed as one of three examples, it is not C++. _&quot;CS students must, under no circumstances, be challenged at all&quot;_ would suggest that Python is {continues}" CreationDate="2022-05-18T20:45:32.877" UserId="12078" />
  <row Id="19990" PostId="7416" Score="1" Text="@Max never challenging, which is puzzling to say at least." CreationDate="2022-05-18T20:45:46.560" UserId="12078" />
  <row Id="19945" PostId="7417" Score="1" Text="Thanks for the link to Creative Computing, I magazine I didn't know.  The first article in the first edition there was a review of my first ever computer (Jupiter Ace).  Some of Ahl's games (e.g. Hamurabi) make nice exercises or mini-projects for introductory programming courses.  Unfortunately &quot;someone&quot; is making a website of translations of the programs into more modern languages, which rather detracts from that (https://github.com/coding-horror/basic-computer-games)." CreationDate="2022-05-16T14:46:29.673" UserId="11932" />
  <row Id="20010" PostId="7420" Score="1" Text="One sensible answer! Some ppl can sing, some can't. (Rhythm is related but different) Some can do math some can't. And so on. If programming were some unique exception to this that would be v odd. That said, for a question(er) such as OP,  one would wish to find the right balance of compassion &amp; objectivity" CreationDate="2022-05-19T04:23:54.303" UserId="8837" />
  <row Id="21663" PostId="7420" Score="0" Text="@Rusi Maybe a few people can't sing, but also, many many many people don't learn to sing because they have been told that they couldn't sing. The idea that &quot;some people can't sing&quot; is extremely harmful. Same goes for math. Next time someone tells you that they don't like math, try to ask them since when they've known that they disliked math and if they can pinpoint what they dislike about math. Over 95% of the time you'll end up with the answer &quot;my xth grade teacher made me hate math and convinced me that I sucked at math&quot;." CreationDate="2024-02-10T21:38:40.357" UserId="10968" />
  <row Id="20047" PostId="7421" Score="2" Text="I often present these sorts of preferences as &quot;Most of you don't yet have a philosophy about how to approach __.  I am going to share *my* philosophy with you in this course, and I will also share with you why I think it is so valuable. I ask you to abide by it here. Perhaps after you've lived with it, you'll find value in my approach and wish to take it with you. However, if you later decide that this approach isn't for you, that's fine, too. Believe me, I won't be offended. At that point, at least you'll definitely understand *what* you're rejecting, and that is also a benefit.&quot;" CreationDate="2022-05-19T21:14:46.147" UserId="27" />
  <row Id="20049" PostId="7421" Score="1" Text="I've upvoted for the sentiment. But do realize what a deep problem you're unearthing. Newell&amp;Simon described CS as a *Science of the Artificial*. Which implies **There are no objective truths here.**  So then what/how do we teachers teach?" CreationDate="2022-05-20T00:59:23.263" UserId="8837" />
  <row Id="20050" PostId="7421" Score="1" Text="@Rusi I'm not sure what you mean.  There's plenty of objective stuff on the mathier side of the field. Information theory certainly seems pretty objective.  There are strict limits on how compressed any information can be encoded.  The halting problem also seems pretty objective." CreationDate="2022-05-20T02:08:39.623" UserId="27" />
  <row Id="20051" PostId="7421" Score="0" Text="@BenI. The short (&amp; not v useful) answer is things like https://arxiv.org/pdf/math/0209332. And&#xA; http://aleteya.cs.buap.mx/~jlavalle/papers/wegner/strong-cct.pdf. But I hasten to add: I'm as uneasy quoting these (without loud grunts!) as I would be saying *Drinking detergent cures covid*. The more relevant arguments are considerably longer. And we can reserve it for chat (if you wish). For here just this much: Your position *State your philosophy underneath your facts* has serious downsides. Students don't typically want high truth but high grades  — not cseducator notwithstanding " CreationDate="2022-05-20T02:54:29.460" UserId="8837" />
  <row Id="20063" PostId="7421" Score="1" Text="I sympathize with your point of view, but ask yourself what the other options are. Either your teacher imposes no style at all, or exposes you to *all* styles. Given that as a learner you are unlikely to develop a good style from scratch, I would say that learning at least one consistent style from a teacher is preferable." CreationDate="2022-05-20T14:49:55.017" UserId="6346" />
  <row Id="20074" PostId="7423" Score="2" Text="Not understanding can generally be addressed by sticking at it &amp; figuring out. Not being interested is much harder to address. When I was your age (over 40 years ago) I had to read a single program of 3 lines for 3 months before it clicked. That's not the norm of course. But that kind of grit can be a requirement" CreationDate="2022-05-24T01:13:53.357" UserId="8837" />
  <row Id="20076" PostId="7423" Score="0" Text="start with HTML/CSS on this website and the progress to JAvascript/PHP/SQL &#xA;https://www.w3schools.com/sql/default.asp" CreationDate="2022-05-24T07:46:58.927" UserId="8867" />
  <row Id="20083" PostId="7423" Score="1" Text="Re, &quot;[is there] any...language that does not have a high level of abstraction?&quot; Sure. It's called &quot;[assembly language](https://en.wikipedia.org/wiki/Assembly_language).&quot; But, good luck starting _there!!_ Assembly language lets you express programs in terms of the hardware architecture. Hard work, not very rewarding. You'll be happier using a language that lets you express solutions in terms of the problem space (i.e., in a &quot;higher-level&quot; language.) You _want_ a high level of abstraction, but not _too_ high. &quot;_Very_ high level&quot; often means &quot;highly specialized.&quot;" CreationDate="2022-05-26T15:42:28.847" UserId="1269" />
  <row Id="20145" PostId="7423" Score="0" Text="Often you'll find that if something in programming is confusing, when you do understand later, you will probably understand better than people who seemed to understand right away. If you learn differently than the other students and how it is taught, that can be very good if you stay with it. It depends on whether you feel good about learning it, or If it is just always unrewarding." CreationDate="2022-05-30T22:42:04.290" UserId="5349" />
  <row Id="20400" PostId="7423" Score="0" Text="What computer programmers call abstraction, and what teachers call abstraction is almost completely at odds. In programming more abstract (high level) means abstracted away from the machine, and toward the human. Therefore, high-level abstract languages are easier than low-level less-abstract languages." CreationDate="2022-06-10T21:31:25.240" UserId="204" />
  <row Id="20077" PostId="7424" Score="2" Text="thanks a lot for taking the time to answer this, the personal opinion was the most important because sometimes i feel i need be more rational like dr spock and i feel bad because im not" CreationDate="2022-05-24T18:47:27.557" UserId="12152" />
  <row Id="20078" PostId="7424" Score="1" Text="Be careful @helpmyandroid! Dr Spock is mythology." CreationDate="2022-05-25T00:41:54.773" UserId="8837" />
  <row Id="20079" PostId="7424" Score="0" Text="&quot;JS/Web is far from being the best entry into CS [because it's in flux]&quot;--I disagree. Aside from Scratch, HTML/CSS/JS offers the easiest, most immediate and accessible way to make practical, graphical, engaging and fun projects. One can simply ignore all of the hyped web technologies of the past 20 years and play with HTML/CSS, add a bit of vanilla JS to make games, animations or add basic interactivity as necessary. The environment set-up is as easy as firing up a Codepen or Glitch project." CreationDate="2022-05-25T17:06:02.507" UserId="9426" />
  <row Id="20081" PostId="7424" Score="2" Text="Tnx for your comment @ggorlen. I'd encourage you to write a(nother) Web/JS focussed answer, especially considering the OP seems headed that-a-way. Eg between glitch codepen jsfiddle which to choose. And having chosen what path to take.  Myself: I'm a programming languages  guy and teacher. But I've never managed to enter the JS area because of the browser compatibility insane malarkey. And if you'd prefer a conversation, come over at [chat](https://chat.stackexchange.com/rooms/59174/the-classroom)" CreationDate="2022-05-26T02:59:33.000" UserId="8837" />
  <row Id="20082" PostId="7424" Score="0" Text="@ggorlen I should add: Today, especially in the JS/Web world, doing programming without doing it async seems to be backward/misguided...  But where on the spectrum of callback (hell) → promises → async → rx to place oneself is to me frankly a v v confusing question: See: (1) https://www.toptal.com/javascript/asynchronous-javascript-async-await-tutorial (2) https://goodguydaniel.com/blog/why-reactive-programming . I really thought the [rx stuff](https://reactivex.io/) looked the most promising. But all I hear ppl enthusing over is async/await" CreationDate="2022-05-26T14:31:36.383" UserId="8837" />
  <row Id="20144" PostId="7424" Score="1" Text="The three tendencies basically amount to an Engineering mindset: the desire to make things do stuff, safely and reliably. If making things do stuff is not one's most basic motivation, it will probably be tough sledding!" CreationDate="2022-05-30T22:34:29.483" UserId="5349" />
  <row Id="20148" PostId="7424" Score="1" Text="@ScottRowe  I'd say science-engineering. Or in the language closer to our field &quot;(Systems) *analysis* and *design*&quot; . Maybe I should rewrite the answer from that standpoint... (unless you're writing one?)" CreationDate="2022-05-31T06:18:23.643" UserId="8837" />
  <row Id="20378" PostId="7425" Score="0" Text="Just bear in mind that most of your friends will have no clue what you are going on about." CreationDate="2022-06-08T11:48:19.677" UserId="5349" />
  <row Id="20431" PostId="7425" Score="1" Text="If they are true friends, they will eagerly listen, even if they don't completely understand.  :-)" CreationDate="2022-06-26T02:45:33.897" UserId="12011" />
  <row Id="20438" PostId="7425" Score="0" Text="Yes. However, for some, any kind of thought-form can be a recreation, but for others, equally it just isn't. That's fine, but expecting some to still listen eagerly is perhaps not well." CreationDate="2022-07-03T01:42:39.873" UserId="5349" />
  <row Id="20143" PostId="7426" Score="1" Text="I agree strongly with: &quot;*The key factor seems to be the urge from within to put effort and time into it*&quot;. Eventually earning money is not a very motivating force." CreationDate="2022-05-30T22:29:56.553" UserId="5349" />
  <row Id="20149" PostId="7428" Score="2" Text="Recommend you read the Wikipedia article on Computer Science, esp., the section on what fields it includes: https://en.wikipedia.org/wiki/Computer_science#Fields" CreationDate="2022-05-31T07:29:19.247" UserId="8137" />
  <row Id="20159" PostId="7428" Score="0" Text="Maybe you're looking for lists such as these https://learntocodewith.me/posts/tech-skills-in-demand/ ?" CreationDate="2022-06-01T04:25:21.993" UserId="8837" />
  <row Id="20165" PostId="7428" Score="0" Text="no i don't  need list @Rusi" CreationDate="2022-06-02T18:09:58.857" UserId="11579" />
  <row Id="20430" PostId="7428" Score="1" Text="The fields you are asking about require the use of computers &amp; the internet, they are applications. They are not required for the functioning of computers. The fields you mention could be regarded as being similar to online banking &amp; it is not a field of computer science." CreationDate="2022-06-25T03:25:30.023" UserDisplayName="user11948" />
  <row Id="20154" PostId="7429" Score="0" Text="I'm surprised that it never occurred to me to use a rule for this exact reason.  When I explain the concept in class, I say the address of the array is the location of the first position, and the index is the distance from that position." CreationDate="2022-05-31T14:19:23.083" UserId="12011" />
  <row Id="20146" PostId="7430" Score="2" Text="You'll likely find more useful exchanges at the CS-SE https://cs.stackexchange.com/" CreationDate="2022-05-31T02:01:00.257" UserId="8837" />
  <row Id="20155" PostId="7431" Score="0" Text="and what about computer graphics designing ?" CreationDate="2022-05-31T18:25:00.203" UserId="11579" />
  <row Id="20156" PostId="7431" Score="1" Text="@Hamza That is more akin to art than to engineering, though there are potential areas of overlap in that field." CreationDate="2022-05-31T18:45:10.043" UserId="27" />
  <row Id="20630" PostId="7432" Score="0" Text="i think Is blogging , affiliate marketing , E-commerce  part of it !!?" CreationDate="2022-07-26T06:11:26.933" UserId="11579" />
  <row Id="20668" PostId="7432" Score="0" Text="Then not, those topics do not satisfy the definition of computer science. They are not concerned with how the computer works, but rather how it is used." CreationDate="2022-08-06T04:03:51.647" UserId="12011" />
  <row Id="20669" PostId="7432" Score="0" Text="1) then what is definition of computer science to find out which fields or something else is part of computer science or not ?                                                                      (2)  then these (blogging , affiliate marketing , E-commerce ) is part of information technology ?" CreationDate="2022-08-06T06:55:16.453" UserId="11579" />
  <row Id="20164" PostId="7433" Score="0" Text="and what about computer graphics designing ?" CreationDate="2022-06-02T17:57:54.560" UserId="11579" />
  <row Id="20166" PostId="7433" Score="0" Text="@Hamza creating GIMP is CS. Using GIMP is not." CreationDate="2022-06-02T19:38:56.990" UserId="1401" />
  <row Id="20173" PostId="7433" Score="0" Text="you want to say Software engineering  is  part of cs , but why it is ?" CreationDate="2022-06-04T18:08:14.377" UserId="11579" />
  <row Id="20321" PostId="7433" Score="0" Text="@hamza because words mean things." CreationDate="2022-06-04T21:42:40.457" UserId="1401" />
  <row Id="20337" PostId="7433" Score="0" Text="i don't understand this sentence meaning . tell me in simple words" CreationDate="2022-06-06T17:51:52.107" UserId="11579" />
  <row Id="20391" PostId="7433" Score="0" Text="To be fair, software eng. = CS is not exactly uncontroversial. (just try asking a prog question on CS-SE, you'll quickly find out!) Personally I'd say prog ≠ CS is evidence of an insane world. Statistically tho', odds stacked against the crazy being yours truly !" CreationDate="2022-06-09T16:27:58.053" UserId="8837" />
  <row Id="20392" PostId="7433" Score="0" Text="@Rusi Computer Scientists, Software Engineers, &amp; Developers are all sub sets of Programmers. Users are not." CreationDate="2022-06-09T18:56:41.610" UserId="1401" />
  <row Id="20393" PostId="7433" Score="0" Text="«CS-ists, SE-ists &amp; devs ⊆ Programmers» . In a sane world yeah. In our world just head over to [CS-SE](https://cs.stackexchange.com/), try asking a programming question and see if it remains open for 24 hours!  They say it clearly enough &quot;Programming questions are off topic here&quot; https://cs.stackexchange.com/help/on-topic. More seriously there are PhDs in CS who can't write a line of code to save their lives. **And contribute to educating the next gen CS-ists in hi-falutin institutions.**" CreationDate="2022-06-10T03:28:06.067" UserId="8837" />
  <row Id="20398" PostId="7433" Score="0" Text="@Rusi and there are mathematicians who can’t balance a checkbook. Doesn’t mean addition and subtraction aren’t part of mathematics." CreationDate="2022-06-10T12:04:08.183" UserId="1401" />
  <row Id="20629" PostId="7433" Score="0" Text="@candied_orange : i think Is blogging , affiliate marketing , E-commerce is part of IT" CreationDate="2022-07-26T06:10:10.887" UserId="11579" />
  <row Id="20344" PostId="7437" Score="1" Text="If you already know something, it seems obvious. If you don't, it seems impossible. And if you want to become really good at something, do it regularly for 10 years." CreationDate="2022-06-07T09:21:42.307" UserId="2021" />
  <row Id="20345" PostId="7437" Score="4" Text="&quot;*Mathematics not make one great.*&quot; (paraphrase)" CreationDate="2022-06-07T10:21:42.957" UserId="5349" />
  <row Id="20356" PostId="7437" Score="1" Text="&quot;i don't know what almost everyone knows in cs&quot; don't confuse 'best' with 'average'. As an example: if there are millions of programmers in the world and you are right at the 99th percentile for programmers there would still be *tens of thousands* of programmers better than you. You can look at that one piece of information in two ways: yay I'm in the top 1% or wow look at all these people who are so much better than me. And that's *on top of* the fact that you are talking about multiple different disciplines. *Exceedingly* few people are experts in more than one." CreationDate="2022-06-07T11:16:50.283" UserId="1790" />
  <row Id="20357" PostId="7437" Score="3" Text="As Jared says. &quot;almost everyone&quot; is entirely wrong. A very small cadre of highly specialised people know this stuff, it's greek to the rest of us. The kind of deep number-theory and mathematical material you're looking at is a whole branch of mathematics and computer-science that most people never learn. I don't know it, and I'm a software dev who's been working professionally for a decade!" CreationDate="2022-06-07T12:22:01.380" UserId="5233" />
  <row Id="20359" PostId="7437" Score="5" Text="I just want to point out that Yuval Filmus, assuming this is his real name, is an Associate Professor at Technion, a school well-known for theoretical CS (https://yuvalfilmus.cs.technion.ac.il). The answer to *&quot;How do I get that good at theoretical CS?&quot;* is *&quot;study it for all your adult life and also have a lot of innate talent&quot;*. If you expected that your undergrad degree in a related field would you bring you anywhere close to that level of knowledge, you had too high expectations ;)" CreationDate="2022-06-07T13:10:38.063" UserId="543" />
  <row Id="20362" PostId="7437" Score="6" Text="All those examples are from cryptography stack exchange. Cryptography is a branch of computer science which is literally all about coming up with and analyzing complicated math problems. The stuff cryptography experts deal with on a daily basis is far more math-heavy than in any other branch of CS. Most of what they talk about is black magic to most computer scientists with other specializations. Stackoverflow and even Security SE are so scared of them, they exiled them to their own site :)" CreationDate="2022-06-07T13:43:19.770" UserId="1577" />
  <row Id="20371" PostId="7437" Score="4" Text="@Philipp And most employers will not find this level of mathematics useful, applicable, or even comprehensible. As important as cryptography is, significant portion of the CS workforce don't have to do mathematics at this level, so almost no employers will expect this unless you're specifically hired to to cryptography." CreationDate="2022-06-08T04:16:48.877" UserId="1285" />
  <row Id="20372" PostId="7437" Score="3" Text="&quot;How does one become good at mathematics?&quot; I have been trying to figure that out my whole life." CreationDate="2022-06-08T07:41:13.433" UserId="3036" />
  <row Id="20373" PostId="7437" Score="3" Text="Every mathematician/computer scientist I know is learning things that they do not know constantly. They solve clever problems, yes, but learning new things is part of the process. If you intend to become a mathematician, you will have to become comfortable with learning new and very obscure things from the literature and your colleagues every day" CreationDate="2022-06-08T07:43:16.213" UserId="3036" />
  <row Id="20347" PostId="7438" Score="0" Text="&quot;*Math and math! What is math??!?*&quot; (paraphrase)" CreationDate="2022-06-07T10:26:33.717" UserId="5349" />
  <row Id="20355" PostId="7438" Score="0" Text="Not sure what you're asking @ScottRowe. In any case I added a first line.  Not mathematically very astute but ok as a conspectus" CreationDate="2022-06-07T11:06:33.737" UserId="8837" />
  <row Id="20385" PostId="7438" Score="1" Text="Ok, you can find a video clip by searching for &quot;Brain and brain! What is brain?&quot; It's cute. Anyway it is like the old joke where a musician asks a cab driver how to get to Carnegie Hall. The cab driver says &quot;*Practice!*&quot;" CreationDate="2022-06-09T10:12:47.293" UserId="5349" />
  <row Id="20328" PostId="7439" Score="1" Text="https://www.ioenotes.edu.np/ioe-bct-syllabus&#xA;(look up to first 4 semesters engineering mathematics)&#xA;&#xA;They taught us all math indeed, 4 engineering mathematics that are taught to every engineering branches. But our math was based on solving problems rather than deriving, proving etc." CreationDate="2022-06-06T13:41:42.630" UserId="12217" />
  <row Id="20329" PostId="7439" Score="2" Text="I dont think Calculus is relevant.&#xA;My choices of areas would be: (a) Abstract algebra (group theory going on to rings and fields) (b) Basic number theory (modular arithmetic) (c) Combinatorics (d) Linear algebra. See https://www.reddit.com/r/crypto/comments/cdgfp2/math_prerequisites_for_cryptography/" CreationDate="2022-06-06T13:44:35.573" UserId="8837" />
  <row Id="20330" PostId="7439" Score="1" Text="@Rusi, I just listed the requirements for the course at Duke. They include a lot of multivariate calculus. I was a bit surprised myself." CreationDate="2022-06-06T13:46:18.743" UserId="1293" />
  <row Id="20331" PostId="7439" Score="1" Text="Yes @kudmea engineering math -- solving problems -- and higher math -- proving results -- is *fundamentally* different like Horowitz and Art Tatum.  I would not put one above the other (the &quot;higher&quot; notwithstanding). But one does not do much for the other" CreationDate="2022-06-06T13:46:41.740" UserId="8837" />
  <row Id="20332" PostId="7439" Score="1" Text="Yeah I know Buffy. And I never miss the opportunity to point out that calculus is as likely relevant  to most things math as arcane assembly tricks is to programming   Its there for hoaryness not relevance reasons.  I enjoyed it when I studied math.  But that does not change the fact that it takes up **way** too much room in the curriculum.  Main point (for OP) is that UG calculus is just tricks for solving problems and misleads students to what math is on a broader perspective.. Real and complex analysis which is just 2nd level calculus may be better for that" CreationDate="2022-06-06T13:50:40.373" UserId="8837" />
  <row Id="20335" PostId="7439" Score="0" Text="@Rusi, What? No graph theory?" CreationDate="2022-06-06T14:47:27.900" UserId="1269" />
  <row Id="20336" PostId="7439" Score="1" Text="@SolomonSlow GT for CS is kosher. For crypto?? Dunno... I'm hardly claiming my list is complete or optimal -- just a direction for OP. Yeah... So there's the larger q: Is OP asking about math for CS or math for crypto?" CreationDate="2022-06-06T14:50:06.973" UserId="8837" />
  <row Id="20349" PostId="7439" Score="0" Text="@Rusi the college I went to required 4 terms of Calculus (one taught by Whitehead's granddaughter) and Statistics, none of which I have needed to write any programs. But, it was a good mental workout, right?" CreationDate="2022-06-07T10:35:01.433" UserId="5349" />
  <row Id="20353" PostId="7439" Score="1" Text="@ScottRowe «4 terms of calculus» oooooof. Calculus -- ok. 4 terms?! Thats what I am complaining about. As for mental workout, there are a variety avenues for that.  [JSpolsky](https://www.joelonsoftware.com/2005/12/29/the-perils-of-javaschools-2/) famously claimed *Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers*  (because they dont learn to grapple with pointers).  He's right and wrong. Right because its true wrong because you can find more useful kinds of &quot;hardness&quot; for quality discrimination" CreationDate="2022-06-07T11:02:49.397" UserId="8837" />
  <row Id="20375" PostId="7439" Score="0" Text="@Rusi I thought that making a multi-threaded and multi-process database transaction server was sufficiently hard, but not everyone agrees. No calc or statistics involved. How does one become 'great' at something? There are good answers here..." CreationDate="2022-06-08T10:24:53.420" UserId="5349" />
  <row Id="20380" PostId="7439" Score="0" Text="Concurrency is a can of worms that I'd rather leave unopened @ScottRowe! But if you like we can continue on chat" CreationDate="2022-06-09T03:35:07.153" UserId="8837" />
  <row Id="20383" PostId="7439" Score="0" Text="@Rusi Right, but a server process really doesn't have any interaction between threads, so it was kind of a lame brag. No need to continue. Lots of pointers, though, it was in C. Found a new use for the comma operator to make the I/O fast." CreationDate="2022-06-09T09:53:11.023" UserId="5349" />
  <row Id="20350" PostId="7440" Score="0" Text="Programming definitely got off to a bad start with all that WW2 codebreaking stuff. But then, many new technologies were initially developed as munitions." CreationDate="2022-06-07T10:39:20.393" UserId="5349" />
  <row Id="20354" PostId="7440" Score="7" Text="@ScottRowe Codebreaking is a &quot;bad start&quot;? It likely shortened the war considerably. Are you saying things would be better if WWII had been a bit longer?" CreationDate="2022-06-07T11:06:00.763" UserId="988" />
  <row Id="20360" PostId="7440" Score="2" Text="@ScottRowe I'm not sure that code breaking was the main application that computers were intended for. Look up what ENIAC stands for. Likewise, what motivated Babbage? Zuse seems to have had aerodynamics as application in mind." CreationDate="2022-06-07T13:34:37.500" UserId="6346" />
  <row Id="20366" PostId="7440" Score="0" Text="Well, you mentioned rocket trajectories, and the first rockets were in WW2, as best I recall. And who wanted those tables of logarithms done, long before computers existed? Some General I think... Who was that guy who broke Enigma? Computer theorist, I think." CreationDate="2022-06-07T20:15:31.373" UserId="5349" />
  <row Id="20369" PostId="7440" Score="1" Text="@ScottRowe ...I don't know whether or not you mean Turing by 'the guy who broke Enigma' or the Polish mathematicians whose work was fundamental to breaking Enigma (see [here](https://en.wikipedia.org/wiki/Enigma_machine#Breaking_Enigma); like much work it's more complicated than one person doing it solo)? If you do mean Turing, please read about him; he had a tragically short life but was incredibly brilliant." CreationDate="2022-06-08T04:13:07.767" UserId="919" />
  <row Id="20333" PostId="7441" Score="1" Text="So people like yuval filmus are with math degree and minor in cs or sth like that right?" CreationDate="2022-06-06T14:13:14.913" UserId="12217" />
  <row Id="20334" PostId="7441" Score="3" Text="@kudmea I mean, according to his resume (linked from his [homepage](https://yuvalfilmus.cs.technion.ac.il/)), it appears that his degrees are in CS.  However, he's clearly a mathematician at heart.  You can see that in his posts, his research interests, and his publications :)" CreationDate="2022-06-06T14:43:27.627" UserId="27" />
  <row Id="20348" PostId="7441" Score="1" Text="I will always yearn for a world where programming had emerged from electronics and engineering instead of mathematics. *sigh*" CreationDate="2022-06-07T10:28:30.430" UserId="5349" />
  <row Id="20351" PostId="7441" Score="0" Text="In a little corner of the British Library, I saw a bust of Michael Faraday, 10 feet away from an Enigma encoder." CreationDate="2022-06-07T10:42:46.390" UserId="5349" />
  <row Id="20358" PostId="7441" Score="1" Text="@kudmea Maybe. Or they may just have a degree in CS and have spent a lot of time involved with the math side of things. Or they may even have a completely unrelated degree. It’s not so much important _what_ degree you have, especially if it’s just an undergraduate degree, what matters is what experience you have and what you do with it. I have no formal degree myself and can argue about graph theory or set theory as they apply to coding just as well as my co-workers who have CS related degrees despite this." CreationDate="2022-06-07T12:40:41.417" UserId="2523" />
  <row Id="20363" PostId="7441" Score="0" Text="@kudmea There are a lot of double majors with one degree in math and the other in another STEM field because it makes sense practically--it's relatively cheap because there are a lot of course overlaps (at my university, math+CS had one of the lowest total credit requirements for any double major) and it's really hard to get a high paying job in pure math vs. really easy to get a job in a lot of those other fields, so having the double major provides a good fallback if the math thing doesn't work out." CreationDate="2022-06-07T14:29:59.580" UserId="1407" />
  <row Id="20364" PostId="7441" Score="1" Text="Actually @ScottRowe you can find *competing* histories - CS = math. And CS = machine engineering. See https://m-cacm.acm.org/magazines/2014/1/170862-actually-turing-did-not-invent-the-computer/fulltext for a contra mainstream view" CreationDate="2022-06-07T16:25:00.950" UserId="8837" />
  <row Id="20370" PostId="7441" Score="0" Text="@ScottRowe I mean...to some extent, arguably, it did! Computer science *theory* emerged from math, certainly, but programming? See for instance the Computer History Museum in San Jose (wonderful museum, for the record). Mechanical computers, electromechanical, analog - these were all engineering, and eventually, electronics problems! The women who were referred to as computers and eventually became the first programmers were programming solutions to engineering problems. I could go on :)" CreationDate="2022-06-08T04:15:39.157" UserId="919" />
  <row Id="20376" PostId="7441" Score="0" Text="@AudenYoung I suppose I was saying that if I had to choose between a guy in an attic 200 years ago developing electromagnetism and a bunch of people who favored genocide creating crypto as war tool as the better way to cause humanity to move forward, I would say that there should be more children in school and less wars. It's not an engineering problem, or even a political one: it's a psychological problem. So if math can start wars, I certainly hope it can stop them. Feeding people stops a lot of wars." CreationDate="2022-06-08T10:32:23.507" UserId="5349" />
  <row Id="20387" PostId="7441" Score="1" Text="«War is father of all, and king of all. He renders some gods, others men; he makes some slaves, others free» (Heraclitus near 3 millennia ago) So @ScottRowe...  Yes &quot;It's a psychological problem&quot; So for better or worse our computers today come from WWII research. Also the fact that every other country has enough nukes to end our existence." CreationDate="2022-06-09T11:16:47.737" UserId="8837" />
  <row Id="20388" PostId="7441" Score="0" Text="@Rusi Evolution always wins, just like gravity always has the last word. So I am sanguine about humanity's future: either we deserve to exist, or we don't. Doesn't stop me being annoyed about the past though." CreationDate="2022-06-09T11:51:04.540" UserId="5349" />
  <row Id="20389" PostId="7441" Score="0" Text="Continue on chat @ScottRowe" CreationDate="2022-06-09T12:09:01.423" UserId="8837" />
  <row Id="20343" PostId="7442" Score="0" Text="+1 from me. However this is the wellknown philosophy problem called Meno's paradox https://faculty.washington.edu/smcohen/320/menopar.htm" CreationDate="2022-06-07T05:12:02.893" UserId="8837" />
  <row Id="20379" PostId="7442" Score="0" Text="Personally, I value math and research(not that practical things are not great) that is why I was mesmerized. But I looked at yuval filmus's biography, he is multiple degree holder and has a PhD. That explains. And I have always felt I have lacked in cs related math compared to conventional one, so I wanted to fix this." CreationDate="2022-06-09T03:32:11.123" UserId="12217" />
  <row Id="20382" PostId="7442" Score="0" Text="*CS related math* is a worthy goal @kudmea! And in most schools badly addressed. Your question strongly suggests *crypto related math* — similar but different.  You should edit it accordingly. Just one more note. When I was a student theory &amp; research were v close. Nowadays research almost means opposite of theory. Bar and gantt charts and little content" CreationDate="2022-06-09T05:02:29.997" UserId="8837" />
  <row Id="20384" PostId="7442" Score="0" Text="@kudmea Keep in mind that some people start their 'work' (what they become known for) fairly late in life. There is a famous photographer who first picked up a camera at age 70, as I recall. (Now you can't help but pick up a camera at age 2, but you get the point.)" CreationDate="2022-06-09T10:03:28.820" UserId="5349" />
  <row Id="20377" PostId="7443" Score="0" Text="Yeah, it's kind of like: &quot;*What the heck is 'water'?*&quot; Is that how you chose your name?" CreationDate="2022-06-08T11:45:33.047" UserId="5349" />
  <row Id="20338" PostId="7444" Score="0" Text="And if it helps: I thought I would enjoy a CS MSc since the most memorable things during my BSc were Turing Machines, finite automatons, sorting algorithms, karp reductions, OpRes, graph theory." CreationDate="2022-06-06T23:20:02.847" UserId="12227" />
  <row Id="20339" PostId="7444" Score="1" Text="First you need to find a program that would permit it. Rare, I'd think." CreationDate="2022-06-06T23:44:58.813" UserId="1293" />
  <row Id="20340" PostId="7444" Score="1" Text="«the kids doing physics are better in calculus then I am» Bingo! I've seen some of the most serious programmers amongst my phycisist friends. Somehow it seems that putting one's central focus on &quot;rocket science&quot; (whether literally or metaphorically heavy duty stuff like general relativity, quantum mechanics etc) and doing programming *as an ancillary side job* produces the best results in majority cases. (Yeah that kinda contradicts my comment [here](https://cseducators.stackexchange.com/questions/7437/how-do-one-become-great-at-computer-science-mathematics#comment20332_7439))." CreationDate="2022-06-07T02:20:48.250" UserId="8837" />
  <row Id="20341" PostId="7444" Score="0" Text="As for sqlalchemy, threading, requests, I suggest you ignore (for now). If you insist then look at [ballerina](https://en.m.wikipedia.org/wiki/Ballerina_(programming_language)), Erlang, general networking/TCP-IP concepts for these three respectively." CreationDate="2022-06-07T02:34:47.270" UserId="8837" />
  <row Id="20342" PostId="7444" Score="0" Text="Just note that for serious probability you will (probably) need some serious analysis!" CreationDate="2022-06-07T03:06:28.393" UserId="1067" />
  <row Id="20365" PostId="7445" Score="1" Text="I don't really understand the question.  You want recommendations for an LMS?" CreationDate="2022-06-07T19:33:31.123" UserId="27" />
  <row Id="20367" PostId="7445" Score="1" Text="Not necessarily an LMS. For example, reactjs is nice for slides, but how to integrate live coding? Any tools for adding animations, and so on ..." CreationDate="2022-06-07T20:53:40.240" UserId="6410" />
  <row Id="20368" PostId="7445" Score="3" Text="Mostly a link, so I'm not making this an answer, but I took a class with Professor Pamela Fox (CS 61A at Berkeley - tragically she is no longer teaching :/) and she used HTML slides, which she explains [here](https://pamelafox.github.io/html-slides-for-programming/). I think this may include a significant number of the features you seem to want, if I understand your question correctly!" CreationDate="2022-06-08T04:09:29.877" UserId="919" />
  <row Id="20399" PostId="7445" Score="2" Text="Sozi is good for slides. Video for Live (ish) coding, or some video chat system (zoom, MS-teams, Google meets, etc) for actual live coding." CreationDate="2022-06-10T21:15:28.737" UserId="204" />
  <row Id="20401" PostId="7445" Score="1" Text="@AudenYoung Wow, the HTML slides look great. If you make this into an answer (maybe citing a few points from the slides, or something like that), you certainly have my upvote!" CreationDate="2022-06-12T13:05:06.467" UserId="793" />
  <row Id="20404" PostId="7445" Score="0" Text="This is pretty broad. There are many different technologies available for any and all of these concepts (slides, animating algorithms, live coding, etc), but it's not clear what your use case is. The answer seems like: make a webpage and pick the best open source tools for each specific task that suit your needs." CreationDate="2022-06-16T14:31:02.790" UserId="9426" />
  <row Id="20386" PostId="7447" Score="0" Text="Right, &quot;Use it or lose it&quot;" CreationDate="2022-06-09T10:15:19.387" UserId="5349" />
  <row Id="20396" PostId="7449" Score="1" Text="Indeed, there is no need to say &quot;interfaces cannot contain any code&quot; in the first place, it isn't necessary to explain what interfaces are and how they are used.  The fact that the example interfaces used won't contain any code is sufficient to indicate that they don't *normally* include code." CreationDate="2022-06-10T05:35:58.903" UserId="11932" />
  <row Id="20402" PostId="7451" Score="1" Text="This is the first time I've seen a question directly about a stack exchange user, and now it is answered by that user.  Nice!  I hope you got a kick out of it " CreationDate="2022-06-14T21:44:33.383" UserId="27" />
  <row Id="20403" PostId="7452" Score="1" Text="My &quot;mostly&quot; was an important hedge :) In truth, I expect that the large majority of programmers never use (at least in any way that they are aware of) even a bit of what you've outlined. It's easy to demonstrate that, too. Go to 10 random programmers and ask them which of those topics they feel that they know well. That's what I mean about the diminishing returns: you can study a LOT and still gain very little &quot;practical&quot; in your day-to-day. (FWIW, I support learning regardless, but I am perhaps more sympathetic than you are to degree programs that choose to deemphasize mathematics.)" CreationDate="2022-06-15T21:35:53.417" UserId="27" />
  <row Id="20429" PostId="7452" Score="0" Text="It's difficult to state, because if you know something that really solves a problem, it justifies a lot of time spent learning many other things. You never know what specific things will turn out essential in the future." CreationDate="2022-06-25T00:26:05.700" UserId="5349" />
  <row Id="20410" PostId="7454" Score="0" Text="I will try soon." CreationDate="2022-06-20T18:21:03.070" UserId="204" />
  <row Id="20411" PostId="7454" Score="0" Text="Nice, please feel free to share your experience here afterwards. I am excited to hear how it works out :)" CreationDate="2022-06-20T18:49:26.270" UserId="793" />
  <row Id="20408" PostId="7455" Score="1" Text="I haven't tried it so can't give a recommendation, but this site has a &quot;teams&quot; feature." CreationDate="2022-06-19T13:53:31.693" UserId="1293" />
  <row Id="20409" PostId="7455" Score="1" Text="There are things like this discussed in the context of LMS: http://folksonomy.co/?permalink=2808. Whether there's content there or only vaporware.... Dunno" CreationDate="2022-06-19T15:30:09.080" UserId="8837" />
  <row Id="20415" PostId="7456" Score="0" Text="Don't want to take which course? The first? And if so, do you have a course that is similar but in another language? Scheme, Python? Other? And if you were able to take 2 or 3 without 1 earlier, what was the reason for that? I'd think programming would be a prerequisite for either 2 or 3." CreationDate="2022-06-21T19:15:11.397" UserId="1293" />
  <row Id="20416" PostId="7456" Score="0" Text="Updated for clarity. I have taken course one, and would like to avoid taking course two and three which are equivalent to each other." CreationDate="2022-06-21T19:33:05.583" UserId="12287" />
  <row Id="20425" PostId="7456" Score="0" Text="Please do not remove the course descriptions.  The answers that you have now received will be meaningless without them." CreationDate="2022-06-22T14:44:51.907" UserId="27" />
  <row Id="20412" PostId="7457" Score="0" Text="Do you think this would be equal to the first course:&#xA;&#xA;&#xA;Accelerated breadth-first introduction to computer science as a discipline for students (usually first-year) who have a strong programming background. Computational models of functional, object-oriented, and logic programming. Data structures and algorithm analysis. Computer logic and architecture. Grammars and parsing. Regular expressions. Computability. Extensive practice constructing applications from principles, using a variety of languages." CreationDate="2022-06-21T18:38:06.603" UserId="12287" />
  <row Id="20413" PostId="7457" Score="0" Text="Actually, it would help if you say something (by editing the question) what the purpose of this is. That is &quot;Equivalent for what purpose?&quot;. But the new suggest ion is more like your second example." CreationDate="2022-06-21T18:55:37.977" UserId="1293" />
  <row Id="20414" PostId="7457" Score="0" Text="Updated the original submission" CreationDate="2022-06-21T19:13:39.103" UserId="12287" />
  <row Id="20418" PostId="7458" Score="0" Text="Do you think, using this, I could say A is equivalent to either B or C" CreationDate="2022-06-21T22:07:20.580" UserId="12287" />
  <row Id="20420" PostId="7458" Score="0" Text="... no?  If anything, let them decide." CreationDate="2022-06-21T23:30:32.637" UserId="27" />
  <row Id="20426" PostId="7458" Score="0" Text="@leecan999 Did you read the answers? No, A is not equivalent to either B or C." CreationDate="2022-06-23T16:22:28.587" UserId="6346" />
  <row Id="20432" PostId="7460" Score="1" Text="you are from ??" CreationDate="2022-06-26T15:19:03.427" UserId="11579" />
  <row Id="20434" PostId="7460" Score="1" Text="I sympathize with your &quot;cri de coeur&quot;. For what it's worth, I try to write good open textbooks, and if you want to learn C++, check out https://theartofhpc.com/" CreationDate="2022-06-27T12:53:38.683" UserId="6346" />
  <row Id="20435" PostId="7460" Score="3" Text="Who are you, in this context? Are you a teacher, frustrated with not getting the needed materials? Are you a student, frustrated with not getting the learning opportunities you need? Are you a company leader, frustrated with a lack of skilled applicants? &quot;What can we do&quot; depends on who is wanting to do something about it, because not every person can effect every kind of change." CreationDate="2022-06-27T15:19:18.163" UserId="2164" />
  <row Id="20440" PostId="7460" Score="1" Text="I was a programmer for quite a while, then ran a retreat center for 10 years, then taught programming for a few years, then a programmer again. In all these things, my main goal was to do whatever I could to help people and improve processes. You can eventually find ways to improve things. Rusi's Answer is so on-point." CreationDate="2022-07-03T02:14:59.867" UserId="5349" />
  <row Id="20439" PostId="7461" Score="1" Text="Wow, stunning answer based in real spiritual practice! This is what I keep saying to people constantly: &quot;Why do you watch the News? Can you use the information for anything? How many more days of life do you think you have anyway?&quot; Blessings" CreationDate="2022-07-03T01:57:42.593" UserId="5349" />
  <row Id="20606" PostId="7464" Score="0" Text="Instead of making it expensive to leave, they should make it cheaper to stay. More to the point though, a motivated person can to some degree come up with their own challenging exercises to get started on. I did this when I was 14. The code test cycle is really up to the student, at least if you have an interactive machine." CreationDate="2022-07-12T01:42:22.250" UserId="5349" />
  <row Id="20442" PostId="7465" Score="0" Text="Is `#region`  a thing in C++? Doesn't seem so... https://social.msdn.microsoft.com/Forums/en-US/408159fd-563b-478c-9880-b47658f9e085/what-is-the-equivalent-of-c-region-in-c?forum=vcgeneral" CreationDate="2022-07-05T07:01:40.563" UserId="8837" />
  <row Id="20595" PostId="7465" Score="0" Text="You will go nuts unless you make a uniform decision on what compiler to use.  The #region is not a part of standard C/C++.   It's an added preprocessor directive defined in some proprietary .h file." CreationDate="2022-07-06T14:47:22.067" UserId="21" />
  <row Id="20597" PostId="7465" Score="0" Text="@ncmathsadist replace `#region` with `#define region_[some_name]` and suddently it's legal everywhere, but still a frowned upon practice. You can't pinpoint everything. This question is focused on finding ways to deal with the unexpected, because the unexpected will happen. No matter how hard we try to restrain students." CreationDate="2022-07-06T20:10:31.143" UserId="11453" />
  <row Id="20598" PostId="7465" Score="0" Text="This is too vague about what was told to the students for us to give a reasonable non-generic response. Eg &quot;code quality&quot; means nothing in particular, what were they told that their code had to be like &amp; not be like to be of good &amp; bad quality? The deliverable is not just code with certain functionality but with certain properties including functionality, and you if you're not getting what you wanted did you say what you wanted? PS The way you avoid this problem is by project management. Eg milestones with partial functionality on which you give feedback." CreationDate="2022-07-06T22:51:13.637" UserId="2485" />
  <row Id="20599" PostId="7465" Score="0" Text="@philipxy I would aim for this question to be quite generic, thus I refrained myself from providing any particular examples. Everyone has different ways of conveying information. All in all, you can't really taech code quality. Students need examples, students need to solve problems and students need to fall into traps in order to learn from their mistakes. This was one of the goals of the course. Nonetheless I believe that your PS is a really good advise. Worthy to be an answer itself." CreationDate="2022-07-07T10:42:56.030" UserId="11453" />
  <row Id="20600" PostId="7465" Score="0" Text="_&quot;As far as I am aware, even in C# it's no longer a practice.&quot;_ As a C# developer, it's not a matter of having been decided to be in/out of practice. Regions _can_ be used sensibly, but they can also be used to hide monolithic code. It's this reason why regions are sometimes discouraged, when in actuality the issue is not the usage of the regions themselves but rather if/when they are used to hide bad coding practices. I wouldn't discourage the use of regions so long as the uncollapsed code itself does not pose a monolithic bad practice." CreationDate="2022-07-07T14:03:33.003" UserId="2164" />
  <row Id="20609" PostId="7465" Score="0" Text="The question would be whether the untaught use of the `goto`s and `#region`s were positively detrimental compared to an alternative that had been taught. I can't imagine that the '#regions' would be detrimental in themselves, just being one of the facilities available for code organisation. The use of the 'gotos' suggests they haven't been taught the tenets of block-structured code (and the importance of structured jumps, and the retention of 'goto' as an exceptional facility for unusual algorithms), and you can barely complain about things that haven't been taught yet." CreationDate="2022-07-16T10:25:52.550" UserId="9075" />
  <row Id="20610" PostId="7465" Score="0" Text="@Steve in this particular case, the students were taught Java first in the previous semester. Java doesn't have `goto`s per se. Only labeled loops so you can `break` from multiple nested scopes. I believe that most of what you're saying somewhat ignores what I wrote in the 3rd paragraph of my question." CreationDate="2022-07-16T12:19:44.203" UserId="11453" />
  <row Id="20611" PostId="7465" Score="0" Text="@Fureeish, it's precisely the 3rd paragraph that made me think you haven't taught the basics of structured programming explicitly - because I can't imagine anyone could talk about structured programming and its advantages without talking about what is unstructured, and therefore talking about goto." CreationDate="2022-07-16T15:18:19.300" UserId="9075" />
  <row Id="20613" PostId="7465" Score="0" Text="If the tools you gave them are radically different from the ones they used, have you eliminated the possibility of third-party assistance? (a bit more bluntly: plagiarism or for-hire coding). 1000 students is a _huge_ number. More details about how you enforce an honor code, or even manage to look at 1000 assignments to check code quality, could be useful. `goto` is still used in C error handling--CPython/Modules has about 5300 occurrences, although not C++ as far as I know. More details seem necessary here, although it seems like you can't penalize anything not in the rubric." CreationDate="2022-07-16T19:28:36.013" UserId="9426" />
  <row Id="20444" PostId="7466" Score="0" Text="Students had been given a very detailed rubric containing specific criteria by which they were graded. The rubric consisted of a record that spelled &quot;Code quality&quot; paired with some examples. It's not about whether they were expecting to be graded for code quality. It's about them using tools that are pretty much objectively low quality. I believe that if they took their time to reserach those tools they would've come to the conclusion that they shouldn't be using them. I held lengthy conversations with the students and ultimately it boiled down to them not researching the topic enough." CreationDate="2022-07-05T19:29:13.457" UserId="11453" />
  <row Id="20450" PostId="7466" Score="0" Text="Buffy's newly added para is my point also @Fureeish. You say &quot;frowned upon&quot;.Did you frown unambiguously enough? Maybe your frown looked like a smile? Your two egs are quite disparate. &quot;Gotos are bad&quot; is a widely held (and baseless) belief stemming from misunderstanding what Dijkstra was saying. I could write a counter-dissertation. Would it help?? I suspect &quot;Gotos are bad&quot; is non negotiable in your framing. Dijkstra didn't like goto. Knuth did (does). Dijkstra won. Did CS win from this? Region OTOH seems to be a non C++ feature. How does the question of using it arise? Methinks 2 questions..." CreationDate="2022-07-06T05:06:53.133" UserId="8837" />
  <row Id="20614" PostId="7466" Score="0" Text="Although I fully agree, this reminds me of the first step in [Teaching is a slow process of becoming everything you hate](https://dynomight.net/teaching/)." CreationDate="2022-07-16T19:36:21.223" UserId="9426" />
  <row Id="20443" PostId="7467" Score="0" Text="Yes, if regrading is possible then you can use initial marks to send a message." CreationDate="2022-07-05T11:08:20.533" UserId="1293" />
  <row Id="20446" PostId="7467" Score="1" Text="I am heavily considering regrading. It takes *a lot* of time though. We are short-staffed and usually each of the tutors is responsible for ~200 students each semester." CreationDate="2022-07-05T19:32:36.313" UserId="11453" />
  <row Id="20445" PostId="7469" Score="1" Text="Yes, the students were given quite detailed instructions what and how things will be graded. I also really like the part when you say &quot;*But with freedom comes responsibility. So, using &quot;outside-the-course&quot; features can earn bonus as well as malus points.*&quot;. This is something that I will be including in the main slides of the course :)" CreationDate="2022-07-05T19:31:13.693" UserId="11453" />
  <row Id="20474" PostId="7469" Score="0" Text="@NOTCSEducator Which conversation??? I don't see any correlation between the question and the chat you linked to." CreationDate="2022-07-06T12:36:03.993" UserId="3966" />
  <row Id="20596" PostId="7469" Score="0" Text="@RalfKleberhoff You're not the only one https://cseducators.meta.stackexchange.com/questions/505/rogue-moving-to-chat" CreationDate="2022-07-06T14:49:40.730" UserId="8837" />
  <row Id="20617" PostId="7470" Score="1" Text="What makes you think you need a book before starting? All topics are tagged, so you can pick basic problem, work up to harder problems, and search for particular concepts as you need them. Algorithms and data structures are huge topics, so starting with the book may result in a lot of extra information that's hard to see the purpose of." CreationDate="2022-07-16T19:55:25.127" UserId="9426" />
  <row Id="20602" PostId="7471" Score="1" Text="I am looking for something other than Cormen's Introduction to Algorithms and Data Structures. I heard it reads like a dictionary for algorithms and data structure. I want something lighter and more fun to read. Do you have any recommendations or should I just man it up and go with Cormen's?" CreationDate="2022-07-11T13:50:22.780" UserId="12323" />
  <row Id="20603" PostId="7471" Score="2" Text="Unfortunately I am not aware of a ADS (algorithms and data structures) book that is primarily aiming to be as light as possible. ADS is a technical topic very close to mathematics. You may find more luck by looking for courses rather than books given your criteria." CreationDate="2022-07-11T14:38:07.503" UserId="11453" />
  <row Id="20604" PostId="7471" Score="1" Text="@NazmusSaqueebAshrafi If you are looking for entertainment I'm sure you can find lighter explanations. I.e. all search algorithms have corresponding dance videos like https://www.youtube.com/watch?v=lyZQPjUT5B4, but as Fireeish pointed out this is a topic that requires effort and it is very unlikely you can learn it without your own work irrespective what media (books, videos or lectures, audio-books, comics) work for you to study." CreationDate="2022-07-11T18:56:52.713" UserId="11495" />
  <row Id="20605" PostId="7471" Score="3" Text="&quot; I heard it reads like &quot; You mean you're dismissing it without actually looking at it?" CreationDate="2022-07-11T20:25:14.457" UserId="6346" />
  <row Id="20608" PostId="7471" Score="1" Text="@VictorEijkhout No not being dismissive, just looking for a different approach. I was just looking for a different approach/take to algorithms than Cormen." CreationDate="2022-07-15T02:39:43.650" UserId="12323" />
  <row Id="20616" PostId="7471" Score="0" Text="Leetcode is generally not terribly theoretical. You need basic complexity (the difference between quadratic and linear, mostly), graphs (DFS/BFS), n-ary trees, arrays, strings, DP. Using CLRS to prepare for LC is overkill and will dip into randomized algorithms, FFT, ML, NP completeness, max flow, creating hash tables from scratch, self-balancing trees, and other theoretical topics that have little to no bearing on LC (not that they aren't great on their own terms, just less relevant to LC, and should be reserved for later when a special occasion arises)." CreationDate="2022-07-16T19:52:34.873" UserId="9426" />
  <row Id="20664" PostId="7471" Score="0" Text="I found the 1990 edition of Sedgewick's _Algorithms In C_ very readable and enjoyable — it explained enough of each algorithm to give you the idea and enable you to go off and start coding it, but not enough to be dry and tedious. (I've only glanced at more recent editions, but my impression was that they're much more detailed and less fun.)" CreationDate="2022-08-04T23:03:23.503" UserId="9454" />
  <row Id="20678" PostId="7474" Score="1" Text="From my experience as one of the students that did care, I took this kind of course as a serious learning opportunity. Testing from real users wasn't even required, but one of my teammates and I took it so far as to get a programming youtuber to review our open source software in a real stream, and we got to discuss not just with the youtuber but also the audience as everyone was trying out our code. It was an amazing learning experience that I'm glad to have been able to taken, and I understand why you would want to incentivize students to do the same. (cont.)" CreationDate="2022-08-09T07:06:13.970" UserId="12023" />
  <row Id="20679" PostId="7474" Score="1" Text="(cont.) However, I think it is worth pointing out that in the process of trying to get people who don't want to do this, you may hinder those that actually do. For example, @Buffy's approach can waste their time if they actually want to test their software with a different audience, and their peers may honestly not be good test subjects for things like the usability issues you mentioned. What I mean to say is that for those that actually want to do this, it may be better to be less restrictive and instead provide options or examples from previous semesters that show the before/after difference" CreationDate="2022-08-09T07:12:05.687" UserId="12023" />
  <row Id="20634" PostId="7475" Score="0" Text="I do explain the internal importance of this exercise. However, the students have other simultaneous courses that give them exercises with both internal importance *and grades*. When students has to choose where to put their time and effort, the grade aspect wins." CreationDate="2022-07-29T12:06:05.093" UserId="1873" />
  <row Id="20631" PostId="7476" Score="1" Text="Right. It's the old horse race technique: have them switch horses." CreationDate="2022-07-27T14:41:30.790" UserId="5349" />
  <row Id="20633" PostId="7476" Score="0" Text="Switching teams is a good idea, but I still have the problem of how to verify that the testing team really tests the product, and not just makes up feedback that looks deep?" CreationDate="2022-07-29T12:03:30.600" UserId="1873" />
  <row Id="20635" PostId="7476" Score="0" Text="If I remember correctly from past interactions, you have a very difficult scale to work with. Too many students, too little help. If you make assignments then you need a way to properly evaluate them. It ain't easy, as you know but scale can make it impossible." CreationDate="2022-07-29T12:12:18.663" UserId="1293" />
  <row Id="20641" PostId="7476" Score="0" Text="Even in small scale, I do not see how I can distinguish between genuine feedback, and feedback made up for the exercise?" CreationDate="2022-07-31T14:13:30.330" UserId="1873" />
  <row Id="20642" PostId="7476" Score="0" Text="You have to read what they write and evaluate it. There isn't any magic in it. Though I fear that magic is required at your scale." CreationDate="2022-07-31T14:30:01.843" UserId="1293" />
  <row Id="20663" PostId="7476" Score="0" Text="A group of students — technically minded _and_ familiar with the particular problem — are hardly representative users, and much less likely to spot issues with usability, especially the higher-level ones around understanding and interacting with the models and metaphors used. (Of course, they're _more_ likely to spot bugs and similar, so that can still be very useful testing. But no substitute for real end-users.)" CreationDate="2022-08-04T22:56:56.597" UserId="9454" />
  <row Id="20636" PostId="7478" Score="5" Text="Just a note, you can't learn &quot;Scheme&quot;, it is a family of languages.  You must pick a flavor.  Racket is an excellent Scheme variant, and comes with a lot of support for learners." CreationDate="2022-07-30T20:49:29.103" UserId="27" />
  <row Id="20638" PostId="7478" Score="3" Text="Seibel's [&quot;Practical Common Lisp&quot;](https://gigamonkeys.com/book/) is quite nice." CreationDate="2022-07-31T07:17:10.580" UserId="3432" />
  <row Id="20648" PostId="7478" Score="0" Text="@BenI. Why do you think Scheme is a family of langauges? It's no more a family of languages than C++, with a series of not completely compatible standards." CreationDate="2022-07-31T20:17:21.490" UserId="11922" />
  <row Id="20649" PostId="7478" Score="0" Text="@prosfilaes From Wikipedia: &quot;This has resulted in scores of implementations,[33] most of which differ from each other so much that porting programs from one implementation to another is quite difficult, and the small size of the standard language means that writing a useful program of any great complexity in standard, portable Scheme is almost impossible.[13]&quot;.  If you want to quibble with my use of the word &quot;family&quot; I'm happy for a better word, but there's no eponymous &quot;scheme&quot; that you can just install. You have to choose among pretty wildly different implementations to even get started." CreationDate="2022-08-01T00:05:08.377" UserId="27" />
  <row Id="20650" PostId="7478" Score="0" Text="@prosfilaes Perhaps the word &quot;varietal&quot; is better than &quot;variant&quot; here." CreationDate="2022-08-01T00:09:33.130" UserId="27" />
  <row Id="20655" PostId="7478" Score="0" Text="I've always heard that the best introductory book on lisp is [Alices Adventures in Wonderland](http://community.schemewiki.org/?alices-adventures-in-wonderland)." CreationDate="2022-08-01T22:17:29.190" UserId="3786" />
  <row Id="20659" PostId="7478" Score="1" Text="As HTDP is mentioned i point out [dcic](https://dcic-world.org/) the latest work from one of the authors. Quite interesting." CreationDate="2022-08-02T14:35:03.163" UserId="12400" />
  <row Id="20660" PostId="7478" Score="0" Text="@BenI. Standard versions of BASIC, Forth, ECMAScript, C and Pascal all provide similarly limited bases; it's just the one implementation world of Python, Java, and C# that provide maximal compatibility. (One dominant implementation, maybe?) JavaScript beyond the browser lacks that compatibility, for a modern example. Even for Java, writing said useful program so it runs on Windows and Android is impossible. Little of this need concern the student, who's not writing complex useful programs, nor is concerned about idiosyncratic GUIs." CreationDate="2022-08-02T18:20:18.917" UserId="11922" />
  <row Id="20637" PostId="7479" Score="3" Text="While I have no disagreement with the general outline of this answer, I wonder about phrasing it using terms like &quot;problem&quot; and &quot;hurdle&quot;. Learning a new programming paradigm is a wonderful *opportunity* and can be very *enjoyable*; it *widens the mind* of a CS student and prepares it for further widening. At least that is how I perceived working with LISP (specifically, Common LISP) when I learned it in the 1980s. My university mandated that CS students learn either LISP or Prolog to make sure they had a grasp on programming languages beyond procedural ones." CreationDate="2022-07-31T03:24:11.540" UserId="1940" />
  <row Id="20640" PostId="7479" Score="2" Text="&quot;The problem with learning any of the Lisp family of languages after learning several others is that Lisp and its progeny use a different paradigm.&quot; – Although the OP says they have a strong background in JavaScript, which is essentially Scheme with a thin veneer of NewtonScript, Act-1, and Self. At least, that was my epiphany. I tried learning JavaScript multiple times, but it only clicked for me when I realized that I should ignore everything I ever learned about JavaScript and simply think of it as Scheme with dictionaries instead of lists as the ubiquitous data structure." CreationDate="2022-07-31T13:47:33.610" UserId="945" />
  <row Id="20647" PostId="7479" Score="0" Text="@JörgWMittag To expand on what you say, the &quot;paradigm&quot; of the Lisp family is that everything is a reference to first-class objects. This exists in the popular scripting languages: JavaScript, Python, PHP (except that arrays are copy-on-write). That hurdle is often the biggest when going from traditional languages to Lisp, and he's achieved it if he understands JS." CreationDate="2022-07-31T18:54:56.017" UserId="1471" />
  <row Id="20670" PostId="7479" Score="0" Text="Best class in which I ever enrolled was called, &quot;Comparative Programming Languages.&quot; The list of languages included Lisp, Pascal, [SNOBOL4](https://en.wikipedia.org/wiki/SNOBOL), Smalltalk, [Prolog](https://en.wikipedia.org/wiki/Prolog), and one or two others. (It was forty years ago, my memory is dim.) The primary focus was on how different languages support different ways of thinking about a problem. Secondary attention was paid to the tradeoff between benefits of certain language features (e.g., Lisp's lexical closures) vs. the cost of implementing and/or using those features." CreationDate="2022-08-06T14:32:52.703" UserId="1269" />
  <row Id="20671" PostId="7479" Score="0" Text="@SolomonSlow, such a course is best if it focuses on &quot;principles of programming languages&quot; rather than &quot;examples of programming languages&quot;. Your course may have been more in the first category." CreationDate="2022-08-06T14:35:16.840" UserId="1293" />
  <row Id="20644" PostId="7481" Score="1" Text="Is there a way to escape DrRacket IDE hell?  Personally, I don't like IDEs and I would appreciate if you could tell there is command line racket interpreter available for Unix based systems?" CreationDate="2022-07-31T17:42:13.463" UserId="12383" />
  <row Id="20645" PostId="7481" Score="3" Text="@TaimoorZaeem You are certainly under no obligation to use DrRacket. The `racket` command-like executable drops you into a REPL if given no arguments, and there’s also a racket-mode for emacs." CreationDate="2022-07-31T17:44:05.387" UserId="2915" />
  <row Id="20654" PostId="7481" Score="1" Text="WYAS is perhaps not the best choice, since Haskell is very different from both Scheme and the languages OP claims to know. OP would have to first learn Haskell to derive the greatest benefit from WYAS." CreationDate="2022-08-01T20:31:23.833" UserId="9711" />
  <row Id="20841" PostId="7481" Score="1" Text="@TaimoorZaeem there is also good Vim support available. See the racket docs on editors" CreationDate="2022-10-22T21:50:11.293" UserId="6137" />
  <row Id="20651" PostId="7483" Score="1" Text="I am not entirely certain, but the question looks like it might be a better fit for [Computer Science Stack Exchange](https://cs.stackexchange.com/help/on-topic)." CreationDate="2022-08-01T09:32:01.370" UserId="793" />
  <row Id="20652" PostId="7483" Score="0" Text="I looked at that forum. Seems like If I have specific logic questions I can ask there." CreationDate="2022-08-01T12:26:27.737" UserId="12400" />
  <row Id="20653" PostId="7483" Score="0" Text="Haskell road to logic https://books.google.co.in/books/about/The_Haskell_Road_to_Logic_Maths_and_Prog.html?id=YCC6lwEACAAJ&amp;source=kp_book_description&amp;redir_esc=y may be more close to what you seek than Gries /Schneider. I could say more if it's needed... Meanwhile see my https://cseducators.stackexchange.com/search?q=user:8837+[functional-programming]" CreationDate="2022-08-01T16:02:30.203" UserId="8837" />
  <row Id="20657" PostId="7483" Score="0" Text="Just to retract slightly : Haskell road to logic is not a great book but is in the direction you're seeking. Gries is a superb book but not (very) useful for your direction" CreationDate="2022-08-02T04:00:34.817" UserId="8837" />
  <row Id="20658" PostId="7483" Score="0" Text="One more point : since you're into python + machine learning I'd recommend APL.  It's a functional language as old as lisp but much neglected. If you grok numpy and you study APL you'll see the original of which numpy is a poor imitation. For non FP-ers APL can be frightening. Coming from an FP perspective you should find it accessible and enjoyable. And Dyalog is nowadays freely downloadable" CreationDate="2022-08-02T05:41:22.853" UserId="8837" />
  <row Id="20672" PostId="7484" Score="1" Text="The Dreyfus model of learning indicates that novices learn best through starting out by being told exactly what to do, moving on to minor variants of that, and only slowly generalising to rules, guidelines, and so on. I've found this to be true in my experience as well. That's why I recommend _The Little Schemer_ first; it will directly teach you the idioms rather than leaving you stumbling around trying to figure out what they are. The Project Euler problems would be a great exercise _after_ learning the basic patterns of problem solving in Lisp." CreationDate="2022-08-07T12:18:31.977" UserId="3707" />
  <row Id="20661" PostId="7485" Score="1" Text="Ooh, the course I took on quantum computing with Qubit by Qubit last summer will finally come in handy!" CreationDate="2022-08-04T01:51:56.423" UserId="27" />
  <row Id="20662" PostId="7485" Score="1" Text="Also, welcome back :)  We've missed you." CreationDate="2022-08-04T01:52:44.487" UserId="27" />
  <row Id="20729" PostId="7486" Score="0" Text="Comments are not for extended discussion; this conversation has been [moved to chat](https://chat.stackexchange.com/rooms/139016/discussion-on-answer-by-ben-i-to-introduce-quantum-computing-what-metaphors-ac)." CreationDate="2022-09-06T13:22:45.163" UserId="27" />
  <row Id="20665" PostId="7487" Score="0" Text="The link you provided ragarding the insertion and deletion in a singly-linked list is not stating that this operation is `O(n)`. It clearly says that it's `O(1)`, but *if you do not have access to the element preceeding the one you wish to delete, you first have to locate it, which would be an `O(n)` operation*. Certainly insertion and deletion in linked-lists **is** `O(1)`. The question is whether you already have access to that element. This is a separate concern that generally should not be taken into account when specyfing time complexity in such details you seem to seek." CreationDate="2022-08-05T16:42:40.583" UserId="11453" />
  <row Id="20666" PostId="7487" Score="0" Text="We are talking about removing a node that we have access to. In the case of singly-linked list it is O(N) because although you can access the node to remove in O(1), then you need to search for the previous node in O(N)." CreationDate="2022-08-05T20:01:44.933" UserId="12430" />
  <row Id="20667" PostId="7488" Score="0" Text="Certainly a table is not going to save me the time of reading all the data structures; I just wanted to know if there was a well-done summary or table that would serve as a starting point. Maybe I didn't express myself well. Thanks for recommending that book, I'll check it out!" CreationDate="2022-08-05T20:04:09.757" UserId="12430" />
  <row Id="20683" PostId="7506" Score="0" Text="Couple of my old blog posts that you may find useful http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-1.html and http://blog.languager.org/2011/02/cs-education-is-fat-and-weak-2.html. You are right to be unsatisfied with the poverty of such a basic term's definition." CreationDate="2022-08-11T03:23:18.180" UserId="8837" />
  <row Id="20684" PostId="7506" Score="2" Text="I would say there is no standard definition. The invention of general-purpose computing machinery as we know it, about 70 years ago, has caused interest in studying a wide variety of disparate topics that were previously studied to a much lesser degree, and &quot;computer science&quot; as a result consists of a disparate and ill-defined collection of topics whose only real nexus is their relevance to either the construction or the application of computing machinery." CreationDate="2022-08-11T06:24:20.780" UserId="9075" />
  <row Id="20690" PostId="7506" Score="0" Text="According to your this comment which base on some information we can say that there is proper definitions are available for math , physics and almost every field which are  based upon human curiosity  . And also there is not any  stranded definitions are available which are created on the base of some other fields and research." CreationDate="2022-08-16T07:08:38.793" UserId="11579" />
  <row Id="20693" PostId="7506" Score="0" Text="I invite you to try your hand at &quot;a proper definition&quot; of math" CreationDate="2022-08-16T08:33:16.853" UserId="8837" />
  <row Id="20695" PostId="7506" Score="0" Text="Sorry i am talking with steve and if you protecting him/her then i use the words &quot;According to your this comment which base on some information.... &quot; it is not my words .." CreationDate="2022-08-16T15:43:02.127" UserId="11579" />
  <row Id="20697" PostId="7506" Score="0" Text="I don't know why you 3,4 guys protecting each other ...." CreationDate="2022-08-16T15:51:24.083" UserId="11579" />
  <row Id="20765" PostId="7506" Score="0" Text="This user has a history of asking unclear questions, sometimes repeated. I'm not going to bother." CreationDate="2022-09-12T21:28:28.147" UserId="6346" />
  <row Id="20771" PostId="7506" Score="0" Text="@VictorEijkhout: can you please tell me; which question is unclear? and question is repeated?" CreationDate="2022-09-14T05:58:05.660" UserId="11579" />
  <row Id="20691" PostId="7507" Score="0" Text="Ok you want to say  computer science is umbrella  term because of this computer science in definition-less  .. Then Math , physics , etc are   umbrella  terms and because  this these all science have no definition because  these are umbrella  and they have lot of branches ...." CreationDate="2022-08-16T07:12:45.423" UserId="11579" />
  <row Id="20692" PostId="7507" Score="0" Text="@Hamza You're pushing on the problem of defining anything.  Any definition gets too fuzzy if you start to look at edge cases and such.  *What is a chair?* Is a tree stump a chair?  Is the ground a chair? Etc.  What I'm claiming about computer science is that, by historical accident, it encompasses fields so unrelated to one another that by all rights, they should not be grouped together at all.  And that is distinctly *unlike* math and physics, and it is the central problem when trying to make even a half-reasonable definition of &quot;computer science&quot;." CreationDate="2022-08-16T08:28:20.193" UserId="27" />
  <row Id="20696" PostId="7507" Score="0" Text="Sorry but i am not agree with you  .. If  anyone don't know the answer of some then it have 2 case . 1  he/she excuse . 2  give some random  , historical   , chemicals and some thing else to prove its answer .. which have not any reason and research behind it  .." CreationDate="2022-08-16T15:49:46.407" UserId="11579" />
  <row Id="20698" PostId="7507" Score="0" Text="@Hamza I am afraid that some of your message got lost in translation, so I can't really respond to points 1 and 2.  However, imagine that auto mechanics are considered part of the field of physics, simply because cars emerged out of that field.  How, then, would you define physics?  Lots of people, maybe most, who go to study it are doing so to understand how to fix cars, not to understand the fundamental equations that govern the universe.  This is the conundrum we find ourselves with in computer science, where programming, IT, and SE are still considered parts of the field." CreationDate="2022-08-17T10:46:57.700" UserId="27" />
  <row Id="20699" PostId="7507" Score="0" Text="ok i agree  , then tell me what isss computer science  and what is means by its fields ?" CreationDate="2022-08-17T15:21:37.693" UserId="11579" />
  <row Id="20700" PostId="7507" Score="0" Text="Then I would say it is the mathematics of information and computation, and additionally every field, no matter how disparate, that has evolved from those roots over time." CreationDate="2022-08-17T15:25:47.923" UserId="27" />
  <row Id="20701" PostId="7507" Score="0" Text="ok i need some more detail what is mean by mathematics of information and what is in-depth meaning of  computation .&#xA;and can you also tell me about that what is difference between computer science and computer engineering ." CreationDate="2022-08-18T14:57:48.503" UserId="11579" />
  <row Id="20702" PostId="7514" Score="1" Text="AP CS Principles, or AP CS A?  Also, is the 7the grade course meant to be the ramp up to AP?" CreationDate="2022-08-22T01:01:28.683" UserId="27" />
  <row Id="20706" PostId="7514" Score="0" Text="@BenI. Thank you for commenting! Yes both AP CS principles and CS A. And yes, the 6th and 7th grade are meant to be introductory and a ramp up to AP." CreationDate="2022-08-23T00:33:28.513" UserDisplayName="user12474" />
  <row Id="20707" PostId="7514" Score="1" Text="Could you edit the question to include that information, and also better explain the sequence?  Is AP CS P going to be prerequisite to AP CS A?" CreationDate="2022-08-23T03:21:04.650" UserId="27" />
  <row Id="20709" PostId="7519" Score="0" Text="CS Unplugged. Yes. Do that." CreationDate="2022-08-26T21:03:48.507" UserId="1293" />
  <row Id="20754" PostId="7524" Score="1" Text="Re, &quot;I don't like the use case &quot;traveling salesman&quot; this is too artificial.&quot; I read about one interesting real-world application of traveling salesman: It was an astronomy team, using an old was-once-cutting-edge-but-no-longer telescope to do a nightly &quot;sky survey.&quot; They wanted the scope to dwell on a few hundred different targets each night for maybe a minute each. They had a different list of targets each night, and they wanted to minimize the amount of time spent moving from target to target. Problem is made more interesting by the fact that the search space is spherical rather than..." CreationDate="2022-09-09T18:52:56.180" UserId="1269" />
  <row Id="20755" PostId="7524" Score="0" Text="...planar, and also by the fact that different parts of the sky are only visible at certain times during the night (stars are rising in the east and setting in the west throughout the night.)" CreationDate="2022-09-09T18:54:16.423" UserId="1269" />
  <row Id="20823" PostId="7524" Score="0" Text="you may check my question &amp; answer here for another example https://cseducators.stackexchange.com/questions/6699/what-are-good-practical-labs-and-activities-for-loops" CreationDate="2022-10-13T07:15:10.040" UserId="9884" />
  <row Id="20730" PostId="7525" Score="0" Text="Thank you for your toughts. I like and do the Collatz conjecture in lower classes. Everything else is &quot;too mathematical&quot;... it would destroy the motivation, except for maybe 1-4 students of 25. I do primes algorithmns.... but I am searching for algorithmns, where the students benefit in their real life. Making a tournament list, is a direct benefit. Understand the ISBN of a book too." CreationDate="2022-09-06T14:56:20.083" UserId="12512" />
  <row Id="20731" PostId="7526" Score="0" Text="I read the chapter titles and the short description. This is all context I would use to teach a course in university not in school. I am searching for a direct real life connection/benefit. And this is abstract context. I am searching for examples **using** that abstract context to solve something. And this is the hard part. I am editing my post..." CreationDate="2022-09-06T15:03:04.717" UserId="12512" />
  <row Id="20732" PostId="7526" Score="0" Text="@BenBar I updated my answer." CreationDate="2022-09-06T17:11:20.210" UserId="8199" />
  <row Id="20733" PostId="7527" Score="0" Text="Ultimately I believe that it heavily depends on your goal. *How* did you come to a conclusion that teaching algorithms for string processing may be necessary? I can see a curriculum that heavily relies on them, but I also can see a curriculum that is completely agnostic to the fact that some algorithms can be applied for demanded text-based problems. Teaching algorithms helps with developing logical thinking, but to divide and consider them into such specific groups requires either a concrete goal or a lot of free time. Not assumptions." CreationDate="2022-09-08T06:20:25.333" UserId="11453" />
  <row Id="20734" PostId="7527" Score="0" Text="I said in my question, &quot;teaching algorithms for string processing may also be necessary...&quot; That is my goal and I had thought it was quite obvious but your comment said otherwise." CreationDate="2022-09-08T09:50:58.663" UserId="9884" />
  <row Id="20735" PostId="7527" Score="0" Text="My counter argument is that what is your goal to teach &quot;sorting &amp; searching algorithms&quot; or any algorithm then?" CreationDate="2022-09-08T09:52:50.783" UserId="9884" />
  <row Id="20736" PostId="7527" Score="2" Text="@Qiulang邱朗 I think that Fureeish is getting at missing information -- you appear to be missing a goal.  &quot;String algorithms&quot; is too broad, especially since all that computers do really reduces to string manipulation.  What skills are you hoping they strengthen?  What do you want them to be able to do?  What do you want them to understand?  What do you wish them to learn?" CreationDate="2022-09-08T15:15:23.307" UserId="27" />
  <row Id="20737" PostId="7527" Score="0" Text="I agree &quot;String algorithms&quot; is too broad, so  what is the very basic (and this is actually my question I should make it clear)? Using sorting &amp; searching as comparison, there are some very basic  sorting &amp; searching algorithm I think very programmer should know. So what are the string algorithms very programmer should know ? Or is there any ?" CreationDate="2022-09-08T15:24:31.177" UserId="9884" />
  <row Id="20738" PostId="7527" Score="0" Text="Please check my updated question." CreationDate="2022-09-08T15:31:12.633" UserId="9884" />
  <row Id="20739" PostId="7527" Score="0" Text="I keep getting the impression that you wish to teach them String-based algorithms because &quot;why not; they haven't been taught that yet&quot;. In such case I would stick to KMP + Boyer-Moore and, if you have *a lot* of time to allocate, to some basic regex. It's a nice distinction to learn both the ins and outs of a basic searching algorithms and a practical tool like regex. I wouls suggest, however, to not delve into the details of greedy or not greedy quantifiers or of state machines." CreationDate="2022-09-08T15:39:46.737" UserId="11453" />
  <row Id="20742" PostId="7527" Score="0" Text="@Fureeish as I already asked you &quot;what is your goal to teach sorting &amp; searching algorithms or any algorithm then? Or do you teach that at all ?" CreationDate="2022-09-09T02:03:05.023" UserId="9884" />
  <row Id="20743" PostId="7527" Score="0" Text="@ggorlen they are high school kids. The goal is not to prepare them for jobs but to whet their interests and help them think whether they would like to study CS in university." CreationDate="2022-09-09T02:07:52.263" UserId="9884" />
  <row Id="20744" PostId="7527" Score="0" Text="@Qiulang邱朗 thanks. What topics do you think would interest them? Maybe teach those." CreationDate="2022-09-09T02:37:08.560" UserId="9426" />
  <row Id="20745" PostId="7527" Score="0" Text="@ggorlen I don't know lol but probably most importantly is what topics they are better to know. For example Joel Spolsky wrote an article a long time ago [The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) &quot;if you are a programmer working in 2003 and you don’t know the basics of characters, character sets, encodings, and Unicode, and I catch you&quot;" CreationDate="2022-09-09T03:01:24.250" UserId="9884" />
  <row Id="20746" PostId="7527" Score="0" Text="@ggorlen I labelled my question as lesson-ideas as I am collecting ideas and I am open to any suggestion." CreationDate="2022-09-09T03:03:54.110" UserId="9884" />
  <row Id="20747" PostId="7527" Score="2" Text="&quot;not prepare them for jobs but to whet their interests&quot; and &quot;better to know&quot; seem somewhat at odds to me. Regardless of your goals, unicode seems likely to destroy kids' interest in programming." CreationDate="2022-09-09T03:19:28.387" UserId="9426" />
  <row Id="20748" PostId="7527" Score="0" Text="Probably but I don't know how often you see garbled characters on webpages. Some kids do have interest to know why. Actually I have been asked several time some even more basic question like why store number as string sometimes" CreationDate="2022-09-09T03:24:59.893" UserId="9884" />
  <row Id="20749" PostId="7527" Score="0" Text="@Qiulang邱朗 and I already answered that question in my original comment: &quot;*Teaching algorithms **helps with developing logical thinking**, but to divide and consider them into such specific groups requires either a concrete goal or a lot of free time. Not assumptions.*&quot;." CreationDate="2022-09-09T13:55:57.033" UserId="11453" />
  <row Id="20750" PostId="7527" Score="0" Text="I agree &quot;Teaching algorithms helps with developing logical thinking&quot; but I also believe let them solve the practical problem (not just learning for sake of learning) is also important. That is one of reasons I am thinking about teach string process algorithm. BTW This is another try I did https://cseducators.stackexchange.com/a/7515/9884" CreationDate="2022-09-09T14:49:29.293" UserId="9884" />
  <row Id="20766" PostId="7529" Score="0" Text="I think another exercise that can go with lowercase/uppercase  is to implement `isalpha()` by themselves.  Several programming languages have builtin `isalpha()`." CreationDate="2022-09-13T06:13:48.207" UserId="9884" />
  <row Id="20751" PostId="7530" Score="1" Text="I wish I had my StackOverflow reputation here so I could give additional points to this answer..." CreationDate="2022-09-09T17:53:57.157" UserId="11453" />
  <row Id="20752" PostId="7530" Score="0" Text="@Fureeish You can upvote once you have 15 rep.  You far exceed that!  Feel free to vote." CreationDate="2022-09-09T17:59:15.507" UserId="27" />
  <row Id="20753" PostId="7530" Score="0" Text="@BenI. I did not refer to upvoting. I referred to awarding a bounty for an answer. I already upvoted the answer :)" CreationDate="2022-09-09T18:01:34.443" UserId="11453" />
  <row Id="20757" PostId="7530" Score="1" Text="Thanks for the detailed answer. It gives me a lot to think about. As for the goal as I said several times I just wanted to teach them some basic string processing algorithm that every programmer should know. But I find this statement still causes quite some confusion. Maybe that is because there is no such thing in string process that everyone should know as compared to array, hash table, binary search, elementary sorts which I would argue that most of us would agree that is the very basic everyone does programming should know." CreationDate="2022-09-10T04:10:17.100" UserId="9884" />
  <row Id="20758" PostId="7530" Score="0" Text="Please give me some time to think your answer over before I accept it. Thanks again." CreationDate="2022-09-10T04:11:55.130" UserId="9884" />
  <row Id="20759" PostId="7530" Score="1" Text="No pressure to accept at all and thanks for the response. I would be very careful with the &quot;every programmer should know&quot; phrase. To me, it's all about goals, and there are few universal truths. Sure, all programmers should know what strings are and how to call library functions to do basic manipulation on them, but (depending on their goals) they may not need to know this right now, in high school. Many programmers who are writing CRUD apps or UIs probably don't need to know a whole lot about how string algorithms work unless they need them for a CS degree or job interview." CreationDate="2022-09-10T04:21:03.823" UserId="9426" />
  <row Id="20760" PostId="7530" Score="2" Text="Rather than asking &quot;what are the string skills every programmer should know?&quot;, why not &quot;what are the goals of my course and which string skills will my students need to achieve these goals?&quot;" CreationDate="2022-09-10T04:27:28.140" UserId="9426" />
  <row Id="20767" PostId="7530" Score="0" Text="One more question do you think it is helpful to explain the immutable concept of string in many languages ? From your answer I expect your answer would be no though lol" CreationDate="2022-09-13T06:51:39.940" UserId="9884" />
  <row Id="20768" PostId="7530" Score="0" Text="@ggorlen &quot;know what strings are&quot; That's language dependent, not? And the OP was not asking about a specific language. I believe C, Fortran, Pascal use three different conventions. In particular Fortran has radically different library functions because of the way it handles strings. Your refinement of the original question nicey sidesteps such issues, btw. So don't take this as criticism." CreationDate="2022-09-13T13:04:12.073" UserId="6346" />
  <row Id="20769" PostId="7530" Score="0" Text="@VictorEijkhout on a high level, understanding what strings are and what they're useful for doesn't seem that language-dependent to me. Basically, all programmers should know that strings are sequences of characters that represent letters and symbols. Sure, there are language-specific details like C doesn't have a string data type so you use null-terminated character arrays and probably the standard library `str` functions. But that doesn't really change the basic concept: if I need to represent someone's name or a piece of text, I should know to use a string." CreationDate="2022-09-13T14:18:48.563" UserId="9426" />
  <row Id="20762" PostId="7531" Score="1" Text="What do you mean by &quot;know programming&quot;?" CreationDate="2022-09-12T10:17:38.213" UserId="1293" />
  <row Id="20763" PostId="7531" Score="0" Text="@Buffy: Meaning they know how to program, know about variables, loops, data structures, can design object oriented systems etc." CreationDate="2022-09-12T11:17:57.080" UserId="11521" />
  <row Id="20800" PostId="7533" Score="0" Text="I did what you advised. Can you kindly provide some feedback for the following course outline I designed? https://docs.google.com/spreadsheets/d/1OWIkcwJ8OpKFy0Kz7PW91HnrEmiuEgBa9PrNCElED8k/edit?usp=sharing" CreationDate="2022-09-27T06:33:21.327" UserId="11521" />
  <row Id="20801" PostId="7533" Score="0" Text="@fakhir I am not sure whether the comment section would be the appropriate place for such discussion, but after a quick glance I can say that it looks rather promising. Could you share the expected level of expertise of the students that join your course? Additionally, I think it would be a good idea to touch on Android's means of communication with the app, like Broadcast Receivers and Services." CreationDate="2022-09-27T10:32:49.620" UserId="11453" />
  <row Id="20803" PostId="7533" Score="0" Text="Oh yes, that's an important topic. Thanks." CreationDate="2022-09-27T17:53:51.577" UserId="11521" />
  <row Id="20772" PostId="7536" Score="0" Text="In my exp. Cormen is indeed the most used in the US for algo classes in the upper/final undergraduate year(s). So, I'd agree with your 'ebookfriendly' source on that." CreationDate="2022-09-14T12:11:29.627" UserId="2887" />
  <row Id="20773" PostId="7536" Score="3" Text="I'd also agree that more intro prog courses use Java than C in the US nowadays. But the choice for a 1st Java books is rather (more) varied. TBH the 'ebookfriendly' with its per-state rather than per-subject tops is rather useless other than for edutainment purposes." CreationDate="2022-09-14T12:17:03.010" UserId="2887" />
  <row Id="20774" PostId="7536" Score="0" Text="But it was from OpenSyllabus, ebookfriendly just quoted the data. So the bottom line is OpenSyllabus's data credible ?" CreationDate="2022-09-14T13:55:44.270" UserId="9884" />
  <row Id="20778" PostId="7536" Score="0" Text="Re 'I would rather recommend &quot;Code Complete&quot;' That's a great book for junior software engineers, but I don't see how it would be effective for students still learning CS basics (as it assumes some familiarity with the fundamentals of CS and software development). Have you looked at Bentley's &quot;Programming Pearls&quot;?" CreationDate="2022-09-15T22:08:56.917" UserId="1940" />
  <row Id="20780" PostId="7536" Score="0" Text="@njuffa update my question can you take a look ?" CreationDate="2022-09-16T03:56:53.517" UserId="9884" />
  <row Id="20781" PostId="7536" Score="0" Text="Have you see these lists https://github.com/jobream/ComputerScience-Books and https://github.com/EbookFoundation/free-programming-books ?" CreationDate="2022-09-16T04:53:30.227" UserId="8837" />
  <row Id="20782" PostId="7536" Score="0" Text="@Rusi I don't know these lists but when I check them I find there are too many books there. Do you have any recommendation ? Actually I am thinking about recommending books about Operating Systems. But I can't find an easy one. Most books about Operating Systems are too thick and I believe they will study OS theory in college, so I just need easy(interesting if possible) introduction material." CreationDate="2022-09-16T06:43:40.083" UserId="9884" />
  <row Id="20783" PostId="7536" Score="0" Text="It seems to me your requirement is somewhat self-contradictory.  OS is inherently an advanced or at least second level course. OTOH you want to teach school children.  You can give children some vague ideas of OS. Or you can expose *user-level* practices of Linux or Windows etc. Eg how to use a shell; how to boot shutdown and onwards. The internal structure of an OS seems rather out of range at this point [At least thats what I think!]" CreationDate="2022-09-16T12:33:52.050" UserId="8837" />
  <row Id="20784" PostId="7536" Score="0" Text="@Rusi you are probably right. It is just that they heard all these terms, iOS watchOS macOS window10 window11 and asked me several times what are they exactly" CreationDate="2022-09-16T12:44:33.080" UserId="9884" />
  <row Id="20785" PostId="7536" Score="2" Text="O like there are bestsellers &quot;for dummies&quot; I guess one could cook up &quot;for children&quot;. Its just that I'm not the one who knows about this . My impression is that children learn much more operationally than conceptually -- you just need to show them what they can do with these xyzOS systems" CreationDate="2022-09-16T13:17:45.147" UserId="8837" />
  <row Id="20786" PostId="7536" Score="0" Text="The &quot;for dummies&quot; is definitely not for them, these are high schoolers with high self-esteem lol" CreationDate="2022-09-17T03:30:33.367" UserId="9884" />
  <row Id="20787" PostId="7537" Score="0" Text="You mentioned quite some materials I don't know, thanks. I highly agree with words &quot;The result is a 1000-page book with no personality.&quot;  When I find &quot;JavaScript The Definitive Guide&quot; has 700 pages, my first reaction is WTF ?! A question, you said &quot;Attitudes about algorithms have shifted over the past decade in their use in hiring, with potential transitive impacts on education.&quot;  Can you further elaborate that ?" CreationDate="2022-09-17T05:04:37.193" UserId="9884" />
  <row Id="20788" PostId="7537" Score="0" Text="Algorithm-based programming interviews have come under fire in recent years (too many citations possible, maybe search for &quot;are programming interviews broken&quot;), so if fewer companies wind up using them, then the education system may eventually adjust as well to de-emphasize algorithms in the curriculum." CreationDate="2022-09-17T05:30:12.753" UserId="9426" />
  <row Id="20789" PostId="7537" Score="0" Text="Here in China I know many big tech companies still like to ask algorithm questions and I also heard this is the case for google." CreationDate="2022-09-17T06:24:13.133" UserId="9884" />
  <row Id="20790" PostId="7537" Score="0" Text="Yeah, it's definitely still a thing, but possibly becoming less so. I'm speculating on the long run. Things tend to get more high-level over time. Assembly isn't taught as much as it used to be, for example. GPT-3, Copilot and so forth are a new high-level that will likely impact education eventually. Algorithms seem to be slowly drifting into the &quot;not everybody needs to know this&quot; category." CreationDate="2022-09-17T06:41:29.733" UserId="9426" />
  <row Id="20792" PostId="7537" Score="0" Text="I found Cormen answered a similar question on quora, &quot;So, my answer is that I have no answer.&quot;(check my updated question). lol" CreationDate="2022-09-18T03:14:14.920" UserId="9884" />
  <row Id="20793" PostId="7537" Score="0" Text="I also found [&quot;code&quot;](https://www.amazon.com/Code-Language-Computer-Hardware-Software-ebook/dp/B0B123P5GV/ref=sr_1_1?crid=1XMC1BO0DJI9B&amp;keywords=code&amp;qid=1663470936&amp;s=digital-text&amp;sprefix=c%2Cdigital-text%2C810&amp;sr=1-1) just published the 2nd edition. Have you read code ? Would you recommend it ?" CreationDate="2022-09-18T03:16:22.460" UserId="9884" />
  <row Id="20794" PostId="7537" Score="1" Text="I agree with Cormen on not using a textbook. Interesting that he doesn't recommend his own book, considered the bible of algorithms. I read about half of &quot;Code&quot; before I got pulled into other things (I have trouble finishing books). Fantastic book, but like Nand2Tetris, it deals with ultra-low level concepts that are certainly fascinating but don't pertain to day-to-day professional programming concerns. Aside from a comp architecture elective, one can get through CS college and a programming career without knowing much of anything about NAND gates." CreationDate="2022-09-18T03:34:15.043" UserId="9426" />
  <row Id="20795" PostId="7537" Score="0" Text="I found Alan Kay gave a similar comment about &quot;Code&quot; at quota [What are the best books to understand computer science concepts?](https://www.quora.com/What-are-the-best-books-to-understand-computer-science-concepts) &quot;The Code book basically uses a very good approach for “principles” — I would take this path also — but I feel that it has way too many words and a few too many side trips for a starter book... Code violates this I think&quot;" CreationDate="2022-09-19T02:20:59.873" UserId="9884" />
  <row Id="20847" PostId="7537" Score="0" Text="Hi I am reading [how computer really works](https://www.howcomputersreallywork.com/) and find it fits my bill. After I finish it I will try to provide an answer to my own question. Initially, I wanted to read [How Computers Work: The Evolution of Technology](https://www.amazon.com/How-Computers-Work-Evolution-Technology/dp/078974984X) but found its latest version was published in 2014 so I gave it up." CreationDate="2022-10-24T02:50:17.193" UserId="9884" />
  <row Id="20848" PostId="7537" Score="0" Text="From the book title you can see I want to introduce some book to the highschoolers about &quot;how computer works&quot;. lol That idea was formed partially through the discussion with you. I want a book about hardware, about OS, no need to go deep but give them these concepts." CreationDate="2022-10-24T02:58:17.783" UserId="9884" />
  <row Id="20963" PostId="7537" Score="0" Text="Hi I found this serial https://www.youtube.com/playlist?list=PLzdnOPI1iJNcsRwJhvksEo1tJqjIqWbN-  too bad it only has an English version." CreationDate="2023-02-12T05:16:44.153" UserId="9884" />
  <row Id="20984" PostId="7537" Score="0" Text="While I agree with the general sentiment expressed in this answer I object to &quot;try to avoid C++ and functional languages (Racket, Scheme, Haskell) in favor of Python or JS&quot;. I believe that exposing your students to the broken and verbose nature of poorly designed languages is only ever going to cloud their appreciation of the beauty of algorithm design. So give them Haskell or Scheme but not what you had in mind." CreationDate="2023-02-15T11:50:26.130" UserId="13024" />
  <row Id="20986" PostId="7537" Score="2" Text="@Kai That seems unrealistic. Few use Haskell or Scheme outside of stodgy academic circles so it's a disservice to students to push them into that world by default. JS and Py are far more popular and practical in virtually every domain, including algorithms. Few online judge sites support Scheme/Haskell, they're not used in most job interviews (or many jobs) and the algo textbooks are usually too dense or antiquated for HS. Even the author of SICP and the cornerstone of Scheme at MIT [defended switching from Scheme to Python](https://youtu.be/cblhgNUoX9M?t=3579). BTW, I code Haskell as a hobby." CreationDate="2023-02-15T16:35:00.140" UserId="9426" />
  <row Id="20987" PostId="7537" Score="0" Text="Couldn't disagree more. The switch to Python is akin to giving up the fight for a better software industry. Poul-Henning Kamp wrote why [The Software Industry Is Still the Problem](https://cacm.acm.org/magazines/2022/6/261171-the-software-industry-is-still-the-problem/abstract). We as educators have the single biggest responsibility to lead rather than follow industry's poor example." CreationDate="2023-02-16T10:57:16.987" UserId="13024" />
  <row Id="21003" PostId="7537" Score="0" Text="Hi, 5 months later I have an answer and added 3 books to my recommendation list, I would like to see your opinions." CreationDate="2023-03-05T02:21:41.313" UserId="9884" />
  <row Id="20791" PostId="7538" Score="2" Text="What components would you imagine go into the URL shortener? How is it similar to other apps you've made? How can you use the general-purpose tools you are familiar with to solve an unknown problem?" CreationDate="2022-09-18T01:13:13.717" UserId="9426" />
  <row Id="20796" PostId="7539" Score="0" Text="I don't use Canvas myself, so I have no idea, but I am glad that this question is here.  I hope it will have an answer soon!" CreationDate="2022-09-22T15:55:45.917" UserId="27" />
  <row Id="20804" PostId="7541" Score="0" Text="I just wanted to comment that you seem to have a lot of separate questions here, and all are highly context dependent. I think you might have a higher chance of getting a good response if you rephrase this to focus on a specific aspect, provide more detail on where you're based, and share the research you've done so far." CreationDate="2022-09-29T09:55:55.270" UserId="2119" />
  <row Id="20812" PostId="7546" Score="1" Text="The scratch wiki actually lists a couple of alternatives including 3D tools. I have used none  of them but might be worth checking out: https://en.scratch-wiki.info/wiki/Alternatives_to_Scratch" CreationDate="2022-10-06T09:34:41.513" UserId="11138" />
  <row Id="20813" PostId="7546" Score="3" Text="@Max Thank you! I'll check out the projects listed on that page! For reference, they're: BeetleBlocks, Alice, StarLogo-TNG, StarLogo Nova and CODE.GAME Box." CreationDate="2022-10-06T10:37:58.223" UserId="12582" />
  <row Id="20865" PostId="7546" Score="0" Text="I realize this doesn't directly answer your question, so I'm just going to say it here: Have you considered petitioning the people at MIT who maintain Scratch to create an advanced/intermediate version? It might have additional capabilities for people who want to learn more about the processes involved in 3D rendering or other more advanced topics, while still working in the familiar environment of Scratch, a bit like someone in the past might have first learned C and then moved over to C++ for its native object-oriented features." CreationDate="2022-11-14T16:15:50.240" UserId="12715" />
  <row Id="20866" PostId="7546" Score="0" Text="PS: It'd no be longer Scratch-ing the surface, so call it Scratch Deep(er), or maybe Dig. ;)" CreationDate="2022-11-14T16:19:38.163" UserId="12715" />
  <row Id="20810" PostId="7547" Score="2" Text="From just seeing the screenshots in your link, building something in Unreal Engine Blueprints does seem way more complicated than in Scratch" CreationDate="2022-10-05T21:15:05.877" UserId="12582" />
  <row Id="20811" PostId="7547" Score="0" Text="Well, Scratch is purpose built educational software, Unreal 5 is a (more or less?) state of the art game and 3D-rendering engine used to build actual games and movies and blueprints seems to be made to be actually used by professionals ;)" CreationDate="2022-10-06T09:32:59.933" UserId="11138" />
  <row Id="20814" PostId="7548" Score="4" Text="Talk to you teacher, but be open to the idea that you are wrong. If you are not wrong, then politely help the teacher to be more clear." CreationDate="2022-10-08T10:15:40.480" UserId="204" />
  <row Id="20822" PostId="7548" Score="0" Text="You say that the grader indicates a mistake. Does it give a different result?" CreationDate="2022-10-12T15:49:47.533" UserId="1293" />
  <row Id="20817" PostId="7549" Score="0" Text="I'm not convinced 3D would innately be that much harder with a proper Scratch-like framework. Are you sure you'd need more vectors and trigonometry than in a Scratch game?" CreationDate="2022-10-08T12:53:26.480" UserId="12582" />
  <row Id="20818" PostId="7549" Score="0" Text="@Anna. Not sure about anything. And it will depend on how 3D it is. Parallax scroll is mostly 2D. 3D models behaving 2D is 2D." CreationDate="2022-10-08T13:20:52.783" UserId="204" />
  <row Id="20819" PostId="7549" Score="0" Text="@anna Depends: Starlogo does apparently exactly this. (I have no experience with either scratch nor starlogo, just scrolled through the available commands). The thing is you can get away with a lot of things in 2D which just don't translate well in 3D and if you do run into a problem, i.e. no scratch command so you have to solve for yourself, things get a lot more complicated really fast. The other question is why? From an educational standpoint going to 3D from 2D does nothing but introduce complicated R³ math. Most other concepts can be done in 2D. I know it might be fun but it might be" CreationDate="2022-10-10T09:43:55.810" UserId="11138" />
  <row Id="20820" PostId="7549" Score="0" Text="extremely frustrating if things don't go as planned or you do eventualy run into &quot;math&quot; issues." CreationDate="2022-10-10T09:44:48.480" UserId="11138" />
  <row Id="20821" PostId="7549" Score="0" Text="Thanks @Max, I'll check Starlogo out! The only reason for us to go 3D is that my student belongs to the Roblox generation and gets a lot more excited by 3D games." CreationDate="2022-10-10T14:36:04.510" UserId="12582" />
  <row Id="20826" PostId="7551" Score="1" Text="Actually, I've seen pairing work for a major project on a major product at a major international company whose name you would instantly recognize." CreationDate="2022-10-13T18:56:43.013" UserId="1293" />
  <row Id="20827" PostId="7551" Score="1" Text="WRT TDD, you don't just _write_ the tests and run them one at a time. You repeatedly run them all as a suite so that any error anywhere shows up as a test failure that points you to the error. So, you don't &quot;revisit&quot; the tests until you see a failure. But when you do, you know you have an inconsistency between spec and program." CreationDate="2022-10-13T18:59:01.303" UserId="1293" />
  <row Id="20829" PostId="7551" Score="0" Text="That actually may illustrate my point here,  it takes 2 highly experienced engineers to make pair programming work (if it does work), which may not be the case here." CreationDate="2022-10-14T01:48:58.277" UserId="9884" />
  <row Id="20830" PostId="7551" Score="0" Text="About TDD I am against writing test before implementation as I answered in another question." CreationDate="2022-10-14T01:50:57.060" UserId="9884" />
  <row Id="20838" PostId="7551" Score="0" Text="The context of your answer is that all ideology ultimately backfires. That much I can agree with. Hence +1. However your *concrete* suggestion amounts to postponing **writing code.** Programmers are hired to write code. At some point the sleeves need to roll up.  When?... Remains a question. BTW Jordan Peterson is eloquent in his take against ideology. As is Dijkstra. But both in the end give their own!!! Practice-what-you-preach is *hard!*" CreationDate="2022-10-20T08:36:19.610" UserId="8837" />
  <row Id="20839" PostId="7551" Score="0" Text="When will you let a new guy start to contribute to the code base is basically the team leaders' judgement call. BTW, what is the story of Jordan Peterson  (who is this guy in the first place) ?" CreationDate="2022-10-20T08:48:25.310" UserId="9884" />
  <row Id="20840" PostId="7551" Score="0" Text="One of the first that comes up if u search &quot;Jordan Peterson+ideology&quot; https://www.youtube.com/watch?v=sJo5WxqpgmQ. Its critical of JP but otherwise an ok summary" CreationDate="2022-10-21T09:54:26.363" UserId="8837" />
  <row Id="20824" PostId="7553" Score="1" Text="The problem with post testing for students is that once they write the code they are too likely to write tests that test exactly that code, not whether it meets the spec. It is too easy to miss boundary conditions and such, for example." CreationDate="2022-10-13T18:42:45.817" UserId="1293" />
  <row Id="20825" PostId="7553" Score="1" Text="And for professionals, it is too easy to just ignore the testing in light of pressing schedules. No time to get it right, but plenty of time (needed) to fix it later." CreationDate="2022-10-13T18:45:01.203" UserId="1293" />
  <row Id="20831" PostId="7553" Score="1" Text="That is one of points in [Test-Driven Development is Fundamentally Wrong](https://hackernoon.com/test-driven-development-is-fundamentally-wrong-hor3z4d) &quot;Because the same blind spots that I had in design will appear in my tests&quot;.  &quot;No time to get it right, but plenty of time (needed) to fix it later.&quot; is indeed a problem I hit many times and I don't have a good way to fix that too." CreationDate="2022-10-14T02:30:20.667" UserId="9884" />
  <row Id="21134" PostId="7553" Score="0" Text="*&quot;But if TDD is to make you to write test code before implementation,&quot;* **--** TDD is **not** writing tests before the code." CreationDate="2023-05-25T20:13:08.610" UserId="1256" />
  <row Id="21141" PostId="7553" Score="0" Text="@TimothyTruckle well, many say it is." CreationDate="2023-05-26T01:26:40.070" UserId="9884" />
  <row Id="21148" PostId="7553" Score="0" Text="@Qiulang邱朗 those are wrong." CreationDate="2023-05-26T17:22:56.990" UserId="1256" />
  <row Id="20832" PostId="7554" Score="1" Text="I would be very surprised if there existed a decent AI (or nearly fully automated of any form) tool that does 50% of the educators' job, which is coming up with good assessment strategies" CreationDate="2022-10-14T18:23:31.907" UserId="11453" />
  <row Id="20833" PostId="7554" Score="2" Text="I imagine that such a tool would be, at best, about as useful as github copilot.  Which is to say that it might get your imaginative juices flowing as you design assignments, and might even be able to fill in small portions accurately for you, but it would basically never be able to get high quality assignments out on its own." CreationDate="2022-10-14T19:59:22.297" UserId="27" />
  <row Id="20834" PostId="7554" Score="1" Text="Just for fun, I tried out this tool: https://app.inferkit.com/demo.  I used the input `&quot;This lab is to be completed in Java.  Consider the following problem:&quot;` and it followed up with `&quot;Check if a Double is positive or negative (i.e., if it is a number)&#xA;&#xA;Integer.Equals(Double.DoubleName, Double.DoubleName);&#xA;&#xA;The double will be a Double if it contains an integer value, or not.&quot;`  Not bad for approximating the spirit of some lab text, but obviously nonsense as an actual assignment." CreationDate="2022-10-14T20:00:34.450" UserId="27" />
  <row Id="20836" PostId="7554" Score="0" Text="@BenI. &quot;positive or negative (i.e., if it is a number)&quot; Right, who cares about zero." CreationDate="2022-10-17T17:32:10.770" UserId="6346" />
  <row Id="20837" PostId="7554" Score="0" Text="@VictorEijkhout " CreationDate="2022-10-17T17:56:13.073" UserId="27" />
  <row Id="20851" PostId="7558" Score="2" Text="You should look up &quot;full stack&quot; material. (eg. google gives me full-stack-developer-course-syllabus.pdf https://besanttechnologies.com/docs/full-stack-developer-course-syllabus.pdf)" CreationDate="2022-10-26T16:56:13.823" UserId="8837" />
  <row Id="20872" PostId="7558" Score="0" Text="&quot;We're having a project work where university won't guide us at all&quot; -- ah, just like the real world. &quot;How do we figure out what topics should we learn?&quot; sort of depends on your goals. HTML, CSS, JS (browser and Node) and Mongo are a lot to cover, so instead of learning everything, maybe start from the goal and work backwards to figure out what subset of these domains you need to get to that goal rather than working forwards and winding up heading down paths that aren't relevant to your goal." CreationDate="2022-11-19T17:04:45.070" UserId="9426" />
  <row Id="20852" PostId="7560" Score="1" Text="I don't have an answer, but I second the question!" CreationDate="2022-10-29T13:16:49.417" UserId="27" />
  <row Id="20856" PostId="7560" Score="0" Text="Look up Dijkstra's [Cruelty of teaching CS](https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html) (search for &quot;engineering&quot;). ⚠ not a hope giving article. But describes the problem accurately." CreationDate="2022-10-31T16:05:38.093" UserId="8837" />
  <row Id="20858" PostId="7560" Score="0" Text="Regarding &quot;simple UML references books&quot; in the context of Software Engineering, how about books about business modeling with UML like [Business Modeling with UML: Business Patterns at Work](https://books.google.com.mx/books?id=afc6MwAACAAJ)" CreationDate="2022-11-07T16:05:44.717" UserId="12659" />
  <row Id="20931" PostId="7560" Score="0" Text="Thanks! I will check it out. But I am wondering if there is any new reference book within 10 years." CreationDate="2023-01-27T06:03:44.080" UserId="12670" />
  <row Id="20942" PostId="7560" Score="1" Text="Sorry, this whole question rubs me the wrong way. What's the point of designing without a spec? Should you perhaps start with motivating requirement elicitation followed by carving out a more rigorous specification from the gathered requirements _before_ indulging in drawing diagrams?" CreationDate="2023-02-08T08:46:49.767" UserId="13024" />
  <row Id="21002" PostId="7560" Score="0" Text="@BenI. I have to say book recommendation questions here lack of good answers in general." CreationDate="2023-03-05T01:40:23.350" UserId="9884" />
  <row Id="20867" PostId="7564" Score="0" Text="Do you know how to use that site? Its UI is confusing. I don't get the proper syllabus from there." CreationDate="2022-11-15T07:46:52.607" UserId="12544" />
  <row Id="20862" PostId="7565" Score="0" Text="Thanks for the answer, though it seems these suggestions don't solve my question. In a few years I'll see if Unreal Engine Blueprints might be interesting for 3D, but this is far beyond my student who has only been doing simple visual block programming." CreationDate="2022-11-10T09:47:11.077" UserId="12582" />
  <row Id="20861" PostId="7566" Score="0" Text="Yes, as other answers have suggested I won't touch text-encoding, I won't touch regex either as @ggorlen suggested. So do you have specific example for  high-level string algorithm ?" CreationDate="2022-11-10T08:51:38.293" UserId="9884" />
  <row Id="20896" PostId="7569" Score="1" Text="Where did you get this idea &quot;I think programming fundamentals is all about looping so a practice material that helps me with looping concepts will be really helpful.&quot; ? It is simply wrong." CreationDate="2022-12-23T03:54:13.250" UserId="9884" />
  <row Id="20897" PostId="7569" Score="0" Text="Check my answer here https://cseducators.stackexchange.com/questions/6927/mern-which-textbook-to-use/6998#6998" CreationDate="2022-12-23T03:54:23.073" UserId="9884" />
  <row Id="20868" PostId="7572" Score="1" Text="Put me in the &quot;This is a profoundly bad idea&quot; column. It is even worse for math than CS though. Reading an answer isn't nearly the same for learning as doing it. And, point 3 under the Patrick quote is just foolish. Rote memory is for eight year olds, not for mathematicians or computer scientists." CreationDate="2022-11-16T14:26:15.810" UserId="1293" />
  <row Id="20869" PostId="7572" Score="1" Text="Neither quote says &quot;to every exercise&quot;." CreationDate="2022-11-17T04:57:00.527" UserId="2485" />
  <row Id="20870" PostId="7572" Score="1" Text="@Buffy, I'm not quite following how you got &quot;rote memory&quot; from point 3. I read it entirely differently; it seems to me Patrick is saying that the student should do their best to solve the problem on their own, but if they fail to do so, they should consult the solution, attempt to understand and internalize the approach taken there, and then after a while (when they forgot the exact details of the solution) to assess whether they have indeed successfully adopted the technique into their toolbox. I don't see anything rote about this." CreationDate="2022-11-17T09:58:24.640" UserId="2119" />
  <row Id="20879" PostId="7572" Score="0" Text="I firmly believe that for problems which are not graded, students should have immediate access to the solutions. If we are talking about higher education, people should be assumed to be responsible and offered the tools they need to learn the best way possible. If they want to cheat themselves and immediately see the solution, it's on them - that work is not graded. Especially in programming there are many potential approaches and sometimes people are stuck - learning by example (and examples can as well be solutions to handed tasks) is proven to be very effective. [...]" CreationDate="2022-11-21T14:44:03.693" UserId="11453" />
  <row Id="20880" PostId="7572" Score="1" Text="[...] If we're considering graded assignents, I think the solutions for them should also be published, but only after the deadline of the tasks in question. By the time the deadline is over, the execrise becomes an ungraded, optional work for everyone who wishes to improve their solution / complete it. The only problem I see with sharing solutions to pretty much *everything* is that every year we need to come up with slightly new problems for graded work, because students will have easy access to exercises from the past. For example I would be against publishing solved exams and tests." CreationDate="2022-11-21T14:48:05.737" UserId="11453" />
  <row Id="20881" PostId="7572" Score="3" Text="Just curious, are you an instructor? Do you use a textbook? How do you grade exercises for which the solutions are available?" CreationDate="2022-11-21T19:20:34.503" UserId="6346" />
  <row Id="20894" PostId="7572" Score="1" Text="&quot;I see with sharing solutions to pretty much everything is that every year we need to come up with slightly new problems for graded work, &quot; if it is only *slightly* different, the published solutions for previous years assignments are likely to be very helpful (not necessarily in a good way)" CreationDate="2022-12-13T19:28:04.307" UserId="11932" />
  <row Id="20876" PostId="7574" Score="3" Text="It is not clear what you are looking for, exactly. If you are looking for a job as a Software Developer, there are various way to achieve it. As a Software Developer, I've had colleagues from diverse backgrounds -- including degrees in Physics, Aeronautics, ... So, do you want a degree in Computer Science? An education in Computer Science? A job as a Software Developer?" CreationDate="2022-11-21T09:03:55.260" UserId="1848" />
  <row Id="20877" PostId="7574" Score="0" Text="@MatthieuM. Your comment can lead us afar. What sort of jobs does an IT/software company offer?" CreationDate="2022-11-21T10:41:46.743" UserId="12737" />
  <row Id="20878" PostId="7574" Score="2" Text="Everything (I'm barely kidding). I _would_ advise aiming for a company where Software is a &quot;core&quot; product (making money) rather than a &quot;support&quot; function (costing money), as employees in the money-making part of a company are better treated... but we're veering off-topic there so I'll stop here." CreationDate="2022-11-21T11:16:14.587" UserId="1848" />
  <row Id="20891" PostId="7577" Score="0" Text="[Instructors can assign marked questions from other books, without divulging these other books to students. Multiple textbooks cover](https://redd.it/xpb1rw)  computer science." CreationDate="2022-12-04T08:50:48.147" UserId="12719" />
  <row Id="20893" PostId="7577" Score="1" Text="&quot;Designing good exercises is hard! &quot; indeed it is!  FWIW sometimes I do the assignment in front of the students in real-time in a lecture/seminar.  It isn't recorded and I don't provide notes etc.  It has the advantage of demonstrating not only *what* the solution looks like, but *how* to go about the programming task - e.g. breaking down the problem, problem solving, writing small test programs to work out how to do something, testing and debugging." CreationDate="2022-12-13T19:17:39.507" UserId="11932" />
  <row Id="20884" PostId="7583" Score="0" Text="Are you looking for a project that you can do or a program that you can study? Or something else?" CreationDate="2022-11-28T00:47:44.000" UserId="1293" />
  <row Id="20886" PostId="7583" Score="0" Text="@Buffy I'am looking for a lightweight software to train my C++ skills. this software have to cover all c++ core concepts and it was designed for educational purposes." CreationDate="2022-11-28T01:06:37.397" UserId="12796" />
  <row Id="20887" PostId="7583" Score="2" Text="Note that this is a bit akin to asking for a sport that lets you practice on all of the balls used in different sports -- projects require different structures, and non-trivial projects can be approached in many different ways.  There is no sport that helps you practice with shuttlecocks, bowling balls, tennis rackets, and curling brooms.  (I am probably making my point too strongly, but I hope you see what I mean.)" CreationDate="2022-11-28T16:16:17.283" UserId="27" />
  <row Id="20975" PostId="7583" Score="0" Text="@Ben. I would say it is more like asking for a small star: The core concepts of C++ are huge. A better approach will be to learn 4 other languages first. And before that, learn one language well." CreationDate="2023-02-12T23:10:45.407" UserId="204" />
  <row Id="20888" PostId="7584" Score="1" Text="I did read one of your OpenMP lectures. I appreciate that you wrote this answer. Thank you." CreationDate="2022-11-28T21:41:11.747" UserId="12796" />
  <row Id="20889" PostId="7585" Score="2" Text="I remember a time when we used to work mostly on paper because of limited availability of terminals and/or keypunch machines. Your student need not sit in front of the screen while _designing_ the program. Could do much of the work on paper, before sitting down to type it in." CreationDate="2022-12-02T21:39:33.683" UserId="1269" />
  <row Id="20892" PostId="7585" Score="1" Text="Lots of upvotes, but five days in and no ideas yet.  This is a really tricky problem!  I'm still trying to come up with something." CreationDate="2022-12-07T13:58:18.243" UserId="27" />
  <row Id="20939" PostId="7585" Score="0" Text="If it has to be programming (question is not clear on this), then don't write a computer program, write a program for a human." CreationDate="2023-02-05T09:19:35.767" UserId="204" />
  <row Id="20937" PostId="7588" Score="0" Text="A world with ChatGPT needs a world where students are graded on their ability to explain their code. For that matter, so does a world without ChatGPT." CreationDate="2023-01-29T02:56:16.847" UserId="1401" />
  <row Id="20938" PostId="7588" Score="1" Text="@candied_orange ChatGPT can explain the code it poduces, so that won't work." CreationDate="2023-01-29T09:06:41.470" UserId="11932" />
  <row Id="20995" PostId="7588" Score="0" Text="@downvoter some feedback on why you disagree with my answer would be appreciated." CreationDate="2023-02-25T14:21:10.133" UserId="11932" />
  <row Id="20895" PostId="7591" Score="1" Text="How many do you need? And how old are the children?" CreationDate="2022-12-21T12:08:19.397" UserId="27" />
  <row Id="20904" PostId="7591" Score="0" Text="check your local thrift shops for such parts" CreationDate="2022-12-27T15:15:40.027" UserId="8051" />
  <row Id="20899" PostId="7593" Score="0" Text="IDK about visual programming as a teaching tool, but I have used a visual designer to code finite state machines for an embedded project. Somebody\* once said, &quot;Only the code can explain what the code does.&quot; What they meant was, programmers are lazy about keeping other forms of documentation up-to-date. We can only trust the source code to be truly accurate. OK, well, sometimes a diagram is a more intuitive explanation than a bunch of text. And, if the diagram _is_  the source code, then we can trust it to be up-to-date.  \[\*[Uncle Bob](https://en.wikipedia.org/wiki/Robert_C._Martin) maybe?\]" CreationDate="2022-12-26T16:04:11.720" UserId="1269" />
  <row Id="20901" PostId="7593" Score="0" Text="@SolomonSlow, I don't want to make it sound like I'm against diagrams in principle. I use my visual and spatial imagination a lot, I know a good diagram when I see one, and I'd be inclined to resort to diagrams if I were teaching. But in terms of specifying instructions for the computer in general - in terms of programming - somehow it just doesn't seem to work. The question is actually on my mind because twice in the past year I've encountered reporting applications that do quite a bit, but lack a written representation of what, and it seriously impairs my oversight of them." CreationDate="2022-12-26T16:30:05.127" UserId="9075" />
  <row Id="20905" PostId="7593" Score="0" Text="Can you proof read and edit paragraph “Untrained novices seem not to be automatically drawn to such diagrammatic representations, whereas experts tend to shun them either as simplistic or as obscuring.” It reads as novices don't like it as opposed to experts that don't like it." CreationDate="2022-12-27T20:53:40.640" UserId="204" />
  <row Id="20906" PostId="7593" Score="0" Text="Christopher Alexander (the architect and author of the first pattern language book), has stated that words are much better than diagrams when expressing what is wanted in a design. Diagrams always accidentally specify arbitrary things. E.g it is impossible to show as straight line without giving it length. But with words we can say “straight line”. With the diagram we can draw the line, but have to add the words “not to scale”. The words alone are simpler." CreationDate="2022-12-27T20:59:25.087" UserId="204" />
  <row Id="20911" PostId="7593" Score="0" Text="@ctrl-alt-delor, it was precisely my intention to say that novices don't particularly like visual programming techniques either. The only novices I've ever heard about using JSP, for example, were specifically trained to do so by an employer - they were not spontaneously drawn to it." CreationDate="2022-12-27T22:15:11.240" UserId="9075" />
  <row Id="20912" PostId="7593" Score="0" Text="You can edit your question to make it clearer." CreationDate="2022-12-28T13:43:12.880" UserId="204" />
  <row Id="20913" PostId="7593" Score="0" Text="I edited the question as discussed, to make it clearer." CreationDate="2022-12-28T14:34:18.297" UserId="204" />
  <row Id="20902" PostId="7594" Score="0" Text="I appreciate the answer, but I was primarily asking whether educators find these visual schemes to be *effective*, either as a complete alternative to written code, or as something where the design is done visually and then more or less mechanically translated into code." CreationDate="2022-12-27T09:16:26.720" UserId="9075" />
  <row Id="20908" PostId="7594" Score="0" Text="UML has some good bits, but the U is a lie. It is not unified, it is a pile of diagram standards. Some useful, some just in there because of who was on the comity. There are other systems BON is more unified. There are also things that UML misses, such as pipeline diagrams, layer diagrams, …, etc, etc." CreationDate="2022-12-27T21:06:29.250" UserId="204" />
  <row Id="20910" PostId="7594" Score="1" Text="@ctrl-alt-delor, well, I didn't name it." CreationDate="2022-12-27T21:07:40.803" UserId="1293" />
  <row Id="20903" PostId="7595" Score="0" Text="Your points chime with my preconceptions. Diagrams are useful for teaching beginners (not for industrial use), and they are useful to experts in limited cases (like FSMs) that involve a lot of &quot;wiring&quot; and for which there is no good textual alternative known which is as expressive as a diagram." CreationDate="2022-12-27T10:19:34.660" UserId="9075" />
  <row Id="20918" PostId="7601" Score="0" Text="The site you pointed to teaches the concept of digital electronics just fine without any reference to electrical circuits, Ohm's law, KCL, or KLV. It's okay to choose a layer of abstraction to begin at and go from there - we do not need to understand the layer beneath that layer (or the layer beneath that, or the layer beneath that, etc) to get going. You need to start somewhere, and if the goal is to use digital electronics to gain an understanding of how it interacts with the abstract layers ABOVE it, I'd let digital electronics be the bare bottom for the moment." CreationDate="2023-01-04T14:00:44.727" UserId="27" />
  <row Id="20919" PostId="7601" Score="0" Text="Well, i respect your opinion, but i think that learning the fundamentals of every topic is necessary." CreationDate="2023-01-04T15:56:19.453" UserId="12918" />
  <row Id="20920" PostId="7601" Score="0" Text="Why not learn the fundamentals behind Ohm's Law, then? Presumably we also need to understand the underlying quantum forces there before we can understand how to create an adder in digital logic? I don't mean to be overly challenging, but in truth, no matter where you enter, you will be in a layer of abstraction that is atop another layer of abstraction. Is your general rule to always enter into the abstraction that is two layers below the learning target, as you are advocating here?" CreationDate="2023-01-04T17:03:56.963" UserId="27" />
  <row Id="20921" PostId="7601" Score="0" Text="If that were the rule, then I guess the natural place to begin a course on machine learning in Python would be with either assembly programming or with combinations and permutations, which are two layers removed from the target (albeit in different directions)." CreationDate="2023-01-04T17:09:09.283" UserId="27" />
  <row Id="20933" PostId="7609" Score="0" Text="This is still a worthwhile topic on this site even if it had to be closed. Learning to program is very hard. Anyone who says otherwise hasn't done something challenging. I'm 57 and first sat down at a teletype in 8th grade. I work as a programmer. Just yesterday I spent an entire workday to get a few lines of PowerShell to work - I had no tools and hadn't worked with it before. Really, programming is completely about you and your intimate relationship with... you. It's like performing surgery on yourself *every day*. You will get there after a while. The question is: can you walk away now?" CreationDate="2023-01-27T11:43:10.870" UserId="5349" />
  <row Id="20926" PostId="7610" Score="5" Text="I'll add that CS is a lot more than programming. Learning a lot of languages may be a distraction." CreationDate="2023-01-20T16:48:03.830" UserId="1293" />
  <row Id="20927" PostId="7610" Score="2" Text="thank you. I'm grateful for your reply." CreationDate="2023-01-21T02:48:04.490" UserId="12962" />
  <row Id="20934" PostId="7610" Score="0" Text="@4c2divbetween This answer is good. You mentioned JavaScript and React. I haven't used those much, but read the history of how they have evolved. It's a mess! Roundabout way to run away from the monsters only to run smack in to them again! Stupid. We were better off with plain old C. The constructs you mentioned were a way to reintroduce 'state' after trying for 2 decades to deny what a computer program IS. Try learning something more direct and procedural for a while. In 9th grade I wrote Basic programs to draw shapes on the screen. Get the fundamentals down and *then* try to hide from them." CreationDate="2023-01-27T11:52:13.253" UserId="5349" />
  <row Id="20932" PostId="7611" Score="0" Text="Thanks! I will also check it out. Do you happen to know any new reference book within 10 years ?" CreationDate="2023-01-27T06:05:02.100" UserId="12670" />
  <row Id="20936" PostId="7611" Score="1" Text="@NerdyGirl, as a practising programmer, I would not recommend a textbook on UML, unless it's as a prelude to burning them on a bonfire. As Ambler says in the book introduction, &quot;a lot of the communicative value in a UML diagram, is still due to the layout skill of the modeller&quot;. I would be even more emphatic, and say that *all* the communicative value of diagrams arise from their non-systematic aspects and the skill of the diagrammer, which is rather contrary to the basic tenet of UML." CreationDate="2023-01-28T13:09:53.017" UserId="9075" />
  <row Id="21313" PostId="7611" Score="0" Text="Regarding UML, you may refer to this discussion https://cseducators.stackexchange.com/questions/6862/how-necessary-is-uml-for-a-course-in-object-programming-patterns" CreationDate="2023-06-28T05:21:53.567" UserId="9884" />
  <row Id="20928" PostId="7613" Score="0" Text="This is a really clever approach! I'm going to try it with my kid, but I'm also going to try it with my students.  The &quot;how to count&quot; part has always been a bit hand-wavy at the beginning of my binary unit.  I kinda show them and hope that they catch the pattern.  This is a much clearer approach." CreationDate="2023-01-25T14:57:36.357" UserId="27" />
  <row Id="20977" PostId="7616" Score="0" Text="Why do you want to teach notations for which you have no use yourself (in the course)? Teaching $O$ is sufficient to get the students familiar with asymptotic analysis. Teaching them the details of obscure notation they likely won't ever see again is a waste of time. Perhaps you could mention that $o$ and $\omega$ exist and briefly mention that they are similar to $O$ and $\Omega$ but behave more like $&lt;$ instead of like $\leq$. That way students are aware of the existence and know where to look should they encounter the notations in the future." CreationDate="2023-02-13T10:02:25.147" UserId="700" />
  <row Id="20979" PostId="7616" Score="0" Text="@TomvanderZanden: Yes, what I ended up doing with o and ω was precisely that, a very brief discussion." CreationDate="2023-02-13T18:45:09.150" UserId="1366" />
  <row Id="20940" PostId="7617" Score="0" Text="Thanks for the answer. I'm trying to find a practical use for little-o and little-omega that are easy for students to understand. Big-Theta I think I am able to explain as something very useful, and Big-O and Big-Omega as steps on the way to Big-Theta. But it seems to me that the &quot;little ones&quot; are much less intuitively or directly useful." CreationDate="2023-02-06T10:52:06.627" UserId="1366" />
  <row Id="20981" PostId="7618" Score="0" Text="Define what it requires to be a good user. When you've defined it, notice that you also have created a todo list on what to learn." CreationDate="2023-02-14T04:10:37.550" UserId="2164" />
  <row Id="20982" PostId="7618" Score="0" Text="It is unclear why you're mentioning Python and R. What is your intention with Calc? Given the mentions of Python and R, I infer you're not just trying to put some data in a tabular format." CreationDate="2023-02-14T04:11:38.170" UserId="2164" />
  <row Id="20948" PostId="7621" Score="3" Text="Do you have an example of the type of problem that you're having difficulty with?" CreationDate="2023-02-08T17:57:43.067" UserId="1407" />
  <row Id="20951" PostId="7621" Score="0" Text="eg: convert ROMAN to INTEGER. eg: code to update the snake after it collides with food.@user3067860" CreationDate="2023-02-09T08:56:46.533" UserId="12544" />
  <row Id="20952" PostId="7621" Score="2" Text="How do you get to Carnegie Hall?" CreationDate="2023-02-10T01:08:24.107" UserId="5349" />
  <row Id="20974" PostId="7621" Score="0" Text="Do you mean arabic (roman numbers are already integers)?" CreationDate="2023-02-12T22:48:03.443" UserId="204" />
  <row Id="20976" PostId="7621" Score="0" Text="yup @ctrl-alt-delor" CreationDate="2023-02-13T04:55:47.477" UserId="12544" />
  <row Id="20992" PostId="7621" Score="0" Text="[How to Solve It](https://en.wikipedia.org/wiki/How_to_Solve_It) has a catalog of problem solving techniques and discusses meta-problem solving heuristics like persistence, etc." CreationDate="2023-02-22T16:43:06.987" UserId="9426" />
  <row Id="20943" PostId="7623" Score="0" Text="Funny you should say that because I just re-read this book a month ago and asked a question here https://skeptics.stackexchange.com/questions/54327/did-bertrand-russell-spend-360-pages-in-principia-mathematica-to-prove-1-1-2" CreationDate="2023-02-08T09:37:19.713" UserId="9884" />
  <row Id="20944" PostId="7623" Score="0" Text="I first read this book in 2011 according to my Goodreads record. lol" CreationDate="2023-02-08T09:46:06.317" UserId="9884" />
  <row Id="20947" PostId="7624" Score="2" Text="Actually, for production quality code, readability is not the most important quality. It serves other needs such as security and correctness but isn't an end in itself. And even optimization/efficiency may be an overriding goal in some cases." CreationDate="2023-02-08T14:24:39.773" UserId="1293" />
  <row Id="20950" PostId="7624" Score="1" Text="Elon Musk actually said it best when interviewed about Space X. The hardest thing that an engineer needs to learn to do is REMOVING STEPS. One of the worst thing we do is automate something that shouldn't exist. The most difficult software development task is DELETING CODE. This entire answer is about engineering (creating) code, not deleting any of it :D" CreationDate="2023-02-09T04:56:25.657" UserId="1285" />
  <row Id="20954" PostId="7624" Score="0" Text="You just need to keep in mind that 9 times out of 10, you are the &quot;other fellow&quot; who ends up reading your code. Also, it is not your code." CreationDate="2023-02-10T01:21:43.633" UserId="5349" />
  <row Id="20973" PostId="7624" Score="0" Text="@buffy readability is the most important, because (as you said) it serves the other needs. I have never been able to (or seen other able to) achieve the others without making the code readable first. Sometimes (and I mean only sometimes), there will be small (and I mean small) bits of hard to read code, to serve the other needs. However, these should be encapsulated." CreationDate="2023-02-12T22:45:58.853" UserId="204" />
  <row Id="20953" PostId="7625" Score="0" Text="Basically, subroutines make it easy to write programs, and IF statements make it *useful* to write programs. Without IF, you just have a machine, not a computer. But pointers... make programs programmable." CreationDate="2023-02-10T01:18:17.227" UserId="5349" />
  <row Id="20957" PostId="7628" Score="0" Text="These problems are new to the OP, which is what matters." CreationDate="2023-02-11T05:35:59.150" UserId="13049" />
  <row Id="20958" PostId="7628" Score="0" Text="@Vectornaut Which is why I put &quot;new&quot; in quotes and added a wink. But there *is* some relevance to the fact that the problems are not &quot;culturally new&quot;: Unknown problems that nobody has seen before (say, quantum theory or general relativity) may need new approaches, a new mindset. Culturally deeply embedded problems like Roman numerals, by contrast, have been understood for millennia by the average Western mind. It's only about *formalizing* them." CreationDate="2023-02-11T09:48:29.437" UserId="1675" />
  <row Id="21104" PostId="7630" Score="0" Text="My first introduction to AI since university was that I wanted to run GPT-2, and understand how it worked, so I went to the GPT-2 paper, and followed chains of citations backwards until I got to papers I could understand. That was a learning experience for the power of citations :) as for hardware, it probably depends which one you have" CreationDate="2023-05-05T03:46:02.943" UserId="1275" />
  <row Id="20959" PostId="7632" Score="0" Text="I came here to post the exact same answer! It's an excellent grounding in how things actually work." CreationDate="2023-02-11T10:15:02.923" UserId="1559" />
  <row Id="20960" PostId="7632" Score="0" Text="I discussed with ggorlen about the book, maybe you can check our discussion in his answer." CreationDate="2023-02-11T11:42:43.467" UserId="9884" />
  <row Id="20961" PostId="7632" Score="1" Text="Hi do you think it is important that high school students know what  a Digital Circuit is ?" CreationDate="2023-02-12T04:46:15.637" UserId="9884" />
  <row Id="20962" PostId="7632" Score="0" Text="@Qiulang邱朗 It's the foundation of integrated circuits, and getting an idea of it helps with studying computers." CreationDate="2023-02-12T04:58:23.883" UserId="6186" />
  <row Id="20978" PostId="7637" Score="2" Text="This is specific enough that I bet it doesn't exist, but also such a cool idea that if it did exist, I would start using it immediately." CreationDate="2023-02-13T15:57:19.763" UserId="27" />
  <row Id="20983" PostId="7640" Score="1" Text="I wish it had an open-hand option. The 52 card drags and turnovers at the start are a *drag* (ba-dum CH!)" CreationDate="2023-02-14T15:39:42.010" UserId="27" />
  <row Id="20988" PostId="7642" Score="3" Text="This looks like an assignment for a course. Yes?" CreationDate="2023-02-18T20:08:29.797" UserId="1293" />
  <row Id="20993" PostId="7643" Score="1" Text="I just wanted to comment that as far as I know, cryptanalysis (which you mentioned above) has pretty much nothing to do with system security, other than that it's sometimes possible to exploit the use of very weak ciphers (without usually needing to know much about them). So, generally speaking, I would exclude cryptanalysis from your list of topics." CreationDate="2023-02-22T18:22:36.740" UserId="2119" />
  <row Id="20989" PostId="7644" Score="0" Text="CTF: https://en.wikipedia.org/wiki/Capture_the_flag_(cybersecurity)" CreationDate="2023-02-20T14:59:39.590" UserId="1293" />
  <row Id="20990" PostId="7644" Score="0" Text="Sure I will check out ctfs for sure!" CreationDate="2023-02-20T15:10:13.377" UserId="13045" />
  <row Id="20991" PostId="7645" Score="1" Text="Good arguments. (And I still disagree.) I guess it partly depends on what sort of material you are teaching. For my own courses I find it very hard to come up with many good exercises. I can make totally-made-up-exercsie-for-the-sake-of-exercise problems, I have some exercises that bear some relation to reality, and the next step up is embedding the material in some humongous real context that will be impssible to explain in finite time." CreationDate="2023-02-22T14:08:06.533" UserId="6346" />
  <row Id="20994" PostId="7645" Score="1" Text="I agree with @VictorEijkhout that it really must depend on what you're teaching. Some topics are a LOT harder than others when it comes to generating reasonable problems." CreationDate="2023-02-22T20:27:26.040" UserId="27" />
  <row Id="21103" PostId="7647" Score="0" Text="You should be able to run these on Linux, you just need an exploitable program. Any good hacking challenge should include some buggy programs for you to hack :) Notice you are learning the techniques, not how they apply to an OS - necessarily, because if the OS had them long enough for them to get into a book, the OS is crap." CreationDate="2023-05-05T03:44:29.370" UserId="1275" />
  <row Id="21018" PostId="7650" Score="0" Text="&quot;Graphics&quot; feels rather broad. What sort of graphics? How important is performance? JS doesn't seem very text-oriented to me, considering it has the best native support for visuals (i.e. the web browser) I've ever seen. D3 is great for data viz but if you want to efficiently crunch matrices to solve PE problems, JS is not particularly suited to heavy math. Could you provide more details about what nest simulations and slime moulds entail? Are those visual? Thanks and good luck on your programming projects." CreationDate="2023-03-15T05:32:17.043" UserId="9426" />
  <row Id="21102" PostId="7650" Score="0" Text="I think the majority of languages are text-focused due to their history, some are more numeric-focused but I don't know of a graphics-focused one" CreationDate="2023-05-05T03:43:48.907" UserId="1275" />
  <row Id="21012" PostId="7658" Score="0" Text="Thanks for the suggestion! I couldn't find information about spin's CLI though, do you have any pointers?" CreationDate="2023-03-08T02:50:39.927" UserId="13135" />
  <row Id="21013" PostId="7658" Score="2" Text="Try `spin --help` or if you have not installed it yet, check https://spinroot.com/spin/Man/Spin.html ." CreationDate="2023-03-08T07:21:30.097" UserId="13024" />
  <row Id="21020" PostId="7663" Score="0" Text="I was, just the other day, wondering what the deal is with linked lists. Why would we use them now that we have invented trees, and hash trees. But reading this, I am now seeing them everywhere. They are just a special case of a directed graph." CreationDate="2023-03-24T21:36:43.587" UserId="204" />
  <row Id="21021" PostId="7663" Score="0" Text="@ctrl-alt-delor A _very_ directed graph at that. A single option for leaving each node and a single path to any node. Always moving forward. A tree with no branches." CreationDate="2023-03-25T10:49:02.003" UserId="104" />
  <row Id="21022" PostId="7663" Score="0" Text="@ctrl-alt-delor &quot;They are just a special case of a directed graph.&quot; Exactly. As are trees!" CreationDate="2023-03-25T11:11:18.883" UserId="27" />
  <row Id="21037" PostId="7667" Score="0" Text="I alway use **path**, as I asked here https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i" CreationDate="2023-03-31T09:09:02.700" UserId="9884" />
  <row Id="21031" PostId="7668" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/144945/discussion-on-answer-by-ben-i-what-is-an-example-of-class-inheritance-in-every); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2023-03-29T13:59:32.113" UserId="27" />
  <row Id="21038" PostId="7669" Score="0" Text="His question is basically the same as mine, so maybe you can provide an answer for that one too (thanks in advance!)  https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i" CreationDate="2023-03-31T09:14:33.393" UserId="9884" />
  <row Id="21040" PostId="7669" Score="0" Text="@Qiulang邱朗 thanks for the response--yes, there are similarities, but I think they're separate questions. Your definition of &quot;real world&quot; is &quot;used in a serious programming project&quot; whereas this poster means &quot;something from everyday life&quot;. I think both are potentially problematic so I stick to my answer. Different approaches but same problem--students probably don't care about paths or Python implementation details yet. It's too far away from the sort of fun apps they want to build. If I had to choose, though, I'd take that over the &quot;car/animal&quot;-type examples, although it depends on audience." CreationDate="2023-03-31T13:25:41.673" UserId="9426" />
  <row Id="21041" PostId="7669" Score="1" Text="Also, I've heard that [young people tend not to understand how filesystems work](https://futurism.com/the-byte/gen-z-kids-file-systems), so given the dominance of phones, it's possible that the Python path example will be lost on many students. That can't happen with comments or users which are closer to the user space than the developer space." CreationDate="2023-03-31T13:26:31.887" UserId="9426" />
  <row Id="21135" PostId="7669" Score="0" Text="@ggorlen My statement, &quot;I think that when dealing with new students the principle of inheritance is best explained with analogies to life outside of writing code&quot; was overly opinionated. It might be best to pretend that a student asked, &quot;In something other than python or java-script or code, what real-world thing behaves is sort of like class inheritance?&quot;" CreationDate="2023-05-25T21:43:24.097" UserId="9253" />
  <row Id="21136" PostId="7669" Score="0" Text="@ggorlen when dealing with ***new*** students learning German, if you define German words in terms of other German words, you will be unable to teach much of the German language to the student. Why not teach German by explaining German vocabulary in terms of something outside of the German language. `Haus: ein Ort zum Schlafen, Essen, Baden und zum Aufbewahren von Hab und Gut` If you do not understand any of the words used to define the word **Haus** you won't learn German. Likewise, you cannot learn python from python or java-script from java-script." CreationDate="2023-05-25T21:43:30.630" UserId="9253" />
  <row Id="21138" PostId="7669" Score="0" Text="@SamuelMuldoon your example isn't a fair comparison, because when you use English to teach German and you describe &quot;haus&quot; in terms of &quot;house&quot;, the concept is equally important in both languages and the practicality is obvious. In programming, when you teach OOP with &quot;Cup&quot; and &quot;PlasticCup&quot;, those concepts will _never_ appear in an actual app and just serve to create confusion. A better metaphor is trying to teach German with words that are never actually used in German or have no practical value when speaking or writing it." CreationDate="2023-05-25T21:55:49.923" UserId="9426" />
  <row Id="21139" PostId="7669" Score="0" Text="Also, &quot;English to German&quot; and &quot;English to Programming&quot; are apples and oranges. In the former case, both English and German are natural languages, whereas in the second, English is a natural language and programming is a rigid, artificial language used to give instructions to computers, refers to a completely different conceptual world, and has different purpose and syntax. So the benefits of 1:1 translations from English (or general real-world concepts) to programming is not guaranteed. Luckily, &quot;comment threads&quot; are perfectly understandable and real-world, yet have value in computing." CreationDate="2023-05-25T21:57:44.937" UserId="9426" />
  <row Id="21140" PostId="7669" Score="0" Text="If a student insists on a real-world example, I'd ask why they need a real-world example to dig deeper. Maybe they're afraid of embracing programming/computing for what it is. I might try to encourage them to move towards the programmatic concept rather than away from it. But I haven't encountered students for whom inheritance can't be explained by a `Moderator` as a special type of `User` that has most of the same characteristics, plus some additional abilities. If they _really must have physical objects_, I might use blocks and shapes. Apologies for the lengthy reply!" CreationDate="2023-05-25T22:07:50.523" UserId="9426" />
  <row Id="21032" PostId="7671" Score="0" Text="I am aware that python uses duck typing, but I am confused why you wrote something like, &quot;Python (it is a duck)&quot;. The Python programming language uses duck typing, but python itself is not a duck-type. An example of duck typing would be a class object which emulates the `list` class by defining all of the following attributes: `append`, `clear`,  `copy`, `count`,  `extend`, `index`, `insert`, `pop`, `remove`, `reverse`, `sort`" CreationDate="2023-03-29T23:22:57.193" UserId="9253" />
  <row Id="21047" PostId="7671" Score="0" Text="@SamuelMuldoon I did not mean to be that literal." CreationDate="2023-04-04T10:08:21.567" UserId="204" />
  <row Id="21137" PostId="7671" Score="0" Text="I agree that real-world examples are useful before students get into writing syntactically worry code in order to explain the idea of inheritance. The question is, what is a specific example of a real-world example? Maybe `souring powder` and `light-bulbs` inherit from inedible items? I am not sure that is an example students would find interesting." CreationDate="2023-05-25T21:48:08.810" UserId="9253" />
  <row Id="21152" PostId="7671" Score="0" Text="@SamuelMuldoon python can quack, so it is a duck (according to duck-typing)." CreationDate="2023-05-27T12:07:12.190" UserId="204" />
  <row Id="21153" PostId="7671" Score="0" Text="@SamuelMuldoon a class does not implement the set of things that are not in another set. E.g. you can't make a class `not edible`. You could, but what methods would it have? `don't eat`?" CreationDate="2023-05-27T12:09:46.177" UserId="204" />
  <row Id="21154" PostId="7671" Score="0" Text="`souring powder` is that `saw dust`, the dust that comes from sawing wood. That is `edible`, they put it on some `edible` products. What it is not is `food`." CreationDate="2023-05-27T12:12:07.133" UserId="204" />
  <row Id="21039" PostId="7672" Score="1" Text="I have a similar question you may take a look https://cseducators.stackexchange.com/questions/7536/book-recommendation-for-high-school-students-who-will-major-in-cs" CreationDate="2023-03-31T09:34:20.840" UserId="9884" />
  <row Id="21059" PostId="7672" Score="1" Text="*&quot;how does software and programming work&quot;* - in my experience, quality textbooks in this area do not exist, and if they did they would probably go under a guise different from and more general than &quot;software&quot; or even &quot;computer science&quot;, as the general concept of &quot;programs&quot; existed before computers." CreationDate="2023-04-10T09:23:52.753" UserId="9075" />
  <row Id="21033" PostId="7673" Score="2" Text="I'm afraid I'm confused by the question - are you teaching CS students?  Or is this general education?  And what is the age range of the students?" CreationDate="2023-03-30T19:12:38.987" UserId="27" />
  <row Id="21035" PostId="7673" Score="0" Text="Wait, are you trying to train the LLM, and you're asking what should be in it?" CreationDate="2023-03-31T00:51:44.917" UserId="27" />
  <row Id="21036" PostId="7673" Score="0" Text="Yes. To embed the knowledge into a LLM. @BenI." CreationDate="2023-03-31T05:59:15.270" UserId="12575" />
  <row Id="21042" PostId="7674" Score="4" Text="If there was a single best way, everyone would just do that. Instead of looking for a silver bullet that doesn't exist, perhaps describe what you're stuck on, specifically, and the goals you want to achieve." CreationDate="2023-04-01T03:39:38.920" UserId="9426" />
  <row Id="21043" PostId="7674" Score="0" Text="@ggorlen : stuck in concepts which i don't know! whenever i look for some code; lots of time there are some concepts which i don't know. and 2nd is i forget lots of concepts." CreationDate="2023-04-01T07:07:20.013" UserId="11579" />
  <row Id="21045" PostId="7674" Score="4" Text="Thanks. What are some of those concepts you're stuck on?" CreationDate="2023-04-01T16:22:57.827" UserId="9426" />
  <row Id="21046" PostId="7674" Score="0" Text="@ggorlen: oop and also some basic stuff like i know how to code but not on rust standard wise" CreationDate="2023-04-03T05:10:47.703" UserId="11579" />
  <row Id="21050" PostId="7674" Score="0" Text="Rust is not Object-Oriented, in the way most people define Object-Oriented. However, most people's definition does not meet that of Alen Key's original usage. Rust has modules for encapsulation, it has structures, it has interfaces (`traits`), etc." CreationDate="2023-04-04T10:31:59.227" UserId="204" />
  <row Id="21051" PostId="7674" Score="1" Text="I fixed some grammar to make the question more readable, and less ambiguous. Please proofread, and correct, if I changed any meaning. However, It is hard to see what your goals are, or to see what you are stuck on. Edit the question to make this more clear." CreationDate="2023-04-04T10:32:46.220" UserId="204" />
  <row Id="21053" PostId="7674" Score="1" Text="Before one can recommend the best way, one must be sure how to measure the goodness of learning methods. After that there might be a criterion to choose the best one." CreationDate="2023-04-05T08:19:04.920" UserId="5145" />
  <row Id="21130" PostId="7674" Score="0" Text="Tell us your experience, age, and goals. Update the question to tell us these, and to address other comments." CreationDate="2023-05-21T08:49:14.850" UserId="204" />
  <row Id="21052" PostId="7675" Score="4" Text="i got 2 college degrees in software engineering and i still Google every 15 min while programming." CreationDate="2023-04-05T07:01:23.310" UserId="8867" />
  <row Id="21054" PostId="7675" Score="1" Text="Why are you making it an either/or choice? What about _3. All of the above_?" CreationDate="2023-04-07T12:54:41.277" UserId="9454" />
  <row Id="21107" PostId="7675" Score="3" Text="The silent assumption here is that there is some universal measure of superiority which is (a) discernible and (b) definitively provable. There isn't." CreationDate="2023-05-10T00:00:52.973" UserId="2164" />
  <row Id="21129" PostId="7677" Score="1" Text="Computer science is not a science. Money is not a good motivator." CreationDate="2023-05-21T08:47:18.140" UserId="204" />
  <row Id="21056" PostId="7678" Score="1" Text="I fail to see how this question fits into this forum." CreationDate="2023-04-09T08:02:16.623" UserId="13024" />
  <row Id="21057" PostId="7678" Score="0" Text="Where else I should post it then? @Kai" CreationDate="2023-04-09T18:21:20.140" UserId="8470" />
  <row Id="21058" PostId="7678" Score="1" Text="@EradAli this is mostly a forum for computer science educators to ask questions of other computer science educators. To be honest, your question isn't what stack exchange was designed for. SE centers around questions that have a right answer. You might do better on Quora or Reddit. (Though tbh you might want to write a few more sentences about what you think *might* be on that list if you want to be well received in any of those forums.)" CreationDate="2023-04-09T19:32:28.290" UserId="27" />
  <row Id="21055" PostId="7679" Score="4" Text="More details about your specific situation would be nice to keep answers relevant for you. What language(s) are you working with? Are you looking for low-level C type stuff or high-level JS/socket.io material? What level are your students at? What curriculum context is this being taught in? Thanks." CreationDate="2023-04-08T05:10:13.120" UserId="9426" />
  <row Id="21060" PostId="7679" Score="0" Text="I have elementary programming skills in Python. I wanted to write a program that communicated and exchanged data with another program on another machine to make a bit more concrete my rather theoretical knowledge of TCP/IP. I used a guide like: https://realpython.com/python-sockets/ to send a string from on machine to another. The program worked. I learned a lot about program-to-program communication from such a simple program." CreationDate="2023-04-11T16:45:13.870" UserId="8155" />
  <row Id="21061" PostId="7679" Score="2" Text="Isn't this too advanced for highschooler ?" CreationDate="2023-04-14T10:21:41.093" UserId="9884" />
  <row Id="21101" PostId="7680" Score="0" Text="is it good to teach the OSI model if it has zero practical relevance to the actual tasks? I feel like this kind of thing confuses people. If the goal is to learn socket programming you don't need OSI just like you don't teach cache hierarchy in an introductory C programming course" CreationDate="2023-05-05T03:20:18.163" UserId="1275" />
  <row Id="21066" PostId="7681" Score="3" Text="Having a reasonable idea of the breadth and depth of material covered in the course would surely help in developing projects. My presumption being that, as it is in lieu of a final exam, the purpose of the project is for the students to demonstrate their understanding of the course objectives, and for you to evaluate how well they have apprehended the material as well as their ability to apply that information to a practical, or semi-practical, solution." CreationDate="2023-04-19T19:10:00.197" UserId="104" />
  <row Id="21080" PostId="7686" Score="0" Text="Can you elaborate a bit on &quot;quite a problem in python&quot;? And a link to the youtube series (maybe in your user page) please! Personal opinion: Pythons coroutine/async model is a disaster. Golang is an ideal fit to the model. And unlike C hi level. C# no experience for this" CreationDate="2023-04-29T03:15:52.003" UserId="8837" />
  <row Id="21081" PostId="7686" Score="1" Text="I guess it's this https://youtube.com/@BrianTompsett? I am asking because I'm working on documenting how python, seemingly neat for CS1, scales up very poorly for more advanced CS studies." CreationDate="2023-04-29T03:21:04.710" UserId="8837" />
  <row Id="21082" PostId="7686" Score="0" Text="@Rusi Yes you have the correct one of my Channels. Elaborating on the issues with Python is beyond this question, so not appropriate here; however it is easy  to get a Python socket program deadlocked in an uninterruptible wait state which is confusing for novices and students alike. I had to write special methods for  my students so they could cope whereas C# works out of the box." CreationDate="2023-04-29T08:01:36.913" UserId="694" />
  <row Id="21083" PostId="7686" Score="0" Text="I've put a comment in the chatroom. Can you see it?" CreationDate="2023-04-29T08:08:00.937" UserId="8837" />
  <row Id="21117" PostId="7689" Score="0" Text="But it is in in maintenance-only mode,  check here https://openjsf.org/blog/2021/10/07/jquery-maintainers-update-and-transition-jquery-ui/  So not sure if that is a good idea." CreationDate="2023-05-16T03:48:11.180" UserId="9884" />
  <row Id="21118" PostId="7689" Score="0" Text="@Qiulang邱朗 Interesting! Even so, I don't think that negates its value for students trying to wrap their heads around jQuery for the first time. It's still a very useful resource." CreationDate="2023-05-16T08:10:35.433" UserId="27" />
  <row Id="21119" PostId="7689" Score="0" Text="But you may further check my answer for &quot;that negates its value for students trying to wrap their heads around jQuery for the first time.&quot;" CreationDate="2023-05-16T09:26:44.907" UserId="9884" />
  <row Id="21120" PostId="7689" Score="0" Text="@Qiulang邱朗 Interesting articles! I'm not enough into the webdev space to comment on whether their journey negates the value of jQuery entirely. I answered the question as asked, but you may we'll be right." CreationDate="2023-05-16T10:45:44.757" UserId="27" />
  <row Id="21078" PostId="7690" Score="6" Text="I'm a bit confused by the purpose of this question. Why make such a list? Can you edit it to add context as to why it is a question about teaching?" CreationDate="2023-04-26T10:43:47.637" UserId="27" />
  <row Id="21105" PostId="7691" Score="1" Text="`0xfadebeep-8` is not a decimal." CreationDate="2023-05-05T11:26:06.583" UserId="945" />
  <row Id="21084" PostId="7694" Score="16" Text="Be careful with your language. There is no &quot;dog object&quot;. There is a variable (of type Dog) that points to a Puppy object. I also think dogs and puppies may not be the best example of inheritance." CreationDate="2023-05-03T17:38:46.473" UserId="3496" />
  <row Id="21085" PostId="7694" Score="1" Text="@corvus_192 if a Puppy &quot;is a&quot; Dog, then this is perfectly idiomatic polymorphic inheritance." CreationDate="2023-05-04T00:27:58.723" UserId="13310" />
  <row Id="21089" PostId="7694" Score="2" Text="There is also nowhere a &quot;parent class pointing to a child class&quot; in here. This is a *variable* typed as the superclass that points to a subclass." CreationDate="2023-05-04T14:06:23.100" UserId="11490" />
  <row Id="21090" PostId="7694" Score="5" Text="The apparent confusion between classes, objects, and variables is concerning.  It's going to make it a lot harder for your students to understand such ideas if you use these very specific and fundamentally different terms interchangeably." CreationDate="2023-05-04T16:40:15.417" UserId="2087" />
  <row Id="21109" PostId="7694" Score="0" Text="The example code is prone to immediate misunderstanding. A puppy is a dog, but its puppy-ness is decided by its age, not an intrinsic quality of the creature itself. At some point a puppy ceases to be a puppy but remains to be a dog. There is no language concept that accounts for this. As the educator, you are responsible for your examples being correct (if simplistic) representations of what you're trying to teach, and I believe you set yourself up for failure with this example. You're also mixing your topics between overriding methods and using polymorphism, which are distinct concepts." CreationDate="2023-05-10T00:35:28.690" UserId="2164" />
  <row Id="21092" PostId="7696" Score="0" Text="I think it's worth showing how you can assign this to various less-specific types including `Object` and then show that they all produce the same `toString()` output, and are the same instance using both `equals()` and `==`," CreationDate="2023-05-04T16:53:30.283" UserId="2087" />
  <row Id="21093" PostId="7696" Score="0" Text="&quot;upcasting is typically automatic, as a side-effect of data structures or methods that store or utilize a parent type&quot; In Java (for Object types) casting is nothing more than a check that the types are compatible.  Since there's no way for an upcast of this kind to fail (aside from some weird classloader esoterica) I think it's better to think of it as a no-op, than 'automatic'." CreationDate="2023-05-04T17:09:14.150" UserId="2087" />
  <row Id="21099" PostId="7697" Score="0" Text="this is a bad design for a real system, by the way, but okay for a first attempt" CreationDate="2023-05-05T02:30:14.117" UserId="1275" />
  <row Id="21091" PostId="7700" Score="0" Text="&quot;In Python you create &quot;interfaces&quot; as classes in which the methods have empty bodies&quot; Who does this and why?  For example, I've never seen a ['sequence'](https://docs.python.org/3/library/stdtypes.html#typesseq) type defined anywhere." CreationDate="2023-05-04T16:46:59.370" UserId="2087" />
  <row Id="21094" PostId="7700" Score="1" Text="Actually, I do this as an organizing principle. It is useful in programs with objects that are similar and need the same protocols for access. There are other options than empty bodies. You can throw an exception which guards against missing an implementation." CreationDate="2023-05-04T17:45:44.910" UserId="1293" />
  <row Id="21095" PostId="7700" Score="0" Text="My bad.  There is a sequence type [here](https://docs.python.org/3/library/collections.abc.html#collections.abc.Sequence).  Not exactly what you are describing but you could use these 'empty' types for [structural type checking](https://peps.python.org/pep-0544/), I suppose.  I don't use type hints for static checking so I learned something new and found some good reading [material](https://peps.python.org/pep-0483/)." CreationDate="2023-05-04T17:49:41.650" UserId="2087" />
  <row Id="21097" PostId="7706" Score="0" Text="isn't this really the same case OP provided in the original post?" CreationDate="2023-05-05T01:09:09.730" UserId="13299" />
  <row Id="21098" PostId="7706" Score="2" Text="@rss81 You are the OP. Why are you referring to yourself in the third person? I don't understand this question; should it not be the same case? I think it should (and is), otherwise it's not answering the original question very well. And I think it's one of the better answers, actually. It's one of only 3 (so far) that actually answer it." CreationDate="2023-05-05T01:33:19.100" UserId="13315" />
  <row Id="21106" PostId="7712" Score="2" Text="I have no answer, but the police won't get involved. Academic dishonesty may potentially be a civil matter, but it has essentially no way to rise to a criminal one, and there is also no safety issue. Add in jurisdictional issues with the internet, and police absolutely won't insert themselves." CreationDate="2023-05-09T11:02:16.870" UserId="27" />
  <row Id="21108" PostId="7712" Score="2" Text="I'm not sure what else there is to this question that does not simply refer back to the age-old question of teachers trying to identify cheating by students. The notion that you think the police will get involved with this suggest to me that you're looking at this problem from an unproductive angle - do you think a school teacher should call the police when they catch a student cheating on a test? It seems to me that before you can tackle the problem, it would help to outline the problem space. What are you trying to catch, what are the reasonable boundaries of your authority?" CreationDate="2023-05-10T00:31:07.843" UserId="2164" />
  <row Id="21110" PostId="7712" Score="0" Text="@Flater I think you misunderstood. I was wondering if some people are selling &quot;exercise solution services&quot; on a regular basis as a side hussle (or maybe it's lucrative enough to be a main hussle). In such case I think there is a chance it could be a police matter." CreationDate="2023-05-10T07:28:18.800" UserId="13171" />
  <row Id="21111" PostId="7712" Score="0" Text="@traveh I've never heard of academic dishonesty being escalated to a police matter. Yes, many people sell solutions--it's rampant on freelance platforms. The police probably have far more serious issues to tackle. What law would they be breaking, and do you have any evidence of police involvement in academic cheating?" CreationDate="2023-05-10T15:23:51.280" UserId="9426" />
  <row Id="21112" PostId="7712" Score="0" Text="@ggorlen you are probably right. I was just fishing for ideas." CreationDate="2023-05-10T19:26:16.350" UserId="13171" />
  <row Id="21113" PostId="7712" Score="0" Text="@traveh: And in what way do you think this is different from people doing other people's homework, which predates the internet by centuries if not millennia? Again, there is nothing here that warrants the involvement of police. I'm interested to hear what law would be being broken." CreationDate="2023-05-10T23:17:58.500" UserId="2164" />
  <row Id="21114" PostId="7717" Score="0" Text="Welcome to the fun. Darn good question, for your case and for Copilot in general. I'll await the answers nearly as eagerly as you." CreationDate="2023-05-13T13:07:02.200" UserId="104" />
  <row Id="21115" PostId="7717" Score="0" Text="Eventually it'll probably wind up used in some training, but likely not during the semester you've deployed it in, and even if it is doesn't mean it'll be regurgitated verbatim. A bit of an aside: I'm surprised there hasn't been more discussion of the implications of LLMs on CSE.se. Isn't it the biggest game-changer to hit CS education in... decades?" CreationDate="2023-05-14T22:26:45.443" UserId="9426" />
  <row Id="21116" PostId="7717" Score="0" Text="@ggorlen that is very true. It's a game changer on every subject but probably most of all on cs. For now though i think it's still producing enough garbage output that is manageable from educational perspective IMO but the question is how long that will last. However I think this is perhaps more of a reddit type discussion." CreationDate="2023-05-15T05:37:09.170" UserId="13171" />
  <row Id="21123" PostId="7719" Score="0" Text="Thanks for your input. It's not my decision to use jQuery. That belongs to the higher-ups. Nevertheless, I'll check out those links, and if I can put together a good argument for going away from jQuery I'll present it to the higher-ups and see if I can get buy in." CreationDate="2023-05-18T15:41:54.213" UserId="13268" />
  <row Id="21121" PostId="7720" Score="1" Text="Re, &quot;...expected to follow the design exactly.&quot; I've heard various opinions throughout my career about what is, and what is not, &quot;design.&quot; But, I've never heard of a design that could be tested. AFAIK, the thing that can be tested is an _implementation,_ and the purpose of the test is to prove whether or not the implementation satisfies specific _requirements._" CreationDate="2023-05-16T22:52:11.243" UserId="1269" />
  <row Id="21122" PostId="7720" Score="0" Text="Is there a reason not to simply give them the test file as part of a C# project? If you're concerned they'll &quot;know too much&quot;, could you give them a simpler set of sample tests, then ask them to write their own tests to cover edge cases? You can run the submissions on the full test suite for grading with a short script pretty simply, or with a fancier run-on-submit-with-live feedback platform like Gradescope." CreationDate="2023-05-17T05:15:01.670" UserId="9426" />
  <row Id="21300" PostId="7720" Score="0" Text="@SolomonSlow: Semantically, interfaces are designed with a particular behavior in mind. Not the implementation, but what a consumer of the interface will generally expect. This matches OP's question of testing this component's implementation, i.e. does it fulfill the (designed) contract that it was expected to implement?" CreationDate="2023-06-07T05:50:32.660" UserId="2164" />
  <row Id="21301" PostId="7720" Score="0" Text="@ggorlen: Giving students the test cases will open the door to them overfitting their solution to the specific values being tested with. While it's not bad for them to get comfortable with testing somewhere during the curriculum, it is unclear whether that is right now. For the question being posted, the tests are being used as a teacher grading tool rather than a student development tool, and that changes things as to what information you expose to students." CreationDate="2023-06-07T05:51:49.603" UserId="2164" />
  <row Id="21302" PostId="7720" Score="0" Text="@Flater It may not be, but as I suggested, you would give them a small sample harness, not the whole thing. If they don't add their own tests and cover edge cases, they'll be caught by the submission tests. The point is mainly to communicate the basic idea so they aren't left totally adrift having to guess how they're code is used by the submission suite. This is pretty much standard practice." CreationDate="2023-06-07T05:53:47.727" UserId="9426" />
  <row Id="21125" PostId="7724" Score="0" Text="I would call it 'unstructured' but I don't know if there is an accepted name. Recently I wrote some very structured, sequential code that I would describe as 'Fortran', but it wasn't literally." CreationDate="2023-05-19T23:41:44.107" UserId="5349" />
  <row Id="21128" PostId="7724" Score="1" Text="Can you add a (minimal) example?" CreationDate="2023-05-21T08:39:23.030" UserId="204" />
  <row Id="21151" PostId="7724" Score="0" Text="If you give a minimal example, then I may be able to know what you are describing. Then I may be able to answer." CreationDate="2023-05-27T12:05:06.717" UserId="204" />
  <row Id="21127" PostId="7725" Score="2" Text="Nice question. However, is this related to teaching. If so, can you tie it in?" CreationDate="2023-05-21T08:34:43.770" UserId="204" />
  <row Id="21126" PostId="7726" Score="4" Text="A nice post, but got a bit ranty and hard to follow toward the end. It could do with a proof read." CreationDate="2023-05-21T08:33:03.910" UserId="204" />
  <row Id="21131" PostId="7728" Score="0" Text="Thanks for sharing. Do you use any automated grading system for the submissions?" CreationDate="2023-05-22T11:43:41.693" UserId="6410" />
  <row Id="21132" PostId="7728" Score="1" Text="@DrimadesBoy They're console programs, so not really, though I do have both lab writeups and test cases that I wouldn't mind sharing with another instructor if there were a way to reach each other off network." CreationDate="2023-05-22T12:05:06.490" UserId="27" />
  <row Id="21133" PostId="7728" Score="0" Text="I would love to take a look drimades77(at)gmail.com. Thank you!" CreationDate="2023-05-22T17:37:29.340" UserId="6410" />
  <row Id="21396" PostId="7734" Score="1" Text="Now that you've done it, could you add in an answer? I'm dying to know what you did. That would be extremely helpful as a resource for the future." CreationDate="2023-08-19T16:24:11.710" UserId="27" />
  <row Id="21544" PostId="7734" Score="0" Text="We ended up just getting him a tutor through our disability services.  But I am pondering working to get JGRASP accessible somehow.  I've even suggested it as a senior design project." CreationDate="2023-11-27T03:24:44.993" UserId="13401" />
  <row Id="21736" PostId="7734" Score="0" Text="I happen to recall that one of the main authors of [UPPAAL](https://uppaal.org/) is blind. UPPAAL is much more than JFLAP but if you peel away the layers, there's a base of (finite) automata, their diagrammatic display, etc. It might make sense to reach out to the authors and inquire about the best way to handle all that because they sure have found a very good way to do this." CreationDate="2024-03-03T10:36:24.547" UserId="13024" />
  <row Id="21188" PostId="7735" Score="1" Text="Ben - thanks.  That does give me some ideas.  I had not thought of the puffy or 3d vinyl stickers.  That may actually work!  Great ideas.  The builder toy looks interesting too.  But that's definitely what I wanted.  I just needed some ideas, and what you've provided is great." CreationDate="2023-05-30T04:27:30.593" UserId="13401" />
  <row Id="21398" PostId="7735" Score="0" Text="Assuming the student can read Braille, you can use 3d printing to make almost anything. At Colorado State University, students have access to free 3D printing. I used a student to design and print templates to teach assembly language. This was a fun project for the creator and helped the blind student." CreationDate="2023-08-21T23:42:54.387" UserId="4301" />
  <row Id="21291" PostId="7736" Score="1" Text="*&quot;kids of today are computer savvy&quot;* - it's probably more accurate to say they're savvy with mobile phones and web-surfing. There's no more technical knowledge than there ever was." CreationDate="2023-06-05T15:45:37.613" UserId="9075" />
  <row Id="21244" PostId="7737" Score="0" Text="You've asked a variety of &quot;how do I teach X using a real-world example?&quot; questions here. Why are you so sure you need to use so-called &quot;real-world examples&quot; to teach these concepts? Do we need to have a separate thread for collecting lists of &quot;real-world&quot; examples for each and every CS concept? As discussed at length in [this thread](https://cseducators.stackexchange.com/a/7669/9426), I suggest distinguishing &quot;physical world&quot; from &quot;practical computing&quot;. Many physical world examples are not very practical metaphors in computing, even if students are familiar with them IRL." CreationDate="2023-05-31T20:07:16.333" UserId="9426" />
  <row Id="21245" PostId="7737" Score="0" Text="Also, since off-by-one errors generally manifest in loops and arrays, what is your motivation for needing an example outside of this domain, which represents the vast majority of the off-by-one errors students will encounter in programming?" CreationDate="2023-05-31T20:12:51.940" UserId="9426" />
  <row Id="21142" PostId="7739" Score="0" Text="(Know too little about MERN to say anything useful but...) Do you need to dive into MERN and docker at the same time? Clearly for professionals, comtainerized would make deploys easier. But you're not there yet" CreationDate="2023-05-26T06:03:07.590" UserId="8837" />
  <row Id="21143" PostId="7739" Score="0" Text="I'm just talking about MERN in this case. This was just an example." CreationDate="2023-05-26T06:11:21.820" UserId="12544" />
  <row Id="21149" PostId="7739" Score="0" Text="This question is not specific enough to answer. There is not one solution to learning something (except for effort, time, practice, spaced learning, …)." CreationDate="2023-05-27T11:56:54.003" UserId="204" />
  <row Id="21144" PostId="7740" Score="2" Text="The bleeding edge can cause some... well you know... bleeding!! More seriously: thanks for letting me know that 11 is the common choice. To me it's almost axiomatic that jumping at the latest is likely a bad idea. [If I've a choice I prefer teaching with python 2 over 3]" CreationDate="2023-05-26T07:31:19.813" UserId="8837" />
  <row Id="21145" PostId="7740" Score="3" Text="Something i noticed while teaching, is that teachers often don't catch up with what they teach.  So they only teach what they learned themselves in college." CreationDate="2023-05-26T08:56:32.850" UserId="8867" />
  <row Id="21146" PostId="7740" Score="0" Text="I must say I have had some pretty &quot;uncomfortable&quot; experiences on SO in particular, where I would post a good question and most of the responses would be &quot;*just use this... or just use and STL container, and so on*&quot; I understand that due to learning purposes professors tend not to use the STL since, well everyone can google the documentation..." CreationDate="2023-05-26T15:42:36.763" UserId="13406" />
  <row Id="21147" PostId="7740" Score="0" Text="But what strikes me as shocking is the number of times I saw comments like &quot;*This is the Java way of C++ programming*&quot; referring to the `new` keyword. My professor in my Data Structures class was in the industry for 17 years and I genuinely thought she was a great professor, but yeah as you mentioned some professors don't catch up on the material...Apparently, she never worked with C++ since she did front-end dev." CreationDate="2023-05-26T15:46:20.027" UserId="13406" />
  <row Id="21150" PostId="7740" Score="0" Text="The same answer for `11` as for `C`: out of touch, been told to by people that are out of touch. C is not a good teaching language, and has not been a good production language for most cases for years. Now we have `rust` and `go`, it may not be the best for anything." CreationDate="2023-05-27T12:00:06.557" UserId="204" />
  <row Id="21155" PostId="7740" Score="0" Text="I understand why `C++` would be the preferred language to start with (pointers, manual allocation, OOP,...), and transitioning to another language such as `Python` or `JS` might be easier. But why not teach the latest version?" CreationDate="2023-05-27T16:54:35.587" UserId="13406" />
  <row Id="21156" PostId="7740" Score="0" Text="Can you please clarify what feature(s) you believe would significantly help with explaining concepts of programming (like &quot;sorting algorithms and complexity&quot; or &quot;recursion and memoization&quot;). You can start with lists like https://en.cppreference.com/w/cpp/20 to pick some that would help every single student with that." CreationDate="2023-05-27T19:47:13.763" UserId="11495" />
  <row Id="21157" PostId="7740" Score="0" Text="I know the use of `STL` is discouraged due to learning purposes, but here are some I find useful [`std::atomic_ref`](https://en.cppreference.com/w/cpp/atomic/atomic_ref), [`std::unordered_map`](https://en.cppreference.com/w/cpp/container/unordered_map)(`erase_if` and new operators), [`std::span`](https://en.cppreference.com/w/cpp/container/span), [three-way operator](https://devblogs.microsoft.com/oldnewthing/20220516-52/?p=106661#:~:text=The%20C%2B%2B20%20three,equivalent%2C%20greater%2C%20and%20unordered.), [self-explanatory](https://en.cppreference.com/w/cpp/ranges)" CreationDate="2023-05-27T20:07:26.533" UserId="13406" />
  <row Id="21513" PostId="7740" Score="0" Text="I teach C++20 (I will start teaching C++23 as soon as all major compilers start supporting all the major features of it) with CMake as the (meta) build system. This is not the first programming course for my students. It's either 2nd or 3rd. Since we mainly teach Java, I chose to teach C++20 focusing on features that are relevant to broadly classified &quot;business solutions&quot;. It not only enables me to use new, cool features to introduce C++ and then go a little lower in levels of abstractions, but it also reinforces students' understanding of higher level concepts present in languages like Java." CreationDate="2023-11-08T19:25:32.443" UserId="11453" />
  <row Id="21185" PostId="7741" Score="1" Text="Doing this without maths is like teaching illiterate people a new language. It'll take more time than otherwise necessary, for adults at least. I'd argue that government managers and policy makers without at least high-school level math skills are not fit for the job, but I know that's the sad reality of the world we live in. I'm not sure what would be a satisfying answer to your question: such audiences are a handicap to themselves... :( &quot;Managing&quot; big data: what does it mean? How do you &quot;manage&quot; data? Like, work with it? Use the analysis results? ..." CreationDate="2023-05-29T20:01:27.637" UserId="9440" />
  <row Id="21170" PostId="7743" Score="0" Text="You may check my similar question https://cseducators.stackexchange.com/questions/6699/what-are-good-practical-labs-and-activities-for-loops" CreationDate="2023-05-29T04:04:46.600" UserId="9884" />
  <row Id="21186" PostId="7743" Score="5" Text="What do you mean by &quot;real-world&quot;? I've found that usually students asking this mean &quot;when would I use a for-loop in a real-world programming job&quot;? (in other words, &quot;how will knowing this help me earn money?&quot; Then less common, &quot;what real-world non-computer task is like a for-loop&quot;? (AKA: &quot;I think I only learn by analogy&quot;)" CreationDate="2023-05-30T00:02:23.557" UserId="8773" />
  <row Id="21212" PostId="7743" Score="1" Text="More important is the order that you introduce them: More specialised and safe first, general and dangerous last: `foreach item in list` (used to process items in a list) →`foreach number in range` (used when you need to do something multiple times, with a counting number, and option 1 won't do it) → `forever` (used to do something forever) → `while` (used when all else fails). I may have missed some." CreationDate="2023-05-30T18:46:05.600" UserId="204" />
  <row Id="21227" PostId="7743" Score="2" Text="Everybody who asks stupid questions like this is asked to come forward; then you iterate through them and give each one a spanking. Oh, I forgot: There are no stupid questions, right. Bummer." CreationDate="2023-05-31T07:45:29.877" UserId="1675" />
  <row Id="21519" PostId="7743" Score="0" Text="A _real_ real world example: for the first 100 visitors who purchase stuff on a site on Black Friday, every item gets 70% discount." CreationDate="2023-11-16T06:17:53.777" UserId="3952" />
  <row Id="21158" PostId="7745" Score="2" Text="This is a very strange question, and my degrees are in computer science and in music. The best I can think of is some sort of chord generator utilizing the circle (well, spiral in this case) of fifths." CreationDate="2023-05-28T02:35:56.763" UserId="27" />
  <row Id="21173" PostId="7747" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/146334/discussion-on-answer-by-ben-i-what-is-a-real-world-example-of-a-for-loop); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2023-05-29T10:28:59.790" UserId="27" />
  <row Id="21198" PostId="7749" Score="0" Text="Explaining for loop and using a break? C'mon, this should be basic stuff." CreationDate="2023-05-30T11:05:52.110" UserId="2234" />
  <row Id="21199" PostId="7749" Score="0" Text="@MarianPaździoch: I am not entirely sure what you are aiming at." CreationDate="2023-05-30T11:22:05.493" UserId="25" />
  <row Id="21171" PostId="7750" Score="0" Text="It appears to me that there is an underlying difference here. The two `for` versions tag all the items (sequenced for the &quot;n'th item&quot;, listed for the &quot;each&quot; item) up front. The `while` version just takes a random item each time. In the practical version, it is way easier to see that the platform has become empty, than to remember the sequence in which you noticed the original items, or the unique items that were present before you started taking them away. (In practice of course, you take the largest items first, because they stack better in the luggage van.)" CreationDate="2023-05-29T08:28:33.990" UserId="13427" />
  <row Id="21213" PostId="7750" Score="0" Text="You could get different behavior of the for-each and while loops, as the set from which &quot;each&quot; is drawn only typically gets evaluated once at the start of the loop. In your example, the while loop will continue to load suitcases until the platform is empty, but the for loop may only load the suitcases that were present at the start of the loop. If more suitcases get dropped off after you start the loop, the while loop will get them but the for loop may not." CreationDate="2023-05-30T18:59:46.650" UserId="1703" />
  <row Id="21162" PostId="7751" Score="2" Text="I'm not involved in teaching, but I'd think teaching forEach and map before something involving indexes makes sense in this day and age. Starting with the most complicated and general case because that came first historically or that's needed to implement a map function seems wrong." CreationDate="2023-05-28T14:15:39.557" UserId="1142" />
  <row Id="21163" PostId="7751" Score="1" Text="From an abstract computer science perspective, for as described in the OP is just a special case of foreach, operating over numeric ranges. (To the point that at least a couple of modern languages such as rust and kotlin, don't bother with traditional for loops)." CreationDate="2023-05-28T14:47:48.540" UserId="9706" />
  <row Id="21175" PostId="7752" Score="1" Text="Everyone getting their turn is manifestly *not* a `for` loop.  It's this: `while (!game_over) {current_player plays; current_player := next_player}`" CreationDate="2023-05-29T12:46:28.263" UserId="3132" />
  <row Id="21176" PostId="7752" Score="1" Text="@RonJohn Possibly, although it could be a for-loop with a `break` when a winner is declared." CreationDate="2023-05-29T13:01:13.520" UserId="1471" />
  <row Id="21177" PostId="7752" Score="0" Text="But I've added a comment about using `while` instead." CreationDate="2023-05-29T13:02:54.147" UserId="1471" />
  <row Id="21195" PostId="7752" Score="2" Text="@JanusBahsJacquet of course dealing and playing are two separate loops.  What makes you think I said there are?" CreationDate="2023-05-30T09:38:14.163" UserId="3132" />
  <row Id="21196" PostId="7752" Score="1" Text="@RonJohn Sorry, I must have read the answer too quickly – I completely missed the first sentence after the code block and read the whole thing as being about dealing." CreationDate="2023-05-30T10:01:14.113" UserId="13439" />
  <row Id="21200" PostId="7752" Score="0" Text="@RonJohn some games are played for a given number of turns; in this case the comparison to a for-loop seems to hold." CreationDate="2023-05-30T12:33:22.177" UserId="13446" />
  <row Id="21220" PostId="7752" Score="0" Text="@RonJohn That's an implementation detail. In Python, I often use something like `for player in itertools.cycle([player1, player2]): ...`." CreationDate="2023-05-31T00:27:21.437" UserId="1111" />
  <row Id="21225" PostId="7752" Score="0" Text="@chepner you and I think that way, because we're programmers who accept `for` loops.  But `while ... do ...` and `do ... while` loops fit better in natural language." CreationDate="2023-05-31T06:47:53.917" UserId="3132" />
  <row Id="21230" PostId="7752" Score="0" Text="And what about languages with no loops at all? Everything gets done with recursion. There's a distinction between how you *describe* a task and how you actually implement that task in any given language." CreationDate="2023-05-31T12:08:42.423" UserId="1111" />
  <row Id="21239" PostId="7752" Score="0" Text="@chepner I interpreted the question specifically about `for` loops, not iteration in general. I'd like to think that the concept of doing things repetitively is intuitive, since we see repetition all around us." CreationDate="2023-05-31T16:30:22.250" UserId="1471" />
  <row Id="21240" PostId="7752" Score="0" Text="And notice that I expressed my answer in metacode, not something specific like C's `for` syntax." CreationDate="2023-05-31T16:32:18.897" UserId="1471" />
  <row Id="21174" PostId="7753" Score="0" Text="A nested for loop would be a tricky way to implement it, and full of traps that students probably won't see right away. I wouldn't recommend implementing a clock that way, and I wouldn't recommend making your earliest class examples nested, either." CreationDate="2023-05-29T10:34:49.560" UserId="27" />
  <row Id="21184" PostId="7753" Score="0" Text="@BenI. A nested for loop is how I implemented a lovely analog clock back on ZX Spectrum when I was a wee lad. Three input statements to get hours, minutes, seconds, then a bunch of nested for loops that I painstakingly &quot;tuned&quot; so they'd keep the time with reasonable accuracy. After a week of tweaking (kids got lots of time back then), it would be off by less than half a minute after 24 hours. I certainly wasn't aware of the pitfalls back then, and can't quite figure what would be the pitfalls today. After 12 hours the top loop ended and there was a goto to start it again..." CreationDate="2023-05-29T19:58:07.150" UserId="9440" />
  <row Id="21187" PostId="7753" Score="1" Text="@Kubahasn'tforgottenMonica There are two that I see.  If, at 6:30 your hour hand is facing the 6 instead of halfway between the 6 and the 7, then you have moved past one of them.  However, a true analog clock is much more similar to a single for-loop (the motor), which runs three processes at each tick,, which is how the hour hand ends up so nicely between the two hours. I don't believe that you can reasonably accomplish this with a thrice-nested for loop. The secondary trap is about threading, but I wouldn't fuss much about that one with early students." CreationDate="2023-05-30T01:54:54.770" UserId="27" />
  <row Id="21201" PostId="7755" Score="3" Text="I wonder if that would be better as an example of a while (or do) loop? I start reading a book and turn pages until I reach the end. The page numbers and how many of them there are aren't involved. Well, for fiction, anyway." CreationDate="2023-05-30T13:18:02.803" UserId="13448" />
  <row Id="21214" PostId="7755" Score="1" Text="While-loop is good when the end of the loop is not concrete. If the loop is satisfied before reaching the end of items in an array or if some other condition is met. Do-while means you must do at least once. Be careful with this since sometimes you may never need to do it at all. For-loops are great when there is a number increment/decrement and changes in the block have little to no effect on condition to continue the loop." CreationDate="2023-05-30T19:08:09.090" UserId="13453" />
  <row Id="21219" PostId="7755" Score="0" Text="Not really a good example. Last pages of a book could be glossary or index, ads for author's other books... And the end may not necessarily on the last pages, as in &quot;Choose your own adventure&quot; books. You don't read a preset amount of pages - you read until the end." CreationDate="2023-05-30T22:43:36.677" UserId="13460" />
  <row Id="21178" PostId="7757" Score="18" Text="What is wrong with pinyin? The names make sense to them if they are descriptive of the semantics of the program. English speakers don't need to be mollified." CreationDate="2023-05-29T15:11:24.037" UserId="1293" />
  <row Id="21179" PostId="7757" Score="0" Text="A, for starters, just some smart kids come up with this idea and I am not sure if it Is worth promoting the idea. B, it is not easy to use pinyin to name them in a consistent way, e.g. loop can have several translations in Chinese, then each with a different pinyin. C, some function/variable names we have gotten used to like worker/manager/factory, when translate to Chinese really sound strange in code. In a word I am not sure if it is a good idea." CreationDate="2023-05-29T15:23:44.017" UserId="9884" />
  <row Id="21194" PostId="7757" Score="6" Text="I switched from my native Danish to English in my code many years ago, because (1) when you look up solutions they will often be in English; (2) standard designs (patterns) come with a well-defined English vocabulary; (3) libraries are all in English, mixed with other languages the code becomes hideous. Solution: Use ChatGPT or similar. E.g. ask it &quot;What is a common term for a worker in a bank&quot;." CreationDate="2023-05-30T09:25:25.793" UserId="13441" />
  <row Id="21221" PostId="7757" Score="0" Text="@Buffy: Coming from a non-English-speaking culture myself, there is generally a hard push for English to be used in code. Exceptions exist but they are exceedingly rare. Code written in my native language is often lower in quality - but this is a correlation, not a causation, i.e. people who avoid writing English are generally less confident with the language and therefore tend to not rely on English resource materials as much, which dramatically impacts their learning. [..]" CreationDate="2023-05-31T02:34:38.960" UserId="2164" />
  <row Id="21222" PostId="7757" Score="0" Text="@Buffy: [..] A general drive for English in code as a matter of making developers confident in the language that pretty much all online resources are written in, is in my opinion a good push. Maybe not for the technical validity of the code itself but it keeps the technical language closer to the online source material, which is an argument not too dissimilar from the benefits of ubiquitous language." CreationDate="2023-05-31T02:35:42.847" UserId="2164" />
  <row Id="21223" PostId="7757" Score="0" Text="@Flater I agree with what you said but my question is about middle/high school kids, and does the naming matter at this stage when I try to teach them how to program(which I don't know)?" CreationDate="2023-05-31T04:10:27.313" UserId="9884" />
  <row Id="21224" PostId="7757" Score="9" Text="@Qiulang邱朗: It depends. If you are investing in their long term ability to learn how to develop software, then teaching them to get familiar with the lingua franca of the software development world is going to make it significantly easier for them to access learning resources. If this is an introductory class for students who have not yet committed to wanting to learn software development, then needing to get familiar with English is an unnecessary hurdle to understanding a very basic introductory principle of software development. The context of your curriculum matters." CreationDate="2023-05-31T04:14:21.187" UserId="2164" />
  <row Id="21233" PostId="7757" Score="0" Text="Consider that you also have comments.  So some additional options develop: pinyin identifiers with English comments, English identifiers with pinyin comments, English identifiers with full Unicode in comments" CreationDate="2023-05-31T15:51:36.873" UserId="5163" />
  <row Id="21247" PostId="7757" Score="0" Text="Tell your students not to be so lazy! They should call it juéduìzhí, not jueduizhi. So everybody can understand it." CreationDate="2023-05-31T22:40:09.760" UserId="13472" />
  <row Id="21249" PostId="7757" Score="0" Text="@TonyK I've never seen accented pinyin even in government documents." CreationDate="2023-06-01T01:27:03.587" UserId="1285" />
  <row Id="21251" PostId="7757" Score="0" Text="@TonyK I can't tell if you were joking, but we seldom add tone to our pinyin. Most of the Chinese input methods can give you character/word candidates based on pinyin without tone." CreationDate="2023-06-01T02:03:23.290" UserId="9884" />
  <row Id="21259" PostId="7757" Score="0" Text="The usual informal way I see of writing accented pinyin is with numbers to indicate the tones (eg. hao3) but I've never seen any kind of official accented pinyin on street signs etc. It would be cool if the students could just write the program with hanzi comments and variable names and pipe it through a filter that strips or translates in an appropriate manner the unicode characters before feeding it to the compiler, if that's what is required." CreationDate="2023-06-01T05:55:54.313" UserId="13473" />
  <row Id="21261" PostId="7757" Score="2" Text="@SpehroPefhany I would rather them write hanzi comments but still use English names for variables and functions." CreationDate="2023-06-01T06:20:34.910" UserId="9884" />
  <row Id="21270" PostId="7757" Score="0" Text="What is `fabs`?" CreationDate="2023-06-01T12:43:57.903" UserId="13476" />
  <row Id="21271" PostId="7757" Score="0" Text="@ToivoSäwén: Fabricated Stuff. More seriously, Floating Abs. Mathematical abs..." CreationDate="2023-06-01T13:38:28.243" UserId="8195" />
  <row Id="21272" PostId="7757" Score="0" Text="Native speakers struggle as well ;)" CreationDate="2023-06-01T13:56:04.460" UserId="13478" />
  <row Id="21273" PostId="7757" Score="0" Text="I think there is a difference between English proficiency and knowing specific mathematical abbreviations. It's offtopic to the question but why not use `floating_absolute`?" CreationDate="2023-06-01T13:57:22.597" UserId="13476" />
  <row Id="21274" PostId="7757" Score="0" Text="@ToivoSäwén It's a standard C function recognized in great many places. Changing its name does more harm then good, which ties in nicely to the point about using English to be consistent if not anything else." CreationDate="2023-06-01T14:52:25.997" UserId="9169" />
  <row Id="21284" PostId="7757" Score="0" Text="Lesson ideas? No. *entrance exam*. Or passing grade in English 102." CreationDate="2023-06-02T00:35:10.407" UserId="4158" />
  <row Id="21286" PostId="7757" Score="0" Text="@Mazura thanks for noticing that. Actually when I chose the tags for my question I found that none of the existing ones were close." CreationDate="2023-06-02T03:13:00.147" UserId="9884" />
  <row Id="21288" PostId="7757" Score="0" Text="@PasserBy if it's a standard function, why would they reimplement it or redefine it as `jueduizhi(x)`? I think the answers to the question will differ if you are considering standard functions in the language or implementing new functions." CreationDate="2023-06-02T16:20:18.070" UserId="13476" />
  <row Id="21289" PostId="7757" Score="0" Text="@ToivoSäwén because I just give them the very basic idea of programming, what is a function, you give it some input and then you get your output." CreationDate="2023-06-03T03:47:47.897" UserId="9884" />
  <row Id="21180" PostId="7758" Score="6" Text="Contrary to the practiced opinion of native English-speaking programmers, English is _not_ the language of programming. Allow, even encourage, the students to use the pinyin-ised names for what things are, or do in the language of the programmer. It would do my heart much good to have all our &quot;languages&quot; localised as well. I'd love to see a yóuyú or zeon loop in some clean code." CreationDate="2023-05-29T17:39:38.377" UserId="104" />
  <row Id="21205" PostId="7758" Score="0" Text="Speaking of French, that reminds me of a project ([Framadate](https://framadate.org/abc/en/)) that was abandoned. Much of the source code is written in French. That makes it almost impossible to find a maintainer now. (-- While looking at the homepage again, it seems they changed their licensing and are trying to find some funding for it to continue development)" CreationDate="2023-05-30T16:38:11.310" UserId="3259" />
  <row Id="21210" PostId="7758" Score="23" Text="While I, as a German software developer who's been in the industry for 40 years, strongly disagree with using anything but English in &quot;real&quot; code, I think there is a difference between learners and professionals. Learning to find good variable/method names is much more important than learning to find English names, and switching from good Chinese to good English is much easier than switching from bad names to good names. Don't rate them on their English skills, only check if the name they come up with is a good description of what the thing is used for." CreationDate="2023-05-30T18:17:57.540" UserId="997" />
  <row Id="21226" PostId="7758" Score="1" Text="@GuntramBlohm In my company we deliberately use German names for variables and functions in our code. A precondition is that the code will only ever be read by German speakers but if that is satisfied this approach has the advantage that one can immediately distinguish which functions are internal to our code and which come from some external library or similar source." CreationDate="2023-05-31T06:53:17.163" UserId="13464" />
  <row Id="21242" PostId="7758" Score="3" Text="@quarague As my employer realizes quite painfully, predictions are difficult, especially when they concern the future ;-). If your code base lives longer than a handful of years, chances are it will be maintained by people who don't speak German at all but read English well enough to understand English code. Note that this may well happen on German soil (as if that had any relevance these days, but still). Your company is myopic." CreationDate="2023-05-31T17:31:39.710" UserId="1675" />
  <row Id="21243" PostId="7758" Score="0" Text="Since this is the most upvoted answer its good you've added the caveat at end. A comprehensive conspective lineup of Unicode vars in languages is [here](https://rosettacode.org/wiki/Unicode_variable_names).  Right here [my answer](https://cseducators.stackexchange.com/a/7779/8837) gives examples of Python and C and a smattering of Haskell." CreationDate="2023-05-31T18:33:04.360" UserId="8837" />
  <row Id="21248" PostId="7758" Score="3" Text="I was told twice quite strongly to write comments, variable names, function names in German, and each time I ended up translating everything into English." CreationDate="2023-06-01T00:35:14.900" UserId="4529" />
  <row Id="21250" PostId="7758" Score="0" Text="@gnasher729 That's just the nature of the risk and reward involved. Cater to your local language skills or get access to significantly larger pool of English resources." CreationDate="2023-06-01T01:29:47.243" UserId="1285" />
  <row Id="21254" PostId="7758" Score="1" Text="@GuntramBlohm excellent distinction! I've referred to it in a couple of comments below/elsewhere. Ppl unable to get your point are not teachers, almost certainly not *experienced* teachers. When one has taught for decades (and are generally regarded as a good teacher) one knows willynilly how many students have fallen through the cracks because of sundry neglected reasons." CreationDate="2023-06-01T03:54:16.210" UserId="8837" />
  <row Id="21260" PostId="7758" Score="1" Text="@Peter-ReinstateMonica Of course no one can make perfect predictions of the future and you have to balance the possible advantages and disadvantages of either approach. But precisely because of that calling a company myopic without knowing any context about what they do is unnecessarily harsh and I'm quite confident wrong in my specific case (there are legal reasons the code will only ever be used in a German context and knowing German is required to understand what the code is used for)." CreationDate="2023-06-01T06:14:01.910" UserId="13464" />
  <row Id="21263" PostId="7758" Score="0" Text="@quarague Yes, it was harsh, but warranted based on the available information. Legal reasons the code will only ever not only be used in a &quot;German context&quot; but also by German speakers (which is not the same) are exceedingly rare. In that case the company may not be overly myopic (although the legal frame may shift to a European level in our lifetime, conceivably)." CreationDate="2023-06-01T08:52:15.850" UserId="1675" />
  <row Id="21264" PostId="7758" Score="2" Text="@quarague I'll give a contrasting example: A German company produces trains with German workers in Germany for DB following German regulations. They are audited by TÜV and Eisenbahnbundesamt. 20 or 30 years later they are producing trains for a world market following European regulations with an internationally distributed team, and parts of the code base and documentation are in German. Perhaps not such a big deal in the great scheme of things, but: The default should *always* be English unless legal requirements forbid it ;-)." CreationDate="2023-06-01T08:56:05.643" UserId="1675" />
  <row Id="21280" PostId="7758" Score="1" Text="I don't think that it's correct to say &quot;Unfortunately, most programming environments don't support Chinese and Japanese (or Navajo or ...) characters directly&quot;, as right now almost all programming environments *do* allow identifiers in non-Latin Unicode alphabets, as modern compilers and editors support this even for older languages like C, C++, Perl, Prolog; and of course languages like  JavaScript, Python, Go, Java, Ruby, etc have supported that for ages or even from day 1. So if you choose (for whatever reason) to use non-Latin identifiers, the tools will allow you to do that." CreationDate="2023-06-01T21:39:55.943" UserId="1729" />
  <row Id="21281" PostId="7758" Score="0" Text="I've written code with identifiers in Esperanto in PHP as well as Java 15 years ago. Worked fine back then. (Looks a bit strange, as all the standard library functions and keywords are in English.)" CreationDate="2023-06-01T23:57:51.353" UserId="653" />
  <row Id="21181" PostId="7759" Score="0" Text="`-Wall -Werror`: I tried the other if my codes were clean in that respect. What?! `for ( int i=0; i&lt;myarray.size(); i++)` is not allowed? Fiddle that shirt! Do I seriously have to burden my poor students with the distinction between signed/unsigned 32/64 bit? Ok, you said &quot;industry&quot;, but see what forum we are here." CreationDate="2023-05-29T19:36:38.657" UserId="6346" />
  <row Id="21182" PostId="7759" Score="0" Text="@VictorEijkhout I am well aware that this is CSE. I specifically *only* addressed the part of the question dealing with &quot;industry standards&quot; and stated so up front." CreationDate="2023-05-29T19:39:46.450" UserId="1940" />
  <row Id="21189" PostId="7759" Score="0" Text="@VictorEijkhout Unfortunately, yes. At least I was taught about signedness and the bit size of integers (how they're stored in memory, and so on). I really like your attitude toward your students, you seem like a great professor." CreationDate="2023-05-30T05:29:02.957" UserId="13406" />
  <row Id="21202" PostId="7759" Score="1" Text="@TheCompile-TimeComedian My teaching is &quot;operational&quot;: anything my students learn needs to be reinforced with a concrete use case. 1. 32 vs 64 bit ints: I have the hardest time getting them to realize that 10k is not a large number. I don't think int overflow happens much in the first semester coding exercises I give them. 2. signed/unsigned: even more rare to run into. I save 2's complement and IEEE 754 for a more advanced class. So I'm afraid that teaching them `for ( size_t i=....` this will become voodoo programming: just a magic formula they have learned, without understand the why of it." CreationDate="2023-05-30T13:24:22.730" UserId="6346" />
  <row Id="21204" PostId="7760" Score="0" Text="I would surely do this as at least two and probably 3 separate loops--peel all potatoes, then slice all potatoes, then put them all in the pot. Especially if you're peeling with a peeler and not a paring knife." CreationDate="2023-05-30T13:51:40.887" UserId="1407" />
  <row Id="21303" PostId="7760" Score="0" Text="That would be another way to do it.  Personally, I would do it as described to prevent the potatoes oxidizing and turning brown while I am cutting them up.  Of course, I omitted the assumption there is water in the pot to further prevent oxidization. Reference:  [link](https://www.southernliving.com/food/veggies/potatoes/how-to-keep-potatoes-from-turning-brown#:~:text=Once%20they%20have%20been%20peeled,is%20completely%20safe%20to%20eat.)" CreationDate="2023-06-11T17:27:03.350" UserId="13433" />
  <row Id="21304" PostId="7760" Score="0" Text="You can put them in water between the peeling and chopping steps to prevent browning, it will still be faster if the number of potatoes is large--I think it's interesting from a CS perspective because it goes to show that the faster answer depends on what the actual loops are doing, how many iterations there are, etc. The parts of the job that machine learning can't replace yet." CreationDate="2023-06-12T15:38:59.000" UserId="1407" />
  <row Id="21197" PostId="7761" Score="0" Text="I think _badly played_ was unnecessary here." CreationDate="2023-05-30T10:42:52.900" UserId="13445" />
  <row Id="21183" PostId="7763" Score="0" Text="Thanks, and of course good luck!" CreationDate="2023-05-29T19:56:55.943" UserId="13406" />
  <row Id="21218" PostId="7768" Score="0" Text="BTW, that algorithm is like a bad version of Bucket Sort since you loop 26 times instead of once to distribute inputs to buckets.  Bucket Sort is similar to Radix Sort but not based on fixed-length keys.  I think using a sorting algorithms as an example would be a big distraction from the part you wanted to focus on (loop structure), since sorting is another major topic in computer science.  Unless that's where you were going next, into non-comparison-based sort algorithms." CreationDate="2023-05-30T22:12:47.660" UserId="1654" />
  <row Id="21190" PostId="7770" Score="0" Text="Thanks for sharing your story, as for you I would recommend using github copilot, one of its selling points is to [help non-native speakers](https://github.blog/2022-09-14-8-things-you-didnt-know-you-could-do-with-github-copilot/#1-assisting-non-native-english-speakers) to come up with good names. lol" CreationDate="2023-05-30T06:12:54.960" UserId="9884" />
  <row Id="21191" PostId="7770" Score="0" Text="I dislike Co-Pilot, yeah it's good in the industry (Software developers) and has many great applications, but it also violates academic integrity and basically does all the work for you, which means you don't learn anything...not to mention it also costs a decent amount. I appreciate the feedback tho" CreationDate="2023-05-30T06:55:13.510" UserId="13406" />
  <row Id="21206" PostId="7770" Score="3" Text="I don't see why you can write &quot;swap&quot; in the comment but not as the method name. You still use pointers instead of references? Please, dear student, learn modern C++, not C." CreationDate="2023-05-30T16:43:43.093" UserId="3259" />
  <row Id="21211" PostId="7770" Score="8" Text="Sorry, but I don't like this at all. What if you have 576 different functions, with names from `aa` to `zz` - how many of those names can you remember, and how often will you confuse them? (This reminds me of the old days when I wrote CATIA V4 macros, with a library of several  hundred function names, all of them some 6 character abbreviation because that's what the linker was restricted to). The name of a method should be clear enough so you can infer what it does when you read the calling line without having to resort to any documentation." CreationDate="2023-05-30T18:25:35.503" UserId="997" />
  <row Id="21215" PostId="7770" Score="0" Text="@GuntramBlohm I agree and I said &quot;*short-term solution and not ideal*&quot; and I am also assuming these kids are not writing some super complex programs with 600 functions defined all over the global namespace (Introducing namespace could also arguably be a +). I believe that with 10 functions, things like that are manageable." CreationDate="2023-05-30T20:30:05.897" UserId="13406" />
  <row Id="21216" PostId="7770" Score="0" Text="@ThomasWeller Also --&gt; I am assuming they would write &quot;swap&quot; in **Chinese/their own language**, **not English** since the question stated they lack **English** vocabulary." CreationDate="2023-05-30T20:34:47.837" UserId="13406" />
  <row Id="21231" PostId="7770" Score="0" Text="The point about short variable names is overrated to some extent. Code should be readable, and if it is, then the choice of variable name matters far less. Using `i` as a loop index is perfectly fine for example, and I would similarly not consider your `a`/`b`/`c` example to be poorly written _provided the function has a descriptive name_ and is documented properly (because it’s so short and simple, there is little to no mental overhead in tracking the variables in that context)." CreationDate="2023-05-31T13:45:53.407" UserId="2523" />
  <row Id="21232" PostId="7770" Score="2" Text="@ThomasWeller Despite some similarity in their names, C++ is not the up-to-date C or even a newer version of C. C is a perfectly good language in its own right." CreationDate="2023-05-31T15:41:23.770" UserId="5666" />
  <row Id="21246" PostId="7770" Score="2" Text="@RosieF: sure, I know. The term C++ is used in the answer. I just cited it and compared that declaration to the code associated with that label." CreationDate="2023-05-31T21:04:48.833" UserId="3259" />
  <row Id="21228" PostId="7779" Score="0" Text="The thought never occurred to me.  I need to do some research first" CreationDate="2023-05-31T10:22:37.633" UserId="9884" />
  <row Id="21229" PostId="7779" Score="0" Text="Ive added some links/references that you may find useful @Qiulang邱朗" CreationDate="2023-05-31T10:35:08.737" UserId="8837" />
  <row Id="21265" PostId="7779" Score="0" Text="Speaking of homoglyphs (&quot;AΑА&quot;), it is Unicode to be blamed that identical characters are duplicated with distinct codes." CreationDate="2023-06-01T09:44:44.903" UserId="11465" />
  <row Id="21267" PostId="7779" Score="0" Text="@Qiulang邱朗 Are the characters in my answer 'Hanzi'? Since I've no idea what's hanzi, simplified, pinyin and what not I just left the vague 'Chinese'. If Hanzi is more accurate I'll change accordingly" CreationDate="2023-06-01T11:32:01.130" UserId="8837" />
  <row Id="21268" PostId="7779" Score="0" Text="@TrangOul *Unicode blamed for homoglyphs*. Lets grant that. What will you do? What do you do about war, disease and death? As the saying goes &quot;Sun, moon and taxes&quot; is fait accompli. Likewise unicode. OTOH I don't think blaming unicode makes sense. ASCII was made by techies *for techies*. Unicode was made by techies and linguists etc *for the world*. At **3-4 orders of magnitude gap** from ASCII to unicode, expecting the same (techie) attitude to work will not. Specifically, prog. languages should *opt out by default, opt in with explicit decl/pragma* — like html's charset declaration" CreationDate="2023-06-01T11:35:44.753" UserId="8837" />
  <row Id="21269" PostId="7779" Score="0" Text="@Rusi Sorry hanzi is the pinyin of the **Chinese Character**. And yes the characters in your answer are 'Hanzi'" CreationDate="2023-06-01T11:48:17.987" UserId="9884" />
  <row Id="21277" PostId="7779" Score="0" Text="[GCC allegedly only caught up in mid 2020](https://stackoverflow.com/questions/12692067/and-other-unicode-characters-in-identifiers-not-allowed-by-g/42158646#42158646) ([version 10](https://gcc.gnu.org/releases.html)). A lot of folks are still using [Turbo C++](https://www.quora.com/What-are-some-bitter-truths-about-engineering-in-India/answer/Adhokshaj-Mishra) (often forced to) or similar old versions (incl. GCC)." CreationDate="2023-06-01T18:06:38.737" UserId="1314" />
  <row Id="21283" PostId="7779" Score="0" Text="Tnx for the heads up @PeterMortensen. But I'm not sure what your point is. Some people are forced to learn programming without minimal English background, some with obsolete software.  Lots of ppl, lots of handicaps! Is there a case for &quot;Lots of Turbo C++ in Chinese academia? After all Unicode is decades old,  but unicode  everywhere OS is still a developing subject... More pragmatically Still lot of Python 2 (and academically it's better)" CreationDate="2023-06-02T00:31:40.357" UserId="8837" />
  <row Id="21287" PostId="7779" Score="0" Text="@PeterMortensen   Also if some hapless 12 year old is being subjected to C(++) in 2023, theres a bigger problem right there as compared to whether the specific C version is Turbo C!" CreationDate="2023-06-02T06:48:51.250" UserId="8837" />
  <row Id="21257" PostId="7781" Score="0" Text="Good points! As to importance of naming: Naming is about *best-practice.* Beginning students have a hard time knowing that `else` goes with `if` not `while` (unless you're in Python!), that conditions must be parenthesized (C family) or terminated by ':' (Python).  Zillions of such minor points that experienced programmers have struggled understood internalized *and forgotten the struggle*." CreationDate="2023-06-01T04:50:02.290" UserId="8837" />
  <row Id="21258" PostId="7781" Score="0" Text="In that context a foreign unfamiliar language is a heavy gratuitous burden. In short: naming is fundamental to *software engineering.* But theres a big gap noob-programming↠ SE. See my [pianist-analogy](https://cseducators.stackexchange.com/a/6164/8837)" CreationDate="2023-06-01T04:50:12.717" UserId="8837" />
  <row Id="21262" PostId="7781" Score="1" Text="@Rusi, the &quot;while-else&quot; is an exemplar of dreadful English naming! But yes, even with English itself, there is a process of schooling in which children learn alphabetic symbols and punctuation and all the rest of it. Meanwhile, vocabulary and word choice is largely learned from everyday listening and reading." CreationDate="2023-06-01T08:14:45.170" UserId="9075" />
  <row Id="21234" PostId="7783" Score="2" Text="English is simple?!?! [See](https://twitter.com/tweetsauce/status/1132719589203169280). More seriously, I don't dispute that every programmer in the world of 2023 will be better off for better english.  I dispute that it needs to be an added burden to 10-12 yearolds" CreationDate="2023-05-31T15:52:57.737" UserId="8837" />
  <row Id="21235" PostId="7783" Score="0" Text="@Rusi 10-12 yearolds, no. University students using their native language when working with established codebase (written by me, not an English native) that uses only English - absolutely. (true story)" CreationDate="2023-05-31T16:00:34.337" UserId="13468" />
  <row Id="21236" PostId="7783" Score="0" Text="@VladimirFГероямслава don't get (parse!) your second sentence.  Absolutely what?" CreationDate="2023-05-31T16:01:49.470" UserId="8837" />
  <row Id="21237" PostId="7783" Score="0" Text="@Rusi Middle school ranges from 10 to 16, I think. True, it would be wanted much for 10 year olds, but perhaps not for 14 or 15 year olds (they would really profit from a few words of English, not only in CS)." CreationDate="2023-05-31T16:27:10.363" UserId="1675" />
  <row Id="21238" PostId="7783" Score="1" Text="@Rusi As to your humorous Twitter link: None of the words are needed for programming (unless they appear in the subject domain), and pronunciation (the topic of the post, and problem for many learners) is irrelevant in any case." CreationDate="2023-05-31T16:29:16.160" UserId="1675" />
  <row Id="21241" PostId="7783" Score="0" Text="This German speakers [comment](https://cseducators.stackexchange.com/questions/7757/non-native-speakers-struggle-to-come-up-with-decent-variable-names-and-function#comment21210_7758) says it all succinctly" CreationDate="2023-05-31T17:26:40.040" UserId="8837" />
  <row Id="21275" PostId="7783" Score="0" Text="_&quot;Simple English is incredibly simple, certainly from a Chinese perspective&quot;_, not really. If you grew up learning both, then probably. But not if you're a Chinese student, the two just isn't comparable." CreationDate="2023-06-01T15:50:53.223" UserId="9169" />
  <row Id="21282" PostId="7783" Score="0" Text="If your students [can't] already read the Latin alphabet, then they're SoL. +1. I'm assuming this isn't really a problem with French or Germans, but if your alphabet is in Cyrillic or straight up pictures that don't load for me because I'm missing a font, then that's going to be a problem. *People with low command of the language unable to name things?* Correct." CreationDate="2023-06-02T00:29:41.710" UserId="4158" />
  <row Id="21252" PostId="7784" Score="0" Text="Thanks for the information. I think I will try that. BTW, it also reminds me of my Objective-C days. Apple has some guidelines for naming  https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html" CreationDate="2023-06-01T02:11:29.363" UserId="9884" />
  <row Id="21255" PostId="7784" Score="0" Text="This [comment](https://cseducators.stackexchange.com/questions/7757/non-native-english-speakers-struggle-to-come-up-with-decent-variable-names-and-f#comment21210_7758) above is worth noting" CreationDate="2023-06-01T03:55:23.567" UserId="8837" />
  <row Id="21279" PostId="7784" Score="0" Text="(Many of the common PowerShell cmdlets [also have aliases](https://pvm-professionalengineering.blogspot.com/2019/10/powershell-aliases-and-missing.html), e.g., `ps` for [Get-Process](https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Management/Get-Process) (like on Linux/Unix))" CreationDate="2023-06-01T18:34:34.787" UserId="1314" />
  <row Id="21815" PostId="7786" Score="0" Text="So there are b-a+1 elements in integer interval [a,b]; there are b-a-1 elements in integer interval (a,b); there are b-a elements in integer interval [a,b). Programming language python decided that basic language constructs would always be expressed using intervals of form [a,b) because it makes it easier to avoid off-by-one errors. For instance, an array `a` has &quot;length&quot; `len(a)`, meaning that its number of elements is `len(a)`, and its elements are indexed by integer interval [0, `len(a)`); and if you write `for i in range(0, len(a))` you are iterating on this interval." CreationDate="2024-03-18T13:30:14.487" UserId="10968" />
  <row Id="21278" PostId="7787" Score="0" Text="Sometimes I wonder why everything is in English. Then I realise, the non English stuff does not come up in by searches." CreationDate="2023-06-01T18:34:13.453" UserId="204" />
  <row Id="21285" PostId="7787" Score="0" Text="The only thing I can add is to these words &quot;The fact that you're asking here, instead of say zhihu...&quot; I asked here instead of zhihu or quora is because I am an active user of SE and I think it is the best, say far better than quora, although I hate close-vote and down-votes without any comments." CreationDate="2023-06-02T01:32:18.293" UserId="9884" />
  <row Id="21296" PostId="7789" Score="0" Text="About high-level philosophical programs - it is not quite clear what this is about and what it means. It would be better to write what there is in this kind of spirit at all. It should be said, by the way, that managers who do not have these IT courses have a course on decision making theory. And these particular state managers had it removed, so we need to give something of it anyway. It was removed just to put in its place a course about decision support systems, and so on." CreationDate="2023-06-06T15:10:14.507" UserId="6387" />
  <row Id="21297" PostId="7789" Score="0" Text="&quot;the length of time available on the course, and your academic credentials or industry reputation, would not be sufficient to support it.&quot; - I know about some courses foir similar bachelor's degree for government officials at Oxford based on the philosophy of Aristotle and Spinoza. People from there then transfer into a ministerial positions in GB: https://www.ox.ac.uk/admissions/undergraduate/courses/course-listing/philosophy-politics-and-economics This Oxford program is considered to be the strongest philosophical program in the world for management training" CreationDate="2023-06-06T15:14:59.790" UserId="6387" />
  <row Id="21290" PostId="7790" Score="0" Text="The analogy is fine but likely not helpful: The typical R, Matlab user unlikely sees themselves as programmers so much as *driving* their tool towards some science/statistics etc goal. Of the billions who drive cars 90% not trying to be good drivers, just try getting from A to B" CreationDate="2023-06-05T02:32:26.050" UserId="8837" />
  <row Id="21292" PostId="7790" Score="0" Text="@Rusi, agreed but if they're the sole user - they're not programmers by occupation, any more than the clerk is a mathematician by occupation - then it's hardly worth fussing about code quality. If the code mattered, you'd just furnish a programmer to them to kick it into shape, rather than expecting everyone to be a programmer." CreationDate="2023-06-05T15:50:47.767" UserId="9075" />
  <row Id="21293" PostId="7794" Score="1" Text="This is the right answer. In pre-k, students are learning letters (but not necessarily reading yet), colors, patterns such as red-blue-red-blue-red-blue, the seasons and the days of the week.  While there may be some among them who can read, you're really more likely to get that reliably in first grade, and reliably in second." CreationDate="2023-06-05T21:02:58.553" UserId="27" />
  <row Id="21295" PostId="7796" Score="1" Text="&quot;Most computers do not like spaces&quot; is an absurd assertion. But, I suppose it's easier to say that than to talk about reducing imported data to some canonical form that the rest of the application can easily deal with." CreationDate="2023-06-06T14:31:21.643" UserId="1269" />
  <row Id="21310" PostId="7796" Score="0" Text="@SolomonSlow When I wrote that &quot;most computers do not like spaces&quot; I meant that there exist websites which display error messages when people type in their first name, phone number, street address, or other information with spaces. For example, if a person purchases or buys a stainless steel rain-proof or water-proof bicycle chain over the internet, and the person types `(303) 719 -7210⎵⎵⎵⎵` or `Oklahoma City⎵⎵` then the webpage will display a message similar to &quot;Illegal character detected in phone number&quot;." CreationDate="2023-06-25T18:52:22.923" UserId="9253" />
  <row Id="21311" PostId="7796" Score="0" Text="@SolomonSlow When I wrote that &quot;most computers do not like spaces&quot; I meant that statement to embody the idea that many web-designers forget to trim-off leading and trailing white space characters from user-input. There exist web-designers who create websites which say &quot;illegal character in City field&quot; instead of simply copy and pasting code from GitHub which would automatically delete leading and trailing white-space characters. There exist web-designers who write code to annoy end-users rather than help the person using the computer. When computers trim `Lakehill⎵⎵` the result is `Lakehill`" CreationDate="2023-06-25T18:55:39.837" UserId="9253" />
  <row Id="21312" PostId="7796" Score="3" Text="I've met people who have a hard time seeing the difference between a web browser and a web site, between a database and a data entry form or a search form, between an e-mail client and and e-mail service and its web interface and their e-mail account, between any of the above and, &quot;the computer.&quot; Some of those people are students in &quot;computer science&quot; classes. I'm not so careful about my language when I'm talking to professionals in the industry, but when I'm talking to those who are trying to understand new ideas, I try to describe those ideas with precision." CreationDate="2023-06-25T19:25:50.013" UserId="1269" />
  <row Id="21298" PostId="7799" Score="0" Text="I've never heard your second &quot;boil ingredients&quot; meaning https://www.merriam-webster.com/dictionary/render" CreationDate="2023-06-07T01:24:54.283" UserId="8837" />
  <row Id="21299" PostId="7799" Score="0" Text="Why would the biological definition of a mouse be relevant in a discussion about computer hardware? Answer that question, then transplant it onto yours. I'm not sure what the core question here is other than &quot;what does rendering mean in CS terms?&quot;, which you already answer in the first parahraph." CreationDate="2023-06-07T05:42:54.033" UserId="2164" />
  <row Id="21305" PostId="7799" Score="0" Text="In visual arts, &quot;rendering&quot; refers to the use of varying densities of paint/pencil/etc. to duplicate the appearance of light and shadow, creating the illusion of depth in a 2D work of art. https://en.wikipedia.org/wiki/Non-photorealistic_rendering#Artistic" CreationDate="2023-06-14T23:05:43.163" UserId="1269" />
  <row Id="21481" PostId="7799" Score="0" Text="The question is misleading: even in computing, ‘render’ has much wider meanings than the computer-graphics one.  For example, man pages are traditionally written in troff markup format, and rendered into plain (or styled, depending on the terminal type) text when needed.  Or you could render a MIDI file (which has notes and other musical instructions) into an audio file." CreationDate="2023-10-21T15:27:59.030" UserId="9454" />
  <row Id="21315" PostId="7809" Score="0" Text="Many reasons of course, programming introduced with real world programing languages instead of academically crafted ones being a factor quite high in the list. [See](https://cseducators.stackexchange.com/a/6164/8837) fir a hint" CreationDate="2023-06-29T17:20:18.610" UserId="8837" />
  <row Id="21331" PostId="7809" Score="0" Text="I'm very much in the camp of CS teachers who thinks and sees this is the case. I started writing an answer but it's getting looong and many sided. To add to that you say you're not convinced this is the case. This is quite another question... makes it longer still.!" CreationDate="2023-07-13T10:31:19.873" UserId="8837" />
  <row Id="21332" PostId="7809" Score="0" Text="I just said this is NOT what I experience. If the student is a freshman or sophomore I can imagine. But if he/she is a senior or graduated I would say that is outrageous." CreationDate="2023-07-13T11:33:40.663" UserId="9884" />
  <row Id="21475" PostId="7809" Score="0" Text="I came across this post [Falsehoods CS Students (Still) Believe Upon Graduating](https://www.netmeister.org/blog/cs-falsehoods.html) today, kinda funny, e.g. &quot;People with a CS degree know how to program.&quot;" CreationDate="2023-10-13T05:07:16.060" UserId="9884" />
  <row Id="21476" PostId="7809" Score="0" Text="Cute!  Yeah a reminder to write my long promised answer... The problem is if you think something cannot be a fact because it's outrageous... welllll we're living in alternate worlds . Just look at all the wars going on — the new + the old recurrent" CreationDate="2023-10-13T05:19:35.373" UserId="8837" />
  <row Id="21477" PostId="7809" Score="0" Text="One of the reasons I asked is I don't know what should I expect from a new-hire cs undergraduate, especially when I don't do the interview and they are just assigned to my team. And I did have some disappointing cs undergraduates before." CreationDate="2023-10-13T06:46:52.993" UserId="9884" />
  <row Id="21478" PostId="7809" Score="0" Text="O my! This make the question wider once again. Industry &amp; academics are two worlds and neither understands/appreciates the other. So eg. ppl may advertise for CS-ists and not even need them, conversely advertise for 'Java resources' and then complain that wider CS knowledge is lacking" CreationDate="2023-10-13T09:44:23.993" UserId="8837" />
  <row Id="21479" PostId="7809" Score="0" Text="But I didn't add that to my question (on purpose) because I only wanted to know &quot;Is it common that CS graduates have a hard time programming?&quot; as I said in the title. And if this is the case what is the reason?" CreationDate="2023-10-14T08:40:31.287" UserId="9884" />
  <row Id="21321" PostId="7811" Score="0" Text="Are you interested in theoretical algorithmical optimizations (e.g. optimizations which have an impact on the Big-O) or practical constant factor optimizations (say, using a bit set instead of wastefully using an array or the like, or improving cache locality, reducing branching etc), or both?" CreationDate="2023-07-04T13:03:45.873" UserId="13590" />
  <row Id="21322" PostId="7811" Score="0" Text="@Luatic - Both, but stuff that there's a good chance of an engineer thinking of in a minute or two, not stuff that needs huge logical leaps." CreationDate="2023-07-04T16:50:07.480" UserId="11354" />
  <row Id="21326" PostId="7811" Score="1" Text="A good optimization lesson will focus on how there is never just one thing to optimize. Sometimes space is sacrificed for time.  Sometimes time is sacrificed for space. Often readability is sacrificed for no good reason." CreationDate="2023-07-11T15:07:21.680" UserId="1401" />
  <row Id="21323" PostId="7814" Score="0" Text="This is exactly the sort of answer that this site exists for. Fantastic!" CreationDate="2023-07-06T12:26:47.597" UserId="27" />
  <row Id="21324" PostId="7815" Score="0" Text="Thanks for the answer. But let me clarify something myself. I am a teacher (in China), not a student and from my limited experience, I can't say this is the case I experienced. That is one of the main reasons I asked. Second I wasn't even talking about &quot;perfect&quot;,  &quot;qualified&quot; maybe." CreationDate="2023-07-07T07:13:43.330" UserId="9884" />
  <row Id="21386" PostId="7815" Score="0" Text="_&quot;It would be nice to have distinct Software Engineering university programs, distinct from Computer Science, but even such a degree would only half-prepare you for any real job.&quot;_ Either I've just uncovered a cultural difference that I did not know existed, or maybe you didn't know about it, but non-CS courses are most definitely a thing. Universities (as opposed to colleges - this distinction may be culturally different for you) _tend_ to take the more academic route (CS) rather than the practical one (SE), but not exclusively so. I do agree that experience remains king here." CreationDate="2023-08-07T23:57:22.947" UserId="2164" />
  <row Id="21333" PostId="7818" Score="0" Text="Can you explain how exceptions reduce code (my experience is the opposite)? What language?, what type of exception (there are several)?" CreationDate="2023-07-15T21:05:32.663" UserId="204" />
  <row Id="21415" PostId="7825" Score="0" Text="[Is there any rule of thumb to construct SQL query from a human-readable description?](https://stackoverflow.com/a/33952141/3404097) [An Introduction to Relational Database Theory](https://bookboon.com/en/an-introduction-to-relational-database-theory-ebook) &#xA;[SQL: A Comparative Survey](https://bookboon.com/en/sql-a-comparative-survey-ebook) ) [Exercises on Relational Database Theory](https://bookboon.com/en/exercises-on-relational-database-theory-ebook)" CreationDate="2023-09-04T17:01:53.150" UserId="2485" />
  <row Id="21363" PostId="7827" Score="1" Text="I salute your drive to learn all these hard things! OS design is what I was most interested in up through college, but I didn't get a job doing that kind of work. Still, I did create some complex and low level system things in my humble programming job. I remember creating a counting semaphore from *mutex* and *condition variable* over 20 years ago. The cond.var seemed to defy any reasoning... opaque object. &quot;*Oh, the places you'll go!*&quot;" CreationDate="2023-07-30T23:29:15.550" UserId="5349" />
  <row Id="21334" PostId="7828" Score="1" Text="Books are cheap in Nepal(not cheap compared to nepal standard but  cheap compared to international standard) as they're international edition only made for south asia. They're cheap because paper quality is cheaper." CreationDate="2023-07-21T10:01:53.940" UserId="12544" />
  <row Id="21336" PostId="7828" Score="1" Text="I think [this](https://pages.cs.wisc.edu/~remzi/OSTEP) may be the Three Easy Pieces book to which you were referring. [How Linux Works](https://nostarch.com/howlinuxworks3) may be another good option." CreationDate="2023-07-22T20:01:06.237" UserId="13631" />
  <row Id="21345" PostId="7828" Score="0" Text="OSTEP by _Remzi et. al_ is needed a good option. Also one can follow the lecture series https://www.youtube.com/playlist?list=PLTtjs-HViBW6525-_a8QL3meFIlP31gGE" CreationDate="2023-07-24T17:32:15.060" UserId="9124" />
  <row Id="21364" PostId="7828" Score="0" Text="&quot;*Oh Tanenbaum, oh, Tanenbaum, how lovely are thy branches.*&quot; It's an old sentiment." CreationDate="2023-07-30T23:32:42.217" UserId="5349" />
  <row Id="21438" PostId="7828" Score="0" Text="I too hate tanenbaum, any other recommendations @Buffy" CreationDate="2023-09-16T13:30:07.573" UserId="12478" />
  <row Id="21338" PostId="7829" Score="0" Text="I learn by solving exercises, but the issue is I'm unable to solve exercises for these subjects questions." CreationDate="2023-07-24T00:54:11.490" UserId="12544" />
  <row Id="21340" PostId="7829" Score="0" Text="I'll be repeating myself but no matter how hard I try, the concepts don't enter my brain for these types of subjects. The only way out for me is to have a great teacher be it online or offline." CreationDate="2023-07-24T01:08:10.377" UserId="12544" />
  <row Id="21342" PostId="7829" Score="0" Text="I'm a learner who learns by doing exercises. And video based learning than text reading." CreationDate="2023-07-24T01:29:57.790" UserId="12544" />
  <row Id="21348" PostId="7829" Score="0" Text="It does sometimes happen. Pick a specific thing to focus on mastering and work at that different ways until you get an insight. Insights will come quicker after a while." CreationDate="2023-07-25T10:35:48.920" UserId="5349" />
  <row Id="21362" PostId="7829" Score="0" Text="Meditating helps. Deliberately closing your eyes helps you see better when you open them :-) Deliberately not sleeping helps your brain integrate what you learned, while you are sleeping." CreationDate="2023-07-30T23:19:35.930" UserId="5349" />
  <row Id="21529" PostId="7829" Score="1" Text="If you have an interest in electronics, consider diving deep into embedded systems. If you also happen to have a fondness for Linux, you've got one of the golden tickets. The demand for Embedded Linux Engineers is significant, and there's a vast market for it. The bonus is that everything is open source, allowing you to learn on your own.&#xA;Most major projects have substantial support, so you won't feel lost. Just grab a Raspberry Pi, one or two sensors, and explore the possibilities. Whenever you encounter something you don't understand, delve deeper and uncover what lies beneath." CreationDate="2023-11-17T16:09:41.653" UserId="4900" />
  <row Id="21335" PostId="7830" Score="0" Text="If I'm being precise: &quot;Nothing is entering my head anymore&quot;. I'm currently learning about synchronization in operating systems(been 2 days only though), and I'm stuck at it. This is not the first time I'm learning it. (I learnt in college a little bit). I'm following online course for OS from Prateek Jain Academy, not sure if that's helping if any. I'm following multiple textbooks(whatever pops up in google books). I am following GATE CSE Previous Year Questions for practice." CreationDate="2023-07-22T14:22:24.177" UserId="12544" />
  <row Id="21349" PostId="7830" Score="0" Text="@zeeshanseikh work on it every other day. And get lots of sleep. Take naps. Your brain is trying to integrate something very foreign to it. It takes a while. But you can feel when it finally clicks." CreationDate="2023-07-25T10:39:24.100" UserId="5349" />
  <row Id="21354" PostId="7830" Score="1" Text="I'm meditating hope that helps in learning" CreationDate="2023-07-28T09:48:22.100" UserId="12544" />
  <row Id="21343" PostId="7831" Score="0" Text="My lack of ability to understand complex topics is hurting my career choices. That's the point I'm trying to make. I can't understand complex topics that are highly logical." CreationDate="2023-07-24T13:27:28.017" UserId="12544" />
  <row Id="21344" PostId="7831" Score="0" Text="Besides software development (which requires structured, logical thinking) there are other branches in the industry. Think of Sales, User Interface design, Quality Assurance, Project Management and so on. Get yourself advice from someone who knows the job market in your region and can assess your abilities (which probably are much better than you think)." CreationDate="2023-07-24T17:03:06.323" UserId="3966" />
  <row Id="21347" PostId="7831" Score="0" Text="I'm good at Linux. And I work as linuxadmin. My problem is I'm ambitious and I want to learn all three core subjects of computer science at the very least." CreationDate="2023-07-25T01:51:21.133" UserId="12544" />
  <row Id="21353" PostId="7831" Score="1" Text="I'm meditating hope that helps in learning" CreationDate="2023-07-28T09:48:17.387" UserId="12544" />
  <row Id="21346" PostId="7832" Score="2" Text="I'm afraid that you've reached the wrong site. This site is for questions about how to *teach* CS, and while that inevitably means that some CS gets discussed here, the questions themselves should largely revolve around advice for teachers. (Even self-learners are allowed, but even then, questions here should not strictly be about CS. (See the [meta post](https://cseducators.meta.stackexchange.com/questions/23/are-questions-about-self-learning-on-topic) about that tag.)" CreationDate="2023-07-25T00:10:20.547" UserId="27" />
  <row Id="21350" PostId="7832" Score="0" Text="No, I've not. Just, want to impart more than could receive with MTech based on 433 AIR in GATE, that too having got admission in 3rd waiting list; with name at the fag end, of the big list; &amp; left earlier institute to join &quot;much more&quot; prestigious NIT-Warangal, in hope to learn more. Such sites should be more liberal, else darkness here is not easy to go." CreationDate="2023-07-27T00:48:39.307" UserId="13661" />
  <row Id="21431" PostId="7834" Score="0" Text="I'm also looking for it. Linux with operating system concepts is a good start." CreationDate="2023-09-15T06:10:00.960" UserId="12478" />
  <row Id="21366" PostId="7841" Score="2" Text="I love this question and would love it to stay on the site, but you need to make clear in what way it is about teaching CS. Can you edit it to make this clearer? (Just use the little &quot;Edit&quot; link under the question.)" CreationDate="2023-07-31T13:35:53.697" UserId="27" />
  <row Id="21367" PostId="7841" Score="0" Text="This would contradict the halting problem. In particular [Rice theorem](https://en.wikipedia.org/wiki/Rice's_theorem)" CreationDate="2023-07-31T18:09:47.940" UserId="8837" />
  <row Id="21382" PostId="7841" Score="0" Text="@Rusi The halting problem doses not prove that you can not determine weather a program halts. It only proves that it is trivial to construct a program that can not be proven." CreationDate="2023-08-05T20:33:53.200" UserId="204" />
  <row Id="21370" PostId="7842" Score="1" Text="Depends on your view of the practice. In my view there are well-published examples of program verification, including verified compilers (eg [CompCert](https://compcert.org) and [CakeML](https://cakeml.org)) and operating system kernels such as [seL4](https://sel4.systems). The proofs are machine checked. Contrary to your claim, concurrent programs, including those containing races are amenable to verification, too." CreationDate="2023-08-01T01:13:41.263" UserId="13024" />
  <row Id="21365" PostId="7843" Score="4" Text="Sorry, but off topic." CreationDate="2023-07-31T12:33:13.790" UserId="1293" />
  <row Id="21368" PostId="7843" Score="0" Text="@Buffy If you treat teaching and research as exclusive then yes, but if not then education should include both isn't it?" CreationDate="2023-07-31T18:37:55.290" UserId="8837" />
  <row Id="21369" PostId="7843" Score="1" Text="@Buffy OTOH Research ≠ Technology for research publication. So you could call it fringe" CreationDate="2023-08-01T00:57:06.020" UserId="8837" />
  <row Id="21383" PostId="7843" Score="4" Text="@risi the site is about teaching and learning. The question is not." CreationDate="2023-08-05T20:35:16.100" UserId="204" />
  <row Id="21371" PostId="7845" Score="0" Text="Are we to read all this as coming from a CS student or teacher?" CreationDate="2023-08-01T07:24:52.540" UserId="8837" />
  <row Id="21372" PostId="7845" Score="1" Text="@Rusi I am a faculty, and done masters in CSE, from a prestigious govt. institute in India." CreationDate="2023-08-01T07:43:48.907" UserId="13661" />
  <row Id="21373" PostId="7845" Score="0" Text="Well that makes the question (more) on topic. But it's very confused — What u want to ask. Bottom up and top down parsing can both handle both precedence. Though with different convenience" CreationDate="2023-08-01T07:45:05.083" UserId="8837" />
  <row Id="21374" PostId="7845" Score="0" Text="@Rusi Thanks. Want to get the vetting of the processing of the stated arithmetic expression done, by the given left-to-right and right-to-left associative grammars." CreationDate="2023-08-01T07:54:41.650" UserId="13661" />
  <row Id="21375" PostId="7845" Score="0" Text="@Rusi And also want more examples, or some inputs to create own examples, for operators having right-to-left associativity. And, want both scenarios: a) when only such operators are present in a statement, b) the statement has a mix of operators (i.e., both left-to-right and right-to-left associativity operators are there). That would entail also the inputs for creating suitable rules,  that am confused about, in terms of which phase of smallish compiler should they occur. If such rules are implemented in parser, then need inputs to create a smallish grammar too." CreationDate="2023-08-01T07:54:48.973" UserId="13661" />
  <row Id="21377" PostId="7845" Score="0" Text="@Rusi Request to please vet my result obtained above for the arithmetic expression: 200+300+400-50*10/5*2, by both grammars listed above, i.e. left-to-right and right-to-left associative ones." CreationDate="2023-08-01T08:44:23.347" UserId="13661" />
  <row Id="21379" PostId="7845" Score="2" Text="I really can't make our what you're asking. There seems to be basic confusion between (1) (C) language, (2) specific compiler technology (eg yacc) and (3) general compiler knowhow ( eg the 'dragon book' of Aho Sethi Ullman)" CreationDate="2023-08-03T07:19:15.583" UserId="8837" />
  <row Id="21380" PostId="7845" Score="2" Text="And I suspect that if you clean up the question it will hardly be a CSE question but will fit better in CS or stackoverflow itself" CreationDate="2023-08-03T07:20:33.980" UserId="8837" />
  <row Id="21387" PostId="7845" Score="0" Text="I'm not sure what's being asked here, but this seems unrelated to CS education." CreationDate="2023-08-08T03:00:04.617" UserId="9426" />
  <row Id="21506" PostId="7846" Score="1" Text="&quot;LaTeX is the brainchild of the preeminent computer scientist Donald Knuth.&quot; No it's not. TeX is Knuth's brainchild, but hardly anyone writes in straight TeX anymore. LaTeX is the brainchild of Leslie Lamport, and it's a macro set on top of TeX. And one might argue there is far more wrong with it than with TeX, which is why people patch it left and right and write alternatives to it." CreationDate="2023-11-05T17:45:22.970" UserId="6346" />
  <row Id="21507" PostId="7846" Score="0" Text="@VictorEijkhout You have a fair point. Credit for LaTeX goes to Leslie Lamport.  Here is Knuth on LaTeX, ConTeXt, etc.&#xA;&#xA; https://youtu.be/8HuwiBPLV3A?si=Bmv1sKKHrrZg5e4E" CreationDate="2023-11-05T17:57:28.493" UserId="12804" />
  <row Id="21378" PostId="7847" Score="0" Text="You said &quot;This problem is probably specific to Nepal&quot; so I assumed what you said happened in Nepal. It is good to have an answer from a country I didn't expect. I am from China and as a high school lecturer, I still feel that is unacceptable no matter what." CreationDate="2023-08-03T05:04:44.560" UserId="9884" />
  <row Id="21381" PostId="7848" Score="4" Text="This is really more of a software engineering question than a CS question, and what people teach probably varies widely. Of course, it depends. Classic quote: &quot;cheap, fast, good: pick two&quot;. If your company needs a large feature in a week, and delivering it quickly is the critical factor, you'll almost certainly have to cut quality corners and take on technical debt." CreationDate="2023-08-04T20:19:19.080" UserId="9426" />
  <row Id="21384" PostId="7848" Score="1" Text="Do you and your neighbor drive the same make of car? No? So which one of you bought the wrong car then? This is the core issue with your question, you are assuming that there is one correct opinion that applies universally. This very much is not the case." CreationDate="2023-08-07T05:46:29.473" UserId="2164" />
  <row Id="21395" PostId="7848" Score="0" Text="This question could be further contained by defining &quot;validator.&quot; My first thought was https://validator.w3.org/ and/or https://jigsaw.w3.org/css-validator/ — in which case I'm inclined to say &quot;yes, there should be no errors.&quot; But this fact isn't clear from the question." CreationDate="2023-08-17T23:43:57.560" UserId="5110" />
  <row Id="21401" PostId="7848" Score="0" Text="@ggorlen it is soon, cheap, lots of features. Pick 2. (However, lots of features often leads to not good, but that is another story.)" CreationDate="2023-08-27T21:40:13.470" UserId="204" />
  <row Id="21385" PostId="7849" Score="3" Text="_&quot;Programming, on the other hand, is a technical pursuit in which the standards are much clearer.&quot;_ I don't see how this argument can be made by anyone who has worked in programming outside of academia. Software development is _stereotypically_ rife with cases of non-technical management setting boundaries that force corners to be cut. Software development pretty much always kowtows to the economics/business of how a company is run. That is not to say that one shouldn't strive to write quality code, but striving to do so and claiming it is inherently done are two very different things." CreationDate="2023-08-07T05:53:07.300" UserId="2164" />
  <row Id="21400" PostId="7851" Score="0" Text="What do you mean by `integration`?, I assume not calculus." CreationDate="2023-08-27T21:35:24.410" UserId="204" />
  <row Id="21403" PostId="7851" Score="0" Text="Indeed, basically integration is when you get other people software and hardware and bring it to a target while maintaining a coherent system. Meaning that you have to handle dependencies, packages conflict, versions, OS particulatities and so on.&#xA;The developpment aspect of that work is mostly to read specifications and datasheets and to write code that respects both the OS and the device (or piece of software) that you are integrating." CreationDate="2023-08-30T07:36:46.073" UserId="4900" />
  <row Id="21404" PostId="7851" Score="1" Text="How does that differ from deployment?" CreationDate="2023-08-30T10:35:49.893" UserId="204" />
  <row Id="21407" PostId="7851" Score="0" Text="For instance when you assemble different hardware peripherals (such as sensors, GPU, memories and so on) or take a piece of software and adapt it to the specificities of your systems that's called integration. Deployement is more taking your software to a specific target in production.&#xA;For instance integration can be taking a software and preparing the deployement using different packaging methods: deb, rpm, wheel archive, docker, lxc... It can also be adapting your software to an architecture (x86, ARM, PowerPC...) or a build system (Yocto/Buildroot) or even an OS." CreationDate="2023-08-31T12:09:19.343" UserId="4900" />
  <row Id="21394" PostId="7852" Score="0" Text="I guess that's part of the answer indeed, while talking to a friend that followed such training, he told me that I should probably make them learn the other way around : start high level for instance a simple C program, and give them some script wrapping the toolchain around, and then go deeper and deeper. I'll be taking your advices and his and making it all over again. Because they probably xill feel better all through the learning process and we would be able to stop the training anywhere, plus they will be able to take something home without it hearting too much." CreationDate="2023-08-14T12:19:37.950" UserId="4900" />
  <row Id="21399" PostId="7852" Score="2" Text="@YCN- I realized that I left out important components, so I made some significant edits to the end. I hope your next training goes much better!" CreationDate="2023-08-22T15:43:08.053" UserId="27" />
  <row Id="21432" PostId="7855" Score="0" Text="You said regarding customers, &quot;there is a high chance that he *actually* needs to be laughed at.&quot; I'm imagining Klingon developers here. Great hearty laughs, followed by friendly back slaps that knock them across the room. In a better world... &quot;This is a good day for DRY, ha ha ha!&quot; &quot;Watch out for bugs!&quot;" CreationDate="2023-09-15T10:44:12.313" UserId="5349" />
  <row Id="21405" PostId="7859" Score="0" Text="What is he seeking to learn? : programming or computer-science or something other computer related think?" CreationDate="2023-08-30T10:38:34.653" UserId="204" />
  <row Id="21406" PostId="7859" Score="0" Text="Programming. He has been teaching himself Python." CreationDate="2023-08-31T09:52:17.480" UserId="13752" />
  <row Id="21408" PostId="7859" Score="1" Text="Note: computer-science ≠ programming. Yes it may include programming, but" CreationDate="2023-08-31T18:03:06.317" UserId="204" />
  <row Id="21417" PostId="7859" Score="0" Text="Programming is a vague term - by that I mean that an outsider might use this term very broadly (referring to the entire field of software development and CS) or very precisely (specifically the act of writing code). Think of it like the difference between being a novelist or a typist. The former requires significantly different training than the latter, even though a novelist usually does still type as part of their overall workload. You need to first refine specifically what your son's goals are before you can judge if any of these options match his goal." CreationDate="2023-09-12T06:25:20.453" UserId="2164" />
  <row Id="21418" PostId="7859" Score="0" Text="Maybe to elaborate on my previous comment: I'm mentioning this because you start off talking about a data sciences bootcamp but then when asked what your son is seeking to learn, you say &quot;programming&quot;. There's a significant difference between these two, which leads me to suspect that either you or your son are possibly conflating the terms or using them somewhat imprecisely. That imprecision directly detracts from the accuracy of any answer that you're going to receive. If you take an internet stranger's imprecise advice at face value, you risk wasting time and money going up the wrong creek." CreationDate="2023-09-12T06:29:00.867" UserId="2164" />
  <row Id="21428" PostId="7860" Score="0" Text="Just today I ran some html generated by ASP.Net through a validator to find a spurious attribute that was causing an html-to-PDF generator to fail. So, validators can be helpful. I had not used one before, but I knew they existed. Otherwise, I might never have found the needless in the htmlstack and couldn't have finished my project." CreationDate="2023-09-15T01:11:20.243" UserId="5349" />
  <row Id="21410" PostId="7861" Score="0" Text="Are you able and willing to switch jobs?" CreationDate="2023-09-02T20:56:46.407" UserId="1940" />
  <row Id="21480" PostId="7861" Score="0" Text="While some relation exists between the two, the quality of the product you're building and your level of expertise as a developer are two very different metrics. A lot of the issues you're pointing out are frontend-related, rather than what I would call general-developer-skill related, so it might just be that you're trying to be too much of a jack of all trades, master of none. By my own biased judgement I am a strong backend engineer but even I have to admit that my frontend work often looks like I'm a first year student simply because I'm horrible with visual design." CreationDate="2023-10-16T23:42:30.477" UserId="2164" />
  <row Id="21498" PostId="7861" Score="0" Text="@elizabeth What do you mean by &quot;employees in the company sign their work.&quot; In the old days, people would sign legal agreements on a sheet of paper with a pen. Were you asked to create a computer programme so that people signed digital papers by using a computer mouse or other cursor/pointing device?" CreationDate="2023-11-04T00:53:47.053" UserId="9253" />
  <row Id="21416" PostId="7867" Score="2" Text="This is rather broad and I'm not really sure what you're asking about here. Can you narrow the question down to specific technologies or domains? Thanks. QA test scripts for web apps in Playwright is totally different than desktop or mobile QA test scripts." CreationDate="2023-09-08T15:24:53.237" UserId="9426" />
  <row Id="21427" PostId="7867" Score="0" Text="Normally in software we just jump in and flail around until we get better at it." CreationDate="2023-09-15T01:01:44.557" UserId="5349" />
  <row Id="21437" PostId="7867" Score="1" Text="You can't prove a negative: you can not prove the absence of bugs. You can reduce bugs, but doing it at a late stage is too late. The software devs need to adopt practices that reduce defects. They need to test their own code. Also, scripts should be automated, humans should be un-scripted using intuition." CreationDate="2023-09-16T12:23:12.633" UserId="204" />
  <row Id="21443" PostId="7874" Score="0" Text="It's good to practice, but I don't quite follow how forgetting OOP is a concern. If you understand the fundamental concepts behind OOP, which it sounds like you do, then it's OK to set the tool aside until you need it, then look up necessary syntax when the occasion arises. Expert programmers don't memorize everything. They're good at familiarizing quickly on whatever skills or concepts are needed to do get a task done, building on a reasonably solid fundamental foundation and experience." CreationDate="2023-09-21T02:40:38.767" UserId="9426" />
  <row Id="21461" PostId="7879" Score="0" Text="Keep in mind that you can hardly study _programming_. There may be degrees in _Informatik_ which is closer to _computer science_ in the anglo world. That said, you will do a lot of prgramming in the pursuit of said degrees." CreationDate="2023-10-10T09:15:17.303" UserId="13024" />
  <row Id="21446" PostId="7882" Score="0" Text="Those are MCUs, and one of the client specifically wants embedded Linux boards, that's unfortunately two very different worlds.&#xA;But your point is interesting too, as I should probably reduce the scope first and then give them an overview of the overall system (ie embedded Linux, makefiles and so on)." CreationDate="2023-10-02T15:24:40.797" UserId="4900" />
  <row Id="21735" PostId="7883" Score="0" Text="&quot;How to learn database management systems? &quot; - The best way to learn anything is by first understand it, practice it, and apply it. There is no any magics involved here." CreationDate="2024-03-02T23:58:29.427" UserId="14297" />
  <row Id="21447" PostId="7886" Score="1" Text="I have never seen a resource like this, but I really want it now." CreationDate="2023-10-04T13:36:51.667" UserId="27" />
  <row Id="21454" PostId="7886" Score="1" Text="Don't forget to teach that &quot;code comments&quot; are different from &quot;doc comments&quot; (e.g., Javadoc comments or Doxygen comments.) The audience for code comments is somebody who needs to understand the code. The audience for doc comments is somebody who needs to understand an API, but who is _not_ expected to ever see the code." CreationDate="2023-10-07T11:04:11.150" UserId="1269" />
  <row Id="21471" PostId="7887" Score="0" Text="&quot;Memory management&quot; is an extremely general &amp; broad concept that encompasses many cases that are both similar &amp; different. So like many topics if you &quot;want to understand&quot; you are better off beginning with reading multiple introductory textbook presentations &amp; posting a question giving your specific goals &amp; viewpoint. For hands-on experience you need something executable which means specifically not MIX &amp; ideally the language from some presentation/reference that &quot;manages&quot; &quot;memory&quot; at the level you are interested in." CreationDate="2023-10-12T07:53:22.400" UserId="2485" />
  <row Id="21466" PostId="7888" Score="0" Text="At its simplest implementation, I think of LVM as merging all available disk space, across many storage devices (the physical volumes). I can then slice up this large pool of storage (the volume group) into one or (logical) volumes to store what I want, in volumes of the size I need. I have created my LVMs using Webmin: https://doxfer.webmin.com/Webmin/Logical_Volume_Management , to avoid the details of command line." CreationDate="2023-10-10T15:35:43.160" UserId="8155" />
  <row Id="21449" PostId="7889" Score="0" Text="Thanks, I also landed on that page when I searched for the thing yesterday, but that's not it (and it's a bit higher level than my beginner students could understand)." CreationDate="2023-10-05T12:24:46.027" UserId="8137" />
  <row Id="21450" PostId="7889" Score="0" Text="@DanielR.Collins https://www.stepsize.com/blog/the-engineers-guide-to-writing-code-comments ?  Or maybe https://medium.com/dare-to-be-better/the-best-practices-for-writing-comments-in-code-5b79f33dad5c ?" CreationDate="2023-10-05T18:02:17.077" UserId="27" />
  <row Id="21452" PostId="7889" Score="0" Text="No, neither of those. It was one section in a big language style guide page, not a dedicated article on comments (which makes it hard to search for)." CreationDate="2023-10-05T19:32:54.780" UserId="8137" />
  <row Id="21457" PostId="7891" Score="0" Text="thank you. &quot;The Elements of Computing Systems: Building a Modern Computer from First Principles.&quot; looks like a good resource to gain deeper understanding about how computers actually works." CreationDate="2023-10-08T14:58:24.000" UserId="13905" />
  <row Id="21456" PostId="7892" Score="0" Text="Thank you for your time. Here is my roadmap for now : learn about computer architecture and how it works completely(basically how to make a computer from scratch) -&gt; learn mmix -&gt; and then selectively study from taocp to better understand topics as need arises. Also I have been studying concrete maths because as far as i have heard it's mathematical preliminary for studying taocp. Is this approach correct or does it require some changes?" CreationDate="2023-10-08T14:56:33.137" UserId="13905" />
  <row Id="21458" PostId="7892" Score="1" Text="@gunslinger I don't think there is *the* right approach, it depends on your interests. My approach to self learning and private research generally has been driven by curiosity. Already as a young child I was fascinated by numbers and to this day I am most passionate about all kinds of numerical computation. I also enjoy making things go fast, so I have focused on anything from algorithmic optimizations to low-level assembly language tweaking." CreationDate="2023-10-08T19:22:48.043" UserId="1940" />
  <row Id="21467" PostId="7895" Score="2" Text="Thank you for following the [self-promotion rules](https://cseducators.stackexchange.com/help/promotion). We appreciate genuinely helpful answers that also disclose people's associations. (It might be a good idea to place that disclosure in the answer itself, though it's certainly clear in your username.)" CreationDate="2023-10-11T14:14:52.067" UserId="27" />
  <row Id="21472" PostId="7895" Score="1" Text="It didn't break any rules - that's even why I commented with a thank you.  The post is both helpful and well received by the community, and you're good!  I am modifying the edit, because it's commentary and not truly part of an answer.  We are a small community, and I hope we see more of you." CreationDate="2023-10-12T13:21:28.677" UserId="27" />
  <row Id="21473" PostId="7895" Score="1" Text="Are you okay with that edit?" CreationDate="2023-10-12T13:26:15.533" UserId="27" />
  <row Id="21474" PostId="7895" Score="0" Text="Of course!  Thank you so much for the kindness and help." CreationDate="2023-10-12T13:58:55.163" UserId="8530" />
  <row Id="21482" PostId="7900" Score="2" Text="Are there any aspects of the project you are most interested in testing or getting feedback about? What are the benefits of using a new tool instead of the existing standard JFLAP?" CreationDate="2023-10-21T17:44:50.357" UserId="9426" />
  <row Id="21483" PostId="7900" Score="0" Text="@ggorlen My biggest concern is: does it work as expected? It is very difficult to test for possible corner cases. Although JFLAP is the &quot;standard&quot;, I think this tool is a little complicated to use in some points, especially in relation to the construction of state machines. I tried to create something more user friendly. I'll add this to the question." CreationDate="2023-10-21T21:54:21.550" UserId="8199" />
  <row Id="21489" PostId="7900" Score="0" Text="Are PDA transitions editable after they are made?  I can't figure out how." CreationDate="2023-10-24T15:07:19.667" UserId="27" />
  <row Id="21490" PostId="7900" Score="0" Text="@BenI. Yes they are! Just use the move tool (little hand) and either click on the transition and edit it in the panel on the right (button with a pencil) or right click in the desired transition and choose de option &quot;Operation(s)&quot; on the popup menu." CreationDate="2023-10-24T16:07:42.837" UserId="8199" />
  <row Id="21491" PostId="7900" Score="0" Text="@davidbuzatto Oh, I see! I've started raising issues on github for you." CreationDate="2023-10-24T20:05:43.877" UserId="27" />
  <row Id="21492" PostId="7900" Score="0" Text="@BenI. thank you very much! I'll wait a few days to start working on them. Best regards!" CreationDate="2023-10-25T15:36:34.713" UserId="8199" />
  <row Id="21496" PostId="7900" Score="0" Text="dummy suggestion: why wouldn't you do some proper testing?" CreationDate="2023-11-02T08:27:51.867" UserId="4900" />
  <row Id="21495" PostId="7906" Score="0" Text="No, but I believe it would be quite an awesome topic for an engineering degree thesis. Maybe for a group thesis" CreationDate="2023-10-31T18:58:44.393" UserId="11453" />
  <row Id="21518" PostId="7906" Score="0" Text="Computer Science Majors could implement these algorithms themselves to play with them" CreationDate="2023-11-13T14:48:18.730" UserId="14049" />
  <row Id="21530" PostId="7906" Score="0" Text="Yes they could. Still not a helpful answer." CreationDate="2023-11-19T15:37:19.657" UserId="522" />
  <row Id="21503" PostId="7908" Score="1" Text="See [Eric Hehner](https://www.cs.toronto.edu/~hehner/God.pdf)" CreationDate="2023-11-04T17:39:14.147" UserId="8837" />
  <row Id="21555" PostId="7908" Score="0" Text="Suggested reading 1: Douglas Hofstadter's &quot;Godel, Escher, Bach&quot;. This masterpiece contains a full proof of Gödel's theorem, along with philosophical discussions (about the theorem, about mathematics, about consciousness and intelligence, about zen philosophy) and art analyses of Bach's music and Escher's paintings." CreationDate="2023-12-03T16:07:44.113" UserId="10968" />
  <row Id="21556" PostId="7908" Score="1" Text="Suggested reading 2: Raymond Smullyan's &quot;The princess or the tiger&quot;. In appearance this book is &quot;just&quot; a collection of fun riddles. The first half of the book contains riddles about people who are lying and telling the truth starting easy and getting progressively more convoluted. The second half are arithmetic riddles that progressively trick the reader into figuring a proof of Gödel's theorem. Really!!" CreationDate="2023-12-03T16:09:59.783" UserId="10968" />
  <row Id="21500" PostId="7909" Score="0" Text="I am not sure I understand the purpose. Is this going to become a poster to hang in your classroom? Or is this something you expect to do constantly?  If it's a relatively small number of artifacts to make, then that suggests different solutions." CreationDate="2023-11-04T13:37:36.050" UserId="27" />
  <row Id="21501" PostId="7914" Score="0" Text="You went pretty far afield on this journey. I would mention that English *or* is ambiguous, and is understood as either inclusive or exclusive based on context. A teacher instructing children: &quot;you will get a prize if you turned in the homework yesterday or if you finished the project this afternoon&quot; is standard inclusive or. You will certainly get the prize if you have done both. By contrast, your supermarket example is exclusive or. In formal logic, we have separated out the two meanings into different symbols for disambiguation purposes." CreationDate="2023-11-04T13:52:52.913" UserId="27" />
  <row Id="21511" PostId="7914" Score="0" Text="@BenI. You wrote, &quot;you went pretty far afield on this ***journey***&quot;. I am guessing that you are using the word ***journey*** to refer to my written response to the question asked by Mohan Radhakrishnan. Do you mean that my answer was too long&gt; I wrote 8,109 characters or 1,489 words. It is possible to stray even farther afield. Everything I wrote is one the same topics as the book titled  'A Logical Approach to Discrete Math'. I discussed logic and I discussed a little bit of discrete math. I apologize for going too far afield." CreationDate="2023-11-07T18:05:28.070" UserId="9253" />
  <row Id="21512" PostId="7914" Score="0" Text="Ah, I didn't realize that those were the book topics. I retract that comment! (Though, in all honestly, it wasn't meant as a stinging criticism - it was more a note about the effort you underwent to cover quite a lot of breadth!)" CreationDate="2023-11-08T02:02:02.043" UserId="27" />
  <row Id="21514" PostId="7916" Score="0" Text="I am still in school right now, and I am taking OOP class in C++, Java and C#. Nobody in that class teaches any industry practices since they differ so much it's basically pointless (use of in-house standards). I personally see some noticable differences between C++11 and 17, like lambdas, compile time eval, threading, and STL." CreationDate="2023-11-08T23:41:03.560" UserId="13406" />
  <row Id="21515" PostId="7916" Score="0" Text="That's what I meant with quality of life improvements. All those things exist in C++11 (except some STL sub libraries) though they became much easier to use. All of them are still the same concepts, so you don't need big reworks of the way you teach them, unlike ranged-for, auto, introduction of lambdas, std::move, std::unique_ptr. All of those where new concepts that really change the way people think about writing code." CreationDate="2023-11-09T05:55:16.227" UserId="14016" />
  <row Id="21508" PostId="7917" Score="2" Text="Obligatory XKCD, great as an ice breaker with the students: https://xkcd.com/927/" CreationDate="2023-11-05T18:50:14.433" UserId="104" />
  <row Id="21516" PostId="7917" Score="0" Text="I've been trying to compose an answer to your earlier question: _Can CS students not program_?  Seeing this I see to be frank it's a more interesting question! And factually the 2 are related: CS students can't program (among other things because...) not only are they taught badly, theyre taught wrong things" CreationDate="2023-11-10T05:02:29.953" UserId="8837" />
  <row Id="21517" PostId="7917" Score="0" Text="Thanks. I am not a full-time teacher just volunteer to teach in some middle/high school and I like to do that. Kids ambush me from time to time some interesting questions, e.g. https://cseducators.stackexchange.com/questions/7757/non-native-english-speakers-struggle-to-come-up-with-decent-variable-names-and-f" CreationDate="2023-11-10T06:21:29.843" UserId="9884" />
  <row Id="21579" PostId="7917" Score="0" Text="It is kind of like &quot;why so many species of beetles?&quot; Nothing succeeds like success." CreationDate="2023-12-13T21:45:12.283" UserId="5349" />
  <row Id="21578" PostId="7918" Score="0" Text="Even with one language, if it is sufficiently powerful, one can continue to make progress. 30 years ago with C I was working towards my own ideas of OOP and Dependency Injection, also making a lot of use of macros, and creating various Domain Specific Languages and even a free standing interpreter of a special purpose mini-language I built. The tools and languages, like C#, are vastly better now, and I don't need to innovate hardly at all, so you could say that better conditions made me lazier and less innovative. We come up with new things when forced to, not necessarily because it is easy." CreationDate="2023-12-13T13:44:08.030" UserId="5349" />
  <row Id="21509" PostId="7919" Score="2" Text="Interesting idea, but give a bit more context. It will improve any answers you get." CreationDate="2023-11-06T16:01:59.177" UserId="1293" />
  <row Id="21510" PostId="7922" Score="1" Text="I agree. I've had a course with David, actually, and his precision in things is legendary. A better sources for _programming_ at this level of precision is his _The Science of Programming_, though it is a strictly procedural approach. It is sort of the &quot;applied&quot; version of the book in the title here." CreationDate="2023-11-07T13:55:28.200" UserId="1293" />
  <row Id="21725" PostId="7922" Score="0" Text="I use TLAPlus. So I believe I understand the applications  of temporal logic specifications to some extent." CreationDate="2024-02-25T11:28:10.427" UserId="12400" />
  <row Id="21523" PostId="7925" Score="2" Text="I'm confused -- are you finding *unsolved problems* instead?  It's been my experience that essentially every problem that you will find in any instructional resource is a solved problem." CreationDate="2023-11-16T13:31:28.850" UserId="27" />
  <row Id="21524" PostId="7925" Score="0" Text="What sort of resources are you looking for? There are books with exercise, of course. Or are you just looking for problems with already published solutions?" CreationDate="2023-11-16T14:23:03.647" UserId="1293" />
  <row Id="21526" PostId="7925" Score="0" Text="I'm looking for problems with already published step by step solutions. Btw which one is more helpful?" CreationDate="2023-11-16T15:00:37.533" UserId="13955" />
  <row Id="21528" PostId="7925" Score="0" Text="I think unsolved exercises could also help." CreationDate="2023-11-17T07:44:01.500" UserId="13955" />
  <row Id="21531" PostId="7928" Score="0" Text="Wasn't sure on the tags, please edit to add appropriate ones" CreationDate="2023-11-19T17:27:36.787" UserId="1637" />
  <row Id="21532" PostId="7928" Score="1" Text="In Java you can return null in place of any object. But you still have to test for it. lists of ints are harder unless a non-negative is expected." CreationDate="2023-11-19T20:09:14.333" UserId="1293" />
  <row Id="21539" PostId="7928" Score="1" Text="What happens if you use `throw` without `try`? [I prefer the Python word `raise` -- less imperative] Sure you can't error **recover**. But then the idea of errors should be more fundamental than handling no?" CreationDate="2023-11-21T05:59:31.760" UserId="8837" />
  <row Id="21533" PostId="7929" Score="1" Text="Thank you.  Returning `null` sounds like a reasonable placeholder (which is what I'm after).  You're right to assume that they know about the various structured statements, and while some might have met python's exception handling then I don't want to assume it and also don't want to introduce too many things in one go.  At this stage, we're not writing complicated programs, so just testing for `null` is fine." CreationDate="2023-11-19T22:58:26.443" UserId="1637" />
  <row Id="21543" PostId="7929" Score="0" Text="null and un-exceptional exceptions, are two of the biggest mistakes in programming. Does Java have types that can be value or error (but nothing else)? I think it may be possible to make a type with `class`." CreationDate="2023-11-26T20:52:10.553" UserId="204" />
  <row Id="21535" PostId="7931" Score="0" Text="Thank you.  I suspected that `ArrayList` would be the choice, after all if implementing a &quot;better&quot; array then removing the fixed length condition would be an obvious one to do.  Thanks also for the pointer to the oracle docs - I hadn't figured out the &quot;oracle&quot; of java docs as yet via random internet searches." CreationDate="2023-11-20T22:00:37.387" UserId="1637" />
  <row Id="21536" PostId="7931" Score="2" Text="When Sun (inventer of Java) left the scene, Oracle bought out the company. Many employees left for Oracle also." CreationDate="2023-11-20T22:17:19.913" UserId="1293" />
  <row Id="21534" PostId="7932" Score="0" Text="Your opening sentence is something I'm keen to adhere to - while it would be horrendous to teach _everything_ at once, I don't want to simplify to the extent that what I'm saying is wrong or bad practice. But I have a practical problem with your advice to not catch exceptions in that the IDE (IntelliJ) doesn't like that.  I shall need to experiment a bit more to see how strongly it objects, but in the meantime is there an easy way to say to Java &quot;Just fail on all exceptions&quot;?" CreationDate="2023-11-20T21:49:31.733" UserId="1637" />
  <row Id="21537" PostId="7932" Score="0" Text="I agree: you don't necessarily need to use `try`/`catch` in the caller. This makes it both good and fairly easy, if you type methods `throws Exception` and teach students to `throw Exception(&quot;description of contract violation&quot;)`. The other way to simplify is to not worry too much about the type of exceptions. Your testing harness boilerplate can use `try`/`catch` or proper JUnit assertions, as applicable (students need not understand it fully right off the bat). That said, for many data structures it's acceptable to return `null` when lookup operations fail as many Java util collections do." CreationDate="2023-11-21T04:44:56.603" UserId="9426" />
  <row Id="21542" PostId="7932" Score="0" Text="@ggorlen Yes, and IMHO it all depends on the contract that you have in mind, whether you expect some element not to exist, and include that in the contract. Or you insist that an object is found, and then not finding one is a failure. It's like the distinction between the words &quot;search&quot; and &quot;find&quot;." CreationDate="2023-11-23T15:44:57.463" UserId="3966" />
  <row Id="21552" PostId="7932" Score="0" Text="I _almost_ accepted this one because your phrase &quot;Don't catch exceptions&quot; prompted an important shift in my thinking, and today my students showed how to get our IDE to stop complaining that I wasn't `try/catch`ing the exceptions (by adding `throws Exception` to the `main` declaration).  So thank you for that phrase!" CreationDate="2023-11-29T21:00:09.970" UserId="1637" />
  <row Id="21540" PostId="7933" Score="2" Text="Wow! That's a really detailed answer and thank you especially for providing the code snippets.  I'm keen that my students don't learn anything wrong (or bad habits) while wanting not to overload them.  I think they can cope with error handling -- certainly as a concept -- it's just me wanting to space out the concepts a little to allow them to get used to the syntax.  So in a few weeks I'd hope they'll be `try/catch`ing with the best of them, but for the moment I'm trying to chart the smoothest path to that point. Again, many thanks for the detailed answer!" CreationDate="2023-11-21T22:00:10.007" UserId="1637" />
  <row Id="21553" PostId="7933" Score="1" Text="There's a lot here that I'll keep coming back to as I learn more myself.  A crucial point for me (this time) was to de-emphasise the `try/catch` part of exception handling (your second bullet point)." CreationDate="2023-11-29T21:01:49.203" UserId="1637" />
  <row Id="21541" PostId="7934" Score="2" Text="Thank you, that looks interesting. I can't see any code on the website, neither samples nor sources for the gallery. Do I need to sign in for that?" CreationDate="2023-11-22T12:25:54.243" UserId="12582" />
  <row Id="21548" PostId="7937" Score="1" Text="Just about any C program that requires heap memory seems like it'd fit the bill. I can't think of too many nontrivial C programs I've written that didn't involve running into memory safety problems at some point. Beyond that, does the project need to be greenfield? You could have them analyze and fix bugs in a small codebase with existing memory safety problems." CreationDate="2023-11-27T20:26:31.047" UserId="9426" />
  <row Id="21549" PostId="7937" Score="0" Text="@ggorlen, Thanks for your comment, but that's not what I'm looking for, and does not match my experience.  The chances of having a memory safety error are significantly higher for some coding tasks, and lower for others.  I want a coding exercise where the chances are as high as possible.  (For many small-sized coding tasks that are not chosen with this purpose in mind, if they program in a vaguely reasonable way, there is a significant chance they will have no memory safety problems.)Yes, I really do want a project where they write their own code, not analyze/fix bugs in an existing codebase." CreationDate="2023-11-28T04:51:53.363" UserId="1106" />
  <row Id="21550" PostId="7937" Score="0" Text="Sounds like you're a much better C programmer than I am, then." CreationDate="2023-11-28T04:54:47.387" UserId="9426" />
  <row Id="21551" PostId="7937" Score="0" Text="@ggorlen, Well, no, that's not my basis for asking.  I ask for faith that I have good reason for asking.  I have experience with one attempt at such an exercise; the prevalence of memory safety errors in student solutions was not what I was hoping for.  So I'm asking here hoping that others have a better solution." CreationDate="2023-11-28T05:11:29.920" UserId="1106" />
  <row Id="21545" PostId="7938" Score="3" Text="One size doesn't fit all. What matters is legibility. and sometimes creating more space helps." CreationDate="2023-11-27T11:20:07.147" UserId="8867" />
  <row Id="21547" PostId="7938" Score="1" Text="I haven't heard the &quot;one screen&quot; function size limit recommendation before. This seems pretty arbitrary. Nowadays, with high res vertical monitors, &quot;one screen&quot; can probably fit 500 lines of code or more. In general, it's good to approach any sort of one-size-fits all rule like this with suspicion. Regarding the switch-case question, usually use a lookup table in whatever language you're using, preferably populated by raw data (JSON, typically). But it depends on your specific use case. switch-cases may be calling functions rather than accessing simple data." CreationDate="2023-11-27T20:23:05.170" UserId="9426" />
  <row Id="21559" PostId="7942" Score="3" Text="Why C++ may I ask. It is one of the hardest to use properly. Nor is it specifically object-oriented." CreationDate="2023-12-06T12:45:39.863" UserId="1293" />
  <row Id="21560" PostId="7942" Score="0" Text="@Buffy We had it in the curriculum at our school, then they took it out, but I still found it to be useful so I wanted to continue teaching it to people who were interested. Additionally, we try to teach it like an OOP, that way it can be implemented in other languages that students would want to learn in the future." CreationDate="2023-12-06T13:50:40.043" UserId="14107" />
  <row Id="21561" PostId="7942" Score="2" Text="It is very awkward to teach and use C++ as an OOP. I have a lot of experience with that. It is properly a multi paradigm language focused on data abstraction, not OOP. The true polymorphism of OOP is painful in C++ and prone to errors. OOP means more than classes. And the idea of a class in C++ and in, say, Python or Java are very different. One (C++) creates stack objects without polymorphism. The others are heap based with automatic garbage collection. You have taken on a very heavy task for secondary school. That is probably why the school switched languages." CreationDate="2023-12-06T14:12:59.417" UserId="1293" />
  <row Id="21562" PostId="7942" Score="0" Text="I could see that being awkward. That being said, it has stuck decently well on those trying to learn it from us (we’re on basic C++ so it might become quite difficult when we dive into classes and stuff along those lines). Whatever language it might be, I was more wondering about some exciting and memorable methods to teaching a programming language." CreationDate="2023-12-06T14:17:46.877" UserId="14107" />
  <row Id="21563" PostId="7942" Score="0" Text="What is your school's primary language now? Would you be willing to switch to that? I probably have some ideas." CreationDate="2023-12-06T15:13:53.177" UserId="1293" />
  <row Id="21565" PostId="7942" Score="0" Text="We have an AP program that teaches Java, and a regular program that teaches Python. I don’t see why I would need to switch to either considering they’re already taught" CreationDate="2023-12-06T18:15:46.247" UserId="14107" />
  <row Id="21566" PostId="7942" Score="0" Text="Let us [continue this discussion in chat](https://chat.stackexchange.com/rooms/150161/discussion-between-selisine-and-buffy)." CreationDate="2023-12-06T18:19:51.100" UserId="14107" />
  <row Id="21572" PostId="7942" Score="0" Text="Learning CS doesn’t mean learning a lot of languages. But a functional language like Scala or Scheme would be a better choice for you." CreationDate="2023-12-07T11:18:11.830" UserId="1293" />
  <row Id="21573" PostId="7942" Score="0" Text="What sort of projects do you make, if any? If the lectures are too lecture-like, could you switch to something more hands-on and project-based? C++ is a difficult language, but if you're using some sort of structured Arduino or SFML curriculum, it could be workable. C++ is also the standard for competitive coding, so if you're not doing games or hardware, solving coding challenges from beginner to more advanced might be an approach to consider." CreationDate="2023-12-07T22:36:02.210" UserId="9426" />
  <row Id="21574" PostId="7942" Score="0" Text="@ggorlen They’re game-like: things like tic-tac-toe &amp; Battleship. I could do coding challenges though, that could be interesting." CreationDate="2023-12-08T13:12:22.643" UserId="14107" />
  <row Id="21564" PostId="7943" Score="1" Text="The huge observation here is that the value of `i` is never used in the inner loops." CreationDate="2023-12-06T16:38:57.677" UserId="10968" />
  <row Id="21569" PostId="7943" Score="0" Text="By [&quot;visualization&quot;](https://en.wikipedia.org/wiki/Data_and_information_visualization), do you mean [plotting the time it takes the algorithm to run on different input sizes](https://dev.to/chroline/visualizing-algorithm-runtimes-in-python-f92) to see how it scales, or are you referring more to mental strategies for figuring it out? If the latter, I wouldn't use the word &quot;visualization&quot; as it generally refers to plotting/charting stuff, I think." CreationDate="2023-12-07T04:18:15.643" UserId="9426" />
  <row Id="21570" PostId="7943" Score="0" Text="Honestly  it could be anything" CreationDate="2023-12-07T05:05:45.790" UserId="13955" />
  <row Id="21575" PostId="7943" Score="1" Text="This seems a poor exercise to me.  I can't tell exactly what it's doing, but I can see that it's doing it in a nonsensically roundabout way." CreationDate="2023-12-08T13:13:16.930" UserId="27" />
  <row Id="21576" PostId="7945" Score="1" Text="A ray tracer seems a bit steep to me." CreationDate="2023-12-11T21:42:37.333" UserId="1293" />
  <row Id="21577" PostId="7945" Score="1" Text="Ray tracer is a difficult, [book-length](https://pragprog.com/titles/jbtracer/the-ray-tracer-challenge/) project. Have you done any self-driven projects before? If so, what were some of them, so we can get an idea of where you're at? If not, I'd suggest Tic Tac Toe, or another [command line game or app](https://github.com/asweigart/PythonStdioGames) (link sends you to Python-based repo, but the list of ideas works in any language)." CreationDate="2023-12-12T02:28:39.337" UserId="9426" />
  <row Id="21580" PostId="7945" Score="0" Text="Beginner project and C++ probably don't belong in the same sentence. Now ASP.Net with C# on the other hand, will get you very far very fast. But you might not learn a whole lot from it." CreationDate="2023-12-13T23:26:14.817" UserId="5349" />
  <row Id="21645" PostId="7945" Score="0" Text="A raytracer project would require learning five things at the same time: geometry, linear algebra, basic C++, a particular graphic C++ library, and data structures to store and manipulate all the objects that you're rendering. Which makes it all the harder compared to a project which would only require basic C++ and algorithms." CreationDate="2024-02-01T22:27:56.527" UserId="10968" />
  <row Id="21585" PostId="7946" Score="0" Text="Perhaps OP should use ASan or similar tools to check the memory-safety of their students' code?  (Memory errors, like concurrency errors, are notoriously difficult to trigger when testing — they tend to show themselves only ‘in the wild’ where they can do much more damage!)" CreationDate="2023-12-24T22:24:33.503" UserId="9454" />
  <row Id="21586" PostId="7946" Score="0" Text="@gidds Yes, but OP should also teach their students to do it." CreationDate="2023-12-26T19:49:26.227" UserId="124" />
  <row Id="21582" PostId="7947" Score="0" Text="Can you come up with a test case where the results differ depending on whether they follow your notes or use the online solution? If so, a failed test case might get the students attention." CreationDate="2023-12-19T16:33:57.283" UserId="4301" />
  <row Id="21583" PostId="7947" Score="0" Text="@FritzSieker That can be very hard in the case of random (testing a rng is tough!) or impossible/irrelevant if they have a working code using &quot;unapproved&quot; style." CreationDate="2023-12-19T16:56:40.630" UserId="6346" />
  <row Id="21584" PostId="7947" Score="1" Text="'How about I conclude lectures with &quot;Idioms to avoid and that will be downgraded&quot;?' [it's going to be hard to list them all](https://dynomight.net/teaching/). It's difficult to grade code style since it's somewhat subjective, but that's a different problem than trying to get students to use textbooks rather than ChatGPT, which is also difficult." CreationDate="2023-12-19T19:41:16.470" UserId="9426" />
  <row Id="21581" PostId="7948" Score="1" Text="Random numbers are a subtle issue that I'd rather not focus on. Students in their first semester are barely able to use them, certainly not to assess them. Btw, I'm not asking them to write one: only to use it properly." CreationDate="2023-12-19T14:23:14.520" UserId="6346" />
  <row Id="21594" PostId="7951" Score="0" Text="I might be able to use this, but I’m working with limited resources. Currently we have access to chromebooks, and we’re working to see if we can find a sponsor that can allow us to use their computer lab." CreationDate="2024-01-18T00:55:08.043" UserId="14107" />
  <row Id="21610" PostId="7951" Score="0" Text="You can always use &quot;Google Colab&quot;, which is based on Jupyter notebooks and does not need any installation, it's cloud based." CreationDate="2024-01-19T11:37:15.697" UserId="14158" />
  <row Id="21612" PostId="7951" Score="0" Text="I’ll definitely look into that then. I’ll likely do some tests with friends to get a gist of what we’d be working with, then implement it. Thanks!" CreationDate="2024-01-22T12:58:08.910" UserId="14107" />
  <row Id="21590" PostId="7953" Score="0" Text="I like this idea a lot, and I could see it working pretty well. However, what if they start to apply things incorrectly, and it veers them off course to the many methods of solving the puzzle?" CreationDate="2024-01-11T03:16:49.963" UserId="14107" />
  <row Id="21591" PostId="7953" Score="0" Text="@Selisine (1+1)+(1+1) works. It’s just pointlessly hard to read. You’re looking for good solutions to the puzzle. Not making them play, “guess what the instructor was thinking”. Teach them what a code review is. Make them read each other’s code. Making the CPU happy with the code is only part of the job." CreationDate="2024-01-11T10:37:41.690" UserId="1401" />
  <row Id="21593" PostId="7953" Score="0" Text="That’s fair. If I can figure out how to incorporate this, I could see it working well. What are some examples of times you’ve either used this method or been apart of it?" CreationDate="2024-01-18T00:44:26.500" UserId="14107" />
  <row Id="21595" PostId="7953" Score="1" Text="@Selisine I remember it being used in my data structures class. We started with a problem then learned what structures could solve it (and the pros and cons of each). I also remember reading each chapter in my textbooks backwards. I'd start with the homework then read similar looking examples until I knew how to solve the homework. Text books sometimes try to do this by listing the objectives. But it's more fun when the teacher asks the class how solve something without telling you how right away. It lights up your imagination." CreationDate="2024-01-18T01:23:57.980" UserId="1401" />
  <row Id="21609" PostId="7953" Score="0" Text="I could see how we can implement that. I talked it over with the VP and we came up with maybe giving the students a prompt and time to brainstorm in a group how to solve that prompt. Then we could provide some examples using the syntax and see if they can work from there. Thanks!" CreationDate="2024-01-19T11:21:58.013" UserId="14107" />
  <row Id="21611" PostId="7953" Score="0" Text="@Selisine that's a good approach. Not every problem needs much brainstorming in groups. Sometimes just a chance to raise a hand and suggest a method. Critical here is to not shut down ideas that don't match what you were thinking. Sometimes the best response is to just say, &quot;Wow, I hadn't thought of that. How would it work? Can you show me?&quot; and if time is tight ask them to show you after class." CreationDate="2024-01-19T12:32:12.317" UserId="1401" />
  <row Id="21613" PostId="7953" Score="0" Text="I’ll definitely take that into account as well. We’ve still got a lot to learn as we’re pretty young as a club (this is our first full year). I’ll relay this to the other board members, I appreciate the help!" CreationDate="2024-01-22T13:01:18.183" UserId="14107" />
  <row Id="21627" PostId="7953" Score="0" Text="Good news! I tried the discussed methods with the concept of objects and structs, and it traveled pretty well in an engaging and fun way throughout the club." CreationDate="2024-01-29T12:40:58.150" UserId="14107" />
  <row Id="21628" PostId="7953" Score="1" Text="@Selisine congratulations!" CreationDate="2024-01-29T12:47:39.720" UserId="1401" />
  <row Id="21629" PostId="7953" Score="0" Text="Thanks! I’m hoping to work through classes, which could be tricky, but I have some ideas on how get them into the idea of classes." CreationDate="2024-01-29T13:23:27.540" UserId="14107" />
  <row Id="21631" PostId="7953" Score="0" Text="@Selisine classes are how some languages get you objects. That’s not the only way. The object oriented paradigm doesn’t care how you do it." CreationDate="2024-01-29T17:19:31.453" UserId="1401" />
  <row Id="21635" PostId="7953" Score="0" Text="I’ll keep this in mind, it should be interesting to see how they use it—I’ve already seen methods I’ve not thought of." CreationDate="2024-01-30T22:35:57.827" UserId="14107" />
  <row Id="21592" PostId="7955" Score="2" Text="I don't understand your question. What benefit would your function f add? For most of my students, O is pretty intuitive after just a little practice, so it feels like you're just muddying the waters here" CreationDate="2024-01-15T12:18:03.703" UserId="27" />
  <row Id="21597" PostId="7956" Score="0" Text="The oh(term) is also an abuse of notation. Already outside the context of big O asymptotics such notation is commonly abused when people say f(x) when they mean f when they have abusively defined f by saying f(x)=2x to mean ∀x [x∈X→f(x)=2x] in the context of some understood X. oh(term) is different abusive shorthand. Of course one has to look at the definition of the notation one is using. Since the asker references such definitions I don't know why they are aren't reading them to see what speakers are likely to be sloppily saying. Or why they don't ask speakers for their definitions." CreationDate="2024-01-18T05:14:25.953" UserId="2485" />
  <row Id="21599" PostId="7956" Score="0" Text="@philipxy: Well sure! I  thought of mentioning that and in fact start my programming classes with λ-calculus. If that is under ones belt one could rephrase the [classic definition](https://en.wikipedia.org/wiki/Big_O_notation#Formal_definition) in this style O(f) = {g | ...}. Would be intersting to play around, probably too cumbersome to be practical. Much more practical is to realize that actual algo performance typically depends on *multiple* variables. Eg. A graph algo depends on number of vertices and number if edges. Etc etc. those situations, single variable functions are over simplistic" CreationDate="2024-01-18T06:35:54.060" UserId="8837" />
  <row Id="21600" PostId="7956" Score="0" Text="I mention it because your answer is a good response to the question--&quot;How to learn/teach what does O(n) etc. mean&quot;--but would be greatly improved by further addressing the  abuse of notation involved with oh(term). Indeed your answer uses that abusing notation without explaining what it means. PS I almost mentioned that the term in oh(term) could be taken as a lambda expression, but whether that is helpful/relevant depends on the particular explanation for the whole expression oh(term)." CreationDate="2024-01-18T06:43:51.907" UserId="2485" />
  <row Id="21603" PostId="7956" Score="0" Text="@philipxy OK in response to ur comments,  I've added a note 1.  Nevertheless the subject is vast. There are many other things to mention in this context. a) Asymptomatics were invented near a century before Knuth etc started using them for algo analysis b) It is meant for machine independent performance analysis. Taken literally this is a barefaced oxymoron. c) it typically reifies space/time optima. But there are zillions (ok dozens) of other parameters to optimize eg. Cache misses, disk spin up/down times, power consumption..." CreationDate="2024-01-18T07:01:26.110" UserId="8837" />
  <row Id="21604" PostId="7956" Score="0" Text="I think my last comment on a mathy education site was about the same issue of teachers &amp; learners being impeded by abuse of notation not being explicitly explained. Even the response to the comment is still oblivious to abuse of notation, to their being both &quot;standard&quot; generic (predicate logic) &amp; &quot;standard&quot; abusive notations. ... https://matheducators.stackexchange.com/questions/27078/intuition-for-order-of-operations-in-compound-transformations#comment72038_27078" CreationDate="2024-01-18T07:06:20.400" UserId="2485" />
  <row Id="21606" PostId="7956" Score="1" Text="@philipxy Good luck on educating mathematicians to do math  in a clean consistent and — at least long term — easy manner  . Not my hill to die on" CreationDate="2024-01-18T07:10:35.517" UserId="8837" />
  <row Id="21607" PostId="7956" Score="0" Text="I don't know why you mention all that stuff in your comment &quot;OK in response ...&quot; because the question is about sloppy vs precise use of terminology &amp; notation. An answer doesn't even have to mention the semantics at all, let alone aspects of &quot;the subject&quot;." CreationDate="2024-01-18T07:19:46.103" UserId="2485" />
  <row Id="21608" PostId="7956" Score="0" Text="@philipxy The equation I added in note 1 highlights that the OP is quite confused on fundamentals. I don't see this question merely as a question about sloppy vs precise notation even if better notation were to help understanding/highlight confusion. This site isn't very suitable for addressing such. The cs site may be better but would demand more prior legwork. [Heck: I didn't even notice the spell correct made asymptotic into asymptomatic!! I guess it's an asymptomatic spell check ]" CreationDate="2024-01-18T07:36:55.617" UserId="8837" />
  <row Id="21617" PostId="7956" Score="0" Text="I think $\Theta({5 n \log n} + 3)$ should be replaced by $5 n \log n + 3 + o(1)$ in the answer; otherwise $\Theta({5 n \log n} + 3) = \Theta({2 n \log n} + 100) = \Theta({n \log n})$ (where $=$ really means $=$ and not just $\subseteq$)." CreationDate="2024-01-23T10:12:00.643" UserId="10968" />
  <row Id="21618" PostId="7956" Score="0" Text="Thanks @stef. I actually did notice this paradoxical &quot;equation&quot; but did not want to complicate more. Still I've put a pointer to your comment" CreationDate="2024-01-23T10:26:15.377" UserId="8837" />
  <row Id="21614" PostId="7957" Score="0" Text="What are your students' interests? I can give you examples simulating a numerical library, but if they are not math/engineering students that will be meaningless." CreationDate="2024-01-22T17:35:07.983" UserId="6346" />
  <row Id="21615" PostId="7957" Score="0" Text="@VictorEijkhout I think they would be happy if I come across real engineering problems" CreationDate="2024-01-22T19:06:22.623" UserId="6890" />
  <row Id="21804" PostId="7961" Score="0" Text="The similar questions have been asked several times. We really should have a faq for that. I asked two questions. [Some real practical example to teach object-oriented concepts and programming (in python)](https://cseducators.stackexchange.com/questions/6709/some-real-practical-example-to-teach-object-oriented-concepts-and-programming-i)  &amp; [Common questions students may ask when they learn OOP?](https://cseducators.stackexchange.com/questions/6758/common-questions-students-may-ask-when-they-learn-oop)" CreationDate="2024-03-15T08:45:08.263" UserId="9884" />
  <row Id="21805" PostId="7961" Score="0" Text="I also answered [What is a good analogy for the Object Oriented paradigm?](https://cseducators.stackexchange.com/questions/146/what-is-a-good-analogy-for-the-object-oriented-paradigm)" CreationDate="2024-03-15T08:47:39.373" UserId="9884" />
  <row Id="21622" PostId="7964" Score="0" Text="@njuffa I donot know anything about industrial problems but out curiosity asking that are there any problems in industry which are lot harder and creative than maths Olympiad problems?" CreationDate="2024-01-26T06:00:15.737" UserId="14160" />
  <row Id="21623" PostId="7964" Score="3" Text="IMHO, they *cannot be compared* this way in a meaningful fashion because they are very different kind of tasks." CreationDate="2024-01-26T07:12:54.750" UserId="1940" />
  <row Id="21624" PostId="7964" Score="1" Text="Problems, methods and difficulty in professional programming, advanced CS degrees and math olympiads are about as related as apples, broccoli and sauerkraut." CreationDate="2024-01-26T17:57:49.200" UserId="9426" />
  <row Id="21625" PostId="7964" Score="1" Text="Knuth has [written](https://www.cs.ou.edu/~diochnos/about/KnuthCSMaths.pdf) about this" CreationDate="2024-01-27T04:18:05.607" UserId="8837" />
  <row Id="21630" PostId="7968" Score="0" Text="@njuffa Thanks for your comment! What do you think that overlap of the categories &quot;can do theory&quot; and &quot;motivated by applying CS&quot; is? Do motivate students to try to understand the theory well (rather than dismissing it as &quot;that's only theory without use&quot;), it would probably suffice that these silicon valley veterans understand or are able to apply theory, even if their motivation is a different one." CreationDate="2024-01-29T16:19:41.613" UserId="14233" />
  <row Id="21633" PostId="7968" Score="0" Text="Those who pursue graduate degrees in CS (Master or PhD) tend to have higher salaries and more employment options (job-hop). The same population presumably has more intrinsic motivation and better understanding of theory. But I sense you want to focus on those who do not want education beyond a bachelor degree." CreationDate="2024-01-30T04:32:34.433" UserId="12804" />
  <row Id="21636" PostId="7968" Score="0" Text="I'd like to see the research, but my anecdotal experience doesn't entirely support your thesis. Many of the most effective engineers I've worked with professionally don't have substantial educational backgrounds in CS and are basically great at learning fast and grinding daily to deliver. There's probably some correlation, since CS degrees can help teach those skills, but the question of whether it's worth the investment in a CS degree versus attending a bootcamp, working on personal projects and/or going to hackathons until landing a job isn't clear to me, depending on one's goals." CreationDate="2024-01-31T01:56:32.847" UserId="9426" />
  <row Id="21643" PostId="7971" Score="3" Text="In spite of this being duplicate, you are in the right place. Welcome to CSE! Take a look around - I hope we hear more from you." CreationDate="2024-02-01T17:42:12.470" UserId="27" />
  <row Id="21646" PostId="7971" Score="2" Text="A long time ago I was a Teaching Assistant of a course in programming for non-majors. There really was a spread in the rate of learning. Some seemed to grasp things right away with little background, others really struggled. I coached a lot of students through initial problems, but some were still pretty behind at the end (if they didn't drop). It is important to not attribute reasons or give up on people, but try to assist. I always found Math vexing and I never wanted anything to do with it, yet college forced me through lots. I was always one course behind in my understanding. Frustrating." CreationDate="2024-02-03T01:08:40.997" UserId="5349" />
  <row Id="21647" PostId="7971" Score="1" Text="Research shows that people with better executive functioning do better in schooling and at work. That's an area for effort. You can't succeed if you can't focus or persist through problems. Programming has so frustrated me at times that I used to keep a big rock next to the keyboard and wave it menacingly at the screen sometimes. But here I am making a living at it, 45 years after sitting down at a teletype in 8th grade. Still frustrating - why this sudden Certificate Error out of the blue? Ugh." CreationDate="2024-02-03T01:11:03.000" UserId="5349" />
  <row Id="21673" PostId="7971" Score="1" Text="*&quot;It turned out that she hadn't even managed to properly install Python or Visual Studio Code&quot;* That isn't necessarily a sign that she won't be able to program. I've been coding for about 25 years now, and all that means is that when something absolutely refuses to install correctly, I have the option to give up and write a clone of it instead.  Once she gets the compiler set up properly, it's entirely possible she'll pick up the rest as quickly as anyone. The kid who either doesn't understand what the assignment operator does or can't add 15 + 8 is the one I'd be worried about." CreationDate="2024-02-12T19:37:42.363" UserId="827" />
  <row Id="21718" PostId="7971" Score="0" Text="Maybe a class designed for non-computer science students is better suited. Examples include [software carpentry](https://software-carpentry.org/) ([core lessons](https://software-carpentry.org/lessons/)), Al Sweigart's [automate the boring stuff with Python](https://automatetheboringstuff.com/2e/), Chuck Severance's [Python for everybody](https://www.youtube.com/playlist?list=PLlRFEj9H3Oj7Bp8-DfGpfAfDBiblRfl5p). And: there is nothing wrong with you or an other if it does not &quot;click&quot; on the first encounter, nor &quot;never&quot;. Sometimes, the mind is better prepared a couple of years later, too." CreationDate="2024-02-16T15:52:27.417" UserId="10073" />
  <row Id="21642" PostId="7972" Score="2" Text="Welcome to CSE - feel free to take a look around. I hope we hear more from you!" CreationDate="2024-02-01T17:38:38.570" UserId="27" />
  <row Id="21648" PostId="7972" Score="0" Text="Bad languages are a curse on humanity. But what has kept me in the chair slugging it out day after day in what feels at times like a nihilistic programming universe is sheer pig-headedness. I'll sit glued there needing to pee for hours to try to solve the 'problem'. &quot;*A Quitter never wins. A Winner never quits.*&quot; Executive Functioning and stubbornness can do it." CreationDate="2024-02-03T01:19:17.583" UserId="5349" />
  <row Id="21808" PostId="7972" Score="1" Text="*&quot;in math and in physics, the hardest-working students got the best results, whereas in computer science, you could tell from day 1 which students would get the best result, and no amount of personal work from the students appeared to change that&quot;* - I suspect this is because there is actually both a hidden curriculum and a set of cognitive skills required for CS, and the difference is between the people who self-learn the curriculum and put in the hard work *many years before the course starts*, and those who are reliant on actually being taught during the course." CreationDate="2024-03-17T13:48:06.603" UserId="9075" />
  <row Id="21814" PostId="7972" Score="0" Text="@Steve Holy shit you might be right" CreationDate="2024-03-18T12:54:58.023" UserId="10968" />
  <row Id="21641" PostId="7973" Score="1" Text="Welcome to CSE - feel free to take a look around. I hope we hear more from you!" CreationDate="2024-02-01T17:38:23.823" UserId="27" />
  <row Id="21644" PostId="7973" Score="2" Text="Hi. In some sense, I agree with everything you said, but in another sense, I don't. That makes me wary. There are a ton of people who can't sing because they were told they couldn't sing when they were 5 years old. There are also a ton of people who suck at math because they were told that they sucked at math when they were 12 years old. So I think the sentence &quot;there are people who just can't get it&quot;, while true in a sense, is also false in another sense, and in fact can be extremely dangerous." CreationDate="2024-02-01T18:05:56.903" UserId="10968" />
  <row Id="21649" PostId="7973" Score="0" Text="Honestly, after years of pondering this issue I have to humbly say that I don't know, and I am pretty sure the right explanation is not well known. Programming might be *different* in some important way from other things, but the bottom line really is practice. It resembles gymnastics more than scholarship. &quot;*Nevah, nevah, nevah give up!*&quot;" CreationDate="2024-02-03T01:23:44.973" UserId="5349" />
  <row Id="21650" PostId="7973" Score="0" Text="@Stef I see where you're coming from with you.  I am sure the average person is able to at least get the basics with some practice, just like the average person would be able to do a variety of tasks - they would be able to do algebra and carry a tune to use your examples.  I am approaching this merely from a statistical point of view: if there are people who are great at math and become mathematicians and if there are people who are great singers and become professional, there are simply going to be people on the opposite end of that spectrum, and even with a lot of help they will struggle." CreationDate="2024-02-03T02:12:04.320" UserId="14240" />
  <row Id="21664" PostId="7978" Score="2" Text="There are lots of real world situations that do not involve accounting. Take examples from their personal lives, be it text messaging, campus management, sports or gaming entities. Take a look at introductions to OOP, they have exactly the same problem of realistic and interesting yet simple objects." CreationDate="2024-02-10T22:49:37.500" UserId="660" />
  <row Id="21665" PostId="7978" Score="1" Text="Frankly, structs are *much* more interesting and useful if you have pointers to play with. They are also going to need both pointers and structs if they're ever going to do any (nontrivial) graph theory. Are you absolutely sure that you can't teach pointers?" CreationDate="2024-02-11T01:33:28.487" UserId="1896" />
  <row Id="21670" PostId="7978" Score="1" Text="Why do you think they will reject the idea of using a struct, and instead insist on using arrays? Did this already happen to you before with other students?" CreationDate="2024-02-12T13:53:28.387" UserId="1848" />
  <row Id="21676" PostId="7978" Score="0" Text="@Kevin oh I know unfortunately well that the game is much better with pointers (let's say frankly that C without pointers is not C, and consequently also not useful). Unfortunately it's absolutely out of discussion here, the curriculum is what it is and I can't say much about it. Also the idea of using C as an introductory language is, in my view, not a good idea." CreationDate="2024-02-13T10:36:43.620" UserId="6546" />
  <row Id="21677" PostId="7978" Score="0" Text="@njuffa nice idea about using an array for a tree, but also this is our of reach. We are at the very beginning, trees are too complicated and I risk making more confusion having to merge 2 goals or even 3: trees, structs, how to encode something (not trivial) with something else (also not so trivial even if relatively known). Arbitrary precision also very very nice, and again too much for the class, but from this maybe I can draw some examples, thanks!" CreationDate="2024-02-13T10:39:56.203" UserId="6546" />
  <row Id="21678" PostId="7978" Score="1" Text="@MatthieuM. Mmh, yes I know the students' ways of thinking quite a bit now and this is a common problem. Not certain of course, but surely something to be considered when planning the lessons. This is also one of the reasons why it's not a good idea for a curriculum to talk about lists (or arrays) before structs: the topics are quite cleary reversed on the path in pedagogical terms. Structs deal with still constant size data, lists/arrays are *the* introduction to arbitrarily sized data (see the wonderful HTDP book for a reference on a very well thought learning path for absolute beginners)." CreationDate="2024-02-13T10:45:25.827" UserId="6546" />
  <row Id="21687" PostId="7978" Score="0" Text="@njuffa I may agree. But, especially regarding pointers, I can't do much: this is the curriculum and my care is to try to make the best out of it." CreationDate="2024-02-13T13:26:04.230" UserId="6546" />
  <row Id="21661" PostId="7979" Score="0" Text="Thanks! These are really interesting starting points. I hadn't thought about ML because I don't know much about it, I'll try to search for something." CreationDate="2024-02-10T18:27:27.310" UserId="6546" />
  <row Id="21666" PostId="7980" Score="0" Text="Upvoted. The first time I heard someone talk about &quot;product types&quot; I thought, why are you using pseudo-mathematical vocabulary to talk about such a practical concept? Why are you trying to hide behind these big words?" CreationDate="2024-02-11T16:34:54.430" UserId="10968" />
  <row Id="21671" PostId="7980" Score="0" Text="@Stef the word &quot;produt type&quot; only really  makes sense if you also introduce the word &quot;sum type&quot; ([introductory example](https://mb21.github.io/blog/2021/01/23/functional-programming.html#algebraic-data-types))" CreationDate="2024-02-12T15:57:48.633" UserId="2167" />
  <row Id="21679" PostId="7980" Score="0" Text="Yes, precisely, this is more or less the point to look for good examples on the theme. The fact that structs will allow us to &quot;return something&quot; will be the crucial point in trying to make them appreciate the idea: it's more or less **the** way through which thay can start to understand what we mean by &quot;expressiveness&quot;. If I just tell them &quot;we want more expressiveness&quot; they will look at me like crazy: they have absolutely no ground to base this term. Yes, structs are a tool for expressiveness." CreationDate="2024-02-13T10:59:19.170" UserId="6546" />
  <row Id="21681" PostId="7980" Score="0" Text="@Stef it's not &quot;pseudo-mathematical&quot;, it's &quot;computer science&quot;. All the concepts that we use have a meaning, when a concept survive through a lot of evolution is because it is useful, and the usefulness of a concept is based also on its practicality. I am not hiding anything, nor know why should you think so. The &quot;conceptual&quot; terms serve their goals of being clear, concise, well known. Moreover, the students would not be bad served by using a good name: the cartesian product carries the same name, it is well linked to the concept, and is the only thing already familiar to the students." CreationDate="2024-02-13T11:07:20.033" UserId="6546" />
  <row Id="21683" PostId="7980" Score="0" Text="Oh I forgot to mention that I like the tokenizing / language context, thanks." CreationDate="2024-02-13T11:14:30.433" UserId="6546" />
  <row Id="21684" PostId="7980" Score="0" Text="@user9137 My point is that &quot;product type&quot; is neither clear nor concise nor well-known, and the main reason it is used when talking about struct in C is to reference the concept of Cartesian product in mathematics. It's a perfect example of using big math words to make things sound more intimidating. This has nothing to do with computer science; it only has to do with using pseudomathematical speech to make things sound more theoretical." CreationDate="2024-02-13T11:20:07.297" UserId="10968" />
  <row Id="21685" PostId="7980" Score="0" Text="@user9137 Please don't believe I'm saying this to attack you. You specifically wrote your question in a way that expressed your worry that students would think the concept is too theoretical and not as useful as &quot;just using several int variables&quot;. I'm telling you that to this day I still remember, back when I was a student and a teacher tried to talk to us about &quot;product types&quot;, how I thought &quot;Why is this teacher trying to make everything sound so abstract and complicated by using big pseudo-mathematical words for simple concepts?&quot;" CreationDate="2024-02-13T11:26:22.140" UserId="10968" />
  <row Id="21686" PostId="7980" Score="0" Text="@user9137 This answer is really on point when it says *&quot;Structs is not about Cartesian products. They are not about the computational power. They are about the expressiveness.&quot;*. What is the difference between (1) two variables z_re and z_im; (2) one array z[2]; (3) one struct z with two fields z.re and z.im? From a very theoretical, very abstract point of view, there is no difference, and no grand speech about Cartesian product is going to make one of the three better than the other two. But when writing your functions to add and to multiply complex numbers you'll wish you chose option 3." CreationDate="2024-02-13T11:31:50.417" UserId="10968" />
  <row Id="21669" PostId="7984" Score="0" Text="Playing Devil's Advocate: You could use N arrays of 1 element instead of 1 array of arrays of N elements (problem =&gt; introducing/removing an element is a pain). You could use named constants for the indexes (problem =&gt; what if the index varies depending on which array is used?)." CreationDate="2024-02-12T13:51:33.580" UserId="1848" />
  <row Id="21674" PostId="7984" Score="0" Text="@MatthieuM. That's actually the way I work in my job. Some equipment dumps out timestamped data to a csv file, and I analyze it with arrays, one for each column. This is less of a pain that I implied in my answer since, luckily, the python Numpy library lets me treat each column of data as a single variable since most mathematical operations are implicitly element-by-element, removing the need for for-loops. Then again, there's no real cohesion in the data in each row other than being measured in the same moment. There's not much gained with a Data struct." CreationDate="2024-02-13T06:16:49.197" UserId="14256" />
  <row Id="21675" PostId="7984" Score="0" Text="Well... in your case it's easy because you're talking about an immutable &quot;struct of array&quot;. Now, try to sort those &quot;virtual&quot; struct based on the lexicographical order of the tuple of the first two &quot;virtual&quot; fields. Good luck ;)" CreationDate="2024-02-13T08:06:34.977" UserId="1848" />
  <row Id="21682" PostId="7984" Score="0" Text="This!! Thanks! Great answer, it deals precisely and accurately with the important points." CreationDate="2024-02-13T11:10:53.257" UserId="6546" />
  <row Id="21688" PostId="7984" Score="0" Text="@MatthieuM. [`numpy.lexsort`](https://numpy.org/doc/stable/reference/generated/numpy.lexsort.html#numpy.lexsort): Get an array of indices that sorts according to the criteria, then use those indices to sort all the other columns in the same way. :)" CreationDate="2024-02-13T13:47:15.837" UserId="14256" />
  <row Id="21689" PostId="7984" Score="0" Text="@MarkH: I am sure the students will be very happy to implement it as a learning exercise :)" CreationDate="2024-02-13T13:49:01.280" UserId="1848" />
  <row Id="21716" PostId="7989" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/151507/discussion-on-question-by-black-storm-what-is-the-best-way-to-learn-practical-co); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2024-02-15T22:36:40.173" UserId="27" />
  <row Id="21719" PostId="7989" Score="2" Text="&quot;we cannot analyze its requirements&quot; why not?" CreationDate="2024-02-16T20:45:17.307" UserId="8266" />
  <row Id="21721" PostId="7993" Score="2" Text="Welcome to the site! Although the assignment won't win any &quot;wow!&quot; awards, it is a complete CRUD application with persistent storage, which seems representative of a large chunk of real-world programming. As far as professor quality: in programs I've been through, I'll inevitably run into an upper-division teacher I don't gel with in a required class. As an instructor, there are students who don't gel with me. While unfortunate, I think it's an important skill to take one's educational outcome into one's own hands at a certain point and learn the material regardless of who's at the helm." CreationDate="2024-02-16T23:38:16.267" UserId="9426" />
  <row Id="21723" PostId="7993" Score="0" Text="I'm not saying that they didn't get along, they got along fine, I'm saying the teacher was not good at teaching. If the professor is being lazy with their teaching assignments, it's going to be a lot more difficult for the students to understand what's going on." CreationDate="2024-02-23T21:59:00.443" UserId="14267" />
  <row Id="21724" PostId="7993" Score="0" Text="I'm not sure &quot;not good at teaching&quot; is an objectively measureable thing. I suspect it's more a matter of fit. I've had some great classes that were pretty hands-off from the teacher and had a blast hacking on my own most of the semester, while other students didn't care for the course. But assuming there are teachers who simply cannot teach (they probably exist, just less than many students assume), as a student, should you blame the teacher and quit as a result of that, or should you learn what you're there to learn anyway? I vote the latter option in most cases." CreationDate="2024-02-23T22:14:04.090" UserId="9426" />
  <row Id="21727" PostId="7993" Score="0" Text="Im with Kelly on this. CRUD is fine; C++ is also fine (ahem). But CRUD in C++ is not. I see this as a bad question" CreationDate="2024-02-27T06:40:25.053" UserId="8837" />
  <row Id="21722" PostId="7994" Score="0" Text="That's a fantastic set of books." CreationDate="2024-02-21T19:05:17.253" UserId="27" />
  <row Id="21728" PostId="7996" Score="1" Text="What evidence do you have for &quot;reduced motivation&quot;?" CreationDate="2024-02-28T14:08:56.140" UserId="1293" />
  <row Id="21729" PostId="7996" Score="0" Text="Note that just recently, the Nvidia CEO suggested kids NOT learn to code. AI is likely to take over low level coding tasks. https://developers.slashdot.org/story/24/02/26/1322242/nvidia-ceo-says-kids-shouldnt-learn-to-code" CreationDate="2024-02-28T14:14:13.297" UserId="1293" />
  <row Id="21730" PostId="7996" Score="1" Text="@Buffy well in a class of 15 at the end I've had 4 students actually working on the project, asking questions and so on, while the rest of them were either sleeping or doing other stuff. Those students were on their last year of a top French engineering school. I've also been teaching to younger students too, one of them asked me a question, and after 20secs of answer, grabbed his phone and scrolled tik tok... I'm not the kind of &quot;police&quot; teacher, they are supposed to be adults and I'm only here to pass knowledge... What I wish for is to find new ways of teaching that would brought them in." CreationDate="2024-02-28T15:35:12.920" UserId="4900" />
  <row Id="21731" PostId="7996" Score="0" Text="Well I'd like to believe that coding has become obsolete, but that's definitively not the case today. We engineers/developers are probably going to have a shift in our work that's for sure, but I think we would always be needed to take a project from idea to reality." CreationDate="2024-02-28T15:38:45.173" UserId="4900" />
  <row Id="21733" PostId="7996" Score="1" Text="This is certainly worthwhile and interesting, but a bit broad. Just navigating AI grading is (at least) a thread of its own. It'd probably take a book or three to really answer this. Also, I don't think questions like this have one-size-fits-all solutions, so having some context for your particular situation might help ensure answers speak to your needs." CreationDate="2024-03-02T04:48:14.467" UserId="9426" />
  <row Id="21747" PostId="7996" Score="0" Text="@ggorlen you're right my question is probably a bit too broad for this site... I knew it but I thought that you guys could provide me some of the answers I'm seeking.&#xA;I'm teaching very technical stuff, such as C, C++, tests, python, TDD, DevOps, Docker... But I'm facing student completely drawn that are able to make believe that they are actually okay-ish. I'd like to help them as i feel like they represent at least half of the student I'm teaching to. I could close my eyes on the situation, but I guess I'd better stop teaching if doing that." CreationDate="2024-03-06T14:34:51.293" UserId="4900" />
  <row Id="21748" PostId="7996" Score="0" Text="Teaching is not my primary source of income, I'm doing it for the pleasure of transmitting my knowledge and of helping student becoming great Engineers or Developers. I was getting and learning a lot from the first years that I've been doing that, and not so much in the last couple years, so I'm really thinking of stopping this activity at least with student. May be I'll feel better with professional trainings. But before going there I hope I can do something with this situation." CreationDate="2024-03-06T14:37:51.530" UserId="4900" />
  <row Id="21734" PostId="8000" Score="2" Text="Thanks for your detailed answer. I should have been more clear on the fact that I am not a CS educator. In fact--maybe this might surprise you--I am a visually impaired high school student." CreationDate="2024-03-02T23:21:54.833" UserId="14297" />
  <row Id="21746" PostId="8000" Score="1" Text="@NapoleonBonaparte You might consider re-asking your question phrased from that perspective, which would be very valuable." CreationDate="2024-03-06T01:44:49.853" UserId="9426" />
  <row Id="21737" PostId="8001" Score="0" Text="Welcome to CSE SE! What exactly is your question? Can you make your question more clearer?" CreationDate="2024-03-04T02:34:23.853" UserId="14297" />
  <row Id="21738" PostId="8001" Score="1" Text="If you have an issue with Coursera, why would you post it somewhere else than in their support forums at all?" CreationDate="2024-03-04T05:10:14.020" UserId="3470" />
  <row Id="21739" PostId="8001" Score="0" Text="Well, maybe I should just post it to Coursera forums. Maybe it's not well suited to a Q&amp;A site like this. But, do people at least still understand what I'm saying in terms of what the issue is? Then on the Coursera forum (which might get less attention) I could post and point back here, and say that experienced people here agree that there's an issue with the example. When people try to ping or go to 172.217.6.46 (the IP address listed in the video) is there also no response? If it did somehow eventually get fixed it could perhaps help others who might get confused at that point in the course." CreationDate="2024-03-04T07:16:40.077" UserId="14303" />
  <row Id="21740" PostId="8001" Score="2" Text="172.217.0.0/16 is registered to Google. The only one who can tell you what's going on with that IP address is Google." CreationDate="2024-03-04T12:08:53.820" UserId="945" />
  <row Id="21741" PostId="8001" Score="0" Text="FWIW I was just talking to my mom over Skype, and we tried it from a computer in Alexandria, Virginia, United States, and the result was, as expected, no response, just as it was when I tried it from Rocky Mount, North Carolina, United States.&#xA;&#xA;I'd be surprised if anybody here were to report here that that IP address 172.217.6.46 brings up the Google homepage." CreationDate="2024-03-05T04:50:18.597" UserId="14303" />
  <row Id="21742" PostId="8001" Score="0" Text="Certainly from a theoretical point of view within an open network by default any node ought to be able to reach any other node. So anybody who has a static IP could set up a website on the Internet that would be accessible by anybody else on the Internet -- But that wouldn't be a well-known website like Google or YouTube or Wikipedia. Those much larger websites are not just single computers with a single IP address." CreationDate="2024-03-05T04:51:50.843" UserId="14303" />
  <row Id="21743" PostId="8001" Score="1" Text="At the same time, perhaps what happened is that the example *did* work initially, even across the whole Internet. But Google's network configuration changed since the video was recorded, and there isn't really a lot of infrastructure to keep the course constantly updated." CreationDate="2024-03-05T04:52:16.557" UserId="14303" />
  <row Id="21744" PostId="8001" Score="0" Text="I suppose there can be that tradeoff between text and video for a MOOC or for any course. Video can be really engaging, and help people to learn, but text can be much easier to update/change/rearrange, etc. The other thing I thought could be cool is to have adaptive quizzing/testing. If a student gets medium questions right then it can go to harder question, and if medium questions are gotten wrong then go to easier questions. Anyway, perhaps could share some of these thoughts on the relevant Coursera discussion forum. I don't want to go on for too long here." CreationDate="2024-03-05T05:12:15.520" UserId="14303" />
  <row Id="21745" PostId="8001" Score="0" Text="Actually, some people about a month ago on Coursera raised the same issue in the discussion forums there. Note that there's a Coursera paywall to access the discussion forum: [Coursera -&gt; Google Technical Support Fundamentals -&gt; Discussion Forums -&gt; Module 4 -&gt; 172.217.6.46](https://www.coursera.org/learn/technical-support-fundamentals/discussions/forums/EgQGYwhGEe2_RhLaVPvqJQ/threads/xtLzNr15Ee6bbwo1s9RgVw)" CreationDate="2024-03-05T06:07:46.593" UserId="14303" />
  <row Id="21764" PostId="8001" Score="0" Text="Can you just show them the command to do the lookup themselves?" CreationDate="2024-03-11T00:51:18.700" UserId="1275" />
  <row Id="21750" PostId="8002" Score="13" Text="To me they are definitively not the same field, even if they are close. What you refer to is more IT related. When you're a developer you can with minimal effort get into those topics, when you're into IT related topics, you can't really become a developer because you will lack the necessary basis that you would have learned while becoming a developer." CreationDate="2024-03-08T08:43:37.567" UserId="4900" />
  <row Id="21753" PostId="8002" Score="20" Text="This sounds a bit like asking why a degree in nuclear physics doesn’t cover how to safely operate a nuclear reactor or a radiotherapy machine. There’s _some_ overlap, but the specific skills in question need knowledge well beyond the degree field to be good at them." CreationDate="2024-03-09T17:57:27.850" UserId="2523" />
  <row Id="21754" PostId="8002" Score="3" Text="Other educations teach those things.  Computer science gives the principles and you are expected to be smart enough to pick up the actual details on your own." CreationDate="2024-03-10T10:36:48.927" UserId="1213" />
  <row Id="21755" PostId="8002" Score="1" Text="I was being practical. The way CS/CSE degree are advertised can fool many like me." CreationDate="2024-03-10T10:39:32.827" UserId="13955" />
  <row Id="21758" PostId="8002" Score="16" Text="After reading the title and before reading the question, i thought this question would be about why so much programming is taught instead of &quot;real&quot; computer science like algorithms ;)" CreationDate="2024-03-10T20:48:40.793" UserId="1645" />
  <row Id="21765" PostId="8002" Score="0" Text="Since the administrative fields you mention provide the infrastructure needed to successfully develop and run software, my comparison would be &quot;why is driving a race car so much prioritized compared to street construction workers and car mechanics?&quot; You may guess that I'm a software engineer. ;-) And true, no race can be won with a mediocre motor, and building a perfect one is an art, like anything that is brought to perfection. But in the end, it is a car with a driver that needs to cross the finish line. All the rest *provides the infrastructure* to that end." CreationDate="2024-03-11T01:57:00.393" UserId="1675" />
  <row Id="21766" PostId="8002" Score="11" Text="You may be more interested in an IT degree instead of a CS degree. They're two very different courses. In my humble opinion a CS graduate is specifically expected to be able to **create** software that an IT graduate can use to perform their jobs." CreationDate="2024-03-11T04:02:38.013" UserId="5450" />
  <row Id="21767" PostId="8002" Score="0" Text="FWIW, I'd like to note that in my 20 years experience I've had just as many managers who came from CS background as those who came from an BEng background or IT background or even a Business Management background. So if you are only interested in managing software projects instead of writing code then the other degrees may be of more interest to you." CreationDate="2024-03-11T04:05:23.423" UserId="5450" />
  <row Id="21774" PostId="8002" Score="0" Text="Database design and theory is covered on some CS and CS-adjacent degrees. What exactly do you mean by &quot;database admin&quot; - controlling user access, accounts, backups, etc; optimising for specific systems; designing databases; or something else? Some of these are very software-specific so it doesn't make a lot of sense to teach on a general degree, while others aren't very sophisticated." CreationDate="2024-03-11T11:59:56.247" UserId="14327" />
  <row Id="21787" PostId="8002" Score="2" Text="Basically, IT is to software engineering what electricians are to electrical engineering or what auto mechanics are to mechanical engineering. (And IT is to pure computer science what auto mechanics or electricians are to theoretical physics.) All of the above (except maybe the pure theorists) have a pretty solid level of technical knowledge, but the former are trained to use and maintain a specific system or class of systems, while the latter are trained to design those systems (or, in the case of the theorists, develop/discover the theory needed to design them.)" CreationDate="2024-03-11T22:51:58.177" UserId="1319" />
  <row Id="21749" PostId="8003" Score="1" Text="You can approach software development w/o CS background." CreationDate="2024-03-08T03:36:56.277" UserId="13955" />
  <row Id="21751" PostId="8003" Score="1" Text="yes of course, @barnyard9 - I didn't say otherwise" CreationDate="2024-03-08T10:09:29.100" UserId="2357" />
  <row Id="21752" PostId="8003" Score="1" Text="@barnyard9 Yes, you can, but you'll always lag behind." CreationDate="2024-03-09T16:55:40.820" UserId="6216" />
  <row Id="21762" PostId="8004" Score="1" Text="Right, abstraction and implementation require each other, else you just have &quot;one hand clapping&quot;. I like your sentence: &quot;CS is about the future of things.&quot;" CreationDate="2024-03-10T22:41:55.700" UserId="5349" />
  <row Id="21785" PostId="8005" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/151977/discussion-on-answer-by-jorg-w-mittag-why-is-programming-so-much-prioritized-i); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2024-03-11T20:23:20.153" UserId="27" />
  <row Id="21757" PostId="8007" Score="0" Text="Computer science is about the underlying math, not as much on what actual computers actually run." CreationDate="2024-03-10T19:13:22.203" UserId="1213" />
  <row Id="21771" PostId="8007" Score="0" Text="@ThorbjørnRavnAndersen Any guidance available? I'm really passionate about CS because of its heavy usage in real life jobs." CreationDate="2024-03-11T10:34:58.833" UserId="13955" />
  <row Id="21772" PostId="8007" Score="1" Text="You are misunderstanding - computer science is about _what_ is theoretically computable (Turing machines and complete etc), and not as much on _how_ to do it (programming languages, databases, webservers).  You may want to contact your local university to see if their CS department can help you with pointers to good learning resources." CreationDate="2024-03-11T10:52:27.397" UserId="1213" />
  <row Id="21773" PostId="8007" Score="0" Text="&quot;resources&quot; isn't what I'm stuck with. Techniques is it. I've all the reference books mentioned in my degree's syllabi" CreationDate="2024-03-11T11:03:45.600" UserId="13955" />
  <row Id="21783" PostId="8007" Score="1" Text="@ThorbjørnRavnAndersen And yet Computer Science advertises itself as very much hands on if you look at CS departments. Boasting about their robotics team, or the cybersecurity group etc... So are the ways that CS departments across universities portray themselves a lie? And implying that they are more hands on then they really are?" CreationDate="2024-03-11T20:02:11.193" UserId="14332" />
  <row Id="21784" PostId="8007" Score="0" Text="@questor strongly depends on which CS departments you look at. My guess would be that each of these has a core person who has carved a niche." CreationDate="2024-03-11T20:12:10.763" UserId="1213" />
  <row Id="21786" PostId="8007" Score="1" Text="This is every CS department that I have looked at. From the community college to MIT, to Syddansk Universitet.. All of them advertise their CS degrees as teaching their student how to build something. make something... And then you talk to professors and they talk about how Computer science is the really about the theory of computation... And then you look at the code that Computer scientists at universities produce. And you realize why what they teach is the theory rather then the application." CreationDate="2024-03-11T20:30:11.110" UserId="14332" />
  <row Id="21756" PostId="8008" Score="2" Text="Programming=/=software development. I too can script." CreationDate="2024-03-10T13:52:12.880" UserId="13955" />
  <row Id="21760" PostId="8008" Score="2" Text="Yes. It is more important to have ideas about what to build than to be great at building it. Successive Approximation will refine a possible answer, but it will not tell you how to get started. Doing things &quot;by rote&quot; is not creative or productive. If someone doesn't have enough background, they won't be able to come up with new solutions, or even reuse old solutions from someone else." CreationDate="2024-03-10T22:34:41.143" UserId="5349" />
  <row Id="21792" PostId="8008" Score="0" Text="@barnyard9, but programmers = software developers. I'm not sure there is any widely accepted distinction, but where software development differs from merely scripting is typically in the amount of business analysis and conceptual design required." CreationDate="2024-03-14T12:55:26.927" UserId="9075" />
  <row Id="21793" PostId="8008" Score="1" Text="@Steve Writing scripts is programming, but that doesn't make a script writer a &quot;programmer&quot;, just as constructing a treehouse doesn't make you an architect. Scripts written by non-programmers may be minimally functional, but they're often cringeworthy to a &quot;real programmer&quot;." CreationDate="2024-03-14T15:10:30.170" UserId="1471" />
  <row Id="21795" PostId="8008" Score="0" Text="@Barmar, I agree you don't become a programmer just because you write one script or put a few formulas in Excel. There has to be something substantially occupational about it." CreationDate="2024-03-14T17:30:07.983" UserId="9075" />
  <row Id="21770" PostId="8009" Score="1" Text="Knuth developed TeX ([not LaTeX](https://en.wikipedia.org/wiki/Leslie_Lamport#LaTeX) BTW) as a side-project. I don't think he would consider it an important part of his computer science output (though it is undoubtably his most influencial contribution to _sciences_, and probably took up a good chunk of his time)." CreationDate="2024-03-11T10:28:17.417" UserId="1157" />
  <row Id="21788" PostId="8009" Score="0" Text="@leftaroundabout you are absolutely right, I commingled TeX with LaTeX - the name associated with LaTeX is Leslie Lamport, while TeX is written by Donald E. Knuth!" CreationDate="2024-03-12T09:39:34.433" UserId="1332" />
  <row Id="21791" PostId="8013" Score="0" Text="That's really a nice perspective. I never thought like that. Thanks." CreationDate="2024-03-14T11:50:58.733" UserId="13955" />
  <row Id="21794" PostId="8013" Score="1" Text="I agree with most of what you've written, and much of it seems like what you might expect in a relatively new and rapidly expanding field.  As more types of computing degrees are offered, some of this will sort itself out over time, though I wouldn't expect to see any serious stability until the state of the field is relatively stable, and that may still be a long time coming." CreationDate="2024-03-14T16:29:04.183" UserId="27" />
  <row Id="21796" PostId="8014" Score="0" Text="This does not answer the question; you have not addressed how CS professors communicate the visual aspects of data structures to a blind student." CreationDate="2024-03-14T19:38:34.557" UserId="14297" />
  <row Id="21797" PostId="8014" Score="0" Text="@NapoleonBonaparte, I'm suggesting that there are no visual aspects, only spatial aspects. Although I'm not familiar with exactly how spatial information can be best conveyed to a blind person, I can imagine a verbal description, the use of embossed/engraved surfaces to represent maps, and analogies drawn with physically-structured spaces (such as a stockroom with shelves and bins marked systematically in Braille) could be effective possibilities. I assume a blind person is still capable of conjuring a spatial schematic in their mind's eye, because sight is not the only way to perceive space." CreationDate="2024-03-14T20:30:21.523" UserId="9075" />
  <row Id="21798" PostId="8014" Score="0" Text="I think it would be helpful if you include this information to your answer." CreationDate="2024-03-14T21:16:08.220" UserId="14297" />
  <row Id="21799" PostId="8014" Score="0" Text="@NapoleonBonaparte, it already is included, in the sense that we have engaged in a clarifying dialogue adjacent to the original answer. Essentially I've ended up frame-challenging your question because your additional remarks make clear how you think there is something intrinsically visual about data structures, which I deny. But when I originally wrote my answer, I was less clear that this was the issue at stake. (1/3)" CreationDate="2024-03-14T23:21:29.293" UserId="9075" />
  <row Id="21800" PostId="8014" Score="0" Text="Rather, I thought either you were asking for alternatives about how to convey information that is conventionally conveyed using viewable artefacts (which by emphasising the spatial nature of data structures, I thought might trigger you to work out a method based on how you normally receive other information about spatial placement, given that I'm no expert on the blind, whereas you are blind), or potentially I sensed there could be some other misunderstanding about the nature of what data structures are (which led to the food recipe and kitchen analogy). (2/3)" CreationDate="2024-03-14T23:23:08.757" UserId="9075" />
  <row Id="21801" PostId="8014" Score="0" Text="I've ended up speculating in my comment about how spatial information may be conveyed to the blind or what cognitive facilities they may have, but really you'd have to say whether any of that speculation rings true or not. (3/3)" CreationDate="2024-03-14T23:28:50.293" UserId="9075" />
  <row Id="21802" PostId="8014" Score="0" Text="Thank you for your replies. Sure, data structures are not inherently visual in nature, but they are often represented by tangible (or more concrete) platforms, e.g., graphics, which are used to concretize the abstract aspects that are important in many practical computing applications. For example, when deriving a new algorithm, it is much easier to draw an equivalent representation of the structure than to &quot;spacialize&quot; everything in one's mind (1/2)" CreationDate="2024-03-15T01:32:57.773" UserId="14297" />
  <row Id="21803" PostId="8014" Score="0" Text="I think I should have been more clear with my question. In short, how does a teacher communicate or convey the visual aspects of the image that is used to concretize the abstractness which you have suggested?" CreationDate="2024-03-15T01:40:06.610" UserId="14297" />
  <row Id="21806" PostId="8014" Score="0" Text="@NapoleonBonaparte, I suspect your real question may be very general in nature, about what good practices and useful facilities exist to convey various kinds of information in and out of the minds of the blind. I can't myself speak with any authority on that topic - I'm left largely to imagine. I suspect talking to educators who work with the blind, or the blind themselves, even if they are not familiar specifically with computer science, would yield much more information." CreationDate="2024-03-15T11:33:57.977" UserId="9075" />
  <row Id="21809" PostId="8017" Score="2" Text="Thanks a lot for your comment!! That is a very good strategy! To have a stage where the need to be in front of you and tell them that if they cheat on the excercises they are cheating themselves" CreationDate="2024-03-17T20:07:26.847" UserId="14350" />
  <row Id="21842" PostId="8018" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/152144/discussion-on-question-by-alma1r-how-long-would-it-take-an-average-theoretical-c); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2024-03-20T18:43:54.357" UserId="27" />
  <row Id="21841" PostId="8019" Score="0" Text="**Comments have been [moved to chat](https://chat.stackexchange.com/rooms/152143/discussion-on-answer-by-buffy-how-long-would-it-take-an-average-theoretical-comp); please do not continue the discussion here.** Before posting a comment below this one, please review the [purposes of comments](/help/privileges/comment). Comments that do not request clarification or suggest improvements usually belong as an [answer](/help/how-to-answer), on [meta], or in [chat]. Comments continuing discussion may be removed." CreationDate="2024-03-20T18:43:19.007" UserId="27" />
  <row Id="21843" PostId="8020" Score="1" Text="Why not ask Stanford?" CreationDate="2024-03-22T21:44:40.857" UserId="1293" />
  <row Id="21846" PostId="8020" Score="0" Text="@Buffy Do they have a support line? If they do I can't find it." CreationDate="2024-03-23T15:49:13.617" UserId="14365" />
  <row Id="21847" PostId="8020" Score="0" Text="Have you checked for white space differences?" CreationDate="2024-03-24T08:24:02.703" UserId="13024" />
  <row Id="21848" PostId="8020" Score="0" Text="@Kai a `diff` of the first two shows no difference until line 38. Regardless, the reason I want to use Moss is that it &quot;sees&quot; past surface level differences like whitespace and spelling." CreationDate="2024-03-24T10:16:07.053" UserId="14365" />
  <row Id="21849" PostId="8020" Score="0" Text="Disclaimer: I'm doing this from memory. Can't check now. But anyway. Moss's first chunk is lines 1-62, which includes that line 38. When it does pick up on issues in copies of provided code it's often due to weird extra white space changes that are rare but not singular among the submitted files." CreationDate="2024-03-24T12:46:38.143" UserId="13024" />
  <row Id="21844" PostId="8021" Score="2" Text="Note that JUnit was developed to support &quot;test first&quot; or &quot;test driven development&quot;. Are you willing to do that? An implication is that assignments need to be differently structured." CreationDate="2024-03-23T11:56:58.063" UserId="1293" />
  <row Id="21845" PostId="8021" Score="3" Text="Maven and Gradle are popular Java project management and build tools.  Their popularity is well earned, but as far as I am aware, they are not essential to using JUnit, or most other Java frameworks. I confess, that most of my first-hand experience with JUnit dates mostly to before Maven and Gradle existed, but I'm pretty sure you can still do things the old-school way: manually download JARs and put them in the classpath." CreationDate="2024-03-23T13:10:09.270" UserId="14367" />
  <row Id="21850" PostId="8021" Score="0" Text="@Buffy I've sketched TDD for the class but it's impossible in a 16-week semester." CreationDate="2024-03-24T14:40:09.623" UserId="8756" />
  <row Id="21851" PostId="8021" Score="0" Text="@JohnBollinger jUnit 5 (&quot;jupiter&quot;) doesn't actually list the JARs at all, it basically says &quot;Maven or Gradle&quot;?" CreationDate="2024-03-24T14:41:07.293" UserId="8756" />
  <row Id="21852" PostId="8022" Score="0" Text="Yes, thank you. I might be able to whip up some kind of setup — but isn't that what jUnit (or TestNG) should do out-of-the-box?" CreationDate="2024-03-24T14:42:15.387" UserId="8756" />
  <row Id="21853" PostId="8024" Score="21" Text="Do you have an example?" CreationDate="2024-03-25T16:22:51.557" UserId="9426" />
  <row Id="21857" PostId="8024" Score="6" Text="There are parts of a computer science education that are science-like (or at least, effectively mathematics). Lots of it is basically trade school skills (learning the syntax of languages, specific APIs and compiler toolsets, etc.). You're going to need to give an example for the answers to be anything more than generalities that may have no bearing whatsoever on your actual concern." CreationDate="2024-03-25T23:24:33.333" UserId="5419" />
  <row Id="21860" PostId="8024" Score="2" Text="@ggorlen The example is that the lecturer said that one should put test code as a comment above the method, as it is clearer that there is a test for all methods. I thought it would be useful to put tests in a separate file so that testers and developers can work separately, although in this course we write code and tests individually." CreationDate="2024-03-26T14:30:27.517" UserId="14373" />
  <row Id="21862" PostId="8024" Score="7" Text="@guest That sounds an awful lot like a course-specific requirement or instructor preference. It wouldn't be common in industry, but it would make grading so much easier." CreationDate="2024-03-26T14:50:58.130" UserId="14329" />
  <row Id="21864" PostId="8024" Score="5" Text="@guest Thanks. Can you [edit] the post to provide that context? Showing an actual example of the code you're discussing might help. How would test code execute if it's in a comment? Or are you referring to [Python's doctest](https://docs.python.org/3/library/doctest.html)? Whether something is good practice or not often depends on these details. I understand you're asking generally, but starting with specifics, then moving general is a good approach." CreationDate="2024-03-26T15:54:06.363" UserId="9426" />
  <row Id="21865" PostId="8024" Score="4" Text="I'm not seeing that your example is &quot;non-scientific&quot; at all." CreationDate="2024-03-26T16:41:41.850" UserId="5379" />
  <row Id="21866" PostId="8024" Score="3" Text="Also, how would one &quot;prove&quot; (in a mathematical sense) that one way of testing is better than another? Or if you're not referring to a mathematical proof, what evidence are you expecting? How did you come to the conclusion that the teacher's approach isn't best practice?" CreationDate="2024-03-26T17:47:11.103" UserId="9426" />
  <row Id="21868" PostId="8024" Score="0" Text="@ojchase In both Python and Rust, doctests are fairly common." CreationDate="2024-03-27T00:18:54.210" UserId="6174" />
  <row Id="21870" PostId="8024" Score="3" Text="There's a big difference between &quot;science&quot; and &quot;best practice&quot;, since much practical computer programming and software engineering is based on tradition rather than science." CreationDate="2024-03-27T14:48:05.897" UserId="1471" />
  <row Id="21878" PostId="8024" Score="0" Text="It sounds like the OP isn't a fan of the teacher and is looking for an excuse to make them look bad, or OP may be suffering from Dunning-Kruger, thinking that they know a &quot;better&quot; method than the teacher just because they're used to doing things differently and doesn't want to adapt?" CreationDate="2024-03-28T19:14:57.017" UserId="14393" />
  <row Id="21855" PostId="8025" Score="14" Text="&quot;2. To do otherwise would be ...&quot; self-defeating seems a more apt adjective." CreationDate="2024-03-25T21:39:48.973" UserId="14374" />
  <row Id="21856" PostId="8025" Score="2" Text="@user121330 LOL that's a good word, too :)" CreationDate="2024-03-25T21:52:10.190" UserId="27" />
  <row Id="21871" PostId="8025" Score="0" Text="@BenI. I wouldn't say that not following a teacher's advice is disrespectful. If you have your own way of doing something, and they give you some advice of something to do, sure, you should try it (not doing so is disrespectful for sure), but it you don't think it works as well as what you were already doing, don't keep trying." CreationDate="2024-03-28T01:14:56.717" UserId="14387" />
  <row Id="21872" PostId="8025" Score="1" Text="@Daemonic It would also depend on whether it's advice or a requirement. I've had teachers where something like this would be a hard requirement. Not following it would result in you failing the class. If it's just advice on how they think it can be done better, absolutely see if it works for you, but if it doesn't, you don't have to follow it." CreationDate="2024-03-28T11:00:18.843" UserId="14390" />
  <row Id="21863" PostId="8026" Score="3" Text="&quot;which would never be used in practice&quot;... if only. +1 though." CreationDate="2024-03-26T15:12:15.587" UserId="14380" />
  <row Id="21867" PostId="8026" Score="1" Text="&quot;in-class examples should never be &quot;best practice&quot;&quot; And this is why some many examples of bad practices exist in real life today... I guess I shouldn't blame students for doing what they were taught.... I do. But I shouldn't. The CS teachers are really the people to blame...." CreationDate="2024-03-26T20:47:57.067" UserId="14332" />
  <row Id="21869" PostId="8026" Score="0" Text="@Questor: I think it's less that they aren't the &quot;Best practice you'll always need to abide by&quot; - depending on the level of the given course, it is common for someone to focus on the syntax, and then the algorithms that can help with a task, before we focus on &quot;Make every variable a symbolic constant&quot;, and &quot;Make sure that you're never four levels of indentation deep&quot;; chances are, the best practice will change, and then you'll have to adapt to that new best practice - but the other things will transfer. And you'll learn to break a best practice when it's necessary (See: SRP vs Singletons.)." CreationDate="2024-03-27T08:35:03.327" UserId="11492" />
  <row Id="21873" PostId="8026" Score="1" Text="&quot;we went from needing to know Design Patterns in an interview to &quot;Design Patterns are Ruining Code&quot;&quot; First time I'm hearing that! And from the comment it sounds ubiquitous. Got any links or anything to read more on that? I'm curious to learn why people are allegedly thinking that nowadays" CreationDate="2024-03-28T14:03:14.240" UserId="14393" />
  <row Id="21874" PostId="8026" Score="0" Text="@kirgod Ha! I've done that -- assumed something was obscure enough I'd need a link. But in this case googling &quot;design patterns are ruining code&quot; is a flood." CreationDate="2024-03-28T16:30:41.163" UserId="8773" />
  <row Id="21875" PostId="8026" Score="0" Text="@David I thought about mentioning how practical &quot;best practice&quot; often involves about 15% hack-tastic fixes to get it working, but that seemed a bit off-the-track. I mean, I once pasted in a selection sort to handle parallel arrays, and it was fine." CreationDate="2024-03-28T16:37:21.017" UserId="8773" />
  <row Id="21877" PostId="8026" Score="0" Text="@OwenReynolds I googled it indeed, and got people asking in reddit, quora, and stackoverflow. Actual articles (or columns) were only about 3, one of them being on anti patterns, one about rethinking design patterns (the preview saying people often misuse patterns), and the rest of the results being guides on design patterns. I guess it's not really that common if the majority of search results for &quot;design patterns are ruining code&quot; are guides on how to use design patterns. If you have any proper articles on the topic outside of &quot;google it&quot;, I'd be happy to read them!" CreationDate="2024-03-28T19:09:34.983" UserId="14393" />
  <row Id="21858" PostId="8027" Score="4" Text="A real-life application of bubble sort is distributed bubble sort. Imagine each item is sentient and able to interact with its neighbours. For instance, imagine you're asking actual people in a single queue to the cinema, to sort themselves by time of the screening they have a ticket for. What will they do? Most likely, everyone will just switch places with any person directly in front of them which has a later screening, and with any person directly behind them which has an earlier screening, until the queue of people is stable. That's distributed bubble sort." CreationDate="2024-03-26T14:24:42.263" UserId="10968" />
  <row Id="21859" PostId="8027" Score="0" Text="Also, if you take as granted that the bubble sort algorithm is correct (ie it successfully sorts any list) then it immediately follows the following theorem from group theory: [the subset of transpositions (i,i+1)](https://proofassistants.stackexchange.com/questions/2280/have-ideas-from-programming-helped-us-create-new-mathematical-proofs/2283#2283) [generates the group of permutations](https://math.stackexchange.com/questions/2521413/how-can-two-elements-of-group-s-4-generate-the-whole-group-s-4/3448424#3448424)." CreationDate="2024-03-26T14:28:32.507" UserId="10968" />
  <row Id="21861" PostId="8027" Score="2" Text="@Stef yes, there are derivatives of bubble sort which include optimisations. This supports my point that learning the base version is sometimes necessary although never used in practice." CreationDate="2024-03-26T14:43:53.123" UserId="13430" />
  <row Id="21876" PostId="8028" Score="0" Text="I think the right answer depends on the level of class. In mine I assumed it was freshman programming, you seem to be assuming it's jr. level software engineering. The Q is labelled intro, but then they talk about test cases, so who knows." CreationDate="2024-03-28T16:39:22.257" UserId="8773" />
  <row Id="21879" PostId="8031" Score="2" Text="I find it hard to approach this question because I absolutely reject your premise. What in the world do you mean by &quot;cleverness&quot;?" CreationDate="2024-03-29T11:25:05.287" UserId="27" />
  <row Id="21880" PostId="8031" Score="1" Text="Please define &quot;clever&quot;. What led you to conclude that CS is all about taking clever decisions? The only context I hear &quot;clever&quot; being used regularly is in programming, where it's applied as a criticism of code that uses fancy syntactical tricks when a simple idiom would suffice. In the &quot;real world&quot;, we strive for code to _not_ be clever to lower the maintenance cost." CreationDate="2024-03-29T17:44:40.033" UserId="9426" />
</comments>