Hacker News new | ask | show | jobs
by poulsbohemian 1025 days ago
Here's perhaps some unexpected and unsolicited advice... so pretty clearly you aren't going to have a hard time with the CS curriculum (assuming that's what you intend to study) so my $0.02 is - find a second or even third major to augment your skill set. If you are already able to get to this level on your own, you'll likely breeze right through a typical undergrad CS course of study. So consider other courses of study that might be a bit more of a challenge / might give you an even broader skill set four years from now when you enter the workforce or consider grad school.
9 comments

I don't know the specific curriculum but I would caution that being a competent programmer does not directly translate into academic success. Yes, the author will have a massive head start but but that does not necessarily mean they will find studying easy.

At least that was my experience as a self-thought programmer. The first weeks were super boring for me but also lulled me into being complacent until I suddenly found myself in deep trouble. Just because you understand the practical side does not mean you can will automatically grok the academic side of things.

Fully agree on that. In my first year I started discussing with the professor during a lecture that for sure java strings are not immutable because you are still able to access the memory behind it and proving it to him, while completely missing the point of the concept of an immutable object and that he was fully aware of that.
i did this and regret it (38 now and have a technical CS startup), i studied electrical/computer engineering but what i should have done was gone to a better CS school or get approved for accelerated course work. the main problem for 18 yo me was lack of visibility into what a good CS program looked like, as opposed to just knowing more than the CS teachers at an eng school not ranked for CS. also, take as much math as you can.

you should be studying: lisp ocaml haskell, interpreters (SICP), compilers, type systems, transaction processing, effect systems, FRP, concurrency NOT java guis python SQL databases webdev gamedev .. whatever

Can you expand upon why you chose those particular things to focus on? I’m genuinely interested and don’t have a traditional CS background so I’d like to know what I’m missing.

(Serious question. I’m not being snarky)

As a self-taught seeker who spent 20 years in search of a better way, this is where I ended up for the heart of computer science. Most software engineering topics I picked up on the job — even distributed systems — but the actual computer science aspects I had almost zero exposure to at work. I had to seek those out, which meant rejecting the commercial methods/doctrines/thinking and escaping from Conway's Law which has infected anything touched by money. "It Is Difficult to Get a Man to Understand Something When His Salary Depends Upon His Not Understanding It"

I now see actual CS exposure in industry as rare broadly (you'd have to work in a research org, which is both rare and also requires a PhD or other credential for one to be selected for the opportunity). Furthermore, the bulk of the CS literature & papers I encountered is embedded in those three programming languages. Now editorializing: I think Haskell is like "the periodic table of computation" as well as basically "math notation for computational structures." These deep science-y topics are hard to learn outside of school, the material is dense and there's no clear and accessible trajectory to get there, and to even identify such at trajectory you need role models and teachers of which kind industrial programmers aren't exposed to.

In conclusion, I'd likely have gotten to where I am today at age 30 instead of 38 and regret the lost time wandering in the swamp of silicon valley arrogance. FWIW my startup is a CRUD Spreadsheet, we apply functional programming research to user interfaces and web development as per https://github.com/hyperfiddle/electric

> lisp ocaml haskell

Covers all of the major programming languages in a deep way.

> interpreters (SICP), compilers, type systems, transaction processing, effect systems, FRP, concurrency

These subjects are the core of almost any system that you'll encounter, in practice - academic or industrial.

if only the industry recognized this – the-world-if.jpg. We get Conway's Law instead, which I'll cynically restate as "the org is a reflection of it's leadership" or "the org exists to lever up it's leadership, recursively" and that unfortunately has little to do with science
Thoughts from a Stanford CS graduate:

https://www.youtube.com/watch?v=4SiFgB1lGxw

Laughing, funny video. I don't agree with the thesis though (is he being sarcastic? I only skipped around), what the guy seems to want is a 2 year apprenticeship in software engineering aka bootcamp and internships. So in the end comes off to me as a childish and ignorant perspective
Can't agree more with this. I ended up double-majoring Philosophy and it was fantastic and has surprisingly helped several times in my career
I still honestly believe coding should be a requirement in all philosophy courses. A system for layout out logical structures efficiently was something philosophy to this day sorely lacks, with formal logic being practically unreadable. And computer science has literally spent 50 years working on how to do that well.
I actually ended up getting to teach a 20 minute segment on neural networks to my fellow philosophy students during a senior seminar on phenomenology, was great fun
Reading this comment and its replies, I think it's evident that there's no "rule" as far as what you should or shouldn't do goes.

For example, I had a second major in theatre, but I had no delusion of working a living in theatre that could compare with the kind of career that a CS degree typically delivers. It was and is a personal passion of mine, and to be able to deepen my understanding of it in an academic setting was valuable and rewarding to me personally.

Studying theatre paid dividends in other ways as well. Managing a production is a beast, and you learn a lot about how to manage people and get things done. Dramaturgy, often called literary analysis, was quoted by my professor (a scholar on the topic) as "what are the parts, and how do they go together?" -- a shorthand that I still use to this day when thinking about a new system.

If it wasn't clear already, I had a very positive experience in my studies at a Liberal Arts school, where the connections between fields, and the value they can offer each other, are a big focus.

Just taking on a second major won't necessarily pay off, but keeping in mind the holistic point of your education may create an outcome where the sum is substantially larger than its parts.

I'd suggest the opposite. I originally double majored in the arts before switching to tech. For me, the classes in all cases were less useful than self-study with projects, more expensive, and oftentimes outdated. The degree opened the door to more jobs, but the classes themselves weren't worth the expense in my opinion. Your mileage may vary by university, of course.
I agree with this, but have a note about what the second major should be.

I went into mechanical engineering because I had a great natural understanding of basics physics, materials, design, mechanics, blah blah. Even UC Berkeley engineering basically taught me things I knew or would have easily understood it I had to lookup that specific thing. I learned very little from my mechanic engineering degree.

I ALMOST think people shouldn't go into a major based on their strongest aptitude, but I'm not sure yet.

But definitely 100% add another focus since you'll probably breeze through the main course work.

But I dont think it should be philosophy or art or calligraphy like Jobs would recommend. I wouldn't pick a second major that would be a foolish main major.

Pick something that is a hard skill that is useful to learn and understand.

Maybe electrical engineering. Maybe industrial design. Hell, I think tons of people would be well served with what they learned with a second major in accounting.

The part of the advice that suggests acquiring more skills is good.

The other part, that suggests doing more courses of study is somewhat questionable.

Uni courses are designed partially to help you learn skills. But also for other requirements.

If OP wants to learn more skills, they should go for that. Whether in uni or outside. If OP wants to relax and have fun, that would also be a good use of time in your twenties.

Whether done as a minor or second major, or not, I'd like to "second" what dustingetz said: take as much math as you can. You can, IMO, basically never take too many math courses.
Take the grad courses.