John Cole photo

John Cole

I'm a Professor of Instruction in the Computer Science Department here at the University of Texas at Dallas. I taught part-time at Collin County Community College for three years, and prior to that, at Illinois Institute of Technology in the mid-1970s, which is also where I earned my degrees. Before joining the full-time faculty at UTD in Fall 2012, I had taught part-time for 13 semesters.  I have been a software developer for many years, working on projects as diverse as a SNOBOL4 compiler, a DATABUS compiler, a word processor, the operating system for an early computer, statistical analysis of insurance claims, telecommunications, and embedded programming.  Essentially, I would write anything for which someone would sign a check.  I have used a variety of languages, including Java, C/C++, C#, Visual Basic, Databus, FORTRAN, Intel assembly language, and many others. I still do some outside programming.  Note to graduate students: I am not a researcher nor can I give you an assistantship of any sort.

Welcome to The University of Texas at Dallas

Office Hours for Spring Semester 2024 in ECSS 4.606.  In person only.
Monday from 2:30 to 3:30 PM (After CS2340 class)
Tuesday: 11:00 AM until noon
Wednesday from 11:30 AM to 12:30 PM (Before CS2340 class)
Office hours tend to be busy, so I must give priority to current students.  However, anyone, from former students and other faculty to lost souls needing insecticide, is welcome to visit.

Office: ECSS 4.606. Phone: 972/883-6353
E-mail me at John.Cole@utdallas.edu  Please use this instead of eLearning for correspondence. 
Students, if this concerns a class, please include which class and section you're taking in the subject line or I may not answer.
Do not e-mail me code to "have a look at and let me know if there are problems."  Come to office hours.  I don't answer these. 
I don't always answer e-mail after 8:00 PM, and rarely on Sundays.
I rarely answer Teams texts that are not in a class, especially when they are requests for information you can find on my Web page or in the course syllabus.
If you're asking for a recommendation, remind me which classes you took from me and when.  I teach hundreds of students every year, and unless you sat near the front and participated, or came to office hours frequently, I may not remember you very well.  I always go back to the work you turned in as part of being able to write a good recommendation.  Make sure it is good work and yours.

Locate buildings and rooms with the Campus Map

I'm the faculty sponsor for the student chapter of the ACM at UTD.  Check their Web site for information on events.
I'm also the faculty Advisor for Nebula Labs, a programming group creating tools to help students at UTD.

As of August 1, 2021, I'm the Executive Director of the Executive Master's in Software Engineering (EMSE) program.  This is for working professionals who want to get an advanced degree by going to school part-time.
I love to tinker with embedded programs, the Raspberry Pi, Arduino, and of course write little Android apps.

I wrote the attendance app I use in some of my classes, and a Scantron grading app.
Here are some of my personal projects.

Date Posted

Announcement
12/18/2023 From Cal Newport's book Deep Work: The Deep Work Hypothesis:  The ability to perform deep work is becoming increasingly rare at exactly the same time that it is becoming increasingly valuable in our economy.  As a consequence, the few who cultivate this skill and then make it the core of their working life will thrive.
3/19/2022 Use of GitHub. Some students use this for programming assignments, which is fine if it is a private repository.  Code on a public repository can be found by anyone, including your classmates.  If I find your code publicly available I will warn you once.  The second time I will let you deal with the Office of Community Standards and Conduct, which may or may not have a problem with this.
3/17/2022 More about attention. The title of this article isn't anywhere near as interesting as the article itself: Human-Centered Approach to Static-Analysis-Driven Developer Tools.  (You may need to either be an ACM national member or access this through the UTD library.)  While my real purpose in reading it was to learn more about HCI in the context of developer tools, it turned out to be about much more than that.  At the bottom of the subhead Context Switching is an Obstacle to Understanding Program Behavior the author observes that "[communication] has led to a workplace culture where visible activity is often conflated with productivity.  A constant stream of notifications not only creates an artificial sense of urgency but is damaging to the deep focus demanded by programming.  Research consistently shows that individuals experienced significantly more stress, anxiety, and irritability when tasks were interrupted."  The point is when you start writing a program, focus on writing the program and nothing else.  Do not answer e-mail, look at your phone (unless you're programming it,) or talk to anyone.  If possible, work for at least one hour without interruption.
8/29/2020 "The more you sweat in training, the less you bleed in combat."  This has various attributions.  It is a wise truth.  Do not complain about the difficulty of your assignments here at UTD, but consider them training for your career, where you will also be given difficult assignments. 
8/31/2018 I have added new page on How to program, explaining a technique I have been using for years. I know you know how to program.  Read this anyway.
6/18/2018 A word about finding code on StackOverflow, GitHub, etc. Yes, you can find quite a bit, and I have heard the argument that in the real world, you'll do this as a matter of course. Well, maybe, or maybe not. Consider the following scenario, a variation of which has played out many times during my career as a software developer: My manager tells me to go talk to Teresa, who is an accountant in the "recovery" department. She needs a highly specialized program to track overpayment reimbursements, and I am to learn her requirements and write it. If all I had done in school was find code online and hand it in, without the ability to analyze a problem and design a solution, I'm out of luck, and probably out of a job.
4/9/2018 A few of my classes might find the DeviceList program handy.  It lists all of the sensors on your Android device.  Click the link to download the APK, but you'll need an APK installer to get it onto your phone.
8/1/2017 As a teacher, I will be competing for your attention.  Other things competing for that most valuable commodity are your cell phone, your computer, other people in the class, and your own thoughts.  Here is a ted.com video on how the tech companies manipulate you to keep your attention on what they want you to see.  This is particularly useful if you're taking a human-computer interactions or virtual reality course.  Also highly recommended for freshmen.
6/1/2017 The Pong game I wrote for the Android workshop starting in June 2013 has been productized and is available free of charge (and worth every penny of it) on the Google Play Store. Do a search on "John Cole Pong" and you can download it. (Google removed it in 2021 because I didn't keep it up to date.)
8/15/2016 Paul Fishwick's TEDxUTD talk on finding computing in everyday objects.
7/3/2016 My favorite language for most projects is C#, and I will be using it in some of my advanced classes.  Here is a link to Microsoft's tutorial for absolute beginners.
6/10/2016 Computer Science Department attendance policy: If you miss the first three classes, your final grade will be one letter grade lower than it would have been had you attended.  If you miss the first four classes, this is an automatic F grade. 
1/4/2016 Undergraduate Research Expo on February 27, 2016  Show off your undergrad research and win prizes.
6/15/2015 Embedded Systems and Robotics Workshop, PES University, Bangalore, India
5/22/2015 Slides from the Technical Writing Workshop on May 21, 2015.
2/21/2009 Link to "Sixth Sense" wearable computer video from the ted.com site.  In general, there is always interesting stuff on that site.
http://www.youtube.com/watch?v=ZfV4R4x2SK0
 

About our field, from Structure and Interpretation of Computer Programs by Abelson and Sussman

Computer science is not a science and its significance has little to do with computers. The computer revolution is a revolution in the way we think and the way we express what we think 


Teaching Philosophy

Nearly every course I teach with the exception of CS1200 will involve lots of programming. There is an ancient saying attributed to Confucius that goes like this: "I hear and I forget. I see and I remember. I do and I understand." In my classes, I use a combination of PowerPoint slides, lecture, examples, and in-class exercises so you can both see and hear, and sometimes do, as well. More...


Useful Links Within my Web Site and UTD
Programming Tips, including Android, C++, etc.  These are code samples you can use for some of my classes.

Uncommented code is bad and wrong.  Learn How to comment your code. (You should comment it before you write it.  That's why this section is first.)  This is critical if  you are taking one of my programming classes where at least 10% of your grade is based on the code comments.

Spending far too much time writing programs?  Learn How to write code.  A succinct explanation of a technique that will save you time and give you good results.
ScanTron form, correctly filled out. (Only for tests in the classroom.)  The entire form, including your name and course, must be done in number 2 pencil only.  Pen does not scan and you will lose 10 points for any corrections I must make to your form, including using the wrong one, using pen, etc. The "ID" field is a number that will be assigned to you as a "grade" in eLearning.  Ideally, you should have filled in the information other than the answers (I have shown a few sample answers, but ignore those) before you come to class.
Grader Guidelines for graders to follow and students to understand.

You will find assignments, grades, and other class material on eLearning, also called Blackboard.
The Computer Science Department main page contains recent events and other information. It's also pretty cool.
UTD International Student Services Organization.  Given the importance of writing in most of my classes, if English is not your first language you will find useful events, such as conversation workshops, writing help, and other help here.  You can also get writing help from the Student Success Center's Writing Center.  I cannot stress enough the importance of good writing.
The Computer Science Mentor Center can help you with CS1336, CS1337, CS2340, and CS2336, among other classes.  Click here to go to the Center's official page.
Many books and journals that are useful in my classes are online at the UTD Library.

Useful and interesting sites outside of UTD

Notes for anyone taking my classes.  Read This!

Courses Spring 2024

CS2340.005 Computer Architecture on Monday/Wednesday from 1:00 PM to 2:15 PM in ECSS 2.306
CS6360.MS1 Database Design on 10 Friday evenings.  in ECSS 2.305
CS4485.OW1 Senior Design.  on Tuesday from 1:00 to 3:00; Friday from 2:15 to 4:00 Online on Teams; in person TBA

Courses Fall 2023

CS1200.HON Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in AD 2.232
CS2340.003 Computer Architecture on  Monday/Wednesday from 10:00 AM to 11:15 AM in ECSS 2.305
CS3162.092 Professional Responsibility in CS and SE  on Monday/Wednesday from 11:30 AM to 12:30 PM in ECSS 2.412

Courses Spring 2023

CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 10:00 AM to 11:15 AM in ECSN 2.112
CS2340.005 Computer Architecture on Monday/Wednesday from 1:00 PM to 2:15 PM in Residence Hall West 2.401
CS6360.MS1 Database Design on 10 Friday evenings.  in ECSS 2.305
CS2337.001 CS II.  in ECSS 2.311

Courses Fall 2022

CS1200.OL3 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 AM in ECSS 2.201
CS1200.OL1 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in ECSS 2.201
CS1200.HON Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in RHNW  1.001
CS1200.OL2 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 2:00 to 2:50 PM in RHNW 1.001
CS2340.006 Computer Architecture on  Monday/Wednesday from 10:00 AM to 11:15 AM in ECSS 2.311

Courses Spring 2022

CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 10:00 AM to 11:15 AM in ECSN 2.112
CS2340.005 Computer Architecture on Monday/Wednesday from 1:00 PM to 2:15 PM in ECS West 1.315
CS6360.MS1 Database Design on 10 Friday evenings.  Online via Teams for first two classes.  Room ECSS 2.305

Courses Fall 2021

CS6326.001 Human-Computer Interactions on Monday/Wednesday from 8:30 AM to 9:45 AM in JSOM 2.717
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 AM in ECSS 2.201
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in ECSS 2.201
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in ECS West 1.315
CS2336.005 Computer Science II on Tuesday/Thursday from 11:30 AM to 12:45 PM in ECSS 2.412

Courses Spring 2021

CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 8:30 AM to 9:45 AM Online
CS1337.009 Computer Science I on Tuesday/Thursday from 11:30 AM to 12:45 PM Online
CS1337.004 Computer Science I on Tuesday/Thursday from 2:30 to 3:45 PM  Online
CS4301.002 Mobile App Development (Android) on Monday/Wednesday from 10:00 AM to 11:15 AM Online
CS6360.MS1 Database Design on 10 Friday evenings Online

Courses Fall 2020

CS6326.501 Human-Computer Interactions on Monday/Wednesday from 8:30 PM to 9:45PM Online
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 AM Online
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM Online
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM Online
CS2336.504 Computer Science II on Tuesday/Thursday from 7:00 PM to 8:15 PM Online

Courses Spring 2020

CS1337.009 Computer Science I on Monday/Wednesday from 10:00 to 11:15 AM in ECSS 2.203
CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 8:30 to 9:45 AM in ECSN 2.112
CS4301.002 Mobile App Development (Android) on Tuesday/Thursday from 11:30 AM to 12:45 PM in ECSS 2.412
CS1337.004 Computer Science I on Tuesday/Thursday from 2:30 to 3:45 PM in ECSS 2.312

Courses Fall 2019

CS6360.004 Database Design on Monday/Wednesday from 8:30 to 9:45 AM in ECSS 2.412
CS6326.001 Human-Computer Interaction on Monday/Wednesday from 11:30 AM to 12:45 PM in CB 1.222
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 PM in CB3 1.302
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in CB3 1.302
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in CB3 1.302
CS1200.013 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 2:00 to 2:50 PM in CB3 1.302

Courses Spring 2019

CS1337.009 Computer Science I on Monday/Wednesday from 10:00 to 11:15 AM in JSOM 2.803
CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 8:30 to 9:45 AM in ECSN 2.112
CS1337.004 Computer Science I on Tuesday/Thursday from 2:30 to 3:45 PM in ECSS 2.312
CS4301.002 Mobile App Development (Android) on Tuesday/Thursday from 4:00 PM to 5:15 PM in ECSS 2.412

Courses Fall 2018

CS6360.004 Database Design on Monday/Wednesday from 8:30 to 9:45 AM in ECSN 2.112
CS6326.001 Human-Computer Interaction on Monday/Wednesday from 11:30 AM to 12:45 PM in ECSS 2.306
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 PM in RH West 2.401
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in RH West 3.100
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in RH West 3.100
CS1200.013 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 2:00 to 2:50 PM in RH West 3.100

Courses Spring 2018

CS1337.009 Computer Science I on Monday/Wednesday from 10:00 to 11:15 AM in Residence Hall Northwest MP Room
CS6326.001 Human-Computer Interactions on Tuesday/Thursday from 8:30 to 9:45 AM in ECSS 2.311
CS4301.003 Mobile App Development (Android) on Tuesday/Thursday from 11:30 AM to 12:45 PM in ECSS 2.203
CS1337.004 Computer Science I on Tuesday/Thursday from 2:30 to 3:45 PM in ECSS 2.312

Courses Fall 2017

CS6360.004 Database Design on Monday/Wednesday from 8:30 to 9:45 AM in JSOM 11.206
CS6326.001 Human-Computer Interaction on Monday/Wednesday from 11:30 AM to 12:45 PM in GR 3.302
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 PM in ECSN 2.110
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in ECSN 2.110
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in ECSN 2.112
CS1200.015 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 9:00 to 9:50 AM in ECSN 2.112

Courses Spring 2017

CS1337.009 Computer Science I on Monday/Wednesday from 10:00 to 11:15 AM in RH West 2.401
CS6326.001 Human-Computer Interactions  on Tuesday/Thursday from 8:30 to 9:45 AM in ECSS 2.311
CS4V95.012 Undergraduate Topics in CS: Fundamentals of Mobile Application Development on Tuesday/Thursday from 11:30 to 12:45 in RH West 2.401
CS1337.004 Computer Science I on Tuesday/Thursday from 2:30 to 3:45 PM in ECSS 2.312

Courses Fall 2016

CS6360.004 Database Design on Monday/Wednesday from 8:30 to 9:45 AM in ECSS 2.306
CS6326.001 Human-Computer Interaction on Monday/Wednesday from 11:30 AM to 12:45 PM in ECSS 2.410
CS1200.015 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 9:00 to 9:50 AM in RH West 3.100
CS1200.006 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 11:00 to 11:50 AM in RH West 3.100
CS1200.011 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 10:00 to 10:50 PM in RH West 3.100
CS1200.007 Introduction to Computer Science and Software Engineering on Tuesday/Thursday from 1:00 to 1:50 PM in RH West 3.100

Courses Spring 2016

CS1337.009 Computer Science I on Monday/Wednesday from 10:00 to 11:15 AM in MC 2.410
CS6326.001 Human-Computer Interactions  on Tuesday/Thursday from 8:30 to 9:45 AM in ECSN 2.126 (This was CS6301.001 Special topics: User Interface Design for Mobile Devices)
CS4V95.015 Undergraduate Topics in CS: Fundamentals of Mobile Application Development on Tuesday/Thursday from 10:00 to 11:15AM in CB2 1.202
CS1337.004 Computer Science I
on Tuesday/Thursday from 2:30 to 3:45 PM in ECSS 2.312

Previous Courses

Suggested Reading.  A few of you have asked for this list so you don't have to write things down when I reference them in class.

*The 90s called and asked for their Web site back, but they can't have it.  I'm using it, and it's easy to maintain and contains far more useful information than you will find on most professors' sites.

Last revised: August 20, 2022