Help and Getting Started
Getting Started First, see the Getting Started page off of the CS homepage for pointers to some basic information.
Labs and Tutoring For help with course assignments, logging into the CS machines, etc., see the Labs page linked off the CS homepage for hours that our labs are open.
Course Selection and Advising For information about the programs, which courses to register for, etc., you should check the links on the CS homepage to our programs and advising information.
CS Accounts, Server, etc. This section contains information for CS majors to help get you started with logging into the CS server and do the sorts of programming that goes on in most of the CS courses
Operating System and Class Accounts Many of the CS courses make use of the CS server, which runs Linux. For courses that use the CS server, your programming assignments will be compiled and run on the CS server.
If your class makes use of the CS server, you will be given a "class account". These class accounts allow you to login to the CS server remotely and login to the computers in the CS lab and classroom (Root Hall, A-015 and A-017). The class accounts will be given to you by your instructor. The class account login names all start with cs and then the number of course. For example, CS 151 students get class accounts that begin with cs151 (e.g., cs151000, cs151001, ...). Note that the class accounts are deleted at the end of each semester. If you are a CS major and would like a permanent account on the CS server you can ask your instructor.
For courses using the CS server, you are encouraged to do your programming while logged into the server (using Putty from Windows, or another terminal client if using another OS). You should use the same program to compile your code that the instructor uses, so you are sure it will compile when your instructor grades your code.
Using Linux Most of your work on the machines in the CS labs will likely be done using the shell/terminal. This is a text-based program that allows you to navigate your files on the system, compile programs, and run commands. You can view some videos demonstrating some of the basics on the CS at ISU youtube playlist.
Unix/Linux Quick Reference Card Linux Console Tutorial Information for Beginning Linux Users Linux Tutorial Text Editors Note - you can view some videos demonstrating some of these text editor options on the CS at ISU youtube playlist.
While you are logged into the CS lab machines or CS server, you need to use a text editor to edit files. In getting started, you can use pico, nano, or jove to edit files. These text editors are relatively easy to use and show on the screen what control keys need to be pressed to do different things (e.g., ctrl-x to exit).
Once you are comfortable using the shell/terminal and one of the basic text editors, you should learn either vim or emacs. vim and emacs have many useful features for programming that the basic text editors do not. But they do not show on screen what commands are needed to do different things, so you'll have to have a reference to check against until you remember them.
How to get started? When getting started with a new text editor, you should search online for a tutorial to follow along (e.g., search for jove tutorial). Once you are familiar with the basics of using the editor, search online for a reference (e.g., search for jove reference) that will give a short summary of the most important commands.
Graphical Editors The editors mentioned above are all plain-text editors, meaning they can be used from Putty as well as when you are logged into the lab machines. For editing files when you are not using Putty, you can use a graphical editor as well. Some that people have liked include Notepad++, Kate (KDE Advanced Text Editor), and Atom. You can also use MS Visual Studio, Eclipse, or other IDEs to edit text files. Some of these have the ability to let you edit files that are located on the CS server by entering your login credentials; note that this is unsupported, and we won't help you to get it working.
Logging into CS Server Remotely You can view videos of the installation and use of the software mentioned here on the CS at ISU youtube playlist.
Working Remotely on the CS Server From Windows - To login to the CS server from a Windows computer, you should install the Putty software. Putty is a shell/terminal that runs on your computer and sends the commands to the CS server. This allows you to edit files on the CS server, compile using programs installed on the CS server, etc. To install, follow the Installing Putty on Windows instructions.
From Mac or Linux - To login to the CS server from a Mac or Linux, you do not need to install putty. Instead, you can open your terminal or shell program, and then type "ssh email@example.com". On a mac, you find the shell by going to Finder, then Applications, then Utilities, then Shell or Terminal.
Transferring Files To/From the CS Server To transfer files between your computer and the CS server, use an sftp program. This can be a text-based sftp program (one comes pre-installed on Mac and Linux, and one comes with Putty for Windows). Or, you can use a GUI sftp program. FileZilla is a GUI sftp program that works on Windows, Mac, and Linux. WinSCP is another popular GUI sftp program that only works on Windows. If given an option of what port to connect to, use port 22 (this is the "secure" port, so data is encrypted while transferring over the public internet).
Other Software If you want to develop on your own computer without logging into the CS server you have a few options...
MS Visual Studio - the best option to develop GUI programs for Windows, not a good option for developing for Linux. Eclipse - a cross-platform IDE that can be used for Java, C/C++, and some other languages. Cygwin - software that installs a shell/terminal and associated programs on your Windows computer so that it works pretty much like the CS Linux machines. If you select the option to install gcc/g++ and emacs/vim, then you can work on your programs on your local Windows computer with basically the same environment as the CS Linux computers. Programming Languages Many of the CS courses use C and C++. If you are a new graduate student or a transfer student, you should get started by making sure you can connect to the CS server with Putty or another terminal program. Once you can connect, you should familiarize yourself with linux shell commands (see the Unix/Linux Quick Reference Card linked above). You should also learn to use one of the text editors mentioned above.
For CS courses that use C and C++, the gcc and g++ compilers are normally used. These are already installed on the CS server. If you have a C or C++ program, you compile it by first logging into the CS server using Putty or another terminal program and typing
gcc code.c -o outputName for C, or g++ for c++. You run the resulting program by typing ./outputName (and then enter/return) at the shell prompt (aka command line). You should make sure your C/C++ programs compile and run using gcc/g++. Note that programs made using MS Visual Studio or some other compiler will normally not work straight away with gcc/g++ because there are some differences in which functions are included in the header files. Tutorials and Reference For a review of C and C++, you can look at various tutorials and references online and courses from other universities that teach these languages. The following is a list of resources we have used in the past; there are many others online as well.
The C Book C Programming Tutorial Fresh2fresh C Tutorial C Programming Wikibook How to Think Like a Computer Scientist C++ Version The C Programming Language by Kernighan and Ritchie cplusplus.com MIT course - Practical Programming in C Introduction to C - course at Cornell Practice Programming Problems To practice C/C++ programming, first start by following a tutorial and writing the programs the tutorial shows you. Once you are reasonably familiar with all the syntax rules, start trying "programming contest problems". These are problems with precisely defined correct output, so that you can submit your program to make sure it is 100% correct.
Hacker Rank - very user-friendly, different programming languages available, different categories of questions Practice problems at open.kattis.com (sort by difficulty or solved % to try the easiest ones first) ISU ACM Club's Contest Problem page A few simple practice problems, with solutions to some on the CS server. See the .txt files.
Should you buy your textbooks? Find a copy for a reasoanble price, and yes, purchase it. You will be more likely to actually read it if you have a copy (rather than trying to borrow a copy or something). If you are getting a CS degree you should want to learn the course content. Also, not everything you need to know is covered in lecture (there just isn't enough time), and it's up to you to fill in the gaps.
Positions in the department We consider all CS students whenever we have an opening. The most important qualities we consider are how well you do in your courses (are you one of the top few students?), how responsible and hard-working you are, and how well you communicate and interact with others.
Finding information at ISU Think of what the department might be called, and try going to ISU A to Z and searching using the browser's search option (ctrl-f). Also, see http://www.indstate.edu/services/express for undergrads, and http://www.indstate.edu/gradexpress grad students.
How to contact your professors Check your professor's class schedule (see the schedule of classes linked off the department homepage). You can normally catch a professor just before or just after one of their classes, and then ask them when you could come to their office or how they prefer to be contacted. Once the semester starts office hours will be posted outside of each professor's door.
Why are you Here? Ask yourself why you are paying ISU thousands of dollars for a degree? Presumably because you are interested in CS and also want to get a job in CS after graduating. This will only happen (getting a job in CS) if you take your courses seriously and put your full effort in. Weak students who do not do their best, or try to get others to to their work, have little success in securing good jobs after graduating.
Programming and Linux Many professors (Exoo, Sternfeld, Baker, Kinne) require students to turn in assignments on the CS server. For these courses you will be given an account for the course, and will do all your programming assignments for the course on the CS server with your class account. To be counted as correct, in these courses your program must compile and run on the CS server. See the Getting Started page linked off the CS homepage for help in getting started on the CS machines.
Planning Ahead You should begin to think about applying for jobs at least one year before you will do so. If you wait until you graduate to think about how to get a job after graduation, you will not be as successful. Some of our graduates have decided to complete an industry certification program (e.g., from Microsoft, Oracle, or Cisco) to increase their chances of getting a job after graduation; we have been told this can take about one year from when you begin.
For both on campus jobs and jobs after graduation, you wil benefit by doing well in your classes - (i) doing well better prepares you, (ii) having a higher GPA looks better to prospective employers, and (iii) your professors can give you good recommendation letters if you have done well in their classes. It really does pay off to do your best in your classes.
On Campus Jobs You can view available on-campus jobs by visiting http://jobs.indstate.edu/ and clicking on the appropriate category for you. Make sure to check back regularly because jobs might not all be posted by the beginning of the semester. To apply for a position, you need to apply online; it will normally not do you any good to contact the department in person as well. Make sure to submit all documents that are asked for (e.g., resume, transcripts, cover letter). A cover letter should briefly explain your background and interests, and indicate enthusiasm for the position you are applying for. For the resume, you can find examples online to get ideas for the appropriate format and contents; as a general philosophy, you should be very positive about yourself, but do not ever lie (e.g., do not say you know Java if you do not). For additional help in writing your resume and cover letter, you can contact the Career Center or more senior CS students.
Note for new students. The application system asks you to list some number of references. You can list professors who you will have in class or the Director of CS, but they will not be able to say much about you other than what they might know from your transcript. It is better to list a reference that knows you (possibly someone you had in previous studies or work). Once you have been in class long enough to have had some assignments or exams graded, the professors you have in class might able to give more support in a recommendation for you. And always check with someone before listing them as a reference.
Knocking on Doors If you knock on a door and there is no answer, DO NOT try to open the door. This is considered to be very rude.
If you decide to be rude and try to open the door and find nobody is in the office, DO NOT go inside and start looking through things in the office. This is considered trespassing (a crime).
If you are around long enough and interact with enough people, you will see some strange things.
Programming Assessment - How to Make Sure You'll Pass Come to all review sessions that are offered when you are free. Take the assessment each time it is offered. You don't really know what it will be like until you try to take it for real. Any failed attempts do not count against you. Pick a problem type that is easiest for you, and practice just that type of problem. Visit the lab and ask the GAs to take a look at what you have. Come ask myself, Steve Baker, or Geoff Exoo to take a look. Once you have that problem type mastered, pick the next easiest for you. Follow tutorials online for C programming (not C++, this is in C). Watch videos. There are many options to choose from. Form a study group with others in your class, work on problems together and help each other out (not during the test itself, of course). Programming Assessment - What if You Cannot Pass it The policy will be enforced, you will be given an incomplete with a due date of the first day of the spring semester, you would be given one last chance to take the assessment before the grade becomes the default (F for 685, 695, 699, C for 500 [assume there isn't some other reason you would get an F], C- or lower for 202, U for 499).
The policy is the following: for CS 499, 685, 695, 699 you must pass the assessment to pass the class, for CS 202 you need to pass the assessment to get at least a C, and for CS 500 you need to pass the assessment to get higher than a C. Note that for all of those, there could be other reasons to earn a low final grade (e.g., even if you pass the assessment, if you fail your exams, don't come to class, etc. you would be given the grade you earned based on your coursework). The assessment is given multiple times per semester. You need to take this seriously and follow the above advice.
Programming Assessment - Why A computer science degree is different than information technology, computer information systems, and other degrees that are computing-related. A person with a CS degree should have many useful and important skills and knowledge - programming, problem solving, how computer systems work, debugging techniques, abstract thinking, etc. If we were to pick one single skill a CS graduate should have, it is to have mastered basic programming (which does require a bit of problem solving, debugging, abstract thinking, etc.).
The programming assessment is a single well-defined objective that all CS faculty can agree all graduating CS students should be able to pass. This is a minimum standard that we expect of all of our graduates. Enforcing this standard is good for students because - (a) it clearly communicates expectations, and (b) allows students and faculty to say that uniformly any ISU CS graduate can do basic programming.
Programming Assessment - Grading The programming assessment is graded very strictly so that there are no judgement calls in grading it - answers are only scored as correct if they are free from any kind of error, and are only scored as half correct if your answer has (i) the right start and (ii) does not have anything that makes little sense or clearly conveys that you are not on the right track. Passing the assessment is only meaningful if it is scored this way - when you pass we can say with 0 doubt that you mastered these problems. This also removes subjectivity from the scoring.
We realize this grading is strict, so we do everything possible to get you ready for the assessment. The assessment is offered multiple times throughout the semester, failed attempts do not count against you, programming review sessions are offered most weeks, faculty will give you feedback on your attempts any time you ask, and the unix lab is open 34 hours per week with a lab assistant on duty who can help you practice. Take advantage of all of this as needed.
Email Lists The CS faculty maintain a variety of email lists used to send announcements and keep in touch with the CS students and faculty. Each is described briefly below. Click on the link to a list if you wish to subscribe to the list or modify your subscription, or send email to Jeff Kinne at firstname.lastname@example.org.
For those authorized to send email to the lists, you send email to the name of the list followed by @cs.indstate.edu. So to send email to the CS undergraduate students, you would compose a message to cs@email@example.com. If you are not authorized to send a message to the list, it will be automatically ignored by the email system.
Students (cs-ugrads, cs-grads) These email lists are used to contact Computer Science majors (both undergraduate and graduate) about events in the department, job opportunities, etc. The lists are updated each term to include the currently enrolled and active majors of the department. There is one list each for: cs undergraduate students, cs graduate students.
Note: students do not need to sign up for these lists as long as you have declared your major by the beginning of the semester; if you have, you are automatically put on the appropriate email lists.
Alumni (cs-alumni) This email list is used to contact CS alumni about job opportunities or anything else that would be relevant to alumni. The list is updated each term to include those who have graduated. The list page is at http://cs.indstate.edu/mailman/listinfo/cs-alumni/
Chat (cs-chat) This email list is used to allow CS students to communicate with each other. Students who are added to cs-ugrads and cs-grads are also added to this list. The difference is that students can post to the list - questions, announcements, etc. - and faculty in general do not look at the messages. Students can ask for advice on courses, inquire about used books, notify others of free food in the lab, organize a study group, ask about advice for restaurants or where to live, etc. You should not post anything that is illegal, inflammatory, or inappropriate. The list is moderated by CS student officers of the ACM club, and faculty will be notified of anything inappropriate. New graduate students are added to the list once they have an ISU email address. You can only post to the list using your ISU email address, and you would send your message to firstname.lastname@example.org. The list page is at http://cs.indstate.edu/mailman/listinfo/cs-chat/
Faculty This email list is used to contact Computer Science faculty. The list is managed (not open to subscription requests). The mailing list is cs-faculty.
Computing majors If you are interested in computing, at ISU your options are Computer Science, Information Technology, or Management Information Systems. There is a fair amount of overlap, but roughly - (a) CS is mostly about making software and making it efficient, (b) IT is about managing computer systems and networks, (c) MIS is about managing both computer systems and personnel. The most common job titles for those graduating from CS are - programmer/developer/software engineer of various kinds (web, database, network, systems, ...). If you do not want to be a programmer, consider whether CS, IT, or MIS would best suit you.
CS at ISU Most programs that are called "Computer Science" have a common core in common so that you should get a similar experience at most universities that offer CS. After finishing any CS program (including at ISU), you should be a decent programmer in a few different programming languages, can use the right data structures and algorithms for different problems, understand precisely how modern software systems (e.g., operating systems, web servers, 3d graphics) work and are programmed, and have completed a few nicely sized software projects.
Getting Ready If you have done some work in computing before and want to do something extra to get ready for CS at ISU, here are a few things you can do.
Code.org - go do some of their tutorials. These are mostly aimed at middle-school aged students, but is great experience and fun. Hackerrank.com - create an account and start doing basic programming problems. This site is great because your answer won't be accepted until it is 100% correct. CS 151 - check out Jeff Kinne's video lectures from CS 151, the first course in our major. AI - video playlist from high school summer honors course at ISU from 2017. Get a copy of Introduction to Algorithms (any edition) and start perusing it. App Inventor - make apps for Android. See our Getting Started page (including links at bottom of that page). Be a nerd or geek, and watch youtube videos about science and technology. For example, It's Okay to be Smart or Physics Girl Install linux on one of your home computers (Ubuntu and Mint are pretty easy to use). Note - do it on a computer that doesn't have any important data on it... You can also do this by first installing VirtualBox in your current operating system and then install linux inside of that. Some key ideas in CS and examples - Algorithm - linear search vs. binary search, selection sort vs. merge sort, euclid's algorithm vs. trial division Proof - there are infinitely many primes, the halting problem is uncomputable, the square root of 2 is irrational, the sum of an arithmetic series [1 + 2 + ... + n = n*(n+1)/2] Data speeds - tape vs. hard disk drive vs. RAM vs. CPU cache vs. CPU registers Abstraction - operating system virtual memory, RAID, object-oriented programming, file system, any API, any programming language Assembly language - little man computer (simulator) Some classic beginning programming projects - Encryption - Caesar cipher, substitution cipher, Vigenere, RSA, and others Letter and word frequency - used in breaking substitution cipher, used in AI Chatbot - responds in a reasonable way to many text, see Eliza ("the doctor") Choose your adventure game 2d maze/dungeon crawler Arithmetic quiz and tables - for kids learning their math facts Paint Drawing shapes - regular polygons, stars, fractals Board game - tic tac toe, connect 4, chess, you name it Calculator - with usual operations but also with your own cutsom ones