03.06.08
Posted in School, College, Computer Science, Thoughts at 5:50 pm by Nick
In recent times it has been very hard for me to attend class and get things done. This is due mainly to a troubling and complex family and living situation. Thus, I have decided to withdraw from two of my classes and work harder towards not marring up my academic record then I have already. Along with this, I am going to be moving during spring break.
However, I must say I am absolutely unimpressed (and disappointed) with some parts of my education. I know it may feel like an attack, but it should probably be heard. It is no news to the Computer Science program at UNI that enrollment is down and there are many people who switch majors. After talking to -many- CS majors (mostly freshman), I have decided it has little to do with the course content. If I could choose, there would be many things I would change based on my personal experience and feedback.
The first thing I would change would be our introductory courses. I know this is talked about and debated a lot. But what we have taught recently, Ada, C/C++, and Java, is a terrible choice. It is no reason our majors are running away! None of these languages are terribly user friendly for beginners. To exacerbate the problems, we thrust our students in without ever telling them what it will be used for, how it will be used, or why we use those particular languages. We don’t mention other alternatives. Why is this? Why do we not teach introductory classes with dynamic typing, like PHP or Ruby. I have never heard more complaints then about students who have no idea what the different between certain data types are. In C/C++ there are all kinds of exceptions, like using char’s as small integers, unsigned and signed, and C-style strings vs. C++ string data type. How are the students supposed to figure that all out? Ada is a language designed initially for embedded systems by the Department of Defense. That line alone is enough to scare freshman. There is nothing simple in these languages. So why do we teach them in our introductory courses? Our degree program already requires an extra Comp Sci general class. Why not save these industrial languages for them?
Students need to learn the simplest things first. These languages were not designed to be simple. Yes, if you know how to use them they are not as complicated as they first seem. But there is no reason to think a freshman in computer science, with no previous programming background, will understand the concept of passing the address of data to a function. I know several good programmers who still do not completely understand pointers. To teach the simplest thing possible, we need the language with the least amount of baggage. Something you can get using quickly, and without a lot of quirks. In C++, you need includes, a main function, knowledge of data types and operators before you can do anything. In dynamic typed interpreted language, you need basic operator knowledge, and that is all.
And yet I fear we cannot change our introductory languages because we have our two full professors teaching our introductory courses. Never mind the fact that the C/C++ students learn C, not C++. C++ comes later and is merely brushed on. I understand better then most the overlap between the languages, but there are some huge differences. I think students in the C++ section should be taught about C-style strings (that is, character arrays) but they should be taught about the more commonly used (and far more useful) STL string data type.
I strongly believe our faculty grew up when computer science was brand new. They all have fantastic and interesting stories. But this age is different. Our upcoming CS students are different. The times have changed. Computer science is no longer ‘new’, it is now ‘young’. The students will not spend all of their nights up late, huddled over their computer attempting to fix a broken program. That type of dedication is gone. It is the zeal of the new and unexplored. While there is plenty to explore in CS still, freshman will no longer be the ones doing it. We have a new computer science generation, and our program needs to realize this. We will continue to see low enrollment and a high drop rate if something doesn’t change. You cannot scare away all of the students by making them feel dumb and inferior because they cannot remember complicated syntax and expect your academic program to live.
Our introductory courses need to teach different things. Never, in any class I have taken at UNI, has a professor started out a class by mentioning why we should learn what we are learning. They have never mentioned it’s use or importance. In our introductory courses we jumped right in, delving into logical algebra and programming methods, but no one said what we needed to learn the algebra or methods for. I was lucky enough to know how to apply my skills already. Most students don’t. They have no drive because they are merely frustrated by everything they are learning. And who wants to walk up to a professor and admit they have no idea how to compute square roots using for loops? No one. And that is a big problem. I think we should promote a different way of learning. Students find it extremely hard to take program specifications and write a program from scratch. It is hard, and advanced programmers do it. Not new ones. We should develop programs for our freshman to modify, so they can see why code works and how their changes will reflect it. We should promote programming in small steps. If you write a program from scratch, it won’t work the first time. It never does. Maybe because it was late and you initialized your data wrong, or perhaps you thought through your packet filling the wrong way. Whatever the cause, if a student writes it from scratch and it doesn’t work, it is a moral failure. They aren’t used to it. They don’t understand that even the best programmers don’t write bug-free code.
Our students are not motivated. As I listen to classes, people, and friends talk about computer science, they are NEVER talking about what cool project they are working on. They don’t talk about things they are looking into, nor are they talking about things they aspire to make. They talk about how they failed to complete the homework because they had no idea where to start. They don’t have the time to work on something they are actually interested in because they spent four hours trying to fix a program that was probably never going to work the way they wrote it in the first place.
There are two things that bother me the most:
One, the fact that our major is long and requires so much math. Yes, I understand math is great. Yes, I understand we have a science degree and it will not be short because it requires training. But our degree provides no flexibility. If you want to reasonably complete it, you will work your ass off or take a more sane five year plan. I’m still unsure what is with the emphasis on math. I understand it -was- the foundation of our program. And I know it can help understanding, or expand thinking. But seriously, the last math class I technically completed was Geometry. My family life went to hell during Advanced Algebra and Trig, so I never completed the second semester, and I got a C in the first. I am not ashamed to admit this. It proves you do not -NEED- math to succeed in computer science. In fact, apart from simple arithmetic, math is largely unneeded unless you are working on math related problems. Discrete structures is a great class and very applicable. But you don’t need calculus to do it. I got an A- in it, merely missing the A by a percent or two. As a software engineer I’m pretty sure you will rarely deal with real math problems. So what is the math portion of our degree really for? Why not dump it and strongly encourage a mathematics minors? If you do the courses just right, our major is only one or two classes away from a math minor. But, of course, there is no real time to take those classes to get it if you want to graduate in four years.
And two, you never have time to work on projects that matter to you unless you are completely uninvolved on campus and jobless. Most (not all) professors are not flexible enough to allow freedom in their homework. Rarely can I think of times when I could pick homework that was interesting to me. I have gotten more then most, that is for sure. In our introductory classes, students may not know what interests them programming wise. But they certainly will not be interested in mundane examples. Not all students will want to write stuff on their own. But we should encourage them to pick homework that will relate to the topic at hand and help them do it. Everyone knows and can enjoy tic-tac-toe, and it is not hard to program, even for beginners. It demonstrates many programming techniques, such as input/ouput, array manipulation, or potentially AI or even OOD. Yet never has gaming been brought up in any of my classes, except for AI where game playing is part of the curriculum. In fact, in many of my classes, gaming is frowned upon. Never mind the fact that gaming is perhaps the easiest way to relate the material to the current students, and demonstrate any technique, be it lists, trees, arrays, classes, or OOD.
This all bugs me to the point of wanting to switch majors. I won’t, but it seems like a damn good idea. Economics is simple. They take the core of what you need and give it in eighteen hours. Then you choose eighteen more hours of education, putting what you want to learn in your hands. This gives you room in your degree to deal with bad classes, or explore things you are interested in. While I’m not saying computer science can be simplified to thirty six credit hours, I think the BS could provide far more flexibility then it does. Since we do not offer Software Engineering, nor anything else as a major, there is very little point in requiring students to pick an emphasis beyond Foundation courses. Let students take what they are interested in. They will look for jobs they are interested in, and then they will know more of what they need to know for their jobs. I have no real special interest in Information Science, it just seemed like the lesser of all of the evils that are our choices. I wanted to learn about databases, but none of the other courses seem interesting. I think the foundation courses are a good idea, but they should be expanded. Perhaps take a primary course from each section (Info Storage and Ret, Software Engineering, Networking) and put it in the foundations, then remove the emphasis requirements. This would require students to fulfill a requirement and pursue whatever path they would like without punishing them if they decide to change. Maybe students want experience in Real Time Embedded Systems, but have no interest in testing or project management. Currently, students will probably not pursue their desire to learn about real time embedded systems because they will be devoting their emphasis to something they only have one real interest in.
Note: This IS a first draft and WILL be revised.
Permalink
08.15.07
Posted in General, School, College at 4:49 pm by Nick
I was mixed with emotions today as I spent most of my money on hand to buy $520 worth of textbooks (I’m still missing two). I’m excited, and I’ve already been flipping through the pages of several as work winds down. However, I can’t help but feel cheated by the system.
I figured since I get $450 from ROTC to buy books and supplies I’d buy all new books. This is all well and good, but ROTC doesn’t give me any money for a while. Whats more, the refund check I was planning to use to buy the books was not mailed until today, meaning I must wait for the snail mail check to arrive to alleviate some financial stresses.
Even so, I’m very pleased. And excited. Almost giddy in fact. I haven’t been able to do too much this summer in the ways of personal interest or hobbies (my computer has died twice now, along with most of the data, and I can’t replace it for a little while yet), but I’m very happy to finally be starting school again. But not just school…
College.
Finally! At last! My home away from home, full time. I can again resume the daily rituals of homework, tests, and absorbing knowledge. If family difficulties can stay out of the way perhaps I can regain my academic status and keep it how it should be. I have a good classes, a great job, and a wonderful college that provides both.
Monday can’t come soon enough.
Permalink
02.17.07
Posted in Programming, School, College, ALPHA, Computer Science, Info Storage and Retrieval at 5:41 pm by Nick
At long last I have an update! A real update. I have been delving ever so slightly into the realm of Information Storage and Retrieval. This wasn’t my first time writing code to build a dictionary of terms, but other lessons have been interesting. Generating effective stop lists and weighting terms are all very practical techniques. And our textbook is free!
–
Assignment 1:
Read the computing abstracts file and generate a dictionary of terms. Convert terms to lower case remove extraneous endings and special characters. Sort the dictionary by frequency and turn in, along with the program, the first page of the sorted results.
The code, library, and related files:
http://ew.xidus.net/download/isr/1/
Notes:
I spent more time on this then it required simply to get a workable namespace going. All classes and related functions will go into the ISR library for use in later homework, and, at the end, I’ll have a workable Info Storage and Retrieval library with tested code.
—
Assignment 2:
Using the dictionary from the above, select high frequency and low frequency words and from these build a file that will be a stop list. Write a program that will process the abstracts (title and abstract). Your program will read each word in each title/abstract text and ignore words that are in the stop list. It will build a new dictionary vector giving the total number of times each word occurs and a document frequency vector giving the number of documents in which each term occurs. It will then calculate, for each word, the Inverse Document Frequency weight of the word. Hint: for each document, build the dictionary directly and generate a document-term matrix. Then after all documents have been processed, create the document-frequency vector by going through the document vectors and incrementing the D-F vector for each word found
The code, library, and related files:
http://ew.xidus.net/download/isr/2/
Notes:
This assignment looked daunting, but when I got started it was actually relatively easy. It was just a lot of work. I hit a few spots that proved troublesome, mainly due to the reading of the file (I should have written my own reading routine that processed each character instead of extracting from std::cin) and my being tired. Overall I’m fairly proud of this code as I didn’t know how to do any of it when I started. However, as with most code I look back on, I see things I definitely could improve. This code isn’t particularly efficient in my opinion, but overall it still runs fairly fast.
Permalink
01.17.07
Posted in School, High School at 10:14 pm by Nick
Today was the beginning of my final semester at Cedar Falls High School. It didn’t disappoint me. It is amazing, however, how fast a good day can turn into a bad one.
I started this morning going to work. It was pleasant, and I got to see Chris for the fist time in ages. I went to class at UNI and returned to work and ate a brief lunch. All was going well. I went to the high school and returned to Physics. Just like normal. I wandered over to Composition and Rhetoric with Ewald. She seems scary, but I think I will enjoy the class. I have had little to no time to write, and now I will have an excuse to do so even if it is in essay form. She has a lot of rules, but they don’t scare me. I then when to Sociology with Mullan. I have high hopes for that class. We have a rather large variety of people in it, and its dual credit and extremely interesting.
After high school I returned to work briefly with David and showed him around. We talked with Diane for about forty minutes (putting it at 4:40pm) before David decides he’d like to go on a service call! So we went over to the library and swapped a power supply on one of the lab computers.
I came home and before going inside I decided to do the shoveling I had put off from yesterday. I already felt kind of annoyed with things today, so a physically straining and numbing activity was almost desirable. After an hour and a half of good work getting the snow that we had driven over and was caked on the driveway off into the yard I went inside and ate dinner. All was seemingly well.
Later I opened an e-mail saying my father had collapsed at Legacy Point and had been taken to Mercy Hosptial. And there goes the day. A decent day, quickly and absolutely crushed by less then fifty words on my screen. I waited an hour or two for an update. Apparently he has some type of virus that hit him rather suddenly and, supposing all goes well (which it rarely does), he will be out tomorrow. ::sigh::
After a somewhat liberating talk with Wade about that status of life, I’ve decided turning in early would be a good idea. I need to be at work by 8am after all. I love work. It keeps my mind away from the more troubling matters and pays off (literally).
Permalink
08.22.06
Posted in Programming, School, College, ALPHA, Computer Science at 2:52 pm by Nick
Time: 1 hour
Total: 1 hour
——————-
I already have homework. ::sigh:: Actually, I’m posting because I completed one of the tasks. It was an intersting refresher as I haven’t done much practical programming this crazy summer.
The first assignment was very much like the word counter we wrote back in CS I or CS II. We had to count the number of occurances of each printable character in a text file with a few other specifications relating to errors, output, etc.
Overall it was a decent way to spend an hour. I enjoy playing with STL maps, and they made this much easier than it would have been otherwise. McCormick seems to want comments on just about everything, so I think half of the code is either white space or comments.
I must admit I am a little wary posting this here. I don’t think any of the CS majors at UNI read my blog, but I don’t want to ruin their homework. Either way, if they copied it then they would all take some heavy hits on their grades.
Code -> http://ew.xidus.net/download/cs3/postlab0/
Permalink
08.21.06
Posted in School, College at 9:30 pm by Nick
So, college started today. Woot. It was as expected (rather dull), but it was nice to go roam the campus and see the teachers I’ve come to know. I’m looking forward to CS III, and I hope Computer Architecture will be interesting as well. I remember thinking to myself several times while walking to my truck after Computer Org in the winter, when it was 10 degrees (and sometimes colder) outside, at 9:15am, “wow, that was totally worth getting up at 7:30am for.” Not many classes are like that.
This week looks to be a long one. It seems I have a lot to do in one day. But thats alright, I enjoy the feeling of accomplishment when I climb into bed quite exausted from the days activities.
Permalink
06.15.06
Posted in General, School, High School, College at 2:24 am by Nick
I had a job interview at 2pm. I went in feeling pretty confident, and low and behold I got the job on the spot (granted that was after an interview). I now officially (though my first day is the 26th) work for the ITS department at UNI (paperwork still pending). A decent wage too for a fun and flexible job (with room for raises).
After that (lasted till 3:30 or so) I got to take dogs to the vet! Oh boy, so much fun. Sarcasm doesnt go through blog entries well if you don’t use tags. Today reminded me how much I really am allergic to the four legged crazys, so if Loki (my black lab) does live with me next year I’m definitely going to get some medicine for it.
Later I went and had dinner with Logan at Famous Daves. Yum. That was fantastic. The woman also started by asking us if we wanted any Michelob or daiquirii’s (I think it was daiquiri’s…), which was somewhat interesting. We then headed over to Blockbuster to find a movie and determined we would watch Beverly Hills Ninja (one of the first movies we ever watched togeather). Soon after we went to Hy-Vee to buy candy so Lauren could check us out (”you forgot the condoms?!” haha
)
So all in all it was an interesting day. I have lots of packing and moving to do tomorrow and this weekend (and all of next week for that matter). Hopefully I’ll figure out my living situation and find some time to finish up my math/great books stuff so I didn’t completely screw myself over last semester (::shudder:: I can’t live with a 3.6 gpa… must… makeup… work… for better grades…). Speaking of homework, I suppose I should finish my homework for Computer Org. or at least tell Fienup to report my A-. ::sigh:: If only I had a bit more time to program in assembly (aka bash my face into hard objects).
Permalink
04.17.06
Posted in Programming, School, College, ALPHA, Computer Science at 10:13 pm by Nick
Time: 4 hours
Total: 70 hours
————————–
Wow, an update on all of this finally! Since I’m lucky I can count my time programming on homework towards my project.
Due to recent events, I missed quite a bit of class at UNI. I’m pretty sure I’m still ahead of the game though. The two updates are the two most recent homework assignments.
Assignment #4 called for expanding a Vector class O’kane had established previously. This was just a chance to use operation overloads. For the unknowning, C++ allows you to override various operators (+,-,/,*,++,- -). Thus, you can build your class into the language and not only write more concise code, but cleaner code. Its all quite nifty.
Assignment #5 was strange. I guess in class they were talking about sorting arrays (again) and O’kane decided to have them use the qsort() and bsearch() functions. The two standard functions are for array manipulation within C (and C++ for that matter). You specify your own comparison functiion and a few other details and it will do all of the hard work for you. It is also quite fast. We tested it on a 1.3 meg file full of medical terminology (used in a previous assignment as well). It took about a second to read and sort all 39,824 entries on my piece of crap computer. Looking up was also quick.
One of the strange thigns about the assignment was that we had to seek back to the stored file position and read it in again, so it was all directly from the file. This is good practice for new programmers who don’t know how to traverse text files very well. However, I became very good at it with the X-Log Library, as my crash guard used file seeking a bit.
You can find the source and typescripts in the links below. The typescripts hold the source code, a compilation statement, and a test run. However, the code looks a tad funky, so I suggest looking at the source files for the code itself:
Assignment #4 - http://ew.xidus.net/download/cs2/4
Assignment #5 - http://ew.xidus.net/download/cs2/5
Permalink
03.03.06
Posted in General, School, High School, College at 11:01 am by Nick
Right, so my seemingly great week has turned to crap. Lets go over why it was great:
- Perfect score on the Eastern Civ test (100/100). Woot.
- Perfect scores on CS II homework and test (without testing code even).
- Made $20 tutoring a college student
- Assembled a kick ass computer, for which I will (eventually) recieve $80.
- Spring break is but a week away
- My truck still has half a tank of gas (yup, this is a good thing)
- The play is on Saturday
- Great Books w/ Demoss is amazing, as is the Apology by Plato.
- Got to eat Village Inn and Carlos O’Kelly’s in the same week
- Made top 10 posters on Gammon’s forum
Ok, some intermediate things here:
- Signed up for the ACTs
- Got some sleep, but not too much, by pulling shifts with Dan
- Hacked away some math assignments (see next section)
- Video in Eastern Civ on Monday.
- Reading time in Eastern Civ today.
And the kickers, all of which have been happening recently (minus the first one):
- Mom back in the hospital on Tuesday (this cancels out like, 5 good things)
- Still have several math assignments to do
- Literary Analysis paper is due next week (I have a bit to read yet…)
- Comp. Org. homework due today that I don’t have done and don’t really know how to do…
- All of the problems of putting the computer togeather (eg. incompatible RAM, SATA troubles, optical drive troubles, Windows installation troubles (err, SATA troubles again…))
- No time to work on Kaladea
- No time to work on phpQuote
- No time to work on much of anything
- Horrifically unprepared for the ACTs next month
- Cable/Internet died during ACT registration
- 65 point quiz in Eastern Civ next week
- My knees died (I contribute this to tripping on the sidewalk, but standing for 4 hours straight prolly didn’t help either). This was resolved after two hours of icing them down with frozen peas.
- Terrible weakness and sickness Thursday morning.
- Mental meltdown + seemingly unavoidable academic failure
- Absolute depletion of care for math class ::sigh::
- Only got to see my Grandparents yesterday for a total of 45 seconds (twas leaving for tutoring)
—–
I’m not really sure what else to say. This weeked is going to be incredibly busy, as is next week. Then, finally, I’ll have a break from it all (which, sadly, will be used to catch up on things…).
—–
Can anyone name the song that contains this posts title in its lyrics? I’ll give you two imaginary cookies if you do! Google should make it easy.
Permalink
01.22.06
Posted in School, High School, College, ALPHA, Computer Science at 3:06 pm by Nick
Time: 2 hours
Total: 5 hours
——————-
I spent some time verifying the balance of the tree’s and everything looks pretty good. However, I have one node in -every- tree I create with a balance of 2 (which is bad). The code leads me to believe that this node used to be a root node that was later rotated out of the root spot.
I will attempt later (if my professor can give me a lead) to fix the problem, but overall the effects are extremely positive. I ran the program on a 338 meg text file named osu.medline, which contains various informations on effects of drugs, diseases, disorders, their causes, and things like that.
This is a sample output (I won’t paste all 7.2 million words it read) with the number of nodes/unique words capped at 200,000 (Note: words of length 3 or less are discareded):
Nodes w/ 0 bal: 136003
Nodes w/ 1 bal: 32057
Nodes w/-1 bal: 31939
Nodes w/ other: 1
Overal balance: 120
Number of words: 7201810
Number of nodes: 200000
Time: 32 seconds*
–
It took just over 32 seconds to read 7.2 million words and inset them into the tree (and balance the tree accordingly). This is very impressive. The fact that 136,000 of the 200,000 nodes are balanced perfectly (balance == 0) means the tree is in very good working order, and the only problem is the “other” node, which has a balance of two. The others, -1 and 1, are local fluxuations that exist and will exist until the tree need’s rebalancing at that particular spot.
In closing (for now), the method outlined works. It is fast (7.2 million searches and additions! in 32 seconds!) and provides a very good tree.
*This time is a little off. Sadly the timer is not very resolute, and it in no way accounts for the hundreds of thousands of small words (length < = 3) that were read, translated to lowercase (with smashed punctuation), and then discarded. Also, this test was run on a Sidhe (http://sidhe.cs.uni.edu), a very fast machine.
-- edit --
I added two lines of code to avoid even smashing/converting strings of length less than 4 already. This decreased the overall time by one second:
Nodes w/ 0 bal: 136003
Nodes w/ 1 bal: 32057
Nodes w/-1 bal: 31939
Nodes w/ other: 1
Overal balance: 120
Number of words: 7201810
Number of nodes: 200000
Time: 31 seconds
-edit-
Code has been updated. The original is main.cpp, the recent additions are under main_mod.cpp.
http://ew.xidus.net/download/cs2/1
Permalink
« Previous entries ·