Как стать автором
Обновить

Программа-тренажер английского языка на Bash

Важнейшим из языков для IT сферы является технический английский.
Именно на нем пишутся все доки, мануалы, хелпы и проч.
К сожалению, ВУЗовское образование далеко не всегда позволяет изучить английский язык настолько, чтобы полноценно понимать техническую литературу. Поэтому, если программист или любой другой айтишник желает больше развиваться в своей сфере деятельности, ему необходимо самообразовываться в английском.
Ниже я предлагаю придуманный мной простой способ для расширения словарного запаса, которым пользуюсь сам.
1. Литература.
Находим в интернете интересующее нас руководство, книгу. Начинаем читать.
2. Список незнакомых слов и фраз.
Выделяем, переводим и сохраняем их в файле input_file.txt в формате:
незнакомое_слово: перевод
незнакомое_слово2: перевод
незнакомое_слово3: перевод
и т.д.
Это будет наш личный словарик.
Для перевода я пользовался дополнением к браузеру firefox «S3.Google Translator». Вы можете использовать любой удобный для вас метод.
На данном этапе нас интересует конечно же не «машинный перевод», а то, что фраза непосредственно означает в контексте IT, поэтому переводы мы делаем осмысленные (нам же потом ими пользоваться).
3. Запускаем описанный ниже скрипт, написанный на bash.
Смысл скрипта в том, что он случайным образом отображает вначале «незнакомое слово» (до двоеточия), а после нажатия любой клавиши — перевод.
Наша задача — видя «незнакомое слово» — попытаться мысленно вспомнить, что оно означает. После нажатия клавиши мы видим правильный ответ. Через какое-то время слова повторяются. Таким образом происходит запоминание.
В качестве разделителя используется символ двоеточия. Почему не просто пробел — чтобы можно было использовать выражения.
По мере запоминания словарик можно изменять/дополнять.

Код скрипта на bash
#!/bin/bash

#~ this programme scaned lines from a file and show them to user line by line


#~ declare global variables
declare -a lines	#~ array with word lines


#~ show to user words
func_user_input_lines() {
	local i					#~ line index
	local line				#~ single line
	local quantity=${#lines[@]}		#~ quantity (number) of lines

	[ $quantity == 0 ] && exit 0		#~ if input file is empty
	echo 'Type the "Q" button to exit the programme'

	while true; do				#~ infinite loop
		i=$(( $RANDOM % $quantity ))	#~ make random index
		line=$( echo "${lines[$i]}" | awk -F ':' '{print $1}' )
		echo -ne $line
		read -s -n1			#~ press any key
		echo -e ${lines[$i]#$line}
		[ "$REPLY" == "q" ] && break	#~ if "Q" is pressed - quit the loop
	done
	echo
	return 0
}


#~ read input file line by line into $lines array
func_read_file() {
	local i=0	#~ lines array conter (lines index)
	local line	#~ single line
	local input_filename="$1"

	while read line; do		#~ read input file line by line
		[ "$line" == "" ] && continue
		lines[$i]=$line
		(( i++ ))
	done < $input_filename
}


#~ main function - begin to work
func_main() {
	func_read_file "input_file.txt"	#~ read input file into $lines array
	func_user_input_lines		#~ user input words
}


func_main	#~ call the function and begin to work
<source/>
</spoiler>

<spoiler title="Словарик input_file.txt">
above: выше
absence: отсутствие
accessible: доступный
accurate: точный
advance: перенос строки (line advance) (продвижение)
Although: Хотя
Among others: , Среди прочего,
Among: Среди
annoys: раздражает
approach: подход
arbitrary: произвольный
as follows: следующим образом
assignment statements: операторы присваивания
assignment: назначение, задание, присваивание
assumes: предполагает
at a glance: с одного взгляда
attempt: попытка
augmented: дополнена
augment: увеличивать
behaviour: поведение
beliefs: убеждений
Besides: Кроме того
bogged: погрязнуть
botched: неудачной
braces: фигурные скобки
brevity: краткость
brief: краткий
cause: заставлять, основание (для)
centigrade: стоградусная шкала (по Цельсию)
clarify: прояснить
communicating data: передача данных
comparatively: сравнительно
complicated: сложных
comprehension: понимание
concepts: понятия
concise: краткий
condition: состояние
conforms: соответствует
consistently: последовательно
constrained: ограничен
control flow: управление потоком (в книге - управляющие конструкции или управляющие операторы)
convenient: удобный
conventionally: условно
convey: передать
corresponding: соответствующий
couple: пара
dash: тире
defer: откладывать
definition: определение
derivative: производное
discarded: отбрасываются
distinguished: выдающийся
division: деление
elimination: ликвидация
emphasizes: подчеркивает
essentially: по существу
evaluated: оценка
evolved: эволюционировали
exceeds: превышает
exceptions: Исключения
except: за исключением
exclusively: исключительно
explanations: объяснения
explicitly: ясно
exposition: ОПИСАНИЕ
extensive: обширный
familiarity: знакомство
features: особенности
follows: следует, следующим
fractional: дробный
further: далее
generalization: обобщение
general-purpose: общего назначения
however: однако, тем не менее
implemented: реализованы
implementers: исполнителей (разработчиков)
improved: улучшенный
increment: увеличить (увеличение)
indent: отступ (indentation)
In either case: В любом случае
initial: начальный
instance: случай
instance: случай (For instance - Например)
instead: вместо
intentionally: намеренно
introductory: вводный
is paired: в паре
itself: сам
least: как минимум (at least - по крайней мере)
listed: перечисленные
magnitude: величина
major: основной
mastered: освоено
match up: совпадают
merely: просто
mere: простой
might: может быть
misspelling: неправильное написание
Nonetheless: Тем не менее
notation: представление (обозначение)
noted: отметили
observation: наблюдение
occurrence: случай
occur: происходить
omitting: опуская (пропуск буквы)
order: порядок
originally: первоначально
parentheses: круглые скобки
particular: особый
passionate: страстный
performing: выполнение
perform: выполнять
permits: разрешений
Pick: Выбирать
plenty: много
precise: точный
precision: точность double-precision (с двойной точностью)
preface: предисловие
proper: надлежащий
provide: обеспечивать (предоставлять)
purpose: цель
quantity: количество
quotes: кавычки
range: диапазон
rather than: а не
ratio: соотношение (деление)
readily: легко (readily distinguished - легко отличить)
recognizes: признает
related: связанные
remains: остается
represent: представляет
requires: требуется
restrictions: Ограничения
retain: сохранять
revising: пересмотр
rudiments: основы
section: раздел (в книге)
semicolon: точка с запятой
separate: отдельный (независимый)
sequence: последовательность
significant: значительный
specifies: указывает (устанавливает)
specify: указывать
stages: этапы
statements: операторы (блок операторов в функции)
subroutines: Подпрограммы
substituted: замещенный
suggestions: предложения
suits: (глагол) подходит
summary: резюме (описание, справочник)
supposedly: предположительно
Thereafter: После этого
thoughtful: вдумчивый
tied: связанный
treatment: трактовка (изложение)
truncates: усекает (при делении целые числа)
typing: (the command) ввод (комманды)
until: до
variation: изменение
vice versa: наоборот
whatever: любой (независимо от)
worthwhile: стОящий
consider: рассматривать
processing: обработка
regardless: независимо
responsibility: ответственность
interleave: чередовать, перемежать
amount: количество
surprising: удивительный
relational: отношения сравнения (реляционный)
relational operator: оператор сравнения
specifically: конкретно
subtle: тонкий
distinguishing: различая
distinctive: отличительный
internally: внутренне
valid: достоверный (действительный)
confused: спутанный
addition: дополнение
reach: достигать
reference: ссылка
shrink: сокращаться
get carried away: увлекаться
impenetrable: непроницаемый
curb: обуздать
precedence: приоритет (операторов)
undesired: нежелательный
similar: аналогичный
efficient: эффективный
either: или
stick: придерживаться
accumulate: накапливать, собирать, аккумулировать
relatively: относительно
overflow: переполнение
conversion: преобразование
</spoiler>

Описание алгоритма скрипта:
Состоит из трех функций:
func_main - как в Си - главная - с нее начинает работать программа.
func_read_file - читает построчно файл, в качестве аргумента получает имя файла "input_file.txt" и записывает строки в массив lines.
func_user_input_lines - выводит пользователю часть строки до символа ":", а после нажатия любой клавиши - остальную часть строки. Если нажали клавишу "q", то завершает программу.
Скрипт несложный, при желании его можно перенести на стандартный Си или любой другой язык программирования.

Такое вот ЕШКО.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.