But is he actually writing his own, or using existing solutions (Map reduce/Cassandra/etc.). It doesn't take a degree to learn how to use most existing solutions. And in fact most undergrad programs don't teach those at all. In grad school I got some of those solutions in a special topics class, they were not part of the syllabus.
Anyway a good tutorial and some API docs are enough to use most of these things. No need for a degree for that. To invent your own, it would be good to read all the research papers so you know what other people did...but this is more a researcher PhD type task than a software development task. Even reading a paper to implement an existing one is kind of beyond most software developers... But the average developer is not creating databases/nosql solutions/web servers/operating systems, they are using them to solve business problems....
And that's all well and good. But the university degree is not an apprenticeship, so you don't need one to be a computer programmer. It helps you to learn computer science, not programming.... And it is possible to be a good programmer without one.
It definitely helps for research or in helping you to know what is out there (especially a graduate level degree). But for the average hook up my front end to a database job it is way overkill... Or even read the database/file and do computations.
My point is that you don't need a degree to be a good programmer. And a degree is not a guarantee of a good programmer, because in fact a computer science degree teaches computer science, not programming....
A college degree in itself is not a bad thing to have because it does show some dedication to stick it out 4 years and get your degree. It also exposes you to a lot of other subjects giving you more experience learning things outside your comfort zone. Which basically most businesses are. But it is no guarantee of a good programmer and someone shouldn't be shut out for a lack of a degree....
Also sometimes people with degrees in different areas excel as programmers. At one place I interned at, they found they really liked music majors as programmers...
But an aside, most college courses seem to be reading on some subject, thinking about it, and then spitting out work via mathematical problems or essays (including short answer questions as essays) which in general is a good skill to have. Many people have the ability to take in knowledge, think about it, and then spit out an analysis right out of high school....
I would say it is entirely possible that these high school kids would make great programmers. And yes the company gets them at a discount, trains them up. But for the kids who are good, any company that won't hire them because they don't have a college degree is stupid. Without talking to them, maybe even seeing some code, you can't tell of a candidate is good or not (whether they have a degree or not). The guy from college could be a lousy programmer, the guy from high school could be great, the guy with a bachelors could be better than the guy with the PhD (the high school as well). In fact some PhD candidates are lousy programmers in my classes who free load on the group projects....... But it's not because all PhD people suck, because some of them are just great. Each person must be judged individually....
From what I have seen most thesis are much more theoretical than a typical software developer job. Even if they relate to practical concerns in the industry, they are things that a researcher would do, not a developer. Or they can be a survey of existing techniques, which is something that a software developer would do when making a choice as to which way to go. But the thesis itself does not seem to teach maintenance, decomposition, design, etc....
There is also the project route, and the project while a bigger piece of software does not teach good coding. You just need to slap something together to get it to work. Most people I see do some type of web store. One guy did a software for a clinic which had search methods using information retrieval methods. It wasn't that complicated though.
In reality you need a class that takes some huge well written system and has you adding enhancements with unit tests. Or some class that examines a bunch of existing well written software to learn the various techniques. Probably the best class would be a balance of examining existing software and making small enhancements. But that is more the domain of a technical school than a university. It's almost like you need an apprenticeship for a year or two... Or maybe an open source project.
Compilers is not taught at my current university at all because it is not considered a hot research area. Databases is required where I am for my masters (well a 3 or 4 courses thing), but this is not standard. As an undergrad it wasn't required. Not getting a compiler course really ticks me off.... Also architecture is not offered either because the 3/4 courses that almost everyone picks are Operating Systems, Networking, Databases because Architecture is hard.... Most programs I see require some type of Networking, Architecture, and either Databases or Programming Languages as the core. Oh and mine also requires Algorithms, no 3/4 you must pass that class. Except for one program Algorithms was required as well.
Many professors just run the program and grade the output. Or they just expect a demo in class. In an intro class the programs are so small that the professor reads the whole thing, but basically they amount to one or two sub programs. There is no maintainability/commenting on the program, basically you learn to solve problems with programming languages, not to be a programmer......
It seems lately the BSc-MSc is all theoretical and not practical at all. The first job seems to be where you get the practical stuff...unless you get unlucky...
It's true that there are changes like that. But the average undergrad course does not hit them. Neither does the average graduate program. That's why Intel has these programs to contribute money for universities to start teaching courses on Parallel programming.
Anyway the educational programs have not caught up. I checked several graduate programs and looked at their undergraduate programs. Algorithms/Discrete math are exactly the same. My graduate program had an advanced algorithms class as well, but the newest thing there was Page Rank (almost 10 years old). And that was only because the professor had a Google fetish.... Operating Systems is about the same. It ignores particulars based on multi-core/multi-threading and focuses on the normal layers/semaphores/etc... Computer Architecture in my school and the other ones I looked at does not teach Parallel architectures, it still focuses on instruction level parallelism. A few other schools I looked at had this the case too. Undergrad it looks like computer organization is the same, mostly focusing on number systems, things like computer arithmetic, and digital systems design via the gates/flip flops. It could also be that at an undergrad and even a graduate level they feel parallel programming is not that important... Or typically they are just behind and it will be another 10 years for many universities to catch up...
But anyway Parallel programming is not that new. A multi-core processor is like a shared memory multi-processor machine which there have been tree structured computations and things for a long time. And java synchronization primitives are not unlike normal operating system critical sections and semaphores....
In a research class we did play with Hadoop (Map Reduce and Pig Latin) which is for clusters. But it also uses multiple cores because it creates multiple processes. And that area of creating libraries to simplify parallelism is still way open....
I don't know what universities you have seen. But the ones I have seen do not teach you documenting code or how to organize it. Most people's projects are spaghetti code or worse. The actual good programming practices seem to come from your first employer if you get lucky....
Anyway I am now on the fence about a PhD. But overall it won't make me a better programmer. It will make me a researcher. And in fact many companies won't hire a PhD to be a programmer because they will see them as overqualified (in fact my work mate who is almost done with his has mentioned he wouldn't hire a PhD to work in his team).
As far as me, college basically added some advanced math and a broad overview of computer science. But do I actually use any of that on the job? No. Basically I use high school algebra and the same basic loop structures you could get from Teach yourself C# in 20 days or something. I taught myself SQL as a freshman in college for a summer internship, and in both my undergrad and graduate database jobs the SQL was much less advanced than what I did on my own. In college I have not met a program that I couldn't do. They mostly consist of stringing together a few algorithms to do this or that based on concepts learned in class. On the job you don't even code the algorithms, you use the collection libraries (C++/Java/C#/Almost all the scripting languages have these...). Most of it is about taking the business rules, and converting it to code with loops, conditionals, etc... I could do all this after high school (because I learned C on my own to fiddle with a MUD).....
Anyway once I finish my Masters I hope to find one of those few jobs that actually uses at least a Bachelors level of computer science education..... In some places there are a few senior guys who do the interesting work and then all the normal guys end up using their libraries... In others it is all just business applications to link to files/database and it is all about the business rules. And then there is Google where the company is on the bleeding edge in many things... Or even Microsoft, although I think the windows kernel would be a nightmare to touch... And office as well.
Google's index is not a normal job. Also an undergrad will typically not cover Kleinberg HITs, Page Rank, or even Parallel Algorithms. But the actual design of these systems is done by Researchers, not developers. They just implement/architect it. But actually inventing page rank/map reduce/google file system were done by Researchers who later wrote papers on it. The developers just implement it. Reading these same papers, other developers created Hadoop. Basically creating all that stuff is beyond most of us. Implementing it requires good developers too, but the average developer won't be implementing it.
The average developer will read the tutorials/api for hadoop and then just use it. No college degree/advanced mathematics/distributed systems knowledge required. And that's the point. The average developer is not creating an operating system, just using the system calls (which don't need a college degree to understand) if even that. The average developer is not creating a compiler. The average developer is not implementing a network protocol (in fact mostly the average developer is not even using sockets but libraries built on top of them to abstract away the socket layer).
I think you'd be surprised how much a high schooler can learn. In fact most people here probably knew the efficiency of a hash table versus a binary tree lookup versus a linear list look up versus a binary search on an array before college....
i'm not saying college is completely useless, but a lot of people have the knowledge necessary before a job. The average programmer is not writing their own data structures, they are using the STL/Java library. They just need to know the relative efficiencies. The average programmer is not writing some type of distributed transactional system, they are just hooking up a web page to a database or a number crunching program to a database. And quite often they are just working on layers that already read the data from the source. So it all comes down to looping, control structures, etc. basically just turning instructions into computer code....
Also some people are just crazy smart. My friend eric could always out program me. He failed out of the same school I went to. But he can still out program me. Also http://en.wikipedia.org/wiki/Audrey_Tang doesn't have a college degree (or even a high school degree), but some of her work is amazing. Anyone who can write a Perl interpreter in Haskell is definitely good enough for whatever programming project you have....
No, that's the job of high school/grade school to socialize you. College is supposed to educate you for a career. But there are many careers which just require vocational training (ie plumber, electrician) and apprenticeships. It may be overkill for a computer programmer. But for a computer science researcher, college is appropriate.
I gotta disagree a little bit. A lot of a college CS program is not outdated in 5 years. Consequently a lot of it does not apply at all to most jobs....
Operating Systems -- The underlying principles are mostly the same
Algorithms -- New ones are constantly being discovered but the most popular ones have been the same for 30+ years mostly (the undergrad level ones are generally not newer things)...
Networking -- Some changes with wireless but most of the TCP/IP protocol that is taught in undergrad courses is the same
Discrete Math -- Again mostly the same for the past 30 years
Computer Organization -- Mostly this is the same (assuming the course on digital system design/k-maps/binary number systems/etc...)
Some Intro Programming Class -- The underlying concepts apply, although the specific language is changing all the time. Although they are not that different...C#/Java/C++ all imperative languages
The rest is all math (Calculus...not changing, Linear Algebra, etc...) and electives (Compilers, Databases, etc.). A lot of the electives are mostly the same at an undergraduate level. Although there do seem to be more fad of the minute classes, ie iPhone game design or state of the art classes...ie Video Game Design..... But they are in the minority and in 1998-2002 when I was an undergrad they didn't exist...in my school (today they do)
What seems to change hourly are the various libraries/programming language of the day/framework of the day. And my college didn't teach any of those. It focused on the core CS concepts, not specific technologies. Although we did use Oracle/MySQL a bit in database class, we did not learn Oracle/MySQL, we just used it as a vehicle for expressing concepts in class. Programming assignments were mostly straight forward algorithm implementations which just used programming concepts and easily can be ported into any language. We didn't get crazy into C++/Java specific things.
But one of my complaints has been that I really don't use any of that... I use some common sense things from algorithms about linked lists/arrays/hash tables and the various orders of magnitudes of common applications, but mostly I use libraries that implement them. And I knew that stuff before algorithms class. Mostly in business program you are using the STL/Java Library/C# libraries and all the collections are implemented. For building a quick GUI to a database it really doesn't take the advanced math/concepts of a CS program.... Admittedly if you were building video games or working for Google then sure computer architecture and advanced knowledge comes in handy. In a Google phone interview they took everything into consideration, the memory hierarchy, the swap space, disk access times, etc... With a job like that it is good to know the PC to wring out performance... Or video game programming because games are constantly pushing the envelope. But those are the exception, not the rule.
Where I have failed and a lot of companies are failing is that for the first job it is important for a lot of grads to learn how to organize big programs and program with an eye towards maintenance. That is where you really learn how to program (or working on an open source project). Colleges don't teach that. Most assignments are short, maybe 1,000 lines of code or less. Also you usually don't need to maintain them, so you can throw a bunch of garbage together that runs correctly and then wash your hands of it. Implementing a Hash Table, or maybe your own database class that writes to a file is not the same thing as taking over some 10,000 line accounting package....
Well you have to buy rights to sell e-books in batches and reports of the # of sold books need to be sent to the publisher/wholesalers. And the system needs to be audited by an external third party.
The publishers are being very greedy with e-books. In reality if they priced the e-books the same as paperbacks I would probably still buy them since the e-books save shelf space (which is at a premium). If they were fair and when a book first comes out, they price the ebook at slightly less than the hard cover (since the physical cost savings are more with a hardcover than a paperback, maybe even $5 less or so). Then when the paper-back is released, the e-book should go down to at least the cost of the paperback. A hard cover does cost more than a paperback due to materials, but usually they charge way more than the price of materials. Then they keep the higher profit margin for a few months before coming out with the paperback with less profit margin. I think that is okay as long as they are fair with the e-books.
Currently Barnes and Noble said that I don't get a membership discount on e-books because the publishers set a price. Also there are no sales, etc.. And in many cases the publishers are totally ripping us off. Several textbooks I got have an e-book at $60 while I found a soft cover for $40... Not that I would buy e-textbooks yet because e-ink is not the right platform for a textbook. Still Amazon was a bit crazy before selling every e-book for $5, it made publishers not want to come out with their latest offerings. I don't see why e-books cannot just be sold like normal books. Publishers wholesale them to retailers who then sell them to the customers for a different price. No $5 special deal. Sometimes bookstores run discounts on e-ink and Barnes and Noble applies membership discounts to e-books the same way it applies them to physical books. I didn't like the amazon $5 model because publishers wouldn't release a lot of works in e-book format or would release many months later. I don't like the apple model because the publishers are screwing us. I would prefer the old model applied to e-books. But publishers need to be realistic. You can't charge more for the e-book than your cheapest physical book. If the paperback is not out, then charge a bit less than your hardcover. Once the paperback comes out, you should charge a bit less than the paperback. In reality I might even pay if the hardcover only is out and the price is the same or the paperback only is out and the price is the same. But since there are less printing/binding costs, there should probably be a discount compared to paperbacks and even more of one compared to hardcover. Although most of the sometimes $10 or $20 difference in price is not physical materials...it is just profit margin. Publishers can try to keep the profit margin. But if printing costs are $2 for paperback and $5 for hard cover, they could sell an e-book for $5 less than the hard cover and $2 less than the paperback. it's not like they were pocketing that anyway....
And on textbooks the physical books are over priced. Hopefully some enterprising teachers will make cheaper e-books (since they no longer need as much of an investment) and we can rip text books out of the greedy publishers. My personal favorite is how the Calculus books have 10 editions...Calculus hasn't changed that much in over a hundred years.... Mostly they just change the problem sets so that you need the new copy of the book to do the homework. People like that deserve to go out of business. And if e-books spell the way to wrestle control from publishers then all the better....
I'm 30, and I sort of get phones. But I get the eventual dream which is the phone is the next miniaturization of computer technology (similar to desktops and then laptops). I can imagine the possibilities in the future. Taking a picture of that strange rash and sending it to your doctor who responds with what it is and a prescription (along with a micro-payment). Using the phone to unlock your car, or even remotely start it. Using the phone to turn the lights on your house on, or even to turn up the heat before getting home. The phone can basically be a micro computer or a universal remote. One of the best things is that you can always have them with you so there is no telling the full extend of things that they can help you with. Even a laptop is a challenge to lug everywhere....
I hate typing on the phone...But I get the text message concept...it is similar to ICQ/AOL/MSN were/are. Still it's not for me. I come from the days of Livejournal, ICQ, MUDs, etc... But I can see why people like to message. And why people like to break up over a text message.... Well first there were complaints that breaking up over a phone call was cowardly. Then e-mail came along and suddenly a phone call was brave. Now there are text messages.... The other poster responded with many other advantages about ways to talk without disturbing people, and ways to convey information without starting a conversation.
I would say giving an unsupervised laptop is a mistake. Because parents need to keep track of what their kids are doing. Otherwise you also introduce liability. If I kid is on some yet unheard of social network (because I'm sure myspace/facebook will all be blocked) and meets a predator, is the school legally liable for not watching them? what if they do it during school hours, what if they do it during home hours? What if they download software/movies/etc and are sued. Is the school liable if they do it on school property (I would argue if on school property they are liable, particularly with a minor)?
I don't think a laptop is a right, nor should it be a babysitter to substitute for instruction. Also I'm sure people will steal/break/etc. them on purpose. Every school has the bully, the criminal, the drug addict, basically all sorts of scum.... A laptop would fetch good drug money for the addict. Even if I had said laptop when I was 16 or 17, I wouldn't want to bring it to school.
What will happen is that the school will go on a censorship binge after catching people looking at porn, downloading music, etc.. Then kids will get in trouble who would have been fine if they never had the laptop in the first place.... Then people will circumvent/resent the filters, the administration will race to get more security, and even less work will get done...
Even worse, teachers will try to force a laptop into class, otherwise the parents will jump at the expense. Take math class....does a laptop really help with Algebra? Maybe at more advanced levels it could (none of my college math classes would benefit greatly from a laptop [although numerical analysis would have if you didn't have a good calculator]), but not for the fundamentals. A class is full enough just teaching the fundamentals. Similar with most other classes. If you try to force a laptop in, you are going to do it at the expense of something else in many cases.
That's exactly why they shouldn't be using laptops, too many distractions. I see it in grad school as well, people on laptops surfing the web, etc... and not paying attention... Except for one dude who was chatting with someone on msn, looking at jewelry on the web, and he answered an advanced question from the professor... But he's a super genius.... For doing reading/writing/math you don't need a laptop. In other classes it could help (mostly where you need to take a bunch of notes, or the class is at a computer lab [programming, typing, business software]), but it could also be a distraction, especially among teenagers who like to play games all the time... It's probably better to have them paying more attention in class...
I don't want to limit bit rate, just prioritize people who haven't yet met their cap above you. If the network is not congested you should get full capacity.... You might limit the bit rate of packets getting the highest priority, but the rest should be delivered to the lower priority queue and still get through....
Some people throttle traffic by dropping the occasional TCP packet to cause TCP to reset the sliding windows. This is not QOS.
I always say t-mobile seems the better of the wireless carriers. They always seemed to have better customer service, more reasonable prices (the fact that they only make you pay for a subsidized phone if you subsidize one is also cool, ATT/Verizon make you constantly pay a phone subsidy even when the contract expires....). And the fact that they do this to eliminate overage charges shows that they are really pro consumer. Unfortunately their network is incomplete in many areas. Otherwise I would hop to them and not look back (at least until they start ripping me off like ATT/Verizon).
Even the Google Nexus one seems to have 3G problems with t-mobile. Most articles said the ATT one works way better than the t-mobile one without constantly switching to edge speeds. Otherwise even with the smaller t-mobile network I probably would have visited www.google.com/phone, bought my nexus one for $500 and signed up.
But the telecom network is not a public network. It is a private network. ATT could throttle you at each mobile switching center which would keep the traffic down on their network while it goes between the mobile switching centers to its internet gateway.
I don't know why they can't just use QOS on their own phone network. They could mark the first 2-5 GB of capacity as high priority, and then the rest low priority. With a fair queuing system, the average user who doesn't use that much data would not have the appearance of being slow, just the guy streaming netflix movies all the time. But with buffering, perhaps the play delay would compensate for the saturated network.
Still they do need to upgrade their network somewhat. I mean if it is the age of video and everyone is streaming video (we aren't quite there yet), they are going to need to increase the initial data cap as well as upgrade their network. Also if they get 25% more subscribers, they will need more network capacity. QOS is not the magic answer to never upgrade your network until 2020.....
Really, then how do you explain the cops being prosecuted based on you tube videos. Or how do you explain Rodney King, where the footage from the bystander was the proof of the brutal beating (although maybe there were no cameras in the cars in 1991, I'm not sure...). Still I recall news stories about cops being arrested based on cell phone video as well (although I'm too lazy to cite it now).
If internal affairs was really not asleep at the wheel, there would have been no need for youtube videos/bystander recordings/cell phone videos to be used because they would have spotted the issue and taken care of it.
Anyway, if internal affairs really does get all the videos, they are probably archived and stored without anyone looking at them (like many surveillance videos). In which case the average Joe the plumber will need to raise a big stink to get anyone to look (and even then they may not). Unless there is some type of rule that every traffic stop must be audited and signed off on, no one is going to look at those videos. And if there is that rule, it just shows how corrupt they are by not prosecuting and needing public videos for anyone to get in trouble.
Most of the cops are probably doing their job, either to be good or because they are afraid of internal affairs. But for that small percentage who are bad, they can do a lot of damage. Also unchecked power corrupts. In Argentina the cops in the Buenos Aires province (outside the Capital Federal) are pretty unchecked, if you get pulled over for a speeding ticket, they outright ask for a bribe, which you pay and go on your way. Both the cops and the citizens expect this. I'm a few of those officers joined to "protect and serve", but now they only serve their own wallets. Also no one listens to the traffic laws that much as a result... That is an extreme example, but still you need someone to audit/check up on power. Remember the FBI as well. They got those national security letters and started over using them. They were audited and found out... But as far as I know nothing was really done. If they weren't audited, we never would have known they were abusing them...
Maybe they made an exception because there would be too much of an outrage. But maybe not because on the news I saw a lot of people sleeping at the airport...
But when traveling at least with American and Continental, in the event of weather (thunderstorms, etc..) if you miss a connection and the flight is not available until the next day, they will not pay for accommodations. Also they will not let you change to a different airline's flight without a cancellation fee, even if it is sooner.
Also, if a flight left the source airport 3 hours late, and encountered a few thunderstorms on the way that they had to go around, they will use the weather excuse. Even if the flight time was normal or the flight time was 20 minutes over but you were an hour late for your connection... They use it as a free pass....
But is he actually writing his own, or using existing solutions (Map reduce/Cassandra/etc.). It doesn't take a degree to learn how to use most existing solutions. And in fact most undergrad programs don't teach those at all. In grad school I got some of those solutions in a special topics class, they were not part of the syllabus.
Anyway a good tutorial and some API docs are enough to use most of these things. No need for a degree for that. To invent your own, it would be good to read all the research papers so you know what other people did...but this is more a researcher PhD type task than a software development task. Even reading a paper to implement an existing one is kind of beyond most software developers... But the average developer is not creating databases/nosql solutions/web servers/operating systems, they are using them to solve business problems....
And that's all well and good. But the university degree is not an apprenticeship, so you don't need one to be a computer programmer. It helps you to learn computer science, not programming.... And it is possible to be a good programmer without one.
It definitely helps for research or in helping you to know what is out there (especially a graduate level degree). But for the average hook up my front end to a database job it is way overkill... Or even read the database/file and do computations.
My point is that you don't need a degree to be a good programmer. And a degree is not a guarantee of a good programmer, because in fact a computer science degree teaches computer science, not programming....
A college degree in itself is not a bad thing to have because it does show some dedication to stick it out 4 years and get your degree. It also exposes you to a lot of other subjects giving you more experience learning things outside your comfort zone. Which basically most businesses are. But it is no guarantee of a good programmer and someone shouldn't be shut out for a lack of a degree....
Also sometimes people with degrees in different areas excel as programmers. At one place I interned at, they found they really liked music majors as programmers...
But an aside, most college courses seem to be reading on some subject, thinking about it, and then spitting out work via mathematical problems or essays (including short answer questions as essays) which in general is a good skill to have. Many people have the ability to take in knowledge, think about it, and then spit out an analysis right out of high school....
I would say it is entirely possible that these high school kids would make great programmers. And yes the company gets them at a discount, trains them up. But for the kids who are good, any company that won't hire them because they don't have a college degree is stupid. Without talking to them, maybe even seeing some code, you can't tell of a candidate is good or not (whether they have a degree or not). The guy from college could be a lousy programmer, the guy from high school could be great, the guy with a bachelors could be better than the guy with the PhD (the high school as well). In fact some PhD candidates are lousy programmers in my classes who free load on the group projects....... But it's not because all PhD people suck, because some of them are just great. Each person must be judged individually....
From what I have seen most thesis are much more theoretical than a typical software developer job. Even if they relate to practical concerns in the industry, they are things that a researcher would do, not a developer. Or they can be a survey of existing techniques, which is something that a software developer would do when making a choice as to which way to go. But the thesis itself does not seem to teach maintenance, decomposition, design, etc....
There is also the project route, and the project while a bigger piece of software does not teach good coding. You just need to slap something together to get it to work. Most people I see do some type of web store. One guy did a software for a clinic which had search methods using information retrieval methods. It wasn't that complicated though.
In reality you need a class that takes some huge well written system and has you adding enhancements with unit tests. Or some class that examines a bunch of existing well written software to learn the various techniques. Probably the best class would be a balance of examining existing software and making small enhancements. But that is more the domain of a technical school than a university. It's almost like you need an apprenticeship for a year or two... Or maybe an open source project.
Compilers is not taught at my current university at all because it is not considered a hot research area. Databases is required where I am for my masters (well a 3 or 4 courses thing), but this is not standard. As an undergrad it wasn't required. Not getting a compiler course really ticks me off.... Also architecture is not offered either because the 3/4 courses that almost everyone picks are Operating Systems, Networking, Databases because Architecture is hard.... Most programs I see require some type of Networking, Architecture, and either Databases or Programming Languages as the core. Oh and mine also requires Algorithms, no 3/4 you must pass that class. Except for one program Algorithms was required as well.
Many professors just run the program and grade the output. Or they just expect a demo in class. In an intro class the programs are so small that the professor reads the whole thing, but basically they amount to one or two sub programs. There is no maintainability/commenting on the program, basically you learn to solve problems with programming languages, not to be a programmer......
It seems lately the BSc-MSc is all theoretical and not practical at all. The first job seems to be where you get the practical stuff...unless you get unlucky...
It's true that there are changes like that. But the average undergrad course does not hit them. Neither does the average graduate program. That's why Intel has these programs to contribute money for universities to start teaching courses on Parallel programming.
Anyway the educational programs have not caught up. I checked several graduate programs and looked at their undergraduate programs. Algorithms/Discrete math are exactly the same. My graduate program had an advanced algorithms class as well, but the newest thing there was Page Rank (almost 10 years old). And that was only because the professor had a Google fetish.... Operating Systems is about the same. It ignores particulars based on multi-core/multi-threading and focuses on the normal layers/semaphores/etc... Computer Architecture in my school and the other ones I looked at does not teach Parallel architectures, it still focuses on instruction level parallelism. A few other schools I looked at had this the case too. Undergrad it looks like computer organization is the same, mostly focusing on number systems, things like computer arithmetic, and digital systems design via the gates/flip flops. It could also be that at an undergrad and even a graduate level they feel parallel programming is not that important... Or typically they are just behind and it will be another 10 years for many universities to catch up...
But anyway Parallel programming is not that new. A multi-core processor is like a shared memory multi-processor machine which there have been tree structured computations and things for a long time. And java synchronization primitives are not unlike normal operating system critical sections and semaphores....
In a research class we did play with Hadoop (Map Reduce and Pig Latin) which is for clusters. But it also uses multiple cores because it creates multiple processes. And that area of creating libraries to simplify parallelism is still way open....
Show me an average college graduate (bachelors) who can do that. This seems like the type of task for a researcher PhD most likely.....
I don't know what universities you have seen. But the ones I have seen do not teach you documenting code or how to organize it. Most people's projects are spaghetti code or worse. The actual good programming practices seem to come from your first employer if you get lucky....
Anyway I am now on the fence about a PhD. But overall it won't make me a better programmer. It will make me a researcher. And in fact many companies won't hire a PhD to be a programmer because they will see them as overqualified (in fact my work mate who is almost done with his has mentioned he wouldn't hire a PhD to work in his team).
As far as me, college basically added some advanced math and a broad overview of computer science. But do I actually use any of that on the job? No. Basically I use high school algebra and the same basic loop structures you could get from Teach yourself C# in 20 days or something. I taught myself SQL as a freshman in college for a summer internship, and in both my undergrad and graduate database jobs the SQL was much less advanced than what I did on my own. In college I have not met a program that I couldn't do. They mostly consist of stringing together a few algorithms to do this or that based on concepts learned in class. On the job you don't even code the algorithms, you use the collection libraries (C++/Java/C#/Almost all the scripting languages have these...). Most of it is about taking the business rules, and converting it to code with loops, conditionals, etc... I could do all this after high school (because I learned C on my own to fiddle with a MUD).....
Anyway once I finish my Masters I hope to find one of those few jobs that actually uses at least a Bachelors level of computer science education..... In some places there are a few senior guys who do the interesting work and then all the normal guys end up using their libraries... In others it is all just business applications to link to files/database and it is all about the business rules. And then there is Google where the company is on the bleeding edge in many things... Or even Microsoft, although I think the windows kernel would be a nightmare to touch... And office as well.
Google's index is not a normal job. Also an undergrad will typically not cover Kleinberg HITs, Page Rank, or even Parallel Algorithms. But the actual design of these systems is done by Researchers, not developers. They just implement/architect it. But actually inventing page rank/map reduce/google file system were done by Researchers who later wrote papers on it. The developers just implement it. Reading these same papers, other developers created Hadoop. Basically creating all that stuff is beyond most of us. Implementing it requires good developers too, but the average developer won't be implementing it.
The average developer will read the tutorials/api for hadoop and then just use it. No college degree/advanced mathematics/distributed systems knowledge required. And that's the point. The average developer is not creating an operating system, just using the system calls (which don't need a college degree to understand) if even that. The average developer is not creating a compiler. The average developer is not implementing a network protocol (in fact mostly the average developer is not even using sockets but libraries built on top of them to abstract away the socket layer).
I think you'd be surprised how much a high schooler can learn. In fact most people here probably knew the efficiency of a hash table versus a binary tree lookup versus a linear list look up versus a binary search on an array before college....
i'm not saying college is completely useless, but a lot of people have the knowledge necessary before a job. The average programmer is not writing their own data structures, they are using the STL/Java library. They just need to know the relative efficiencies. The average programmer is not writing some type of distributed transactional system, they are just hooking up a web page to a database or a number crunching program to a database. And quite often they are just working on layers that already read the data from the source. So it all comes down to looping, control structures, etc. basically just turning instructions into computer code....
Also some people are just crazy smart. My friend eric could always out program me. He failed out of the same school I went to. But he can still out program me. Also http://en.wikipedia.org/wiki/Audrey_Tang doesn't have a college degree (or even a high school degree), but some of her work is amazing. Anyone who can write a Perl interpreter in Haskell is definitely good enough for whatever programming project you have....
No, that's the job of high school/grade school to socialize you. College is supposed to educate you for a career. But there are many careers which just require vocational training (ie plumber, electrician) and apprenticeships. It may be overkill for a computer programmer. But for a computer science researcher, college is appropriate.
I gotta disagree a little bit. A lot of a college CS program is not outdated in 5 years. Consequently a lot of it does not apply at all to most jobs....
Operating Systems -- The underlying principles are mostly the same
Algorithms -- New ones are constantly being discovered but the most popular ones have been the same for 30+ years mostly (the undergrad level ones are generally not newer things)...
Networking -- Some changes with wireless but most of the TCP/IP protocol that is taught in undergrad courses is the same
Discrete Math -- Again mostly the same for the past 30 years
Computer Organization -- Mostly this is the same (assuming the course on digital system design/k-maps/binary number systems/etc...)
Some Intro Programming Class -- The underlying concepts apply, although the specific language is changing all the time. Although they are not that different...C#/Java/C++ all imperative languages
The rest is all math (Calculus...not changing, Linear Algebra, etc...) and electives (Compilers, Databases, etc.). A lot of the electives are mostly the same at an undergraduate level. Although there do seem to be more fad of the minute classes, ie iPhone game design or state of the art classes...ie Video Game Design..... But they are in the minority and in 1998-2002 when I was an undergrad they didn't exist...in my school (today they do)
What seems to change hourly are the various libraries/programming language of the day/framework of the day. And my college didn't teach any of those. It focused on the core CS concepts, not specific technologies. Although we did use Oracle/MySQL a bit in database class, we did not learn Oracle/MySQL, we just used it as a vehicle for expressing concepts in class. Programming assignments were mostly straight forward algorithm implementations which just used programming concepts and easily can be ported into any language. We didn't get crazy into C++/Java specific things.
But one of my complaints has been that I really don't use any of that... I use some common sense things from algorithms about linked lists/arrays/hash tables and the various orders of magnitudes of common applications, but mostly I use libraries that implement them. And I knew that stuff before algorithms class. Mostly in business program you are using the STL/Java Library/C# libraries and all the collections are implemented. For building a quick GUI to a database it really doesn't take the advanced math/concepts of a CS program.... Admittedly if you were building video games or working for Google then sure computer architecture and advanced knowledge comes in handy. In a Google phone interview they took everything into consideration, the memory hierarchy, the swap space, disk access times, etc... With a job like that it is good to know the PC to wring out performance... Or video game programming because games are constantly pushing the envelope. But those are the exception, not the rule.
Where I have failed and a lot of companies are failing is that for the first job it is important for a lot of grads to learn how to organize big programs and program with an eye towards maintenance. That is where you really learn how to program (or working on an open source project). Colleges don't teach that. Most assignments are short, maybe 1,000 lines of code or less. Also you usually don't need to maintain them, so you can throw a bunch of garbage together that runs correctly and then wash your hands of it. Implementing a Hash Table, or maybe your own database class that writes to a file is not the same thing as taking over some 10,000 line accounting package....
Well you have to buy rights to sell e-books in batches and reports of the # of sold books need to be sent to the publisher/wholesalers. And the system needs to be audited by an external third party.
Basically it's just like accounting for money....
The publishers are being very greedy with e-books. In reality if they priced the e-books the same as paperbacks I would probably still buy them since the e-books save shelf space (which is at a premium). If they were fair and when a book first comes out, they price the ebook at slightly less than the hard cover (since the physical cost savings are more with a hardcover than a paperback, maybe even $5 less or so). Then when the paper-back is released, the e-book should go down to at least the cost of the paperback. A hard cover does cost more than a paperback due to materials, but usually they charge way more than the price of materials. Then they keep the higher profit margin for a few months before coming out with the paperback with less profit margin. I think that is okay as long as they are fair with the e-books.
Currently Barnes and Noble said that I don't get a membership discount on e-books because the publishers set a price. Also there are no sales, etc.. And in many cases the publishers are totally ripping us off. Several textbooks I got have an e-book at $60 while I found a soft cover for $40... Not that I would buy e-textbooks yet because e-ink is not the right platform for a textbook. Still Amazon was a bit crazy before selling every e-book for $5, it made publishers not want to come out with their latest offerings. I don't see why e-books cannot just be sold like normal books. Publishers wholesale them to retailers who then sell them to the customers for a different price. No $5 special deal. Sometimes bookstores run discounts on e-ink and Barnes and Noble applies membership discounts to e-books the same way it applies them to physical books. I didn't like the amazon $5 model because publishers wouldn't release a lot of works in e-book format or would release many months later. I don't like the apple model because the publishers are screwing us. I would prefer the old model applied to e-books. But publishers need to be realistic. You can't charge more for the e-book than your cheapest physical book. If the paperback is not out, then charge a bit less than your hardcover. Once the paperback comes out, you should charge a bit less than the paperback. In reality I might even pay if the hardcover only is out and the price is the same or the paperback only is out and the price is the same. But since there are less printing/binding costs, there should probably be a discount compared to paperbacks and even more of one compared to hardcover. Although most of the sometimes $10 or $20 difference in price is not physical materials...it is just profit margin. Publishers can try to keep the profit margin. But if printing costs are $2 for paperback and $5 for hard cover, they could sell an e-book for $5 less than the hard cover and $2 less than the paperback. it's not like they were pocketing that anyway....
And on textbooks the physical books are over priced. Hopefully some enterprising teachers will make cheaper e-books (since they no longer need as much of an investment) and we can rip text books out of the greedy publishers. My personal favorite is how the Calculus books have 10 editions...Calculus hasn't changed that much in over a hundred years.... Mostly they just change the problem sets so that you need the new copy of the book to do the homework. People like that deserve to go out of business. And if e-books spell the way to wrestle control from publishers then all the better....
I'm 30, and I sort of get phones. But I get the eventual dream which is the phone is the next miniaturization of computer technology (similar to desktops and then laptops). I can imagine the possibilities in the future. Taking a picture of that strange rash and sending it to your doctor who responds with what it is and a prescription (along with a micro-payment). Using the phone to unlock your car, or even remotely start it. Using the phone to turn the lights on your house on, or even to turn up the heat before getting home. The phone can basically be a micro computer or a universal remote. One of the best things is that you can always have them with you so there is no telling the full extend of things that they can help you with. Even a laptop is a challenge to lug everywhere....
I hate typing on the phone...But I get the text message concept...it is similar to ICQ/AOL/MSN were/are. Still it's not for me. I come from the days of Livejournal, ICQ, MUDs, etc... But I can see why people like to message. And why people like to break up over a text message.... Well first there were complaints that breaking up over a phone call was cowardly. Then e-mail came along and suddenly a phone call was brave. Now there are text messages.... The other poster responded with many other advantages about ways to talk without disturbing people, and ways to convey information without starting a conversation.
I would say giving an unsupervised laptop is a mistake. Because parents need to keep track of what their kids are doing. Otherwise you also introduce liability. If I kid is on some yet unheard of social network (because I'm sure myspace/facebook will all be blocked) and meets a predator, is the school legally liable for not watching them? what if they do it during school hours, what if they do it during home hours? What if they download software/movies/etc and are sued. Is the school liable if they do it on school property (I would argue if on school property they are liable, particularly with a minor)?
I don't think a laptop is a right, nor should it be a babysitter to substitute for instruction. Also I'm sure people will steal/break/etc. them on purpose. Every school has the bully, the criminal, the drug addict, basically all sorts of scum.... A laptop would fetch good drug money for the addict. Even if I had said laptop when I was 16 or 17, I wouldn't want to bring it to school.
What will happen is that the school will go on a censorship binge after catching people looking at porn, downloading music, etc.. Then kids will get in trouble who would have been fine if they never had the laptop in the first place.... Then people will circumvent/resent the filters, the administration will race to get more security, and even less work will get done...
Even worse, teachers will try to force a laptop into class, otherwise the parents will jump at the expense. Take math class....does a laptop really help with Algebra? Maybe at more advanced levels it could (none of my college math classes would benefit greatly from a laptop [although numerical analysis would have if you didn't have a good calculator]), but not for the fundamentals. A class is full enough just teaching the fundamentals. Similar with most other classes. If you try to force a laptop in, you are going to do it at the expense of something else in many cases.
That's exactly why they shouldn't be using laptops, too many distractions. I see it in grad school as well, people on laptops surfing the web, etc... and not paying attention... Except for one dude who was chatting with someone on msn, looking at jewelry on the web, and he answered an advanced question from the professor... But he's a super genius.... For doing reading/writing/math you don't need a laptop. In other classes it could help (mostly where you need to take a bunch of notes, or the class is at a computer lab [programming, typing, business software]), but it could also be a distraction, especially among teenagers who like to play games all the time... It's probably better to have them paying more attention in class...
I don't want to limit bit rate, just prioritize people who haven't yet met their cap above you. If the network is not congested you should get full capacity.... You might limit the bit rate of packets getting the highest priority, but the rest should be delivered to the lower priority queue and still get through....
Some people throttle traffic by dropping the occasional TCP packet to cause TCP to reset the sliding windows. This is not QOS.
I always say t-mobile seems the better of the wireless carriers. They always seemed to have better customer service, more reasonable prices (the fact that they only make you pay for a subsidized phone if you subsidize one is also cool, ATT/Verizon make you constantly pay a phone subsidy even when the contract expires....). And the fact that they do this to eliminate overage charges shows that they are really pro consumer. Unfortunately their network is incomplete in many areas. Otherwise I would hop to them and not look back (at least until they start ripping me off like ATT/Verizon).
Even the Google Nexus one seems to have 3G problems with t-mobile. Most articles said the ATT one works way better than the t-mobile one without constantly switching to edge speeds. Otherwise even with the smaller t-mobile network I probably would have visited www.google.com/phone, bought my nexus one for $500 and signed up.
But the telecom network is not a public network. It is a private network. ATT could throttle you at each mobile switching center which would keep the traffic down on their network while it goes between the mobile switching centers to its internet gateway.
I don't know why they can't just use QOS on their own phone network. They could mark the first 2-5 GB of capacity as high priority, and then the rest low priority. With a fair queuing system, the average user who doesn't use that much data would not have the appearance of being slow, just the guy streaming netflix movies all the time. But with buffering, perhaps the play delay would compensate for the saturated network.
Still they do need to upgrade their network somewhat. I mean if it is the age of video and everyone is streaming video (we aren't quite there yet), they are going to need to increase the initial data cap as well as upgrade their network. Also if they get 25% more subscribers, they will need more network capacity. QOS is not the magic answer to never upgrade your network until 2020.....
Really, then how do you explain the cops being prosecuted based on you tube videos. Or how do you explain Rodney King, where the footage from the bystander was the proof of the brutal beating (although maybe there were no cameras in the cars in 1991, I'm not sure...). Still I recall news stories about cops being arrested based on cell phone video as well (although I'm too lazy to cite it now).
If internal affairs was really not asleep at the wheel, there would have been no need for youtube videos/bystander recordings/cell phone videos to be used because they would have spotted the issue and taken care of it.
Anyway, if internal affairs really does get all the videos, they are probably archived and stored without anyone looking at them (like many surveillance videos). In which case the average Joe the plumber will need to raise a big stink to get anyone to look (and even then they may not). Unless there is some type of rule that every traffic stop must be audited and signed off on, no one is going to look at those videos. And if there is that rule, it just shows how corrupt they are by not prosecuting and needing public videos for anyone to get in trouble.
Most of the cops are probably doing their job, either to be good or because they are afraid of internal affairs. But for that small percentage who are bad, they can do a lot of damage. Also unchecked power corrupts. In Argentina the cops in the Buenos Aires province (outside the Capital Federal) are pretty unchecked, if you get pulled over for a speeding ticket, they outright ask for a bribe, which you pay and go on your way. Both the cops and the citizens expect this. I'm a few of those officers joined to "protect and serve", but now they only serve their own wallets. Also no one listens to the traffic laws that much as a result... That is an extreme example, but still you need someone to audit/check up on power. Remember the FBI as well. They got those national security letters and started over using them. They were audited and found out... But as far as I know nothing was really done. If they weren't audited, we never would have known they were abusing them...
Maybe they made an exception because there would be too much of an outrage. But maybe not because on the news I saw a lot of people sleeping at the airport...
But when traveling at least with American and Continental, in the event of weather (thunderstorms, etc..) if you miss a connection and the flight is not available until the next day, they will not pay for accommodations. Also they will not let you change to a different airline's flight without a cancellation fee, even if it is sooner.
Also, if a flight left the source airport 3 hours late, and encountered a few thunderstorms on the way that they had to go around, they will use the weather excuse. Even if the flight time was normal or the flight time was 20 minutes over but you were an hour late for your connection... They use it as a free pass....