7 ms·
Has anyone here learned a subject by going through one of these "teach yourself" lists? I've learned most of what I know about computers on my own, but it wasn
by panic 6y ago
Has anyone here learned a subject by going through one of these "teach yourself" lists? I've learned most of what I know about computers on my own, but it wasn't from following a list of textbooks. And when I've tried to follow a course like this for other subjects, despite my initial interest, I've found myself unable to make it through more than a couple chapters of the first textbook before running out of steam.
But somebody must be getting some value out of these things, right? Am I just bad at studying? Or not as interested in the subjects I'm trying to learn about as I think I am?
- hckr_news 6y agoI graduated with a degree in BioSciences a few years ago, and elected to not do grad school like my peers. I saw no point of losing thousands of dollars to do a master’s in Bioinformatics/Data just to get a jr level job. That summer after graduation from undergrad I attempted to learn CS and go through OSS Computer Science program and TeachYourSelfCS to break into the industry. The problem was a lot of it wasn’t job relevant and it felt very rigid, and sometimes even more complex than it needed to be. These University level courses aren’t really necessary. I like to view coding as a trade and skill, something that can be learned and applied right away rather than a mechanism for research, feel free to disagree with me. In any case, I just wanted to code and build software (sorry CS purists...). I slowly found myself less interested in CS theory and more in software engineering. Feeling disenchanted with CS, I decided to spend a few months learning web and software development fundamentals through online courses on Udemy and Frontend Masters. After that I did a certificate in fullstack development at my alma matter (cost me a couple thousand dollars, much cheaper than grad school). I will say I was pretty lucky that as soon as I finished the full stack program, I was hired by a small software shop.
- pretzell 6y agoI think that CS vs SWE thing happens with a lot of people, and I got caught there, too. Luckily, I ended up really liking CS and it introduced me to the field, whereas otherwise I would've gone for SWE. There really needs to be a 'teachYourselfSWE' for people who are into that.
- varrock 6y agoHow can you tell which one is right for you? So many computer scientist graduates I know ended up pursuing software engineering that I've mistakingly conflated the two.
- aryzach 6y agoit's really theory (CS) vs building things (SWE). As you want to build larger projects, or build them better, you rely on CS ideas to do that. So SWE is really engineering assisted by applied CS. I've been studying CS for about two years and am only now learning any real application development. You can study CS without ever touching a computer or building an application (though doing both those things will give you context for why CS topics matter). It's kinda like if you want to build a rocket to get to space, you can tinker with propellant, metal, and fire, and be a hobbyist that eventually you build a rocket to go to space. Or you can be a physicist and calculate everything on paper. To get to space you really need both those people, but the physicist can learn to build and the engineer can learn theory.
- varrock 6y ago> but the physicist can learn to build and the engineer can learn theory. So is this why frameworks exist? To abstract away the theory that proves something more "performant" or "sufficient", and allow the builder to do their thing?
- sli 6y agoMore or less yes. The idea is that a framework (ideally) does some feature A the "right" way and programmers using the framework gain the benefits of convenience and safety, often at the cost of flexibility. Frameworks will usually try and balance the power or depth of the domain its abstracting with ease of use. A good framework will stop beginners from making critical mistakes, decrease the amount of code its users have to write, and offer professionals well-constructed ways around its handholding as needed.
- jodrellblank 6y ago> The problem was a lot of it wasn’t job relevant and it felt very rigid, and sometimes even more complex than it needed to be. CS was born out of a time when computers were very limited. How do you write a word processor with a spell checker, when the dictionary alone won't fit on a floppy disk, or fit in memory?[1] How do you draw rounded rectangles on your GUI when they take too many CPU cycles to draw?[2] CS people managed to carve out paths through problem spaces that could be done on the computers of the day. These days, you put everything you need into a hashtable and it looks up in microseconds and you don't have to care anymore. [1] https://prog21.dadgum.com/29.html https://prog21.dadgum.com/29.html [2] https://www.folklore.org/StoryView.py?story=Round_Rects_Are_Everywhere.txt https://www.folklore.org/StoryView.py?story=Round_Rects_Are_...
- rytill 6y agoInteresting. I believe much of CS is practical now, and much is forward-facing and not relevant yet.
- mmhsieh 6y agoCurious to know: do you feel that you are at any disadvantage to peers who came to your role who went through a traditional CS or computer engineering undergrad program?
- hckr_news 6y agoOn the job, not really. Plenty of resources online that allow me to commit to continuous learning.
- SZJX 6y agoIf your aim is to do some less demanding programming, e.g. using a framework without fully understanding how things all work together, then focusing more on practical projects could definitely help. However, this dichotomy between "CS" and "SWE" is a very dangerous idea. Once you have a solid grounding in CS, the software you write will be of much higher quality, you'll ship code faster, and you'll avoid many mistakes since you have a clear idea of what you're doing instead of just trying to blindly copy recipes. Particularly helpful I would say is a solid idea in programming language theory and I can't recommend the MOOC by Dan Grossman from the University of Washington highly enough. As he said, even if you never get to program in the languages used throughout the course, you will become a much better programmer after finishing the course.
- eddyerburgh 6y agoI just finished the distributed systems section of teachyourselfcs and I now have a solid understanding of a lot of concepts I previously only shallowly understood. When I started learning, the recommended textbook was Distributed systems: Principles and Paradigms (the new recommendation is Designing Data-Intensive Applications) and the recommended course was MIT 6.824. 6.824 is the first online course that I have completed fully and it was well worth it. I read, took notes, and summarized all required course readings (around 20 papers) and completed the labs, which involved creating a raft-based key-value store. The labs were especially useful because they forced me to really understand the details of the topics I had learned (e.g., MapReduce, Raft, Raft’s log compaction) in order for my code to pass all the tests. I’m very happy with the results of following the course and I now plan to put the same amount of effort into other topics.
- _____s 6y agoHow long did it take you to complete it on your own, including the exercises?
- eddyerburgh 6y agoFor the course I would estimate 120-180 hours spread over 6 weeks. I read the textbook over a couple of months, but I couldn't give you a good estimate in hours.
- _____s 6y agoThank you, that sounds very reasonable!
- frankie_t 6y agoI think these should be used more as a guide and dependency graph of study subjects rather than a rigid schedule. So, instead of going from first textbook until the last, maybe you just look at what interests you the most in the list and then check if you have the necessary prerequisites. I plan to eventually complete most of the materials, but I take huge, sometimes multi-year detours. I've done SICP and nand2tetris books, it took around a year each (not fulltime obviously, also I went a bit harder on 2nd half of the nand like writing unit tests and building AST for the compiler instead of the easier approach suggested in the book). Then I decided I wanted to go do OS, but before that to learn C to be able to implement my own stuff, so I also worked through K&R book. On the other hand I'm pretty bad at doing "real world" things, full of edge cases and details, and try to avoid them as much as possible, so I may not be an example of someone getting value in a practical sense. I feel that I've grown better as a programmer but I can't say how much of it can be attributed to my home studies and how much just to the experience on the job itself.
- cosmodisk 6y agoHaving learned programming on my own and after spending some time doing it at work, I can now look at these books and say: Ok, these do make sense now and it's engaging to read them whilst a few years ago it was all too abstract and felt 'somewhere out there'.
- maps7 6y agoWhen I learn something to the point I can consider it 'learned' it is never from one source or one guide. It's information taken at the relevant time in my learning journey from any search.
- keutoi 6y agoNot computer science but I learned a lot by going through Teach Yourself Logic[1]. I did not know where to start and how one subject relates to other and this guide helped me a lot. I have followed the guide for two years now and wish for some thing like this for every topic. [1]: https://www.logicmatters.net/tyl/ https://www.logicmatters.net/tyl/
- JackMorgan 6y agoI have used similar lists to go from almost entirely self taught to having finished a half dozen CS and FP courses at my own pace. At one point in my life I was keeping up a GitHub streak every day by just pushing a couple exercise answers to a private repo. After a while, I really had to go looking to find challenging enough work to keep me engaged. Books with homework like SICP, FP in Scala, Let Over Lambda, Software Foundations, Haskell from First Principles, Land of Lisp, and Progamming Languages all really offered a lot of homework to keep the streak up. The streak really is a super power for self study of any form. It's so hard to ignore a 1600+ day streak even when you don't feel like it. When Github took that streak counter down, I was crushed, combined with me taking a management heavy job (encouraging me to read a lot about soft skills), it really collapsed the whole system for me. One day I'd love to pick it back up, but right now I'm doing the same thing with violin as an adult learner, so that's taking up that time I'd otherwise spend on CS.
- celicaraptor 6y agoLearning violin might help with CS more than you can imagine. Giving yourself a break from something you have been doing for years/decades is absolutely necessary and will get you more excited to get back to learning about CS and prevent burnout. I know i am certainly that way. However, YMMV.
- sheveksmath 6y agoThere's an app you may enjoy called Loop Habit Tracker. I used it to keep track of streaks for things I couldn't as easily track through other means. Its pretty amazing how just seeing your streaks can be so effective in building habits.
- hmwhy 6y agoI personally think there is a lot of value in these things, particularly in cases where it's just impractical to go back to school/university or that tuition is unaffordable. Quite a few years ago I learnt software engineering and basic computer science through free, online resources (a few of which have already been mentioned in this thread), it got me a few successful interviews and eventually a job. That was actually the first time I have self-taught myself anything with the aim of breaking into a field that had no experience with. It was difficult at the beginning because I had just quit the job I had back then and fell into depression for a personal, unrelated reason; but perhaps that was also the reason that I eventually had the drive and focus to get through what I would normally have found "boring" at the beginning — I had nothing better to do. The experience turned out to also be one that is empowering because now I feel like I could learn a lot of things by myself. Not sure if it helps, but here are a few things base on personal experience of going through this type of syllabuses: * Assuming that they are written by people who are good what they do and know what they are talking about, these syllabuses are usually to be followed through step-by-step unless explicitly stated otherwise. * Different people benefit from different modes of learning. There is nothing stopping you from using auxiliary resources to help you to get through a syllabus. * More often than not it takes a few reads of some text/attempts of an exercise for me to really understand something. In one particular case I read through a book three times, about half a year a part each time, before I felt that I really understood it; and when I finally understood most of it, I was only glad that I decided to try it again for a third time. * I think it helps to have someone to talk to about what I was doing, it could be a close friend or family who doesn't understand anything about what you are studying. Alternatively, if what you are studying is "popular" enough and there are communities of people doing the same—get connected. Emotional support helps. * I always try to interact with people who are at different skill levels. There is always a lot to learn from people who are much more experienced than I am; and explaining what you have learnt to someone less experience helps to consolidate what I have learnt. * Focus is very important. Find what works best for your through experimentation: if you can sit through some given material for a couple of hours straight, great (but do take care of your health and at least get some stretches and water); if you regular breaks, that's also fine—just make sure you set an alarm clock and commit to getting back to it when it goes off. On a somewhat related point, for freely available resources, I would buy a coffee or make donations where possible to people who devote their time to help others. :) I hope you will find something that works for you! Good luck!
- frankdenbow 6y agoSimilar to you, a lot of what I have learned in CS/programming has been through experimenting (personally I like the Jennifer Dewalt method of just doing a lot of small projects: http://jenniferdewalt.com http://jenniferdewalt.com). You are not bad at studying! We all just have our own learning methods that are most comfortable. A proper education system would ask you what ways you like to learn, then have multiple versions of the same curriculum taught in different ways. Somebody build that please.
- shpongled 6y agoI think I'm pretty good at self-teaching w/ textbooks. I will admit that there were 1 or 2 classes at college where I completely skipped the class and just read the textbook because I could absorb info faster than attending lecture. I got a copy of Benjamin Pierce's `Types and Programming Languages` and I've read basically the full thing and have completed 80% of the exercises. Currently working through a couple other textbooks slowly. I find that taking notes and doing the exercises is essential, otherwise I lose interest. (Same with online video courses)
- bonoboTP 6y agoBoth are important. You do need to work on your own projects and own concrete case, find tricky cases, look up suggestions online, etc. It can be a great learning opportunity. For example, back in the day I used to do a lot of video recoding, ripping DVDs to SVCD, so I had to learn what the terms mean in the programs and why results weren't as I expected. This led me to learn basic concepts and a mental model of coding theory, color spaces and signal processing. Or when I built a website, I had to learn about networking, about programming some Javascript, etc. just to get the website to display. Similar with game modding, learning about graphics, textures, scripts, writing code to decode, modify and encode binary files containing text to translate them from English to my language. This meant I had to learn about character encodings etc. If you have a personal purpose in mind, learning can "just happen". I didn't intend to learn the things, I was just striving to make the thing work. I have no idea how I'd make someone interested in these things if their mind doesn't pop up such tinkering goals for them. On the other hand, the above is very inefficient in itself. It is hard to overstate the importance of reading good books, besides the practical learning of the above paragraph. You need to be able to relate to the topics to some degree, but once you have the hang of it, you can benefit from the years and years of experience of experts and hone your mental models, discover new topics and relations across topics and understand things more holistically. Learning only from books/courses is not sufficient, you won't be able to apply what you learned if you don't constantly try to map from what the book says to something you are already familiar with a little bit. But you have to pick good books. Bad books can be more confusing and discouraging. I think American CS books especially from MIT Press are really high-quality. They may be expensive (but there's LibGen). You may also have problems with delayed gratification. The benefits of an hour spent on reading a textbook will be vague, uncertain and delayed and often hard to attribute to the book. One hour of watching Netflix or Youtube or browsing through 20 genuinely interesting links from HN feels more rewarding. This is a big problem for us all in today's attention economy. You need to be very conscious of this to break out of it.
- travmatt 6y agoI learned networking through reading the book recommended in this website, and playing around with wireshark along with some other stuff. The book itself was about 800 pages, but breaking it down by sections made the task much more manageable
- imtringued 6y agoI'm sure many do but clearly the hardest part isn't actually following a list. It's finding or creating the discipline necessary to actually go through the entire list.
- levi0214 6y agoI finished two courses on the list. All I feel is: I wish I had watch/read this earlier. I thinks I had much more fun from these courses after I have done many real projects in these years. Maybe you get bored because it's little bit easy and basic for you.
- jillesvangurp 6y agoI finished university some time last century; so, most of what I know is self taught at this point. Also, software engineering is more of an apprenticeship thing than something a university professor without relevant software engineering experience can do. I'm being harsh here because I used to have software engineering as a topic for my Ph. D. studies. Part of the reason I left the academic world (after a postdoc) was a bit of impostor syndrome where I realized I was telling others how to engineer software without having much experience engineering software. This always struck me as odd. I've since learned a lot about software engineering that was definitely not part of any computer science studies I know off. I always think of college being more about learning to learn than to learn anything specific. Also the difference between university and a technical school is that the former tends to be exactly about being less about practical skills and more about skills you need to learn new stuff and ask critical questions. Quite a few projects I've been on over the years have also required me to dive into other domains. I've had to read up on metallurgy, geo spatial algorithms, and medical stuff at various points for different projects.
- SZJX 6y agoI would say MOOCs are usually much easier to follow than books. Great courses can really change your whole perspective. The list of MOOCs listed in OSSU are generally of very high quality and I would highly recommend them.