What are the some of the reasons why I may want to join or not join this group?
Reasons to join:
Gain applicable, practical, real-life skills and knowledge in becoming a computer scientist or software engineer — the specifics for this can be found in my syllabus. New students can also feel free to email me or come to my recruitment sessions to learn more.
Build purposeful software — in this group, we typically start from a problem and use technology as a tool to deliver a solution. Great examples of projects that solve real life problems are the Project: Deep Freezer and ASDRP QR Code Scanner found under the "Projects" page, which save users time, effort, and money. We do not work on meaningless projects (projects that have no users, concrete outcomes, or educational value). The level of responsibility and trust that I have in students to work on impactful projects are direct result of their performance during the training semester.
Develop a professional mindset — the skills and perspectives that students develop in this research group help them in college and beyond, regardless of the discipline that they choose to study. I emphasize effective communication as an engineer as much as software engineering itself in this group.
Fully structured first semester, flexible continuing semesters — I have found that most incoming students only have experience with schoolwork/classwork, and no experience in research. The training semester serves to help them understand the functional information and processes we use on a daily basis in an environment they are familiar with.
Personalized learning through code reviews — Individually reviewing student code through pull requests on GitHub consumes many hours of my time. I do this because it is the best way to help students learn how to fix their code in order to become better at programming.
Join a community of like-minded students who enjoy learning and applying what they know about technology — A requirement that I have of students is that they actively participate in weekly and biweekly group discussions. I only accept students who I am confident will deliver progress on projects. Everyone who is accepted will become a contributor.
Work with an active and involved advisor — I answer student questions on Google Workspaces quickly (usually within 24 hours) and provide high availability for assistance. I document all students' work and progress updates throughout a semester. I complete all code reviews requested from me within one week; we have a dedicated channel for reviews where this is communicated. I encourage and help students in presenting their work at research expos and conferences as well.
Reasons to not join:
No time — Like any other extracurricular activity, the results of this program are a function of how much time you spend in it. If you do not have the time to learn, you will not be able to produce any results. I have no issues with removing inactive students from this group.
Don't like programming / coding — This group is extremely hands on with writing, running, and debugging code. The assignments for the first semester involve programming almost every single week.
Only want to participate in ASDRP for one term — I consider all students that I accept long term investments and spend a lot of time and effort in training and mentoring these students. One semester is not enough time to both conduct training and perform actual research. As a result, I cannot accept short term students at the moment.
Don't want to work hard — When I was in high school, I used to participate in cross country and track and field. We would train for 2-3 hours after school, 6-7 days a week. Your race performance is typically a direct correlation of how much time you spend and how hard you train. My peers and I did this with a full schedule of AP coursework. We wanted to become the best athletes that we could possibly be and put in the time and energy to achieve that goal. This research group follows that same principle.
Dislike research / dealing with unknowns — I often tell students that ASDRP is not like a school. In a school, all of the information you need to know can be found in one place - your textbook. There is a correct answer to all of the questions you are asked in school. In research, you have to put in the work in finding the answers to a problem that you want to solve. The information you are looking for may be incorrect, hiding under a rock, or may not even exist.
Don't want to actively participate — I cannot have any students who go inactive for weeks at a time in my group. Any absences and inability to actively participate must be clearly communicated by that individual to the group through Google Workspaces in advance and within a reasonable timeframe.
Remote — I may make exceptions for promising students on a case-by-case basis, but I generally do not accept remote students. The reason for this is that it is much more difficult to maintain a connected group environment if students do not see the other students that they are working with on a weekly basis.
Want to publish a paper — My engineering groups typically don't write academic papers, but we do write technical documents and keep journals of everything that we have learned when working on projects. While writing and publishing a conference paper can be an option, I don't have particular interests in supporting them. My focus is on building high quality, reliable, and tested software from start to finish.
What is the time commitment this group?
Your individual experiences will vary. As a ballpark estimate, if students join with not much substantial computer science experience (but have proven that they will learn) it will take them roughly 8-10 hours a week. If they do, that estimate might be closer to 6-8 hours instead, If students wish to complete a project efficiently after the first semester (and/or want faster results), expect 15 hours or more. However, I allow students to dictate the pace of their groups during the second semester onwards.
Please keep in mind that the institution required trainings for new ASDRP students (Research 101, Computational Resources Training, IP Training) are not included in these estimates.
How many students are in this group? How many students will be accepted into the group?
I work with 15 students every semester. I cannot accept any more than that due to time constraints.
As a potential incoming student to this group, I already know how to program. I have taken AP Computer Science, extracurricular coding classes, competitive programming, etc. Can I skip the training semester?
Every student who I accept into this group participates in the training semester. Even students who have participated in competitive programming have learned significantly about topics such as using version control and what to expect in the software development lifecycle. This semester allows students to understand the processes and workflows that we use on a daily basis for long term projects in the second semester onwards.
I have seen hundreds of students who know how to code, but that does not make them good programmers, computer scientists, and engineers. Knowledge of coding is only one component of what it takes to become a professional. Just writing code that works is not good enough. It must be maintainable, reliable, thorough, tested, and easily understood by others. You must know how to think and communicate effectively in this group. All of the information that we cover compounds over time, so missing any of these meetings leads to you being at a disadvantage. Without knowing all of the information that we discuss in the training semester, you cannot expect to become close to being a high performing individual within this group.
If you become an intern at a tech company, you will be provided an onboarding period to learn how the company works. You will be given some compiled knowledge and expected to know this information within a few months of work. Your training period is a net negative for the company (you can't yet produce work, and you will be requiring other engineers to take time out of their day to explain to you how the project that you joined operates). After that, you are on your own. This research group operates with the same principle.
What happens in the second semester onwards?
The training semester follows a structured calendar with homework, deliverables, and projects assigned every week. However, the second semester onwards is significantly less well defined and up to each individual to determine their level of research and project progress. We have a meeting every other Sunday from 3-5:00PM at ASDRP campus with all students in the group. All students are required to fill out a biweekly status updates sheet indicating what specifically they've worked on, any blockers, and future goals to show their accountability. All of the group projects determine their own meeting time (typically over Google Meets and once a week).
How do I tell how if I am doing well or not in the group?
For the training semester, I will provide some kind of progress report by taking into account your individual level of participation in group discussions, completion and quality of homework/deliverables, and completion and quality of code reviews with other students in the cohort roughly halfway into the semester. At the start of the second semester, you will be provided some options for potential projects that you are eligible to join. This list of options will differ based on my opinion of the level of work you are capable of.
For students who have been here for two semesters or longer, we have Performance Reviews updated as a part of the agenda for each biweekly Sunday meeting. The students who achieve "Meets All Expectations" or higher are ranked and listed on the public leaderboard.
Redefines Expectations (RE) — Not a normal high schooler and comparable to competent new college grad
Greatly Exceeds Expectations (GE) — You consistently deliver high quality work, setting the example for the kind of work that other students in this group can achieve. If I provide you a 100MPH firehose of information related to a project during a meeting, I know that you will be able to reference all of it later (because you have written it down) and will ask about anything that you need clarification on. I can't imagine these students ever saying they don't have the time to accomplish something that I ask of them.
Exceeds Expectations (EE) — High quality work done fast. You can independently think of tasks to work on. I can trust you as a reviewer.I don't need to ask for progress updates from you, because you take the initiative in making sure I already know. You have a noticeable impact on helping other students learn.
Meets All Expectations (MA) — Everything that I ask for gets completed. I still have to ask for progress updates for tasks that take a while. It is obvious to me that you care about and are actually contributing to projects through Google Workspace updates, meetings held, code & documents pushed, code & documents reviewed, code & documents merged. Code and code review qualities are passable, but could have significant improvements.
——— cutoff for requests of Letters of Recommendation from me ———
Meets Most Expectations (MM) — All of the training semester assignments and projects are completed. You mostly complete other work asked of you, but you wait to be assigned tasks instead of seeking them out or creating them. Some contributions to long term projects, but not often and progress is rather limited. Quality of code reviews generally not good enough to be functional here
——— below this threshold, performance is of concern and students should consider other groups with less commitment ———
Meets Some Expectations (MS) — Some training semester assignments are incomplete, and/or it takes an unreasonably long time to get meaningful work done. Difficult to communicate with due to long and frequent delays in work requested. You don't complete a significant amount of the code reviews requested from you
Below Expectations (BE) — Unacceptable level of participation. Not sure how you will be able to contribute based on lack of attendance, professionalism, and/or knowledge. Transfer to another group pending or has already happened
How is this Performance Review determined?
Here is a non-comprehensive list of the factors that affect the review.
- Do you actively participate in the group? Do you help others learn?
- Is every week on the biweekly status updates sheets some form of "was busy with school"? Or do you actually complete work for ASDRP?
- Is there tangible evidence that you are learning (and possibly contributing to the group's accomplishments)?
- Do you complete the code reviews requested from you? Does it show me that you are actually running and reading code?
- Can you think independently? How do you prove this?
- Does it take multiple requests from me for you to do something or does it get done after I ask once?
- Do you complete all of the work that I requested from you in a timely manner, and do you do it well?
- Are you solving only easy problems, or challenging ones too?
- When a difficult problem comes up, do you wait for me to give you hints or tell you the answer?
- In a group project, do you wait for someone else to figure out a solution? Or are you the one moving things forward and figuring it out?
- Do you push and merge your code and deliverables? Unmerged pull requests are the same as no work having been done.
There are a lot of requirements listed in the syllabus to join this group. I don't have much computer science experience but I still want to learn. Can I still apply?
Anyone can apply to the group, but just saying you are interested in this group without being able to tell me specifically why will not help you in getting an interview. Programming takes a lot of time and requires a lot of independence in being able to resolve problems that you encounter. I am not necessarily looking for the most intelligent or most experienced students; I am looking for the students who are attentive to detail, care the most, and will help build this community by actively contributing to projects and discussions about topics in computer science.
Where is the link to the interview application form?
Please ensure to review the entirety of the syllabus and this new student FAQ before applying. Google Forms link (must use student ASDRP email): https://forms.gle/dPd726QsmWSYjKC89
What does the interview process include?
The interview process to join this group includes the following:
the Google Forms submission (it's in your best interest to write well thought out responses here)
in person or Google Meets interview (90 minutes)
technical questions with me (30 minutes)
some coding, conceptual, and debugging questions
two way interview with one of my student panelists (30 minutes)
conversation for you to learn more about the group from a current student's point of view, and for us to learn more about how you work. Mostly behavioral
15 minute presentation (15 minutes)
Q/A (15 minutes)
parent interview (30 minutes)
No stage of the interview is guaranteed. Successfully passing all 3 rounds results in an invitation to join the group.
Is there anything else I should know about this group before submitting a request to join?
For all new incoming students to ASDRP, it is my goal that every student finds an advisor whose skillset and mission aligns with theirs. There is a list in the ASDRP student portal of all ASDRP advisors with links to their websites. The most valuable advice that I can give to new incoming ASDRP students is to spend the time to review that list and reach out to all the advisors you are interested in joining. Send them an email. Go to their recruitment sessions. Talk to their students to find out what the actual day to day work is like. Different advisors will have their own reasons for why you may want to join or not join their groups. Every advisor has their own domain of expertise as well. Feel free to reach out to me through email (dennis.liu@asdrp.org) if you have any other questions regarding this group.