MaX0o
@MaX0o

С чего начать изучение программирования школьнику?

Всем привет. Мне 14 лет и я какое-то время назад ознакомился с самым базовым синтаксисом языка java, ибо тогда у меня было желание и цель научиться разрабатывать под андроид, изучать дальше у меня нет особой мотивации, потом я потерялся. Хотя мне было очень интересно. Сейчас я решил начать все заново, и скорее всего поменять направление и язык, хотя не знаю. Сейчас я вообще потерялся и не знаю в каком направлении хочу развиваться, но точно не геймдев, ибо игры мне не интересны. Или лучше просто начать изучать python, т.к он относительно прост в изучении, но при этом много где применяется? Пожалуйста, посоветуйте направление для развития, а также язык программирования и желательно бесплатные ресурсы/книги. Стоит ли работать на линуксе? Я его устанавливал несколько раз до этого и понял, что для программирования там есть все, но с повседневными задачами могут возникнуть трудности, но изучать его тоже было очень интересно. Заранее благодарю!
  • Вопрос задан
  • 732 просмотра
Пригласить эксперта
Ответы на вопрос 7
@Akela_wolf
Extreme Programmer
Насчет линукса. Да, на мой взгляд однозначно стоит. Опыт работы в линуксе даст тебе более глубокое понимание как функционирует операционная система, возможность заглянуть "под капот", увидеть на практике такую вещь как разные реализации одного и того же (например разные оконные менеджеры - суть у них одна, но каждый реализует это задачу разными путями). Поэтому советую что-нибудь "конфигурябельное", типа ArchLinux (Gentoo - это уже совсем-совсем хардкор, новичку с ней будет тяжко). Что касается повседневных задач - да нет там никаких непреодолимых трудностей, если не брать какую-то прям специфику. Браузер - есть. Просмотр видео, прослушивание музыки - есть. Работа с документами - есть. Работа с графикой и 3D-моделированием - есть. Игры - тоже есть, хоть иногда и с приколами (но сказано что игры не интересуют, поэтому не так важно).

Насчет языка. Вообще язык программирования выбирают под задачу. Если хочется заниматься, например, системным программированием (драйверы, файловые системы, загрузчики, ядро ОС, виртуальные машины/гипервизоры, СУБД и пр.) - то это C/C++. Если хочется заниматься нейросетками - там хорош Питон. Фронтендом - без Javascript/Typescript сейчас никуда. Но если говорить об языке программирования общего назначения (на котором можно написать множество прикладных программ), то я рекомендовал бы следующие критерии:
  • Статически типизированный. Особенно важно, на мой взгляд, в начале обучения, так как закладывает базу - навык писать код строго. Динамически типизированные языки, такие как PHP, Python, Javascript и пр. позволяют программисту писать код "как попало", что чревато трудноуловимыми ошибками, формируют "плохие привычки", которые потом будут мешать.
  • Поощряющий декларативный (функциональный) стиль программирования. Функциональный стиль программирования сейчас набирает популярность, так как позволяет писать более сложные программы и проще тестировать их по отдельным частям.
  • Кроссплатформенность. То есть возможность создавать программы для Windows, Linux, MacOS, Android и т.д. Это не столько про язык сам по себе, сколько про его окружение - наличие кроссплатформенных библиотек и инструментов для разработки.
  • Востребованность. Ну тут все просто - учить, например, Паскаль сейчас вряд ли целесообразно - реальную разработку на нем практически не ведут. Поэтому лучше изучать что-то с чем потом будешь сталкиваться на практике (в чужих проектах) и с которым легче будет найти единомышленников чтобы совместно разрабатывать большие проекты. И, в перспективе, строить карьеру в этой области.

Итак, смотрим что у нас есть на этот счет:
  1. C/C++. Статически типизированный и довольно строгий. Очень сложный. На нем можно писать программы в любом стиле, включая метапрограммирование. Кроссплатформенный до жути. Позволяет решать задачи, максимально близко к "железу". Востребован ограниченно. Уникальная ниша - системное программирование и программирование микроконтроллеров. В силу его очень большой сложности - лично я не рекомендую.
  2. Javascript/Typescript. Динамически типизированный (у Typescript есть статическая типизация, но с приколами унаследованными от Javascript). Поддерживает как императивное, так и декларативное программирование. В первую очередь предназначен для браузеров, хотя сейчас есть кроссплатформенная платформа node.js. Востребован в первую очередь на фронте. Так что к нему стоит сразу присоединять в плане обучения HTML/CSS и какой-нибудь фронтовый фреймворк: Angular/React/Vue и т.п. Также пригоден для написания бэкэнда (node.js), десктопных приложений (Electron), мобильных приложений (React Native). Перспективное направление, но лично я не рекомендовал бы как первый язык из-за определенного бардака в экосистеме. В этом направлении легко нахвататься "плохих привычек".
  3. С#. Статически типизированный, поддерживает декларативное программирование, имеет реализацию для Linux (Mono), но в целом заточен на Windows. Вполне востребован, в частности используется в Unity (движок для разработки игр). Насчет него не имею личного мнения, так как не использую в своей работе.
  4. Java. Статически типизированный, поддерживает декларативное программирование, запускается на всем где есть JVM (включая Android). Write once, run anywhere. Востребован в основном в суровом энтерпрайзе, в больших проектах для серьезного бизнеса. Также применяется в вебе.
  5. Kotlin. Улучшенная Java, разработка фирмы jetBrains. Статически типизированный, очень хорошо поддерживает декларативное программирование. Позволяет легко писать асинхронный код (корутины). Запускается там же где и Java (так как использует ту же JVM), плюс имеет возможность компиляции в JavaScript и в native код для Windows/Linux/MacOS. Kotlin для JVM - вполне зрелое решение, Kotlin Multiplatform - пока еще нет, но быстро развивается. Является официальным языком для разработки под Android. Востребован пока не очень (в основном в области мобильной разработки), но его популярность растет и он начинает теснить Java в её традиционном сегменте. В перспективе может стать языком способным охватить большую часть сфер прикладного программирования: backend, frontend, десктопные и мобильные приложения. На мой взгляд - перспективно.
  6. Scala. Еще одна улучшенная Java. Статически типизированный, очень хорошо поддерживает декларативное программирование. Кроссплатформенный как и Java (сейчас вроде появился компилятор в JS, как и Котлина). Сложный. Очень легко написать конструкции в которых "без поллитры не разберешься". В силу сложности востребован мало. Есть уникальные фичи, но не так много по сравнению с Котлином (большая часть реально востребованных фич Скалы в Котлине есть). Ознакомиться в перспективе стоит, рекомендовать как основной язык не буду.
  7. Haskell. Статически типизированный, декларативный язык (не просто поддерживает декларативное программирование - на нем сложно писать иначе). Кроссплатформенный. Востребован в специфических областях. С моей точки зрения - король функционального программирования и в силу этого сложный (математические абстракции в полный рост). Ознакомиться также стоит, просто чтобы почувствовать всю мощь функционального программирования - мозг переворачивает очень хорошо и позволяет глубже понимать другие языки. Как основной язык - рекомендовать не буду.
  8. Python. Динамически типизированный, поддерживает декларативное программирование, кроссплатформенный. Вполне востребован в вебе, в научных исследованиях (нейросети). Опыта работы с ним имею мало, но рекомендовать бы не стал из-за динамической типизации.
  9. PHP. Динамически типизированный, поддерживает декларативное программирование, кроссплатформенный. Весьма востребован, но практически только в вебе (разработка сайтов). Очень низкий порог вхождения, из-за чего очень много плохого кода (хотя сейчас появились достойные фреймворки - Symfony, Laravel, Doctrine и т.д.). Как язык для изучения - не рекомендую.

Конечно есть и другие языки, которые я не упомянул в силу того что не знаком (или плохо знаком) с ними.
Из приведенного списка я бы в первую очередь выделил C#, Typescript, Kotlin. Мой личный выбор на данном этапе карьеры - Котлин, но думать, сравнивать и выбирать, разумеется, вам.

Еще в перспективе стоит познакомиться с такой темой как СУБД и язык запросов SQL. В вебе, как я уже писал, пригодится HTML/CSS. Ну и далее конкретные специфичные вещи, подбираемые уже под конкретную задачу.

Теперь о книгах. Книги по языкам рекомендовать не буду. Но назову несколько книг, которые, по моему мнению, обязательно стоит прочитать любому программисту:
  1. Э. Хант, Д. Томас. Программист-прагматик
  2. Р. Мартин. Чистый код.
  3. По мере набора опыта: Р. Мартин. Чистая архитектура
  4. При желании стать профессиональным программистом: Р. Мартин. Идеальный программист
  5. Сложная, но тем не менее умная книга: С. Макконнелл. Совершенный код

Это то что пригодится в любом случае. А дальше - все зависит от выбранного языка и области его использования.
Ответ написан
xez
@xez
TL Junior Roo
Изучай все что интересно, не изучай ничего что не интересно: так победишь.
Ответ написан
HemulGM
@HemulGM
Delphi Developer, сис. админ
С изучения школьной программы
Ответ написан
Комментировать
Rst0
@Rst0
Нужно попробовать максимальное количество вариантов самому - там станет понятно на практике.
Линукс - однозначно да.
Установи виртуальную машину и работай/экспериментируй на двух одновременно.
или на трех.
VMware Workstation 16 Player
Ответ написан
@AVKor
цель научиться разрабатывать под андроид

Не с того начал.
Сейчас я решил начать все заново, и скорее всего поменять направление и язык

Какое может быть "направление"?

Первый ЯП учат не для того, чтобы на нём зарабатывать деньги (да ещё в 14 лет), а для освоения базовых концепций программирования.

Java в качестве первого ЯП - плохой выбор.

Пожалуйста, посоветуйте направление для развития

О развитии можно говорить тогда, когда есть база. Пока её нет.
а также язык программирования

Старый добрый Паскаль (Free Pascal, если говорить о конкретной реализации). По-прежнему остаётся лучшим вариантом первого ЯП.
Или лучше просто начать изучать python

Можно с него, но там для первого ЯП много лишнего и динамическая типизация. Лучше с самого начала освоить концепцию статической типизации.
но при этом много где применяется?

Первый ЯП - для обучения основам, а не для работы. Много где, мало где или вообще нигде тут роли не играет никакой.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега IT-образование
software engineer
Максим, На уровень стажера, который может написать простейшие программки, учиться не очень сложно. И на этом уровне базовые понятия во всех языках плюс-минус одинаковые.
Поэтому вообще не важно какой язык у тебя будет первым.
Пробуй пару месяцев сделать какие-то вещи, которые тебе интересны на питоне. Потом попробуй их же сделать на java. Попробуй добавить технологии (базу данных)

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы