Da quello che ho visto, sembra che la notazione O grande e la complessità del tempo e della memoria siano enfatizzate molto nell'educazione formale informatica ... tuttavia essendo autodidatta, questa percezione si basa sull'ascolto e la lettura di ciò che le persone con tali educations dire e scrivere.
Anche se credo che le idee e i concetti generali siano importanti, non credo che la formalizzazione di essa (come la notazione O grande e la terminologia varia) contenga quasi altrettanto, tranne che per gli scopi della comunicazione. Solo perché qualcuno non ha familiarità con la notazione formale e la terminologia non significa che non possono vedere come e perché un algoritmo sarebbe più veloce di un altro in un caso particolare. Le persone possono vedere che il tempo necessario per cercare un albero binario bilanciato si riferisce al logaritmo in base 2 del numero di nodi senza prima apprendere la teoria della complessità in alcun senso formale, se capiscono come funziona l'albero e hanno una ragionevole comprensione dell'alto matematica scolastica. È importante sapere quando prestare attenzione alla complessità e all'uso della memoria e considerare i casi tipici e peggiori, anche se ... ma alcuni non lo fanno. Ovviamente, un background formale nella teoria potrebbe aiutare, ma non averlo non significa che non si possano applicare i concetti.
La notazione e la terminologia diventano importanti per la comunicazione. Offrono un buon modo per trasmettere una quantificazione delle prestazioni di un algoritmo a qualcun altro. Dal momento che emerge spesso nei documenti e nelle spiegazioni, è utile avere almeno una vaga comprensione di esso in modo che sia più facile da seguire.
Quindi sì, i concetti sono importanti (anche se meno quando risorse e tempo sono ampi ma i dati non lo sono). Ma sebbene i concetti siano importanti, la loro formalizzazione spesso non è così importante - e bisogna ricordare che la notazione e la terminologia non sono le stesse dei concetti stessi.
Modifica
Non pretenderei di comprendere i concetti in modo così dettagliato come qualcuno che ha studiato formalmente, ma molte idee generali hanno senso. Penso che ci sia valore nello studio formale di questo, ma alcuni di quel valore possono ancora esistere senza.
Per quanto riguarda l'introduzione dei concetti (al di fuori dello studio formale), penso che un buon inizio sia incoraggiare le persone a pensare a quanta memoria in testa hanno le strutture dati, quali passaggi coinvolgono gli algoritmi e come queste cose cambiano con dati diversi.
Aiuta anche a considerare situazioni e cambiamenti ipotetici, come considerare cosa succede se un albero è bilanciato rispetto a quello che succede se è il più sbilanciato possibile, o quanti livelli nell'albero dovrebbero essere la maggior parte dei nodi, o quanti più nodi che può contenere se la profondità è aumentata di un livello. Questo modo di pensare è generalmente utile per i programmatori, non solo quando si guarda alla complessità; e se applicato a pensare a come gli algoritmi e le strutture dati si comportano in circostanze diverse, naturalmente punta nella stessa direzione di un esame più formale della complessità.