To build data-intensive machine learning systems, you need a foundation ins software engineering and software design. Data structures and algorithms are the foundation upon which all systems are built. Knowing object-oriented design and design patterns helps tremendously in structuring your code. In these posts, I illustrate software engineering principles in Java and Python. Python is a dynamically typed language used for most machine learning-related code. Java is a statically typed language that underlies many data processing systems. Knowing how to write solid software in both languages is a great foundation for machine learning and data engineering roles or any other software engineering job.
If you just started on your software engineering journey, check out my guide to learning Java.
Object-Oriented Design (Java and Python)
I’ll introduce basic principles of object-oriented programming using Python and Java. Python is a very high-level language. I believe that seeing object-oriented design principles in a low-level language like Java helps develop a much deeper understanding. Therefore, I’ll add additional sections about the same concepts in Java but keep them separate for those of you who just want to read about Python or vice-versa.
- Basics of Object-Oriented Programming in Java
- Basics of Object-Oriented Programming in Python
- Inheritance: An introduction with examples in Java and Python
- Polymorphism: An introduction with examples in Java and Python
- Abstraction: An introduction with examples in Java and Python
- Encapsulation: An introduction with examples in Java and Python
Data Structures (Python)
- Python List
- Dictionaries, Tuples, and Sets in Python
- Matrix and Array in Python (NumPy)
- The Stack in Python
- The Queue in Python
- Priority Queue and Heapq in Python
Data Structures (Java)
- The Array in Java
- The Stack in Java
- The Queue in Java
- The Priority Queue in Java
- Hash-based data structures in Java