I mean, is there a list out there for astronomy students that includes, grind your own lenses?
I mean, is there a list out there for astronomy students that includes, grind your own lenses?
Two example from my career:
I spent two summers working construction on job sites. Running pipe, cutting beams, and building scaffolding are skills I likely will never use again professionally. However, it gave me insight into what people who are directly affected by my work experience. I am now extremely careful to consider what the end users experience. Maybe moving the bolt holes from position X to Y will add 4 hours to my workload, but it will save the installer 30 minutes on every one they put in.
I started in computer engineering. I didn't go very far but thanks to those 2 semesters, my programming skills are miles ahead of many of my peers (although they are still quite primitive). This gives me the ability to write scripts/programs to create functionality that is nonexistant it my field. Sometimes it allows me to work projects that would otherwise be impossible, sometimes it just saves myself or others hours or even days.
I hope this doesn't come across as boastful, my skillset is woefully inadequate in many areas which my peers do have experience.
Neither of those skills were touched on in my engineering curriculum, but learning them made me a much better engineer. I would imagine many of these items, while not "core computer science", would make a CS grad better and more marketable.
EDIT: I also think astronomy students should grind their own lenses and mirrors, so that they can understand the practical difficulties of building and operating a telescope.
In the meantime, a good CS program is a perfectly reasonable foundation for a career in systems and networks. I ran through the gamut of logic, basic logic circuits, assembly, algorithms, data structures, complexity and then features of various languages, operating system structures, and finally graphs, automata, networks and projects in all of the above. All of that is a solid base. As with anything else worth doing, you then need to build on that base with the tools of the day.
I suspect the overall high failure rate of IT projects is attributable to "people with two year associates degrees in information systems or something". I'd rather hire an autodidact with a degree in math, physics or engineering.
yawn yeah, yeah, I know that going to yale makes you better than I am.
Kids today. No respect for the trades.
Everyone choosing a major out of highschool is encouraged to go in to something highly theoretical or impractical. I think it's a show of wealth. I mean, if you get a degree in fine arts or something, well, you had better have a rich uncle or something, right?
Granted, the fact that every SysAdmin education program I've seen was decidedly second rate doesn't help. /good/ sysadmin education programs would help a lot. Really, there is no excuse for the lack of good SysAdmin programs. *NIX is older than I am. It's not like the field changes faster than anything else to do with computers.
I think you have similar problems educating people as computer scientists and then expecting them to work as software engineers. We need a lot more software engineers than we need computer scientists; and if I need a program written, sure, I'd prefer an excellent software engineer who was also a computer scientist, but if I had to make the choice, I'd choose a software engineer who was not a computer scientist over a computer scientist who was not a software engineer for 95% of all projects. But what kind of high school kid choosing a major would choose to be a lowly Engineer instead of a Scientist?
And perhaps they shouldn't. But at the same time, vocational schools are still seen as having less prestige (and, thus leading to careers making less money) in the U.S. It's just an endless dilemma.
Except for a few vocations that have managed to get themselves tagged as "professions". There are a number of fields where students are supposedly taught to think in general-purpose undergraduate programs, and then taught the minutia of their chosen field in "professional school". e.g. law school, medical school, and a growing list of professional doctoral programs in fields like Psychology, Occupational Therapy, Pharmacy, Optometry, Nursing, Education, etc.
Maybe someday we'll have a "Doctor of Network Configuration" or a "Doctor of Database Schema Design"? (I'm not sure if I'm kidding or not)
I don't think that programmers should be sysadmins. There's room in the organization for both roles. However, I do think that programmers need to understand the practical difficulties in deploying and maintaining a running application. The more difficult it is to deploy an application, the greater the chances of someone screwing it up. By putting some forethought into how their application code is organized and by making some small investments in automation up-front, programmers can save endless headaches for themselves and the sysadmins supporting them when it comes time to go live.
So 0001 is definitely on my someday TODO list.
I'd also like to add:
10000 Learn to use source control, use it to store your new LAMP code on Github.
10001 Start studying design: web, graphic, type.It just sounds like ESR's advice, to be a great hacker you should be just like me...
I think it's better presented as a heuristic instead of an imperative (as it is here), though: "Use X until you can articulate a reason not to."
This is much better advice than telling someone to install LAMP.
10010 Work with at least one other person on a software project; bonus points if they are remote.— The Visual Display of Quantitative Information by E. R. Tufte;
— The Elements of Typographic Design by R. Bringhurst;
— The Design of Everyday Things by D. Norman;
— Don't Make Me Think! by S. Krug.
Beware of Tufte. Using charts to abduct engineers into the world of design is just dirty.
Has everyone forgotten that there's more to computer science than writing a CRUD app with a web interface?
EDIT: Also, the list is numbered in binary
The counter argument to this is that we often see computer engineers that lack a basic grasp of the importance of algorithmic complexity and theoretical folks who write terrible code. You have only to read some discussions on "JS performance" to see the ridiculous attention paid to making sure variables are local, when in almost all cases user programs are actually being slowed down by O(n^2) algorithms being used. Similarly, a lot of theoretical work takes a long time to make it into the "real world" because they are inaccessible to engineers (being written completely "in math"), and often when they do provide actual sample code for their work its written in a very sloppy way (from a "code organization" standpoint). It really would be ideal if you could have a major that covered both of these really well (and I'm sure there exist some that do, I obviously have not gone through every CS/CECS/EECS major in every university).
We also have Computer Engineering, which is a middle ground between Electrical Engineering and SoftEng. :)