I often hear many many people say "what you want is Software Engineering not Computer Science" and I'd say YES that's EXACTLY what I want. The problem is finding a university that will give it to you.
In my opinion the field of Computer Science should be the study of abstractions, logic, derivation of algorithms, understanding the limits and possibilities of computer hardware, and programming (being the development of a real-world solution to a problem that can be run to process data). If it's not one of those items I don't think it belongs in Computer Science. Sadly, our field has been managed, since the beginning, by professors who think it's math field.
That's the way I'd say most hiring managers look at it: Computer Science = Programmer. The only place this isn't paralleled is academia.
So I'm perfectly fine with saying either everyone else is wrong and my definition is correct, in which case we need to seriously evaluate how Computer Science is taught in schools. Alternatively I'm wrong, in which case I'd love to attend a university that will allow me to get a bachelor's, master's, and maybe even a PhD in Software Engineering because the truth is I hate whatever it is that academia considers Computer Science but I love logic, creating solutions to problems, thinking about the limits of hardware, optimizations, and everything that goes along with it.
Sadly I cannot find any university that offers this. My university offers a SE masters degree but it requires a BS in Computer Science! How ironic!
But yea, I'm perfectly happy with either of those outcomes. The people who are, in my opinion wrong about what "Computer Science" is can stay in their corner and I'll stay in mine.
> The problem is finding a university that will give it to you.
Go find one of the multi-week intensive programming "camps" with a good reputation (do be careful--there's a lot of snake oil out there). That's what you want.
The problem is that bootcamps are 3 months of "intense" and pressured learning the most marketable language at the time and as far as I know aren't accredited like regular universities.
What I'd like to see exist is a 1~ year program at a real college (can be community college!) that is basically a more comprehensive and relaxed[1] version of a bootcamp.
[1] I don't mean this to sound "easy", just not 8-10~ a day of work like bootcamps are.
I'll go a step further. Right now I've created The Perfect Semester for myself.
Right now I am taking:
- CS280: C++/Interpretations & Composition of Programming Languages
- CS288: C/Whatever random crap the professor came up with
- CS252: ARM EABI Assembly/Computer Architecture
- CS332: Operating Systems
- IS350: An Ethics Course
I'd love a college that will let me do something like this. Create a schedule for 4 years (like a normal degree) that will provide me with, you guessed it, a degree in "Software Engineering" where I learn about, you guessed it, Software.
I want to learn every popular language's ins and outs. This includes, but is not limited to C, C++, Ada, Lisp, Java, C#, Python, x86/x64/arm/MIPS assembly. I'd like to be taught, not lectured to, I want to actually learn from my professors. I want to learn about software abstraction, organization, revision, and project management. I'd like to be able to learn about ever piece of software running on a system and be taught how to implement them. I'd like to learn how to use every single tool in my arsenal to solve any problem in development or in my problem domain.
I want to actually build things with seasoned experts (my professors). I'd like to come out the kind of person, who when asked to solve any computer-related problem doesn't stutter but just hops right on it.
I've done, to the best of my own ability, just that outside of school yet there are just some things I cannot teach myself.
I love computers and I want the curriculum to mirror that.
And for anyone who want's to say "oh you just want the easy way out, you just don't want to take English/Math classes because that's too hard". I've heard this many many times before. I don't want anything easy. If anything this curriculum that I want would be far harder than any CS curriculum ever before it. But it wouldn't be hard for me. Not because I know how to do all of the stuff in it, but because I love doing all of the stuff in it. These things are what I excel at doing and I strive to know as close to everything about these things as I can.
Sadly, we don't really get a say in this sort of thing. My beard isn't nearly gray enough and I don't have a white coat, so in the end my opinion is unimportant.
> I want to learn every popular language's ins and outs. This includes, but is not limited to C, C++, Ada, Lisp, Java, C#, Python, x86/x64/arm/MIPS assembly. I'd like to be taught, not lectured to, I want to actually learn from my professors. I want to learn about software abstraction, organization, revision, and project management. I'd like to be able to learn about ever piece of software running on a system and be taught how to implement them. I'd like to learn how to use every single tool in my arsenal to solve any problem in development or in my problem domain.
And yet the CS curriculum is exactly what you need in terms of foundation so you can learn all of that.
What you are asking for is a (probably several) lifetime of information in 4 years. Wouldn't we all like this?
> I'd like to be able to learn about ever piece of software running on a system and be taught how to implement them.
Take the track that leads to your "Compilers" class. You will get most of the pieces you are asking for along the way.
> I want to actually build things with seasoned experts (my professors).
Sorry, but your seasoned experts are probably in industry, not academia.
> Sadly, we don't really get a say in this sort of thing. My beard isn't nearly gray enough and I don't have a white coat, so in the end my opinion is unimportant.
Sure you get a say, but those of us with experience also realize the sheer enormity of what you asked.
I'm sorry but I can't see any more then 10% of the curriculum of the standard CS class is required to learn about software engineering.
This is more so true given that my school requires:
- 7 Humanities classes
- 5 Math classes
- 3 "Interdisciplinary Studies" courses which are any science that isn't CS
- 3 Social Science classes
- 2 "General Electives" which are any class that isn't CS-related
- 2 PE classes
- 2 Physics classes (With labs)
- 1 "Science Electives" class (Most with lab)
The Science Electives and Interdisciplinary Studies are basically just CHEM, PHYS, MATH, or BIO. Nothing in CS is offered.
How many CS classes do I take, you may wonder?
Only 16.
Now I ain't no mathematician, despite my college wanting me to be, but that don't smell a no good. With some fancy adding I come up with 25 non-CS classes and 16 CS classes. Pile on some fancy division and we get to an amazing figure.
Only 40% of my degree is CS. This was counting everything in the "CS" course label but many of those courses aren't technical.
Counting only "real" cs courses (where you learn theory or implementation of computer science topics) there are only 12 CS courses. The rest are non-CS classes under the same name. Things like 1 class about how the university works, 2 classes about teamwork (which is also done in the management GUR I need to take), and 1 class in Discrete Math..... notice the "Math" suffix.
That brings us down to a whopping 30%. Only 30% of the money I am paying for college is going towards something I want it to (in the case where all of my money is spent on academia rather then sports) and it is also assuming that all of my classes are actually teaching me something. Most classes are just professors coming in, telling us stuff that is blatantly incorrect (I keep a list now to pull out when this point I'm bringing up comes into an argument) and then they can't even implement the assignments they are giving us.
A more realistic number is that ~50% of my CS classes actually teach me something I've never learned before.
So we are down to a sad, sad number of 15%. A measly 15% of my time is actually spent learning about computer science.
Now, let me ask you. Would you think that the 15% of my time in Computer Science will actually teach me as much as 4 whole years of computer science?
You cannot ever convince me that someone wouldn't come out of a course like that knowing less then one of the 15%-educated students.
So I guess it's turned out that I was wrong. It's not 10% of my education it's 15%.
> And yet the CS curriculum is exactly what you need in terms of foundation so you can learn all of that.
> What you are asking for is a (probably several) lifetime of information in 4 years. Wouldn't we all like this?
I'd say that my fellow students would be better served with 4 years out of that lifetime of CS knowledge checked off rather then learning to find the area under the curve.
> Take the track that leads to your "Compilers" class. You will get most of the pieces you are asking for along the way.
The only track thaparserst leads to a "Compilers" class in my school is a Masters. The class on compilers that actually touches on things I haven't experimented with in my own time (LLVM, writing parser, writing interpreters, reading through some books here and there) are classes that lay in the 600 level.
> Sure you get a say, but those of us with experience also realize the sheer enormity of what you asked
You don't think that I have enough experience to understand that this is a massive undertaking? I do. Ask for everything but settle for half because every victory, no matter how small, is still a victory.
Now there are exceptions. Are you going to work in finance? You probably need to know a bit of calculus. Are you like me and want to go into R&D? You are definitely going to need to know a lot about signal processing and some machine learning is always helpful. Are you interested in contract software development again like I am? Then you will need a little bit of background on software ownership, copyright law, and general contract negotiation.
The only common thread through these fields is a heavy reliance on your ability to program. Everything else can be bolted onto your degree.
But I don't think it's wrong to say that someone needs to take 21hr of English classes, 20hr of Math classes, or 6hr of Physics classes, to be a Computer Scientist.
An intro in each of the basic sciences is indispensable for a career in R&D.
Taking only 5 math courses (3 calc + discrete + linear?) is likely woefully inadequate, unless they're all taught very well or you plan to teach yourself a bunch more math. In fact, you should take abstract algebra, probability, and as many analysis courses as you can while you have the time. In either case not sure what you're complaining about.
The humanities courses are a good place to practice your writing and argumentation; those skills are transferable to negotiation of every sort.
Also, you could've knocked a bunch of those required courses with AP/IB credits in high school (2 history courses, 1 or 2 english, intro bio/chem/phys (3), intro CS (1), calc (1-2) = 7-10 courses).
> An intro in each of the basic sciences is indispensable for a career in R&D.
That's why I've been pitching in time and helping Drs at my university with their research in fields like RF and Physics. I learn much more then anything I've gotten out of a classroom.
> Taking only 5 math courses (3 calc + discrete + linear?) is likely woefully inadequate, unless they're all taught very well or you plan to teach yourself a bunch more math
When I'm taking on a problem that needs to be solved I immerse myself with information about the problem domain.
Linear algebra is the only thing that you've talked about at all that I've found useful so far. I did a bit of game development in my own time in high school and ended up teaching myself a lot about it. Mainly I just dicked around with implementing parts of a physics engine and taught myself a lot. So yes, the reason I want to go into R&D is because I like to learn about many different things but only if there is a reason.
But still, I don't want to be the only person in a team in R&D. I want to write firmware, software, and work on implementing designs. I've also proven to be fairly "ok" so far at management. I've got a lot to learn but it is something I can do, so I might bark up that tree.
> The humanities courses are a good place to practice your writing and argumentation; those skills are transferable to negotiation of every sort.
I do more writing and argumentation in my own time. I spend about 10 to 15 minutes
> Also, you could've knocked a bunch of those required courses with AP/IB credits in high school (2 history courses, 1 or 2 english, intro bio/chem/phys (3), intro CS (1), calc (1-2) = 7-10 courses).
If these are things that could have been "knocked" out in high school then they definitely shouldn't be part of a high school curriculum. I had a lot of family problems in high school and that lead to a large problem with my "behavior" in school. Mainly not wanting to take shit from my teachers after hearing everything all night from my parents. Here are some antidotes from my high school "experience" (which I also consider to be mostly useless and feel a majority of the time I spent there could have been better spent someplace I could have actually learned something rather then just sit and stair at a wall all day)
- My math teacher told me that any problems that I didn't show work on would result in a 0. This was after the game-dev time in my life and the class was only algebra 2. Everything was easy and I didn't show any work. I just took the zeros on the homeworks/exams until I was called into the guidance office to "explain' myself. I said for them to give harder problems or for them to leave me alone.
- My math teacher didn't like me using pen on the exam. She said I'd loose 5 points every time if I did. I just kept doing it. I think my highest grade from that marking period was a 95.
- I gained access to the schools camera/DVR system and used it to find my friends between class. Principle threatens to call the cops and I just gave them all the info I had and told them I was sorry.
- I didn't do any of the homework or classwork for my English class one semester, scored AP on all the standardized exams and 80+ on all the class work. They put me into a remedial class for English where I put in the same amount of effort but ended up getting an A.
- I managed to get a D in gym class some how. I don't even remember how that happened.
- Pre-Calc my senior year I again didn't do anything except now we where allowed TI NSpire's so I ended up installing Pokemon on my calculator. I played that.
- My last two years I was able to take programming classes, I helped the teachers clean up their material since they where teaching from books. Nothing good ever comes from that.
I've probably got more stuff I'm not remembering but you might be seeing a common trend. High school is basically just a place to get you used to working in a factory and making sure you wont drool on yourself in public. It was a huge waste of time that basically kept me away from learning about the stuff I wanted to: computers
Anything that carries over from that shit show into academia is again a huge hint that you've got a large problem. I also don't think my time should be wasted learning things I don't need nor do I want to pay for it.
I'd understand if most people actually remembered the materials taught in these classes. That's one thing. But that is seldom the case.
There are very limited things that college has been good for:
- I've got a lot of debt which makes me now applicable to some government loans/small business programs.
- I've met 1 or 2 professors who are actually good at what they do AND want to share their secret sauce
- I have access to a library with academic subscriptions (although the library won't subscribe to JOM... bastards. I pay them 15k/year they can spend a bit of that on important reading material)
- I can help people build things that I like
Without these I'd just drop out. I'm 100% sure this isn't worth what I'm paying but I'm in so much debt now that the FAFSA will finally help me a bit so I might as well just hate my life a little longer, struggle through the BS, and at least get a piece of paper that other people will think is impressive.
That's a lot of general education (7 humanities, 3 social science, 2 general electives, and 2 PE classes--42+ credit hours). Far more than I would expect for a BS degree.
However, 5 math classes are probably minimum. Calc I, II, III(Vector), Linear, and Discrete give you just barely enough. Want to build a game engine? Yeah, you will need every ounce of that math and then some--you're actually missing at least a numerical analysis class that you will need.
6 courses of science (18+ credit hours) with some labs is hardly too many. Most people use computers as a tool to support other fields. And lab technique dovetails with debugging (see some of my other comments). Understanding physics sure helps when you are doing signal processing.
HOWEVER, the biggest issue is that you probably don't belong in a purely CS track (which is generally in something like College of Arts and Sciences). You probably belong in an EECS program.
Again, this is NOT CS this is stuff that can be bolted on (just like I am doing). It's a net waste of time for everyone to make these things mandatory. I'd say that from the math and science classes here I've taken I remember nothing. From the things I've needed, banged my head against the wall for hours to learn and implement, and then used for a real project I still remember. This is about 3-4 years after learning the material on my own as opposed to learning the other material last semester.
The only thing that's useful is something that you actually remember and use. That's one of the hugest reasons why most of these math courses are useless garbage. I just see it as a way to suck money out of students.
No it's not. I'd like a degree, I'd like to learn from professors how to research in this field, I'd like to publish papers, and eventually after some years in the field I want to retire and become a full time lecturer/researcher.
A code-camp cannot offer me that, only a university.
In my opinion the field of Computer Science should be the study of abstractions, logic, derivation of algorithms, understanding the limits and possibilities of computer hardware, and programming (being the development of a real-world solution to a problem that can be run to process data). If it's not one of those items I don't think it belongs in Computer Science. Sadly, our field has been managed, since the beginning, by professors who think it's math field.
That's the way I'd say most hiring managers look at it: Computer Science = Programmer. The only place this isn't paralleled is academia.
So I'm perfectly fine with saying either everyone else is wrong and my definition is correct, in which case we need to seriously evaluate how Computer Science is taught in schools. Alternatively I'm wrong, in which case I'd love to attend a university that will allow me to get a bachelor's, master's, and maybe even a PhD in Software Engineering because the truth is I hate whatever it is that academia considers Computer Science but I love logic, creating solutions to problems, thinking about the limits of hardware, optimizations, and everything that goes along with it.
Sadly I cannot find any university that offers this. My university offers a SE masters degree but it requires a BS in Computer Science! How ironic!
But yea, I'm perfectly happy with either of those outcomes. The people who are, in my opinion wrong about what "Computer Science" is can stay in their corner and I'll stay in mine.