Online Computer Science Tutoring JC-PD LLC
Affordable Computer Science Tutoring and Programming help by a Physics PhD + postdoc / Math BS with 20 years of professional programming experience
Computer Science Professional Help
$40/hr for students Tutoring Policies
$65/hr for businesses (industry, research labs, and private businesses for software engineering consulting/training/scientific programming/tutoring.)
In tutoring sessions, concepts are explained clearly if there is a need. Otherwise, practice is the focus. Active learning is best in any subject. Material and concepts are presented after a relevant practical problem is chosen. Then the required knowledge and problem solving approach and methods are presented. Teaching strategy in test taking is beneficial to many students. Teaching error-free programming techniques is valuable in CS. The approach to physics and math problems should also be an error-free one. In all technical subjects, problem solving should be accomplished in small steps, checking the consequences of each before proceeding.
I want to help students learn problematic material. Beating fear of success is possible through sustained small successes. The only real teaching/tutoring goal is to teach a student everything the teacher/tutor knows so that the teacher/tutor is no longer necessary.
Below, a good deal of advice and options for tutoring is provided. I have coded for about 30 years, and I hope you could learn something from my experience. Some of what I have learned, was learned the hard way. Perhaps I can make your way a bit easier.
I know C, C++, Java, and Python well enough to help with most courses using those languages. I can help with first courses in JS, HTML5, CSS3, PHP, SQL, and C#. I have light experience with coding windows in visual studio using C++. I also have a little experience with C# and web pages in visual studio. In courses that require C systems programming, I usually can help. I have done multithreaded programming in C only. I don't have a lot of experience with that, though. I have done a little with including databases in Java and PHP. I have helped student many times with data structures and algorithms - primarily in Java or C++. I have not done network programming. Several years ago, I helped with a course using Java enterprise programming.
I am a former part-time software engineering consultant using C++ for a US industry in PA (2019). Also, in industry, I have 6 years of experience as a programmer/software engineer. I have 12 years of programming experience in my scientific research at Wash U School of Medicine in St. Louis. Through my dissertation and postdoc, I have 5 years of FORTRAN programming experience. At Wash U School of Medicine, I have 8 years of part-time UNIX system administrator experience.
C++
Java, JavaFX, Java Swing
AP Computer Science A (Java or Javascript)
AP Computer Science with python (both semesters)
AP Java
AP Computer Science Principles
python (beginning, intermediate)
C
C# (beginning)
data structures and algorithms (C, C++, Java, python)
FORTRAN 77, 90, 95, 2003 or later is possible
MATLAB
Discrete Math
Linux/Unix OS
HTML5, CSS3
PHP for beginners
JavaScript for beginners
SQL for beginners
Unix, Linux shell scripting using bash, csh, tsch, sh, or ksh
Windows shell scripting using regular expressions, vi, and vim.
Scientific or Research Programming
computer programming
Live, one-on-one online help using my zoom
Possible Homework or project help without one-on-one tutoring for the default hourly rate.
C++ or Java for elementary or HS students
C, C++, or Java for college or graduate students
HTML5, CSS3, PHP, and JS for college students
Data Structures Homework Help for college and graduate students
Mentoring in CS
Other options must be discussed with the tutor.
"C++ Primer": Complete coverage but not always clear
"C Primer Plus": Relatively easy to read
Bjarne Stroustrup: "Programming Principles and Practice Using C++": a first course in C++
"Numerical Recipes in C or C++ or Fortan", Press et. al.
Malik's C++ book which includes data structures is very good.
Liang's book on Java with data structures is good.
"The Linux Programming Interface" by Kerrisk
"Operating System Concepts", Silbershatz: An easy read textbook. His SQL book is also very good.
"Computer Systems: A Programmer's Perspective"
"Introduction to Computing Systems: From Bits and Gates to C and Beyond"
"Java All-In-One for Dummies": A jump start book
"The Really Big Index": Oracle's online tutorial for Java 8
Rosen's "Discrete Math", 8th ed.
Stein et. al. "Algorithms": The algorithm bible, which is difficult but worth the effort.
Books by Michael Main on Data Structures: Very clear and relatively easy to read.
"Data Structures and Algorithm Analysis" by M.A. Weiss: This is a free pdf that is very good but difficult to read. All of Weiss' books are good.
Python books by current University professors. E.g., by a CS professor: "OO Programming in Python"
Gaddis' book concerning starting out with python is relatively easy to read. High school students can follow that book.
"MATLAB Programming for Engineers" by Chapman
"Web Development and Design Foundations with HTML5"
"CSS in Depth"
Rheinwerk publishing now provides their German books in English since 2022. Their Javascript, Python, and Node.js books are very good, and relatively inexpensive. These books may not be completely up-to-date.
There are other good books, but all will not be listed here. Many are helpful with more specific topics, and the overall helpfulness of the book may not be sufficient. It is almost a general rule, that the best CS books are written by CS professors. There are a few exceptions, though. Technical book writers do not have a CS background comparable to CS professors, mostly. In math and physics at the college level, you won't see textbooks used that were not written by professors. Even a BS or MS in CS with years of professional experience will not have the depth of understanding of a CS professor.
Taking discrete math before data structures and algorithms is very helpful.
Data Science and Machine Learning require a strong math background (more than regular CS).
Programming is a skill that requires practice. If you want to become a programmer, you should practice at least 2 hours per day. Reading code is also helpful, but, for it to be very helpful, you need to be comfortable programming.
C++, C, Java, and Python are all very important languages for a B.S. in CS. Knowing HTML5 and CSS3 will be expected too. Finally, SQL is essential.
Java Swing is still supported by Oracle, but Java FX is not. Things will be easier with Java Swing, but not so pretty.
MATLAB is a good language to know, even for CS majors. MATLAB does your math programming with no numerical problems to worry about.
If you are calculating math in C or C++, double precision is a must. Round-off errors come quickly with floats. Using Big Decimal or decimal in C# should be considered, but your code will slow down significantly.
It is better for yourself and others if you try to keep your code clear and readable. You code does not need to be rewritten repeatedly until it is difficult to understand. You code should not contain anything that is not absolutely necessary.
Copying code from the internet is not recommended in general.
Simple sorting algorithms could be copied, but they should be rewritten.
Know when to use new to instantiate a class and when not to.
In programs that have main, main should be short, instantiating classes and using the object methods.
Practice writing as many recursive algorithms as possible. It will make life easier.
The more math you know, the better off you will be in programming. That is my experience.
Code a little and then test it. That will save a great deal of time. You will then know where bugs are located. Try to debug with print statements
before using a debugger.
Use an IDE.
Netbeans 8.2 or Netbeans Apache is recommended since it is very helpful.
Visual Studio is not as helpful as Netbeans, but it is otherwise very good. I have been using that quite often. Visual Code is nice.
In Netbeans, set format code on save (and Eclipse).
You can still add C/C++ to Netbeans Apache. You need to include Netbeans 8.2 in the plugins.
You can format code in VS with Edit-Advanced-format document
I do not use the debugger in any IDE until I have debugged first with simple print statements.
Always read your code carefully when debugging.
It is faster to code slowly and accurately, being very careful, and using code a little then test.
Cut and paste when writing new code instead of typing, unless you are an accurate typer and you like to type.
The latest Netbeans IDE can also deal with C++.
If you use Netbeans on Windows, then install cygwin first and its g++ binaries should be selected automatically.
Cygwin is also useful if you need to use the command line for C++.
Learn vim for cases where you need to code in a terminal window on a server.
Some IDEs can be installed on a server. Those are helpful if you are allowed to install them.
Anaconda, and in particular, Spyder is recommended since it is very helpful.
Spyder 4 now has Kite, which provides for intellisense while programming python.
Jupyter is good for DS. Google Collab is also available. More DS modules are installed by default in Collab.
Math and Data Science courses may expect you to use Jupyter, since plots can be displayed easily.
I do not use the debugger in any IDE until I have debugged first with simple print statements.
Always read your code carefully when debugging.
Python's debugger runs by default. Also, add packages to python on the conda website.
It is faster to code slowly and accurately, being very careful, and using code a little then test.
Cut and paste when writing new code instead of typing, unless you are an accurate typer and you like to type.
OOP in python is different than that of C++ or Java, especially in terms of syntax.
Note that private and protected in python have different precise meanings when compared to Java and C++.
You can access, e.g., private data if you know about data mangling: See Lutz's books.
Try not to use numerical constants. Try to design your code so that those are not necessary, or keep them to a minimum.
If you are stuck in your coding, step away from it for an hour or so, and then return fresh. This is a must if you don't want to waste time.
If your project is difficult, start on it immediately, so that you can think about it in the back of your mind even in you are not actively working on it. Time for digestion of a problem is always helpful.
Divide and conquer is a must in programming. It is just a problem solving technique. Programming is problem solving and coding the solutions found.
Don't get into numerical difficulties when coding. If the problem becomes complicated numerically, try refactoring it. If the program grows quickly with little progress, and the code is calculating math, it is time to step back and think before proceeding.
If you are uncertain about or forgot a few concepts, go review before proceeding.
When working professionally, you should not assume that all of your colleagues will be honest with you.
Always be perfectly honest with all of your colleagues, or else you will invite trouble into your future.
When using multiple classes that communicate or are related, test both or all together before proceeding.