Self teaching computer scienceWatch
I'm on a gap year. Is it possible to teach myself CS A-Level / would you be able to recommend any coding courses
Thank you 😊
- Good starting point for the basic syntax and strucure of Python: https://www.codecademy.com/courses/learn-python
- A few decent short videos on Python: https://www.youtube.com/playlist?lis...72C720775B213E
- Good introductory Programming course from Michigan State Univ.: https://www.py4e.com/
- Another good intro to Python course from MIT https://ocw.mit.edu/courses/electric...hon-fall-2016/
- E-book http://greenteapress.com/wp/think-python-2e/
- Official Python docs: https://docs.python.org/3/tutorial/index.html
- Useful 'python errors' infographic: https://pythonforbiologists.com/29-c...s-on-one-page/
Also worth mentioning that it's a really good idea to install a tool called PyCharm Community Edition for writing your Python code -- that's a helpful editor with a lot of features you should find helpful while learning, including auto-indenting, autocomplete, mouseover help, error highlighting, and its debugger.
- https://www.jetbrains.com/help/pycha...plication.html (This will save you a lot of time and frustration)
StackOverflow is a really important searchable resource/repository of programming questions, chances are if you get stuck on something, someone will have asked it before here: https://stackoverflow.com/questions/tagged/python
Programming itself isn't really about the language, but learning to think computationally and how to use the language to solve problems; the best way to do that is just through a lot of practise, so when you're confident with the language, it's a really good idea to challenge yourself to improve. There's lots of ideas for programming challenges here:
Are you intending to take the A-Level exam and submit the Coursework? If so then you'd need more than just the programming side of things. The syllabus/specification for the course should describe everything you need to know. Otherwise, there's some good free links here too:
Some more general CompSci links:
- https://www.youtube.com/channel/UCca...RKJzL968QWEykA (CompSci lectures from Harvard. the full course is available for free on EdX)
Also, 5 individual Networking courses which you can unlock for free from Cisco by clicking into the individual courses, choosing Enrol, and then 'Audit':
Generally speaking, EdX, Coursera and Udacity are a real goldmine of free courses from global top universities (e.g. Harvard, Duke, Michigan, MIT, UBC) and tech giants (Amazon, Google, Microsoft, etc.). Everything on EdX and Coursera is free if you audit it. Udacity also has loads of free stuff.
Unless you've got a preference to some other language, Python is generally a really good one to learn (the language you choose doesn't really matter, although popular ones like Python and Java have got a lot more free resources online so those are the best choices):
This is truly incredible, thank you! Do you see there being any benefit to doing the A-Level or is it fine to just learn Python?
I would start out with Python and programming to see how far you get with it. But I would point out that programming and computer science go hand-in-hand -- i.e. to really be able to understand Python you'll find yourself needing to explore a lot of computer science topics and understand what's really going on behind-the-scenes, otherwise you may reach a point where you feel you can write Python code but still struggle a lot to be able to think your way around programming problems (the problem solving aspect of programming and computer science is really the "hard bit").
A good analogy is like a Physiotherapist who needs to understand the musculoskeletal structure of the human body to know that when a patient has got hand/wrist pain that the real underlying problem is likely to be somewhere in their back or shoulder -- they'll have a lot of mental 'models' in their head about how the human body works and how it responds to different kinds of treatment, what common problems are. Similarly, as a programmer you need to have mental-models of all the different pieces that come together to make some code actually 'do stuff' and know how to solve common problems - e.g. how computer memory works, how data is represented, how web browsers communicate over the internet with HTTP, how the operating system works, how databases work, etc.
So you don't necessarily need to follow the A-Level; on one hand the A-Level would tick a lot of boxes and help you understand loads of jargon that you'll keep running into, but you might also find that it's easier to just keep ploughing on with Python. It's a good idea to have a large, non-trivial programming project to work on as an eventual goal to help you focus and give you something to work towards. You could pick up the information you need along the way, taking the time out to explore those concepts whenever it makes sense. You will often find yourself hitting problems or looking at code and examples which require an understanding of certain CompSci concepts, but in nearly all cases you'll find that it's just a matter of searching Google, then maybe trying some code for yourself to figure out how it works.
I assume you're planning on going to university and already have the A-Levels or Level 3 qualifications you need? If so, I don't see any benefit in taking the A-Level exams or getting the qualification - The usefulness of A-Level qualifications pretty much stops at being able to find yourself a university place.
This is fantastic advice, thanks! My eventual goal/project is to code a language learning website. Would you still recommend focusing on Python?
Web development skills are really quite accessible; with somewhat less need for an in-depth understanding of the computer science concepts because you're only targeting web browsers and not running code directly on the computer/operating system. So you could pick up some of that from these sites:
- University of Michigan again: (1) https://wd4e.com/ (2) https://wa4e.com/
However, you'll probably reach a point where you'll want to build more sophisticated web apps and work on the back-end though, so when you reach that point, you might want to jump into Python (although other languages are fine too). There's some decent web app tutorials here: https://blog.miguelgrinberg.com/post...-i-hello-world