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)
Ответ на: комментарий от cybbit

Ну, я в принципе то вам верю … хотя сам я в 8м классе такой план бы не составил, как и некоторые другие, отписавшиеся в треде (я закончил ФОПФ/МФТИ; и не поверите, долгое время работал и работаю по специальности, конечно же не программист).

Если это действительно так, то вам наши советы не очень нужны. По крайней мере в части чего и как учить касательно математики или программирования. Просмотреть советы и рекомендуемые книги/языки/науки можно, но выводы вы конечно же сделаете свои (это правильно).

Я всё-таки два момента озвучу:

а) не забывайте занятия спортом (они даже лучше дисциплинируют);

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

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

Ещё читай книжку:

Н. Непейвода, И. Скопин. «Основания программирования»

гуглится, например, здесь

дорожная карта парадигм

ещё см. например это

вообще у Непейводы по логике много книжек, например, про Пролог

из плюсов первой книжки:

  1. начинаем с ‘hello world’ – плавного погружения в среду и парадигмы программирования

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

  3. системно, основательно структурировано. постепенно, последовательно разбираем примеры и наращиваем конструкции.

  4. философию в конце в приложении сначала можешь не читать, к этому созреть надо.

созреть можно через вторую книжку.

в общем – помогает уложить в голове, систематизировать знания (если они есть).

и плавно, последовательно погрузиться не только в алгоритмы и структуры но и в парадигмы.

например, «Алгоритмы+данные=программы» сказал Н. Вирт. Если читать просто про паскаль (вот про оберон) – то не очень понятно, в чём фишка именно паскаля.

Ну написал в 1972 Н.Вирт компилятор P2 через pint/pcom P-code «на самом себе», ну и что дальше?

как там написать что-либо полезное, а не только лишь расчётные задачи?

поэтому нужно читать как минимум, две книжки – одну общую про синтаксис, и/или, алгоритмы и другую – про погружение в среду, решебник про то – как сделать нечто практическое.

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

сейчас по Pascal.ABC тоже есть наглядные учебники ну или про обероны.

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

Н.Вирт вообще-то написал и несколько других книг. про построение компиляторов, сначала на Паскале, потом на Модуле, потом, на обероне.

про «долой жирные программы» и проект оберон. ну и т.п.

Дейкстра и Вирт – про метод «последовательного упрощения», stepwise refinement. Дейкстра – про «скромного программиста», «humble programmer» и «дисциплину программирования».

А Роберт Ковальски про Пролог – написал «алгоритм=логика+управление»

итого получается «(логика+управление)+данные=программа»

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

потом читай про В.Д. Паранджанова, про ДРАКОН, алгоритмы и метаалгоримты (жизнеритмы). про «управление по шампуру», «рокировки»/перестановки/рефакторинг, упрощение условий и выражений, «пересадку лианны».

ты поймешь, что это тоже про рефакторинг, методы проектирования.

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

когда кажется что и так и эдак можно – неоднозначно : нужно изучать принципы проектирования. где объясняется процесс, как устранять неоднозначности, выбирать какой-то из вариантов проектирования.

потом читай про оценку сложности алгоритмов, O(f(n)), o(n) вот это всё.

что-нибудь простенькое и попсовое для начала – например, Седжвика или Кормейна.

как поймешь суть – можешь для системности и строгости изложения закусить академически правильным Дональдом Эрвином Кнутом, «Искусство программирования», все тома.

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

«Искусство программирования» – такая хорошая энциклопедия примеров алгоритмов, начиная с сортировок и вымышленным компьютером архитектуры MMIX через сложность алгоритмов, оценку ассимптотик и конкретные примеры.

закусил – можешь запить и заполировать. читая одновременно с «искусством программирования» книги по TeX (для начала что-нибудь попсовое, простенькое про LaTeX) и оригинальную Дональда Кнута «TeX: the program and the book» и про literate programming, литературное грамотное (ср.: illiterate) программирование и классический тулчейн типа tex, weave, tangle (внезапно, на паскале).

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

погугли на TUG про классический тулчейн тех времён для сборки TeX: письмо TeX-FPC ctan-ann/pkg/tex-fpc TeX-GPC

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

кстати. можно чередовать книжку Столярова с попыткой поставить GPC а не FPC (GNU Pascal Compiler), например, собрать из исходников и запустить TeX-GPC

там в целом прикольный компилятор, легко интегрирующийся с сишкой. другая стандартная библиотека, стандарт ближе к ISO и книгам Вирта.

но тут его собрать надо руками, из исходников и последней версии gcc 4.8

потыкай недоязычок PL-0 из «алгоритмы и структуры данных» и вообще все примеры из gh.com/classic-tools

потом переходи к Modula-2, Oberon-2, Modula-3, Ada и GNAT.

в общем, более модульным и нормально интегрирующимся с си паскалям.

в целом: получится понятный наглядный код, в котором проще разобраться чем в Си с его многочисленными UB или диалектами стандартов плюсов типа C++07,11,14,17,20.

потыкай компилятор «Странник» Модула-2/С++/Паскаль – исходники выложили на гитхабе: gh.com/askfind/strannik но там только под винду.

похожий подход был и у компиляторов JPI/TopSpeed Modula-2, XDS Modula-2 и оберон.

после паскаля, модулы и ады хорошо зайдут языки Nim, Lua, и прочие подобные.

Модулу-2 можешь взять GM2 (интегрировано в последний gcc – но нужно собирать из исходников gcc, вот и научишься его собирать) или вот эту icosaedro.it

там посмотри примеры , приложения и то как оно легко в си встраивается и через Си компилируется (например, привязки к библиотекам)

под винду можешь взять ADW2, там есть примеры, m2-examples

либо XDS: 2.60 , xds

есть транслятор модулы-2 в оберон ModulaToOberon

ещё есть такой вот PascalScript remobjects/pascalscript

в общем – если читаешь Столярова про Паскаль – можешь сделать заход в GPC, Modula-2, оберон, UCSD P-system и P-code, P2/P3/P5/P6 компиляторы паскаля, ну и например Аду

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

по лиспу читай SICP SICP-pdf pp2u-sicp HTML

можешь даже начать с версии под LFE лисп под Эрланг: lfe-sicp, там достаточно наглядно

по C++ можешь изучать совместно с Qt каким-нибудь.

например, CopperSpice FAQ – форк Qt 4.8

теоретически, если хватит терпения.

любую достаточно сложную программу можно написать в духе литературного грамотного программирования, в духе «TeX: the Program and the Book»

даже на «почти естественном языке» вроде Inform 7 : см. «Inform the program» (and the book) здесь :

WEAVEd: Nelson_G_2008_-_Inform_7,_The_Program.pdf

IBG.pdf

some thoughts on teaching with inform simulations design

ссылки на релизы и исходники.

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

Дональд Кнут в таком стиле написал TeX на паскале, Грэм Нельсон – Inform 7 на Inform 6 на Си.

в общем, если понимать методологию, технологию программирования, программной инженерии – как именно теперь последовательно уточняя из требований в техническое задание или TDD/BDD спецификации (про это читай «Роб Мартин. Профессиональное программирование» и его прочие книжки про FitNesse и чистый код) – в какие-то гипертекстовые истории пользователей, концепты – с минималистичным кодом который их реализует

— так можно написать любую программу.

по компьютерной графике в таком стиле написана «Physically Based Rendering», по реализации C компилятора – книжка про LCC компилятор.

в общем, любую программу можно в таком духе написать – если хватит терпения.

так что учись грамотно излагать свои мысли, в первую очередь.

на тему того, как должна работать программа.

и какой-то удобный в практическом смысле язык программирования и инфраструктуру – во вторую очередь.

а написать можно на чём угодно.

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

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

там в целом прикольный компилятор, легко интегрирующийся с сишкой. другая стандартная библиотека, стандарт ближе к ISO и книгам Вирта.

У fpc формально тоже есть -Miso, а с некоторых пор даже чуть-чуть ISO/IEC Extended Pascal, что, конечно, для книг Вирта не очень нужно.

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

у меня тоже. первые лет 5 (с 5 до 10) у меня не было компьютера.
по крайней мере, своего.
но! я читал исходники везде – во всех книжках, журналах, распечатках до которых мог дотянуться.

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

раскрашивал разноцветными фломастерами. писал себе выноски и комментарии.

в общем, изобретал свой велосипед – своё литературное программирование.

по языку например бейсику у меня было несколько книжек про диалекты.

поэтому когда я начал набирать на первом попавшемся компе (это был Atari 65XL) – ничего не работало. бейсик был другого диалекта.

первые минут 15 я словно вслепую, как баран в новые ворота тыкался – подбирая различные варианты.

мануалов конечно никаких не было именно по его бейсику.

так что ты наедине с ч0рным ящиком – и пытаешься его разговорить.

да так, чтобы он тебя понял.

минут через 20 разобрался и рисовал уже какие-то фигуры Лиссажу.

потом лет 5 наблюдая из-за плеча у знакомых и родителей на работе – был безлошадным всадником, программистом без своего компьютера :)))

писал свои идеи и программы ручкой в блокнотике.

когда набирал – они как правило, работали с первого раза. почти без правок (за исключением типа «угадать, каким диалектом это тут реализовано»)

потому что: думал, когда писал. ручкой в блокнотике. и в уме отлаживал, представляя как это всё вместе должно работать.

потом уже когда появился спектрум, амига, ну и писюк, куда же без него – начал активно ковырять бейсик и ассемблер на спектруме, REXX, REBOL, E, BCPL и си – на амиге.

в общем, развлекался как мог. всё равно ничего полезного на этом медленном бейсике написать было не возможно (хотя существовал например LASER BASIC)

в общем, на писюке активно тыкал TP 5.5, JPI/TopSpeed Modula-2, ну и Turbo C++ до кучи.

который сломал мне весь процесс разработки и вообще был жутко медленным, толстым и не сказать что сильно эффективным по коду.

переписал ряд своих программок на всех этих языках, совершенно аналогичный код (2d оконная библиотека, физический движок, 2D движок игрушки, зайчатки 3D движка с затенением гуро и фонгом) – и пользы ну вот вообще никакой не увидел от С++, хоть убей.

блокнотики и дискеты и до сих пор где-то в гараже лежат. с исходниками примерно 92-94 годов.

в 91 году у меня под спектрум не было дизассемблера. но было интересно понять, как он работает.

взял из журнала HEX коды набрал, убедился что оно запускается.

и дизассемблировал вручную. ручкой в блокнотике.

список опкодов Z80 и основные RST процедуры его ПЗУ у меня были, так что чисто механически ничего сложного.

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

в общем, догадался примерно как оно работает.

дизассемблировав вручную, по книжке. на бумажке.

думал я один такой.

так нет же: прочитал про того мексиканского пацана который монтесуму делал для Atari и принца персии.

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

в общем, там где была эта плавная анимация.

а по исходникам где-то в бложике есть выложенные его сканы – с картинками, стрелочками, записями в блокнотике.

эдакое векторное гипертекстовое литературное грамотное программирование – вручную, фломастерами в блокнотике.

в общем, главное в голове своей понимать как оно должно работать.

и грамотно как-то свои мысли на эту тему структурировать.

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

…. и продолжаем тем, что «некогда объяснять, трусить пальму надо».

то есть: один и тот же хелловорд в разных парадигмах имеет разные смыслы.

которые определяются репертуаром абстрактного исполнителя.

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

в итоге как-то так выясняется, что всё программирование высокоуровневое – но некоторое более высокоуровневое чем другое.

в основаниях они и пытаются рассуждать что же это такое, по настоящему высокоуровневое программирование.

декларативное, функциональное, сентенциональное, логическое.

а не низкоуровневые кишки наружу детали реализации типа виртуальных методов завёрнутые в шаблоны и ещё дохрена всего в «современном С++» после C++07 чем дальше, тем толще.

который вроде бы и высокоуровневый как бы – да только не совсем.

ведь все эти детали реализации конечно же нужны сразу во всей каше, делая суп из топора, ну конечно же??? :))

по сравнению с лиспом CLOS например. да даже тем же обероном.

в общем: как сказал Бертран Мейер, автор языка Эйфель, «проектирования по контракту» и книг «ОО конструирование», «почувствуй класс с эйфель»

There is only two things wrong with C++:
the initial concept
and the implementation.

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

LaTeX in browser demo

  • Another very recent option is Jim Fowler’s Pascal-to-WebAssembly compiler, about which he wrote an article in the most recent TUGboat issue. It allows TeX to run in the browser (locally, i.e. without relying on a cloud service); you can find the source code at web2js and you can find a demo at demo or tikzjax

через WEB.ch переведено с паскаля на JS
на JS реализован компилятор паскаля в WebAssembly

anonymous
()