Could you have sorted the numbers without entering the numbers in a library?

Yes - we will talk about may different options for how to work with information. At some level, though, we do need to store information (in memory). The structure is up to us (analogy: you can store music on vinyl, cd, digitally, etc. All are valid, but some have advantages over others)

How could I make the computer compare more than two numbers at the same time?

We’ll learn about comparisons; in general, though, we usually can only compare two at a time. Our brains abstractly seem to do more than this, but all formalisms of logic work primarily with binary terms.

What solution is the most simple to the number sorting question?

Great question. How about we watch some Hungarian dancers to help us figure this out?

In what ways does computer science give back to physics, in terms of the arrows you mentioned?

The world wide web was invented to solve a problem that CERN (the organization running the Large Hadron Collider) had with storing/sharing information. Experimental physicists/astronomers almost all not require programming to be able to manager the data coming out of their experiments. Physicists came up with models (such as Boltzmann machines, Markov Random Fields, etc.) that were theoretical models. Computer scientists have combined these with mathematical optimization techniques to advance these methods to handle real-world problems (my thesis used Markov Random Fields to model protein structures; Chris Magnano ’15 used a variant to model brain structure in images).

What aspects of philosophy did computer science incorporate into the discipline?

Logic, deductive reasoning are the main overlaps. Philosophers had a larger role in the early days of artificial intelligence. Currently, I think ethics and fairness are a rich area of intersection between the two disciplines (I’ll be co-teaching a course with Philosophy next year on this!)

What are differences in programming languages and why do many exist instead of having just one used and updated universally?

Just as no human language is universally optimal, there is no optimal programming language. There is a tradeoff between ease of use/simplicity (high-level languages like Python) and the need to have control over all aspects (low-level languages). One key idea in CS is that of abstraction - building layer-upon-layer, where each layer is successful if you don’t need to know what is underneath it to use it. You (hopefully) don’t need to know what programming language is used under the hood of your iPhone, and I don’t have to know how electricity works at the atomic level to program an app for that iPhone. I also probably don’t want to have to know the physical makeup of the iPhone you are using, but somebody does need to think about that. Different programming languages are suitable for different purposes.

What is the best way to take notes for this class?

I prefer pen-and-paper. Despite being in a lab, it is a lecture where I will put notes on the board. You may want to annotate your notes to specify where we did programming exercises. Since your programs will be saved, you can always refer to them later without having to write them down by hand.

How will the course be divided into units of study?

The first half is entirely cumulative - each week serves as a building block for the next. The second half considers more big-picture ideas. Take a look at the schedule for more details.

What are the sorts of questions you ask yourself that determines what makes a method or program “good” or the best way of doing it?

If I give a program a certain amount of information (e.g., 10 numbers to sort), how long does it take to run? If I give it 10 times as much input, how does that change the performance? Maybe it takes 10 times as long. If you’re trying to sort your clothes by dirtiest to figure which one to wear, that cost is fine. If you are Google, that answer will scare you (they are dealing with trillions of pieces of information) because your business will fail.

What can I accomplish with Python? What are its applications?

Almost all of my research is done in Python; all of my students who doing work in biology labs primarily use Python. You won’t be able to do “low-level” stuff as easily (e.g., create a new operating system to upend Apple), but its a great language if you do anything in the realm of data science.

I want to know if, as algorithms become more complicated, more algorithms are necessary to regulate “smaller” steps in a process.

Algorithms to solve real problems almost all break down into steps that can be solved with other algorithms. This is actually a type of problem-solving - top-down design - that makes our jobs more manageable. This is a good thing! We don’t write essays by just rambling (well, we should’t write essays that way). We come up with an outline with our major ideas, then we break down each of those ideas into sub-ideas, and so on.

What makes one coding language easier than another and why are there so many

There is literally an entire course being taught on this topic, so I’ll defer for now and we can talk about this later in the semester.

How could I make a computer sort the numbers with our algorithm?

You’ll answer this in lab 8 or 9 ;)

Is there any other type of algorithm other than sorting algorithm?

Searching, indexing, hashing, encrypting, decrypting are 5 algorithms I used to check my email. There are thousands (millions?) of algorithms that have been described, we’ll talk about some core problems to the field.

How has the field of computer science changed in recent years?

That’s a great question! I’d say that the biggest change in recent years is the ubiquity of parallel and distributed systems. There are so many interesting problems that get introduced when everything is inter-connected and on-demand. Very few real problems are solved in isolation. For example, your email use to exist on one computer that had 100s of people’s emails. But now Google has your email distributed across computers on multiple sites, with a need to have redundancy in case something breaks down. But you also need to make sure all of the copies stay in sync. In artificial intelligence, the ability to distribute mathematical calculations across multiple computers to run in parallel has revolutionized what types of algorithms we can use.

What is unix

An operating system, like Mac OS X, iOS, Windows, or Chrome. It is very friendly to programmers and is thus the most popular OS for developers. However, it underlies almost all of the technology you are familiar with. It is free and open source (although there are companies with certain versions of Unix) meaning anyone can add on, or remove aspects. Mac is notoriously a “walled garden” - it runs smoothly for the general user but you don’t have as many options to customize it to your liking. Plus, it isn’t cheap.

How similar is the coding language to a spoken language?

There is a syntax you will recognize, but there is very little tolerance for ambiguity - we desire our programs to have exactly one meaning that is clearly understood by the computer. Human language is nowhere near that.

Will we be tested on our coding skills or on theory memorization, or both?

Both.

How do you use algorithms?

Algorithms are implemented as programs. You run the programs to solve your problem.

What would a code to solve the problem actually look?

We’ll see tomorrow!

Who created the first computer, and how was it created?

Great question - I highly recommend Walter Isaacson’s The Innovators to get a really interesting history. Charles Babbage is credited with the first mechanical computer in 1822 and Ada Lovelace (daughter of Lord Byron) credited as the first programmer. Those machines barely resemble what we think of computers today - Alan Turing gets credit for the fundamental theory underlying our field. The ENIAC machine - built in 1946 at the University of Pennsylvania with some help from the Tri-Co institutions - is the first digital computer. It was 18000 vacuum tubes, weighing 50 tons and taking up 1800 square feet!

How to methodically approach a given problem.

(Insert lectures for rest of semester here)