How to prepare for Data Structures
The most defining computer science course.
First of all, here are the goods:
- Best Visualizations of Data Structures
- Wikipedia book(midterm and final)containing the majority of articles that concern data structures(perfect for test note and as a reference guide)
- Notes from my class(view only but you can essentially clone it)
- Notability Notes from a remarkable peer(not comprehensive but illustrative)
- Stackchat (the most immediate way to set your syntax straight, try the <C++ lounge>)
Second of all, you’re awesome.
Getting a good grade in data structures is one of the most important things you can do for your career in computer science/research/programming/ software/databases/pretty-much-anything. Data structures is usually the last CS weeder course, and the conceptual and curricular gateway into many upperdiv courses. All future job interviews will test what you’ve learned here, so yes this is where you start getting programming jobs. It’s the pilgrimage for runtime efficacy, the journey toward data enlightenment and the approach to many real world problems.
this is where you start getting programming jobs
‘Data Structures’ addresses the organization of memory for task-specific efficiency, and the methods by which to access, parse and modify it. You’ll be dealing with ways of assigning pointers or the primitive equivalent. You should know this class is “programming intensive”. Although you might easily understand the concepts and theory, effective code implementation of the assignments is essential for winning.
A great deal of this course’s attention is given to runtime complexity. You’ll evaluate the effect of your programs through big-O analysis and large data set handling. For instance, it’s likely you’ll have to determine all possible solutions to a sudoku puzzle. That is, you’ll have to fill in all the blank spaces in a sudoku, programatically. Take a second to think about that. Use the figure below to help your thinking.
Notice how some of the squares have the numbers 1 through 9 in them? You’ll have to build a program to test if any of those numbers 729 numbers is a fit.
Other challenges include: creating your own compression program for minimizing data, estimating all possible routes a airplane passenger could take to a destination, given a large amount of airports and an enormous set of flights. You got this, right?
Other challenges include: creating your own compression algorithm. That’s right, a program for making .zip files
The class requires a great deal of learning- and learning about learning. You’ll appreciate the variety of lectures, discussions, exercises(both conceptual and programming) and peer interactions that stimulate thought. But remember- these things aren’t easy. You’ll need to stay engaged and start early- so let’s start to prepare.
For creating the right environment for learning, here are my recommendations.
1. Form a Facebook group of peers early
This will allow you to approach your peers, and ask about their progress on their programs. It will help you time yourself. You’ll share just enough tips to be helpful and not a cheater.
2. Encourage the teacher to create a Piazza
Piazza is a very formal way to share concepts, technical difficulties, or clarify things directly with the teacher. Additionally, there could be trouble with the difficulty of the assignment. Voicing your progress on Piazza can grant you bargaining rights with the teacher.
3. Sit next to a variety of stimulating people
Sit with those that are asking questions. Sit with those who make you feel stupid by saying smart things. Sit with those who arrive early, stay afterwards and sit in front. And especially, sit and converse with those who take notes on an iPad(they’re sometimes willing to share!)
4. Stay away from certain programming partners
Pair programming is the main function for learning in ECS60(with Sean). Make good choices about who you partner with. Don’t pair with someone that’s clearly busy that quarter. Who has done poorly in the prerequisite. Who immediately annoys you. You don’t have to promise your hand to your partner. Communicate that the partnership is contingent. Test run them for the first program.
3. Create a Stackoverflow account
Stackoverflow is the perfect to clarify simplified problems. It’s fast for clarifying syntax questions. As you use it to ask and upvote questions, you’ll start to build a programming reputation
Getting psyched. Ask around and make sure you’re taking the class with the most rigorous yet accessible teacher(Sean Davis @ UCD). Get ahold of some of the previously assigned programs and do them. Recruit a peer (who you feel is solid) as a potential partner in the class.
- Redo/review/code everything you did in the last 6 months. Get used to a good editor and dev environment. I suggest you get Sublime Text 2 and Total Terminal(Mac Only). Additionally get the sftp plugin for Sublime Text 2 to upload and download files seamlessly to the submission server. Also, get another ftp client with a good file-moving interface. These will help you upload and download files immediately. This will be super useful at 11:58 when the program is due. Suggested software is the following: cyberduck, filezilla, and my fav transmit(MAC).
- While you’re at it, explore the advantages to some of the following c++ stl/std libraries: vectors, sets, and unions. They’ll be useful for the later.
- Be prepared for the following assignments: Sudoku, traveling salesmen, Dijkstra’s algorithm, Kruskal’s algorithm, Huffman encoding.
And that’s it folks
This is only my opinion, there is no one way to do well in this course. Remember however, that there are an infinite amount of ways you can get discouraged, frustrated or left behind. Be sure to come early, stay afterwards, ask questions and help others.
Note to all UCDavis students
The UC Davis computer science club is a powerhouse of engaging and helpful CS students. The mgmt and I would love to see you around this fall.