This has probably been posted in the past, but I can't find any archives of this board.
I've been looking to go into software development, but I have a non-technical background. I've done a few projects and a bit of front-end stuff here and there, but I'd like to take things to the next level and actually start studying software engineering. I can't / don't want to return to university, so I'd like to try and self-teach.
My question is, where can I find a good curriculum for self-teaching software engineering / computer science?
My current plan of attack, subject wise, is:
1. OOP; object modelling
2. Algorithm analysis
3. Data structures and their low-level implementations
4. Relational databases
5. Functional programming
6. Programming languages and compiler technologies
7. Networking; TCP / IP
8. Overview of operating systems; typical OS architectures
9. Requirements analysis / UML
10. Software development methodologies
11. Concurrency, threading
12. Processor architecture
What else? Any thoughts, or anything obvious I'm missing out?
That's a good list. Also see >>2, security is both handy job wise and relatively interesting in comparison to everything else.
Some more:
* embedded systems
* web design
* operating systems
* graphics
* vector geometry.
* Many optimization/search algorithms use techniques that are connected to the derivative in higher dimensions, so learn you the vector calculus.
* distributed computing
* artificial intelligence
* machine learning, data mining
* how to make the singularity that solves all of humanity's problems and then eliminates it
And numerical algorithms/simulation. You might as well learn fluid dynamics while you are at it.
Name:
Anonymous2013-01-29 4:53
>>14
That's poor advice as it leads people to write substandard code because they don't understand the knowledge we've refined over numerous decades. People need to learn about how to properly structure their programs and SICP is the seminal resource to doing that. An unlearned programmer is unlikely to develop skills like:
system design
algorithms
data structures
database theory
etc.
You should have basic understanding of how human's mind works, because your brain would be the tool you use the most in your career. Introspect on how you solve problems and how you learn, then improve these skills. Then learn a shitty but not too shitty programming language, use it to learn the basic about algorithms and data structures. Then go solve a shit load of classic problem on SPOJ. There are also uva, topcoder to choose from.
At that point you would have become more competent than most programmers IN THE INDUSTRY despite you lack experience with tools and environments people use out there, but that's not the point if you are interested in computer science, so forget them altogether. Now it's the time to invest more skillpoints on your theoretical background: carefully study the theory of computation, review or even relearn your mathematics and mathematical logic if necessary, at least you should remember how to do proof and what set is. After that, it's the perfect time to start to learn about programming language theory and programming paradigms, which will lead to type theory. These things will lead you to more advanced abstract algebra, lambda calculus and its friends, category theory and higher order logic and stuff, but deal with it.
Along the way you might pick up some gems of the EE discipline, and understand how the comtemporary electronics computer works and how every piece of hardware out there is an utter piece of shit, which is certainly good. The Sussman is also from EE, you see.
Now that you have become a true wizard, you can set out to study whatever you like. Frivolous things like database, networking, computer engineering or artificial intelligence should be as easy as a pie for you now. Regularly read research papers, contribute to those workshops you are interested in, and try your best to survive without a job, since you didn't come back to academia and still studied that much CS.
Or simply, just read your SICP
This is not the only route anyway, but I'm pretty sure this is one of those route in CS that will either lead to true end or bad end. Good luck suiciding with a poisoned apple like Alan Turing