I graduated from a USA university with a combined major in math and computer science. The degree got me an interview and job with IBM. At that time IBM would hire only college graduates.
I was programming before college. In college a single course taught about linked lists, recursion, data structures, not to use GOTO's, etc. And we had to write programs that produced the results the instructor wanted, on a DEC PDP-10.
All the rest of the computer courses were mathmatical theory. How to prove search algorithms were order nlogn, induction proofs, number theory, autotoma theory, proofs, proofs and more proofs! Many of the graduate level computer courses were also graduate level mathmatics courses.
Besides knowing that an nLogn search algorithm was a good thing, non of the other theory helped me as a programmer.
As many others have posted, no amount of learning can guarantee or create a great programmer. You either have it or you don't. And many very bright people don't. If you don't, you may, through hard work and learning become an average, or better than average programmer.
Can a high school hacker be a better programmer than a college graduate? Absolutely! (Bill Gates never finished college.) Will he get the job interview?
I don't know if I would agree with you. At the time that I started getting paid to program, a university degree didn't necessarily get you the interview. Like a lot of people of my vintage, I left university after two years because the job offer was just too compelling (and income versus starvation as a student was also attractive).
"My vintage" means early-70s. I actually learned to program in 1969 while still a high school student (FORTRAN IV on an IBM 360). I did some pick up work during university, but got the interview (and the job) in 1973.
My university courses were better than those you cite -- we got real programming (although a fair amount of math was thrown in). However, we got machine theory, Boolean algebra, Assembler, FORTRAN, COBOL, and at least a fast view of other languages (i.e. this is what it looks like so you'll recognize it on sight).
I didn't actually get into C/C++ until this past decade. I took a couple of evening courses to get object-oriented programming in C++ down pat, but all of my Windows programming knowledge was self-taught. Fortunately, programmers of my ilk were taught to read other people's code and to use documentation, so slogging through it wasn't impossible by any stretch.
Getting to the level I am today - 'code monkey' has been a right old spaghetti route
I started with basic on a Sinclair Spectrum and after a few silly programs and the usual maze games found basic limiting.
Moved on to an Amstrad 6128 which basiclly got me through 1st year of University doing Electronics.
Was taught Fortran77 at university (which was the first taught course and never used again)
Had to learn Forth (eek primitive) for a summer project (and again never used again)
Started on a postgrad course where I was taught Occam (now that was a parallel programming language - but was very basic)
Went on to do post grad research where I used Occam (this time in earnest) and Pascal.
I ditched Pascal after 3 months in favour of C (went upstairs to do the com-sci courses and regretted it (took me back 3 months as they wanted us to learn Prolog first so by the time we got to C I already knew it and more).
Self taught C++ while I started using OWL for the GUIs for my Occam driven hardware, and also moved onto parallel C. (When designing multthreaded apps I still use Occam constructs in the design phase as it makes things so much easier)
Started 'real' work and moved onto MFC (their quote was 'it's by Microsoft and therefore must be good' - sigh) - discovered CodeGuru (my saviours at the time)
Self taught myself COM+ATL, COM was so much easier to start once it was wrapped semi-sensibly.
And then onto WTL.
along the way I've dabbled in Visual Basic and all the browse scripting langauages and well as installer scripting languages
and now I'll probably have to learn C# and all the new stuff - If I ever find a company who gives training pro -actively - the only courses I have been on are those which are booked after I have done the hard work - I'll sing a merry song
There is only one way: Trial and error (and the help files). I started programming by literally opening VC++ 6 and starting typing (using the hello-world app wizard). I typed what I thought was correct, and then dealt with the errors.
An 'average' programming session for me is still about 20% dev studio, 80% MSDN.
I glad to learn that there are actually people out there who have been at this insanity for as long as I have. I started peeking and poking on a Commodore 64. Still, I will have to admit that the all around best programmers I know are the ones who went to college and paid attention. Most guys I know who are self taught are great programmers but are very bad when it comes to managing the full life cycle process.
I started out on a TI994A when I was about 7, but only
could do the book copying and basic word game type stuff.
Then went to the Commodore 64... And figured out more stuff,
like graphics and stuff as well as writing stuff on my buddies PC Jr. when I hung out over there.
I did the old Apple II stuff at school and when I visited my cousin. And finally, I took the pascal programming classes in our rather small high school. By the end of the class I knew way more than the teacher..
I then went to a fairly small engineering school and
graduated with a bachelor's in CS. I did have more luck
than some of the other guys, since a couple of the professors actually knew a lot, and could convey it... But
there were still quite a few of the boneheads their that didnt know squat after they graduated...
So yeah, I saw some of the college problems mentioned earlier, but then I have seen people now at work,
that are completely self-taught, and show it.. Lacking some
fundamental organizational and structural ideas, I've seen
some pretty twisted spaghetti code, that really wouldnt have to be....
I voted for college, because that's where I learned about 8 languages, OOP, and design. Adding a lil structure to my programming, I see now is very important...
Since then, I have learned a heck of a lot more on the job, and on my own... Most of the stuff we actually use on a daily basis!! So... this could have gotten the nod!!
Im thinking I could have probably checked at least 4 of
the answers.. As Im sure a lot of us could...
I agree that check boxes rather than radio buttons would have better for the GUI of this particular survey.
I majored in Aerospace engineering, but took about 30 hours of computer science. After a time in the Air Force during which I pursued self-study/hobby type programming projects on my own time I got out and decided to try an become a professional programmer.
I took one semester of coursework at a college which was mildly helpful, and then got hired at an internet startup in 1995. Since then I've had to work really hard to stay with the state-of-the art. I've only had one paid course (Don Box's com course).
I guess there are jobs where you can just sit back and be spoon feed everything you need to know. I've never had one like that myself.
Luckily I had an older uncle who was into computers, and he gave me all his old hardware when he upgraded his stuff. When I was around 9-10 I got an old Timex Sinclair 'puter, but I didn't understand enough back then to do more than type in programs from the manual.
In 4th grade I took an after-school class in BASIC on Apple //e's, and from then on I dabbled in BASIC on a VIC-20, then C=64, then C=128. I only really got into programming on my own (as opposed to typing in stuff from mags) when I got the 128 in high school.
I took a series of programming classes at UCLA thru the math department. The first two were in Pascal. AAAARRRGH! Finally by the 3rd course (the last in that series) they got to C and C++. That's when I really started enjoying programming, when I got to use a real language.
After that series of 3 classes, I continued doing little projects on my own (eg, a spell checker I used to check over essays for my French classes).
So I guess I am mostly self-taught, although I never would've gotten to C if it weren't for that class (even thru college I was still using my C=128; I had no clue about PCs or Macs).
At 12 I wrote a program in gwBasic to keep track of my batting average. As a sophomore in highschool I wrote some Pascal programs to solve all my matrix-based math problems from math class. That Christmas I got TurboC++ and began writing Windows programs (first API, then OWL 1.0). I kept up with the OWL coding (I still love OWL...), and by the middle of my senior year in highschool I was making a decent amount of money selling code as shareware. I learned to program because I genuinely liked it. I'm sure many programmers who frequent this site have similar backgrounds.
Now, I'm a couple of months away from graduating with a computer science degree, which is why I decided to weigh in on this poll. My experience with computer science in an academic setting has been less than satisfactory - mostly because I expected to be with studying with people who shared my enthusiasm, ability, and eagerness to learn. Unfortunately, many of those who are now as close to graduation as I am are dolts. They aren't going to be very good programmers - not because they aren't smart, not because they didn't try, not because they don't care. They're just not good programmers. I spent two hours yesterday explaining to my senior design group how to respond to button presses(!). After five years at a pretty damn good college they still don't get it.
This leads me to beleive that "programming", as a general description of solving problems using computers, is not something that can really be taught. By analogy, I mean that just because you teach someone latin doesn't mean they can write like a scholar... Good programmers, I believe, are always self-taught, because what really makes a programmer "good" is creativity, which simply can't be taught.
Colleges can serve to refine the talents of good programmers (or people that have the innate ability to be such), but they won't turn plain ol' smart people into good programmers.
Does anyone out there have better experiences with (undergraduate) college programs?
Georgia Institute of Technology
"Lisa, just because I don't care doesn't mean I'm not listening..." - Homer
Right from the start, till the last word, I agree with you!
Here is a little addition from my story:
A member of my family is in the mids of the 3rd year in CS university somewhere on this earth and guess what...
Knowing that I know programming and can help in solving some of their coding problems, I was asked for help in the project they had to give by just 3 days left to deadline!
(the actuall time was about 3 months to present), so I accepted and started talking to them about what they should do and what the already knew.
Next day I got a call at home from one of the 4 guys in the project and were asked this question over the PHONE!
HOW CAN I COPY THE FILES FROM MY HARD TO THE FLOPPY!?!?!?
knowing that he has windows98 already on his PC!?
Anyways, I just took a deep breath and eased myself down I replied to him how to do that!
O.K., hear this one MAN!
Next day, they are together to finish the presentatin and called me and askd:
HOW CAN WE PRINT THE SCREEN SHOTS OF OUR APPLICATIONS?!?!
Being said all above, I don't know if I know too much OR are they really NOT GOING TO BE PROGRAMMERS EVER!?!?
So why sould they have chosen to study CS in the first, anyways!
No personal feeling against any one in CS Univs, though.
Me started programming with C coz me loves 3D CG too muss!
Anyway, for me, going through uni was a good experience as that was where I really got focus in my programming. Before uni, my programming had been basic and machine code (some C=64, some Amiga), and I guess my mind was ready to take in Pascal and then C/C++ because I knew what the problems associated with NOT using them were.
Same when it came to algorithm class, and seeing the beauty of a linked list, or a binary tree. Because I knew what the problems were if you didn't use them.
So, possibly the reason the people don't end up any good at the end of uni is not because there is any inherent "programming ability" (anyway, Darwin might have some trouble explaining it) but just because they didn't spend the ludicrous amount of hours that 'we' had spent using computers before getting to university. Time that the university system can not (and probably should not) ever attempt to duplicate.
But, after saying this, I think that universities should possibly focus on two kinds of programmers. Just like streaming kids in high school for different levels of maths (ie. all kids should know some maths, just some more that others) And, before you pipe up saying something about maths abilities being inherent (and maybe they are to some degree), but I know I was good at maths not because of the time I spent in the classroom (or necessarily because of any inherent ability), but because of time spent outside the classroom, with my dad ([at the racetrack] "how does betting on the horses work dad?", [at the supermarket] "son, if we bought 3 of this product, how much would it cost?")
Anyway, I think there is room for two streams of programmers (at least) emerging from uni - from, ahem, how can I say this politely, the "code monkey" to the more advanced. The more advanced finding rolls such as research, but the "code monkey" role is the one who actually gets most of the real work done. (well, "real work" as in what is actually used, but they wouldn't have been able to create it without the research (and libaries) created by others [ie. take VB as an example (not that this is true for all VBers, but I would say the majority])
The problem with the "researcher class" (this is sounding more 'Brave New World' the more I type) is that they are unfortunatly usually very poor at meeting deadlines, and/or being happy with the product they should be shipping. Ending up changing simple algortithms to complex ones "because they are better" (which they probably are) but often (very often!) unnecessary. In this case I site the history MS as an example, they didn't always ship the most robust, or least memory hungry, or fastest code, but they were constantly shipping stuff because they knew that there is no "perfect" product. [This still acts as a knife in my heart, as I always WANT to ship the best, but commercial reality says otherwise].
I posted a poll suggestion very similar to this, perhaps it's modified abit from what I had in mind.
I was basically wondering how many people started a career in something other than programming, and
now ended up in it. For example, I was curious as to the different degrees people achieved outside of
the computer sciences. I have always loved the sciences, but mainly natural science or medical science, but
my adventures in programming started in middle school since the old C64, Apple IIs, using plain old basic.
Yeah I know, I'm old! I loved it. But it had always been a hobby and nothing more.
I went through hell to get my medical degree like I was 'supposed to' according to what was expected of me.
I love medicine though, and hope to combine it with computer science so I could have best of both. I took
some time off to take some programming courses and just fell in love with it, and have decided to devote my
time to it since then. I'm sure everyone's experience with an undergrad program would differ of course, but
for me it's a certain few professors who made the difference for me between loving or hating programming.
Since I was taking a rather short hiatus from my career to attend courses at the university, I piled on my
courses at the same time, from C++ and eventually VC++/MFC, VB, Java, to data structures. I kept up with
websites such as this great resource to enhance my learning, as well as text books, and misc periodicals.
I'm mostly self-taught I would say now, because after 3 semesters I ran out of courses I could take here
locally, which is kind of disappointing. Even though we're probably mostly self-taught, the environment and
interactions in an academic surrounding have always helped me personally because of the exchange of ideas,
others' knowledge, etc.
I read most of the other responses in here, and I agree with just about everyone in that it's something you
have to love doing, and in the blood. It's a passion you need to have in order to succeed, just like anything
else you do I believe. It's a combination of talent, creativity, smarts, among others. I agree with Russell in
that I have encountered many people who have been a programmer in the industry or who are close to their
degrees, yet who have no clue it seems. Some of these people seem to be such concrete thinkers and have
a difficult time grasping the abstract, lack the ability to problem solve, or something as simple as using the
resources available to extrapolate useful information. And I hate to say this, but many were just plain lazy
and wanted the easy way out (vs simplistic), unwilling to research the solutions for themselves, or
experimenting. I'm not trying to be grandiose but I had seriously wondered how they got where they are,
and felt I knew more, especially given my professional experience and background was other than computers.
Therefore I think it does take a special talent and passion, one that can't just be learned.
Well, that's my 2 cents worth, sorry if I bored anyone.
ps. I love this site, Chris Maunder and all the contributors here are just fantastic!! I for one, am grateful for
their time and devotion to help others!
Last Visit: 31-Dec-99 18:00 Last Update: 3-Sep-15 3:17