The first language we started with was SML and for a good couple of months I just laughed at this stupid language with its silly and unnecessary limitations. It wasn't until we had to implement a parser in it, something I coincidentally had struggled with on my own, that I started to realize that I was dealing with a different paradigm, and a very powerful one at that.
I was less cocky after that.
Got to undergrad. Followed the speed limit, took intro to programming course. 450 person class, 1000 person wait-list. 75% of the class did not pass. Only attended two lectures, hand written programming finals. Never lost a point.
It wasn't until the 3rd year programming languages class that we wrote minimal lisp interpreters in scheme and did crazy stuff in prolog that I had that rewiring sensation.
Not trying to brag, just putting this here for others reading to say that not every intro to programming course speed limit is worth it.
I got to save plenty of time by opting out of most of the lectures, but the groups and projects gave you feedback if you started skipping too much (something I learned in the introductory maths course that I also first thought I could get away with not going to every lecture for) and forced you to read at least the main set books so you got a good idea of whether it was material you understood.
It's indeed easy to think you know more than you do, but at the same time, sometimes you do know exactly what you know - been in both situations.
Matt Damon as the protagonist of Good Will Hunting: "You wasted $150,000 on an education you coulda got for $1.50 in late fees at the public library."
That wasn't true before the pandemic but without in-person classes it is absolutely true.
By the time I started university, I'd been programming for 13 years, I'd done paid freelance development jobs, and written my first compiler, and I'd done more advanced stuff than the first several semesters worth of classes. I had gaps, and I filled them with the group work and books, but there was no value to me in the in-person lectures for the introductory computer science courses.
Yeah and you did pay some attention, got a sampler plate, makes sense.
Plus it's fun acing courses with no effort every once in a while. It's a good sign.
It was also not about enjoying acing courses, but about needing to take courses that were compulsory for the programme and that you could not test out of. As I said, the option to skip most lectures felt like a reasonable middle group - if I'd run into problems with the group sessions, I could have easily gone back to the lectures at any time.
The lecturer pre-generated small black & white square bitmaps of single characters from a sample set of fonts to use as aids during development. (Just the lower case letters a to m.) Then your mark was the percentage your OCR could recognise from a much larger set generated from about a thousand fonts.
In the same course the next major project was to make an AI for the card game Hearts. This is a four-player game, and the project materials included an automated tester that could be given any 4 AIs and would score them against each other. In the labs we would battle our AIs while developing them.
I ended up getting the second highest score out of a class of three hundred students and I still don't know how to play that game well. (I got the AI to teach itself the probability tables for optimal play, which I didn't memorise.)
He used a digital projector in an era where that was still rare in even computer science courses so that he could demonstrate the basics of the edit-build-debug cycle. He'd deliberately leave small errors in the code to "fix" and he'd get the class involved with suggestions on where to look and what to try.
All of his projects were competitive, because it got the students much more engaged if they were racing each other. I believe the year after mine had to play a monopoly-style game where trucks were going around a "game board" and could buy and sell stuff for profit, could run out of fuel, borrow money, etc...
Meanwhile all the other lecturers would drone on and scribble unreadable gibberish on a blackboard. We had one lecturer give us a final exam where half the marks depended on converting 7 lines of C to assembly, except that 7 lines had 5 errors in it. Two of the lines were just the braces, which means effectively every line was faulty.
CS is a totally different beast and I am glad about the humble experiences around CS. I might not totally agree with all the educators tell you, especially around OOP, however especially the mathematics around CS was impressive and very helpful.
I know many who took a similar route as me, but I've never met anyone who self learned math to a reasonable level. And since math is a very small part of a CS degree you could learn all of it in 1-2 semesters, so the optimal way to learn computer science would be to take 1-2 semesters of college math and spend the rest self learning. I bet you'd get a better understanding that way in much less time than it takes to go through a CS degree.
The other intro courses (eg computer architecture, which taught assembler) were great though, even if I found them easy due to prior knowledge.
Unfortunately that experiences doesn’t give a clear line for what to test out of and what not. I bet I could have passed the computer architecture one too, but I would have missed out, while the programming one would have been best if I used the time for something else (I mostly did, but there were lab sessions that were graded and couldn’t be easily skipped)
The thing is: it is hard to tell them apart quickly from those who actually already know, without having them take some test.
And even if you have them take the test, you cannot be sure they miss some fundamental core concept that will be crucial to understand later.
I myself had to go through introductions more than once that I thought will not offer me anything new, but going through the basics once in a while with a better understanding can be of incredible value
Being able to pass a test is indeed not a sign of mastery of the material (this might come as a shock to some! Just because you got good grades doesn’t mean you’ve mastered the subject! It just means you’re good at the test! But wait, why use tests then? Well, sit down, get comfortable and let me tell you a tale of how we got here…)
The fact this conversation exists highlights that our education system is silly. Without evidence, I subjectively like the ideas in “One World Schoolhouse” as an alternative.
People who are really interested in the subject will not complain. I for example have been programming for the past 15 years and I will still read something like an introduction to C programming, just because there might be some ideas, explainations or examples in it that will help me deepen the fundamentals of what I already know.
Arguably there are topics where this works better and topics where this works worse. In electronics or mechanics groking the fundamentals is so essential to the whole field that you should know them by hard. And the only way to know them by hard is spaced repetition. So having some overlap in the things you learn is not only necessary here, it is crucial.
I know you typed it twice, but I just never heard that expression.
I think/hope you mean "guarantee" rather than "sign", because, yes, someone who has mastered the material is indeed much more likely to pass the test than someone who has not. The existence of non-representative counterexamples does not refute that.
If you pass an earlier test while missing some fundamental concept, then you'll simply spend the time learning it when you do need it. If you never need it, maybe it wasn't that fundamental after all.
When learning, unlike the person teaching you, you don't know what's coming in the next lesson or the one after it, so it's sometimes a good idea to trust them on a curriculum. It's also the one of the biggest downsides of being self-thought (as I am in big part), you always have holes in your perspective that you're not even aware of and it takes years to stumble on something that someone else was told in the 1st year of being a dev.
Only if one knows what they don't know. And fundamental concepts have a habit of hiding in plain sight. It's easy to waste lots of resources because one doesn't know about a fundamental concept.
You can probably find a solution with what you already now (as a junior programmer) as most problems programmers have to solve are not that hard but you may completely miss a better solution because you had no idea it was possible. I may be fine but you may also lose a lot of time later because it wasn't.
I agree that it's possible to self teach almost everything in CS but the point of university is to speed up the discovery of CS from scratch and have solid foundations. You certainly don't know everything graduating university but should now where to look when you have a problem imo.
Given that environment if someone comes to "introduction into analog sound synthesis" I can expect them to want to hear just that (or they need the credits). If people don't come to learn, I will not force them. They are grown ups, it is their decision if they want to learn.
Please also consider that unless you have experience in teaching groups you might have a rose tinted view of what an instructor can practically achieve. If you have a group of 20 people with 10 of those having no clue what you are talking about, 2 that are very advanced and the rest with mixed levels inbetween you must find a way of teaching the 10 that have no clue while also not boring the 2 who are more advanced. This can be a hard problem to solve in a good way as you cannot split yourself. If your group is bigger it gets harder even (and at some point you have to stop worrying).
I am totally for people being able to skip classes where they can demonstrate they already know everything thought in it. But practically it might be a lot of work for anybody working at university to create such an test for e.g. just one person. From the perspective of a student it all looks a lot simpler than it might be. For example even if someone could test a student to make sure they are not sending them into a hail mary be letting them skip fundamentals, maybe that someone has so many other tasks on their shelve that even if they wanted they cannot do that?
Also: for every student where this might make sense you will get 3 or 4 that really overestimate themselves with a nearly narcissistic inability of judging their own ability. You know, the type that would like to construct the equivalent of an iPhone in circuit form while not being able to explain ohms law.
But of course they could. And indeed, considering them narcissists is what many hate about the academia. Maybe they'd be better off taking a less linear path. Sure, in the context of the academia skipping classes is not justified and there's no problem with anything you're doing. But when one is frustrated with schooling, the first instinct is often to try to go faster. Quitting school is supposed to be a very bad thing, that's the one acceptable way to do something different.
For the most part I had the nicest and most accommodating teachers, had no problem with them, they had no problem with myself, can't blame them for anything. But I do strongly dislike the nearly universal borderline religious belief in traditional schooling being the right way. It's okay to not know some thing and not want to know them.
College wouldn’t exist without it.
That seems like a bad reason to err on the side of unconditional speed limits. Opportunity cost is real.
On top of that as an educator you have a real responsibility not to send someone on a hail mary without fundamentals, which might ultimately drive them out of university because it will not get easier after that. This is a real risk.
Another aspect: What so you think how many students will try to skip classes if word gets around it is actually possible to do so? How many of those will cheat to do so? And bow many of those who made it through will be able to face the next exam without cheating?
I talked to the more friendly advisors in the Philosophy department, who also had the ability to add and drop students from classes, and got them to add me to both classes I needed. I persuaded them not to worry about the overlap. I completed the semester by attending the higher level class except for exam days (I had to get a special dispensation to take one final early because their final exams were scheduled at the same time).
My point with this anecdote is that sometimes more powerful people try to impose a speed limit and sometimes you can get around them.
My CS class very quickly divided into "those who could already program" and "first time programmers". (testing out was not a "thing" then - at least I never heard of anyone doing it for any class.)
Interestingly it was more classification than groups. I spent time helping friends who were stuck, but I also spent a lot of time with other advanced students, in the lab, pushing each other. The assignments were trivially simply, so we just spent time making them more interesting.
Because the course work was done quickly, we had a lot of time to go the extra mile. Time we wouldn't get later in life.
The important things though, the theory, stuck with me, and even the early classes were valuable. Intro to programming only lasted a few months, then there was a lot more theory, and we could meld that into our code a lot more.
I went into college knowing how to code. I came out knowing how to program, and there's a big difference.
If you are in college today, funding aside, I'd say - don't be in such a rush to finish. Fill your spare time by sucking in riches, seek out every nugget, help others, be challenged, see the time as an opportunity, not a class to simply pass.
As a result, I learned way more than curriculum offered, got way harder assignments and projects (like designing a compression algorithm from ground up as a graduation project), and satisfied much more overall.
I continued my M.Sc. and Ph.D. at the same university (because I already had a job, and I just wanted to learn), and this head start (and being in good terms with the professors) allowed me to do similarly heavier curricula during these studies, too.
It's worth it.
If you want to work through this material yourself, you may enjoy Hubbard & Hubbard’s book, https://matrixeditions.com/5thUnifiedApproach.html
https://www.edx.org/course/multivariable-calculus-1-vectors-...
https://www.edx.org/course/multivariable-calculus-2-surfaces...
I did test out of some classes, though they only allowed it for a handful of classes. And you needed to be able to get a higher score than students who had just finished the class, while doing so with much less material (students going through the class get told specifically what's on the test and are given materials accordingly; people trying to test out aren't given either). It was also surprising that on the Computer Science II test they had a large amount of the score based on memorizing default Java methods.
Because I was doing this strictly for educational purposes, I got really interested in how much students were retaining between semesters. It seemed to be very little, and there was little that they needed to retain. Most would remember big O, but no one remembered little O, big theta, Big omega, little omega despite the time they were required to memorize it. As I mentioned, CSII was very Java focused where students had to memorize specifics of default methods and Java inheritance edge cases, but after the class was over that information was almost all forgotten. You might have a class where you do a few weeks of stack based programming in a toy language, but it's not enough to actually do anything with and, again, is wiped from the students mind as soon as they finish their finals.
All this was driven home even more when I tried to discuss topics with colleagues who had CS degrees. They retained a very small amount of the things they studied in college, with the vast majority was met by "Oh yeah...I think we studied that? Isn't that the thing where [insert some vague broken memory]."
The whole thing felt mostly like a waste of time in order to justify four years of teaching. Of course, someone who never studied programming or CS would get _something_ out of it, but even there it seemed to be in the most inefficient way possible.
I’ve wondered if the professors didn’t know or if the admins just didn’t believe me I would’ve been able to. (And this was with a passing AP test score from high school)
I feel like Accreditation is to blame. It’s such a racket.
its probably a more boring answer like university bureaucrats refusing to budge because they just didnt feel like it, which is a rather more tractable problem (in the large; individual students are powerless of course and i have been there too) than the accreditation system.
we need university entrepreneurs to disrupt lazy universities who arent serving their customers well. sadly lambda school has left a black taste on all trying to do this. but i have hopes that freecodecamp will do it the "right" way - patiently.
The same thing doesn’t happen with computer science.. i.e we don’t send young children to CS tutors 2-3 times a week and make them practice on a daily basis. Perhaps society has yet to master creating virtuoso programmers in the way it has spent hundreds of years perfecting the education of young musicians.
Where there's a will there's usually a way, but you need to either know how to manipulate the powers that be, or have enough confidence to bypass them.
Of course an intro course that is this well thought out is rather rare, in which case experienced people should by all means skip the rote nonsense.
Doesn't hurt to ask either.
I tested out of the maximum number of courses for my degree. It's insane. This is why I have such a low opinion of structured education. I hope to be someone's Kimo. I had my own who pushed me to build good software, not be lazy, and a lot of fundamentals on simplicity.
The dean was a cruel man named Warren Harrison who accused me of trying to "game the system" and told me that they don't tolerate people like me here. I shared the story later--other people had similarly negative experiences with the guy.
I’m guessing standardized education prevents the kind of judgment calls that would allow a department to let a knowledgeable student skip classes they don’t need to be in.
The school had a policy that you could not test out of the core courses in your major (I was a physics major; had I been a different major, I could have at least gotten placement, if not credit.
I had to re-take two physics courses at a California State University school that would have otherwise transferred from a junior college due to minor catalog year changes. Ironically the JC physics courses both had labs (the usual stuff in Electricity & Magnetism, and a whole bunch of optics and slit diffraction fun in Modern Physics), while only the E&M lab remained at the four-year university. The Optics/Modern Physics prof from my retake also taught astronomy, and was still harboring a minor grudge against Neil deGrasse Tyson from some shared research work in the '80s.
Also couldn't test out of or otherwise apply transfer credits to freshman biology, and the subject matter was at about the same level as what I experienced in 7th-grade science at a rural public school.
Intro to CSCI was unavoidable, as my previous programming coursework was coded under MIS. The cherry on top was the professor pulling me aside after the first midterm, telling me "you could teach this, since you can't test out I'm just giving you an A for the whole course". Despite this I still attended his rambling lectures, and found that he did actually manage to tie all of his tangents together rather like a call stack in human form.
On top of all of that, the transfer coursework that actually applied toward the degree that did surprise me were my technical training credits from the Community College of the Air Force. Ten units under law enforcement and field work actually took care of general education elective requirements - "Fundamentals of Ground Combat" was rather amusing to see on the graduation transcript.
For example, I completed my CS degree in 3 months: https://miguelrochefort.com/blog/cs-degree/
I actually was able to get our 2x weekly meetings to count as course credits for basic classes and the professors who ran the group vouched for me to skip some of the pre-requisites for higher levels classes. (e.g. I took Algorithms II while in the same semester the competitive team meetings counted as Algorithms I).
Then my family moved, I wanted to transfer schools to keep living with my parents while attending school. The new school wouldn't accept my "free" credits. So in my third year of college I had to take intro to computers, intro to programming, etc.
I did that for one semester, hated it, then managed to find a job writing Python. I still haven't graduated, heh...
I asked to test out and the department head said no. I had almost an entire CS degree and still had to take the easiest course. We made a compromise that if I take the midterm and exam with all the other students, I can pass the class. I got a 100% on both and spent like, 1 hour learning Octave and C for each exam.
That next course also seemed pretty basic, but I hit a brick wall, because I didn't have the required math credits to get into the next course up if I tested out of that one. And testing out of a math class, while certainly doable, was not as enticing as a prospect :)
The truth is, while it's reasonable for an intro to CS course to be kind of basic, I think it was a good sign that either college, or at least the college I was going to for computer science, was not a good option at that point in my life. Thankfully, circumstance would knock me into the industry instead in short order.
(Now I'm interested in college, but not for computer science.)
I very much get the desire to place out of CS1 or whatever. My experience was that the overall college experience was the jam. A low level class here or there isn't going to change your life.
College's point was never about learning anything for a while now, it's a credentials machine and the machine only works in one way: the one that extracts the most value out of students, the longest.
You mean shallowly enough just to pass a few tests that can be easily hacked by accessing the previous year's? You can definitely fake it until you get the paper, I've seen that so many times.
Iratewizard may or may not be better than everyone else; but he/she is almost certainly better than average at a lot of things. We all are.
It sucks, but there are people out there no smarter than you yet more powerful, and sometimes they impose a speed limit.
If you get the opportunity though, I'd still suggest doing what the author did. No harm in learning something twice, particularly from two different perspectives.