Hacker News new | ask | show | jobs
by latenightcoding 1846 days ago
as a self taught individual I always find it outstanding how much things they are able to pack in a CS degree and how fast people forget all this stuff after graduation.

Like how many of your coworkers from top CS schools remember most of the material in their compilers, cryptography, comp bio courses?

EDIT: To clarify, I'm not criticizing this approach, I think it's great to expose students to as many subfields as possible.

15 comments

The key point isn’t that CS grads need to remember the stuff they learnt. What they need to remember when facing a real life problem is that they had studied about something that was similar to the problem they were solving, and have the ability to look up and easily grok the solution they had studied a decade ago.

As someone who is not a CS grad, it’s often difficult to Know where to even start looking for a solution until many years of experience, something that CS grads I’ve worked with and mentored were able to do as interns.

Of course, there’s always the flip side that CS grads need to learn to not always apply the fanciest and “coolest” algorithm that they learnt in college because it isn’t always the best approach to a problem, but that’s a much easier skill that can be learned anywhere within months to a few years given the right mentors.

I also think real value comes from learning how to learn about computers.
I made an effort of actually trying to retain what I learned, but mostly it just mean that I search just as often though.

However, I see the depth of my knowledge in computing isn't that deep.

I can now define what a computer is without fumbling for a definition.

Agreed. I think it’s primarily reference material. I took an Organization of programming languages course once, and even though I don’t use Prolog everyday, I’m able to jump and think about it if I ever have a case where I’m working with Boolean logic. Alternatively, I don’t know much about semaphores in the OS, but when I think about locks, it’s something I can refer to for more ideas. I wouldn’t say it dramatically improves my life, but it’s just random knowledge that I wouldn’t be intimidated by if I stumbled upon it in the real world
I switched into Software Engineering following a physics undergrad and had to self-teach the majority of what I know.

10 years in, I find that many individuals fall into a trap of having forgotten many concepts while also thinking that they weren't useful in practice and a bad memory of having to learn/crunch the topic.

This was a significant difference from my experience where most concepts I only picked up as I found them useful/interesting to my work. As such I generally have a sense of pride/enjoyment from seeing an optimal algorithm or simplification of a problem based on concepts in the literature.

I think the 4 year CS curriculum could be revamped to focus on semi-practical projects with less focus on individual topics. Crunching algorithms for 2 semesters probably makes aspiring engineers feel that they are simply memorizing pages from a book which are trivially indexed by google.

> Crunching algorithms for 2 semesters probably makes aspiring engineers feel that they are simply memorizing pages from a book which are trivially indexed by google.

I realize that the majority of engineers will never need to use any of the more advanced topics taught in an algorithms class, but I hope you recognize the irony in this comment; the “trivial indexing” performed by Google is anything but, and, in fact, is only enabled by those very algorithms, implemented dozens of times, in multiple languages, with subtle variations and optimizations and under non-obvious reinterpretations, at every level of the stack.

For the uninterested, it's easy to think or claim that a library or service will do the heavy lifting for you. If someone's goals with a comp-sci program are SaaS apps, web development or other topic which they perceive as [Not Hard], then it's easy to fall into the trap of thinking these topics don't matter.

I've generally found that most new or novel projects require a strong understanding of the fundamentals.

Yea, I kind of took a similar route. I was so bored near the end of my business major and tacked on a comp sci minor at the end. Those few classes I took were amazingly interesting then and most are still with me now. I was lucky enough to have a business internship while in school where I was exposed to the tech side of things and that got me extremely interested in and motivated by computer science. I'm often curious about what a full degree would have given me or if I would have had a better career if I went the comp sci route from the start. At least for me, I feel like I've learned close to 99% of what I know now from work and from learning in my free time after school. I feel so lucky to genuinely enjoy my job and be interested in learning more and expanding on my skills even to this day.
The best parts of education is not primarily the material you remember. It's the effect on your thinking patterns as a result of studying and the familiarity with a school of thought.

For example, I studied Greek before software engineering. I've forgotten quite a bit, but theres an entirely different set of thought processes I have access to while doing software engineering because of it.

> It's the effect on your thinking patterns as a result of studying

I've heard this over and over again, but I don't believe there's a shred of evidence for it.

I see this type of like used to justify whatever it is the speaker enjoys being forced on everyone else. Something like "everyone should learn philosophy because it trains the mind" usually means "I like philosophy and wish it was taught more at schools".
The statements you provided are obviously the same thing though, no?
If you interpret "the mind" as "my mind" then yes, it can't be more obvious.
I strongly believe it's a rationalization for having to spend so much time studying.
Pretty much. jlos is claiming that college educated people have a monopoly on certain thinking patterns, isn't that extremely elitist?
I think it depends on what you think education is : if you believe that education is going to an elite university then I think it is elitist. If you think education is being exposed to a wide range of ideas and perspectives - a range beyond which you would have found by yourself - then I don't think it is. A kind Aunt with three bookshelves and an open mind can give you an education that you couldn't buy. Would that make you part of the elite? It would be difficult - it could take years - but it's not elitist.
Every discipline (academic, artistic, practical, even athletic) deal with certain types of problems and have develop their own heuristics for dealing with those problems. And because most discipline involve not a single skill but a set of skills, some disciplines will have skill overlap.

If you play music, run your own business, study (or practice) engineering, or become involved in an academic discipline you develop a set of skills you can carry to other domains. Don't really see how the dispute here

I’d say the best part of education is familiarizing yourself with the domain. You may forget the details but the familiarity and know how about what a Sobel edge filter is useful the next time you encounter such a thing in professional life.

Analytical thinking and pattern recognition is indeed also a key benefit of education.

At least this is what I told the students when I was a TA for a class teaching prolog!
Can you expand a bit on how Greek helps? Are you talking about Ancient Greek? I know a few latin derived languages but I never taught about the relation to computer languages.
I’ve recently been trying to translate a book my dad wrote from modern (‘demotic’) Greek into English. It’s a very slow process for me, as English is my first language and my Greek is very poor. I have to constantly look up a lot of words and puzzle over some sentences repeatedly. I did notice though that Greek (or my dad at least) seems able to communicate ideas in very few words that when translated into English, as directly as I can manage, I find require longer and more ‘flowery’ sentences to achieve the same effect, at least with any degree of elegance or conventional tone. I’m not sure how much of that is due to his writing style (or mine! :) and surely it is a very qualitative, subjective impression, but it does seem to me that Greek is quite an ‘efficient’ language. I’m a terrible, entirely self-taught programmer/copy’n’paste script kiddy, but I would imagine that learning any new language helps with programming on some level (and perhaps maths/logic even more so?): dealing with different symbolic representations, grammars, alphabets, logographs etc. Here’s an article I found on the subject of formal grammars/Chomsky and their influence on computing: https://exaud.com/noam-chomsky-computer-science/
Yes, ancient greek. And I think the connections are mostly indirect. In interpreting literature in another language (Latin, Greek, etc) you spend time analyzing syntax and grammar looking for the idea or intention. Programming is very different, but code does still express and idea or intention.

Also, really helps with reading and written communication.

Thanks! I believe in it! We don't know what we don't know, if we learn only useful stuff!
If you understand a concept well enough you can never really forget it. I did a very similar 4 year CS curriculum and a decade and a half later can still recall pathfinding algorithms, Diffie–Hellman key exchange, red black trees, big-O notation, OCaml, half vs full adders and lots more with a very brief glance at reference material.
What university has taught me is to not give up and to keep looking for the solution, no matter how hard the problem is and how little I know. Sometimes there was no choice but to crunch hard math problems for endless hours. Most people give up too easily when they have no natural interest for the type of problem they are facing.

Do I make use of all the material I was shown? No. But it is really nice to have that universal background which, for the majority, I would never have studied on my own. You could ask the same question about middle school or high school - do you really need to know about biology, language or arts to be successful? Do you remember many details? Of course not; general knowledge is still incredible valuable.

People will forget stuff over the summer before the next school year even begins. Much less waiting until after they graduate.

Material has to be covered repeatedly in a series of courses building on each other. E.g. first you learn basics. Then you apply it in subsequent classes. This is how mastery in learning works for anything. One class on an isolated topic is probably a waste of time in the long run, unless it really makes an impression on you for some reason (e.g., you really love it).

Some programs, especially overseas, let people mash together a broad range of classes on disparate topics with mastery in nothing (except perhaps for skill at cramming itself). Those are almost worthless degrees.

Brain was designed to process information(mostly), not to store mass quantities of information. I mean it's more like a RAM/Cache than Amazon Glacier.

If you don't put knowledge into practice it all goes quickly.

We can store massive quantities of information if we bother to hack our brain/learning process.
Yes, but it has to be maintained.

The issue is that we have no incentive to remember information that is 'useless'. So the brain, being efficient, forgets it.

I was self taught and then got a CS degree. The degree filled in a lot of holes and actually I could still write a compiler if I had to.
I think it depends on what you mean by remember ... I think they would have an easier time if they need to re-learn it in the future
I did a degree, and I am jealous of how much stuff is packed into this one. Kinda wish I could take this one to be honest.
Indeed most CS graduates will forget the content after the exams, but after the process of working through the courses, they are much faster in picking up the knowledge when needed later in their career (and they are also more confident and comfortable about the subject compared to those who are never exposed before)
I think part of the point is to expose people to a breadth of sub-disciplines to help them find an area they enjoy.
I didn't like it

I'd rather take less courses and focus better on some

on the other hand this approach allowed me to graduate faster

SerenityOS creator Andreas Kling is self-taught as well

1. https://www.youtube.com/watch?v=rS6l7p86cyw | How I got engineering jobs at Apple & Nokia with no degree

> Like how many of your coworkers from top CS schools remember most of the material in their compilers, cryptography, comp bio courses?

Nobody forgets a compilers course.

A "compilers" course is probably the first CS course where debugging is real--and terrifyingly hard. A compilers course converts a programmer from a "null pointers are bad" person to a "null pointers are evil" zealot.

Compilers courses are probably the closest that a CS person will get to PTSD.

Huh?

I've taken a compilers course, at Stanford no less.

I've written a couple of compilers and some near-compilers. (A very fast simulator can be a lot like a compiler.)

I don't think that null pointers are evil. In fact, I like null pointers.

My beef with null pointers is that very few languages support multiple null pointers. (No, mocked objects or sentinels are NOT a good substitute.)

Yes, I want multiple isNull values that can be distinguished but can't be used. (Python's "lots of things are false and you can create more" is arguably the closest.)

Can the Stanford compiler course be self-taught given the online material? What's missing?

I've seen it available on Coursera. And a lot of the current material is available online. But I tried the Coursera one awhile ago and got stuck.

I'm finishing a CS degree but there's no dedicated compiler course here.