home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sys / mac / programm / 14098 < prev    next >
Encoding:
Internet Message Format  |  1992-08-17  |  10.0 KB

  1. Xref: sparky comp.sys.mac.programmer:14098 misc.education:3132 soc.college:3616
  2. Newsgroups: comp.sys.mac.programmer,misc.education,soc.college
  3. Path: sparky!uunet!wupost!gumby!destroyer!terminator!potts
  4. From: potts@itl.itd.umich.edu (Paul Potts)
  5. Subject: Re: Computer Science Programs
  6. Message-ID: <1992Aug17.203053.26144@terminator.cc.umich.edu>
  7. Sender: news@terminator.cc.umich.edu (Usenet Owner)
  8. Organization: Instructional Technology Laboratory, University of Michigan
  9. References: <1992Aug15.031756.24965@athena.mit.edu> <1992Aug15.02132.10817@ms.uky.edu> <Bt4x5K.9vI@usenet.ucs.indiana.edu>
  10. Date: Mon, 17 Aug 1992 20:30:53 GMT
  11. Lines: 150
  12.  
  13. I thought I'd throw my two cents' worth in as well.
  14.  
  15. My degree was in English, not Computer Science, but I took a minor in Computer
  16. Science at the College of Wooster in Wooster, OH. *I do not recommend going
  17. to Wooster for Computer Science! The program was weak when I attended, and
  18. has gone downhill since then.*
  19.  
  20. The first programming course I took was CS151, introduction to Pascal
  21. programming. I had a fairly wide hobbyist-level knowledge of programming
  22. (BASIC, a little Pascal, some Z-80 and 6502 assembly language, some 
  23. experimentation with Forth and other languages) before that, so I
  24. coasted through 151 pretty easily. I asked the instructor if I could skip
  25. classes as long as I handed in assignments and showed up for exams. He agreed,
  26. so that's what I did. The important lessons from 151 were the beginnings of
  27. structured programming, data structures, and beginning to work with such
  28. concepts as abstract data types and hiding implementation. That much was
  29. useful.
  30.  
  31. CS152, the following semester, was the "weeding-out" semester where we learned
  32. how to design reasonable-sized programs. Half the class failed or dropped. 
  33. The rest of us worked our asses off. The instructor graded based on design
  34. considerations, style, and whether your code actually functioned. As I recall,
  35. a good top-down design was worth more than a fully debugged piece of crap.
  36. We got the rudiments of algorithms, data structures, linked lists, trees, and
  37. recursion; brute-force methods, stacks, queues, etc. We had a great deal of
  38. fun writing programs to solve the "Knight's Tour" chess problem on various-
  39. sized grids, and then running them simultaneously to bring the school's
  40. VAX 11-750 to its knees. We learned a lot that semester: one of the lessons
  41. was "here's how to stay up for 72 hours straight." Unfortunately I can't do
  42. that anymore; fortunately I generally don't need to.
  43.  
  44. A word on languages: I am very suspicious of courses that claim to teach
  45. *just* a language. That seems rather useless. CS151 taught Pascal and
  46. some of the basics of programming; after that semester, it was presumed
  47. that we were bright enough to learn new computer languages on our own. I
  48. believe that approach paid off well. Instead of being taught languages,
  49. we were given various assignments which required us to learn a language
  50. and development environment as a matter of course. This is more realistic.
  51.  
  52. At the time, on my own I was discovering the campus Macintosh network, just
  53. being put into place, and the joys of hacking PostScript code by connecting
  54. a terminal directly to our dorm LaserWriter. Programming languages for the
  55. Mac were still scarce, but I eventually got into THINK C on my own and learned
  56. C. My ability to learn things on my own was encouraged and strengthened by
  57. my academic work. *This ability has been far more valuable to me than the
  58. actual content of anything I learned in a computer science class; coupled
  59. with the general principles of how computers actually work, it formed the
  60. real value of my undergraduate work in Computer Science.*
  61.  
  62. From there, I took assembly language. This was, on the theoretical side, a
  63. basic introduction to machine architectures, registers, floating-point, 
  64. etc.; on the hands-on side, we wrote code, culminating in an assembler
  65. (in assembly language) for the VAX 11-750. This was a rather large project: 
  66. my final code was quite a bundle of printout (during punchy late-night
  67. debugging sessions we once tore off all the tractor edges to our printouts,
  68. tied them together, and created a giant spiderweb around the computer atrium).
  69. The combination of theoretical and hands-on experience was what made this 
  70. worthwhile for me. As in the other languages, the instructor took something
  71. of a hands-off role in our actual code. We learned that from the documentation
  72. and a text. It was interesting spending half the night debugging assembly
  73. code, and then realizing that we had to spend the next half of the night
  74. cramming to study for a test, which was on the more theoretical aspects
  75. of machine-level programming.
  76.  
  77. The next course was Operating Systems. This was a textbook class on how
  78. Operating Systems work; the hands-on part consisted of learning MC68000
  79. assembly language and writing a preemptive scheduler and basic I/O services
  80. for a single-board computer, using a cross assembler on the VAX. We got
  81. occasional technical assistance from the instructor, but for the most part
  82. we were on our own with the 68000 documentation. The instructor was aware
  83. of the Macintosh and so the mechanism we used was the A-line trap-dispatching
  84. mechanism. This gave us hands-on experience with the 68000, and also an
  85. undertanding of interrupts, supervisor and user modes, priorities, etc.
  86. Again, we studied theory by day and practice by night. It was a great
  87. course.
  88.  
  89. From there, I went into a somewhat disappointing course on programming
  90. languages. This was a theory and overview course, looking at a numer of
  91. languages, commonalities between them, efficiencies of implementation,
  92. syntax and semantics, formal notations for semantics, etc. I don't remember
  93. that much about it, except that we didn't do much programming.
  94.  
  95. My next course was Algorithms, which was a classic textbook course using
  96. Sedgewick; it focused largely on sorts and searches. I was learning Macintosh
  97. programming in C at the time, and implementing some of my assigments in C,
  98. so in one case I handed in an assignment several months late, but with a 
  99. complete graphical user interface, running as a Macintosh application rather
  100. than a VAX executable or Mac Pascal program. 
  101.  
  102. That was about it for the minor; I also took a little 1/4 credit Fortran
  103. course, and dropped it; I sat in on a more advanced computer architecture
  104. course while working as an intern, but didn't get to finish it (this was
  105. essentially a logic design class, where one of the projects involved
  106. writing a simulation of a processor by constructing a microcode interpreter).
  107.  
  108. One of the main reasons that I didn't get a major was math. (Aside from
  109. being indecisive about which I loved more, Computer Science or English; I'm
  110. still debating that). The Computer Science program at Wooster required
  111. differential equations, linear algebra, discrete math, two semesters
  112. of calculus; I was barely able to make it through calculus. I attribute
  113. this partially to a poor high school math education and partially to a
  114. lack of ambition to do the work required. I did not have the drive or interest
  115. to take all that math, or perhaps even the ability. I don't think that that
  116. much math was necessary for me to make good use of my courses; I would prefer
  117. to do software design than optimization, and user interfaces to simulation.
  118. I couldn't model a Fourier transform or do a stress analysis of a bridge, but
  119. I could figure out where an algorithm or piece of code was too slow, and make
  120. it faster. In my job now I don't have a use for the math that I didn't take,
  121. whereas the writing skills I developed have been very useful.
  122.  
  123. Today I have written a decent amount of code for the Mac, both XCMDs and
  124. applications; I am learning C++ and writing code for the PC; I use Hypercard
  125. and Toolbook to develop instrutional software. No one taught me C++; no
  126. one taught me Toolbook; the skills I developed at learning new techniques
  127. and languages have instead been very useful. If you get an education in
  128. Computer Science now, your instructors can't know what language or 
  129. architecture or processor or class library or operating system you will be
  130. working with in ten years; you can't know. The importance lies in your ability
  131. to learn and thus, be flexible and able to adapt.
  132.   
  133. I do have the urge to go back and take more computer science; I would like
  134. to study AI, and I'd like to learn LISP. I would like to get into theory of
  135. computation a bit as well, which I never took. My problem is that I am
  136. somewhat happy where I am, and the University doesn't love to teach people
  137. who aren't determined to get another degree. Also, to take more computer
  138. science, I would probably be required to have more math, but it is
  139. undergraduate-level math that I lack, and departments can be uptight about
  140. letting post-graduates take undergraduate course work. I work full time, and
  141. am not particularly interesting in getting into a degree-seeking program
  142. where I would be competing with people with much stronger backgrounds, but
  143. I would like to take certain courses. The next few years will be interesting.
  144. Perhaps I cheated myself by being less competitive and focusing more on
  145. real learning than on grades and deadlines, and perhaps there isn't a place
  146. for me in a competitive graduate program in Computer Science. There is,
  147. though, a lot more that I want to learn.
  148.  
  149. I would recommend looking for a program that has both theoretical and hands-
  150. on experience. Talk to a couple of instructors: if they seem current, and
  151. knowledgeable, ask to see the syllabus for a current course. Don't take
  152. courses entitled "programming in C, part 1 through part five." Look for
  153. some real meat; look around the department and see if you can find a room
  154. with lots of unshaven young men (and women, if you are lucky enough to have
  155. any in your program :) staring bleary-eyed at terminals, clearly lacking
  156. in sleep. If they are guzzling coffee to stay awake and have sleeping bags
  157. rolled up underneath the table for a catnap during long compiles - you've
  158. found the right place!  
  159. -- 
  160. "It'sVerySad / toSeeTheAncientAndDistinguishedGameThatUsedToBe / aModelOf
  161. DecorumAndTranquilityBecomeLikeAnyOtherSportABattlegroundForRivalIdeologies
  162. toSlugItOutWithGlee." (from _Chess_). -potts@itl.itd.umich.edu-
  163.