LINUX.ORG.RU

Наставьте восьмиклассника на путь программиста под Linux

 , ,


2

2

Учусь в 8 классе на домашнем обучении. Не так давно начали изучать информатику. Я хорошо осознал, что мне нравится информатика и очень привлекает программирование. Предметная область, в которой я себя вижу: вычислительные сети, сетевая и серверная инфраструктура, высоконагруженное серверное ПО. Скорее всего, я не буду уходить после 9 класса из школы, а продолжу учиться до конца 11 класса. Планирую поступать в ВУЗ на бюджет, поэтому сейчас я не знаю, на какую именно специальность и в какой ВУЗ я пройду.

В любом случае я набросал себе приблизительный план, по которому собираюсь учиться программированию в ближайшие несколько лет, которого я постараюсь придерживаться. Подборать теоретический материал мне оказалось не так уж и сложно (составлял список сам, основываясь на описании книг и отзывах в интернете), а поиск подходящих практических задач для выбранного теоретического материала вызвал сложности.

Подскажите, пожалуйста, что стоит изменить в моём плане с учётом моей предметной области? Хотелось бы, конечно, в первую очередь скорректировать практическую часть. Далее идёт набросок моего плана.

Информатика (больше теория):

  • системы счисления, единицы измерения инф., сигналы, частоты, дискретность и непрерывность;
  • архитектура ПК, работа процессора и оперативной памяти;
  • вычислительные сети и сетевая архитектура, понятие сетевых протоколов;
  • алгебра логики и логические операции;
  • алгоритмика и типы данных.

Информатика (больше практика):

  • построение диаграмм и блок-схем в графическом редакторе yEd, решение задач с алгоритмами;
  • работа в среде программирования КуМир;
  • работа в среде программирования Free Pascal;
  • языки разметки HTML и TeX: создание статичного персонального сайта на HTML, вёрстка документов в системе LaTeX в программе TeXstudio;
  • регулярные выражения и работа с текстом на естественном языке;
  • базы данных и системы управления базами данных (СУБД), работа с СУБД SQLite в программе SQLiteStudio.

Введение в программирование:

  • трёхтомный учебник «Программирование: введение в профессию» (А. В. Столяров);
  • учебник «Free Pascal и Lazarus. Учебник по программированию» (Е. Р. Алексеев, О. В. Чеснокова, Т. В. Кучер);
  • написание простых программ на Object Pascal (типа калькулятора, файлового менеджера, возможно, простейшего софта для защиты от DoS-атак на базе iptables и ipset);
  • учебник «Теория систем и системный анализ» (В. Н. Волкова, А. А. Денисов).

Математика:

  • школьная программа алгебры 7-11 кл.;
  • «Основы математического анализа (Г. М. Фихтенгольц)» + задачник Б. П. Демидовича;
  • «Дискретная математика. Учебное пособие» (В. Е. Алексеев).

Алгоритмы и структуры данных:

  • «Алгоритмы. Вводный курс» (Т. Кормен);
  • «Алгоритмы, введение в разработку и анализ» (А. В. Левитин).

Основы программирования в выбранной предметной области:

  • «Язык программирования C. Лекции и упражнения» (С. Прата);
  • «TCP/IP Illustrated: The Protocols» (У. Стивенс);
  • «Understanding Linux Network Internals» (O'Reilly);
  • «Unix Network Programming: The Sockets Networking Api» (У. Стивенс);
  • официальное руководство Cisco по подготовке к сертификационным экзаменам CCENT/CCNA.

Также я составил список привычек, которые мне стоит сформировать:

«1. Приучайся описывать математически всё, что видишь вокруг себя: чашку кофе на завтрак, тарелку супа на обед, облака в небе и т. д.

2. Изучай вширь всё, до чего дотягиваешься. Не понял, что написано — разбирайся, пока не поймешь. Уметь программировать — это пол дела. Надо понимать, как запускать твой код, где он будет работать и как будет взаимодействовать с другими системами".

3. Пиши код! Каждый день пиши! Не так важно что: вытаскивай данные с какого-нибудь API, пиши консольные утилиты. Собирай какие-нибудь данные и клади их в БД. Не важно, насколько это все будет наивным, практический опыт от задумки до реализации надо проходить 10-20-100 раз, пока не научишься видеть решения".

4. Читай чужой код, смотри, как он устроен, чем лучше твоего, анализируй. И читай книжки по хорошим практикам программирования (начиная с пресловутого Боба Мартина).

5. Не игнорируй инфраструктуру. Эти вот модные докеры, которые мамонты на ЛОРе не любят, они неспроста. Написал программу — подумай какими способами ее можно безболезненно развернуть на другой машине» ( paddlewan).

Благодарю hobbit и paddlewan за ваши полезные комментарии на этом сайте, которые помогли мне в процессе составления плана. Также хочу поблагодарить всех, кто помогает советами, включая анонимов.



Последнее исправление: cybbit (всего исправлений: 4)

Ответ на: комментарий от realbarmaley

Кружок, кружку рознь. Есть кружки где ребятенок может делать любую техническую дичь которая ему нравится, главное чтоб без членовредительства и пожара в кружке :)

Да и в кружках можно попробовать командную работу, когда над программной частью дичи работает тот кому нравится программировать, над электронной частью тот кому нравится паять, а пилит и гайки крутит тот у кого руки не крюки. В итоге все довольны, даже преподаватель так как техническая дичь на технических школьных конкурсах/конференциях обычно всем нравится :)

anonymous
()
Ответ на: комментарий от cybbit

hobbit посоветовал одному пользователю этого сайта изучить алгоритмику с помощью КуМира. Он же советовал и книги Столярова, а также Pascal.

Ну да, оно есть, оно с открытыми исходниками, но начинать с него я бы пожалуй не стал. В принципе это аналог паскаля, только с ключевыми словами на русском языке, но при этом важных вещей вроде указателей в нём нет и он в принципе не предназначен для того, чтобы на нём писать какие-то полезные программы.

Кроме того, пользоваться им без IDE невозможно, в отличии от 99% всех других языках в файлах кумира текст программы хранится не как есть, а в виде какого-то кода, где часть служебная и не отображается для пользователя.

В общем поиграться можно, но смысла изучать что-то с помощью КуМира крайне мало. Начни лучше сразу с Pascal, он имеет все те же возможности, но ключевые слова сразу на английском языке, как везде, программы можно писать в текстовом редакторе и компилировать/запускать из консоли и как минимум поначалу так и следует делать. Хотя и потом так можно и продолжить.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Я бы Pascal заменил на С++

Не знаю. Если так резко, можно научиться г..кодить. Или на C# для начала (он строже плюсов, многое из поздних паскалей).

а SQLite на PostgreSQL.

Горячо поддерживаю.

Shadow ★★★★★
()
Ответ на: комментарий от anonymous

Мне плюсы не нужны. Для своих задач C89 хватает 3 библиотек.

А для остального есть пхп.

Да и вообще мои пожелания автору осмотреться, пощупать и подумать, а надо ли все это ему. А то реклама сферы и сама сфера - не одно и то же.

AnonymUser
()
Последнее исправление: AnonymUser (всего исправлений: 1)

Говорят, из-за ошибки программиста ракета Ангара-А5 на Восточном уже в третий раз будет пытаться взлететь. Вам нужна такая ответственность? За убытки могут строго наказать. Вплоть до… плюнуть в морду.

anonymous
()
Ответ на: комментарий от anonymous

Все талантливые уехали работать в поддержку Red Hat, остались только те, кого не взяли в поддержку. Будем надеяться, что раза с десятого взлетит и не взорвется. :(

anonymous
()
Ответ на: комментарий от realbarmaley

Кроме плана (программы) важен еще и контроль. Муть-не муть зависит от программы и места. В Московском дворце пионеров очень неплохие кружки, про Ленинградский не знаю ничего.

aiqu6Ait ★★★★
()
Ответ на: комментарий от anonymous

Php я бы и сам советовал с осторожностью.

А вот C ansi вполне на мой личный взгляд подходит для обучения или лучше сказать знакомоства. Типа понять логику, циклы. Простые базовые конструкции. Со строками чуток поработать. Потом подумать… Плотно.

AnonymUser
()
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от cybbit

Вот кстати, на что настоятельно рекомендую сделать упор как можно раньше - это на английский язык. Не нужно выбирать книги по их переводу. Книги надо читать в оригинале. Технический английский очень прост, там весьма бедный вокабуляр и даже из него половина слов будет знакома по русским заимствованиям.

Что касается Таненбаума и некоторых других подобных книжек - это классика. Её желательно полистать. Тем более в эпоху PDF-ок это не накладно. Оглавление почитать, первые главы, заинтересовавшие главы. Ну углубляется и углубляется, пропусти мимо ушей это углубление.

Вообще разным людям заходят разные книги. Качай разные, пробуй, что-то тебе больше понравится, что-то меньше.

vbr ★★★
()
Ответ на: комментарий от t184256

Ну я в ВУЗе писал на С++ под Xlib. На 3 курсе. Спустя 15 лет пишу манифесты для кубера и восстанавливаю пролюбленную базу из ошмётков на жаве. Первая работа это скорей где тебя возьмут, если ты не суперзвезда (почему я про олимпиаду и написал - если вдруг получиться вылезти на уровень мира или хотя бы страны, там тебя сразу заметят). А потом уже как-то выведет кривая куда-то, где более-менее стабилизуешься.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от leave

раст вместо кумира? Месье знает толк в обучении.

Почему «вместо»? Полагаю что неплохо в образовательных целях иметь представление что это и за чем это не нужно. Впрочем может я ошибаюсь, так как сам мало что про rust знаю.

Tanger ★★★★★
()
Ответ на: комментарий от AnonymUser

Мне бы не хотелось спорить, просто мне после Си очень сложно было переучиваться. С Пайтоном до сих пор не дружу (и очень об этом жалею!). Может это индивидуальное, хз.

anonymous
()
Ответ на: комментарий от Tanger

К программированию можно подходить снизу или сверху.

Снизу это изучая с основ.

Сверху это когда тебя бросают сразу в проект и ты там барахтаешься как-то, даже не зная языка программирования.

Сейчас популярен второй подход. Хотя я сторонник первого.

Изучать Rust одним из первых языков это безумие.

С одной стороны Rust очень сложен, и скорей всего человек просто забросит всё это дело, т.к. не разберётся и эндорфиновой подпитки не хватит.

С другой стороны Rust, если говорить объективно, не востребован. Да, это перспективный язык, да, если хорошо поискать, можно какой-нибудь криптоскам найти. Да и там обычно нужны нормальные спецы с 20-летним С++ бэкграундом, а не новички. Поэтому если уж если кидать человека в реку, то хотя бы на питоне.

Будущее Rust также туманно. Да, это хайповый язык, но объективно говоря не похоже, чтобы на него прям все перекатывались. Ruby в своё время тоже хайповым был, а сейчас про него и не услышишь особо, где-то там в своей нише скрипит потихоньку и завистливо глядит на питона. Вполне может быть, что потихоньку Rust спустится с горы и всех покроет, но я бы на это сто баксов не поставил.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от anonymous

Надо сделать поправку на то, что и кому в реальности нужно. Мне от языков был нужен минимум. Искать, составлять и проверять работу мат.алгоритмов для любых n ради спортивного интереса - для этого хватает элементарного C. Можно консольное что-то написать. Хотя в основном всё написано до нас.

AnonymUser
()
Ответ на: комментарий от Tanger

У меня такое ощущение, что весна совсем не щадит лоровцев. ТС не знает нифига вообще, он вкуривает азы алгоритмизации, а ему на серьезных щас впаривают лоулевельные языки, креативы Страуструпа и черта лысого.

leave ★★★★★
()
Ответ на: комментарий от leave

Ещё бы кто-нибудь об издержках сферы написал. А то обычно пишут о хорошем в сфере, а о не очень приятном обмолвится забывают. Про всякие проблемы со здоровьем, родственниками, окружающими вообще и т.д.

AnonymUser
()
Последнее исправление: AnonymUser (всего исправлений: 1)
Ответ на: комментарий от cobold

Комбинаторика может пригодится, а может и нет. Хотя, конечно, общее представление нужно иметь.

В чистом виде она практически - чистое искусство, особенно переборная.

AnonymUser
()
Последнее исправление: AnonymUser (всего исправлений: 2)

Не знаю советовали уже такое или нет, но, пожалуйста, прислушайся к моим словам.
Математика, алгоритмы, программирование, инфраструктура и т.д. - это все безусловно круто и полезно, но прошу тебя, не забывай про социализацию. Мы живем в мире, где все вышеперечисленное является лишь малой частью намного бОльшей системы, где тебе приходится коммуницировать с людьми из других сфер и социальных слоев. Поэтому очень важно научиться себя правильно преподносить и «продавать». Как бы это не было печально, но без должного уровня социализации твои технические навыки могут вообще ничего не стоить. Да и личную жизнь тоже придется обустраивать, чтобы быть счастливым, а там без навыков коммуникации также не обойтись. Редкий слушатель(особенно среди женщин) будет заинтересован в разговоре о компиляторах, сложности алгоритмов или криптографии.
Если ты хакер(в изначальном значении слова), то будь хакером во всем: в железе, в софте, в обществе, пробивай себе путь к успеху.

eyrell
()

Купи zx spectrum и напиши игру на АСМе, пока в школе. после иди в институт на специальность на которой будут учить программированию. [br] учить нужно основы, чтобы во всем остальном можно было разобраться.[br]

и жить вещами кроме программирования не забывай

Vlad-76 ★★★★
()

я бы ещё посоветовал обзавестись малинкой.

абстрактно программировать это конечно прикольно, но с малинкой можно ещё и управлять всяким, да хоть диодами. Вдруг это ваше и понравится больше чем Pascal и прочее в «плане».

и всякие IDE в виде граф.программирования (сложить программу из блоков) там сразу есть. И помниться, там ещё и Wolfram, который в учёбе точно поможет.

MKuznetsov ★★★★★
()
Ответ на: комментарий от firkax

Может и хорошая но точно не для программиста. Для программиста - написать клон PostgreSQL.

ТС упомянул, что хочет в высоконагруженное серверное ПО. А там как раз из-за угла выглядывает BigData и прочие кластеры. Где противно-высокая доля сисадминства. Вот нужно тебе пнуть кафку – дык программно ты взял её и пнул, раз плюнуть. А чтобы запустить и проверить, что оно работает – за@#$шься всё это устанавливать и настраивать.

На этом фоне, поднять постгрес – вообще ни о чём, это крайне неприхотливая зверушка, отлично работающая с дефолтными настройками. Вот и пущай сразу привыкает к нормальному серверному софту, потому как SQLite таковым считать вообще говоря нельзя. Тем более что постгрес – по крайней мере на текущий момент в РФ – стандарт де факто среди SQL.

dimgel ★★★★★
()
Ответ на: комментарий от Xenius

В принципе это аналог паскаля, только с ключевыми словами на русском языке

Даже если предположить, что весь англоговорящий мир прямо завтра накроет русскоговорящими ядерными бомбами, без английского в IT нечего будет делать ещё лет 100-200. Латынь вон дих пор в медицине используется. А софт тем более – творится всем миром. Так что на моё ИМХО, тратить время на какие бы то ни было национально-специфические языки – бессмысленная трата времени.

dimgel ★★★★★
()
Ответ на: комментарий от dimgel

Я впервые заинтересовался программированием в 11 классе (15 лет назад) и могу уверенно сказать что никому кроме меня среди 11-классников это нахрен было не нужно.

Мне даже показалось что автор тролль, так как не могу всерьез принять что парниша из 8го класса решил читать руководство Cisco к CCENT/CCNA. Но наверно я просто уже не разбираюсь в школьниках.

Andreezy
()
Ответ на: комментарий от Andreezy

никому кроме меня среди 11-классников это нахрен было не нужно.

Ну, за 15 лет уровень цифровизации всего и вся вырос значительно, да и хайпа вокруг профессии прибавилось, спасибо яндексу со его курсами по говно-питону.

Кроме того, бывают обычные школы, бывают математические, я хз что там на домашнем обучении происходит.

Мне даже показалось что автор тролль […] Но наверно я просто уже не разбираюсь в школьниках.

+1, +1. :)

dimgel ★★★★★
()

категорически советую в таком возрасте не замусоривать голову прикладными знаниями вроде цисок и баз данных, а также не изучать то, что ты потом не будешь использовать (паскаль). И пользы не получишь, и от скуки повесишься.

Нужно в первую очередь развивать общий интеллект, то есть навыки решения задач. Особенно олимпиадных по математике и информатике.

Также, если тебя не интересуют инженерные расчёты и прочие САПРы, то советую забить на матан и сосредоточиться на дискретной математике.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

а также не изучать то, что ты потом не будешь использовать (паскаль)

Нереально. Выше правильно заметили, что к тому времени, как ТС окончит универ, куча технологий поменяется. Получается, что нельзя изучать ничего вообще: вдруг оно устареет?

Я в его возрасте изучал паскаль, потом C, потом C++. До сих пор не знаю, что случилось бы, если бы я сразу начал с C: был бы перегруз от низкоуровневщины без предварительного усвоения простого алгоритмического программирования на паскале, или проглотил бы. В любом случае, этот паскаль оказался наименьшим из всего, что я изучал на выброс.

А уж сколько приходится кодить на выброс… За деньги причём. Пущай привыкает, что жизнь боль.

dimgel ★★★★★
()

Жестец, я с 8 класса по 11 ни за что бы даже не прочитал все названное.

Привычки №1 и №3 как бы с противоположных концов, но обе важны, да.

Кстати, про книги - «Искусство программирования» Кнута, между прочим, не требует почти ничего, чтобы начать его читать и восхищаться. Я бы добавил его туда.

lealxe
()

Главное не увидел, английский обязателен по прежнему, т.к. вся документация к любой библиотеке/программе только на английском актуальная.

ЗЫ

Порекомендую прикладную математику в качестве направления. Должна мозги вправлять немного.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

Предметная область, в которой я себя вижу: вычислительные сети, сетевая и серверная инфраструктура, высоконагруженное серверное ПО.

сетевая и серверная инфраструктура

Это к DevOps. Для начала можешь попрактиковаться в конфигурировании контейнеров, тот же Docker. Или попробовать поставить OpenWRT на роутер (если есть совместимый роутер), так постепенно вкатишься в конфигурирование сетей.

высоконагруженное серверное ПО.

Энтерпрайзная скучища. Потребует чтения книг по типовым архитектурам и изучение какого-нибудь меинстрим языка типа C#/Java/Rust.
И если представить, что ты реально осилишь книгу по архитектуре то боюсь без практики это окажется прямым путем к карго-культу. Можно получить энциклопедические знания паттернов, уметь этим бахвалиться в «курилке» используя жаргонизмы и правильную терминологию, но превратить полученные знания в эффективно спроектированное приложение можно будет только после нескольких лет практики.

вычислительные сети

Понятия не имею что под этим подразумевается. Но можешь почитать что-нибудь про hadoop mapreduce, чтоб разобраться будет ли тебе интересно.
Лично я бы рекомендовал глянуть на вычисления на GPU, мне кажется это интересная и популярное направление. Раз ты все равно будешь изучать Си то можешь попробовать что-то написать с использованием OpenCL (PoCL или rusticl в mesa).

«Дискретная математика. Учебное пособие» (В. Е. Алексеев).

Думаю пока не нужно, разве только самое начало как хобби. В вузе будет дискретка и там с нуля все объяснят потому как в школах такого предмета не преподают. А вот в жизни не знаю где тебе она понадобится, мне вот не понадобилась.

Лучше все силы брось на математику с тригонометрией и начало анализа, это самое полезное. Без этого будешь работать в энтерпрайзе перекидывая байтики из одного места в другое и все твои компетенции будут заключаться в знании самых попсовых фреймворков. Не самая лучшая работа в мире.

Алгоритмы и структуры данных:
Основы программирования в выбранной предметной области:

Перечисленную литературу не читал но список звучит интересно. Не представляю как такой список можно осилить параллельно с учебой, похоже на wishful thinking.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 2)
Ответ на: комментарий от dimgel

Мне даже показалось что автор тролль, так как не могу всерьез принять что парниша из 8го класса решил читать руководство Cisco к CCENT/CCNA

Тролль не тролль, но вроде движек Duke Nukem написал 16-ти летний парень. Может у TC папа/дядя из IT-шников и потому ТС такой прошаренный. А может сейчас, в эру инета, нет проблем с доступом к инфе и потому можно самому много чего интересного найти, было бы желание. У меня родственников таких не было но я обучался кодить с 12 лет, не то чтоб я очень любил кодить, но в том месте можно было играть плюс у меня получалось решать типовые алгоритмические задачки без напрягов.

P.S. Когда я в свои 18 лет ходил на радиорынок ища определенные книги по программированнию мне пару раз говорили чтоб я для начала закончил в школу. Выгладил я года на три моложе, но все равно такие фразы преземляют потому как кажется что тебя никто в всерьез не воспринимает и это сказывается на самооценке.

Aber ★★★★★
()
Последнее исправление: Aber (всего исправлений: 3)
Ответ на: комментарий от peregrine

не факт что оно будет через 5 лет

Что не будет? Профессии? Я думал, что нейросети — инструмент для программиста, а не его замена. Мне говорили, что нейросети не учитывают контекст и все детали конкретной задачи.

В любом случае я иду в программисты не ради денег, а потому что мне это нравится. Я не вижу себя нигде, кроме работы с программным обеспечением.

cybbit
() автор топика