At first I thought I'd follow along the MIT OCW 6.0001 course, but it's like eight years old and on a far outdated version of Python and Anaconda. When I tried to install the software as per the syllabus's instructions, I found the download links were dead. I had to spend a few hours going through archives to get the required Anaconda 4.1.1 and Python 3.5 only for it to not even work upon installing. When I tried opening the Anaconda navigator, the logo would pop up, it would say initializing, and then it would just crash before it could launch. Referring back to the syllabus was of no help because the instructions there were literally as brief as "Install Anaconda and Python 3.5 via the installer".
I wasn't able to troubleshoot any of this because all the google results for this question were full of jargon I sure as shit won't be able to understand until I finish the course in the first place. I have no idea what an IDE is, what a pip is, what a spyder is, what a path variable is, or why one would want to use the command prompt.
I was actually able to successfully install the newest versions, but I can't use these for the course because I'm an absolute beginner who has no frame of reference for what differences are actually going to be important.
Now I'm in the process of looking elsewhere. Problem is, I can't find anything like the MIT OCW course. I really loved the videos of actual lectures and the fact that I didn't have to enroll or sign in to anything. There exist a lot of Python tutorials on the internet, but I was hoping to also get an introduction to computer science in general because I need to learn the fundamentals of the subject. I'd like to have a deeper understanding than one would get by just learning a computer language without any of the theory behind it.
Does anyone have any recommendations for a more recent curriculum? Ideally I'd love it to have lecture videos, but I'll be content with just problem sets and a good textbook if it's up to date and has a robust step by step guide for setting up.
Me as a beginning programmer: "I'm going to learn how to do things the right way!"
Me as a professional programmer: "it was my first time using the language so made it from stitching together 3 tutorials. Don't ask me how it works but it passed qa"
Check out this site: https://learnpythonthehardway.org/python3/preface.html
Project Euler is a good resource for language-agnostic computer science problems at all levels. It won't do anything for getting a python environment set up, but it gives you problems to chew on in whatever language and environment you have.
Thanks for the suggestion, I'll keep it in mind. Unfortunately I don't have any language or environment at all right now, so I'll need to figure out how to take care of that first.
You can play around with something like a web based python interpreter for now and worry about all that later, once you understand better what you're trying to do.
I used Wing IDE when I was in compsci 101 and 102. I don't know why they picked that one over any others. They gave us a list of problems that was called something like 14 simple problems? It basically looked like a shortened version of a lot of these ones: https://www.w3resource.com/python-exercises/python-conditional-statements-and-loop-exercises.php Theres also Kattis for loads of programming problems.
Learning programming is such a, like, binary thing. Cause you always get the people who just get it and learn by doing and trying and failing, and then you have people who need lecture and guidance. Neither is bad. If you're the second half I can't really help because I was the first kind lol. I'm sure there's plenty of MOOCs (just online learning basically with videos and homework) besides MITs one. I searched for python moocs and this came up https://programming-23.mooc.fi/ I can't vouch for it but it's something (they have lecture vids at the bottom). Harvard has a basic intro compsci course as well but they do C++ or C, can't recall, and they might be too outdated now. I know you have your heart set on python but a lot of people swear by the old Harvard videos, I dunno.
Thanks for the advice and resources. The most effective way I learn tends to be in the middle of those two categories. I like to be walked through the basics and fundamentals and given curated problem sets. But once I do those and have a feel for the main idea, I start experimenting on my own until I get stuck and return to the structured set up.
By the way, I don't actually have my heart set on python, I just chose that because it was what the MIT OCW course was using. I'm not going to be doing that course now that I've realized how out of date it is, so I'm now considering either C++ or C instead. That said, I'd still like to to learn Python regardless, but I'm not sure if it should be my first language given the advice I received here.
Cool! You could give Harvard's CS50X series a go if you'd like! They include practice problems at the end and used to have a test at the end that checked if your programs worked. No idea if that stuff is still around.
Hey, I'm a uni taught programmer, I write a lot of python. Here are my recommendations for you:
for learning python, try reading "automate the boring stuff with python", it will teach you the basics of the language and how to do troubleshooting and understand various concepts. It came out in 2015, but there's a second edition that's updated for 2019 but most of the examples should still work.
Further, I highly recommend reading source code. There are many large and popular projects and libraries. If you want to learn about programming and how people tackle various problems, it is a really good investment of you time to read some project source code.
For learning general computer science, I highly recommend the rest of nostarch press' catalogue. They have a lot of algorithm and data structure books. I find their work very approachable and extremely good reads. They have some silly stuff that's still surprisingly informative, like a manga that teaches you basic sql.
If you need any help getting your environment setup and installing linux and stuff just let me know.
i use pycharm for testing shit. pycharm is an ide, an all in one software with code editor, debugger, compiler etc. python has packages which are contain other people's open source code, pip can be used to get these packages for your own use. for example requests is a package for requesting stuff from web servers and can be used for scraping. spyder is an ide similar to pycharm and path variable is a location containing binary files so lets say python3 is located in C:\Program Files\Python\bin, you will have to cd (change directory) to that location to access it but with path variable set to that path whenever you open command prompt and type in "python3" it automatically understands to look for python3 in that folder without having to cd. command prompt is used to run python scripts because you need to specify to python interpreter which script you need to run and you can't do that with gui.
for code snippets i recommend stackoverflow and chatgpt. you can ask chatgpt to make simple scripts (complex ones may have errors) with explanations. read the code and try to understand it instead of blindly copy pasting it.
I considered this approach, but I'd much prefer something more structured and guided as in a college course. I'm not really looking to make even very simple programs yet. I'd first like to get a handle of the theory and fundamentals of what computer science and programming even are in general, how to use the tools Anaconda comes with to compose programs, and the basic techniques for writing programs. Not to mention learning what all of that jargon is I mentioned in the post.
The tricky thing is, the fundamentals of computer science don't actually have much of anything to do with setting up or using programming tools, or even with the basic techniques for writing programs.
Right, but I was hoping to get them both in one course in order to understand how the tools work and what the programs themselves are actually doing beneath the abstraction.
There are so many layers of abstraction involved in the process of using modern programming tools on modern computer hardware that it would involve multiple PhDs to have anything but a cursory understanding. Even a cursory understanding is multiple college classes: How does the compiler (or interpreter) turn the code you write into machine code, how does the CPU execute that machine code, how do the logic gates fit together to make a CPU, how do transistors fit together and switch to make logic gates work, how does electricity flow through a circuit?
All of these questions have fascinating and very complicated answers but none of them are actually part of Computer Science. Computer Science is a math discipline. It can be done with pencil and paper. The actual computers just make it less tedious.
Considering I know almost nothing right now, I really am just after that cursory understanding, and I am willing to do multiple courses of self study to get there. I can't afford to go back to school right now, but nevertheless I'm interested in learning this stuff. I'll just have to do it on my own with whatever resources are available for free on the internet.
Right now I'm about half way through Charles Petzold's Code, and that's been very helpful. I've been having a lot of fun messing around with circuits in Logisim. But I'd like to get a more formal overview of the same concepts, including the math behind it that introduction to computer science courses typically teach. I posted this thread specifically after having trouble setting up Python, but that isn't the entire scope of what I want to do.
In modern software engineering, the goal is not to understand what's going on under the hood. To write high quality code using principles that ensure any user can implement your code without understanding it. Architectures and language that abstract the nitty gritty away from the programmer.
Do you want to learn software engineering or computer science?
Maybe scope out classes on compilers or compiler construction. It'd be deep waters if you're just starting out, but those classes are specifically about the software that translates all the shit you write in a text editor into the shit the computer actually understands.
Python might not be the best language to learn a lot of those things, because python hides them for usability. Python really is a "try to make it before you really know how" kind of language. Python is also not the language I would want to learn object oriented programming on.
JavaScript would be a little better, in that regard. but I struggled to learn any programming until I learned something with stricter typing: C then Java. Python legit confused me as a beginner, because I couldn't tell what was happening. Idk maybe its just me.
I initially decided on Python because that was the language the MIT OCW course was using, but since I'm not going to be doing that course, I'm willing to choose a different language. The only thing is I've heard C is much harder for a beginner to learn than Python is, but if you could suggest any good books written for beginners, I'd give it a try.
Well for books, any of the "Head First" books by O'Reilly do a great job of taking a beginner through the nuts and bolts of learning a language, so those might be sort of ideal for you.
There's nothing wrong with Python as a beginner, but from the perspective of being able to see and mess around with how the code actually functions, the thing that makes python "beginner friendly" is that it abstracts all of that functioning away from the user.
The things that make C difficult to learn are exactly the reasons why you want to learn programming: to understand the science behind it all.
JavaScript is a little less abstract than Python. And the only languages I know are java, python and js. I wouldn't recommend Java for anyone who wasn't building like banking software, so sorry I don't really have a better recommendation. Personally I think you could start anywhere, if you're going to stick with it and learn cs then I don't think it matters that much. The first language is the hardest.
As someone who took it upon themselves to learn coding and cs, succeeded and changed their life because of it, good luck!
ive edited my original post with some of the questions you asked.
honestly python is like really simple, you can jump into the basics like adding numbers without that much theory.
If you're trying to understand the theory why are you focusing on the fact you're using python? Programming principles exist independent of language. Language is just syntax.
Udemy is really good if you've got a couple bucks. Most courses cost 30$ on sale.
On the Python side, I can recommend Python Crash Course, it does not assume any kind of prior programming knowledge from the reader and will take you through all the base features of the language. If you want a more advanced dive into the language after you have covered the basics, Fluent Python is a personal favorite of mine.
What's your current level of programming/comp sci knowledge if any? I know you said you're a complete beginner, but I'd include things like spread sheet macros, some spread sheet usage w/o macros, shell scripts, batch files or powershell scripts as programming knowledge. You know what a constants, functions, loops and variables are?
For programming, I would strongly suggest starting with Java. It has a ton of resources and you can do object-oriented programming with it. (Python cannot do a lot of the things that you would be expected to do with Java or another OO language, namely a thing called polymorphism that is very important.) If you wanted to learn more theory, I could send you some textbook PDFs tomorrow.
This couldn't be further from the truth, Python is built around OOP and practically everything in Python is an object. Default functions like len() are built around polymorphism. Java isn't a bad choice either, but at least for me Python was way easier to get started with.
Literally try to give two functions the same name (with different signatures) in the same class.
I didn't even know python had classes when I first started learning it because it's not in many tutorials because user-defined OOP principles are so badly implemented in Python. Moreover, since it's not a statically typed language it can be a real pain for a newbie to debug wrong variable types at runtime.
And, philosophically, python is so far away from the bare metal that it teaches a lot of bad programming behavior imo. But no one likes when I suggest starting with C or C++, so I guess Java is good enough.