Ответы пользователя по тегу IT-образование
  • Как лучше поступить?

    @Akela_wolf
    Extreme Programmer
    Без математики (даже не столько математики, сколько без математического и логического мышления) в программировании делать нечего.
    Ответ написан
    7 комментариев
  • Почему у меня не получается учиться, даже когда я все делаю все в точности как в видеоуроках?

    @Akela_wolf
    Extreme Programmer
    Потому что изучение - это самостоятельное усвоение знаний. Не просто повторять за кем-то, но и понимать что, зачем и как он делает. И вот тут у вас наступает затык. Пробуйте не просто повторять, а каждый раз задавать себе вопрос: что он делает? Зачем он это делает? Как еще это можно сделать? Что будет если этого не сделать? Что будет если сделать по-другому? И да, это потребует намного больше времени и сил. Придется многое выгугливать или искать в книгах. Но, на мой взгляд, в конечном итоге это будет значительно эффективнее.
    Ответ написан
    Комментировать
  • Лучшее время дня для усвоения / запоминания новой информации — какое оно?

    @Akela_wolf
    Extreme Programmer
    У каждого человека свое. Кому-то проще всего делать это утром, сразу после пробуждения. Кому-то - после "раскачки", у кого-то активность мозга повышается в середине дня, а у кого-то - вообще к вечеру.

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

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

    @Akela_wolf
    Extreme Programmer
    Критерий знания языка программирования - практика. Ты знаешь язык программирования когда можешь читать код других программистов на этом языке (и тебе понятно что они хотели выразить этими конструкциями) и писать свои программы. Знание библиотек относится к предметной области (скажем знание Spring Boot полезно в области веб-разработки, но бесполезно для программирования под Android) и напрямую к "языку программирования" не относится.

    Я бы не советовал скакать по языкам программирования. Лучше знать 1-2 языка глубоко, чем иметь поверхностное представление о десятке разных. Выберите интересный проект - игру, сайт, полезную утилиту (список дел, учет бюджета, каталог книг и т.п.) и реализуйте её. Считайте это одним из экзаменов на знание языка. Ну и не советую учить язык "просто так". Язык лучше всего учить "под задачу". Скажем ассемблер - это что-то низкоуровневое (как вариант, возьмите Arduino и пишите на асме для него).
    Ответ написан
    Комментировать
  • Ребят, вопрос по поводу становления программистом?

    @Akela_wolf
    Extreme Programmer
    Что для вас значит "стать программистом"? Когда вы поймете что стали им?

    Для меня быть программистом - это писать программы. Постоянно. Почти каждый день. Понятно что есть работа, но написание программ лишь работой не ограничивается. Программист - это образ мышления, образ жизни.

    Хотите вы этого? Я не знаю.
    Сможете вы так? Я не знаю.
    Стремиться ли вам к этому? Я не знаю.

    Знает один лишь человек - вы сам.
    Ответ написан
    Комментировать
  • Как и когда обучаться программированию школьнику?

    @Akela_wolf
    Extreme Programmer
    Дальше учиться на практике. Берете проект, который хотите сделать, например игру. Начните с чего-нибудь простого, тот же классический арканоид или тетрис. Сразу же возникнет уйма вопросов: а как это? А как тут? А как тогда здесь? И через решение этих проблем будете поднимать свой скилл. Для подобных игр не нужно каких-то сложных библиотек (единственная библиотека, которая необходима - это та, которая позволяет рисовать на экране линии, квадратики и кружки). А потенциал для развития - на полгода минимум. Добавление уровней, режимов, бонусов, таблицы рекордов и т.д. Затем, например, изучение на примере этой игры более серьезной графической библиотеки (тот же OpenGL): псевдотрехмерность, текстурирование, освещение и т.д. В конечном итоге может получиться вполне симпатично выглядящая игра и большое количество опыта в разработке реального проекта.

    Разумеется, вместо игры можно взять любой другой проект, который вам интересен. Хоть программу для расчета рейтинга шахматистов по итогам турнира (это другая тема, тут придется изучать другие вещи) и совершенствовать эту тему, пока чувствуешь что есть еще что-то что можно сделать, но не знаешь как именно. Вот это постижение "как именно" и называется совершенствованием навыков.
    Ответ написан
    Комментировать
  • Возможно ли устроиться программистом с общим образованием?

    @Akela_wolf
    Extreme Programmer
    Пробуйте. Вообще запрета брать на работу программистов со средним образованием в законодательстве нет. Так что все на усмотрение конкретного работодателя. Некоторые, разумеется, отсеют вашу кандидатуру на основе формального признака - отсутствие высшего образования. Но кто-то будет смотреть на опыт работы (а он у вас есть). Плюс техническое собеседование. Не скажу что будет легко, но шансы вполне есть. Возможно придется разослать не один десяток резюме, вполне вероятно будут отказы. Но такого что "вообще не возьмут, в принципе не возьмут" я утверждать не стану.
    Ответ написан
    Комментировать
  • С чего начать изучение программирования школьнику?

    @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. Сложная, но тем не менее умная книга: С. Макконнелл. Совершенный код

    Это то что пригодится в любом случае. А дальше - все зависит от выбранного языка и области его использования.
    Ответ написан
    12 комментариев
  • Можно ли изучать c++ и python параллельно?

    @Akela_wolf
    Extreme Programmer
    Учить разные языки программирования имеет смысл, поскольку каждый язык - это набор каких-то концепций. В свое время я использовал императивные языки (на работе - Java, в хобби-проектах - от C++ до PHP). И на этом этапе мне очень много дало знакомство с функциональными языками: Scala, Haskell. Я начал понимать много полезных концепций, таких как неизменяемость (immutable). А затем использовал их на основной работе (в частности по всему Java-коду щедрой рукой были рассыпаны модификаторы final). Так что не рассматривайте языки независимо друг от друга - этот для учебных задач, это для ИИ, этот для веба. Берите от каждого языка что-то хорошее и формируйте ваш собственный стиль программирования (пригодный, по сути, для любого языка).

    Еще добавлю про такую тему как ИИ. В этой области начинать имеет смысл не с языка программирования, а с математики, которая лежит в основе всех разработок по этой теме.
    Ответ написан
    Комментировать
  • Можно ли стать Java Senior разработчиком, если учится полгода-год по 2-3 часа в день?

    @Akela_wolf
    Extreme Programmer
    Одна из моих любимых поговорок: "10000 часов до мастерства".

    Если практиковаться 2 часа в день, 300 дней в год - это 600 часов в год. Соответственно, ~16-17 лет в таком темпе.

    Но, как говорит китайская пословица, путь в тысячу ли начинается с первого шага. В 14 лет 2-3 часа в день на программирование - это неплохой старт. До окончания школы может получиться "набрать" порядка 2500 часов. При должном усердии - это неплохой задел для дальнейшего изучения программирования.

    Еще один совет - английский тоже учите наравне с Java. Программисту в современном мире без него никуда.
    Ответ написан
    3 комментария