About A to Z's

As a Computer Science student at the university of Texas at Austin, there are some terms you may hear being thrown around and commonly used, that you may not have heard of. Some examples are front end, lab machine, VM, IDE, etc. These are terms used often in software engineering and UTCS, yet they are never explicitly defined or taught in a class.

The purpose of A to Z’s is to build a dictionary of CS terms used often, but never defined in (most) classes. Terms some people may expect you to know as a CS major.

This page is made so you can either search for a term you heard and want to define, or browse common terms by catagories. To search for a term hit the expand all button then cmd f on your keyboard to search. Otherwise, click to expand a category and view its terms.

UT Campus

Speedway : The yellow brick road (ha) that runs down the middle of campus. Most of the buildings you’ll need to go to will probably be right off of Speedway.

PMA/RLM : The building between Dean Keeton and the EERC, which you will probably have math classes in. The ground floor is actually the 4th floor, and you have to use the escalators to get to levels 5-7 since the elevators only go to level 8 and above. While the building is officially called the RLM, there has been a push to call it the PMA (Physics, Math, and Astronomy building) since the professor the RLM was named after was notoriously racist.

UTC : The building that’s semi-attached to the PCL, which houses some of the largest classrooms on campus. You may have some core credit classes here since they’re usually pretty big. To get to it, walk past the PCL on the right and then turn left when you see the escalators.

PCL : The Perry-Castañeda Library, which is the largest library on campus. It’s technically not open 24/7, but if you are already in the library before closing time you won’t be kicked out. There are quiet floors and collaboration floors so make sure you go to the one that suits your study needs best! There are also printers here (you have to pay for them), the Undergraduate Writing Center (they can help you write good essays), the Calc Lab (free group tutoring for those large calc classes!), study rooms you can reserve and of course, books.

SAC/WCP: The Student Activity Center, one of the two Student Unions on campus. It has Chick-Fil-A, Zen, Taco Cabana, Starbucks, and POD, which is like a mini grocery store that you can get snacks and drinks from. It was recently renamed to the William C. Powers Student Activity Center, but a lot of students still just call it the SAC.

Greg(ory Gymnasium) : The largest gym on campus, that has gymnasiums, cardio machines, weightlifting equipment, racquetball courts, a climbing wall and more. Right near the main entrance is the Amazon Hub, where you can receive and return Amazon packages (they also sometimes give out free samples of stuff).

Jester : Jester is the largest dorm on campus (split into Jester East and Jester West) and houses some of the bigger UT dining locations (a.k.a. ones that take Dine In Dollars), JCL, which is an a la carte, and J2, which is buffet style. It also has JCM (a small market), Jesta Pizza, Starbucks and a Wendy’s (also known as Jendy’s).

UTCS Courses

UDEs: Upper Division Electives are the classes you will probably start taking your sophomore or junior year when you finish the “lower division” CS courses (312, 311, 314, 429). There are usually 15-20 offered every semester, and they cover all sorts of topics.

Numbering System: The first number in a course number is the number of credit hours, which (roughly) determines how many hours of that class you have per week (it usually doesn’t include the discussion section though). Most classes are 300s or 400s. The second number will tell you whether it’s a lower division (1-2), upper division (3-7) or graduate (8-9) level class. The last number doesn’t really mean anything.

CS312: CS312 Introduction to Programming is the first CS course you will take at UT (assuming you don’t claim credit for it and go to CS314). You will be programming in Java and be taught the basics of programming (hence the name). It is one of the classes you must complete to move from an entry-level student to an upper division student (the others are CS311 and CS314). You can read more about entry-level requirements here.

CS314 (Data Structures):CS314 Data Structures will be either your first or second CS course at UT (depending on whether you claim credit for 312). You will program in Java, and will learn about different data structures and control flow structures. It is one of the classes you must complete to move from an entry-level student to an upper division student (the others are CS311 and CS312). You can read more about entry-level requirements here.

CS311 (Discrete Math):CS311 Discrete Math will be your first theoretical CS course. You don’t do any programming in 311; instead you learn about boolean logic, proofs, and a little bit about complexity classes. It is one of the classes you must complete to move from an entry-level student to an upper division student (the others are CS312 and CS314). You can read more about entry-level requirements here.

CS429 (Computer Architecture): CS429 Computer Architecture is the last class in the entry-level sequence (more about entry-level requirements here), where you will learn about the low level parts of a computer. You will learn how to write C and Assembly, and learn some common low-level exploits.

CS439 (Operating Systems/OS):CS439 Operating Systems is one of the more difficult required courses at UTCS. You will learn about how the operating system of a computer works, and implement some aspects of an operating system like a file system, user programs, and virtual memory. Operating Systems is also a prerequisite for many of the CS upper division electives. PintOS is the main project implemented in Dr. Norman's OS class.

CS331 (Algorithms and Complexity): CS331 Algorithms and Complexity is the last required course at UTCS. You will learn about common algorithms and algorithm classes, as well as the different complexity classes. Similar to Discrete Math, it’s a very theoretical course.

CS371P (Object Oriented Programming/OOP)

CS373 (Software Engineering/SWE)

UTCS Machines

Lab Machine Names : You can find a list of all of the lab machines here. They have fun naming conventions like board games, bugs, operas, and more.

Printers: There are 2 public printers in the GDC 3rd floor lab, lw303 and lw301. To print to them, you can run ‘lpr -Plw303 ’ in the terminal from a lab machine. You can also print from a URL, but it takes significantly longer because it has to go download the file. It’s just quicker to download it yourself and then print.

Places of UTCS

GDC :Gates Dell Complex

3rd Floor Lab :The 3rd floor lab (GDC 3.302) is usually what people mean when the say “the lab”. There are 85 lab machines, 2 printers (lw301 and lw303), lockers, student organization offices, and the TA stations. You’ll probably spend a lot of time here, especially during classes like Operating Systems (CS439). It’s accessible 24/7 with your ID card.

2nd Floor Lab :The 2nd floor lab (GDC 2.402) is one that most people don’t know about. It’s towards the back of the North Tower on the 2nd floor, behind the “Orange Classroom”. There are significantly fewer computers than the 1st and 3rd floor labs, but since most people don’t know about it, it’s usually quieter. There are 26 lab machines here.

1st Floor Lab/Basement Lab :The 1st floor lab (GDC 1.310) is the lab in the basement. There are 50 lab machines here, as well as lockers, a few tables, a printer (lw27) and the 1st floor TA stations (usually where graduate TAs hold officer hours).

Atrium :The atrium is the big open “lobby” area on the ground floor of the GDC with the red couches and white tables. Lots of people study and work in this area, and this is usually where companies will set up a table where you can talk to them about job opportunities and sometimes grab a snack or some swag.

Auditorium :The Auditorium (GDC 2.216) is the largest lecture hall in the GDC, and it’s towards the back left corner if you’re looking at the Atrium from the front entrance. You’ll probably have 312, 311 and/or 314 here since those classes have a lot of students. Tip: every other row has outlets under the desk, so make sure to check!

Gateshenge :The circular statue in front of the GDC.

North Tower :If you’re facing the GDC from Speedway (basically, you’re looking at the front of the building), the North Tower is the half of the GDC that is to the left of the atrium. Most professors’ offices and classrooms are on this side.

South Tower :If you’re facing the GDC from Speedway (basically, you’re looking at the front of the building), the South Tower is the half of the GDC that is to the right of the atrium. You probably won’t go here very often, but if you need to, make sure that you use the South Tower elevator (next to advising on the 2nd floor).

TA Stations :There are TA stations in the 1st and 3rd floor labs. The stations in the 3rd floor lab are in front of the lockers, at the tall tables. The stations in the 1st floor lab are normal desks, right outside the “lab” area.

The bridge :The 3rd through 6th floor have an open area connecting the north and south towers. The tables and chairs make the bridges a popular place to study. There are standing white boards in these areas for students to use.

Student Organization Offices :If you turn right at the printers in the third floor lab, you’ll be at the org offices. The div office is the first coming from the printers. It houses WICS, ABCS, HACS, Q++, CS Roadshow, and Code Orange. Next is the Turing office. It has a drawing of Alan Turing in front of the enigma machine on the wall. The next office is the ACM office. Feel free to drop in when the door is open! The last office is the incubator. The incubator houses ISSS, Egads, Freetail Hackers, and Convergent.

POB :Peter O’Donnell Building, connected to the GDC

O’s :O’s is the only restaurant “in” the GDC (technically it’s in the POB, but they’re connected). If you head down the hall towards the POB from the GDC Atrium, once you pass the orange horse statue, it will be on your right. They have sandwiches, hot entrees, drinks and snacks. It’s usually pretty packed around lunch since lots of graduate students and professors eat there.

Horse Statue :The horse statue is the orange statue in the little area between the POB and GDC. People usually use it as a landmark for directions.

UTCS Student Organizations

ABCS: Association of Black Computer Scientists is a UTCS student organization that seeks to create paths to educational and professional success in computer science for Black and other underrepresented students.

ACM: The Association for Computing Machinery is a UTCS student organization that exists to create a community among Computer Science students and anyone interested in technology. ACM holds events that serve its members and the community, and is focused on the advancement of computer science studies and research, furthering computing as a profession and a science. https://www.texasacm.org

Code Orange: An organization dedicated to enabling UT students to make a positive, lasting impact in the lives of children in underserved communities here in Austin through technical education, mentorship, and outreach. http://codeorange.io

CSBA: https://texascsba.org/index

CS Roadshow: visits local schools to share information about computing and computing careers. https://www.cs.utexas.edu/outreach/roadshow

EGaDS!: Electronic Game Developers Society(EGaDS!) is for students interested in computer and video game development. http://www.egads-austin.org

Freetail Hackers: Freetail Hackers is a UTCS club where they focus on hackathons. Most of their work revolves around organizing hackathons (collaborative programming competitions) twice a year: the main events being HackTX, a 24-hour Hackathon during the fall semester, and a 12-hour themed hackathon during the spring. https://freetailhackers.com

HACS: The Hispanic Association of Computer Scientists (HACS) is an organization that aims to empower and provide support for Hispanic and Latinx students in computer science through academic, professional, and social development. http://texashacs.org

ISSS: The Information & Systems Security Society is a student organization that focuses on cybersecurity and privacy. They give technical talks about different topics in security, as well as host Capture The Flag competitions (CTFs) where you can practice real security attacks and techniques in a safe and controlled environment. They also host Security Day, which is a day-long event where different sponsors come and give talks, UTCTF, which is a 48-hour online CTF that is open to anyone in the world (with prizes!), and HackTXCTF, which is a CTF hosted during HackTX. https://isss.io

Q++: Q++ is a student run organization out of the department of Computer Science at The University of Texas at Austin. Our mission is promoting academic success, social enrichment and community building for LGBTQ+ people in tech at UT. Q++ fosters deep connections through our mentorship program, enhances learning through our study sessions and provides a place for students to be themselves at our socials. http://texasqplusplus.com

Texas Convergent: Fosters collaboration within a multidisciplinary student body through hands-on projects, comprehensive education, and open-source philanthropic endeavors. https://www.txconvergent.org

Turing Scholars: The Turing Scholars Program is an honors program for outstanding Computer Science undergraduates. Housed in the nation's 8th ranked CS department, the program's mission is to provide a CS education that is second to none. https://www.cs.utexas.edu/turing-scholars

UTCS Ambassadors: UTCS Ambassadors organize visits to the department for high school students interested in pursuing a UTCS degree. https://www.cs.utexas.edu/undergraduate-program/admissions/schedule-visit

UTPC: UT Programming Contest (UTPC) is a chapter of the International Collegiate Programming Contest (ICPC). The International Collegiate Programming Contest is an algorithmic programming contest for college students. Teams of three, representing their university, work to solve the most real-world problems, fostering collaboration, creativity, innovation, and the ability to perform under pressure. Through training and competition, teams challenge each other to raise the bar on the possible. https://www.cs.utexas.edu/users/utpc/

WiCS : Women in Computer Science (WiCS) at the University of Texas at Austin is a non-profit organization dedicated to building a network and community of women. Our mission is to encourage and support women in computing through: outreach, professional development, academic initiatives, and social events. https://www.cs.utexas.edu/~wics/

Annual Events

Career Fair: Career Fair is, well, a career fair put on by the College of Natural Science. It happens once a semester, but most companies are hiring in the fall semester. While it is technically the career fair for the whole CNS college, most of the employers are looking for Computer Science majors. It takes place in the Frank Erwin Center, which is off of the main campus. They usually provide shuttles to and from different places on campus to the FEC every 15 minutes. The dress code is business casual, but most people also bring a backpack to hold swag and resumes. You should probably bring 10-20 resumes depending on how many companies you are planning to talk to. The list of companies (and booth locations) are usually released beforehand so you can research what companies you want to talk to. The Career Fair is usually open for 5 hours during the middle of the day, so you might have class conflicts. Some professors might cancel class, but others may not, and you would have to decide whether it’s worth skipping to go to the Career Fair.

Div Day: Div Day is a conference that empowers historically marginalized communities interested in STEM by providing opportunities to participate in discussions, speaker series, and workshops aimed to end the lack of diverse talent. It is put on by ABCS and HACS.

HackTX: HackTX is UT’s annual hackathon. It takes place in the AT&T Conference center, and runs for ~24 hours from a Saturday morning to the following Sunday afternoon. It’s a great way to create some side projects to put on your resume, all without having to leave campus! There are also workshops, competitions, and lots of free food and swag!

WiCS Hacks: WiCS Hacks is the annual hackathon put on by WiCS aimed at female-identifying students. It takes place in the GDC and runs over the weekend, often with one day for workshops and talks, and one day for the actual hackathon. It’s a great way to create some side projects to put on your resume, all without having to leave campus! There is also lots of swag and free food!

Recruiting Season: For summer internships, larger companies usually start recruiting the fall beforehand (or even earlier!). This means if you were looking for an internship for Summer 2021, many companies would start recruiting in Fall 2020! This “recruiting season” usually runs from September to November, sometimes running into December. Companies will sometimes still be recruiting in the Spring semester (especially smaller companies or startups), but as a rule of thumb, the later it is in the school year, the less likely it is to find companies recruiting since they’ve usually already filled positions.

Google Games: Google holds a day of coding challenges and puzzles in their Austin office. Get a group of friends to compete. They have swag, food, and cool prizes if you win.

Frequent Events

CTF: Capture the Flags, or CTFs, are security-focused competitions where you must complete and solve different challenges to earn points. When you complete a challenge, you get a string of text, called a flag, that you submit on a website for points. These challenges are usually related to topics in cryptography, binary exploitation, reverse engineering, networking, digital forensics, and web exploitation. CTFs are hosted by the Information & Systems Security Society, and happen every 2 weeks.

Programming Competitions: Solve programming problems as quickly as you can to earn points. Competing can expand your repertoire of algorithms, and help you prepare for technical interviews. If you like competitive programming you can take the class to learn more or join UT’s competitive programming team, UTPC.

Technology: Computer Parts

CPU: The CPU, or Central Processing Unit, is the “brains” of the computer. It’s where all of the computations are done, and it is in charge of determining what operations and calculations happen when.

GPU: The GPU, or Graphics Processing Unit, is (as the name suggests) a processor specifically designed to handle graphics and all the related calculations and operations.

RAM: RAM (Random Access Memory) provides storage for information that needs to be accessed frequently, or was just used recently. It is much, much quicker for a computer to retrieve information from RAM than it is to retrieve it all the way from the hard drive. All of the information in memory is wiped whenever the computer is rebooted, so it’s not for permanently storing things.

HDD: HDDs (Hard Disk Drives) are drives used for permanent file storage. As the name suggests, there are multiple spinning disks inside, where the information is stored. HDDs are where all of your data like documents, photos, programs, videos, etc. are stored.

SSD: SSD (Solid State Drives) are drives used for permanent file storage. Unlike HDDs, SSDs do not have any moving parts, and are thus faster and less prone to breakage. HDDs are where all of your data like documents, photos, programs, videos, etc. are stored.

Technology: Computer Operating System

Windows: Windows is the operating system created by Microsoft. It is not UNIX based, and therefore you have to install special programs to get UNIX-like functionality (like a UNIX terminal, or SSH capabilities). There are no Windows machines in the UTCS labs.

Linux: Linux is an open source operating system, and unlike MacOS and Windows, Linux is completely free. There are many different “flavors” of Linux, called distributions (or distros). The difference between different distributions is usually what package manager it uses (the program that allows you to install/uninstall programs), and what packages come preinstalled. All of the lab machines run Linux, specifically the Ubuntu distribution.

Ubuntu: Ubuntu is probably the most common distribution of Linux, because it is easy to use and feels very familiar for users who are coming from Windows or MacOS. Ubuntu uses the ‘apt’ package manager. All of the lab machines run Ubuntu 18.04 (at the time of writing), and use the GNOME Desktop Environment.

UNIX: UNIX (sometimes *NIX) is a family of operating systems that all share a common ancestor (UNIX). When people say UNIX, they are usually referring to the combined operating system families of Linux, MacOS and BSD.

Technology Terms

64-bit vs 32-bit Machine: 32-bit machines are capable of storing addresses (long numbers that correspond to a certain location in memory) that are - you guessed it- 32 bits long. This is about 4GB of physical memory (RAM). On the other hand, 64-bit machines can store addresses that are 64 bits long, which means they can store 232 times more addresses than 32-bit machines. Most machines nowadays are 64-bit machines.

Asynchronous: This usually refers to when a computer is doing multiple tasks simultaneously. Because the computer is switching between tasks you have to consider how resources are shared between the tasks that are running.

Bit: A single unit of binary information, either 1 or 0. It is the most basic unit for digital communications. Data is made up of sequences of bits.

Byte: A sequence of 8 bits. A sequence of 4 bits is a nibble. Some machines are byte-addressable, so you access any data in memory by byte.

Compile: Turn code into assembly and gather all the files to combine into an executable

Compiler: Program that turns code into an executable file

Daemon: A computer program that runs as a background process, rather than being under the direct control of an interactive user.

Debug: The process of finding and fixing issues in software

Debugger: A computer program that comes with lots of tools to help debug a piece of software. They can allow you to set breakpoints, step through instructions one by one, and inspect computer memory at a point in time.

Data Type: An attribute of data which tells the compiler or interpreter how the programmer intends to use the data. Integers, floating-point numbers, Booleans, etc. are examples of data types.

GRUB: GNU GRUB, a bootloader that usually comes with common Linux distributions. It’s one of the first things you’ll see when you boot up, and it allows you to select an operating system if you have multiple installed.

GUI: Graphical user interface, the interface that a user will see and interact with. The GUI usually encompasses the windows, menus, etc. that users interact with when using the program.

Internet Of Things (IoT): The network of physical objects—“things”—that are embedded with sensors, software, and other technologies for the purpose of connecting and exchanging data with other devices and systems over the Internet. They include things like sensors, embedded systems, smart appliances, etc.

Package manager: A collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer's operating system in a consistent manner. Since the lab machines run Ubuntu, they use apt as their package manager.

Root: A special user account on UNIX systems used for system administration.

Segmentation Fault: A fault, or failure condition, raised by hardware with memory protection, notifying an operating system (OS) the software has attempted to access a restricted area of memory (a memory access violation). Basically, this is the most common error you will encounter in CS439, and they will haunt your dreams at night.

System Call: System Call(Syscall) is the way in which a program requests a service from the core of the executing computer's operating system; furthermore, they serve an important function as the interface between the executing object of a computer program and the operating system. Common examples include: open, read, write, and close.

Tech Stack: The combination of programming languages, tools, and frameworks a programmer used to create a web or mobile application. Ex: my tech stack was JavaScript, HTML, CSS, and Bootstrap.

Virtual Machine: A virtual machine allows you to run another operating system within your own. It basically creates a new “machine” that you can use, and for the most part it’s entirely disconnected from the physical machine you’re actually using (although you can set it up so that you can transfer files between them ). A lot of students who run Windows natively use a Linux VM so that they can still use Linux tools on their computer without having to dual boot.

VPN: Virtual Private network (VPN) extends a private network across a public network and enables users to send and receive data across shared or public networks as if their computers were directly connected to the private network. Used at UT to allow Computer Science students to connect to utexas network and allow students to access lab machines at home (the most common VPN client is Cisco AnyConnect). https://wikis.utexas.edu/display/BMEIT/Access+UT%27s+VPN

Development Methodologies: Agile

Scrum: Work is broken down into sprints where a set amount of work is to be completed within the timeframe of the sprint. This style usually has short daily meeting called standup to track progress on the work. Kanban: Work is split into tickets which are tracked over a kanban board. The kanban board has several columns. Each column represents a different stage of development such as in progress, in review, and complete.

VCS (Version control system):

VCS (Version control system): a class of systems responsible for managing changes to computer programs, documents, large web sites, or other collections of information.

Git: Fully known as Githib, git is the most comonly used and referenced VCS

Git Repository or repo: A set of files and directories that you want to keep track of in git, combined with the git folder which holds all of the relevant metadata git uses.

Git Push: When you run ‘git push’, you push all of the commits and changes you made from your local machine (the one you’re physically working on) to the remote location (usually GitHub).

Git Pull: When you run ‘git pull’, you pull all of the commits and changes from a remote location (like GitHub) to your local machine (the one you’re physically working on).

Git Commit: When you ‘commit’ changes, you are taking a snapshot of your project at that point that you can revert back to later. It’s kind of like making a save point in a video game.

Git Add: When you ‘git add’ files, you are either telling Git to start keeping track of the changes on this file for the first time, or you are telling Git that there are new changes on that file it needs to keep track of.

Git Merge: Merging allows you to combine changes from one branch with another. If you are making changes on a specific branch, when you want to add those changes to the master branch, you merge you branch into the master one.

Git Merge Conflicts: Merge conflicts occur when you try to merge a branch, but the code conflicts at certain lines. In order to resolve a merge conflict, you need to decide which lines you want to keep out of the two branches (or both).

Git Branch: If you were to think of Git as keeping a timeline of all of your changes to your files, then the different branches are the different timelines. They don’t interact with or affect each other (unless you want them to), and they are useful for working on new features in a safe place where you don’t have to worry about messing up the “main code” (aka the master branch).

Git Repo/Repository: A repository (most people call it a repo) is the combination of all of your project file and all of the Git metadata that is used to help with the version control. Usually people make a new repository for every project they do.

Git Clone: When you clone a repository, you are copying a repository from a remote location (like GitHub) to your local machine. As the name suggests, you only have a copy of the repository, and any work you do in your cloned repository does not affect the original (unless you make a fork or a pull request).

Git Fork: When you fork a repository, you are making a copy of that repository into your own account. Forking a repository is usually done to work on a repository before making a pull request with your changes to the origin repository.

Git Pull Request: This is how new branches are merged into main. Often new features are developed in branches so they don’t break the main branch. When the new feature or change is ready to be merged into the main branch you create a pull request. Others can view your change and make comments. Once the change is approved it is merged into the main branch.

Git Status: Shows the status of individual documents. It shows files staged to commit (git add), and the files that have been committed (git commit -m “”).

Mercurial: Mercurial is a version control system that allows you to track changes in a codebase

SVN (Apache Subversion):SVN (Apache Subversion) is a version control system that allows you to track changes in a codebase

Perforce: Perforce is a version control system that allows you to track changes in a codebase

VCH Hosting - GitHub: GitHub is probably the most common VCS hosting website. You can use Git (obviously) as well as Subversion, Mercurial, and TFS. GitHub is a great tool to learn since it is used a lot in industry, and it’s also a great website to put your personal projects up on. You can also use private repositories (which means only you can see it) for classes!

VCH Hosting - GitLab: GitLab is another VCS hosting website. People used to use it because it gave you free private repositories, but now GitHub has updated to do the same.

VCH Hosting - BitBucket: BitBucket is another VCS hosting website. People used to use it because it gave you free private repositories, but now GitHub has updated to do the same.

Development Terms

API: An API, or Application Programming Interface is a library of code that website/application developers provide to make it easier to write code that works with their project. For example, there is a Twitter API that makes it easier to write code that interacts with Twitter.

Library: A library is a packaged set of code that you can import and use in your own projects. For example, you can import libraries that provide methods to easily interact with webpages.

Packages: A package is similar to a library, but can include entire executables instead of just functions.

Unit Testing: A software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures—are tested to determine whether they are fit for use.

Terminal/Command Line

Directory: A directory is just another name for what you would usually call a folder.

Absolute path: The absolute path is a path that leads to a file/directory, starting from the root directory (~). You can change directories to an absolute path from anywhere in the filesystem and you will always get to the same location. Example: ‘~/home/foo/Downloads’

Relative path: The relative path is a path that leads to a file/directory, starting from your current directory. If you were to call ‘cd ../foo’ from two different directories, you might end up in two different locations, as the directories you started in might have different parent directories. Example: ‘../foo/bar’

'.' : ‘.’ (in terminal you do not type the quotes) refers to your current directory. You don’t use it too often, unless you are running an executable file (which you run with ‘./foo’)

'..' : ‘..’ (in terminal you do not type the quotes) refers to the parent directory of the directory you are currently in. For example, if you had the directory ‘bar’ inside the directory ‘foo’, and you were currently in ‘bar’, then running something like ‘cd ..’ would take you up to ‘foo’. You can also chain them together to traverse up multiple directories like this: ‘cd ../../../..’, which will take you up four directories.

File permissions: File permissions tell you how certain users can interact with certain files. The three properties are read, write and execute, and the three groups that can or cannot perform these actions are a specific user, a specific group, and everybody. You can find a more in depth description here.

Executing/running a file: In order to execute or run a file (like a shell script or compiled executable), you first need to make it executable by running ‘chmod +x foo’, and then you will be able to run it with the command ‘./foo’

Bash: Bash is the most common shell you will see.

Zsh: Zsh is another shell, which is very similar to bash, but it has a lot more handy features built in automatically.

Fish: Fish is another shell, like bash, which also has very handy features included automatically.

iTerm2: iTerm2 is a terminal emulator for Macs that is more customizable than the built in Terminal app.

PuTTY: PuTTY is a simple terminal emulator for Windows. A lot of people use it to SSH into the lab machines.

man : Examples: man grep, man cp, opens the (man)ual page for the command. This has instructions on how to use the command as well as options and flags you can use with the command

Flag: Flags are options you can enable when you execute a command. For example, ‘ls’ will show all the files in a directory, but ‘ls -a’ (the flag here is -a) will also show hidden files.

cd: cd (change directory) allows you to move to a different folder. If you want to move to a folder foo, you can run ‘cd foo’. You can cd to absolute paths (like /home/user/foo/bar) or to relative paths (like ../foo to go up a directory first).

Ls: ls lists the files in the folder you’re currently in. You can add the -a flag to see hidden files (they start with .) and -l to see the permissions that have been set on each file as well as who owns it. You can also list the files in a specific folder foo by running ‘ls foo’.

Cp: cp (copy) will let you copy files and directories. If you want to copy a file foo to some folder bar, you can run ‘cp foo bar/foo’. If you want to copy a folder, you need to add the -r flag, which recursively copies over all the files in that folder too (e.g. ‘cp -r foo bar/foo’).

Mv: mv (move) will let you move files and directories, and also lets you “rename” files. If you want to move a file (or folder) foo to some folder bar, you can run ‘mv foo bar/foo’. You can use mv to rename a file by simply moving it to the new file name (and it keeps it in the same directory). So ‘mv foo bar’ renames the file (or folder) foo to bar.

Mkdir: mkdir (make directory) creates a new folder. If you want to make a new folder named foo in your current directory, just run ‘md foo’. You can also use absolute paths and relative paths.

Rm: rm (remove) deletes files and folders. To delete a file foo, run ‘rm foo’, and to delete a folder bar, use ‘rm -rf bar’ to recursively delete all files in bar (and -f so you don’t need to confirm deleting each file).

Grep: grep is a useful command line tool that can search files for strings. If you want to search some file.txt for the phrase “foo”, you can run ‘grep foo file.txt’ to see where it appears in the file.

GDB: GNU Debugger, a debugger that works on (most importantly) C and C++. You will use it a lot in CS429 Computer Architecture.

SSH: SSH stands for Secure Shell, and allows you to have access to the command line of a remote machine. If you are able to efficiently navigate a terminal, this essentially allows you to completely control a computer remotely.

X(11) forwarding: X(11) is a mechanism that allows a user to start up remote applications but forward the application display to your local Windows machine. X forwarding is an option you can enable that allows you to see the GUI of the machine you are SSHed into, rather than just having remote terminal access. It’s often very slow and not worth it.

FTP/SFTP: (S)FTP stands for (Secure) File Transfer Protocol and it allows you to transfer files to and from a remote computer. This is usually how you move files to and from the lab machines from your personal machine(s). There is a command line tool (sftp/ftp) as well as GUI applications like FileZilla (on all platforms) which can help you use (S)FTP.

SCP: SCP stand for Secure Copy, and is a protocol based on SSH used for copying files. It is now outdated, and you should use SFTP instead.

Cron: Cron is a UNIX tool that allows you to schedule commands to run at certain times and intervals (e.g. 2a.m. every morning)

Sudo: Sudo is a program for Unix/Linux computer operating systems that enable users to run programs with the security privileges of another user. This serves many uses, for example, this controls which commands a user can use on a host, allows for timestamp files to control how much time a user has these permissions for, you can view a log of which user used which command, and allow the host to give users various permissions to run certain tasks.

Markup Languages/Related

HTML: HTML, or Hyper Text Markup Language is a markup language that you use to create the content behind websites. If you have only HTML on a website, it will look very plain, because all it does is format the text and content.

CSS: CSS, or Cascading Style Sheets, is a style sheet language that allows you to specify styles, fonts, colors, etc. for your HTML webpages. If HTML provides the content on webpages, CSS is what makes it pretty.

Markdown: Markdown is a lightweight markup language that is useful for writing text files that include formatting, but are still readable when they’re not rendered in a Markdown reader. It allows you to make your text bold, italic, strikethrough, etc. as well as insert links, images, tables, lists, headers and more. You’ll probably run into Markdown (or .md) files pretty frequently.

LaTeX: LaTeX is a powerful typesetting system that allows you to write papers with inline math, diagrams, etc. that look nice without having to deal with the pain of Microsoft Word. You will frequently see lots of academic papers written in LaTeX, as well as syllabi, assignments, and other papers that professors hand out.

Programming Languages

SQL: Structured Query Language (SQL) is a language that allows you to interact with and get information from a database.

Java: An Object-oriented programming language you will use in CS312 and CS314. Used for writing general purpose software.

C: A programming language you will use in CS429 and CS439. Used for writing general purpose software as well as low level software (like the kernel of an operating system).

C++: An Object-oriented programming you will use in CS429 and CS439. Used for writing general purpose software as well as low level software.

Swift: A programming language for writing software to be used on Apple devices.

Functional: Functional programming languages are specially designed to handle symbolic computation and list processing applications. Functional programming is based on mathematical functions.

Haskell: General purpose functional programming language.

PHP: Usually used in web development on the backend, a scripting programming language.

JavaScript: A scripting programming language, usually used in web development for anything dynamic or interactive.

Bash: Used to write scripts that use command-line commands and tools.

Python: Used to write general purpose scripts, also sometimes used for backend web development.

Commonly Referred to Software

Docker: Docker is a program that allows you to make isolated “containers” which act like individual virtual machines. Docker (or any other containerization software) is lighter than a virtual machine because it doesn’t emulate an entire machine and operating system.

Discord: Discord is a text, voice, and video chatting app, vaguely similar to Slack. Many student organizations have Discord servers you can join to chat with other members, and there are even Discord servers for all of UT and UT Engineering & CS.

Editors

Atom: Atom is a GUI text editor made by GitHub which is free and open source. Since it is developed by GitHub, it has very nice Git integration, as well as lots of very useful extensions (and pretty themes!).

Emacs: Emacs is a very powerful terminal-based text editor. It is very customizable, and there are extensions that allow you to use Emacs as your email client, as your file browser and even some that allow you to play games! There is a long standing editor war (yes, really) between Emacs and Vim users. Emacs is a useful tool to learn to use because when you SSH into machines, you often won’t have access to a GUI editor.

Vim: Vim is a very powerful terminal-based text editor. It is very customizable, and there are countless plugins that you can install to shape Vim to your liking. There is a long standing editor war (yes, really) between Emacs and Vim users. There’s an ongoing joke that it’s impossible to exit Vim because the normal “quit” commands don’t work in Vim. Vim is a useful tool to learn to use because when you SSH into machines, you often won’t have access to a GUI editor, but most machines have Vim (or it’s predecessor, vi) installed.

Sublime: Sublime is a commonly used GUI text editor. While it’s technically not free, there is a free community version that you can download (it just has a permanent top banner that says your Sublime is unregistered). It also has lots of useful extensions and themes that you can install.

Nano: Nano is a terminal-based text editor. Many people find it easier to use than Vim or Emacs because the keyboard shortcuts are a) always displayed on the screen and b) closer to the keyboard shortcuts you’re probably already used to. Nano is a useful tool to learn to use because when you SSH into machines, you often won’t have access to a GUI editor.

IDEs

VSCode: VSCode is an IDE made by Microsoft that has lots of useful packages you can install. Most people use it for C/C++, although it works with lots of languages.

IntelliJ IDEA: IntelliJ IDEA is a really nice IDE for Java. As a student, you can even get an educational license to get some of the nicer features for free (for personal use).

Xcode: Xcode is an IDE for Macs. While most people use it for Swift, it supports lots of other languages.

Eclipse: Eclipse is a Java IDE, and it’s probably the one you’ll see people using the most. It has lots of nice built in tools, but isn’t the prettiest.

Android Studio: Android Studio, as the name suggests, is an IDE exclusively for Android development.

Frameworks

Pytorch: Library for machine learning, mostly for applications such as computer vision and natural language processing. It’s mostly made for python, though there’s a C++ interface as well. It has a higher performance than other machine learning libraries like keras which makes it useful for large datasets.

React: Open source javascript library for UI. Maintained by Facebook

Tensorflow: Python friendly open source library for numerical computation and machine learning. Uses Python for the front end of the API, but actual applications are executed in C. TensorFlow can be trained to learn handwriting, image recognition, word embeddings, natural language processing, and many more.

Algorithms and Theory

Algorithm: An instruction set that solves a problem or a set of problems. Binary search is an algorithm which finds the index of a target element in a sorted array. Dijkstra’s algorithm finds the shortest path between two graph nodes. Breadth first search is an algorithm for searching trees or graphs.

Big O: Notation is used to classify algorithms according to how their run time or space requirements grow as the input size grows. It represents the upper bound on the run time or space requirements.

Amortized Big O: Amortized big O is just the average big O for an operation or algorithm. Big O usually considers the worst case, but since the worst case is often an uncommon occurrence, amortized big O gives a better overview of the time complexity by looking at the average case. For example, adding to an arraylist is usually O(1). When there’s no more room in the underlying array, all of the elements are copied to the new array so the big O is O(n) where n is the size of the array. Since this happens infrequently, saying the big O of this operation is O(n) is misleading. Amortized big O reconciles this difference by taking the average. (see Big O for more information on regular big O)

Dynamic Programming: An optimization over plain recursion. Wherever we see a recursive solution that has repeated calls for the same inputs, we can optimize it using Dynamic Programming. The idea is to simply store the results of subproblems, so that we do not have to re-compute them when needed later. This simple optimization reduces time complexities from exponential to polynomial.

Inheritance: The mechanism of basing an object or class upon another object (prototype-based inheritance) or class (class-based inheritance), retaining similar implementation. Also defined as deriving new classes (sub classes) from existing ones such as super class or base class and then forming them into a hierarchy of classes. In most class-based object-oriented languages, an object created through inheritance, a ""child object"", acquires all the properties and behaviors of the ""parent object"".

Object-oriented programming (OOP): A programming paradigm based on the concept of ""objects"", which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).

Ternary Operator: Example in Java: variable = expression1 ? expression2 : expression3;. Expression1 is a boolean expression/boolean, Expression 2 and 3 are two different return values that depend on the result of expression one. If expression1 is true expression 2 is set, otherwise expression three is set. Same as the following code: If (Expression1) { variable = expression2;} else { variable = expression3;}

Turing Complete: A Turning complete system is a system in which a program can provide an answer upon being witten. Generally, if something is described as turing complete it means it can be used to solve any computational problem. Most modern programming languages are Turing complete.

Cloud Hosting Services

AWS: AWS, or Amazon Web Services, is Amazon’s cloud hosting platform. It’s the most commonly used hosting service.

Azure: Azure is Microsoft’s cloud hosting platform.

GCP: GCP, or Google Cloud Platform, is Google’s cloud hosting platform. If you attend hackathons, you will probably get a few hundred dollars in free credit for GCP.

IBM Cloud: IBM Cloud is IBM’s cloud hosting platform. It’s not used too commonly.

Feilds of Computer Science

AI/Machine Learning: Machine learning is based on the idea that machines should be able to learn and adapt through experience. AI refers to a broader idea where machines can execute tasks "smartly." Artificial Intelligence applies machine learning, deep learning and other techniques to solve actual problems.

Data Science: A field that combines aspects of computer science and mathematics to extract knowledge and insights from structured and unstructured data, and apply knowledge and actionable insights from data across a broad range of application domains.

Math/Discrete Math: the branch of mathematics dealing with countable sets (finite sets or sets with the same cardinality as the natural numbers).

MIS: The design and management of Information Technology (IT) for an organization. It focuses on the best way to enable the organization to meet its goals and business challenges. MIS students first learn the current business processes and then analyze how to improve the processes using IT.

NLP: A subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language, in particular how to program computers to process and analyze large amounts of natural language data.

Security: the protection of computer systems and networks from information disclosure, theft of or damage to their hardware, software, or electronic data, as well as from the disruption or misdirection of the services they provide.

Cryptography: the practice and study of techniques for secure communication in the presence of third parties called adversaries. More generally, cryptography is about constructing and analyzing protocols that prevent third parties or the public from reading private messages.

Theory: a subset of general computer science and mathematics that focuses on mathematical aspects of computer science such as the theory of computation, lambda calculus, and type theory.

UI/UX: User Interface/User Experience. These are two elements of a product and often come termed together as they often work closely together. User experience is defined as a human centered way of designing products, in terms of a program that includes interactions between the customer(or the user) and a program. It applies to the overall experience the user is exposed to when using a program. The term User Interface is a strictly digital term and it refers to the interaction between a user and a digital device or product. While actually a separate degree from computer science this term comes up for CS students because when designing a product one wants to keep these things in mind. Examples include when building a website, you may enter images and buttons to give it a more pleasing visual design, aka you are working on improving the UX/UI.

Historical Computer Science Figures

Ada Lovelace: Wrote one of the first computer programs. It was made to run on a machine theorized by Charles Babbage. She was also one of the first to recognize the utility of a general purpose computer.

Alan Turing: Alan Turing was a British mathematician and computer scientist who created the Turing machine (a mathematical model of a general purpose computer) and the Turing test (a test that would determine how human-like an artificial intelligence was). He also helped to crack the Enigma cipher used by the Germans in WWII. Because of the sensitive nature of this work, much of it was kept secret for years after WWII. Turing was gay, and since that was illegal in England during his lifetime, he was forced to undergo chemical castration which drove him to suicide.

Charles Babbage: Created the concept of a digitally programmable computer.

Grace Hopper: A pioneering computer scientist as well as a US Navy Rear Admiral. She invented one of the first linkers (program that combines object files into an executable). The Grace Hopper Celebration is named in her honor.

Edsger W. Dijkstra: Most widely known for Dijkstra’s algorithm (finds shortest path between nodes in a graph). He also invented the semaphore (a staple data structure of OS programming). He made contributions to a variety of areas in computer science. He was at UT from 1994 to 1999.

Linus Torvalds: Linus Torvalds is the creator of the Linux kernel, as well as the version control system Git.

Donald Knuth: Created TeX, which LaTex is based on. He also contributed greatly to the analysis of computational complexity of algorithms. He was the recipient of the Turing Award in 1974.

UT Computer Science Figures

Peter Stone: Head of Learning Agents Research Group (LARG). This is the group that the FRI stream Autonomous Intelligent Robotics is involved with. His research focus is AI, and he teaches classes related to AI and robotics.

Scott Aaronson: Head of the quantum information center at UT. He teaches the introduction to quantum information.

Mike Scott: Teaches CS312 (Introduction to Programming) and CS314 (Data Structures).

Alison Norman: Teaches CS439 (Operating Systems). In Alison’s version of OS you work on Pintos, a toy OS. There are 5 projects and you work in teams that increase in size each project (Project 0: team size 2, Project 1: team size 3, Project 2-5: team size 4). Each project is accompanied by a design doc where you must explain the design decisions in your project. Alison provides the slides from class as helpful notes.

Ahmed Gheith: Teaches CS439 (Operating Systems). In Gheith’s version of OS you have weekly projects that are completed individually. Gheith does not use slides, but it hardly matters as his students herald him as a superb lecturer.

Glenn Downing: Downing teaches software engineering and object oriented programming.

Useful Tech Career Terminology

FAANG: Facebook, Apple, Amazon, Netflix, Google. These were the top 5 most valuable American companies by the end of 2010, but a lot of people also use FAANG to describe the “big tech companies” in general.

Big 4: Usually Google, Microsoft, Facebook and then either Amazon or Apple. There’s no official definition, but it’s usually used interchangeably with FAANG to mean “big tech companies”.

Front-End: The front-end of a program is usually the user facing side, so working on the front-end usually entails work in UI/UX, design, and other visual aspects. It includes things like the visual layout of the product, the colors, fonts, and shapes that are used, and how the user interacts with the product.

Back-End: The back-end of a program is what handles all the logic and actual functionality of the product. It includes things like the infrastructure that supports the frontend, databases and other storage methods to keep data, and the code that makes the product do what it was designed for (e.g. serve websites, store and retrieve data and files, etc).

Full Stack: A full stack developer is someone who works on both the front-end and the back-end.

Software Engineer: A software engineer is someone who writes code for some type of software as their job. This is one of the most general jobs in CS (and therefore one of the most common), as software engineers work on a variety of products and projects like websites, mobile apps, desktop programs, and more.

Project Manager: A project manager is less of an engineering role, and more of a managerial role (hence the name). Project managers oversee projects from start to finish, and lead a team of engineers who usually do the actual software engineering. While project managers often do not have very technical roles in projects, they usually have a technical background which allows them to get a better feel for how long things would take to implement and what is and is not feasible.

Bay Area: The San Francisco area, which usually includes cities like San Jose, Palo Alto, Cupertino, Mountain View, Sunnyvale, Menlo Park, and others. Tons of “big” tech companies have their headquarters here (Google, Apple, Facebook, etc.) as well as hundreds of start ups. A lot of people who intern out-of-state will work here.

Pacific Northwest (PNW): A few big companies are headquartered in the Seattle or Portland area (Microsoft, Amazon, Nike, etc.) while many other companies have offices here too. A lot of people who intern out-of-state will work here too.

New York: A lot of financial/trading companies (Goldman Sachs, Two Sigma) are headquartered here, while many other companies (Facebook, Google, etc.) also have locations here.

Company Events

Hackathon:A 1-2 day event where you (sometimes with a team) come up with an idea for a piece of software (or hardware) and implement it. At the end of the competition each team presents their project, and judges decide who wins the competition based on various criteria (technical skill, originality, etc.). Many hackathons that you can compete in during school are hosted by Major League Hacking.

ICPC:International Collegiate Programming Contest, is an annual multi-tiered competitive programming competition among the universities of the world. Headquartered at Baylor University, the ICPC operates autonomous regional contests covering six continents culminating in a global World Finals every year. In 2018, ICPC participation included 52,709 students from 3,233 universities in 110 countries.

Interviewing

Coding Challenge: A coding challenge is usually something that gets sent to you in the early stages of the interview process. It will usually be a HackerRank test (or some other online coding platform) where you have to solve one or more coding problems within a set time limit.

Cracking The Coding Interview: Cracking the Coding Interview is a book that lots of people recommend getting to practice for technical interviews. It contains summaries of common topics and problems that appear during coding interviews, as well as example problems that you can do to practice.

Technical Interview/Whiteboarding Interview: A technical or “whiteboarding” interview is one where the interviewers will ask you technical coding questions. In person, you will usually write out your code on a whiteboard, and if the interview is digital you might write the code in a Google Doc or some other collaboration tool. You should always make sure to ask about edge cases and special cases when you get the question, as well as talk out your answer as you write it down. That way, the interviewer can help steer you towards the right path.

Behavioral Interview: A behavioral interview is one that involves no technical or coding questions. Usually, the interviewers will ask you about things on your resume like your experience, projects, or activities. They may also ask you things like “What is your greatest weakness/strength?” or “Tell me about a time when you worked as a team”.

HackerRank: HackerRank is a website that allows you to practice programming challenges. A lot of people use it to practice for technical interviews. It’s also what the programming competitions are hosted on.

LeetCode: LeetCode is another practice website that you can use to improve your technical interview skills. Apparently they are very close to actual interview questions.