Yup. I initially thought that it would be a good idea for me to major in Computer Science.
For some reason I majored in Finance after a few years of electrical engineering courses.
I don't think I'd be programming today if I had to be force fed programming assignments.
Computer Science is actually kinda of lousy for teaching the things most programmers can do. To the point where if I was hiring, I'd rather hire someone who's less experienced and self-taught, but with some sort of "interesting" background, where "interesting" is almost anything that teach's critical thinking about abstract concepts and how to articulate ideas. Could be anything from a Journalism degree to someone who spent a decade working their way up the ranks of a machine shop from operator to foreman.
I can tell you the last time I had to write a singly-linked list implementation though. October 17th, Nineteen Ninety Never.
Yes, but the most important lesson about data structures is to let someone smarter than me implement them, and just use the widely known, well documented, battled tested one.
I decided to jump on this bandwagon a while back and asked ChatGPT to do some tedious legwork for me with a bunch of geo-search primitives. I'll say the CS and general CS expertise came in very handy because boy this thing was wrong. Not obviously wrong but subtly and confidently wrong. :-)
Agreed. The things I look for most when hiring programmers (assuming they have a resume showing they have the skills) are attention to detail, empathy, and ability to communicate without feeling like I'm arguing all the time or pulling teeth.
Empathy tends to win here: you need to understand why people are using the software and how they are using it to make good decisions.
Communication tends to be better with people that have empathy.
> I can tell you the last time I had to write a singly-linked list implementation though. October 17th, Nineteen Ninety Never.
The point of writing (and working with) linked list implementations in a CS2 course is not because linked lists are something you'll have to implement yourself later (although there are certain areas of systems programming where return values of various system calls are, effectively, linked lists).
The point of working with LLs in CS2 is because they are an extremely simple data structure that you can inspect the entire implementation of; and their use of references/pointers gives practice with that concept before upgrading to the concepts of trees and (linked) graphs; and their fundamental structure and properties are so different from array-type list implementations that they provide a good first example of two different implementation strategies that can produce exactly the same output/result but with different space and time usage properties; and the parallel implementations are also a motivation for abstracting interface away from implementation and keeping data private and interface public.
So, that's why I teach linked lists in CS2. I try to be very up-front with my students about that; sorry to hear that your professors maybe weren't. I pretty solidly agree that a LinkedList per se is not particularly useful to a working software engineer; but that's not why we teach them.
Yes, I also find that physicists don't make the best auto mechanics. Mechanics never need to derive the equations of astronomical motion when repairing an engine block.
Why do you believe that Computer Science is less "critical thinking about abstract concepts and how to articulate ideas" than Journalism?