Если вы достигли этого уровня, похлопайте себя по плечу.
Потому что к настоящему времени у вас есть навыки, которые позволяют вам решать самые разнообразные проблемы.
Однако чего-то не хватает.
Вы все еще недостаточно опытны в написании эффективного кода.
Что мы имеем в виду?
Например, вы не знаете, как изменить свой код, чтобы он работал быстрее. Вы даже не можете проанализировать, почему это медленно в первую очередь.
Это нормально.
Знания, которые вы приобрели на предыдущих уровнях, недостаточны для того, чтобы вы имели четкое представление о том, что на самом деле представляет собой производительность и как изменить существующий код, чтобы он работал быстрее.
Не верите нам? Посмотрите на этот простой код, который вычисляет n-е число Фибоначчи.
def fib(n): if n < 2: return n return fib(n-2) + fib(n-1) print(fib(100))
Код выглядит достаточно простым и очень простым, верно?
Попробуйте использовать этот код для вычисления fib (100)
Теперь давайте сделаем простую модификацию кода.
def fib(n, d): if n < 2: return n if n not in d: d[n] = fib(n-2, d) + fib(n-1, d) return d[n] print(fib(100, {}))
На этот раз все это заняло несколько миллисекунд, и вы получите ответ – 354224848179261915075 на тот случай, если вам интересно.
Мы использовали то, что называется динамическим программированием, чтобы решить эту проблему и заставить ее работать астрономически быстрее.
Что ж, мы надеемся, что вы уже убедились, что вам следует изучить структуры данных и алгоритмы.
Навыки, которые вы собираетесь освоить на этом уровне, являются одними из основных отличий между средними программистами и опытными программистами.
Вам нужно будет узнать о связанных списках, деревьях, стеках, очередях, графиках, хеш-таблицах, рекурсии, динамическом программировании, алгоритмах поиска и сортировки и т.д.
Как только вы овладеете этими концепциями, вы сможете получить работу по разработке программного обеспечения в любой технологической компании по вашему выбору.
Мы действительно это имели в виду!
Начало: