13 ms·
> If a student has trouble transferring their knowledge of programming fundamentals “Programming fundamentals” isn’t the same from language to language. It’s i
by wyager 5y ago
> If a student has trouble transferring their knowledge of programming fundamentals
“Programming fundamentals” isn’t the same from language to language. It’s inconceivable that a student who learned to program with python would develop the same type of fundamental understanding as a student who used C (to develop an understanding of memory-level APIs) or Haskell (to develop an understanding of type and semantic theories).
> which is a failure of teaching and testing, not some sort of 'limitation' in the student.
This is a bold claim. I don’t think everyone can understand computer science.
- Retric 5y agoI think you’re vastly overestimating programming fundamentals. Every language can do some form of if then else be it machine code with goto’s or purely functional. Ask someone to find the absolute value of a number and they should be able to quickly figure out something that works in a new language. The basics of programming are not about being correct so much as not being lost.
- josephg 5y ago> Every language can do some form of if then else Uh, not exactly. I had a really hard time learning prolog because it doesn't really have if-then-else. Haskell is missing the idea of something happening after something else. Stack languages don't have variables. And so on - there's a lot more to programming than python. There's a big class of popular structured / OO languages which are quite similar (C, JS, Python, Java, etc). But they certainly aren't "every language". Not by a long shot. And even amongst those languages there's huge variety in how the grain of the languages shape the code we write. I was talking to a grizzled old programmer at a conference a few years ago about the performance of java vs C. He said in some benchmarks he did the performance was almost identical. I got him to show me his code - and sure enough, he wrote java as if it were C. He was using native java arrays everywhere and basically everything was a primitive variable, in huge classes acting more as buckets for code than anything else. His code was unrecognisable as java because he was still writing C, just with a different syntax. > The basics of programming are not about being correct so much as not being lost. The basis of programming is expression. The most idiomatic way to express yourself in each language is very different. Its as much cultural as it is syntactic.
- kaba0 5y agoJust a nitpick, but this is false > Haskell is missing the idea of something happening after something else A Monad is implicitly a monoid, which certainly does specify an ordering. And as for expressions, the order of evaluation of arguments is not specified either by C for example.
- thaumasiotes 5y agoThe bigger problem is that "something happening after something else" is not related to the idea of an if-then-else. In Common Lisp the if-then-else construct is IF. The "something happening after something else" construct is PROGN. The whole point of if-then-else is that only one thing happens; "something happening after something else" requires a minimum of two things.
- kaba0 5y agoI don't really get your point. If/else expressions are in principle free to evaluate both branches, but that would be needless. But when we provide an IO Monad for example, if/else expressions will not suffice in the naive way -- you have to use the monad "bind" operation to actually provide an order -- what it boils down to basically: the A; B; C; in imperative languages become C(B(A())) in pure FP ones -- with implicit ordering.
- thaumasiotes 5y ago> If/else expressions are in principle free to evaluate both branches, but that would be needless. This is true only in a pure functional language; if you admit the existence of side effects, then it is a crucial part of an if statement that the code associated with the other branch is never executed. My point is just that it makes no sense to say "some languages have no form of if statement; for example, Haskell doesn't have the concept of one thing happening after something else". That example is untrue. But if it were true, it still would not interfere with Haskell's ability to have an if statement. Thus, defending Haskell's ability to run one statement after another statement is unnecessary to refute the claim; the claim never worked in the first place.
- andai 5y agoMost programmers are not computer scientists. Even most people with computer science degrees are not computer scientists at heart, they forced themselves to do the coursework so they could get a job (mostly web, utilizing almost nothing they were taught). I learned to program as a child (I taught myself, for fun!) but I didn't learn much computer science until well into adulthood.
- pkdpic_y9k 5y agoAs someone who fought hard to switch careers into this industry and teaches software engineering now I understand the impulse to think this but I have to say all my experience thus far contradicts it.
- andai 5y agoWhich part(s)?
- aYsY4dDQ2NrcNzA 5y agoPossibly replying to someone else.
- SilurianWenlock 5y agoWhy does web dev not use much formal cs in your opinion?
- throwaway2037 5y agoThis is an interesting question. From personal experience, I have also found simple GUI work to the "digging ditches" work of programmers. (Weirdly, I still love it, because it makes it easy for end-users to understand your tools!) Of course, complex GUIs are another beast, but usually GUI programming on the low end as it is very hard to test (easily) and requires endless tweaks due to the high configurability of GUIs. For example, if you just look at GUIs created using Excel/VBA, you will find they seem to need endless tweaking to work just right (edge cases?), but do not at all require a formal CS degree. (I have worked with many non-CS people who are fine a mid-level Excel/VBA stuff.)
- okwubodu 5y ago> “Programming fundamentals” isn’t the same from language to language. You should be able to carry very, very basic concepts over to other languages with much less difficulty than learning them the first time. A student sufficiently skilled in Python will be able to make the same intro level programs in C given enough time. Badly? Yes, but they'll function. Similarly, a watercolor artist won't forget the basics of art when handed a pencil.
- aYsY4dDQ2NrcNzA 5y ago“… sufficiently skilled […] given enough time …” Well, sure. For some values of sufficiently and enough.
- okwubodu 5y agoSufficiently skilled: understands the topic in their chosen language. Enough time: however long it takes them to learn the syntax of the second language + the time it took to complete the project in the first language. Unfortunately I can't give decimal precision hour estimates.
- d18g 5y agoLearning the syntax of a language is far from understanding the sementics.
- swiftcoder 5y agoC and Python are also languages with a pretty direct historical relationship. Going from, say, Python to Prolog, it will be significantly more challenging to identify commonalities.
- benrbray 5y ago> I don’t think everyone can understand computer science. This is a bold claim. None of us are special for working in tech. Our life has presented us the opportunity and passion to invest ourselves deeply in the field, often at great opportunity cost. Saying that a bad teacher makes no difference in student outcomes is equally ridiculous as saying an excellent teacher makes no difference in student outcomes. If that's the case, we should be able to replace professors with cardboard cutouts, no? I was a student and TA long enough to witness directly the impact that a thoughtful curriculum can have on students.
- syops 5y agoThe person you responded to didn't make any claims about bad teachers or good teachers. The claim is that not everyone can understand computer science. As an extreme example do you think a person who is mentally disabled can understand computer science? From my perspective it's clear to me that not everyone can understand computer science and the same applies to many academic areas.
- judge2020 5y agoNot everyone can understand computer science, but I think the OP meant that your socioeconomic status matters more - gradual learning from age 10 makes college-level education a breeze compared to being disadvantaged well into high school and only using computers in order to live and use essential services. I agree that the whole bad vs. good teachers thing is off-topic, though.
- benrbray 5y agoThe grandparent comment was about teaching, so I interpreted the parent comment to mean that "innate ability matters much more than good teaching", which my personal experience teaching people disagrees with. And sure, the statement "not everyone can understand computer science" is technically true if you include people with mental disabilities. But in reality, some people draw the line a lot higher as a form of gatekeeping. I've known a number of professors who let themselves off the hook this way too: Poor student performance couldn't possibly be a failure of their teaching--the students must not be smart enough!
- nyanpasu64 5y agoHaving learned C++ and Python, I feel they're similar in programming model (imperative, object-oriented). My limited experience with application or kernel C code feels like C++ but with high-level constructs replaced with pointer juggling that makes me feel uneasy (C has a culture of not using vocabulary types to communicate nullability and responsibility for deallocating). Haskell (barely know) is an altogether unfamiliar programming model, being based on pure functions instead of mutation, but the underlying model beneath the abstractions (thunks) leak through.
- AnimalMuppet 5y agoExpanding on this a bit... You could think of there being a universe U of programming fundamentals. Each language uses a subset of U as the language's fundamentals (no language uses all of it), and each language uses a different subset. Some languages have subsets that overlap, but that isn't always obvious, because they clothe the same thing in different syntax and, sometimes, different semantics. Even when the semantics are the same, they talk about the semantics using different terms. So the problems with transferring knowledge of the fundamentals from one language to another are that they aren't the same fundamentals (different subsets of U), and that they are expressed in different terms and in different syntax. That can make it hard to recognize that the parts that are in common actually are the same. And then there's the new parts. Now here's a class in C#. One student comes in knowing Haskell; one comes in knowing Python; and one comes in knowing C. The "fundamentals to transfer" differ from student to student. It's asking a lot for the teacher to be able to help each student recognize what part of their background transfers, what part of C# it transfers to, and what the deeper fundamentals are that are expressed in both languages. An exceptional teacher could certainly do so, but as the adjective implies, such teachers are the exception. But it's not really fair to blame the student, either. It's asking a lot of a 19-year-old to understand deeply enough to make those connections. My own guess is that this happens best after working as a professional for several years, and in more than one language. Then it's somewhat easier to see what's going on "under the hood" of the languages.
- whakim 5y ago> “Programming fundamentals” isn’t the same from language to language. It’s inconceivable that a student who learned to program with python would develop the same type of fundamental understanding as a student who used C (to develop an understanding of memory-level APIs) or Haskell (to develop an understanding of type and semantic theories). I think this is a pretty good point and it touches upon something I was thinking about: what language you use to introduce students to computer science says a lot (not everything!) about your pedagogical attitude towards what "computer science" is. If you think that it's fundamentally about humans interacting with machines, then low level languages make sense. If you think it's fundamentally about math, then functional languages make sense. If you think it's about building things which provide a lot of real-world value, then something like Python makes sense. Now of course (1) students probably need to learn about all three at some point; and (2) there are a number of other factors here, perhaps most importantly making the material enjoyable, approachable, and rewarding for students such that they'll want to delve into each of these aspects.
- TravHatesMe 5y agoWhat inspired me to learn programming was your last point: building things. That's why I think that people should be introduced to a loosely typed, high-level, forgivable language. Compiler errors and verbose code does not appeal at first glance, you need to draw people in.. I will never forget the moment 11 year old me saw a message box appear with text that I specified. I made that happen, I built it. I felt so powerful and cool. That 1 line of code in an obscure language got me hooked and over time I moved on to other languages.
- atoav 5y agoThis is why I recommend using Processing and the free book Nature of Code to learn the basics. People see what they do and have instant visual feedback.
- sprafa 5y agoMaybe not everyone, but definitly a majority. I'm not talking about learning assembly language, but learning some HTML/CSS/Javascript (if properly taught) seems pretty simple to me. With enough effort and youth (ie malleable brain). It's crazy that programmers think this to me and just a form of ingrained tribalism that tells them that what they do is somehow special. Probably because they get such crazy time-valuations in terms of salary. But that's just a supply and demand curve.