Избранные комментарии трейдера Тимофей Мартынов

по

Кстати, вот, например, на edX курс Programming with C# от Microsoft:

www.edx.org/course/programming-c-microsoft-dev204x-1

avatar
  • 28 января 2016, 16:35
  • Еще
Сегодня уже как 8-й день не курю. Жру как слон.
avatar
  • 24 января 2016, 13:51
  • Еще
Тоже решил бросить. 5 дней уже не курю.
avatar
  • 24 января 2016, 11:41
  • Еще
Тимофей, я тебе советую прочесть книжку CLR via C#.
Сейчас может еще рано, но если ты собираешься осваивать шарп, это одна из лучших книг. 
avatar
  • 22 января 2016, 22:30
  • Еще
Тимофей Мартынов, помоему ты слишком быстро хочешь получить конкретный результат, поэтому у тебя трещит голова, я бы советовал начать с простого. К примеру с питона и простой базовой книжки по нему, потом книжка по алгоритмизации, и обязательно выполнять все задания по ходу, тогда бы был толк. Программы = Алгоритмы + Данные + Интерфейсы.
avatar
  • 15 января 2016, 01:33
  • Еще
Fry (Антон), будем считать, что это ты понял.
Теперь следующий важный момент.
Существует две совершенно разные вещи, которые постоянно путаются в голове, если люди не понимают синтаксис предложения Си-подобного языка (именно Си, а не C++!).

Объявление — оно необходимо для компилятора, чтобы тот знал с каким типом данных связать конкретную переменную или функцию.

Определение — это значение. То есть байты которыми будет заполнена функция или переменная.
Для функции определение — это её тело (код функции).
Для переменной определение — это присвоение значения. В простейшем случае v=1 — это присвоение ячейке памяти, которую мы условно именуем v, состояния = 1.
При этом где-то раньше компилятору должно быть __объявлено__, что ячейка эта размером, скажем, 4 байта или 8 байт и только тогда он точно будет знать, что надо сформировать команду ассемблера, которая обнулит все эти 4 или 8 байта и лишь в младший бит поставит 1. Поэтому без объявления не обойтись.
Но тут начинается укороченная форма записи, когда например пишут:
int v=1;
Здесь сразу в одной строке идёт и объявление и определение переменной.
Точно так же можно сделать с функцией(методом) объявить и сразу определить. Но полная форма записи всё равно выглядит так:
int v;
v=1;

Возвращаемся к ООП.
int — это самый простой базовый тип данных, но там же может быть и класс (если не понял ещё раз читай прошлый камент).
Допустим:
StServerClass SmartServer;
Что это значит?
Ага. Именно так:
тип_данных имя
То есть, «сложная переменная»(оно и есть _объект_) по имени SmartServer теперь будет типа StServerClass.
При этом определения ещё не было! Это только объявление!
А вот объявление с определением в одну строку было у тебя в документации, но в примере кода они разделены на две строки.
Определение идёт дальше:
SmartServer = new StServerClass();

То есть сложной переменной (объекту) SmartServer присваивается значение StServerClass(). Прямо как в случае с v=1, только здесь не единица, а целый класс вместе с методами и данными.
Оператор new как раз означает для компилятора, что на этом месте во время выполнения программы надо будет в памяти развернуть(в смысле создать) экземпляр класса StServerClass.

Оператор try означает защиту от обращения в неопределённые области памяти. Это низкоуровневые технические заморочки.
Если, допустим, внутри блока try{} происходит попытка чтения/записи в память, которая защищена или вообще эти адреса не доступны, тогда программа не будет аварийно закрываться из-за такой ошибки. Это как бы сознательная попытка «тыкнуть» в некоторую облать памяти (по указателю) и проверить, а оно нам доступно?
Для чего это надо.
Опять таки, если с объявлением/определением объекта было что-то не так, тогда указатель на него физически будет мёртвым, так как объект не создан. На этапе компиляции программы не всегда можно гарантировать правильное создание любого объекта, вот и приходится использовать try.


* в этом каменте понятие «определение» я использовал некорректно (подзабыл сам, спасибо professor facepalm вразумил) и по сути спутал «определение» с «инициализацией», так что перечитать камент придётся ещё разок другой =), но всё равно в нём есть польза.
avatar
  • 14 января 2016, 06:32
  • Еще

Тимофей Мартынов, ну вот. Что-то ведь знаешь =)
У всего есть фундаментальная причина. Думай как компилятор. Что ему надо знать, чтобы собрать программу? Тип данных необходим.

Простые типы — это:
во-первых, размер памяти выделяемый под них в файле и во время исполнения программы;
во-вторых, применимые к ним операции ассемблера.
Один и тот же набор битов означает разные сущности (разный смысл закодирован) в зависимости от типа данных.
То есть, в памяти хранится некий набор нулей и единиц, но в зависимости от того какая операция ассемблера будет выполнена (для целых без знака, со знаком, для вещественных чисел...) на выходе мы получим разный результат.
Поэтому компилятору надо знать тип данных.

Далее. Входных параметров у функции может быть много, а возврат всегда один (при этом результатом действия функции может быть много разных изменений, но возврат только один).
Когда объявляется функция у неё тоже обязательно объявляется тип данных, это и есть тип возврата.
В этом смысле переменная и функция подобны по синтаксису.
переменная так: тип_данных имя = значение
функция так: тип_данных имя(параметры)
Это должно быть кристально ясно, чтобы можно было переходить к абстракциям ООП. На самом деле ты должен сразу в голове выделять как компилятор все составляющие «предложения». В рамках камента не влезает, надо развивать дальше тот же путь (понять весь синтаксис предложения любого С-подобного языка программирования). По сути каждая команда ассемблера — функция. То есть всё сверху до самого процессора подобно одно другому (и внутри процессора), но дробится на более мелкие субстанции. Так что если понимаешь один уровень, поймёшь и другой.


Затем переходим к ООП.
функция = метод.
Класс — это сложный тип «данных», который на самом деле физически отличает от простого типа данных только то, что класс допускает совокупность не просто данных (переменных, грубо говоря), но и включает в себя исполняемый код, то есть методы закреплённые за этими данными.
Такая концепция позволяет создавать более сложные программы с меньшим гемором.
Объект – это конкретное воплощение класса (экземпляр).

Ещё раз:

тип_данных имя

Если тип_данных – это класс, а не простой тип, тогда «имя» — это объект (экземпляр класса).

Ясно?

avatar
  • 14 января 2016, 03:52
  • Еще
Тимофей Мартынов, я закончил примерно тоже самое, примерно в те же годы, только в другом вузе, поэтому в этом плане мы коллеги и все что ты пишешь было очень похоже. Правда до этого мне в школе успели основы ООП неплохо дать, так что для того чтобы восстановить уровень нормального пятикурсника по специальности у меня ушел где-то год. А больше и не нужно тут, это не драйвер на ассемблере писать. По API SmartCom 3.0 могу дать заготовку на C# без «воды» — одна форма, которая после запуска соединяется с сервером котировок и все шаги выводит в окно лога:
avatar
  • 13 января 2016, 12:12
  • Еще
Тимофей, ох и тернистый путь Вам предстоит =)

Сначала стоит определиться со средой разработки(MS Visual Studio, MonoDevelop), посмотреть несколько обучалок по работе с ней.

Дальше есть два пути:
1) долгий, идти методично от простого к сложному, получая при этом понимание абстракций и концептуальных идей самого языка программирования, принципов программирования и проектирования, архитектуру .NET. Предстоит чтение книг, совсем не тоненьких(например, лежит на столе Кристиан Нейгел «С# 5.0 и платформа .NET 4.5»). 
2) короткий, выбрать конкретную задачу и решать именно ее(для начала это даже будет лучше, руки сразу не опустятся). Грубо говоря, если нужно чтобы форма с кнопкой, по нажатию на которую выводится сообщение, Вы и начинаете копать: как сделать форму? как на нее кинуть кнопку? как привязать событие к нажатию кнопки? как вывести текстовое сообщение? И на такие вопросы раскладываете любую задачу.

В любом случае придется изучить синтаксис языка, без него никуда, типы данных, базовые конструкции языка(циклы, ветвления). C# — объектный язык программирования, поэтому концепции данной парадигмы тоже придется изучить. Для создания визуальных интерфейсов пригодится WinForms, хотя сейчас процветает WPF. Когда окрепнут базовые навыки можно начать изучать взаимодействие с операционной системой и ее компонентами(файловая система, реестр, сеть, память и т.п.), построение своих объектов, создание собственных модулей.

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


Возможно получилось сумбурно

P.S.
Кристиан Нейгел «С# 5.0 и платформа .NET 4.5 для профессионалов» — конечно для начала тяжеловата будет, но в ней есть и архитектура .Net, основы языка и основы работы с MS Visual Studio 2012
avatar
  • 10 января 2016, 22:05
  • Еще
Тимофей Мартынов, да, курисл. Не заядлый, но довольно регулярный.

В декабре 15го бросил.
avatar
  • 08 января 2016, 01:34
  • Еще
меня там запишите тоже, посмотрим что получится
avatar
  • 07 января 2016, 23:25
  • Еще
Добавьте меня в бросающих… Если добавите то сделаю все возможное чтобы не курить
avatar
  • 07 января 2016, 22:36
  • Еще
Присоединяюсь
Если брошу значит — пупсик
Если нет- ну и пошли вы все
avatar
  • 07 января 2016, 22:18
  • Еще
Тимофей, добавь и меня.
Обязуюсь не выкурить ни одной сигареты в 2016 году.
avatar
  • 07 января 2016, 21:56
  • Еще
Не курю с 3 января 2016. Полет нормальный. Бросил навсегда.
avatar
  • 07 января 2016, 21:39
  • Еще
С НГ не курю и такое же слово себе дал. Год курить не буду.
avatar
  • 07 января 2016, 12:59
  • Еще
Без никотина уже с 5.01.2016 ))) Стаж 24 года. Уши пухнут! Тимофей, заноси в таблицу! Курить и недосиживать до тейкпрофитов — зло )))
avatar
  • 07 января 2016, 12:50
  • Еще
Тимофей Мартынов, хотел сегодня закурить, но на почту пришло напоминание этого поста…
с 4.12.15 без никотина, присоединяюсь.(стаж 8,5лет)
avatar
  • 07 января 2016, 10:18
  • Еще
....все тэги
UPDONW
Новый дизайн