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.
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.
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.
Ultimately, it doesn't matter. It's your first language, not your last.
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.
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.
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.
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.
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.
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?
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).
Sticking to only some Algol family language makes people have a severely limited perspective on things.
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.
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.
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.
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.
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..
Is that what we need from universities? Is that helping employers? Helping strong or intermediate students?
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.
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.
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
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.
As long as students are exposed to multiple languages, I think starting w/Python is fine. Every language has its issues.
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.
These days, employers more or less get what they wanted. We're doomed.