Главная страница

Сам_себе_программист._Как_научиться_программировать_и_устроиться. Guide to Programming Professionally


Скачать 3.94 Mb.
НазваниеGuide to Programming Professionally
Дата25.02.2023
Размер3.94 Mb.
Формат файлаpdf
Имя файлаСам_себе_программист._Как_научиться_программировать_и_устроиться.pdf
ТипGuide
#954463
страница14 из 15
1   ...   7   8   9   10   11   12   13   14   15

Глава 22. Алгоритмы
Алгоритм подобен кулинарному рецепту.
Васим Латиф
Эта глава представляет собой упрощенное введение в алгоритмы. Алгоритм — это серия шагов, которым следуют при решении проблемы. Проблема может за- ключаться в поиске в списке или выводе слов песни «99 бутылок пива на стене».
FizzBuzz
Наконец-то пришло время научиться решать FizzBuzz , известный тест, использу- емый на собеседованиях для отсеивания кандидатов.
Напишите программу, которая выводит числа от 1 до 100. Но вместо чисел, кратных трем, выводите «Fizz», вместо кратных пяти выводите «Buzz», вместо кратных и трем, и пяти — «FizzBuzz».
Для решения этой задачи нужно придумать способ проверить, кратно ли чис- ло трем, пяти, и трем, и пяти, либо ни трем, ни пяти. Если число кратно трем, это значит, что оно делится на три без остатка. То же самое касается пяти. Опе- ратор деления по модулю (%) возвращает остаток . Задачу можно решить, переби- рая числа и проверяя, кратно ли число и трем и пяти, только трем, только пяти, или не кратно ни тому, ни другому.
Python_ex300.py
1
def  zz_buzz():
2
for i in range(1, 101):
3
if i % 3
== 0 and i % 5 == 0:
4
print("FizzBuzz")
5
elif i % 3 == 0:
6
print("Fizz")
7
elif i % 5 == 0:
8
print("Buzz")
9
else:
10
print(i)
11
 zz_buzz()
>> 1
>> 2
>> Fizz
Сначала вы перебираете числа от 1 до 100. Затем вы проверяете, делится ли число и на 3, и на 5. Это важно сделать в первую очередь, так как если число де- лится и на 3, и на 5, нужно вывести FizzBuzz и перейти к следующей итерации

186
Часть IV
цикла. Если бы вы сначала проверяли, делится ли число только на 3 или только на 5, и обнаружили бы такое число, вы бы не могли вывести Fizz или Buzz и перейти к следующей итерации цикла, поскольку это число все еще могло бы де- литься и на 3, и на 5. А в этом случае вывод Fizz или Buzz был бы неверен, ведь нужно было бы выводить FizzBuzz.
Как только вы проверили, делится ли число и на 3, и на 5, порядок этих двух тестов больше не важен, ведь вам известно, что число не делится на оба этих числа. Если число делится либо на 3, либо на 5, вы останавливаете алгоритм и выводите Fizz или Buzz. Если число проходит мимо первых трех условий, зна- чит, оно не делится ни на 3, ни на 5 (ни на оба этих числа одновременно), и его можно вывести.
Последовательный поиск
Поисковый алгоритм находит информацию в структуре данных, например в списке. Последовательный поиск — это простой поисковый алгоритм, кото- рый проверяет каждый элемент в структуре данных на предмет его соответствия тому, что алгоритм ищет.
Если вы когда-то играли в карты и искали в колоде определенную карту, то, вероятно, осуществляли последовательный поиск. Вы перебирали каждую карту в колоде, одну за другой, и если карта была не той, которую вы искали, вы пере- ходили к следующей карте. Когда вы наконец находили желаемую карту, то оста- навливались. Если вы перебрали всю колоду и не нашли карту, вы также оста- навливались, поскольку понимали, что карты там нет. Ниже приведен пример последовательного поиска в Python.
Python_ex301.py
1
def ss(number_list, n):
2
found =
False
3
for i in number_list:
4
if i == n:
5 found =
True
6
break
7
return found
8
numbers
= range(0, 100)
9
s1
= ss(numbers, 2)
10
print(s1)
11
s2
= ss(numbers, 202)
12
print(s2)
>> True
>> False

187
Введение в информатику
Вначале вы присвоили переменной found значение False. Эта перемен- ная отслеживает, нашел ли алгоритм искомое число. Затем вы перебираете каждое число в списке и проверяете, является ли это число искомым. Если яв- ляется, вы присваиваете переменной found значение True, выходите из цик- ла и возвращаете значение переменной found (которой теперь присвоено зна- чение True).
Если вы не нашли желаемое искомое число, то переходите к следующему чис- лу в списке. Если вы перебрали весь список, то возвращаете переменную found, которая примет значение False, если число отсутствует в списке.
Палиндром
Палиндром — это слово, которое одинаково записывается в обоих направлени- ях. Вы можете написать алгоритм, который будет проверять, является ли слово палиндромом, меняя порядок букв в нем на обратный и сравнивая измененное слово с исходным. Если измененное и исходное слово записываются одинаково, значит, исходное слово было палиндромом.
Python_ex302.py
1
def palindrome(word):
2
word = word.lower()
3
return word[::-1] == word
4
print(palindrome("V  "))
5
print(palindrome("V "))
>> False
>> True
Метод lower переводит прописные символы в проверяемом слове в нижний регистр (строчное написание). Для Python V и  — это два разных символа, а вам нужно, чтобы он рассматривал их как один и тот же символ.
Код word[::-1] меняет порядок букв в слове на обратный. [::-1] — это синтаксис , используемый Python для возвращения среза целого итерируемого объекта в обратном порядке. Вы меняете порядок букв в слове на обратный, что- бы сравнить измененное слово с исходным, если они одинаковые, функция воз- вращает True, поскольку исходное слово является палиндромом. В противном случае функция возвращает False.
Анаграмма
Анаграмма — это слово, созданное путем перестановки букв другого слова. Сло- во «тапок» является анаграммой слова «капот», поскольку каждое из этих слов может быть получено путем перестановки букв другого слова. Определить, яв- ляются ли два слова анаграммами, можно отсортировав буквы каждого из них в алфавитном порядке и проверив, одинаковые ли они.

188
Часть IV
Python_ex303.py
1
def anagram(w1, w2):
2
w1
= w1.lower()
3
w2
= w2.lower()
4
return sorted(w1) == sorted(w2)
5
print(anagram("  ", "  "))
6
print(anagram("", " "))
>> True
>> False
Сначала вы вызываете метод lower в обоих словах, чтобы исключить влия- ние регистра на результат. Затем оба слова передаются в метод Python sorted.
Этот метод возвращает слова с буквами, отсортированными в алфавитном по- рядке. Наконец, вы сравниваете результаты. Если отсортированные слова совпа- дают, ваш алгоритм возвращает True, если нет — False.
Подсчет вхождений символов
В этом разделе вы напишете алгоритм, возвращающий число — количество раз, ко- торое каждый символ встречается в строке. Алгоритм будет перебирать строку сим- вол за символом и в словаре отслеживать, сколько раз встречается каждый символ.
Python_ex304.py
1
def count_characters(string):
2
count_dict = {}
3
for c in string:
4
if c in count_dict:
5
count_dict[c] += 1 6
else:
7 count_dict[c] = 1 8
print(count_dict)
9
count_characters(" ")
>> {'': 1, '': 2, ' ': 1, ' ': 1, '': 1, '': 1, '': 1}
В этом алгоритме вы перебираете каждый символ в строке " ", пе- реданной в качестве параметра string. Если символ уже содержится в словаре count_dict
, значение символа увеличивается на 1.
В противном случае вы добавляете символ в словарь и устанавливаете его значение на 1. К концу цикла for словарь count_dict содержит пары ключ- значение для каждого символа строки. Значение каждого ключа — это число вхождений соответствующего символа в строке.

189
Введение в информатику
Рекурсия
Рекурсия — это способ решения проблем, который предполагает разбивание проблемы на все меньшие и меньшие фрагменты, пока проблема не решает- ся элементарно. До сих пор вы решали проблемы, используя итерационные
алго ритмы. Итерационные алгоритмы решают проблемы путем повторения шагов снова и снова, обычно при помощи цикла. Рекурсивные (рекуррент-
ные) алгоритмы полагаются только на функции, которые вызывают сами себя. Любую проблему, которую можно решить итерационно, можно решить рекурсивно, но иногда рекурсивный алгоритм представляет собой более из- ящное решение.
Рекурсивный алгоритм создается внутри функции. Функция должна содер- жать базовый случай — условие, завершающее рекурсивный алгоритм, не по- зволяющее ему продолжаться вечно. Внутри функции функция вызывает себя сама. Каждый раз, как функция вызывает себя сама, она продвигается ближе к базовому случаю. В конце концов, выполняется условие базового случая, про- блема решается, и функция перестает вызывать себя. Алгоритм, следующий та- ким правилам, отвечает трем законам рекурсии.
1. Рекурсивный алгоритм должен содержать базовый случай.
2. Рекурсивный алгоритм должен изменять свое состояние и двигаться по на- правлению к базовому случаю.
3. Рекурсивный алгоритм должен вызывать сам себя
15
Ниже показан рекурсивный алгоритм, выводящий слова известной народ- ной песни «99 бутылок пива на стене».
Python_ex305.py
1
def bottles_of_beer(bob):
2
"""        99    .
3
:param bob:  &  Y  .
4
"""
5
if bob < 1:
6
print(
"""$     . $  
 .""")
7
return
8
tmp
= bob
9
bob
-= 1 10
print
("""{}     . {}    .

B  ,   , {}   
 .
11
""".format(tmp,
12
tmp,
13
bob))
15
interactivepython.org/runestone/static/pythonds/Recursion/TheThreeLawsofrecursion.htm

190
Часть IV
14
bottles_of_beer(bob)
15
bottles_of_beer(99)
>> 99     . 99    .
>> B  ,   , 98     .
В этом примере первый закон рекурсии был выполнен благодаря следующе- му базовому случаю:
Python_ex306.py
1
if bob < 1:
2
print("""$     . $    .""")
3
return
Когда значение переменной bob становится меньше 1, функция перестает вызывать сама себя.
Строка кода bob -= 1 отвечает второму закону рекурсии, поскольку умень- шение переменной bob приводит к движению по направлению к базовому слу- чаю. В данном примере вы передали в вашу функцию число 99 в качестве пара- метра. Базовый случай выполняется, когда переменная bob меньше 1, а каждый раз, когда функция вызывает себя, она двигается к базовому случаю.
Последний закон рекурсии выполняется благодаря этому.
Python_ex307.py
1
bottles_of_beer(bob)
Эта строка кода проверяет, что пока базовый случай не выполнен, ваша функция будет вызывать себя. Каждый раз, как функция вызывает себя, она передает себе параметр, который был уменьшен на 1, и таким образом продви- гается к базовому случаю. В первый раз, когда функция вызывает себя в этой строке кода, она передает себе в качестве параметра 98, затем 97, затем 96, пока, в конечном итоге, не передаст себе параметр меньше 1, что выполнит базовый случай и выведет строку $     . $ -
  
. Тогда функция сталкивается с ключевым словом return, что оста- навливает алгоритм.
Как известно, рекурсия — одна из самых сложных концепций для начинаю- щих программистов. Если поначалу она будет казаться вам запутанной, не вол- нуйтесь — просто продолжайте практиковаться. И помните: чтобы понять рекур- сию, сначала нужно понять рекурсию.
Словарь терминов
Алгоритм: серия шагов, которым следуют для решения проблемы.
Анаграмма: слово, созданное путем перестановки букв другого слова.
Базовый случай: условие, завершающее рекурсивный алгоритм.
Итерационный алгоритм: решает проблемы путем повторения шагов снова и снова, обычно используя цикл.

Палиндром: слово, которое одинаково записывается в обоих направлениях.
Поисковый алгоритм: алгоритм, который находит информацию в структуре данных, например в списке.
Последовательный поиск: простой поисковый алгоритм для поиска информа- ции в структуре данных, который проверяет каждый элемент в ней на предмет его соответствия тому, что алгоритм ищет.
Рекурсивный (рекуррентный) алгоритм: рекурсивные алгоритмы используют функции, которые вызывают сами себя.
Рекурсия: способ решения проблем, который предполагает разбивание пробле- мы на все меньшие и меньшие фрагменты, пока проблема не решается элемен- тарно.
Практикум
Зарегистрируйте учетную запись на сайте leetcode.com и попытайтесь решить на нем три алгоритмические задачи легкого уровня.

192
Глава 23. Лучшие практические советы
по программированию
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Джон Вудс
Производственный код — это код используемого людьми продукта. Отправить программное обеспечение в производство — значит вывести его в мир. В этой главе я рассказываю о нескольких общих принципах программирования, кото- рые помогут вам в написании окончательного, готового к производству кода.
Многие из этих принципов были описаны в «Программисте-прагматике», книге
Энди Ханта и Дейва Томаса, которая значительно улучшила качество моего кода.
Написание кода — крайнее средство
Ваша работа как инженера-программиста заключается в том, чтобы писать как можно меньше кода. Когда у вас возникает проблема, вашей первой мыслью должно быть не «Как я могу решить ее?», а «Решил ли уже кто-то эту проблему, и если да, то могу ли я использовать это решение?». Если вы пытаетесь решить распространенную проблему, есть высокий шанс, что кто-то уже в ней разобрал- ся. Начните с поиска решения онлайн, и только после того, как выяснится, что вашу проблему еще никто не решил, сами приступайте к решению.
НПС
НПС (Не повторяй себя) — это принцип программирования, согласно которому в программе не следует повторно использовать один и тот же или сильно похо-
ЧАСТЬ V
Получение работы

193
Получение работы жий код. Вместо этого нужно поместить код в одну функцию, обрабатывающую множество ситуаций.
Ортогональность
Ортогональность — еще один важный программистский принцип, ставший из- вестным благодаря книге «Программист-прагматик». Хант и Томас дают такое объяснение: «Этот термин был введен в информатике для обозначения некой разновидности независимости или несвязанности. Два или более объекта орто- гональны, если изменения, вносимые в один из них, не влияют на любой другой.
В грамотно спроектированной системе код базы данных будет ортогональным к интерфейсу пользователя: вы можете менять интерфейс пользователя без воз- действия на базу данных и менять местами базы данных, не меняя интерфейса».
Чтобы применить этот принцип на практике, хорошенько запомните, что «A не должно влиять на Б». Если у вас есть два модуля, module a и module b, то module a не должен вносить изменения в module b и наоборот. Если вы спро- ектируете систему, где A влияет на Б, Б влияет на В, В влияет на Г, — все очень быстро выйдет из-под контроля и система станет неуправляемой.
У каждого фрагмента данных должно быть одно
представление
Один фрагмент данных следует хранить в одном месте. Скажем, вы разрабаты- ваете программное обеспечение, обрабатывающее телефонные номера. Если у вас есть две функции, использующие список кодов регионов, проследите, чтобы все коды были помещены в один список — не должно быть двух дублирующих друг друга списков для каждой функции. Используйте глобальную переменную, которая будет хранить коды регионов. Или еще лучше, храните данные в файле или базе данных.
Проблема дублирования данных в том, что на определенном этапе вам пона- добится изменить эти данные. Тогда вам придется вспоминать все места с дубли- катами, чтобы изменить также и их. Если вы измените список кодов регионов в одной функции и забудете о другой, ваша программа не будет работать должным образом. Этого можно избежать, если у каждого фрагмента данных будет одно представление.
У функции должна быть одна задача
У каждой написанной вами функции должна быть одна, и только одна, задача.
Если вам покажется, что функции становятся слишком длинными, спросите себя — возможно, они выполняют больше одной задачи? Ограничение функций на выполнение одной задачи дает несколько преимуществ. Код будет легче чи- таться, ведь имя вашей функции укажет именно на то, чем она занимается. Если код не работает, то будет легче осуществить отладку — поскольку когда каждая функция отвечает за конкретную задачу, их можно быстро изолировать и опре- делить, какая из них не работает. Как говорили многие известные программи- сты; «Столько сложностей в программном обеспечении происходит от попыток заставить одну вещь делать две вещи».

194
Часть V
Если на это уходит много времени, вероятно,
вы совершаете ошибку
Если вы не работаете над чем-то очевидно сложным и не работаете с огромным количеством данных, а ваша программа очень долго загружается, вероятно, вы делаете что-то не так.
Делайте все самым лучшим способом
Если в процессе программирования вы подумали: «Я знаю, что существует луч- ший способ сделать это, но я уже не хочу останавливаться и выяснять, как это сделать», не продолжайте кодинг. Остановитесь. Вы должны сделать это лучшим способом.
Соблюдайте соглашения
Если вы потратите время на изучение соглашений нового языка программиро- вания, то сможете быстрее читать код на этом языке. PEP 8 представляет собой сборник методических рекомендаций по написанию кода на Python — ознакомь- тесь с ним. Там есть правила по переносу кода на новые строки. На русском языке документ PEP 8 доступен по адресу pythonworld.ru/osnovy/pep-8-rukovodstvo-
po-napisaniyu-koda-na-python.html.
Используйте мощную IDE
До сих пор для написания кода вы использовали IDLE — интерактивную среду разработки (IDE), которая поставляется с Python. Но IDLE — лишь одна из мно- гих доступных IDE , и я не советую использовать ее долгое время, поскольку она не слишком мощная. Например, при открытии проекта Python в более удобной среде разработки для каждого файла открывается своя вкладка. В IDLE для каж- дого файла нужно открывать отдельное окно, что усложняет процесс переклю- чения между файлами и может быть утомительно.
Я пользуюсь оболочкой PyCharm , разработанной компанией JetBrains. До- ступны бесплатная и профессиональная (платная) версии. Ниже приведен спи- сок возможностей PyCharm, которые существенно сэкономят мое время:
1. Если вы захотите увидеть определение переменной, функции или объекта, у
PyCharm есть ссылки, переносящие вас к определившему их коду (даже если он находится в другом файле). Также есть ссылки для возвращения на исход- ную страницу.
2. В PyCharm присутствует возможность сохранения истории, и это значитель- но повысило мою производительность. PyCharm автоматически сохраняет последнюю версию проекта после каждого изменения. Вы можете использо- вать PyCharm как локальную систему управления версиями, не помещая дан- ные в облачный репозиторий. Вам не нужно ничего делать, все происходит автоматически. Раньше, когда я не знал об этой возможности, я решал про- блему, менял решение, затем у меня появлялась необходимость откатиться к прежнему решению, но если я не помещал исходное решение на GitHub , оно пропадало, и мне приходилось начинать все с начала. Используя эту опцию,

195
Получение работы вы можете откатить время на 10 минут назад и заново загрузить ваш проект в том самом состоянии, в котором он тогда находился. Если вы снова пере- думаете, можете перемещаться туда-обратно между различными решениями столько раз, сколько захотите.
3. Во время работы вы, вероятно, часто копируете и вставляете код. В PyCharm вместо копирования и вставки вы можете перетаскивать код вверх и вниз по текущей странице.
4. PyCharm поддерживает системы управления версиями, такие как Git и SVN .
Вместо использования командной строки вы можете использовать Git из
PyCharm. Чем меньше переключений между вашей IDE и командной стро- кой, тем вы более производительны.
5. В PyCharm есть встроенная командная строка и оболочка Python.
6. В PyCharm есть встроенный отладчик. Отладчик — это программа, позволя- ющая остановить выполнение кода и просмотреть программу строка за стро- кой, отмечая значения переменных в разных частях программы.
Если вы хотите научиться пользоваться PyCharm, на сайте JetBrains есть руководство, доступное по адресу www.jetbrains.com/help/pycharm/2016.1/
quick-start-guide.html.
Логирование
Логирование — это практика записи данных во время работы программного обеспечения. Логирование можно использовать для отладки программы и полу- чения дополнительной информации о том, что происходило во время работы вашей программы. Python поставляется с модулем logging, позволяющим запи- сывать процессы работы в консоль или файл.
Когда что-то в вашей программе работает неправильно, нельзя оставлять это без внимания — нужно запротоколировать информацию о случившемся, чтобы изучить ее позже. Логирование также полезно при сборе и анализе дан- ных. Например, можно настроить веб-сервер , чтобы он производил журнали- рование данных, включая дату и время, каждый раз, как он получает запрос.
Все ваши журналы нужно сохранить в базе данных и создать программу для анализа этих данных, построив граф, отображающий количество посещений вашего сайта в день.
Блогер Хенрик Варне пишет: «Одно из отличий хорошего программиста от плохого заключается в том, что хороший программист использует логирование, а также другие инструменты, позволяющие с легкостью отладить программу, ког- да все рушится». О том, как использовать модуль logging, можно прочесть на сайте docs.python.org/3/howto/logging.html.
Тестирование
Под тестированием программы подразумевается процесс проверки того, что она «соответствует требованиям, сопровождавшим ее проектирование и разра- ботку, корректно отвечает на все виды ввода, выполняет свои функции за прием- лемое количество времени, пригодна к использованию, может быть установлена и запущена в предполагаемых окружениях, а также достигает результата, требуе-

196
Часть V
мого от нее заинтересованными сторонами». Для тестирования своих программ программисты пишут другие программы.
В производстве тестирование является обязательным. Ни одна программа, отправляемая в производство, не может считаться полноценной до тех пор, пока для нее не будут написаны тесты. Впрочем, если вы написали небольшую программу, которую больше не собираетесь использовать, ее тестирование мо- жет быть тратой времени. Если же вы пишете программы, которые будут исполь- зоваться другими людьми, вы обязаны написать тесты. Как говорили некоторые известные программисты, «Непротестированный код — нерабочий код». Узнай- те, как использовать модуль Python unittest на странице docs.python.org/3/
library/unittest.html.
Анализ кода
При анализе кода кто-либо читает ваш код и составляет на него отзыв. Следует делать столько обзоров кода, сколько возможно — особенно если вы програм- мист-самоучка. Даже если вы последуете всем советам, изложенным в этой главе, вы все равно будете делать что-то неправильно. Нужно, чтобы кто-то опытный прочел ваш код и указал на ошибки, которые вы затем устраните.
Code Review — сайт, где можно провести анализ кода сообществом програм- мистов. Любой желающий может зайти на Code Review и опубликовать свой код; другие участники сообщества Stack Exchange просматривают этот код, составля- ют отзыв, указывая, что было сделано хорошо, и предлагают полезные советы по его улучшению. Посетите Code Review по адресу codereview.stackexchange.com.
Безопасность
Программисты-самоучки часто игнорируют тему безопасности . Скорее всего, на собеседованиях вас не будут спрашивать об этом; безопасность не важна для про- грамм, которые вы пишете во время обучения. Однако, как только вы получите свою первую должность, вы будете непосредственно ответственны за безопас- ность вашего кода. В этом разделе я дам некоторые советы по поддержанию без- опасности кода.
Ранее вы научились использовать команду sudo для работы от имени супер- пользователя. Никогда не запускайте программу из командной строки, исполь- зуя sudo, если в этом нет необходимости, поскольку если программа будет ском- прометирована, хакер получит доступ к правам root. Также, если вы управляете веб-сервером, следует отключить возможность входа в систему от имени супер- пользователя. Все хакеры знают о существовании учетной записи суперпользо- вателя, так что при атаке на систему это будет легкая цель.
Никогда не забывайте, что ввод пользователя может быть вредоносным. Не- сколько видов вредоносных атак построены на эксплойтах, использующих ввод, поэтому нужно исходить из того, что ввод всех пользователей вредоносен, и программировать в соответствии с этим.
Еще одной стратегией поддержки вашего программного обеспечения в без- опасности может считаться минимизирование поверхности атаки — различ- ных областей программы, откуда хакеры могут извлечь данные или атаковать

197
Получение работы вашу систему. Уменьшая поверхность атаки, вы снижаете вероятность появле- ния в вашей программе уязвимостей. Далее перечислю несколько стратегий по уменьшению поверхности атаки: не храните конфиденциальные данные без не- обходимости; предоставляйте пользователям самый низкий уровень доступа из возможных; используйте как можно меньше сторонних библиотек (меньше кода, меньше эксплойтов); избавьтесь от возможностей, которые больше не ис- пользуются.
Отключение функции авторизации от имени суперпользователя, насторо- женное отношение к пользовательскому вводу, минимизирование поверхности атаки — важные шаги на пути к обеспечению безопасности программ. Но это только начало. Всегда пытайтесь думать как злоумышленник. Как бы он смог ис- пользовать ваш код в своих интересах? Такой способ мышления поможет най- ти уязвимости, которые иначе вы могли проглядеть. Аспектов, касающихся без- опасности, существует куда больше, чем я смогу раскрыть в этой книге, так что непрерывно размышляйте о безопасности и изучайте ее. Брюс Шнайер сказал лучше всех: «Безопасность — это состояние души».
Словарь терминов
Анализ кода: когда другой программист читает ваш код и составляет на него отзыв.
Логирование: практика записи данных во время работы программного обеспе- чения.
НПС: принцип программирования «Не повторяй себя».
Ортогональность: «Этот термин был введен в информатике для обозначения некой разновидности независимости или несвязанности. Два или более объекта ортогональны, если изменения, вносимые в один из них, не влияют на любой другой. В грамотно спроектированной системе код базы данных будет ортого- нальным к интерфейсу пользователя: вы можете менять интерфейс пользова- теля без воздействия на базу данных и менять местами базы данных, не меняя интер фейса».
Отладчик: программа, позволяющая остановить выполнение кода и просмо- треть вашу программу строка за строкой, отмечая значения переменных в раз- ных частях программы.
Поверхность атаки: различные области программы, откуда хакеры могут из- влечь данные или атаковать вашу систему.
Производственный код: код используемого людьми продукта.
Производство: отправить программное обеспечение в производство — значит вывести его в мир.
Тестирование: процесс проверки того, что программа «соответствует требова- ниям, сопровождавшим ее проектирование и разработку, корректно отвечает на все виды ввода, выполняет свои функции за приемлемое количество времени, пригодна к использованию, может быть установлена и запущена в предполага- емых окружениях, а также достигает результата, требуемого от нее заинтересо- ванными сторонами».

198
Часть V
1   ...   7   8   9   10   11   12   13   14   15


написать администратору сайта