I took Computer Systems Engineering - which is bits of Computer Science, Electronic Engineering and Systems Engineering all rolled into one handy bundle.
In my first year, like all freshmen at this particular university, we were required to take three different courses - which would be treated as prerequisites for the actual degree course for the remaining two years. This had the dual effects of allowing people to try out subjects that they hadn't previously considered, and ensuring that complete no-hopes didn't get through to the main courses.
So for the first year, I took Computer Science, Electronic Engineering, and Physics. But I quickly discovered that the Physics course was geared strongly towards people who would be taking the real Physics major course, and went at a furious pace - so I switched, with full credit, to the Physics Studies course, which was at a gentler pace but still decent science - concentrating on qualitative effects while still introducing the most important quantitative formulae. There was a third Elements of Physics course for liberal-arts types, which essentially bypassed all pretensions of quantitativity and had a high topical-essay count instead, but I said NO to that one!
The Electronics and Physics courses were fine - the people there were usually genuinely interested and able to at least vaguely keep up. The "real winners" showed up in Computing - which at the time was riding on the dot-com boom. People took this course because it was seen as easy money. They were in for a double shock there.
There were, of course, a few geniuses there, of both genders. I was among them, though not necessarily at the very top of the heap. I made a name for myself by going above and beyond the call of duty, and also by managing to network my computers (of which I had an increasingly impressive number, bought with not-beer money) well beyond the campus network rules.
Then there were a decent number of competent students. Most of them had at least tried a little programming before, so the concepts involved in Java were not totally alien. These people I could help by pointing out where their mistakes were, and sometimes why.
Then there were the people who simply hadn't considered that a computer could be programmable before. Who thought that being okay with Micro$oft Office was sufficient experience for a Computer Science course. A few weeks in, I leaned over the shoulder of a girl who already had half a dozen people trying to work out why her Java program wasn't compiling... to discover that she had paid absolutely no attention to the order of the statements. Most of the right statements were there, but there were declarations after use, computations performed in the wrong order, and probably inputs performed after outputs. As soon as I pointed out this fundamental flaw in thinking, everyone else realised what to do to continue fixing the problem.
I don't remember whether that girl finished the course or went on to the full course. There were just too many people to keep track of.
At the end of the first year we were assigned a group project for Computing. There were four people in my group, and I quickly determined that there were three people capable of programming, and conveniently there were three major modules of the program to be written. The fourth guy admitted he wasn't any good at programming, so I had him do testing and documentation instead. This was fine - it was just the first-year course, and I was willing to cut him some slack for putting some effort in and admitting his limitations.
I would do the code which glued everything together - this also allowed me to define the interfaces to the other parts. The second guy was assigned to do the database backend. This he did reasonably well - I found some problems but he was able to fix them. The third guy was assigned to do, essentially, the GUI - and we didn't hear a peep out of him for nearly a month. With deadlines approaching and all the other work we could usefully do done, I wrote the GUI myself.
By the time the third guy submitted his code, I - with some help from #2 - had extended the program to include several extra features (which was encouraged for this competitive project). But #3's code encompassed only the bare minimum features. Worse, it was buggy and didn't even compile. To save the project, I had to reject his contribution, and note that in the project report (which I also had to write, as the de-facto leader).
There was yet another complication: the official workstations had been upgraded to a beta version of the Java runtime. Which was spectacularly buggy in itself. About half the teams managed, with a lot of effort, to work around the bugs. I bypassed it by not using the official workstations to develop or demonstrate our work - instead, two PowerBooks and a 486 running Linux.
The 486 was predictably dog-slow, but sufficed for testing, while the PowerBooks were very fast (PowerPC models, and with one of the first JIT VMs) but trickier to get Java working on. One of the lab assistants said I should win just for making Java work on a Mac! I also helped some other teams by rescuing them from the buggy workstations and demonstrating their work on the PowerBooks.
In the event, my team didn't win. But we did get second place through sheer dint of effort - and the first-place project was noticeably better than ours. But the #3 guy had really held us back by not putting in the effort we expected of him, despite frequent reminders of the important parts of the schedule. Apparently, his mark was indeed reduced on the basis of my report.
The real winner I didn't meet until much later - in the third-year course. Remembering that we had been working with Java literally since Day One, and by then we'd studied many fundamental algorithms in the classroom... I was paired in the lab to study an extremely simple substitution cipher. Which we were supposed to implement. Being experienced, I just went ahead and wrote the code - just a half-dozen lines or so of simple C++ code.
And then I turned to my partner and said something like: "Since we're supposed to be working on this together, do you at least understand what I just wrote?"
He didn't.
"What about these three lines here? They actually do the substitution. Can you see how they work?"
Nope.
"Are you telling me that after two and a half years of supposedly using Java, you can't read this simple for-loop, which would make perfect sense in that language?"
Essentially, yes.
I don't know whether he got a good grade either. I hope he didn't.
In my first year, like all freshmen at this particular university, we were required to take three different courses - which would be treated as prerequisites for the actual degree course for the remaining two years. This had the dual effects of allowing people to try out subjects that they hadn't previously considered, and ensuring that complete no-hopes didn't get through to the main courses.
So for the first year, I took Computer Science, Electronic Engineering, and Physics. But I quickly discovered that the Physics course was geared strongly towards people who would be taking the real Physics major course, and went at a furious pace - so I switched, with full credit, to the Physics Studies course, which was at a gentler pace but still decent science - concentrating on qualitative effects while still introducing the most important quantitative formulae. There was a third Elements of Physics course for liberal-arts types, which essentially bypassed all pretensions of quantitativity and had a high topical-essay count instead, but I said NO to that one!
The Electronics and Physics courses were fine - the people there were usually genuinely interested and able to at least vaguely keep up. The "real winners" showed up in Computing - which at the time was riding on the dot-com boom. People took this course because it was seen as easy money. They were in for a double shock there.
There were, of course, a few geniuses there, of both genders. I was among them, though not necessarily at the very top of the heap. I made a name for myself by going above and beyond the call of duty, and also by managing to network my computers (of which I had an increasingly impressive number, bought with not-beer money) well beyond the campus network rules.
Then there were a decent number of competent students. Most of them had at least tried a little programming before, so the concepts involved in Java were not totally alien. These people I could help by pointing out where their mistakes were, and sometimes why.
Then there were the people who simply hadn't considered that a computer could be programmable before. Who thought that being okay with Micro$oft Office was sufficient experience for a Computer Science course. A few weeks in, I leaned over the shoulder of a girl who already had half a dozen people trying to work out why her Java program wasn't compiling... to discover that she had paid absolutely no attention to the order of the statements. Most of the right statements were there, but there were declarations after use, computations performed in the wrong order, and probably inputs performed after outputs. As soon as I pointed out this fundamental flaw in thinking, everyone else realised what to do to continue fixing the problem.
I don't remember whether that girl finished the course or went on to the full course. There were just too many people to keep track of.
At the end of the first year we were assigned a group project for Computing. There were four people in my group, and I quickly determined that there were three people capable of programming, and conveniently there were three major modules of the program to be written. The fourth guy admitted he wasn't any good at programming, so I had him do testing and documentation instead. This was fine - it was just the first-year course, and I was willing to cut him some slack for putting some effort in and admitting his limitations.
I would do the code which glued everything together - this also allowed me to define the interfaces to the other parts. The second guy was assigned to do the database backend. This he did reasonably well - I found some problems but he was able to fix them. The third guy was assigned to do, essentially, the GUI - and we didn't hear a peep out of him for nearly a month. With deadlines approaching and all the other work we could usefully do done, I wrote the GUI myself.
By the time the third guy submitted his code, I - with some help from #2 - had extended the program to include several extra features (which was encouraged for this competitive project). But #3's code encompassed only the bare minimum features. Worse, it was buggy and didn't even compile. To save the project, I had to reject his contribution, and note that in the project report (which I also had to write, as the de-facto leader).
There was yet another complication: the official workstations had been upgraded to a beta version of the Java runtime. Which was spectacularly buggy in itself. About half the teams managed, with a lot of effort, to work around the bugs. I bypassed it by not using the official workstations to develop or demonstrate our work - instead, two PowerBooks and a 486 running Linux.
The 486 was predictably dog-slow, but sufficed for testing, while the PowerBooks were very fast (PowerPC models, and with one of the first JIT VMs) but trickier to get Java working on. One of the lab assistants said I should win just for making Java work on a Mac! I also helped some other teams by rescuing them from the buggy workstations and demonstrating their work on the PowerBooks.
In the event, my team didn't win. But we did get second place through sheer dint of effort - and the first-place project was noticeably better than ours. But the #3 guy had really held us back by not putting in the effort we expected of him, despite frequent reminders of the important parts of the schedule. Apparently, his mark was indeed reduced on the basis of my report.
The real winner I didn't meet until much later - in the third-year course. Remembering that we had been working with Java literally since Day One, and by then we'd studied many fundamental algorithms in the classroom... I was paired in the lab to study an extremely simple substitution cipher. Which we were supposed to implement. Being experienced, I just went ahead and wrote the code - just a half-dozen lines or so of simple C++ code.
And then I turned to my partner and said something like: "Since we're supposed to be working on this together, do you at least understand what I just wrote?"
He didn't.
"What about these three lines here? They actually do the substitution. Can you see how they work?"
Nope.
"Are you telling me that after two and a half years of supposedly using Java, you can't read this simple for-loop, which would make perfect sense in that language?"
Essentially, yes.
I don't know whether he got a good grade either. I hope he didn't.
Comment