4 ms·
I'm going to keep this reply shallow but my advice is dig up a curriculum and course guide for a CS degree (there are many publicly discoverable with Google), e
by petercooper 13y ago
I'm going to keep this reply shallow but my advice is dig up a curriculum and course guide for a CS degree (there are many publicly discoverable with Google), establish what all of the main topics and threads are, grab the best/most recommended textbooks for a couple of topics at a time, work through the books a few pages at a time and for anything you don't understand, Google and learn about it. Take copious notes as you go to refer back to. Read papers that pop up from time to time, get a feel for what you know you don't understand and quickly get up to speed with them (even if it's just reading Wikipedia for 20 minutes).
The above is deliberate practice and learning but also keep an eye out for CS-level posts linked on HN and http://www.reddit.com/r/compsci http://www.reddit.com/r/compsci and relate them to what you're learning. Read a post about AI data structures in Prolog? Don't understand Prolog that sounds interesting? Get a feel for what Prolog is. Write a simple program. Get a feel for implementing the data structure in a language you do understand. Then try and bring both Prolog and the structure together. Rinse and repeat with anything that interests you. Again, be sure to TAKE NOTES or you'll forget things using this scattershot approach.
It'll take a TON of time but if you keep your sessions relatively short, you'll get a shallow knowledge of all of the major CS areas quickly, and then you can use your job or natural interest to drive you into going deep on areas that affect or motivate you.
I'm starting an MSc in software engineering later this year but my own CS knowledge has mostly been learned in the above ways (that is, I don't have a bachelors in CS).
Clarification: As cliveowen got me to realize (below), the above approach might not be for you if you have a very specific target in your career development. My experiences and recommendations are specifically around getting a broad level of experience rather than aiming at a specific role (which, perhaps, you should be doing).
- cliveowen 13y agoFrankly I think that's the worst advice you could give anyone for whatever subject: i.e. "when you find something you don't know about, study it". The best course would be to pursue a targeted learning, and by that I mean, do you wanna be a data scientist? Then you should study probability theory and statistics along with the relative algorithms instead of reading something about Prolog. Do you wanna become a software engineer? Then you should study software engineering, programming, algorithms, advanced algorithms and data structures, patterns, and so on. Getting a "shallow knowledge of all of the major CS areas quickly" with a "scattershot approach" is a recipe for disaster. The ultimate goal is to gain skills needed for your dream job.
- petercooper 13y agoI concede it's not the best approach if someone has a specific goal like, as you suggest, becoming a "data scientist", a "compiler developer", or a quant, etc. In my case (and what I felt was the case for the OP) a general, broad level of knowledge is paramount. I then study deeper on an as-needed basis off the back of my broad but shallow knowledge. Being able to tie together the basics of many unrelated areas really helps in my work, but is surely not for everyone. I already have my dream job for life so my goal is more on becoming well rounded rather than getting a specific job. From a career POV, should the OP specifically focus on a specific target rather than just aim to get a general CS understanding? Quite possibly! But that's a different discussion/recommendation that I think you could kick off in your own response to OP. So I'm voting you up not because I agree with your criticism, but because perhaps the OP does need to think more solidly about the end goal.
- deleted 13y ago[deleted]
- jophde 13y agoThe goal is simply acquire a much deeper understanding of computing that I feel I missed out on by not studying CS in college. I see myself as extremely employable doing app and web development for the immediate future. Under the hood everything is like magic to me and I don't want to feel like that. I also feel like I don't know enough to know what my dream job in computing is yet. Your thoughts are limited by your knowledge.
- petercooper 13y agoYou might like to try the old "go down the stack" process as a first exercise then. There was a post about it recently on here. A Web app developer who knows a lot about things work right down to the metal is a lot more valuable than one who doesn't. How do the processes behind your webapps work? Why or why can't your app support 10,000 clients hitting it at once? What's happening at the HTTP level? The TCP/IP level? Just understanding some of the algorithms behind routing and TCP congestion avoidance could give a ton of food for thought, still get you into learning algorithms, notation, and reading CS papers, but still be more directly beneficial to the day job. I wish you luck however you end up approaching it! :-) The only bit I want to repeat is take a lot of notes.. do blog posts, write articles.. anything to ensure you retain that knowledge because it's so easily lost as you get older.
- revorad 13y agoWhat's the MSc in software engineering course you're going to do? What's the curriculum for it?