Mark Grechanik Ph.D., University of Texas at Austin Guidelines Home Publications Awards Service Patents Projects Students News Contact
© Copyright Mark Grechanik 2012
These guidelines outline different aspects of research work under my guidance. My research projects focus on increasing programmers' productivity by automating various activities at different stages of the development lifecycle. In my research, I utilize various techniques from software engineering, language design, program analysis, security, and machine learning to address specific issues that affect programmers when they design, write, debug, and test software. I expect my students to learn new techniques and approaches from different areas of computer science in addition to the core competencies in specific areas of software engineering. Reading, understanding, and accepting these guidelines is a prerequisite to work with me. Please note that these guidelines do not replace requirements for obtaining graduate degrees at UIC;  any perceived contradictions between these guidelines and the requirements from UIC should be resolved in favor of the requirements and students should consult official representatives from UIC to address the questions that students may have pertaining to all aspects of their education and legal issues. Asking For Recommendation Letters and Financial Support All professors receive requests from students to write recommendation letters and to hire them as RAs. Often these requests come from students whom professors barely remember. In my case, often I cannot recall a student, since s/he took one of my classes more than a year ago with 100+ other students. Below I provide a breakdown of cases for which students need recommendation letters and then I talk about whom I choose to hire as my Research Assistant (RA). In general, whoever requested a recommendation letter from a student, this person or the organization wants to know if the student fits some position. Therefore, as a recommendation letter writer I must convince the reader that my first-hand knowledge of the student’s abilities matches the requirements for the open position or a specific area of software engineering in general. Sometimes, I received requests from students to write recommendation letters for Big Data fellowships and visualization-related jobs, and there is no way that I can write these letters, since these are not my areas of expertise. Thus, I simply say NO to requests like these, and if these requests arrive via email, I delete them without replying. 1. If a student needs a recommendation letter for some internal use at UIC (e.g., applying for a job at a college office or for a teaching assistant position (TA)), the student must take one of my courses with an A as a bare minimum. In general, I would just write a sentence or two that the student took my course, did well, and that’s it. Recommendations like this are weak. However, if a student put a significant effort into her assignments and a course project and went beyond what is required for the grade, my recommendation letter will be much stronger since it will reflect the above average abilities of the student. Nevertheless, I cannot control whom the department chooses for open TA positions even if I think the world of your abilities. 2. If a student applies for job openings, fellowships, graduate programs, or internships outside the UIC, I will write a recommendation letter only if a student worked with me on a project outside a general coursework and delivered a good result. Simply coming to my office during my office hours to discuss some technologies will NOT result in my writing a recommendation letter. Doing so may have the opposite effect, since the student consistently wasted my time asking trivial questions. It is one thing to come to my office to discuss a specific idea or an algorithm/technique, I welcome that. However, coming to my office to ask me questions, for example, what is paravirtualization and what I think of it will result in my telling the student that s/he can read an article in wikipedia about it. As long as the student doesn’t have a specific question, s/he should leave and let other students who wait in line outside the office come in. 3. I do NOT even respond to requests from students to write a recommendation on LinkedIn or some other social/work media, unless they worked with me for at least a semester on a research project and achieve good results. Now, if a student wants me to hire her/him and pay for her/his work, it is a totally different game. A student who asks me to do that is an unknown variable for me, since working for me requires significant engineering and analytical skills and most students do not have them in the beginning of their graduate education path. Moreover, I need to make sure that we can work together. If a student took my course and finished it with an A, I may consider to work with this student for a semester or two without paying the student, and based on the results of this work, I may hire this student eventually as an RA. If this is your cup of tea, please read further. General Guidelines For Students Who Work on Mark’s Research Projects The first step for a prospective student is to send an email to me with his/her CV or resume attached. Unless you have already completed a majoriry of your course requirements at UIC and your GPA is above 3.0, you should not contact me. MS students at UIC CS have an option of taking an additional course instead of doing a master project. You should explore this option, it is somewhat easier than engaging into a project. As a student working under my guidance, you will be a part of a research project or you will lead a research project. Depending on your level (e.g., an master project/thesis or a doctoral student), your project will have some degree of research - a small degree for master project and a large degree for doctoral students. Regardless of your level, you will be required to follow the ABCD guidelines. Advance towards the goal of your project in a measurable way. Examples of measured advancements are completed software components with expected functionalities, finished proofs of theorems, or written reports on designated topics. Opposite to measured advancements are immesurable claims, examples of which include the following statements: “I have searched the Internet extensively and haven’t found anything” or “I have read a few papers and I still don’t know how to start the project” or “I have been configuring the system for experiments” or “I have tried to install the package and got an error message.” Upon hearing these and other similar statements, your project will be terminated and you will be asked to find a different advisor. As part of advancing towards measurable goals, you should make contingencies if some plans go wrong. Consider a situation where you sent an email to some researcher to share his or her tool with you for your experiments. You SHOULD NOT become my advisee if you think it is ok to spend days or weeks waiting for a response from this researcher. Your advisor expects that you assume that this tool may not be available and you make a contingency plan, otherwise, it raises serious questions about your motivation. Break larger projects into smaller tasks in order to advance towards the goal of your project. A part of your education at UIC is teaching you to manage the complexity of software systems. A job of your advisor is to help you to advance towards completion of your project, and you should treat your advisor as your resource, not as a barrier on your path towards your graduation. When you ask to meet with your advisor, you should come prepared to discuss specific questions related to smaller tasks into which you broke your project. Communicate on a regular basis with your advisor and other members of your team if you work on a collaborative project. A red flag is raised if you have been incommunicado with your advisor for ten days or more. You don’t need to send detailed reports of your progress every hour, but communicating with your advisor about your progress at least once a week is essential. You are the one who knows when you want to graduate and what deadlines you must meet. If you haven’t talked to your advisor about your progress for more than ten days and you show up in your advisor’s office a week before the graduation, you WILL NOT graduate! Similar argument applied to your conference papers submissions - if you obtained experimental results one week or less before the submission deadline, there WILL NOT BE any submissions to meet this deadline! Also, you should remember that your advisor and your collaborators are busy people - if you emailed them with a request and you don’t hear a response within a day, email a reminder again. At some point, if you still don’t get any response, you should escalate your attempts and seek the contact in person or over the phone/skype. Remember, it is YOU who need to advance and if you need help from other people, you must demand it! Deliver your results on a regular basis. Your advisor and your collaborators need time to verify your results. In every proof and experiment there is the probability that some mistakes are made. It takes time to go over results and think about them. Small incremental deliveries is the best way to advance towards the goal of your project and to receive fast and valuable feedback. In most cases, you will be ask to share a or folder or insert your deliverables into projectlocker or some other git repository. Following these ABCD guidelines is important especially if you work on a collaborative project as part of a team. Other members  of the team will use components that you are working on, and you should make yourself available to fix bugs, meet deadlines,  and otherwise answer questions to your teammates. You should check and respond to your email messages at least twice a day.   Disappearing for several days without a notice will lead to your automatic dismissal.  You are responsible for your success - you should plan your time accordingly and focus on your work. Your advisor has heard all  kinds of reasons from students who failed. Common reasons include but not limited to death and illness of family members,  extensive job search and multiple interviews, matrimonial problems, all kinds of phychological problems, financial difficulties,  vacations at exotic locations, underestimating your course load, being a crime victim, dealing with bedbugs, time consuming  treatments of cut and broken body parts (e.g., inability to type because of broken phalanges), acts of god that include fires,  floods, hurricanes, and volcano eruptions, and last but not least, immigration problems with US authorities. As much as your  advisor will sympathize you in your sorry plights, he will use only these ABCD guidelines in assessing your progress and  assigning your final grades.  I reserve a few lines to discuss a technique called cutting corners. A most primitive and despicable example of this technique is  hardcoding expected results for certain inputs in a program and trying to pass it as an implementation of some algorithm.  Recently, a student accepted a master project to experiment with algorithms for mining patterns from data. A part of this project  was to generate random data with cleverly seeded patterns. When asked to show progress after months of work, the student  submitted a 10-line of code Java program that produced random numbers without any patterns. It is needless to say that the  student was eventually dismissed. Cutting corners is good when a student finds a way to achieve the desired results in a  cheaper and a more efficient way; however, when a student silently avoids an essential part of the project, thus nullifying the  goals of this project, this student will be dismissed from the project with possible disciplinary actions. Finally, some students ask me to hire them as my research assistants. Unless you are a Ph.D. candidate, my answer is NO,  although once in a while I make exceptions for extremely dedicated MS students who show significant levels of maturity,  engagement, and intellectual power. It is expected that you take at least one class that is taught by me and you work with me for  one semester before I will make a decision to hire you as my RA.  Guidelines For Master Project Students Master project work is equivalent to one semester graduate course sans normal class attendance schedule and lectures are not given. That is, an MS project student is expected to spend approximately 150 hours working on a master project. Once a project is completed, the student should write a report which I will approve. At this point, you will find a different professor, who is the secondary reader of your report. Once you collect both signatures, you are done! Moreover, you accomplish something for your master project that allows you to impress your job interviewers by showing to them how you realized an interesting idea, whether it is the results that you mined from a large open-source software repository, a new code search engine, or an implementation of and experimentation with a traceability algorithm. Some of my former students were kept at interviews for much longer than the scheduled time to discuss their master projects and then they were made attractive job offers on the spot! It seems to be straightforward that students work on interesting projects, learn a lot, follow the ABCD principle, and graduate  happily with great jobs awaiting for them. Unfortunately, a small percentage of students fail and receive the grade U for the  master project course. Most common reasons are underestimating your current course load and failing to dedicate enough time  to work on your project. To avoid this situation, you should follow a rule of thumb - approach your advisor to work on an MS  project only when you have taken most of your mandatory courses and your course load is at most two courses per semester -  for most students it is one course per semester. At any given time I am working on three or more different research projects with my Ph.D. students and my collaborators from  other universities. Your master project will be related to one or more of these projects. Master projects cover a large spectrum:  on one end, there are projects that have strong software engineering components and much less research. Examples of these  projects include but not limited to reverse engineering open-source software applications to produce UML diagrams and building  test cases for open-source projects, evaluating some algorithms or systems, and mining software projects for interesting  patterns. Creating a software application from scratch with all documentation and models and tests is another example of a  master project. You will be given instructions on what to do and your job is to carry out these instructions learning new skills,  tools and technologies in the process. At the other end of the spectrum, there are projects with strong research components. By definition, the outcome of a research  project is unclear. In many cases, master projects with strong research components outgrow into master theses. Working on  research projects requires significant level of independence, discipline and motivation from students. If you feel that you like to  do a lot of research on your own, learn and try new things, and come up with ideas, please schedule a meeting with me.  The middle of the spectrum contains multiple options related to research projects that I work on at any given time. It does not  make sense to ask me to list all projects if you are not ready to start working right aways. Many of these projects are finished  within three to six months, so the list of projects gets outdated rapidly. If you decide that you are ready to work on a project and  you agree to follow the ABCD guidelnes, schedule an appoinment with me.  Guidelines For Master Thesis Students Master thesis work is equivalent to two semester graduate courses, except for normal class attendance schedule and lectures  are not given. That is, an MS thesis student is expected to spend approximately 300 hours working on a master thesis. Once a  project is completed, the student should write a thesis report which your professor will approve. At this point, you will  form your  thesis committee and you will prepare for your thesis defence. You will give a 45-min presentation of your work to your committee  and answer the questions of the members of this committee. If they like what they see, they will sign the papers and you are  done.  A natural question is why to do a master thesis if a master project suffices. There are two main reasons. First, some students are  intellectually driven and they strive to better themselves and learn as much as they can. For some students doing a master thesis  is a way to determine if they can continue their education at the Ph.D. level. Any advisor can easily tell MS thesis from MS  project students - the former are deeper thinkers, they ask in-depth questions and often present interesting solutions to difficult-  to-solve problems.  Second reason is that prospective employers know the MS thesis students are of much higher quality and they can better job  offers on average. On average, my former MS thesis students are often offered better terms of employment at more prestigious  companies and they are placed to work on more interesting hi-tech projects.  Guidelines For Doctoral Students It is not my goal to repeat Doctor of Philosophy degree requirements that are listed at the UIC CS website. Working on obtaining  Ph.D. is a long and extremely rewarding process; lucky doctoral students experience immense intellectual growth as a result of  their Ph.D. journeys. I expand the ABCD guidelines for doctoral students with I&ME pair: Initiative and Multiple Engagements.  Initiative is a defining characteristic of doctoral students. While it is expected that master project students need to receive  tasks from their advisors, doctoral students are expected to work as amplifiers of ideas. For example, if a student hears  about an idea that some classes of computer programs output similar results for similar input data, one can think that the  program can be replaced with a hardcoded function that maps a predefined set of input values to the outputs. But where is  it needed? Additional investigation can reveal that this idea can be valuable for approximate computing in the cloud to  speed up and parallelise computations. But what if all input values cannot be hardcoded? Maybe, this function can be  replaced with neural network that makes cheap approximate computation. How will this approach fit in the software  development lifecycle? What are the constraints? A clever Ph.D. student will ask deeper questions and delve into existing  research and offer more ideas to develop an interesting research proposal. Your advisor will assist you along the way.  Multiple Engagements enable a doctoral student to expand his/her horizon and increase the probability of his/her  successful research career. MEs include internships, working with multiple collaborators on different research projects,  studying techniques and approaches from related areas of research.