Ask HN: Online community for self-taught CS hobbyists?
Hello,
I want to follow the advice from https://teachyourselfcs.com and start his curriculum with 'Structure and Interpretation of Computer Programs'. (It's a site that recommends various resources to teach yourself everything you need to know to become a true software engineer. Or set yourself up to become one, rather. )
However, I already found myself with some questions and I was wondering if there was a community (or whether somebody wants to create one with me) for people who are on the same path.
I have little prior experience but I'm very curious about CS, programming and cybersecurity. So I'd like it to be a group that is comfortable with slow learning and basic questions. Or even figuring out how to re-learn high-school math in order to progress to CS-level math.
If anybody is interested I will post my e-mail, but maybe there is something similiar already out there. I was a TA for the introductory programming class at Berkeley, CS61a, where we used Structure and Interpretation of Computer Programs to teach Scheme, a statically-scoped dialect of LISP. Frankly, I do not recommend it. Scheme is just another programming language, it is not "the one universal programming language to rule them all and in the darkness bind them". I spent years in mathematics and CS theory and I am a published theoretician. I took two graduate classes from Karp himself and even solved one of Karp's open theory problems because I thought it was a bonus homework problem in an undergraduate class. I am also a programming languages researcher and a serious C++ dev and am now teaching myself digital circuit design. I wrote an integer user-mode RISC-V 64 chip that worked the first time I got it expressed in verilog. That is, I know what I am doing in both theory and practice. It sounds like you want to know the "heavy, deep, and real" computer science. Never forget this: the only theory worth learning is that which comes from real problems. The theoreticians will tell you otherwise, but do not listen to it. Always think about reality first, theory second. Therefore: first just learn how to code like you know how to breathe. Learn one editor and one language/ecosystem really well. I use GNU emacs and I write most everything in C++. The first language I recommend is RISC-V assembly language. Then learn C and configure gcc to emit the intermediate assembly interleaved with comments showing the C code that it came from. Practice writing C, predicting the assembly that will come out, and then seeing what actually comes out. Practice stepping through your programs using the debugger. Practice profiling them using gprof. Write lots of little programs that do something mundane and useful, write tests and documentation for them, and release them as open source. See if you can implement one program that someone else finds useful. One way to get started with an established open source project is offer to write tests for them. The best way to learn fancy algorithms is to implement them. This was part of the original idea for MOOC’s. But then budgets were reduced and they mostly became online correspondence courses without active cohorts. My advice is to take an online course with an academic structure so there are explicit minimum expectations for participation and pace of progress. It solves the matchmaking problem directly. Indirectly it might offer you useful accountability…I mean here you’re solving a problem that feels like learning CS but isn’t. Good luck. I presume you’ve tried /r/compsci or /r/programming ? Or other forums ? You’ve found them lacking in some way? Many folks are collaborating online in large communities of any number of topics , especially computer related . Have you looked into your local geographic area for meetups ? Or post to the sub Reddit for your local geo asking people to meet up to study ? To be honest I probably didn't think this through well enough. After some of the responses I realized that a group is probably not going to help much. Answers to questions can be had from various forums and I was probably looking for something like emotional support, or a 'tribe'. Like the Odin project. But if it's not already out there getting together with just a couple of people on discord won't lead to anything 99% of the time. So I won't pursue a group anymore but I do thank everyone for their thoughts. And if others want to get together they still have the opportunity. I'm interested! Have been looking at this myself, but wasn't sure what form such a community / activity should have. This can of course be overcome by going one level up, and make the form one of the initial discussion topics. Here's some advice: if you're really interested in learning, "Computer Science" than I'd actually steer away from online communities and the like-- you're going to run into a lot of people that you might assume know things that give you ideas that you'll eventually have to self-correct. There are relatively few academically competent, "computer people" in the world after the dissolution of science and technology programs in the post-war economic period. Watch Alan Kay talks. Read Computer Lib by Ted Nelson. There's a theory that through the 80's and 90's that, "many of the elves left Middle Earth" (ie. the first competent generation of PC-literate computer people have left the industry) Bill Atkinson went and became a photographer after developing HyperCard. There are other examples. Learn, "Humanism" first. Computer literacy will follow if it is your destiny. > There are relatively few academically competent, "computer people" in the world after the dissolution of science and technology programs in the post-war economic period. ...what in the hell are you talking about. Thank you for your thoughts, I will keep that in mind.
What do you mean with humanism (I did Google it) and how would computer literacy follow that? I'm in my mid thirties and I worked with people most of my life. I'm looking to pour my ambition into something different now. I know the word 'hobbyists' is in the title, maybe that was a mistake. I intend to use the knowledge for a career down the line. I just don't want to be somebody who learns to code in 6 months and then is thrown into the arena. I want to really understand stuff and then see where the path leads me, because I have the luxury of taking my time. Honestly. I can't think of a better way to learn. Here's something they might not tell you. That feeling that you've been thrown into an arena, that never leaves you. Let's say you spend 2 years learning how to write c++ for a hugely popular mobile platform. You're an expert. Then PalmPilots go out of fashion so you learn Java and spend 3 years becoming an expert in writing Blackberry apps. Kaboom! So you switch back to C++ for PocketPC.. then crap back to Java for Android.. OMG Kotlin. Oh.. ReactNative. OH.. How about you spend 3 years learning Rails then 2 years learning Elixir and 3 more years learning python.. Back to Rails, but now it's completely different. Node? WTH is Node? How about 3 years on React, then switch to Vue. Nope! Ember! Becoming an expert is really about being able to keep moving. Take the 6 months, and get in. On the positive side. You'll never really understand stuff, it moves too fast, and you'll love it. Ok, I have an Alan Kay talk running right now, and I think I know where you are coming from with the humanism thing. I do in fact intend to use the CS knowledge for what I consider a good cause. Not just to get a job. I'm also re-reading sicp. Maybe a usenet group called rec.sicp? Sure, let's see who else might be interested. What exactly do you have in mind in terms of a community? Are you looking to develop a platform or use existing platforms? I am also interested in doing this. Why don't we start a Discord or Slack and organize from there?