r/computerscience Mar 13 '25

How does CS research work anyway? A.k.a. How to get into a CS research group?

165 Upvotes

One question that comes up fairly frequently both here and on other subreddits is about getting into CS research. So I thought I would break down how research group (or labs) are run. This is based on my experience in 14 years of academic research, and 3 years of industry research. This means that yes, you might find that at your school, region, country, that things work differently. I'm not pretending I know how everything works everywhere.

Let's start with what research gets done:

The professor's personal research program.

Professors don't often do research directly (they're too busy), but some do, especially if they're starting off and don't have any graduate students. You have to publish to get funding to get students. For established professors, this line of work is typically done by research assistants.

Believe it or not, this is actually a really good opportunity to get into a research group at all levels by being hired as an RA. The work isn't glamourous. Often it will be things like building a website to support the research, or a data pipeline, but is is research experience.

Postdocs.

A postdoc is somebody that has completed their PhD and is now doing research work within a lab. The postdoc work is usually at least somewhat related to the professor's work, but it can be pretty diverse. Postdocs are paid (poorly). They tend to cry a lot, and question why they did a PhD. :)

If a professor has a postdoc, then try to get to know the postdoc. Some postdocs are jerks because they're have a doctorate, but if you find a nice one, then this can be a great opportunity. Postdocs often like to supervise students because it gives them supervisory experience that can help them land a faculty position. Professor don't normally care that much if a student is helping a postdoc as long as they don't have to pay them. Working conditions will really vary. Some postdocs do *not* know how to run a program with other people.

Graduate Students.

PhD students are a lot like postdocs, except they're usually working on one of the professor's research programs, unless they have their own funding. PhD students are a lot like postdocs in that they often don't mind supervising students because they get supervisory experience. They often know even less about running a research program so expect some frustration. Also, their thesis is on the line so if you screw up then they're going to be *very* upset. So expect to be micromanaged, and try to understand their perspective.

Master's students also are working on one of the professor's research programs. For my master's my supervisor literally said to me "Here are 5 topics. Pick one." They don't normally supervise other students. It might happen with a particularly keen student, but generally there's little point in trying to contact them to help you get into the research group.

Undergraduate Students.

Undergraduate students might be working as an RA as mentioned above. Undergraduate students also do a undergraduate thesis. Professors like to steer students towards doing something that helps their research program, but sometimes they cannot so undergraduate research can be *extremely* varied inside a research group. Although it will often have some kind of connective thread to the professor. Undergraduate students almost never supervise other students unless they have some kind of prior experience. Like a master's student, an undergraduate student really cannot help you get into a research group that much.

How to get into a research group

There are four main ways:

  1. Go to graduate school. Graduates get selected to work in a research group. It is part of going to graduate school (with some exceptions). You might not get into the research group you want. Student selection works different any many school. At some schools, you have to have a supervisor before applying. At others students are placed in a pool and selected by professors. At other places you have lab rotations before settling into one lab. It varies a lot.
  2. Get hired as an RA. The work is rarely glamourous but it is research experience. Plus you get paid! :) These positions tend to be pretty competitive since a lot of people want them.
  3. Get to know lab members, especially postdocs and PhD students. These people have the best chance of putting in a good word for you.
  4. Cold emails. These rarely work but they're the only other option.

What makes for a good email

  1. Not AI generated. Professors see enough AI generated garbage that it is a major turn off.
  2. Make it personal. You need to tie your skills and experience to the work to be done.
  3. Do not use a form letter. It is obvious no matter how much you think it isn't.
  4. Keep it concise but detailed. Professor don't have time to read a long email about your grand scheme.
  5. Avoid proposing research. Professors already have plenty of research programs and ideas. They're very unlikely to want to work on yours.
  6. Propose research (but only if you're applying to do a thesis or graduate program). In this case, you need to show that you have some rudimentary idea of how you can extend the professor's research program (for graduate work) or some idea at all for an undergraduate thesis.

It is rather late here, so I will not reply to questions right away, but if anyone has any questions, the ask away and I'll get to it in the morning.


r/computerscience 9h ago

Does Wait-Free require Garbage-Free?

7 Upvotes

Wait-Free means that every thread must finish its operation in a bounded number of steps. That bound can be arbitrarily high, e.g. dependent on the number of concurrent threads, but it must be finite. And the finite bound must be there in all cases, i.e. it is not sufficient to say that an algorithm "usually" finishes "reasonably" (i.e. "usually" does not spend unbounded times helping other threads).

The first practical implementation of a multiple-enqueuer multiple-dequeuer Wait-Free Queue was proposed by Kogan and Petrank. The key idea is that threads help each other, but in a way that newer threads (more precisely: newer operations) are obliged to help older threads (operations), but not vice versa. Also, plainly said: If a thread cannot make progress with its own operation, it becomes older and older, up to the point when all other threads are obliged to help (only) him, thus ensuring the Wait-Free progress.

The issue of the Kogan and Petrank Queue is, however, that it is based on a linked list of nodes. This means that its operations constantly produce memory churn, also require memory allocation and memory clean-up. From Java - where the clean-up is done by a Garbage Collector - I borrow the term "Garbage".

Now, the problem is that Wait-Free memory allocation is problematic. Imagine, e.g., when the process needs a new memory page from the operating system. Can this ever be made Wait-Free?

Memory reclamation in a concurrent setup is a complex topic on top of that. One of the key questions here is: When can a memory block be freed safely, i.e. how do we "know" that no thread has a pointer to it anymore?

Given this, it appears that one needs a structure without memory churn (i.e. Garbage-Free) to be able to make it Wait-Free. At least practically.

I would be grateful for a discussion on this.

Additional info:

Here I have combined the Multi-Array Queue (which is Garbage-Free by nature (except of the extension operations, of course)) with the Kogan and Petrank idea, with the aim to obtain a Queue that is Wait-Free unconditionally.

The GitHub repo also contains a visual simulator to illustrate the principle:

https://github.com/MultiArrayQueue/WaitFreeMultiArrayQueue


r/computerscience 17h ago

General How does Lean work?

20 Upvotes

In light of the recent counterproof of the Jacobian Conjecture, I've been looking more into proofs, and I can't wrap my head around how Lean works. In my mind, proofs always require a certain amount of intuition and judgement behind them, so I'm confused how a deterministic programming language can infer from said proofs?


r/computerscience 8h ago

Why does the CPU’s size matter?

0 Upvotes

Why does it matter if it’s a 16-bit cpu, a 32-bit cpu, or 64-bit? For example, what can a 64-bit cpu do that a 32-bit one can’t? Or otherwise, and can you tell the difference when you casually use a computer?


r/computerscience 1d ago

Discussion Is the standard Word RAM model becoming too disconnected from modern algorithmic theory?

24 Upvotes

I was re-reading Frigo et al.'s paper on cache-oblivious algorithms recently, and now i'm thinking about how heavily introductory algorithms courses rely on the uniform-cost Word RAM model. We teach time complexity based on unit-cost memory access, but in memory-hierarchy model theory (like the External Memory / I/O model by Aggarwal and Vitter), asymptotic bounds depend heavily on block size $B$ and cache capacity $M$.

Feels like there's a gap in how we teach foundational complexity versus cache-aware algorithmic analysis. Obviously the RAM model's simplicity is ideal for proving basic asymptotic bounds, but at what point does it obscure important theoretical properties of data structures on hierarchical memory?

Would like to how other departments go about introducing cache-oblivious models alongside standard Big-O analysis in upper-level theory courses.


r/computerscience 15h ago

Is it possible to have pixels run on 1 PC per pixel?

0 Upvotes

What I mean is 1080p has 2,073,600 pixels so what if every single pixel is run by a individual PC like 2,073,600 PCs?

I was thinking this might be a way to create a super-computer that can put out a insane amount of framerate.


r/computerscience 1d ago

General what’s the connection between union-find and the inverse ackermann function?

18 Upvotes

while doing competitive coding problems i frequently come across solutions that use union find (DSU) and list the big O of their solution as O(\alpha(n)) where \alpha(n) is the inverse ackermann function. after some surface level research, i have come away with many more questions than answers. So why is the DSU related to the ackermann function, and is there an intuitive or natural connection between the two ?


r/computerscience 1d ago

Advice how would you introduce comsci to a person who knows nothing about computers and programming and such ?

0 Upvotes

title says it all


r/computerscience 2d ago

The Message Arrived. Did the Operation Succeed? On End-to-End Arguments in System Design.

Thumbnail mohamed.computer
0 Upvotes

r/computerscience 2d ago

Article Using Verification to Eliminate Bugs in nftables

Thumbnail basis.ai
2 Upvotes

r/computerscience 4d ago

It feels fundamentally wrong to use packages without understanding concepts under the hood

41 Upvotes

I have recently started coding and people are recommending tools for development such as vite, nodemon, jwt, boiler plate server code

It feels pointless just using them with a basic understanding and without no deep conceptual understanding. Is this the right or wrong approach? How would you know going too deep into a rabbit hole and becoming overkill


r/computerscience 4d ago

Help how could the positive output of a gate, be used for a negative input for another gate? (im completely new)

Post image
29 Upvotes

im not into computer stuff, but this has been bugging me since i watched some free courses.


r/computerscience 5d ago

Why is a Word (a 16-bit unsigned integer) called a "Word"?

116 Upvotes

r/computerscience 5d ago

Visual, interactive explanations of classic data structures (ring buffer, priority queue, bloom filter, LSM tree...)

Post image
69 Upvotes

Made this while re-learning some structures I hadn't touched since undergrad — each chapter has an animation synced to the explanation as you scroll, plus where the structure actually shows up in real systems (kfifo, RocksDB, Dijkstra's algorithm, etc). ledger.khushal.net — feedback on what to cover next welcome.


r/computerscience 4d ago

What does "Design an algorithm before starting to create your program" mean?

11 Upvotes

r/computerscience 5d ago

Discussion How many truly concurrent operations occur on a home computer?

0 Upvotes

About 15 years ago I discovered that despite the number of cores a CPU had, the system could only carry out 1 read or write operation at a time. Before that I held an incorrect notion of what multitasking was.

My basic question is, has anything changed?

I hear terms like parallel processing being waved around as though daring me to infer that processors these days can write to more than 1 memory address at the same time.

To clarify once more. I'm talking about at the same exact time. Not during a clock tick. Actual simultaneity.


r/computerscience 6d ago

General Suggest books that bridge the gap between pop science and textbooks.

1 Upvotes

Similar books: Grokking's Algorithms, Inside The Machine, Code by Charles Pretzold.


r/computerscience 7d ago

Advice Looking for recommendations for computer science content to watch.

19 Upvotes

Someone who goes over computer architecture or even a network switch, in an enthusiastic and structured way. Just looking for general content to watch as a refresher.


r/computerscience 7d ago

Discussion question about RAM

38 Upvotes

Im learning about comuter components I had some questions .If a Hard Drive stores all the data does RAM just create an environment for the specific program that was fetched to run? If you were to run a program on the actual hard drive is it just harder because you have to navigate through all the other information sharing the space. Like going through a maze constantly again and again. Also what does SSD do?


r/computerscience 7d ago

hi dumbass here

0 Upvotes

I want to ask real humans this question. How do LLMs and other automated programming models deal with integer overflow? Even when coding games some time basic math for calculating level changes can crash systems and servers. So how often does this happen with these machines and data centers?


r/computerscience 9d ago

Discussion How are folders with files in it being stored in data?

50 Upvotes

I know that folders and files are saved as binary code in memory via hard drive, usb sticks, RAM, ect.

I dont know know about folders. On the internet there's no answer other than "as binary in memory" but I already know that, how are folders being saved as data?

My first thought was, that in every file, there's information for where its stored, but what about empty folders? What file says that that folder exists?

edit: now with the help of the guys in the replies, i now know how they work. with something called "inodes" on some opperating systems


r/computerscience 10d ago

Advice How to solve problems

16 Upvotes

Hello, I am an undergraduate computer science. I finished a course about complexity classes, algorithms and reductions. I am looking for information/literature on how to use this theory to apply it to any problem. I don't have a lot of knowledge about it, outside of the theoretical definitions I learned like the classes P and NP.

To illustrate, I give an example of a problem: "What is the minimum amount of digits needed in a sudoku grid to ensure that there exists a unique solution?"

Given a problem like this, I would like to be able to:

- Classify the difficulty of the problem in some way

- Determine whether a solution exists, and if so, if it can be found

- Apply generic methods, heuristics, reductions... to find a solution

In general, I'm wondering how many methods one needs to know to tackle most problems like this. I'm looking for literature from a mathematical or computational point of view.

Thanks in advance


r/computerscience 10d ago

General What are the limits of lock-free data-structures?

20 Upvotes

When I look at various lock-free data structures, I always see versions of the traditional data structures in their lock-free forms (queues, stacks, etc..). I was wondering if there are any data structures that are not possible to be implemented in a thread-safe manner without locks, or what the limits are of lock-free data structures. thx


r/computerscience 13d ago

What term would better fit Computer Science as a field of study?

45 Upvotes

r/computerscience 12d ago

Help Genetic Algorithms vs PPO

Thumbnail
0 Upvotes

---

*TL;DR: How does a PPO keep track of the relationships between input neurons, output neurons, weights, desired result and actual result? Does it save in disk every single possible combination?