MITx has released a course titled "Software Construction in Java". The course is aimed at more experienced Developers and is going to teach a couple of general principles of Software Development.
The course has the goal that you develop good code, which is defined as:
- Safe from bugs: Correct behavior of the code, now and in the future
- Easy to understand: Code should be easily understandable by other developers
- Ready for change: Architectural patterns that allow you to modify the code without major rewrites.
Over the next couple of weeks, I will complete this course and will publish my notes and thoughts on the material. You can also take the course at https://www.edx.org/course/software-construction-java-mitx-6-005-1x
Why am I taking this course?
I have worked with Java in the past. I do not prefer using the language. However, the Python course from MIT was fantastic and thought very interesting concepts that apply to all languages. My hope is that this course will teach broader concepts and the language they are using just happens to be Java.
Lecture 1: Overview + Static Typing
In the first lecture I skipped most of the videos, they seemed more like an introduction to Javas static typing, which I was already familiar with.
Lecture 2: Code Review
The second lecture takes a look at good coding practices.
Lecture notes: The purpose of a code review has two main goals:
- Improve the code
- Improve the programmer
Personal notes: In reality on many programming projects the "Code Review"- Phase is cut due to budget constraints, lack of time, and personal feelings. Remember when you do a code review you may hurt the feeling of another programmer, who thinks he is infallible. This usually causes that more and more bad code is written. Making the project not maintainable and unreliable. If it is possible for your project to do Code Reviews, you defiantly should do them, and have a very specific action plan that the other developer can learn from his mistakes.
Lecture notes: You can find good style guides at https://github.com/google/styleguide
Personal notes: Every programmer has his personal style how he likes to format and read his code. All university classes (including this one) do not provide a style guide. With the consequence that also no style guide is enforced. In larger projects, this would not be possible. The version control systems suddenly cause problems, create merge conflicts, etc. Styleguides should never be manually enforced. That would be tedious and create a lot of unnecessary work. The guide should be enforced by your build process. This prevents programmers from using their own style guide, avoids merge issues, is easier to manage, and it is psychologically better for the programmer that the machine rejects code rather than another programmer. The best practice would be that every code commit gets checked prior to being allowed into the repository. This ensures that every developer is playing by the same rules. (To find more information on this subject google for “git hooks” and “java checkstyle”)
- Don't Repeat Yourself (DRY)
- Comments where needed
- Fail fast
- Avoid magic numbers
- One purpose for each variable
- Use good names
- No global variables
- Return results, don't print them
- Use whitespace for readability
Personal notes: While the lecture presents various strategies to prevent the most common beginner mistakes. These are just a select few of all the various types of code smells. I prefer to use the IDE IntelliJ, it has a feature called "Code Inspector". It will scan your code and suggest fixes for a lot of types of code smells. Good code should never have obvious code smells.
For the “Java Tutor” Homework assignments you must use an Eclipse Plugin. So sadly you have to use Eclipse with a custom-built plugin and as usual, I have had a lot of fun with randomly crashing Eclipse, the plugin giving me over and over again the same questions. The “Java Tutor” is overall quite weak. The questions are more like “fill in the blanks” and only accepts a single correct answer. Usually, the titles of the links to the related materials give away the correct answer. However, if you enter the wrong value, you can simply click “Show Answer”, copy the solution, and progress without penalty.