High School Computer Science Research: The Complete Guide from “Hello, World!” to the Real World
By Ross Greer
PhD Candidate in Electrical & Computer Engineering at the University of California, San Diego
7 minute read
These days, it seems like each month we see an amazingly cool computer technology emerge; in the past year, DALL-E gave us art, ChatGPT helped us write our essays, and autonomous robo-taxis have begun to transport us safely through big cities. There’s a lot to be excited about!
These are all incredible results of incredible efforts, and even though these things seem brand new, they are built on the foundations of decades of computer science research (in fact, Alan Turing’s seminal paper on AI was published back in 1950!).
In this article, I’d like to introduce you to ways that the fun-loving and fast-moving community of computer science researchers functions – that is, how do computer scientists create research projects and share their ideas with the world?
Create a research project tailored to your interests and your schedule
Polygence pairs you with an expert mentor in your area of passion. Together, you work to create a high quality research project that is uniquely your own. We also offer options to explore multiple topics, or to showcase your final product!
It’s important to keep a few big-picture ideas in mind when we talk about computer science research.
Research is an iterative process; we build on top of foundations (principles that act as building blocks or ways to think about problems). These are often mathematical in nature, and independent of our choice of programming language.
By doing this, we seek to push the boundaries of computer science, also known as advancing the state of the art.
When we are doing computer science, we usually demonstrate our ideas through computer programs; in other words, computer programming is a tool we use to realize (make real) computer science ideas. Using Python, Java, or HTML is not the computer science itself; these are the tools we use to do computer science and computer engineering.
In this blog post, I’d like to introduce three common stages of computer science research:
Scoping a Project
Working on a Project
Completing a Project
Before we dive into project scoping, let me briefly introduce myself: I’m Ross, a mentor with Polygence. I conduct research in artificial intelligence and computer vision on two teams - the Laboratory for Intelligent & Safe Automobiles (LISA) and the Center for Research in Entertainment & Learning (CREL)at UC San Diego. One of my favorite parts of my work is mentoring students in research as they investigate and explore their curiosities, and my hope is that this blog post will help you in designing your own research plan.
Computer science research can be both exciting and overwhelming, and sometimes it’s hard to separate the exciting things we hear about in the news from the years of work and development that led to the results. When you’re embarking on a new project or working on an existing one, it’s important to be realistic about how much you can do on a small (or solo) team and any timeline you set for yourself. A lot of my job as a mentor is to help you find the best project scope for you, considering your current background, what skills you would like to develop, and what you would like to learn and explore. Because I work with autonomous vehicles, many students let me know in our first meeting that they would like to make a self-driving car – an awesome endeavor! At this point, I get to deliver some mixed news: the bad news is, there are university labs and companies of thousands of people with decades of experience who are struggling towards just a small piece of this puzzle, but the good news is, there are so many puzzle pieces that we can usually find one that can be an interesting and fun learning experience (and sometimes, even a novel research contribution)! In the rest of this section, I’ll refer back to this ambitious “self-driving car” example; this analogy applies well to most computer science research domains.
From my experience mentoring students, I have found that most projects typically evolve into one of three categories. I’ve included here a brief description of the categories, some pros and cons of completing a project in each category, and a recommendation that speaks to your experience as a student.
Projects to learn and explore foundations
In this style of project, you explore a problem by learning the fundamental approaches that past research has established. You will learn new ways to think about or frame the problem, and identify ongoing challenges and questions. Programming technology may come and go, and the state-of-the-art will always change, but the underlying principles will serve you throughout your college coursework and research.
Develop problem understanding and research maturity.
Learn a strong fundamental mindset for approaching later university work or joining a lab team.
Practice programming using established code libraries and your own algorithm implementations.
Typically will not lead to a significantly novel research contribution. This may limit possible publication opportunities (discussed later in the article). Projects in this category still have many publication opportunities as literature reviews, survey papers, high school journals, or student magazines.
I recommend this type of project for students looking for a learning experience. You will have the chance to explore the intricacies and challenges of your chosen problem, and understand the progression taken by past researchers to understand and approach the problem. You will continue to develop programming skills, and there may even be opportunities for publication for dedicated students.
Your Project Your Schedule - Your Admissions Edge!
Register to get paired with one of our expert mentors and to get started on exploring your passions today! And give yourself the edge you need to move forward!
Projects to learn and apply programming tools
In this style of project, you will learn fundamentals of computer programming and will apply these tools to implement a solution to a computer science problem. The solution you implement may be an existing, known approach, or a simple preliminary approach – and this is great, because your focus is on developing your programming skills!
Improve programming skills (fundamentals which translate between programming languages, as well as language-specific skills).
Reinforce classroom learning from courses like APCS.
Excellent projects to create a blog or tutorial, or to work towards existing goals in high school robotics competitions or computer science clubs.
Because these projects focus on developing programming skills, they typically do not produce output suitable for research publications. Projects in this category still have many publication opportunities as blog posts or tutorials.
I recommend this type of project for first-time computer programmers looking to build their programming skills in the context of an interesting research problem.
Projects to push the state of the art
In this style of project, you will try to solve an open research problem in a way that is better than the existing solutions. Typically, this involves first implementing an existing solution, then exploring ideas to make some improvement to the existing approach. Sometimes, this means trying something brand new!
Strongest publication opportunities when projects succeed.
Build intense familiarity with open research problems and challenges.
Spend time studying and exploring cutting-edge computer science ideas.
When performing exploratory research, there is no guarantee of success of your experiments.
You may experience huge time sinks when implementing state of the art code, even when working from an existing repository. These codebases are often poorly documented, can sometimes work only on specific operating systems or with specific hardware, and may even contain bugs in their code. It’s a considerable and commendable effort just to get a state of the art programming running on a home computer!
Time with your mentor may be spent debugging frustrating issues (such as installing packages) instead of discussing interesting research questions. These debugging sessions may contain more patient waiting and hand-waving than teaching as you sift through thousands of lines of code – again, with the understanding that there is no guarantee of successful implementation.
There is a large time commitment expected outside of sessions to read, study, and understand the state of the art.
These projects are often very intense in setup, execution, and reading. Students who have been successful in these projects have strong prior programming experience, are driven to read and understand their research problem, and often have additional help (a parent or teacher) or are otherwise prepared to spend more than the typical 10 Polygence sessions to develop a substantial project. These projects can lead to awesome results and publications, but you should approach with a mindset that the learning experience will still be rewarding if your experiments do not yield optimal results (or if they fail partway).
You may have noticed that I did not mention prerequisites specific to each project category; prerequisite recommendations may vary from mentor-to-mentor and project-to-project, but in general (at least for students interested in AI), there is plenty of learning to be done at any level of programming experience. I usually recommend that my students have completed a basic Python primer (I recommend the free set of lessons atwww.learnpython.org) to build familiarity with loops, control, lists, dictionaries, and functions. With these building blocks, we have enough common ground to begin working together. Of course, if you bring additional experience from other courses or camps (at school or online), that’s great too! Remember that prerequisites are about more than just completing a course – what’s most important is the understanding you carry forward with you to your next project.
For students interested in computer science projects in a specific language or domain (web development, game development, networking, data mining, etc.), your mentor may have specific expectations or recommended background; my advice is to always be upfront with your mentor about your familiarity with a given language, and let them point you to resources to help you continue learning as you plan your project. Computer science research can be a lifelong learning activity – for these projects, come as you are, and let your mentor help find the right fit for your background.
How should you spend your valuable, limited time with your mentor?
Ideally, you can spend all of this time discussing the research elements of your project: your questions, your ideas, your experimental setup, your results, and your writing. But because we are working on computer science research (and using computer programming as our tool), there will inevitably be a point where you could use a little help debugging or troubleshooting. Computer science takes a lot of work, and sometimes it’s actually the exciting stuff that happens the easiest/fastest, after a LOT of boring setup work – things like setting up your coding environment, installing software, debugging a codebase, annotating data, etc.
While your mentor will do their best to be efficient in helping you solve your technical roadblock, there are some steps you can take to help your mentor help you:
Work on issues outside of your sessions, and come prepared to explain to your mentor what you tried and to show them any errors you hit. Do use your mentor’s time to help get unstuck, but make sure you’ve given it your best and hit a true roadblock first – otherwise, 10 hours will be gone before you know it!
You may think you are giving enough of a summary description of an error for your mentor to help, but mentors often have years of programming experience and have learned tricks and keywords in error messages that help them jump to a solution. For this reason, always be prepared to share the full error shown on your screen.
Don’t be afraid of using Google searches and outside resources like StackOverflow to ask your debugging questions. The computer science community is often a very supportive and encouraging online presence!
Make an account on GitHub, create a repository with your code, and share this with your mentor. This will save you countless sessions of “Please share your screen. Can you jump to line 839? Ok, now Ctrl+F for “time_sync”. Great, can you jump to line 526? …”. Plus, this is a great way to later share your code with your community!
Need some brief help getting “unstuck”, and now have a clear path forward? Ask if your mentor would consider stopping your session at half-an-hour so that you can continue working independently (and save another half-session of mentorship for your future questions)!
Finally, always be sure to complete all readings and assignments recommended by your mentor between sessions. Your mentor often has a large roadmap in mind for you to complete your project on your timeline, so it is really important to show up to sessions with an earnest effort given to assigned tasks. Don’t be afraid to communicate to your mentor if you need some help – we are here to make your project an awesome experience for you!
So, your code is working, and you’re seeing some really cool results that you would like to share with others. Fantastic! Two important questions to help you and your mentor decide how to share your work: who would you like to share your work with, and why would you like to share it?
If you would like to share your work with friends, family, or perhaps a club at your school, it may be easiest to choose a non-peer-reviewed publication option. For some, this could just be a nicely-formatted report you pass around, but other great options include blog posts on medium.com, towardsdatascience.com, Instructables, or a personal blog. If you would like to share your code in addition to your report, a public GitHub repository is another great choice (as long as you include a descriptive README file which tells visitors how to use your code!). For these purposes, you can be as creative as you like – you control the publication process.
Another self-publication hotbed for computer science research is arXiv, which is what is known as a preprint server. This is a place where researchers deposit their works during the long publication process (it can sometimes take over a year for a submitted work to appear in a journal!). The reason to use a preprint server is to make sure that you receive proper credit if you are “first” to have an idea, and to allow other researchers the opportunity to build off of and cite your work during the slow publication period.
However, I actually discourage my Polygence students from using arXiv, because the intention of arXiv is to allow exchange of ideas among the academic community. While some Polygence students do make significant research contributions, not all reports carry the impact that the research community would like to attend to. For this reason, arXiv actually requires all submitters to be endorsed by someone within the research community. On the plus side, there is actually a fantastic preprint server similar to arXiv designed and hosted by Polygence: RARS, the Research Archive of Rising Scholars! This site welcomes your research, whether state-of-the-art, a well-crafted literature review, a repetition of prior work to try learning a foundational method, or a piece of creative work.
Remember, you are in control of how you share your work, so be as creative as you like! Sometimes, an excellent YouTube video or Twitter thread brings more attention to a project than a formal blog post. Have fun and share your awesome project proudly!
While these publication options are often engaging for their readers and easy to share, they are also missing the small flavor of peer review that catches the attention of folks in academia (in other words, people who may soon be reading over your college admissions, research position, or internship applications). By sending your work through a peer review process, you are opening your work to the judgment and advice of seniors in your project area. This is a valuable opportunity to receive feedback, but can also be disappointing in cases when your work is judged to be inadequate for the standards of the publication venue. (As an aside, I would encourage you to never take these judgments personally; there are plenty of reasons a work may not be selected that have nothing to do with the quality of the work. Sometimes, the venue is looking for works on a very particular, specific topic. Other times, the reviewer might just be having a bad day. Take their advice with a grain of salt, and move ahead to your next goal!).
In the category of peer review, there are several types of publication venues to choose from:
Local and Regional Science Fairs: these are a fantastic place to share your research with your local community (and even win some nifty awards). One small note—many science fairs are used to receiving scientific projects (picture your classic chemistry and biology experiments) and engineering projects (where the goal is to invent or design). The nature of computer science research sits somewhere in a middle ground between these, so it can often be difficult to figure out which category your project belongs to! Consult with your Polygence mentor, advisor, or science fair contact to identify the right fit for your particular project – you certainly belong, it’s just a matter of finding the best category.
High School Journals: these journals are intended to showcase research projects by high school students. Different journals have different reviewers and editors; some are managed only by high school students, others by college clubs, and others by professional researchers. A high school journal can be a great first journey into the publishing process. With the slightly lower barrier to entry, do be aware that some journals (particularly those run by high school students or college clubs) may cease operations without warning.
IEEE Potentials: this magazine publishes great monthly articles that thoroughly explain fundamental or cutting-edge computer science topics to a young reader base. This is a great fit for articles that seek to teach and are written in a thorough and casually-readable tone.
“Pay-to-Play” Conferences and Journals: sometimes nicknamed “predatory” conferences and journals, these publication venues have a fairly low barrier to accepting your research report. As a result, the true research impact of these venues is fairly low (and it can be expensive to have your project featured). However, these can be a good way for a beginning scholar to get their foot in the door of the publication world. These conferences often have vague and deceptive names (such as “American Journal of Computer Science Research, Inventions, and Technology”) that closely mirror their established conference counterparts. Be cautious when considering these choices, as you can often have the same publication impact from a free option such as RARS. When in doubt, always discuss with your Polygence mentor to figure out if this type of conference or journal is a reasonable step towards your academic goals.
Academic Conferences and Journals: our field is full of exciting (and often ultra-specific) conferences and journals! These are typically intended for professors, research professionals, and graduate students, but sometimes excellent work from younger researchers can be selected for publication. Your mentor can give you a good idea if your project meets the criteria, and can also point you towards the most relevant journals and conferences for your field. A popular option to consider is also the workshop track of conferences. Workshops are often very, very specific (for example, a large Computer Vision conference may have a workshop track dedicated to Computer Vision for Fashion, or Computer Vision for Sports). These workshops often have a slightly-less-intense peer review process, and may or may not formally publish their proceedings. If you’re interested in the field, it’s a great way to share your research with others and to learn what’s up-and-coming! Do keep in mind that if your work is accepted, it is usually expected that you will give a presentation or poster about your research, which may require some travel as conferences shift back to in-person gathering.
Most importantly, if you find an opportunity you are excited about, share it with your mentor! They will be excited to provide guidance and help you work towards your goal.
Getting started in computer science research can be exciting and overwhelming. Lean on your mentor to help you identify a reasonable, interesting, and fun scope for your project. Work hard both during and outside of your sessions to build an awesome project, and then share your project with your community in a way that also promotes growth toward your personal academic goals. Most importantly, enjoy your computer science journey!
Get Matched with a Computer Science Mentor
Interested in working on an exciting computer science research project? Click below to get matched with one of our expert mentors!