&gt; theory of computation, recursion theory and type theory and PL, compilers, complexity theory and algorithms, advanced data structures, concurrency and distributed systems etc<p>All of those are fairly basic topics that most people can pick up in an afternoon or two. These are all things that anyone who has been programming, reading, and interacting in the field of computer science understand. I could understand someone requesting that knowledge be provided to them in a college environment.<p>What I object to is universities charging for the &quot;well-rounded&quot;-ness that you speak of. Can you please define for me what it means to be well rounded?<p>From what I have seen is that no, no one can define what it means to be well rounded.<p>What do you have to do to be well rounded? No, no one can tell me that either.<p>Some how having gone through a university you are proscribed this trait of being in the &quot;know&quot;. You automatically are transformed into a scholar, a person who is now magically &quot;well rounded&quot;.<p>Don&#x27;t get me wrong, I think that there needs to be a structured curriculum, but only of things you need to understand make it in your respective specialization.<p>For me, I&#x27;d love to get into building compilers, operating systems, digital signal processing, and general software development.<p>For me, I&#x27;d say this is the perfect regiment for me:<p><pre><code>  * Full understanding of the computer booting process, understanding of modern processor features.

    - Write a self hosting operating system, bootloader, and learn to write a BIOS for an example computer

 * Software maintenance and revision control

    - Following the current industry best-standard practices

 * High level math with a focus in signal processing

 * Familiarization with X top programming languages at the time of graduation

    - This should include standard formatting for each language, understanding implementation details, and full familiarization with X top used libraries and standard library

 * Understand logic and problem solving
</code></pre>
You may notice that I have annotated some of the things I feel I should learn, others I have not. If I have annotated it, it is because I have learned to do this on my own time and I want to expand that knowledge and I know it will help me professionally. The things I have not annotated are things that I have a basic understanding of, but I need someone to teach me although I am not getting that at a university.<p>I don&#x27;t know, maybe I&#x27;m wrong about this. I think these are fairly rational claims that I am making. Maybe I&#x27;m completely wrong and being able to quote shake-spear will help me when I need to learn the documentation for int 0x13 when I need to load a file on a 30 year old IBM PC when fixing a kernel level bug at some company, or when I need to write software to process data coming from sensors at 100GHz.<p>Edit: Updated formatting.