Most active commenters
  • zelphirkalt(4)
  • NewsaHackO(3)
  • unethical_ban(3)
  • Jtsummers(3)
  • Karrot_Kream(3)
  • wat10000(3)

←back to thread

284 points borski | 106 comments | | HN request time: 0.419s | source | bottom
1. MontyCarloHall ◴[] No.44685710[source]
Isn't this just part of the broader trend of CS departments switching away from teaching computer science to teaching computer engineering, which in turn is part of the more general trend of colleges becoming more vocational?

LISP dialects like Scheme are excellent for teaching pure computer science because they are the closest thing to executing lambda calculus expressions. Whereas Python is excellent for teaching applied computer engineering, because it's essentially executable pseudocode for imperative languages, and imperative languages are the most common language a computer engineer encounters in the real world.

replies(18): >>44685819 #>>44685842 #>>44685939 #>>44686019 #>>44686088 #>>44686154 #>>44686222 #>>44686308 #>>44686321 #>>44686533 #>>44686596 #>>44686808 #>>44687195 #>>44687197 #>>44688209 #>>44688239 #>>44688473 #>>44688736 #
2. SoftTalker ◴[] No.44685819[source]
Yes. One of the biggest complaints that computer science departments used to get from students is that they weren't learning any languages that employers are using.
replies(9): >>44685967 #>>44686040 #>>44686076 #>>44686138 #>>44686865 #>>44686868 #>>44687099 #>>44689054 #>>44689085 #
3. NewsaHackO ◴[] No.44685842[source]
Executable pseudocode is an oxymoron.
replies(2): >>44685906 #>>44685979 #
4. ted_dunning ◴[] No.44685906[source]
And so is Python in many ways. The shoe fits.
replies(1): >>44689002 #
5. souldzin ◴[] No.44685939[source]
Are functional languages more computer science than imperative languages?
replies(2): >>44685997 #>>44690497 #
6. cess11 ◴[] No.44685967[source]
I'm not so sure someone who's good with Scheme will be bad with Python or Java.

On the contrary, I suspect that such a person is likely to be better suited to build software in either of the latter two.

I also suspect that Python is not a particularly good first language for someone who aims for a professional career building software.

replies(3): >>44686071 #>>44686085 #>>44688065 #
7. unethical_ban ◴[] No.44685979[source]
"essentially", come now.

The point is that python's syntax reads a lot more plainly and logically for learning than something like Java.

replies(1): >>44686842 #
8. remexre ◴[] No.44685997[source]
Formal reasoning about functional programs in terms of their (denotational) semantics is normal in a functional programming class (e.g. it's about a quarter of our mandatory-for-undergrads FP course).

Formal reasoning about imperative programs in terms of their (e.g. axiomatic) semantics is only in a grad-level course, and the programs you can reason about are really, really limited compared to the functional ones. (The last time I TA'd the FP class, one of the homeworks involved proving a simple compiler correct. When I took the grad course, I think the most complicated program we proved correct was selection sort.)

I think "reasoning about programs" is more computer-science than "writing programs," and choosing an imperative language signals that you're not emphasizing the former.

9. raverbashing ◴[] No.44686019[source]
Lambda Calculus is one of those things that look good on paper as a theory construct but in practice it's not a great abstraction.

And honestly you could go your whole career without touching it, maybe only for the naming of an anonymous function.

Boolean logic, graphs, FSMs, set theory, mathematical proofs, pretty much all user here or there. Lambda calculus? Unless you're one of those Haskell fans, meh.

replies(1): >>44688716 #
10. ok123456 ◴[] No.44686040[source]
There were plenty of less rarefied CS departments that were concerned about this, and they taught C, C++, or Java in their introductory classes.

Ultimately, it doesn't matter. It's your first language, not your last.

replies(2): >>44686065 #>>44687161 #
11. olddustytrail ◴[] No.44686065{3}[source]
How many people do you know who are monolingual?
replies(3): >>44686104 #>>44686166 #>>44688583 #
12. masklinn ◴[] No.44686071{3}[source]
> I'm not so sure someone who's good with Scheme will be bad with Python or Java.

The problem likely has always been the companies / HR rather than the students.

> I also suspect that Python is not a particularly good first language for someone who aims for a professional career building software.

It's not a particularly bad one either, certainly better than Java.

IIRC a secondary benefit is that it allows overlap between some of the basic CS, and the CS/CE courses for non CS track students

13. 90s_dev ◴[] No.44686076[source]
To be fair, if you learn computer science well enough to thoroughly understand Scheme, I don't think it'll take more than a few weeks during the summer to learn Python.
replies(2): >>44686128 #>>44687285 #
14. Jtsummers ◴[] No.44686085{3}[source]
> I'm not so sure someone who's good with Scheme will be bad with Python or Java.

They won't be. But students don't understand that, they want to learn marketable skills and are 18 years old. They haven't figured out that if your skills transcend language choice you will be more marketable even if it means you have to spend a few weeks learning a new language for a new job. They lack maturity, which isn't surprising given their age and experience, and so they complain.

15. kec ◴[] No.44686088[source]
Computer Engineering is its own discipline, typically lumped with Electrical Engineering, which is more about system architecture and design and only touches on programming at a low level such as device firmware.

What I think you're really lamenting is the devolution of CS education to vocational programming.

replies(1): >>44686168 #
16. ok123456 ◴[] No.44686104{4}[source]
Only knowing the language you were required to know to pass a bunch of tests when you were 18 is a negative signal.

If someone is interviewing and they only have Java listed, and their school is known for teaching Java for their introductory classes. They're probably not that strong of a programmer.

17. kstrauser ◴[] No.44686128{3}[source]
I disagree. You can learn the language itself pretty quickly. Finding your way through the expansive standard library will take longer. Getting a good handle on the package ecosystem is a lifetime learning project.
replies(3): >>44686393 #>>44687232 #>>44689928 #
18. nextos ◴[] No.44686138[source]
I always found this to be a shortsighted complaint. Getting exposed to languages where computation models are clear gives you an excellent background to switch to the language du jour and become a master. Going through e.g. HtDP or CTM makes it easy to transition to Python and write excellent code, whereas traversing the opposite path is going to be tough.
replies(6): >>44687133 #>>44687202 #>>44687464 #>>44688071 #>>44688301 #>>44690906 #
19. wslh ◴[] No.44686154[source]
> LISP dialects like Scheme are excellent for teaching pure computer science because they are the closest thing to executing lambda calculus expressions.

Assembler too. For example, Knuth's [M]MIX in The Art of Computer Programming.

That said, this is an introductory programming course, and there are separate courses focused on algorithms (which are not the same as programming). I agree with the article: programming has changed dramatically, while the core of algorithms remains largely unchanged.

20. bluGill ◴[] No.44686166{4}[source]
Human languages and programming languages are not comparable. You will need a lot more effort to become fluent in a second human language than in second programming language. Even if the human language is Esperanto (designed to be really easy for speakers of European languages), and the programming language is C++ (perhaps the most inconsistencies and foot guns) the programming language will need a lot less effort to learn to a high level.
replies(3): >>44686843 #>>44686854 #>>44688597 #
21. lupusreal ◴[] No.44686168[source]
I think he meant software engineering.
replies(1): >>44690131 #
22. dartharva ◴[] No.44686222[source]
> the more general trend of colleges becoming more vocational

Things would be so much better if this were actually true..

23. darksaints ◴[] No.44686308[source]
Colleges becoming more vocational is a consequence of colleges becoming more expensive for students. If you are paying all of that money for college, you better get a good job out of it. I don't see that as a bad thing necessarily, but it would definitely be nice if we had better paths for those who want to end up in research.

I'd argue that SML (or derivative thereof) would make for a better teaching language, for both the lambda calculus aspect and the type theory aspect.

replies(4): >>44686352 #>>44686719 #>>44688710 #>>44689507 #
24. Karrot_Kream ◴[] No.44686321[source]
When this kind of switch was happening in CS departments, as a graduate student I was part of a "movement" that advocated for switching away from things like Scheme to Python for introductory classes in my elite CS institution. (We focused on other things as well such as more interdisciplinary research, which was where I was more passionate, but that's a separate matter.)

My reasoning at the time in this order was:

1. Widely used tools and practices offer a flywheel of usefulness that can help motivate undergrads to learn about computation. Once you learn Scheme, well now you've learned Scheme. But at the time if you had learned Python you could then use something like Python's system and socket APIs to play around with the lab or personal Linux systems. On the web side, there was web.py or Flask (haha this was the late 2000s/early 2010s) to motivate yourself to keep going. The student could spend their summer building apps and tools so that they appreciate computation for more than just its "aesthetic" beauty.

This was a time when CS wasn't all that prestigious on its own and salaries weren't as high as they are now, so many folks who banged their head against Scheme or MMIX or LC3 would just churn to the EE or MechE departments.

2. As a grad student it was almost trivial to set an exam paper that could weed out most of the class. This was especially trivial at the introductory class level where Scheme would be taught. If the concern was rigor it was very simple to maintain the rigor in other ways.

3. For better or for worse many undergrads had no intent of going to grad school, and many of the undergrads taking our classes weren't even students of computer science. They were electrical engineers or industrial engineers who wanted to learn enough programming to automate things in their field but were more interested in their actual areas of concentration.

In the years since my thinking around this evolved, but I still share the same conviction I did then. Probably moreso given the sheer ubiquity of Python now.

replies(4): >>44686586 #>>44686642 #>>44686697 #>>44687847 #
25. Jtsummers ◴[] No.44686352[source]
> I'd argue that SML (or derivative thereof) would make for a better teaching language, for both the lambda calculus aspect and the type theory aspect.

https://news.ycombinator.com/item?id=13098598

A critique along those lines which suggests KRC and Miranda which are in the same vein as SML.

26. acuozzo ◴[] No.44686393{4}[source]
Knowing your way around the ecosystem of one programming language does not build up the intuition necessary for identifying O(n²) (or worse!) algorithms and choosing/writing O(log(n)) (or better!) ones instead.

Computer Science has little to do with science, but what it teaches you is certainly closer to science than just building a huge mental index for a bunch of work done by other people.

There's certainly value in that skill, but it has no place in a Computer Science curriculum.

This would be like taking Astrophysics students and telling them to study the details of all of the different kinds of telescopes they can buy.

replies(3): >>44686736 #>>44687346 #>>44687578 #
27. kevin_thibedeau ◴[] No.44686533[source]
"Computer engineering" isn't vocational. It's an entire sub-specialty involving hardware theory and application. "Programming" is the vocational shift which was traditionally outside the purview of academic curricula. You're not engineering anything if you don't have a repeatable process that will deliver expected results. Programming alone doesn't meet that bar.
28. em-bee ◴[] No.44686586[source]
help motivate undergrads to learn about computation. Once you learn Scheme, well now you've learned Scheme. But at the time if you had learned Python you could then use something like Python's system and socket APIs to play around with the lab or personal Linux systems

that's a good point actually. i had scheme, modula and others i don't remember in my undergrad classes. i remember almost nothing from that time. but at the same time i met some students running an LPmud, where i learned LPC, and then i discovered roxen and pike (which is based on LPC) which i used in all my volunteer and fun programming work. in other words all my motivation for learning stuff came from the outside.

29. tombert ◴[] No.44686596[source]
I just completed the WGU Masters in "Computer Science".

I put the scare quotes around "Computer Science", because outside of a single algorithms and data structure course and a single AI course (which was extremely high level), it was purely engineering stuff. One assignment had me deploying stuff with AWS, I was designing wireframes of potential "apps" I could create, and I had to write one HTTP server.

It was kind of fun and it was nice that I was able to complete it quickly, but it really shouldn't be called "Computer Science", it should be called Software Engineering. There's nothing wrong with software engineering, I just view it as distinct-but-related from CS.

30. dawnofdusk ◴[] No.44686642[source]
I think the solution is to have, as is the case in math/physics, an honors intro CS sequence compared to the regular intro CS class. The latter would be the recommendation for all non-CS majors, and the former would be for CS majors. I've always thought that those who are focusing on more vocational training should not be in what is called the CS program, maybe there are other majors called "software development" or "data science" or the like. Undeniably most prospective CS students are not aiming to go into academia, but we shouldn't adapt to this majority and then leave behind those who do want to do more academic things.

My background is in physics, where this sort of dual-track curriculum is well-established, and the physics taught to physics majors is very different from that taught to engineers. Unfortunately the difference is often boiled down to rigor or difficulty (and this will be reinforced if it's physics professors that have to teach both of the tracks), but in reality it is a value-neutral split which is based on pragmatism. CS should have one too.

replies(3): >>44687717 #>>44688405 #>>44690165 #
31. simpaticoder ◴[] No.44686697[source]
>Once you learn Scheme, well now you've learned Scheme.

There is something really joyful in learning a new language and then implementing a well-known protocol, like HTTP, in that language. You can pick either the agent or server side, and check your work with other well-known agents and servers. In my experience this tends to happen when students like the language they've just learned, regardless of the direction their given by staff. In fact, I'd almost consider it definitional of what it means to like a language - that you'd consider implementing a well-known protocol in it in your free time.

replies(2): >>44687355 #>>44687667 #
32. throwaway328 ◴[] No.44686719[source]
I suspect you might be observing two correlates and picking one as the cause of the other in a way that is ahistorical.

Specifically, it seems to me that colleges becoming more vocational and colleges becoming more expensive are both natural outcomes of the neoliberalisation of all things. I am aware that some students now rationalise their educational investments with the logic you describe above, but I think it's a post-hoc rationalisation.

You can get a good job without going to college, and you can get a good education without paying a gazillion bucks.

A side point, but calling it "vocational" seems a bit euphemistic too. Learning carpentry is a vocation. Getting a business degree is not equivalent to learning carpentry. I might say colleges have become commercialised, rather.

33. kstrauser ◴[] No.44686736{5}[source]
That's not really what we were talking about here. The context was that compsci students want to learn marketable skills, and the claim was that if the student had learned Scheme in class, they could quickly pick up Python. And that's true, for the language itself. But knowing only the language, like never importing code you hadn't written yourself, doesn't go far along the road to marketability.

I'm not arguing that compsci should be job training, not at all. My disagreement is solely with this specific claim.

But FWIW, while I understand your analogy, an astrophysics department that didn't tell the students that there are these things called telescopes, and here's why you might use one over the other for various situations, and that they're how you're going to get the observation data you'll test your theories against, would be doing a disservice.

34. aleph_minus_one ◴[] No.44686808[source]
> Isn't this just part of the broader trend of CS departments switching away from teaching computer science to teaching computer engineering

Computer engineering is similar as hard as computer science (don't start the discussion which one is harder ;-) ). What CS departments instead switch to is teaching some shallow, applied programming knowledge.

35. NewsaHackO ◴[] No.44686842{3}[source]
I am confused, what is the relevance of the word essentially?
replies(1): >>44687123 #
36. exe34 ◴[] No.44686843{5}[source]
Multiple computer languages are probably more like learning vocabulary in different domains of life and learning to write for different media.
37. olddustytrail ◴[] No.44686854{5}[source]
They're not directly comparable because humans have an inbuilt ability to learn human languages.

The vast majority of people on the planet know more than one human language and know zero computer languages. It's literally the opposite of what you're claiming.

replies(4): >>44687208 #>>44687893 #>>44688321 #>>44689003 #
38. zer0zzz ◴[] No.44686865[source]
I always found scheme to be a clean slate where no one’s high school experience benefited them in the first year.

My program did Java for the second course, which was very popular in industry and I loathed it.

I do think Python is not so bad to standardize on because it’s stood the test of time and is one of the most popular ways to write code for many disciplines and has applications outside of computer science so it helps everyone that takes the cs requirement even if they aren’t a cs major.

What im saying is Python can even serve as a better version of spreadsheets for folks that aren’t cs.

39. djoldman ◴[] No.44686868[source]
I think someone who learns computer science well from the theoretical side can pick up a new language quickly. After all, if it's turing complete, it's turing complete, they're all the same at that level.

Problems creep in when the person doesn't learn CS well, chooses an approach that is deeply reliant on overly complex/opaque libraries without good documentation, or the like.

40. zelphirkalt ◴[] No.44687099[source]
That's kind of a useless argument. Universities often also don't teach people any web development. In many cases a graduating student has never worked on any real project. If the university's idea is, that the student can learn those things in their free time, then surely asking someone to learn a little bit of Python or another language is not too big an ask either. So which one is it? Learn that stuff at home on your own time, or university should teach it, because it is needed on the job? Then what other things are they not teaching that is used on the job?
replies(1): >>44688092 #
41. unethical_ban ◴[] No.44687123{4}[source]
Do you agree or disagree that Python is more readable/closer to pseudocode than say Java or C++? Less syntactic sugar, no need to define namespaces/classes, more intuitive for declarations, etc.
replies(1): >>44688480 #
42. delecti ◴[] No.44687133{3}[source]
I agree, but those don't need to be the languages you use in all classes. I learned a few assembly and academic languages (MIPS and LISP) in classes for those two topics, and it was absolutely useful to learn how to think in terms of those languages. The vast majority of our classes were Java though, and that's also been the vast majority of what I've done since graduation. (I think my school has since moved to Python as well)

So I graduated with that really helpful knowledge about why modern languages work how they do, but also a lot of practical experience of actually using those modern languages too.

43. zelphirkalt ◴[] No.44687161{3}[source]
I learned programming before entering a degree in this stuff and I think learning a badly designed language as first language made me lose a few years, and additionally, if I weren't so driven to learn more, I probably still wouldn't know more than many others, and might have never explored the field of functional languages. If I hadn't started reading SICP and exploring Scheme and others, I wouldn't know half of what I know now about computer programming.

Sticking to only some Algol family language makes people have a severely limited perspective on things.

44. ajkjk ◴[] No.44687195[source]
I think it's absurd to start with Scheme. A graduate who knows Python but not Scheme has a hope of doing something with computer science. A graduate who knows Scheme but not Python is basically unable to use computers at a technical level. The only choices here are "Python" or "Scheme + Python".

(Yes, of course, they could teach themselves Python at that point---but if we're talking about things that people can teach themselves, they can teach themselves the whole curriculum and both languages; the debate here is over what the university should hold them accountable to learn).

replies(4): >>44687237 #>>44687779 #>>44687825 #>>44692888 #
45. pk455 ◴[] No.44687197[source]
> most common language a computer engineer

Depends on your definition of a computer engineer. Dealing with strings in Python vs. dealing with character arrays in C is a world of a difference.

The decision to use Python feels like a solid compromise between giving the students a stair step to applied computer science work, while stripping away the cruft and language-specifics that would distract from implementing the more theoretical learning material

replies(1): >>44687469 #
46. ajkjk ◴[] No.44687202{3}[source]
even better is learning the languages you want to learn

why are you paying a school to teach you something adjacent to what you want to learn so you can learn the thing you need yourself?

replies(1): >>44688050 #
47. zelphirkalt ◴[] No.44687208{6}[source]
That's very superficial and wrong.

It makes a huge difference, whether you have to learn thousands of new words, irregular grammar and (after learning thousands of concepts in the first language) learning a few hundred new concepts, or you learn a computer-understandable language, that has maybe, if very inelegant, 100 keywords, and 100 concepts, most of which you will probably not use often.

Compared to these numbers, the fact, that something is a natural language, has very little influence on the outcome. It is the sheer effort needed to learn a natural language, that makes the difference.

48. zelphirkalt ◴[] No.44687232{4}[source]
Those are things though, that you can easily make up for, for the most part, with good web search skills, or these days, AI prompting skills.
49. Jtsummers ◴[] No.44687237[source]
> I think it's absurd to start with Scheme. A graduate who knows Python but not Scheme has a hope of doing something with computer science. A graduate who knows Scheme but not Python is basically unable to use computers at a technical level.

What language you start with and what languages you know on graduating are going to be different. It takes 4 years to get through most bachelors programs (without taking summer terms, very high course loads, or coming in with a bunch of transfer credits). It's no more absurd to start with Scheme than to start with Python when there are at least 7 semesters remaining to learn more.

If a graduate only knows what they learned in CS 1, they aren't a CS graduate even if they got that slip of paper. They conned the school, or the school conned them.

50. SL61 ◴[] No.44687285{3}[source]
One of the big shifts in academia over the past couple decades is that, for any number of reasons, students today are less likely to self-study or tinker outside of classes and internships. The increased prevalence of basic bootcamp-style classes like "Let's Build a Rails App" in CS programs is because departments can no longer assume that students will explore things like that in their spare time.
replies(1): >>44687837 #
51. trothamel ◴[] No.44687346{5}[source]
> Knowing your way around the ecosystem of one programming language does not build up the intuition necessary for identifying O(n²) (or worse!) algorithms and choosing/writing O(log(n)) (or better!) ones instead.

I'll disagree with this, at least in terms of Scheme versus Python.

Python is visually close enough to other languages that the skills you develop to quickly see O(n²) algorithms easily transfer to many other languages. Scheme is very different visually, and so the intuition doesn't transfer as well. Sure, it's possible your intuition is wrong, but when scanning a program intuition can help in the first pass.

replies(1): >>44688727 #
52. Izikiel43 ◴[] No.44687355{3}[source]
> There is something really joyful in learning a new language and then implementing a well-known protocol, like HTTP, in that language.

That's probably the minority of students though

53. vouaobrasil ◴[] No.44687464{3}[source]
I don't agree with that. I think Python is a better first language. The better students will get through the program just fine, especially if they really want to learn computer science in depth. And the average ones will at least learn something useful.
54. Kwpolska ◴[] No.44687469[source]
Depends on which part of the theory you care about. Lists in Python are a magic structure that can grow and shrink at will. That's a bit too high level to be useful for learning the theory.
55. charcircuit ◴[] No.44687578{5}[source]
You can learn about algorithmic complexity in python. Why not just focus on one language to keep things more focused.
56. Karrot_Kream ◴[] No.44687667{3}[source]
Maybe this is due to my interests (I specialized and published in distributed systems) but it's always been the opposite for me. Implementing HTTP/1.0 or IRC clients is one of my favorite ways to learn a new language (albeit it's a bit heavy on the IO which can be unfair to functional languages that model effects.) My interest in network software is that I can standup the software and have it participate in the network immediately. It's the application that leads me to appreciate the language not the other way around. My interests in theorem proving and program verification came from debugging heisenbugs in the wild and wasn't motivated by the algorithmic complexity or mathematic sympathy.

But I dabbled in PLT in my grad days and have no doubt that there are folks who have your mindset as well.

57. Karrot_Kream ◴[] No.44687717{3}[source]
We did end up making this switch later on due to growing class sizes anyway. That certainly helps focusing the class. We ended up focusing on computation more for the CS sequence and on the nuts and bolts of getting a program working for the non-CS sequeunce.

But my rationale for moving to Python still stands. In fact, I know several brilliant ML researchers who write code that would never come close to making it to production. The things we optimize for are different. Production code in a tech company needs to be readable, maintainable, explainable, and scalable. An ML researcher's code needs to support their research. These different perspectives are still why I think focusing on a wider appeal language like Python over something like Scheme still makes sense.

FWIW our CS program mandated a programming languages class and the first third of the class was taught in Scheme.

replies(1): >>44690458 #
58. Hammershaft ◴[] No.44687779[source]
It's easier to explore deeper concepts learning with scheme because the language is such a simple and introspective encapsulation of generalized computer science concepts.
59. wat10000 ◴[] No.44687825[source]
I and about a million other programmers started with BASIC. My second language was Pascal. I don’t imagine I’d be very employable if that’s all I knew, but it turns out that you can learn many programming languages and it’s not all that much effort after the first two or three. There’s no reason to think the language you start with should be one that you could get paid to use.

And no, I wouldn’t recommend starting with BASIC. But starting with Scheme seems like a great choice.

replies(2): >>44688645 #>>44694403 #
60. sokoloff ◴[] No.44687837{4}[source]
What good does that do, though? Make it harder to tell the intrinsically motivated students from the “I’m just here to get a job when I graduate”? It seems like it harms the former.

Is that what we need from universities? Is that helping employers? Helping strong or intermediate students?

replies(1): >>44691019 #
61. fn-mote ◴[] No.44687847[source]
The only point I really have an issue with is #2, where the focus seems to be on “weeding out” students as a sign of rigor. I would much prefer that some kind of pedagogical motivation replace this point.

Edit: I take that back.

> Once you learn Scheme, well now you've learned Scheme.

(Not from SICP but How to Design Programs): The claim is that you’ve learned how to THINK about programming. You understand how to organize and test your code so you can make a larger project.

I think the dismissal of a Scheme-like language as a dead end is shallow, and includes a large assumption about the (lack of an) ecosystem of the language. I think saying more will turn this into a rant.

62. wat10000 ◴[] No.44687893{6}[source]
They’re not directly comparable because programming languages are much simpler and much easier to learn. Becoming a good programmer is hard, but that’s not due to difficulty of learning a programming language. Once you’re a good programmer, new languages are easy. A decent programmer should be able to do something useful in a new language in a week or less, and be reasonably competent in a month or two. See how long it takes anyone to learn a human language to that level.
replies(1): >>44692588 #
63. aleph_minus_one ◴[] No.44688050{4}[source]
> why are you paying a school to teach you something adjacent to what you want to learn so you can learn the thing you need yourself?

Because some topics are easy to learn by yourself, and some are not, so the latter ones are better learned in a college setting.

replies(1): >>44688359 #
64. icedchai ◴[] No.44688065{3}[source]
When I went to university in the 90's, Scheme was used in a couple of early courses. I had already learned C and Java on my own, but greatly enjoyed how Scheme made me think about problems differently. (I didn't learn Python until much later when I was out of school.)

As long as students are exposed to multiple languages, I think starting w/Python is fine. Every language has its issues.

65. billy99k ◴[] No.44688071{3}[source]
If you understand the fundamentals, you can easily switch between languages.
66. billy99k ◴[] No.44688092{3}[source]
When I was in college, we had our base software development courses and could choose web development as an elective. Our class taught .NET.
67. williamcotton ◴[] No.44688209[source]
I think you mean software engineering. Computer engineering is computing hardware, CPUs, etc.
68. wolpoli ◴[] No.44688239[source]
I took Scheme for my second programming course, after C++. I think Scheme is simpler to understand. It also allowed students to explore various concepts that weren't available in C++. I enjoy the course.

But since I never took compiler theories and other courses on programming language, I never bumped into many of those concepts again except for those where modern languages adopted the same feature, and I ended up having to relearn them anyway. Hence, I would also argue that these days, most students would have been better served starting with a practical language.

69. nitwit005 ◴[] No.44688301{3}[source]
Sure, it's possible to catch up, but we're talking about at least four years of potential experience. That means spending years catching up, which can seriously impact you career.

Not a unique problem to software either. My sister in-law is a mechanical engineer. Her first employer was upset she didn't know anything practical, and only knew theory. She had to spend years catching up.

replies(1): >>44688378 #
70. bigfishrunning ◴[] No.44688321{6}[source]
Learning to program may be hard, but learning programming languages is relatively very easy. In other words, your second programming language is so much easier to learn then your first was.

I regularly use several programming languages, and tend to pick up a new one every year. I've been spending the last six months studying my second spoken language; I promise you human languages are much harder to learn.

71. kelipso ◴[] No.44688359{5}[source]
Learning a language definitely belongs in the first category. Learning computer science goes in the latter category.
72. nextos ◴[] No.44688378{4}[source]
Some technical universities in EU solve this problem by having full-time practical courses e.g. in January and June. For example, as a CS freshman you can build a really solid background in functional programming by going through a sequence of SML or Haskell courses in Autumn and Spring and spend January and June learning trendy technologies in depth. It's the best from both worlds.
73. GZGavinZhao ◴[] No.44688405{3}[source]
Brown CS actually does this! Accelerated Intro to CS is taught in Racket, I believe.
74. zozbot234 ◴[] No.44688473[source]
> Whereas Python is excellent for teaching applied computer engineering, because it's essentially executable pseudocode for imperative languages

It's not that simple, Python is a fiddly, complex, high-level language that has accreted features in a very ad-hoc way. This makes it very hard to teach and learn in a way that's expected to pay even the most cursory attention to actual rigor. You could probably define a Baby Python subset of the language that's just as simple and rigorously defined as Scheme and teach that, but this isn't how the new MIT intro courses have been designed.

replies(2): >>44689486 #>>44690206 #
75. NewsaHackO ◴[] No.44688480{5}[source]
Would you consider essentially dry water to be semantically correct phrase?
replies(1): >>44688771 #
76. _proofs ◴[] No.44688583{4}[source]
programmers, and good ones imo, are almost always polyglots on some level, and i tend to think have a better than average ability to even pick up natural languages.

programming languages have a small, manageable and finite set of vocabulary, idioms, and constructs that most languages share but express differently depending on their intended use. a programmer fluent in programming will be able to pick up most languages. how those pieces are cobbled together to form more complicated abstractions becomes the skill obv.

that does not mean they'll be an expert right away, but it does mean they are usually competent enough at minimum to dive in and work with it just like any other tool -- they know they'll need a screwdriver, maybe a hammer, so they look up what it looks like and how it is used.

my daily drivers are python, cmake/Makefiles, c++, and c, with a sprinkling of bash, powershell.

i've worked with microsoft stacks C#/SQL, JavaScript, and i've written a ton of Lua. i've studied concepts and swe fundamentals in languages i don't really write code in and transcribe into code i do intend to write code in. i learned mostly using Lua first, then i picked up c++.

these are just the tools of my job overall. my main skill is communication and learning imo, and knowing which tools are better suited for a task at hand depending on requirements and limitations (mine or technical or both).

77. em-bee ◴[] No.44688597{5}[source]
having actually learned esperanto and become a fluent speaker in just half a year, i am not so sure. esperanto grammar is trivially easy compared to any other language (the rules fit on a postcard in regular sized print), but if you'd take any other language, i'd agree.
78. Daishiman ◴[] No.44688645{3}[source]
BASIC has a thriving hobby scene and there were compilers available for many platforms even if they weren't for "serious" computers. Scheme by comparison has essentially no community.
79. marsten ◴[] No.44688710[source]
I attribute the curriculum shift to something slightly different, which is the changing perception of CS as a career.

When I was in college in the late 1980s, CS was not perceived as the moneymaking career it is today. Accordingly the kids who went into CS were typically the nerds and hackers who truly loved the field.

Many kids now perceive CS as a safe, lucrative career option akin to becoming a doctor or lawyer. It attracts many students who are smart but perhaps not as intrinsically excited about the field. The universities adjusted their curricula to what these students care about: Less beautiful theory, and more practical training.

A similar thing happened in statistics. At one time it was hardcore stats nerds. Now "data science" has brought a ton more people into the field and the teaching methods have changed dramatically.

80. Koshkin ◴[] No.44688716[source]
> Haskell

https://book.realworldhaskell.org/

81. anthk ◴[] No.44688727{6}[source]
Scheme has (trace), at least most interpreters (and his cousing Common Lisp) have some tracing and pretty-printing features. Far more powerful than anything Python could offer.

Oh, and of course it has functions like sdraw or draw-cons-tree when you can print the contents of a list in seconds as an ASCII-ART chart:

https://www.t3x.org/s9fes/draw-tree.scm.html

The file it's in the public domain.

Try that with Python.

replies(1): >>44688899 #
82. zahlman ◴[] No.44688736[source]
> Whereas Python is excellent for teaching applied computer engineering, because it's essentially executable pseudocode for imperative languages

Python offers quite good multi-paradigm support and could absolutely be used to explore many key concepts from SICP (granted, nothing is as meta-programmable as the Lisp family, since AST manipulation in other languages requires additional steps to actually obtain an AST). In particular, since Python's object model includes functions, higher-order functions are possible (and indeed, `map` is a builtin, and `reduce` is in the standard library after previous demotion from builtin status). Nowadays of course it's fashionable to litter the code with manifest type hints, which are a distraction to that sort of pedagogy. However, they are still entirely optional, have zero-to-generally-irrelevant effect at runtime, and can simply be disregarded.

83. unethical_ban ◴[] No.44688771{6}[source]
I understood the meaning of their phrase and explained it. You assert that the original phrase is incomprehensible and meaningless. We see things differently.
84. trothamel ◴[] No.44688899{7}[source]
Python has the pprint module, which takes care of this for you, and for more datatypes than are done here. (I don't see how this would handle a hashmap in a sensible way.)

But I'm not sure how this addresses what I was saying, which is that the intuitions about algorithms you get working on Python are easier to transfer to popular languages like C++, Java, Javascript, Rust, etc..

85. gjm11 ◴[] No.44689002{3}[source]
An oxymoron is a word or phrase that contradicts itself (the word comes from Greek bits meaning "sharp" and "soft"). It doesn't make any sense at all to say that Python is an oxymoron. Python-the-language isn't the kind of thing that can be an oxymoron; "Python"-the-name obviously isn't one because it doesn't have two parts that could contradict one another.

Does your comment mean anything other than "I don't like Python very much", and if so what?

86. isaacremuant ◴[] No.44689003{6}[source]
Have you thought through what you said?

You also have an inbuilt ability to learn a computer language. What even is an inbuilt ability?

Programming languages are something you read and write and execute. You can learn many and their definition is precise and limited. It's very easy to be able to pick a programming language and use it in relative low amount of time.

Human languages are absolutely different. You can't easily pick them up and they carry cultural context, regional variations, and a lot of ambiguity and history. Definitions of those languages tend to be complete or prescriptive but descriptive and evolving. The languages are written, spoken, read and listened to. The variation in all of those is immense.

Do you acknowledge any of this or will you double down in the most absurd of points?

87. toolslive ◴[] No.44689054[source]
indeed. The problem with being expose do to something so much more clean/elegant/powerful than the languages employers are using is that you no longer want to do it. It's like having tasted good whisky. You no longer think Jack's acceptable.

These days, employers more or less get what they wanted. We're doomed.

88. ◴[] No.44689085[source]
89. gowld ◴[] No.44689486[source]
Python was invented as a language for newbies. It's come a long way!

https://en.wikipedia.org/wiki/History_of_Python#Version_1

> During Van Rossum's stay at CNRI, he launched the Computer Programming for Everybody (CP4E) initiative, intending to make programming more accessible to more people, with a basic "literacy" in programming languages, similar to the basic English literacy and mathematics skills required by most employers. Python served a central role in this: because of its focus on clean syntax, it was already suitable, and CP4E's goals bore similarities to its predecessor, ABC.

https://en.wikipedia.org/wiki/ABC_(programming_language)

> It is intended for teaching or prototyping

replies(2): >>44691228 #>>44697374 #
90. gowld ◴[] No.44689507[source]
College becoming more vocatioanl is a consequence of colleges becoming more accessible to a much larger population, beyond the already wealthy.

Community colleges are the cheapest colleges, yet the most vocational.

The most expensive colleges are the Liberal Arts Colleges and the Ivy League, which are the least vocational.

91. kokx ◴[] No.44689928{4}[source]
This depth you are never going to get in a college education anyway. Especially not since programming isn't (and shouldn't be) the only thing you learn in a Software Engineering / Computer Science bachelor.
92. leoc ◴[] No.44690131{3}[source]
“Software Engineering” tends to be about project management: schedules and organisation, estimation, defect rates and so on. For vocational training on existing IT systems (including some coding), which I assume is more what the course focused on, then “Management Information Systems” or “Information Technology” would be the more traditional names IIUC.
93. senderista ◴[] No.44690165{3}[source]
Similarly for math. I had to take a linear algebra class as a math major that was mostly populated by engineering majors and it was painful (given that they were allergic to proofs).
replies(1): >>44696490 #
94. leoc ◴[] No.44690206[source]
> You could probably define a Baby Python subset of the language that's just as simple and rigorously defined as Scheme and teach that

Pyret https://pyret.org/ started out with more or less that ambition I think. IIRC its author had previously tried to work with Python (and its dev team) but gave up.

replies(1): >>44698317 #
95. dawnofdusk ◴[] No.44690458{4}[source]
>FWIW our CS program mandated a programming languages class and the first third of the class was taught in Scheme.

This is important but doesn't replace having a dual-track intro sequence. The reason one has "physics for physics majors" isn't because physics majors need to learn some of this complicated stuff ASAP. They definitely don't, and I don't doubt students in the program will eventually get a well-rounded education. But it's a good idea to give incoming students a taste of what the field is like as soon as possible, so they can see if they like it or not. (Essentially it's a "weeder", but for the students' sake so they can self-select on interest and not just instructional staff's sake of being elitist.) Probably some (but not all) professors/postdocs/grad students would scramble to teach the more advanced sequence as it is likely more engaging for them than the current intro curriculum.

To be clear I don't think an advanced intro CS can't be in Python on principle, but such a class probably introduces multiple languages to some degree: they could be toy assembly languages or real ones in addition to the majority of the course content in Python.

96. dehrmann ◴[] No.44690497[source]
It's one way of modelling the broad notion an algorithm, but it isn't the only one, and it's odd to treat it as the one true expression of computer science when essentially all modern computing follows a different model.
97. daedrdev ◴[] No.44690906{3}[source]
Having taking a course based on HtDP as my first serious coding course in college, it was good at teaching many concepts, but it felt very verbose and was aggressive in its hiding of features that weren't that difficult to grasp.
98. SoftTalker ◴[] No.44691019{5}[source]
It's what universities have become. They are expensive, grandiose trade schools operating out of very distinguished-looking Collegiate Gothic designed buildings.
99. bmitc ◴[] No.44691228{3}[source]
It was an attempt but a bad one.
100. MaxBarraclough ◴[] No.44692588{7}[source]
> Once you’re a good programmer, new languages are easy.

Not always. Languages can differ radically. If the new language uses concepts you've never encountered before, you're going to need to do the work of learning those new concepts.

An example I've used before: 20 years writing C code for embedded systems won't give you any insight into Haskell's applicatives or monads.

replies(1): >>44698837 #
101. Shorel ◴[] No.44692888[source]
I think it is absurd to fail to learn the basics and focusing on 'deliverables' from day one.

You need to get the ideas first. The language used is the least of your concerns.

This is even more poignant on this era of vibe coding.

102. foundart ◴[] No.44694403{3}[source]
> it’s not all that much effort after the first two or three. There’s no reason to think the language you start with should be one that you could get paid to use.

Definitely!

This inspired me to list out languages I've learned to at least some minimal level and written programs in. Here they are, with the contexts in which I used them:

BASIC - middle school ;

Fortran - high school ;

C++ - self-taught & later some work;

Pascal - university;

Motorola 68k assembly - university;

Miranda - university (Programming Languages class only);

Ada - university (Programming Languages class only);

Lisp - university & work (CLOS);

sh - work;

ColdFusion - work;

bash - work and personal;

Java - work;

Atmel microcontroller assembly - hobby;

C - hobby (to replace Atmel assembly);

Ruby - work and hobby;

Scala - work;

Elixir - work;

Solidity - work;

Typescript - work and hobby;

Elm - work;

Clojure - work;

Javascript - work;

Python - hobby (with a tiny smattering of work usage over the years)

103. gregorygoc ◴[] No.44696490{4}[source]
I could never understand the proof allergy. To be honest I find it was easier for me to perform well in proof based classes rather than “here’s an algorithm, apply it” type. The main reason was that it was harder for me to make mistakes while constructing a proof in comparison to applying an algorithm and making calculations by hand.

I acknowledge high schools are notorious in omitting the introduction to proof techniques but it’s a one time hurdle and you end up with a good stuff in your toolbox.

104. ThrowawayR2 ◴[] No.44697374{3}[source]
> "Python was invented as a language for newbies."

Yeah, but so was BASIC. If Edsger Dijkstra were alive today to write an updated edition of his infamous "How Do We Tell Truths That Might Hurt?" essay, he'd probably just just reuse his quip for BASIC for Python.

105. adsharma ◴[] No.44698317{3}[source]
I had a Twitter exchange with the author a few days ago on these topics.

My approach is to do what pyret was trying to do while maintaining the python syntax (with minimal deviation where necessary).

Making Python look more like Rust has a lot of support and could correct some of the his historical "injustice" :)

Because of the strong support for keeping python as an approachable imperative language, this will unfortunately require forking.

106. wat10000 ◴[] No.44698837{8}[source]
I bet that C programmer will still learn Haskell way faster than someone with no programming experience, and way faster than just about anyone will learn a human language.