Мой прогресс и достижения в разработке.

Главная Форумы Разработка игр Мой прогресс и достижения в разработке.

Просмотр 27 веток ответов
  • Автор
    Сообщения
    • #5187
      InFallen
      Участник

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

      Давайте познакомимся.

      Меня зовут Артем. Мне 27 лет. По работе с компьютерами связан последние 5-6 лет. Работаю системным администратором. В основном знаю такие вещи как Windows Server(AD DS, DHCP, DNS, GPO, RDP, IIS), Exchange Server, Linux CentOS(Apache, Nginx) и язык PowerShell(который выручал много раз для автоматизации процессов) также обладаю знаниями о технологии виртуализации на базе Vmware и Hyper-V. Пришел в данную сферу по собственному желанию, т.к. было интересно, много новой информации и интересные задачи. Опыта в разработке ПО у меня нет, языки программирования изучать не приходилось.
      В данный момент интересуюсь сменой профессиональной деятельности в сторону программирования и разработки.
      В связи с этим полез в Google и начал искать информацию по данной теме. Наткнулся буквально на первой странице на блог Сергея. И слава богу, а то пошел бы в GeekBrains. Огромная благодарность за эту статью.
      И продолжил читать блог и наткнулся на эту статью. Из нее понял, что нужно учить язык программирования, причем не приходят к таковой разработке игр, а именно для полноценного изучения языка, как инструмента для создания чего-либо. В этой же статье есть варианты книг, с которых лучше начинать. И В связи с этим у меня возник первый вопрос:

      1. В статье книга по C#5.0, как в данный момент уже C#7.0, есть ли какие-то глобальные различия в данных версиях? И подойдет ли для обучения книга по C#7.0?

      Также я начал уточнять информацию по данному языку у своих коллег, они разрабатывают расширения для Dynamics CRM, SharePoint и MS Office, по данной теме. Мне посоветовали ресурс ITVDN, отсюда второй вопрос:

      2. Кто-то пользовался данным ресурсом? Может у кого-то есть отзывы, т.к. в интернете я нашел мало информации о них.

      И отсюда же вытекает третий вопрос:

      3. Стоит ли вообще учить программирование по видео? Или все же делать упор на книги?

      С вопросами вроде все.
      Еще раз благодарю Сергея за его блог, очень помог разобраться, в себе и чего я должен добиваться.

    • #5188
      Сергей Кормишин
      Хранитель

      Привет, я просто счастлив! И огромное спасибо за то, что создали эту тему!

      По поводу книг по C#, мне кажется большой разницы не будет на начальных порах, скорее всего 7.0 от 5.0 отличается каким-нибудь удобным синтаксическим сахаром (я теперь совсем не слежу – перешел на C++).

      Если не программировали вообще – и 5.0 сгодится. Про ITDVN первый раз слышу, поэтому ничего не скажу. Мне кажется книги (троелсен, рихтер, скит) и официальная документация от Microsoft (MSDN) в случае веба – будут исчерпывающими источниками. Если игры на Unity решите делать, то документация от самих Unity Technologies вместо MSDN. Плюс когда будете гуглить как что-то сделать – будете натыкаться на полезные ответы на Stackoverflow от Джона Скита (это Чак Норрис в C#).

      Стоит ли учить по видео? Когда я учил C# хороших видео не встречал, сейчас возможно они есть. По С++ например я смотрел видео.

    • #5195
      InFallen
      Участник

      Ну надо было с чего-то начать, я начал с темы на форуме.
      Про книги вопрос был к тому, что в продаже найти С#5.0 уже невозможно, а цена на С#6.0 и С#7.0 не сильно отличается.
      Для начала думал не трогать ни веб, ни Unity. Хочу понять как с языком работать, с той же Visual Studio, т.к. в ней столько всего, что глаза разбегаются, или есть возможность работать с C# в других IDE?
      Начал смотреть видео на ITVDN, первые два в свободном доступе: рассказывают понятно, в первом же уроке создается первые проекты(консольное приложение “Hello World!”, приложение Windows Form и Web страница с шаблона), показывают как работать с Visual Studio. Есть скачиваемые материалы к уроку, сама презентация, и те примеры какие делали на уроки, также рекомендуют литературу. Причем такую же что и в статье в блоге.
      Так что пока продолжу смотреть видео, а потом как приобрету книгу перейду на нее.

    • #5197
      Сергей Кормишин
      Хранитель

      Мне в университете советовали, когда начинаешь изучать программирование – вообще можно в блокноте код писать, IDE лучше не использовать,- нужно со структурами данных и алгоритмами разбираться, а потом уже IDE. Это очень полезный совет если вы хотите совсем в программиста переквалифицироваться, на каком бы языке потом не пришлось писать базовые знания – очень нужны.

      Я конечно, не призываю в блокноте писать все писать, но попробовать из консоли собрать проект – полезно бывает

    • #5198
      Сергей Кормишин
      Хранитель

      Еще Rider есть от JetBrains, если у него есть бесплатная Community Edition – то очень полезный инструмент, рекомендую, платная – довольно дорогая версия.

    • #5199
      InFallen
      Участник

      Можно и в блокноте, тот же NotePad++ очень удобен в работе не раз помогал. Но для сборки нужен компилятор, в IDE-то он встроенный получается, использовать компилятор Microsoft.Net, расположенный по пути C:\Windows\Microsoft.NET\Framework\v4.0.30319 ?

      • #5206
        Сергей Кормишин
        Хранитель

        Да, примерно так это и работает, ставится IDE и комплиятор оттуда, отдельно его ставят на какие-нибудь CI сервера или какие-небудь Deploy’ные сервера.

    • #5201
      InFallen
      Участник

      Rider только платная версия, 30 дней триала дают и все.

    • #5207
      Сергей Кормишин
      Хранитель

      Тогда только студия community или express вроде есть

      • #5208
        InFallen
        Участник

        С компиляцией через командную строку разобрался, а то по началу запускал по данному пути: C:\Windows\Microsoft.NET\Framework\v4.0.30319 , а нужно было просто запускать командную строку, которая вместе с со студией устанавливается, она и exe-файл рядом с исходником сохраняет.

    • #5257
      InFallen
      Участник

      В продолжение темы, повезло приобрести две книги:
      1. Язык программирования C# 6.0 и платформа .NET 4.6 (Троелсен, Джепикс) – приобрел у товарища.
      2. C# 6.0. Справочник. Полное описание языка (Д. Албахари и Б. Албахари) – тот же товарищ подарил в придачу.

      В первую очередь очень удивился их размерам, сказать что книги большие ничего не сказать, это БОЛЬШИЕ книги.
      Про информативность второй книги ничего не скажу, т.к. к ней еще не прикасался, а вот про первую расскажу, хотя прочитал только Введение и первую главу:
      Очень подробно и самое главное интересно описываются все технологии, которые будут использоваться(при этом мы еще даже не знаем, как программировать и вообще что-либо делать).
      Приводимые примеры все понятны и легко усваиваются.
      Единственное не понял, почему так много информации лишней(хоть и интересной), т.к. я считал, что мне нужно изучения языка, а потом уже изучение каких либо технологий, где данный язык можно применять, а тут много разжевывают про работу CLR, CTS и CLS, еще один язык CLI. Как я понял это больше относится к описанию платформы .NET.
      Вроде про данную книгу больше ничего сказать не могу.

      Также заглянул на официальное руководство по языку у Майкрософта, тут уже интереснее:
      Сразу сходу, вот первая программа, вот так выглядит:
      // A Hello World! program in C#.
      using System;
      namespace HelloWorld
      {
      class Hello
      {
      static void Main()
      {
      Console.WriteLine(“Hello World!”);

      // Keep the console window open in debug mode.
      Console.WriteLine(“Press any key to exit.”);
      Console.ReadKey();
      }
      }
      }

      И инструкция как и что сделать в Visual Studio, а далее идет описание что в ней и за что отвечает.
      Единственное при описании метода Main не понял информацию про аргументы в таких конструкциях, как:
      1. static void Main(string[] args)
      {
      //…
      }

      2. static int Main(string[] args)
      {
      //…
      return 0;
      }

      Наверно данная информация будет идти далее.

    • #5258
      Сергей Кормишин
      Хранитель

      Привет) А мне стоит пояснять как-то или Вы сами прочитаете? :)
      Если будете какой-то блок формировать, вроде
      Вопросы
      1. В чем разница между static void Main и static int Main?
      2. Зачем программисту нужно знать про CLR и тп?

      то я могу :)

    • #5259
      InFallen
      Участник

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

      Вопросы
      1. В чем разница между static void Main и static int Main?(Если меня не подводит интуиция, то разница в возвращаемых значениях?)
      2. Зачем программисту нужно знать про CLR, CTS, CLI, CLS и подобные технологии, еще не приступая даже к собственно программированию?

    • #5260
      Сергей Кормишин
      Хранитель

      1. Верно, возвращаемое значение. В случае с main – а это входная точка программы, это значение возвращается Операционной системе, и может быть использовано тем, кто вызывает программу. Примерно так: В своей программе вызываете другую программу и после того как она завершилась спрашиваете у системы: а какой результат она вернула?
      2. Про среду выполнения и систему типов нужно знать. Точка. Это как ингридиенты и различная кухонная утварь для повара. Программист как и повар разбирается какие ингридиенты в рецептах применять (как типы использовать) и как их готовить (какие алгоритмы применить). CLR правда более похоже на “как устроена сковородка”, а не “как приготовить”, но понимание “зачем оно всё” потом придет :)

    • #5261
      InFallen
      Участник

      В общем пока буду читать и впитывать информацию, а потом уже на практике, что-то проясниться, а если не проясниться, придется заново впитывать информацию. Благодарю за ответ.
      Лишний раз прочитал про технологии:
      CLR – это исполняющая среда, в которой компилируются приложения написанные на языках совместимых с .NET(Здесь уже компилируется CIL код).
      CIL – это промежуточный язык для .Net Framework и входит в состав CLR.
      CTS – это спецификация, определяющая как типы данных должны быть определенны для выполнения в .NET.
      CLI – это набор общих правил для работы с .NET

      Т.е. как я понял данные действия происходят так:
      1. Я пишу код на C#.
      2. Он компилируется в CIL-код.
      3. CLR компилирует CIL-код в .exe

      Если вдруг я где-то неправ, поправьте меня.

    • #5262
      Сергей Кормишин
      Хранитель

      3й шаг немного не такой: CIL во время выполнения компилируется, тоесть обычно CIL в .exe и находится. Но есть и оффлайн компилятор (никогда им не пользовался)

    • #5264
      InFallen
      Участник

      Все понял, т.е. получается CIL-код уже находится в .exe.
      Вопрос
      А при запуске среда .NET его компилирует его с помощью JIT в нужный код под нужную платформу?

    • #5273
      InFallen
      Участник

      Вот этот рисунок все разъяснил, получается что мой исходных код на C#, компилируется в сборку .exe в которой находят CIL-код, метаданные и манифест. Далее при запуске данной сборки, среда .NET с привлечением “Библиотек базовых классов” переводит код из .exe файла в понятные платформе инструкции и выполняет их.

      Подтвердите мою мысль или укажите где я не прав?

    • #5280
      Сергей Кормишин
      Хранитель

      В еxe коды методов в CIL, в рантайме если метод еще не компилировался – компилируется в нативный код и исполняется. При последующих вызовах не перекомпилируется, используется уже скомпилированный.

      • #5281
        InFallen
        Участник

        Благодарю, разобрался, буду дальше грызть гранит =)

    • #5412
      InFallen
      Участник

      Добрый день, решил резюмировать о своих достижениях по изучению программирования и в частности языка C#.
      Удивился сам, но я так не учился со времен техникума. С удовольствием втянулся в учебу и голова сама требуется знаний.
      За прошедшую неделю изучил:
      1. Понятия CTS, CLR, CIL-код(просмотр кода с помощью утилиты ildasm.exe)
      2. Какие существуют IDE для работы с платформой .NET
      3. Структуру простой программы: метод Main, его вариации и обработку его аргументов.
      4. Базовые знания класса System.Console, который позволяет работать с консолью и производить операции во вводу-выводу данных на консоль и форматирование данного вывода.
      5. Базовые знания о системных типах данных, их ключевых словах
      6. Работа с переменными: инициализация переменных, создание переменных операцией new, основные арифметические действия с переменными, как узнать свойства переменных(такие как минимальное или максимальное значение), преобразование переменных в строку(метод ToString()) или строки в переменную(метод Parse())
      7. Тип данных System.Boolean, у которого всего два значения true и false, также его свойства которые возвращают true или false в виде строки(TrueString и FalseString)
      8.Тип данных System.Char, с помощью которого можно хранить одиночные символы в переменных, а также методы присущи данному типу, такие как IsDigit(), IsLetter(), IsWhiteSpace(), IsPunctuation().
      9.Тип данных System.DateTime и System.TimeSpan, которые позволяют работать с датой и временем соответственно.
      10. Тип данных BigInteger из пространства имен System.Numerics, который позволяет работать с огромными числовыми значениями.
      11. Работа со строковыми данными, форматирование при выводе(методы ToUpper() и ToLower()), возвращение длины строки(свойство Length), проверка на содержание(метод Constains()), изменение части строки(метод Replace()), конкатенация строк, управляющие последовательности, определение дословных строк(оператор @), сравнивание строк, неизменность строк(при изменении строки создается новая строка), интерполяция строк.
      11. Тип System.Text.StringBuilder, который используют вместо типа string при работе с большими объемами текста из-за его расширяемости.

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

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

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

      Ну и напоследок…
      ВОПРОСЫ.
      1. Стоит ли перекладывать задачи из учебников на код?(Для практики языка программирования, запоминания синтаксиса, конструкций).
      2. Нужен совет по английскому языку, самостоятельная учеба или с преподавателем, сидеть прям зубрить? или потихоньку переводить небольшие статьи и учить грамматику?

    • #5506
      InFallen
      Участник

      И снова привет. В этот раз раньше пишу о своих похождения на поприще изучения языка программирования C#, т.к. пришел к какой-то логической паузе в этом наверно. Со следующей темы начинается изучение объектно-ориентированного программирования. И у меня возникли вопросы, но это потом, сначала резюме изученного.

      Изучено:
      1. Сужающие и расширяющие преобразования типов данных.
      2. Ключевые слова checked и unchecked, которые работают с переполнением переменных.
      3. Неявно типизированные локальные переменные, которые объявляются ключевым словом var.
      4. Итерационные конструкции(циклы) for, foreach/in, while, do/while;
      5. Конструкции принятия решений: if/else, switch.
      6. Модификаторы параметров: out – передача аргумента в метод по ссылке(c обязательным присваиванием значения в методе), ref – передача аргумента в метод по ссылке(перед передачей обязательно нужно инициализировать передаваемую переменную), params – позволяет передавать методу переменное количество идентично типизированных параметров.
      7. Необязательные и именованные параметры.
      8. Перегрузка методов – создание методов с одинаковыми именами, но отличающиеся друг от друга количесмвом(или типами) параметров.
      9. Массивы, также многомерные массивы и зубчатые массивы.
      10. Тип Enum – перечисление, который позволяет создавать набор имен с своими значениями.
      11. Структуры – тип которые используется для создания групп связанных переменных, например как координаты какой-либо фигуры.
      12. Типы значений и ссылочные типы.
      13. Типы допускающие null, такие типы удобны для работ с базой данных.

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

      Вопросы:
      1. Стоит ли немного приостановиться перед изучением ООП и попрактиковаться с данными знаниями или продолжать изучение дальше?
      2. Для чего хватит на данный момент моих знаний?(Это не зазубренный материал, это четкое понимание пройденного материала, т.к. выучить даже эту часть, можно только со временем)
      3. Если практиковаться, то как? Перекладывать математические, физические и т.д. задачи на код, ну это по сути калькулятор, логику которого я написал. Просто я выучил в данный момент определенную часть языка, а как её применять немного не понимаю.

    • #5513
      Сергей Кормишин
      Хранитель

      1. Эти понятия – средства языка, инструменты, относись к ним так (не помню на “ты” мы или нет, но давай, пожалуйста на “ты”). Сейчас позиция такая: ты знаешь про отвертки, молотки, стамески и всякое такое. Нужна практика использования этих инструментов.

      1.1 Стоит ли откладывать изучение ООП? Не думаю. Это просто абстракция – ничего сложного. Я остро понял для чего оно нужно, когда мне в универе на 1ом курсе дали лабораторную – написать примитивный менеджер базы данных (просто в файле сведения о студентах: ФИО, средняя оценка и операции “удалить”, “добавить” и тп). Менеджер имеется в виду просто консольное приложение с пунктами меню, которые перерисовывались в цикле: 1. Добавить 2. Удалить с таким айди еще что-то… Все это мы писали процедурками, функциями. А потом переписали с использованием ООП, было ооочень проще отлаживать и воспринимать ООП абстракции, чем вермишель из функций.

      2. Знаний хватит для очень многого – добавить “ввод/вывод” в файл и можно писать разные интересные вещи: парсеры, обработчики изображений. Сетевое какое-то API изучить и можно чатик написать или еще что. Вариантов – туча.

      3. Ну вот какую-то практическую задачу можно решить. Как я выше писал – парсер, например. Зависит от того, что тебе интересно :)

    • #5514
      Сергей Кормишин
      Хранитель

      Теперь главное – много практики и подружиться с отладчиком :)

    • #5515
      InFallen
      Участник

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

      Мне интересно было бы попробовать сделать даже тот же арканоид, но я как понял, там уже нужны большие знания. Пока я не понимаю даже как примерно это выглядит в коде.
      Я большой фанат олдовых jrpg, пробовал делать в RPG MAKER, получалось, но осадок оставался, как будто половину не я делал, а мне уже готовое принесли, и не понимал откуда что берется из этого. Поэтому решил начать изучать все с инструмента разработки и пошагово разбираться во всем.

      Попробую написать парсер. Принцип такой получается: он берет входные данные из файла, и можно редактировать их, выбирая какие-то пункты в консоли, и данные изменения записывает обратно в файл, или создается новый файл? Или может я неправильно понял что-то?

    • #5516
      Сергей Кормишин
      Хранитель

      Да нет же, парсер это просто анализатор содержимого – например, скачать html страничку в файл – найти все url’ы или email’ы – вот это примитивный парсер

    • #5517
      InFallen
      Участник

      Благодарю. Кажется понял, т.е. на входе какой-либо текст, и парсер может данный текст например разобрать, на отдельные слова(в которых содержаться определенные буквы заданные условиями), или вообще на выходе дать, сколько и каких букв есть в данном тексте?

    • #5518
      Сергей Кормишин
      Хранитель

      Формально – парсер синтаксически анализирует входные данные. Может на слова разбирать, может выделять лексемы (части данных) каким-то образом – например, пропускать все строки, кроме тех что начинаются с “<" например. А подсчет и т.д. - это уже статистический алгоритм, который пишется по данным, которые парсер считал.

    • #5519
      InFallen
      Участник

      Благодарю, теперь точно понял.

    • #5617
      InFallen
      Участник

      И снова привет, я долго ничего не писал, разбирался с ООП и пытался что-то написать своими силами. В связи с тем что долго не писал сюда ничего, заметил что замедлился в изучении, и очень сконцентрировался на написании кода, поэтому пройденного материала было мало. Подведу итог:
      1. Изучен тип “Класса”, как его создать, как создать объект на основе созданного класса, переменные определяющие состояние объекта, конструкторы класса(стандартный и специальные).
      2. Ключевое слово this, построение с помощью данного слова цепочки конструкторов.
      3. Ключевое слово static, с помощью которого создаются элементы, к котором для обращения не нужно создавать экземпляр класса. Такими элементами могут быть: данные класса, методы класса, свойства класса, конструктор, полное определение класса, даже в сочетании с ключевым слово using;
      4. Первый принцип ООП – “Инкапсуляция”, так называемое скрытие реализации объекта.
      5. Модификаторы доступа, такие как public и private.
      6. Инкапсуляция с использованием модификаторов доступа и методов.
      7. Инкапсуляция с использованием свойств и методов get и set.
      8. Автоматические свойства.
      9. Константные поля.
      10. Частичные классы.

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

    • #5618
      Сергей Кормишин
      Хранитель

      Привет, лучше бы сразу изучить систему контроля версий – тогда код можно будет шарить через гитхаб, например. Git сейчас самый популярный в этом плане. Рекомендую эту книгу: https://vk.com/coremission?w=wall-48132900_123

      • #5619
        InFallen
        Участник

        Благодарю, я его пробовал по официальному туториалу, и как-то не зашло, попробую по книге теперь.

Просмотр 27 веток ответов
  • Тема «Мой прогресс и достижения в разработке.» закрыта для новых ответов.
Понравилась статья? Поделиться с друзьями: