lainchan / λ
Balancing self study
藤原純一 · 2022-04-17 00:04
I'm studying CS on my own, and I barely know math, so I'm catching up on math.
But, when I start studying math for long periods I start worrying that I will forget what I learned about programming, so I study both at the same time, but i end up half assing it, and then I've only learned basic algebra
I have trouble focusing on one topic at a time, I found pic related and j think it's a good plan, but it's been a year, and I only completed the first step, I feel I've lost a ton of time
Moore · 2022-04-17 01:59
Why are you studying this?
Tequila · 2022-04-17 02:04
>>30817
I couldnt find a hobby I liked, and programming was the only one that stuck and I want to take it further by studying CS, so I can make more complex projects (I'm interested in AI)
Turing · 2022-04-17 12:33
I have the feeling your like me in that you want to attack a single field, learn that, "finish it", and then move to the next. I'll tell you what works for me and if any of the techniques resonate with you pls steal.
The first issue is that you're going off of a list where you can only check off an item when you finish learning an entire field, so even though you're working your ass off on one of the bullet points you can't strike it off until several months after starting it. This can make it feel like you aren't getting anywhere, or that you're not *really* trying, but of course you are. On *this list* you've only crossed off the first item, but you've probably learned something like 30 ideas. The way to solve this is simple, expand your plan steps into their own lists of concepts included in that field. That way, you can a regular sense of getting somewhere in this insanely large undertaking you've set off on. If the resulting list is way too long and intimidating after doing that, break them up into separate files or documents.
There's also an issue of mindset. Thinking about the time you haven't spent working on something is a surefire way to demotivate yourself, stopping you from working on it, giving you more reason to quit next time. It's a negative feedback loop that's really tough to get yourself out of. Even when you do get out of it the feeling will still creep up sometimes because your brain is trying to convince you to stop hurting yourself and wasting so much energy studying this "math" stuff. How you combat this is, or at least what works for me, is to view those thoughts as not your own, and then when the enemy of self-doubt emerges again, cruelly swat it away without a second thought. Once you start doing that with all of your negative thought patterns, all of a sudden it feels like your infested with little demons telling you you ain't soykaf all the time. For me it externalizes those internal issues that are so counter-productive to studying, allowing me to combat them, if albeit it is kind of schizo. Last note on this point is that being physically able to stop yourself from thinking seems to work like a muscle, so if you have a hard time with that at first don't worry, it'll grow stronger with practice.
Lastly don't underestimate your subconscious' ability to figure things out and form connections for you about things you've read while you aren't actively studying them. You know those situations where you can't figure something out to save your life and you're staring at it with everything you've got but the thoughts won't come and oh god this is impossible why did I even get into this I'll never be assmartastheoldmastersohgodwhatamidoingwithmylife and then you give up temporarily, get some sleep or take a walk or revisit the problem 3 months later and it's plain obvious? That's this principle working in action. Which is fantastic news for people that can't focus on one thing at a time; you shouldn't be. Leverage your tendency to procrastinate and procrastinate one field with an entirely different one. Seemingly disparate math and logic concepts clue into each other or help you view a problem in a different light all the time; that's where most new important discoveries come from nowadays.
I hope some amount of that made sense. If your curious I have tons of studying strategies I can share but this is the meat and potatoes for what you mentioned in your post.
Donna Hawthorne · 2022-04-19 14:31
>>30820
That answered my question perfectly, thanks a lot.
It even gave me an idea, regarding breaking down topics, i discovered that i could google "[topic] syllabus filetype:pdf", and I get a long list of syllabus from universities that break down the topic nicely, like this pdf I found.
Im gonna study the first review topics from the syllabus i posted, then do same with operative systems + one section of Stewards precalculus a day (Studying a section only takes me like an hour, in a few months ill catch up with precalc :D)
I really thank you, and if you can id like to see the other study strategies
John Doe · 2022-04-19 16:29
>>30813
>learn hygiene last
Based
Davis · 2022-04-19 19:45
>>30849
> [...] i could google "[topic] syllabus filetype:pdf", and I get a long list of syllabus from universities that break down the topic nicely [...]
Holy soykaf you're a genius how did I not think of this.
> id like to see the other study strategies
The strategy I found most important, especially when trying to make sense of something difficult, is to get as many explanations from as many sources as you can find. It's alright if you can't really get what one professor or text or video is talking about; it just means that whoever put that explanation together has a different set of assumed prior knowledge than you, or it might earnestly be a bad explanation.
Getting multiple viewpoints on a concept is not only helpful, but also a great segue into this super important part of math that goes overlooked: community. Math and the sciences may seem like stoic, self-isolated fields where what matters is the might of your mind and nothing else, but being able to discuss math with a set of peers let's you not only get different viewpoints, but also to poke around in those viewpoints the way you can't get if you're only reading or watching. These sorts of settings also don't have the formal nature of a university so you can really let loose and ask stupid questions without risk or ridicule. Newton and Leibnitz were pen-pals after all.
Since you have an issue with attention you have to put any and all distractions out of immediate reach. This can be going to the library without your phone, locking your stuff away in a cabinet until a timer goes off, or just as simple as putting those distractions out of harm's reach. There's also the issue of distracting websites. Install some productivity plugins. There are ones that limit your usage of a domain to a certain time per day for instance, and my personal recommendation OneTab, which let's you store your browser sessions as a list of links so you can store those 7 youtube videos to watch later.
Another mindset thing that was tough for me to learn that a professor once told me: it's okay to be bored. This stuff is hard and some of it is written in dry, inaccessible jargon for no good reason other than aesthetics. And with cutting edge research papers that's all you've got to work with. Don't get mad at yourself for letting your attention drift off or zoning out. The brain is a muscle, and you have to give it time to recharge between sets.
If you can't make sense of something, and you can pinpoint a concept in the logic chain your weak in, study that and master it before returning, repeat recursively until you hit your call stack limit. As an example: I couldn't make sense of a certain random number generator in a book I was reading because it used modular arithmetic, and the analysis used a lot of identities and properties of numbers "congruent by modulo m" that I did not know/understand. So I went back and relearned all I could. After that I came back and it was plain as day. Even though it can feel embarrassing to do that, it's important to refine your weaknesses, as tempting as it is to improve at what you're already good at.
I got this one from a retired mathematician I know: you have to interact with the text. You can read something and feel like you understand it fully, but if someone asked you to solve a random problem or to explain it to them in language they can understand, you find yourself drawing a blank. In order to really understand math you have to be able to do the math, and what that means during studying is to interrogate every theorem and identity, seeing what it's made of, and once you understand it, trying to draw conclusions from it before you continue reading. Try to be one step ahead of the textbook your reading or pause a video and guess where it's going. Plug in random variables and calculate a statement by hand. Really fight tooth and nail against the un-understandable
sizeof · 2022-04-19 21:05
I'm also a beginner. I've done the first steps in actually starting a CS book and made decent progress in it, so while I like to think of myself as more than that, I'm probably not even in the valley part of the Dunning-Kruger effect. Anyways, I recommend that you try to figure out what you want to to and come up with an outline for a dream objective and keep updating it the more advanced you get. I recommend familiarizing yourself with waterfall development.
Lain Iwakura · 2022-04-21 13:59
The semester is ending for me soon and I want to improve my skills (along with my bad habits) over the summer. Obviously, I need to work on studying more, as I feel like I haven't really learned all that much from the intro to Data Structures class that I just took. Kind of trying to keep my routine structured and not go all over the place, so I'm going to start with some short term goals for now.
So first, I'm going to read the HtDP (How to Design Programs) and primarily focus on that. Then from there I'll try my chance at the SICP. I heard it's somewhat math intensive so I do need to work on my not so stellar math skills as well. Do you guys think this is a good start?
Donna Hawthorne · 2022-04-21 14:20
Found 2 curricula:
https://teachyourselfcs.com/
https://functionalcs.github.io/curriculum/
There are also some MOOCs like https://www.mooc.fi/en/
>>30889
>Data Structures
I would read Introduction to Algorithms (CLRS) or The Algorithm Design Manual (lectures: https://www3.cs.stonybrook.edu/~skiena/373/videos/)
>HtDP
If you know how to program, HtDP is going to be a bit boring for you.
>Do you guys think this is a good start?
I would review basics of calculus and read The Little Schemer or Simply Scheme (https://people.eecs.berkeley.edu/~bh/ss-toc2.html) before reading SICP. Don't forget to watch the SICP lectures: https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE18841CABEA24090&index=1
I recommend you use either MIT/GNU Scheme or Guile. Racket also works, if you install the sicp package.
For serious lisp programming, I recommend Emacs and Geiser/SLY+rainbow-delimiters. If you have questions, there is a lisp thread >>27327
Neuromancer · 2022-04-21 14:33
>>30891
Thanks for the recommendations! I was planning on buying the Introduction to Algorithms book, but I initially wanted to skip it because I heard it was math intensive. But now I understand that I won't really get anywhere until I up my math skills, so I do plan on studying algebra and calculus over summer break. And then after I get proficient enough with that, I guess I'll start with SICP and the recorded lectures that you posted. I want to do a little more research before I figure out whether to choose Scheme, Lisp, Gulie, or Racket.
And I'm assuming that I can skip HtDP then since I already have a basic knowledge of programming correct? When I started to read it, I did notice that it seemed tailored to those who aren't really in CS anyways.
I guess my plans in the summer have changed a bit then. I'll practice my maths and work on improving my Java skills with the MOOC.fi, and then I'll go onto SICP and algorithms.
Nobody special · 2022-04-21 15:02
>>30892
> I want to do a little more research before I figure out whether to choose Scheme, Lisp, GUILE, or Racket.
SICP uses MIT/GNU Scheme. However, Racket's DrRacket IDE is helpful for beginners (you just need to install the sicp package before you start reading SICP).
It's important to know that there are multiple lisp dialects (Scheme, Common Lisp and Pico Lisp, for example). All Common Lisp implementations, like SBCl, ECL and CLisp, implement the standard (which is frozen on purpose. new features can be added by using a library or macros) but they may provide some extensions that are non-standard. In the case of Common Lisp, the code is usually portable across multiple implementations. However, this isn't the case with Scheme or Racket. When you learn Scheme you need to know the standard (start with R5RS) and then you need to learn the features that are specific to the implementation you use. There are many Scheme implementations, like Chicken Scheme, Guile and MIT/GNU Scheme. Finally, Racket is basically a Scheme that has evolved so far from all other Schemes that it is not a Scheme anymore.
Hagbard Celine · 2022-04-21 15:26
>>30893
Since I'm a beginner, I guess I'll start at DrRacket for now, so really, thanks for all that information. I'll keep that it in mind when I explore other the other dialects. But wow, I never knew that there were so many lisp dialects. Why are there so many of them?
Zero Cool · 2022-04-21 15:56
>>30894
>Lisp dialects
Basically, Common Lisp was an effort to standardize various Lisp dialects (such as MacLisp of MIT Project MAC). Actually, you can think of Common Lisp as the POSIX of the Lisp world. Lisp is actually one of the oldest programming languages that's still in use (only Fortran is older). For history of lisp, you might want to read this: https://web.archive.org/web/20210711131110/http://www-formal.stanford.edu/jmc/lisp20th/lisp20th.html Also, there were Lisp Machines (LispM): http://fare.tunes.org/LispM.html If you want to know more about LispM, I highly recommend you search YouTube for "Open Genera" and "Interlisp Medley" (https://interlisp.org/). The LispM and Xerox Smalltalk systems were really cool, imo.
>Why there are so many Lisp dialects?
I don't really know. Perhaps because creating a minimal lisp isn't very complicated.
Joe Bloggs · 2022-04-21 17:00
>>30895
>LispMs
To add to that, Interlisp-D got freed a few years ago and is available for modern platforms at the link provided, and an unofficial port of Open Genera can be ran on Linux (https://archives.loomcom.com/genera/genera-install.html has general instructions, adapting to your system accordingly shouldn't be very hard, although the VLM tends to be rather temperamental at times; the system images and files you're told to put under /var come from the original Open Genera installation disc, which archive.org has images, and the source code for the genera binary is floating around, in case you don't trust the provided files); I'd recommend playing around with both if you are interested, they're ends of two very different branches of development on Lisp and system design, and express varying ideas on how such systems should feel like. The original MIT system, which Genera and most others (but not Interlisp) branch out of, for the CADR is also free, and there are emulators around, and might also be worth a look.
Boris Grishenko · 2022-10-28 15:33
>>30820
i'm in same exact situation as op & this helped a lot thank u
Void · 2022-10-28 15:48
>>30820
Wonderfuly said i had to leave university to work (basically just wageslave work) and had to return 2 years later. I think a lot of people fail and think too little of themselves and just give up. Please newfriends remember that if you have the patience and will you can suceed wagmi
synchronized · 2022-10-30 13:59
This won't answer your question directly, but I want to recommend the book "Code: The Hidden Language Of Computer Hardware And Software".
It won't make you an expert, but it contains everything you need to understand the material in it, including an explanation of all the math required in places you need it.
It starts from 0 and assume you have no knowledge.
I read it in my second year at university as a computer-science student, and it has helped me throughout my whole studies.
Nobody special · 2022-10-30 14:59
>>33213
I remember reading it before i started university. I also recommend it, it's a fun read and it pretty much covered (almost) all topics of my first course in computer architecture.
LispOverlord · 2022-11-21 00:16
>>30851
>learn hygiene last
He meant macro hygiene, of course, not physical hygiene.
https://en.m.wikipedia.org/wiki/Hygienic_macro
Ishikura "Tatsu" Tatsuhiko · 2022-12-24 16:00
Op here again
Its been 8 months and i got demoralized and made no progress ahahah
But i will get back on track
>>33213
Thank you i will read it to get into the habit again
It is like kicking dead whales down the beach that i forgot most of the few things i knew :/
The Plague · 2022-12-26 09:50
>>33784
If you want to remember, things, do spaced repetition, maybe using Anki or one of the other softs.
Otto Normalverbraucher · 2023-07-18 10:26
>>30849
>regarding breaking down topics, i discovered that i could google "[topic] syllabus filetype:pdf", and I get a long list of syllabus from universities that break down the topic nicely
As an avid self-learner, I can confirm that this works very well for everything from math to psychology. When I want to get into a discipline, I find a bunch of undergrad course lists from prestigious universities like MIT and Harvard. I look for courses that appear in many of them because this is probably the important core stuff. Then I look at the syllabi for these courses and see which textbooks or other resources repeat. This gives me a great reading list. Sometimes I download the exams too and take them by myself.
Textbooks can be a slog to get through, but I'm convinced they're the fastest way to actually learn a topic when combined with practice. Pop-sci books are faster to read, but the vast majority of them focus on clean narratives an nice anecdotes at the cost of rigor and accuracy.
When learning math, the importance of what >>30855 said can't be overstated. If you read a math book like you read a newspaper, you'll most likely get an illusion of understanding and then forget all of it within a year. DO THE EXERCISES. The most valuable ones are those which require you to creatively combine material from multiple chapters of the book or multiple courses. It's hard to forget a solution when you've struggled for hours to come up with it. I often read a textbook chapter quickly and then jump straight into the medium exercises. I refer back to the chapter or google things as needed.
If there are no exercises, you can apply Paul Halmos' advice:
>Don't just read it; fight it! Ask your own questions, look for your own examples, discover your own proofs. Is the hypothesis necessary? Is the converse true? What happens in the classical special case? What about the degenerate cases? Where does the proof use the hypothesis?
In general, I think that the rule of thumb with learning is that you can compress the time needed, but you can't compress effort. You can learn much more in the same time than the people who just absent-mindedly listen to lectures, but you're going to have to find a way to engage with the material. For programming, this could be closing the book and then using the technique you've just read about in a personal project. For more about the principles of learning, google "deliberate practice".
And lastly, I find that CS degrees usually have a good selection of topics, but sometimes neglect to teach the students a good set of tools because this doesn't fit neatly into any course. So here is the basic toolbox that you'll find helpful if you want to become a programmer:
- You should be able to use a version control system, probably git. You should also be comfortable with the GitHub/GitLab pull request workflow, even if it's not what you're using in your personal projects.
- You should have a solid "default" text editor that you use when you're not in an IDE. VSCode is a good choice for beginners, but many advanced programmers eventually gravitate towards Emacs or Vim.
- You should be comfortable with an interactive debugger like GDB, LLDB, or something in an IDE.
- You should know how to use the most common build system for your programming language. For C, that would be Make and CMake.
- You should know a scripting language (for quick tasks like converting one file format to another or scraping a webpage), a systems language (for programs which have to be efficient and use few resources), and a corporate workhorse language (they're very popular and many jobs expect at least a basic familiarity). I recommend Python, C, and Java because they have huge library ecosystems and don't take an impossibly long time to master.
t · 2023-07-21 06:09
>>30813
Been liking this so far on learning in general. I was burning myself out by just reading the same thing over and over, and not relaxing. You can convert to PDF with calibre if you want. Didn't include the metadata file cause I wasn't sure how that jives with staying anonymous. good luck!
Torvalds · 2023-07-21 08:10
The math for CS is Discrete Mathematics and Analysis of Algorithms. So like study that. I'm pretty sure that "manga guides" exist for both.
The truth is you'll probably forget most of it so don't worry if the books aren't super deep. I can tell from the interviews I go to that even Google and MS devs barely remember analysis of algorithms, they'll deny it but they'll ask brain buster interview questions but only the most shallow Big-O questions. I have literally never heard the words "Master Theorem" uttered since I left school but I'm sure in the 50 or so brain teaser interviews I've gotten someone would have asked it. I've also asked my co-workers if they know it and the reaction is always "what's that" or "Oh yeah! Lol I remember that... how's it go?" I'm positive all these people were exposed to it in school as I've been blessed to work with graduates of some of the best programs in the country in my career. It just doesn't stick. The one exception was a PhD who had been a professor, he knew, they say if you wanna master the subject you gotta teach it and by my experience that holds up.
Further at multiple workplaces they almost never actually analyze an algorithm but more count the depth of the loops and declare "Oh this algo it n poop squared... almost as if to remind themselves and everyone else they still remember that soykaf.
As for learning math in general. I have a book called "The history of mathematics" (cover is very plain, blue and yellow) from time to time I'll open it up and randomly learn/refresh something. It's much easier to understand math when you are first told the problem it tries to solve, why this was a problem, how they went about finding a solution and some real life examples of how it works. I swear mathematics instruction is designed to be deliberately obtuse everything is named after whatever fuarrrk discovered it. Sometimes a single person will have multiple nods to their name across a discipline with only slight variations, makes it very easy to get things mixed up and they'll blast you with symbols and steps before, if ever even hinting at the point of it all.
Then despite this effort to honor these guys, at best your textbook will have like one page talking about how many desiccated pork chops were found in his papers when he died...lol what a sperg! and by the way Cartesian Product. Not really honorable and not really very illuminating.
Learn the history and learn the actual math and it's application along side. So much easier at least for me but I have a LD so YMMV (I also was one of less than 10 people to graduate my CS program without failing a class)
Learning to be a good programmer: Like I'm not the greatest. I rarely get excited about anything I write and work is never a challenging problem, more a mess of frameworks and tooling you're constantly fuarrrking with to make a boring REST API. But one thing I can tell you is: Always read the styling documentation for the language you write in. Read the Java styling documentation from oracle, it's some smart soykaf. Read at least the beginning of SICP where wishful declaration is explained. I can't tell you the number of motherfuckers who seem to know every obscure language feature and hipster framework, leaving me thinking they must be some sort of genius and then I look at what they've written and it's a disjointed, directionless mess of object oriented abstract art and it could have easily been an almost purely procedural script.. why are there inner classes? What is this builder and factory pattern? What the hell are you doing jesus christ. So don't be that guy, I swear their brains are permanently broken by that point.
Cowabunga · 2023-07-21 14:14
>>30813
Don't bother writing down notes if you own textbooks - it's a waste of time. If you need to memorise a piece of information you can actively recall it or rote memorise straight from from the textbook. Instead of writing notes you should be memorising information and practicing test questions on the subject you intend to learn. This will save you a fuarrrk ton of time. You should also use a system of mnemonics or other memory devices to help you memorise information. The artofmemory.com has a good pdf that teaches you about memorisation devices. Usually the of memory devices are enough to allow your mind to memorise information for years on end.
Agent Smith · 2023-07-22 04:45
>>36521
Writing notes is a memory device and a structured way to 'trick' your mind into synthesising information
Cowabunga · 2023-07-22 09:48
>>36525
Writing notes to remember something is highly inefficient. The mind likes to cut corners and will forget what you write if you rely on writing things down.
Agent Smith · 2023-07-22 10:03
>>36521
>Don't bother writing down notes if you own textbooks - it's a waste of time.
I disagree. When you write down something, your brains are processing that information and that's why it's good for memorization also.
Otto Normalverbraucher · 2023-07-22 10:53
>>30818
Learning happens through doing. If you aren't actually trying to accomplish something tangible and rather are trying to cram information into your head, it will just fall out, like it does for students as soon as they finish exams. The OP image is wrong and will naturally lead to >>33784. Instead of spending years struggling with prerequisites, start a complex project idea and learn the information you need as you go. That way you'll develop an understanding of what you need to learn and direct motivation to actually internalize it.