Hacker News new | ask | show | jobs
Ask HN: Is it possible to never take formal CS classes but learn from books?
5 points by newsoul 1029 days ago
Is there anyone on HN, who have never learned programming or CS by taking formal classes, but learned everything by reading books on their own and building stuff that they wanted?

What was the process like? Maybe they were from different major like engineering, physics, maths, biology, social sciences, humanities?

8 comments

You're missing the point.

CS actually has very limited utility in the software engineering and web development industry at large. It's very rare that you'll need to work out the time complexity of something or pick exactly the right data structure to use.

The value is in the fact that you graduated. That fact means you had the access to resources, the intelligence, the conscientiousness, and the interest in the topic, such that you could stick that out for 4 years without dropping out. That, in the interviewing company's mind, makes you "one of us", and who'll continue that grind on the job without giving up, hence the value.

The knowledge actually has little value. As a tech lead, I'm not interested in if you know what a double linked list is. I don't use those. I care if people are going to have to routinely rescue you from stuff like an npm package version problem or setting up xdebug or your local dev environment failing. That's what actually affects getting things done.

But if I see a degree in CS on someone's resume, I know what they've successfully been through, proving their nature is a fit.

On the other hand, if you show up saying you read CS books, I'm going to ignore you unless you've got some solid show-and-tell.

You be far better of joining the "building in public" indie hacker crowd, because you'll have practical skills to show for it.

You're not wrong, but OP didn't say they want to study CS for the sake of their career. Maybe they just find it interesting and want to learn for the sake of learning - in which case it's definitely possible to learn a lot without formal schooling.
>As a tech lead, I'm not interested in if you know what a double linked list is

Well, I have a math degree, and when I interviewed for quant roles that involved coding as a secondary task I definitely needed to know what a double linked list is(along with BFS/DFS, sorting algorithms, dynamic programming principles, etc).

I think double linked list is a bad example because every single decent CS degree would have a datastructures/algorithms class that would definitely cover linked lists in a lot of detail.

I do agree with your overall point, at the end of the day saying "I read Introduction to Algorithms" has 0 value unless you have a decent GitHub to go along with it.

+1 I totally agree.

Labels like certification, graduation, etc. play a role only at the very first stage of recruitment. When someone lacking skills, time and/or attention is sifting through resumes. This is not the interesting part for jobs I imagine you 'd want.

Beyond that, as an interviewer I'd focus on motivation, attitude, intelligence and skills. Skills are important, but rarely does it matter where those skills were acquired.

[EDIT] and while personally I'm sure I was selected once or twice based on my diplomas, I generally find (contributions to) a nice piece of software or github repo much more convincing than some CS degree. Proof of the pudding is in the eating.

Absolutely it is -- your talking to a neuroscientist who did just that, sort of.... But it does help to take the classes. You can learn a lot of music theory in books, but until you play music in practice, you never get close. You can learn neurosurgery theory, but it doesn't change the first day when you actually perform it. They're quite different! The classes are an accelerator. You can learn it all on your own, but the classes can, in many cases, offer a short-cut to learn things you might not find in the books. For example, you will find many sorting algorithms in books, but will you discover what leftist-trees are? Or needlesort? These are "tools" in the "toolbox". Don't get me wrong, you can do it, but you'll be buying a lot of textbooks on your own. Again, notthing wrong with that -- we both know most college classes you do the work and the lectures are there to assit - you can skip the lectures if you desire. So, you can teach yourself -- it just takes longer. A history buff turned system admin once put it to me this way.... "I learned CompSci myself, but added the degree later to be accepted. You can it yourself and become expert in your field in about five to ten years - or take the classes and learn a lot in two. That being said, even an old history major can do it."
One would need logical thinking, the ability to read + exercise + memorize and execute the knowledge.

If you take CS courses, you learn from "other" in a compressed way and get some nice explanations. Also, the exams you write in courses foster the memorization and execution.

So, it's perfectly legit to learn from books/websites. But you need problem solving abilities, which is you mostly learn while studying - no matter if its CS, physics or any other subject.

The only thing you learn is problem solving:)

YES you can.

I'm an EE who learnt CS from books and by actual programming. It was an iterative process that worked both ways for me. I would write a program to accomplish something specific, have problems and delved into the books to solve that problem and/or better understand how to better do it. Then in other cases I would read some material in a book and then program it up and fiddle with it to understand how it works.

IMO working through MIT's SICP: https://web.mit.edu/6.001/6.037/sicp.pdf is profoundly valuable. Although there are Python and Javascript versions of that material available, I recommend the 2nd edition's Scheme version. Once you grok the essential core principles, you will readily apply your knowledge to any reasonably competent "modern" programming language.

The foregoing approach worked well for me. It lead me to complete a ME in CS, work in industry for a couple of decades and then complete a PhD in SE.

It is of course logically possible.

That doesn't mean it is practically possible for you (this is not a moral judgement).

It is a question of your actual motivation. If you are attracted to the work of learning CS from books, that's one thing.

If being a-person-who-knows-CS-without-formal-training is the important thing, that's another thing. It can be hard to recognize that obtaining an identity is the motivating factor in one's self.

Anyway, if you want to learn CS from books, buy a boxed set of Knuth and get started. He's been working on the TAoCP since 1962, so expect a long haul.

If you just want to learn CS, going to school is probably a more straight forward way to start. And it's not one or the other, you can go to school and learn from books.

The advantage of school is it provides a kind of legitimacy that only comes from formal education. Know if what you want is legitimacy.

Good luck.

---

Things I did not say:

1. Knuth is easy.

2. Knuth is the only or best book.

3. Formal education is the only form of legitimacy.

4. The legitimacy through formal education is a good thing.

Just letting the whole internet to know.

It's possible to learn CS on your own, but judging by how many people on HN seem to have a complete misunderstanding of what big O means, I would say it's rare.
Mostly. I studied math, lived with cs majors, read their books, and downloaded the syllabus for a couple universities and did those problems
The blogger Scott Adams did something like this, teaching himself (so he claims) the entire MIT compsci syllabus in a year: https://www.scotthyoung.com/blog/2012/09/27/mit-challenge-do...
*Scott Young, sorry, not Scott Adams. Scott Adams is the Dilbert guy.