Mark Grechanik Ph.D., University of Texas at Austin
© 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 who ask to write recommendation letters and to provide financial support. Often these requests come from students whom professors barely remember. In my case, I often 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 support financially as my Research Assistant (RA) and under what circumstances. In general, the reason that students are asked for recommendation letters is that whoever requested the letter 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 a 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 assignmentc or a course project and went beyond what is required for grade, my recommendation letter will reflect that and it will be much stronger. 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 different 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, it 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, and 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 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, and based on the results of this work, I may hire this student 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. I nitiative   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. M ultiple   E ngagements   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.