What to teach: sorting algorithms vs OOP?

Wes Turner <[email protected]>
Newsgroups gmane.comp.python.education
Message-ID <CACfEFw_T2f4_QCC=bxXG6fm3Ucw4nQ4OLgUSJxevtWTXD+h3aA@mail.gmail.com>
You can probably do sorting, inheritance, and interfaces at the same time?

An ISortable object must have a .sort() method. e.g.
DoublyLinkedList(LinkedList).

"15 Sorting Algorithms in 6 Minutes"
https://youtu.be/kPRA0W1kECg
- # of comparisons
- # of array accesses

... Big-O Cheat Sheet
http://bigocheatsheet.com
- "Array Sorting Algorithms"
- Time Complexity: Best, Average, Worst
- Space Complexity: Worst


I don't have K12 students.

It's important to learn OOP. There really is a push back from
OOP-over-abstraction to functional with interfaces by convention with  e.g.
Go,. As a multi-paradigm language built on C (not C++ (OOP which predates
Java)), programs can be written in many styles with Python.

There is - some might argue negligible - overhead to each function call. Is
there a good way to do compile-time interface checking with Python? Why not?

zope.interface is probably the most popular way to do 'actual' interfaces
in Python.
https://zopeinterface.readthedocs.io/en/latest/

Pyramid framework has zope.interface interfaces.
https://github.com/Pylons/pyramid/blob/master/pyramid/interfaces.py
- IResponse
- IRequest (a 'marker' interface)

An OOP exercise:

# Namespacing
def area_of_a_rectangle()
def perimeter_of_a_rectangle()
def shape__rectangle__area()
def shape__square__area()

# Inheritance, Interfaces, Parameters
class Shape()
    def __init__(*args, **kwargs):  # *
    def area()
    def perimeter()
    def height/width/[depth]()
        # physical units
            # class Number(float):
            #     def __init__(value, unit=)
class Square()
class Rectangle()
class Triangle()


Sorting, [multiple] database indexes (import sqlite), and tree-balancing
may be appropriate to teach or mention together or in an optimal sequence.

-
https://github.com/jwasham/coding-interview-university/blob/master/README.md#sorting
-
https://github.com/jwasham/coding-interview-university/blob/master/README.md#object-oriented-programming
-
https://github.com/jwasham/coding-interview-university/blob/master/README.md#design-patterns
  - https://en.wikipedia.org/wiki/Software_design_pattern
    - OOP

sorted() is implemented with/as a Timsort (and expects an interface (is it
__cmp__, __gt__, __lt__, AND __eq__?)).

https://wiki.python.org/moin/TimeComplexity

On Tuesday, August 14, 2018, Jurgis Pralgauskis <
[email protected]> wrote:

> Hi,
>
> The dillema I have when teaching:
>  our k12 curricullum of programming is more based on algorithms (math
> ideas),
> but when working as programmer, I see the bigger need of SW architecture
> knowledge..
>
>  OOP is one big topic, which could replace sorting alg stuff (that I never
> applied (directly) in this century...). The topics could be integrated in
> making mini game engine :)
>
> I'd still leave classics of sum, min search, and search in sorted vs non
> array to get the idea of algorithms.
>
> What are your approaches, if you have programming classes in K12?
> --
> Jurgis Pralgauskis
> tel: 8-616 77613
>

_______________________________________________
Edu-sig mailing list
[email protected]
https://mail.python.org/mailman/listinfo/edu-sig
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.