Suggestions for study

Feis

n00b
Joined
Apr 2, 2006
Messages
2
I'm a current Junior in HS, and in my school senior courses are very open, moreso than all schools I know. One of the options they offer is an independent study (assuming a teacher is willing to be a mentor) for the year. They offer a programming course (taught in java), but it would be childs play to me (I've coded in C++, Python, PHP, and Java), so I'm leaning towards an independent course.

My overall idea was to build a full fledged program that would be 'professionally' (by this I probably mean best. most times my code is documented but my coding practices tend to be a bit loose) documented and built. I would do this on my own, but why not get school credit for it? My problem however has been finding a idea for a program. It wouldn't have to be revolutionary, just large enough for one or two people to do over the course of two trimesters. Any Ideas?
 
I've heard of some students around here (New Orleans) taking college freshmen-level courses during their junior year in HS. Those courses counted as credit for their senior year in HS, and their first year of college at the same time, so they ended up skipping two years of school (senior year of HS and freshmen year of college)!

So try something like that. See if you can find some introductory programming courses at a local juco or state college that would qualify as HS credit. You may get HS and college credit at the same time.
 
Here are my suggestions:

  1. Buy a copy of Programming Pearls and work through the exercises. But multiply the size of each item in each exercise by ten or 100, at least.

    Bentley wrote the columns reprinted in this book in the 80's and 90's when a gigabyte was a phenominal amount of memory, a thousand times the size of the most expensive computer's memory. On your modern rig, you should be able to do much more work much faster in the same amount of time. Any fool can find the median of a hundred thousand numbers. Can you find the median of a hundred billion numbers? How fast?
  2. Buy a copy of CLRS. Get started on the exercises.
  3. Write a simulator for a machine that you make up. How many registers will you make it have? How wide are they? How much memory can it address? What opcodes does it have? Does it have sements, or a flat model? Protection? Mapping? Virtual memory? Did you borrow things from other designs? Which ones, and why? Write an assembler for it. Write BASIC for it.
  4. Write a full-screen text editor. Make it handle files larger than 256 megs with ease; make it handle files larger than available memory without relying on the virtual memory system in your OS.
  5. Write grep. Is it faster or slower than the grep that you get with your system (or toolkit, or compiler, or whatever)? Why?
  6. Write your own OS that you can boot from a floppy. Have it do simple commands, like the Apple II monitor. Or make it boot and then play a simple game in text mode graphics, like brickout or pong.
  7. Write a file copy utility. Start simple: copy files. Then add wildcards. Then add renaming. Then add a "move" option to delete the source. How fast is it? Faster than the copy tools built into your OS? Why? Why not? Make it copy over the network. Faster? Does it use threads? What's the ideal I/O request size?
  8. Get one of the O'Reilly Mastering Algorithms books for a language you know. Work through the exercises.
  9. Write an unlimited precision math library. Integers, FP; your choice.
  10. Get a copy of Programming Challenges. Get started on doing the problems.
  11. Write a program that sorts data. What happens when the data is larger than memory? What happens if you have a dual core or dual-proc machine? Do you sort twice as fast? Buy four cheap computers and hang them together on a network. Can you sort four times as fast?
  12. Buy a GPS, and wire up a NEMA cable for it. Plug it into your laptop, and have a friend drive you around. Can you write a program to lay waypoints? Estimate time from one way point to another? From here to another waypoint? Do simple navigation for the streets in your town?
  13. Get a nice atlas. Type in all the city-to-city mileage data. Write a program that reads the data table, then asks the user for two city names. Pick a route from one city to the other. Is it the fastest? Can you guarantee that, or is it just "pretty good"? How fast is your program?
  14. Get a ZIP code database file. You should find 'em for $40 on the web to download. Write a program that reads the file, then tells me the 5 zip codes that are closest to any ZIP code I enter, and how far away they are. How fast is your program? How much memory does it use?
  15. Pick a course at MIT and take it by yourself on your own time. Buy the books, find a mentor.
  16. Write a program to simulate a complicated intersection. Four lanes cross four lanes, and all directions have a left turn lane and signal. There are also crosswalks. You get as inputs for each lane and each direction a crosswalk button, a traffic indicator, and a deep traffic indicator; plus a lights-and-siren sensor. And you know the time of day. How does it work? How do you decide when to cycle? Do you ever skip a cycle? Why? Your program should use less than 16 k of code, and less than 1 k of data.
 
As an Amazon Associate, HardForum may earn from qualifying purchases.
mikeblas said:
Here are my suggestions:

  1. Buy a copy of Programming Pearls and work through the exercises. But multiply the size of each item in each exercise by ten or 100, at least.

    Bentley wrote the columns reprinted in this book in the 80's and 90's when a gigabyte was a phenominal amount of memory, a thousand times the size of the most expensive computer's memory. On your modern rig, you should be able to do much more work much faster in the same amount of time. Any fool can find the median of a hundred thousand numbers. Can you find the median of a hundred billion numbers? How fast?
  2. Buy a copy of CLRS. Get started on the exercises.
  3. Write a simulator for a machine that you make up. How many registers will you make it have? How wide are they? How much memory can it address? What opcodes does it have? Does it have sements, or a flat model? Protection? Mapping? Virtual memory? Did you borrow things from other designs? Which ones, and why? Write an assembler for it. Write BASIC for it.
  4. Write a full-screen text editor. Make it handle files larger than 256 megs with ease; make it handle files larger than available memory without relying on the virtual memory system in your OS.
  5. Write grep. Is it faster or slower than the grep that you get with your system (or toolkit, or compiler, or whatever)? Why?
  6. Write your own OS that you can boot from a floppy. Have it do simple commands, like the Apple II monitor. Or make it boot and then play a simple game in text mode graphics, like brickout or pong.
  7. Write a file copy utility. Start simple: copy files. Then add wildcards. Then add renaming. Then add a "move" option to delete the source. How fast is it? Faster than the copy tools built into your OS? Why? Why not? Make it copy over the network. Faster? Does it use threads? What's the ideal I/O request size?
  8. Get one of the O'Reilly Mastering Algorithms books for a language you know. Work through the exercises.
  9. Write an unlimited precision math library. Integers, FP; your choice.
  10. Get a copy of Programming Challenges. Get started on doing the problems.

these are pretty cool ideas :)

and you linked to one of my favorite class books...

Intro to algorithms..
 
As an Amazon Associate, HardForum may earn from qualifying purchases.
mikeblas said:
Here are my suggestions:

  1. Write an unlimited precision math library. Integers, FP; your choice.
That one sounds like it would be good. That was an assignment for my data structures course here. Wrote the library in Ada, and it managed the numbers digit by digit (never checked how bad of a memory hog it was, lol)
 
Xipher said:
and it managed the numbers digit by digit (never checked how bad of a memory hog it was, lol)
Probably should've checked the perf, first. Doing 10 multiplies to handle ten digits is never going to be as fast as doing a single 32-bit multiply over the binary value. (The trade-off is printing, since you've got to convert that binary representation into a base-10 representation.)
 
Well, the digit by digit design was imposed as part of the spec when we got the assignment from the professor. We were writing functions to do addition, subtraction, multiplication, and shifting, but decimal shift rather then binary. It wasn't too bad of an assignment though, was primarily a exercise in using doubly linked lists.
 
Feis said:
My overall idea was to build a full fledged program that would be 'professionally' (by this I probably mean best. most times my code is documented but my coding practices tend to be a bit loose) documented and built. I would do this on my own, but why not get school credit for it? My problem however has been finding a idea for a program. It wouldn't have to be revolutionary, just large enough for one or two people to do over the course of two trimesters. Any Ideas?

Not a bad idea. A better idea would be to write software for somebody else. If you plan on going into programming in the future, requirements gathering & working with clients is a big part of doing it.
 
Xipher said:
It wasn't too bad of an assignment though, was primarily a exercise in using doubly linked lists.
What were the lists for?
 
mikeblas said:
What were the lists for?
each node held a digit, and pointers too the digits next to it.
say for 42

[null] <- [4] -> <- [2] -> [null]

and the outside pointer pointed at the least significant digit (in this case, 2)
 
Xipher said:
each node held a digit, and pointers too the digits next to it.
say for 42

[null] <- [4] -> <- [2] -> [null]

and the outside pointer pointed at the least significant digit (in this case, 2)
I don't think that's the right data structure for the job.
 
mikeblas said:
I don't think that's the right data structure for the job.
The point of the assignment was to work with doubly linked lists, what is was being used for was simply to try and hit various aspects of the datastructure.

EDIT: Just looked at the code again, realized I missed a couple of things, their were two external pointers, one for least significant digit, and one for most significant digit.
 
Xipher said:
The point of the assignment was to work with doubly linked lists, what is was being used for was simply to try and hit various aspects of the datastructure.
Did you learn why linked lists are a bad data structure for that application?
 
We spent a fair amount of time talking about the reasons for and against using linked lists and arrays, going over memory usage and speed issues. This thing is nasty since you are using so much memory just for the pointers, they actually take more space then the data itself. Their are a number of other reasons why this is a bad implementation as well.
 
Thanks for all the good suggestions!

A lot of those ideas (such as the master algorithms books) I would have never thought of, so I'll definitley have to check them out. However, after to talking to the proposed teacher/mentor (there's only one full time computer teacher in my school so options are limited), he made two suggestions/requirements (assuming the course builds a program):

1. Be Database-driven (he thinks that this is 'the next big thing' which shows about how much he knows)

2. Something that he at least basically knows. He can code in Java, but he isnt a programmer by trade, he only teaches to the AP curriculum, which isn't saying much, so doing things such as the unlimited precision math library are probably beyond his grasp. The other issue is my partner in the independent course is a python guy, and I might have a hard time getting him to touch lower level stuff :p


@DarkPhantom: nah, I live in nyc.
 
Feis said:
2. Something that he at least basically knows. He can code in Java, but he isnt a programmer by trade, he only teaches to the AP curriculum, which isn't saying much, so doing things such as the unlimited precision math library are probably beyond his grasp.
That seems a little presumptuous. Perhaps you should ask him, first.
 
Feis said:
Thanks for all the good suggestions!

A lot of those ideas (such as the master algorithms books) I would have never thought of, so I'll definitley have to check them out. However, after to talking to the proposed teacher/mentor (there's only one full time computer teacher in my school so options are limited), he made two suggestions/requirements (assuming the course builds a program):

1. Be Database-driven (he thinks that this is 'the next big thing' which shows about how much he knows)

2. Something that he at least basically knows. He can code in Java, but he isnt a programmer by trade, he only teaches to the AP curriculum, which isn't saying much, so doing things such as the unlimited precision math library are probably beyond his grasp. The other issue is my partner in the independent course is a python guy, and I might have a hard time getting him to touch lower level stuff :p
Is that a high school teacher? There are good ones out there, but in terms of finding a mentor, I think you'll have more luck once you can get to now some people in a college computer science department who have been "out in the shit," as it were.

Another good resource is obviously people who just work in the field, regardless of education.

To be frank, it kinda sounds like the guy might cause more harm than good. It just doesn't really seem to be his thing in any real way.
 
Like someone mentioned before some colleges post all the work for the courses online. If you are in the middle of loops, arrays, and arraylists you can try doing all the coursework for an introductory programming course. If you have significant experience with that stuff then you could do the 2nd level introductory coursework which at my school involved data structures like linked lists, trees, hash maps, writing test code, and debugging. At my school CSE 142 and 143 are the introductory programming courses. http://www.cs.washington.edu/142 http://www.cs.washington.edu/143 142 has a book online, 143 is only based off examples and lecture so you would have to know how to use the data structures or look up how to use them. Writing the 8-10 programs for a course, doing all the section problems, and taking the midterm and final I think would be worth a 1/2 to a full year course at a high school. That would give you clear assignments to complete and turn in that are big enough to give you a lot of time and experience but small enough to be able to bite off in a week or two and solve them and know you are right/close to right.
 
I happen to be a high school teacher, that is not a programmer by trade. I don't even teach the AP class but would find an unlimited precision project interesting. You could implement it a few different ways then run some tests to see which is most efficient speed/memory wise...

He can code in Java, but he isnt a programmer by trade, he only teaches to the AP curriculum, which isn't saying much, so doing things such as the unlimited precision math library are probably beyond his grasp.

Somewhat insulting ><
 
Back
Top