dr-mart

Программирование и я. Что я умею?

Последний раз я писал про свои успехи в программировании 10 дней назад. За эти 10 дней я:
  • потратил еще 18 часов чистого времени изучения. (Маловато, всего 1 час 48 минут в день в среднем получается)
  • всего потрачено 75 часов.
  • продвинулся по книге Изучаем C# со стр. 304 до стр. 492.
  • написал и отправил на ютуб ещё 8 программок
Итак, что я до сих пор не знаю?
  • не знаю как работать с параллельными вычислительными потоками
  • не знаю как работать с графическим интерфейсом вообще
  • не совсем понимаю как работать с большими объемами данных и как их лучше хранить 
  • интерфейс WPF
  • я не знаю чего я ещё не знаю в силу своей недостаточной компетенции. Чем больше я буду узнавать, тем больше я буду понимать, что я этого не знаю
Что я теоретически уже освоил?
  • интерфейс Windows Forms
  • синтаксис C#
  • типы данных, преобразование типов, массивы
  • все виды циклов
  • понятие объектов
  • классы, методы, поля, конструкторы, свойства
  • наследование классов, полиморфизм классов, инкапсуляция
  • использование базы SQL
  • запись текста в файл в формате txt, сохранение объекта в файл
  • обработка исключений
  • дебаггинг программы

Пример решения последнего ребуса на try-catch

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

Ну и кроме того, я слишком туп для того, чтобы легко разобраться по каким-то практическим решениям. Я открыл пример программы коннектора для smartComа и у меня взорвался мозг. Сейчас я дочитаю книгу и вернусь к программе-коннектору. 

Первая практическая задача = научиться через smartCom обрабатывать свою статистику торговли онлайн.
То есть получать инфу о совершенных сделках и определенным образом её обрабатывать.
Вторая практическая задача = перестроить стакан определенны способом + настроить график текущей цены определенным способом.

Сейчас дочитаю книгу и вернусь к тестовому коннектору смарткома. Что мне осталось изучить?

  • события, делегаты, обратный вызов
  • визуализация, PictureBox, UserControl, Graphics, Bitmap.
  • убийство объектов
  • LINQ
Интересно, чего я ещё не буду знать о C# после прочтения этой книги?))

Блин, самое сложное во всех этих вещах — это как и в трейдинге, засунуть куда подальше нетерпеливость и последовательно методично заниматься предметом. Ведь хочется всё и сразу и именно поэтому ничего не получается. 
Хм. Зато чем дальше я двигаюсь (хоть и очень медленно), у меня прям уважение к самому себе растет, если я что-то начинаю понимать:))
★16
69 комментариев
Тоже в процессе изучения только я начал свой путь с VBA.
  • все виды циклов

Все виды циклов сводятся(являются частными случаями) к GOTO:)
avatar
sortarray sortarray, ну и ник у тебя)))
Тимофей Мартынов, просто был такой свободный ящик, я не заморачивался, просто сделал копипаст:)
avatar
Тимофей Мартынов, В частности, многие люд советуют решать конкретные практические задачи и так учиться программированию
Вот это дельный совет. Сам так и учился. В памяти все в разы лучше откладывается. А все что я прочитал, но не использовал в итоге -забылось очень быстро!
avatar
 
  • типы данных, преобразование типов, массивы

Тут перечисление лишнее, если ты освоил *типы данных* ты освоил и массивы, так как массив — это тип данных.

Вообще конечно, понятие тип данных — это, по большому счету, баззворд, нет никаких типов данных, данные ничем не отличаются от программы, возможно это до тебя дойдет когда-нибудь:) Это во многом ключ к пониманию программирования вообще.
avatar
sortarray sortarray, не дойдёт. Это нужно только хакерам. Дисциплинированным программистам такое юзать не положено.
Ну а чего ты ожидал? Что бы иметь систему, надо 5 лет учится в вузе. Если будешь уметь кодировать как ПТУшник это уже хорошо. Систему с наскока ты один хрен не осилишь. 
   Хотя даже если смотреть на то что изучаешь системы немногим меньшче, чем никакой. В одну бочку запихал LINQ и BITmap. Пипец.


avatar
как освоишь, учить будешь? ;) 
Главное уметь оперировать знаниями.  
Бывают знатоки, которые простейшие задания типа сортировки массива сделать с трудом еле могут. ) Зато синтаксис знают.
avatar
Напоминает, как начинающий автомобилист, учится вождению по книге. ))

Это возможно. Но зачем? Ничего путного с таким обучением написать невозможно. Быдлокодеров обученных по  книгам и не представляющих как вообще все работает — пруд пруди. Написать робота или использовать API биржи — это же слезы будут. Только на уровне студенческой практики… А время?  А другие, более интересные занятия?

Стать программистом — это не значит прочитать даже все книги, понять и порешать задачки. Программист — это человек который с детства этим занимается, те кто пишут реально классный код, строят торговые системы — они в 90-х писали програмульки под Спектрум на ассемблере и взламывали чужой код. Если в команде есть такой чел — проект будет легким а софт быстрым. Если этого не было с детства, если это не интересовало, то взять сесть и стать хоть что-то вменяемое писать — сродни чуду. В обратном случае мы видим делфи-подобные поделия типа МТ или Quik.

Из книг — почитайте Кнут Искусство Программирования. Это наверное лучая книга по этой теме. И да, программеру без разницы на каком языке писать. Дело нескольких дней переключится с C на фортран или на что другое. Главное понять принцип.
Брахман Пилорама, Кнута ни в коем случае нельзя читать!
Багатенький Буратина, что такого Кнут написал плохого?

avatar
Брахман Пилорама, все так как пишите. Кнута не читал — не довелось поэтому не могу ничего сказать. 
avatar
Я думаю это не очень хорошо, потому что так ты будешь как птушник, который конечно может там чего-то настругать, но при этом не имеет глобального видения и знания для системного решения проблем.

Допустим, ты решил заниматься танцами. Прочитал книгу, изучил теорию. Весь фундамент знаешь теоретически… Ну ты понял — вопрос яиц остаётся открытым =)

Главная мысль такой деятельности как трейдинг или программирование заключается в том, что лишь практическая задача на пути её ПРАКТИЧЕСКОГО решения возбуждает нужный ход мыслей, чтобы задавать правильные теоретические вопросы и правильно формировать свою базу знаний.
Никогда по книгам ты не станешь профи!

Я открыл пример программы коннектора для smartComа и у меня взорвался мозг. Сейчас я дочитаю книгу и..
И у тебя снова взорвётся мозг. Прям один в один будет ситуация. И тогда ты поймёшь, что проблема не в книге =)
Надо выбрать или wpf (лучше), или winforms, нет смысла их друг за другом учить, это разная реализация одного и того же.
Тимофей, молоток. опять же одни мифы вокруг программирования что это для избранных. на самом деле программирование нужно учить всех обязательно, программирование, алгоритмизацию и математику хоть на базовом уровне. не слушай что тебе говорят всякие «умники», иди своим путем на пролом. а то что программирование это не раз и выучил или научился, тут развитие идет постоянно, как среды разработчиков, Фреймворки, методологии, техники, синтаксис, точнее синтактический сахар. тот же С# от версии к версии иногда значительно а иногда не очень меняется. многопоточное программирование в C#1,2 совсем не такое как в 3.5, 4 и 5. когда-то надо было делать всё руками, создавать потоки и разруливать их, потом появился TPL, ну а теперь распаралелить цикл сможет любой с помощью plinq или parallel.foreach в одну строку =). мне повезло когда-то, я отучился в лицее с уклоном в информатику, в инсте был курс по программированию и алгоритмам, но это мелочь по сравнению с практикой, работой с профессионалами когда ты можешь у них спрашивать, задавать вопросы. даже на СЛ думаю найдутся те кто может ответить на твои вопросы, главное задавай их
avatar
есть, спасибо
Тимофей, я бы тебе рекомендовал сразу писать в Web на ASP.NET MVC. Desktop приложения это хорошо, но будущее однозначно за web и мобильными приложениями. WinForms уже давно устаревшая технология.
avatar
nxt, если будущее за веб, то почему бы сразу не писать на нейтив-веб языках, таких как PHP, javascript, и соответствующих фреймверках например? Зачем сюда NET за уши притягивать?
avatar
sortarray sortarray, в ASP.NET MVC на C# пишется только серверная часть, клиентская на HTML/Javascript. Кроме того с недавних пор последний ASP.NET 5 кроссплатформенный.
avatar
nxt, то есть, NET надо тащить только ради того, чтобы иметь *счастливую* возможность писать бекэнд на *непревзойденном* С#?
avatar

sortarray sortarray, да можно писать на чем угодно, смотря какие задачи стоят. Кому-то больше по душе тот же Node.js.

Суть моих комментов в том, что если и изучать C#, то лучше сразу фокусироваться на Web. 

avatar
nxt, Я с Вами согласен, что сейчас стоит фокусироваться на WEB, десктоп скоро вообще здохнет. Проблема в том, что статически-типизированные языки очень хреново подходят для веба, не случайно, почти все используемые в вебе языки данамические. А скорость для сервер-сайд не важна, там гораздо важней возможность масштабирования.
avatar
sortarray sortarray, какие-то глупости пишите.
Максим Виссарионович, Ваше мнение очень важно для нас, оставайтесь на связи.
avatar

sortarray sortarray, скорость не важна? Вы в каком мире живете?

Если web приложение обслуживает полтора юзера, может и не важна. Сами почитайте что написали.

avatar
nxt, Я еще раз повторяю, не важна. В нормальном приложении запросы обрабатываются асинхронно, сервер никогда на берет на себя тяжелые вычисления, он только диспетчеризует запросы и реализует логику. Не заставляйте меня подозревать, что вы живете в мире тупых число*бов.
avatar
sortarray sortarray, кроме того, C# на сервере будет работать гораздо быстрее чем тот же PHP.
avatar
nxt, я не знаю что такое МВЦ, первый раз слышу об этом

Тимофей Мартынов, ASP.NET MVC — технология для разработки web приложений, на базе шаблона Model-view-controller. Суть в том, что в приложении должно быть четкое разделение на:

1. Model — обрабатываемые данные, модели данных, база данных

2. View — web страницы, UI, куда выводится вся информация

3. Controller — логика web приложения.

avatar
 Да, и лучше сразу поставить себе ReSharper для рефакторинга.
avatar
nxt, что такое решарпер?
что такое рефакторинг?

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

Reshaper помогает оптимизировать многие процессы связанные с рефакторингом. Можно погуглить.

avatar
Тимофей,  рекомендую тебе взять API хоть Велса, хоть ТСлаба и начать уже писать робота используя это АПИ. Я на своей шкуре убедился что вопрос синтаксиса и команд это вообще дело 3-е, ставь Решарпер он за тебя все сам сделает)), важнее всего как заставить все это заработать, а для этого нужна практика. Опишу по шагам свой путь 1) Логика робота готова, вопрос — откуда котировки брать в реальном времени. 2) Как ставить заявки 3) Как получить обратную связь о том, что заявки сработали. 4) Как сделать так чтобы не контролировать действия робота в реальном времени и не использовать на это ресурсы собственного компьютера 5) Как сделать так чтобы роботы сами делили депозит между собой

avatar
KNK, 
вопрос — откуда котировки брать в реальном времени

Вот этот вопрос очень интересный. Не поделитесь, как Вы его решили для себя?
avatar
sortarray sortarray, TSLab. Да, пока так))
avatar
KNK, «Как сделать так чтобы роботы сами делили депозит между собой»

6) Как сделать, что бы роботы сами выводили прибыль и сами её тратили.

7) Как сделать, что бы роботы тратили деньги на что-то полезное, а не только на шлюх и блэкджек.
avatar
старенько но смешно
avatar
ovazhnev, не всем понятный юмор :-))))

Чего не будешь знать изучив книгу?

Много чего.
Всё зависит от тебя и только от тебя — возможности применения языка не имеют границ.  Также, как изучив алфавит и грамматику можно написать роман «Война и мир», а можно остаться на уровне трех букв на заборе. При одном и том же наборе усвоенных правил и элементов.

avatar
Да, молодец. Еще 10 дней и можно смело программить )
,
avatar
выложил бы че в открытый доступ из написанного, так подсказали бы что там не так
avatar
После изучения языка, надо будет учится писать на нем «стихи»… т.е. учить математику, паттерны архитектуры… а вообще, похвально… тяга к знаниям штука полезная.
avatar
Алексей Иванов, да какие уж паттерны, до этого не дойдет ). Уверен что даже до «фабрики» дело не дойдет ). Подергает методы и на этом закончит.
avatar
evgen000, а что такое фабрика?
Тимофей Мартынов, это один из паттернов проектирования. Не знание паттернов это одна из причин почему ничерта не понимаешь что происходит когда смотришь чужой код.
avatar

Тимофей, как программист-программисту, отвечу:
"•не знаю как работать с параллельными вычислительными потоками" Предположим есть цикл
int[] result = new int[10];
for(int i = 0; i < 10; i++) {
  // Тут какая то мощная вычислительная задача, где i допустим день за который надо посчитать данные
  result[i] = i * i * i;
}
Если запускать именно так, то сначала посчитается за 1 день, потом за второй и т.д., программа по сути займет одно ядро процессора. Современные бытовые процессоры типа Core i7 обычно 4 ядра (8 потоков), т.е. выполняя этот цикл процессор будет загружен на 1/8 (12.5%). Остальные 87.5% мощности процессора — отдыхают. Как перделаем: добавим:
using System.Threading.Tasks; и перепишем цикл вот так:
Parallel.For(0, 10, i => {  
  // Тут какая то мощная вычислительная задача, где i допустим день за который надо посчитать данные
  result[i] = i * i * i;
});
теперь загрузка процессора возрастет многократно! Нюанс: создавать большие объекты внутри Parallel.For крайне не рекомендуется (загрузка процессора упадет).

"•не знаю как работать с графическим интерфейсом вообще" Если это картинка, то надо копать в PictureBox (она показывает Bitmap). А рисовать надо на Bitmap, вот типа так:

Bitmap bmp = new Bitmap(100, 100, PixelFormat.Format24bppRgb); using (Graphics g = bmp.GetGraphics()) {   g.Clear(Color.White);   g.Draw… и рисуешь   g.Flush(); } this.pictureBox.Image = bmp; вот и все.

"•не совсем понимаю как работать с большими объемами данных и как их лучше хранить " Большие массивы лучше хранить в 64-битном приложении (x64), т.к. 32-битные (x86) быстро дадут OutOfMemoryException. Лучше всего работать с массивами фиксированного размера int[] bigdata = new int[100*1000*1000]; лучше работать с целочисленными данными (тип byte, short, int, long), они всегда быстрее считались чем вещественные (float, double). Строки хранить крайне не рекомендуется (долго работает). Ну и правильно выбирать размер элемента, byte=1байт, short=2байта,int=4байта,long=8 байт Т.е. 100млн элементов типа int займет в памяти 400МБ, а лимит в .Net составляет 2ГБ на объект (т.е. 500млн элементов типа int, или 250млн типа long). Но тут еще одно ограничение — массив индексируется переменной типа int, а значит всего в массиве может быть только 2^32-1 элементов. Хотя можно создать 10массивов каждый по 2ГБ, и тогда приложение съест 20ГБ памяти :) Проверено. Если хочется очень большой массив, то гуглить в gcAllowVeryLargeObjects  (надо в app.config добавить), тогда можно создать массив который займет 16ГБ памяти, вот так: long[] l1 = new long[2000 * 1000 * 1000]; Есть нюанс: в C# работает с массивами не так быстро, особенно плохо работает с массивами byte[] (тормозит!), такие массивы лучше обрабатывать в DLL (пишутся на C++) и вызывать из C#. Вот написание и вызов внешних DLL наверное выпало из вашего плана ;)

"•интерфейс WPF" не нужен, если вы не коммерческий разработчик, а для себя. Windows Forms вас удовлетворит на 100% в ближайшие 5 лет.

LINQ, PLINQ — тоже не особо нужны, хватит и простых конструкций

Счастливый Конец, по-моему, то что Вы рассказали про параллелизм — это вещь самооочевидная, и понятная даже человеку, который от прогрммирования далек. Ваш пример — это чистый рафинад, который не даст представления о параллелизме и конкурентности на проф уровне, например, о проблемах работы с шаред-ресурсами. Гораздо полезней рассматривать параллелизм с точки зрения реализации, а не с точки зрения того, «как это работает на уровне интерфейса пользователя". Скажем, полезно будет реализовать потоки в однопоточной среде, при помощи сопрограмм.

Вообще, по теме конкурентных вычислений рекомендую почитать о модели Акторов Карла Хьюитта
avatar
Счастливый Конец, спасибо. Блин, только я половину не понял)))
Счастливый Конец, слуш, то есть получается что для того чтобы запустить много hft роботов на многих инструментах потребуется число ядер процессора равное NxM где N — число алгоритмов, а M — число инструментов?
Тимофей Мартынов, хм, тут не вижу такой зависимости. HFT не подразумевает 100% загрузку ядер. Если алгоритм хороший, то и ядра он грузит редко. Короче, когда будет написан робот с NxM, то проще проверить сколько ему реально нужно ядер. А так, да, если алгоритм грузит ядро на 100%, то потребуется NxM ядер, но это очень плохой случай.
Тимофей Мартынов
кругом кодеры 
в написать пост  и в форме ответа не хватает кнопки «код» с подсветкой синтаксиса
неудобно листинги читать

вот пример
www.mql5.com/ru/forum/72893/page3
можно сравнить с подсветкой кода и без
Здравствуй Коля, ты про смартлаб?

На смартлаб чот не особо кто-то код выкладывает
насколько я помню
Тимофей Мартынов, да



это же АД в jpeg код выкладывать

Блог им. karat39
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
smart-lab.ru/blog/310446.php
smart-lab.ru/blog/310562.php


Тоже сейчас изучаю coding, начал по сути с 0, но выбрал Swift.

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

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

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

Кстати, наверное, самым большим личном прорывом для меня была самосочиненная/придуманная прога-application на iphon'е, т.к. проблема включала в себя и интерфейс, и массивы, и функционал, и If statement'ы, и делегирование итд + алгоритм. кот. нужно было самому придумать итд. Хочу сейчас сделать видео, кстати, выложить на youtbub'e для таких же чайников как я и рассказать о своем опыте, что изучал, что смотрел, какие подводные камни встретились на пути, хорошее и плохое о различных видео в паблике итд итп, ну и чтобы комментили и какую-либо информацию для себя по предмету получить в дальнейшем.

avatar
shpazhist, интересно!
shpazhist, я даже не знаю что такое Swift
Тимофей Мартынов, Новый эппловский язык взамен ObjectiveC. Что-то вроде микса C++ и Python. Синтакс Swift'а намного проще всевозможных C языков (наподобии Python), но и есть возможность черпать ресурс ObjectiveC, кот. уже 20+ лет.

developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson2.html#//apple_ref/doc/uid/TP40015214-CH5-SW1

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

Ну и app'ы на iphon'е можно легко стругать если есть навыки Swift.
 
avatar

Сейчас дочитаю книгу и вернусь к тестовому коннектору смарткома. Что мне осталось изучить?

  • события, делегаты, обратный вызов
  • убийство объектов
  • LINQ
Это самое вкусное)
  • визуализация, PictureBox, UserControl, Graphics, Bitmap.
Это нахер не нужно. Лучше WPF осваивай.
avatar
maxgold, а почему самое вкусное?

и как осваивать WPF?

в чем разница?
Тимофей Мартынов, если вы не хотите быть проф. программистом, а хотите по минимуму иметь возможность написать свое приложение, то WPF вам никогда не нужен будет. Все что вам нужно чтобы показать на экране картинку это положить на форму PictureBox, кнопку и по нажатию кнопки сгенерировать Bitmap и показать его в PictureBox. Это все Windows Forms.
Тимофей Мартынов, потому что эти темы с наскока вряд ли удастся освоить, в основном на практике. И такие вещи как LINQ, события, лямбда выражения используются везде в реальных приложениях. WPF я бы по курсам советовал осваивать и, опять же, много практики.
avatar
Тимофей Мартынов Блин, вдохновил твой пост. Ты проделал нереальную работу. Жаль только, что практического применения этому будет очень мало. понимать многопоточность полезно, но это реально на столько широкая тема.

Быстрая обработка больших данных? Быстро это массив на 1000 элементов агрегировать за 2 секунды пятью разными функциями?
Или в 3х летней тиков находить уровни за секунду? ;)

Неоднократно написали другие username-ы, начинай писать что-то практическое. Я когда в первый день только задумался о трейдинге как таковом, сразу же начал зачитываться литературой. Изучал матчасть. Наслушался кучу всего о психологии. И о том как люди «заигрываются». Через полгода такой умный был, сам от себя охеревал. А когда решил первый раз заявку на реале отправлял, чуть не обделался был весьма озадачен. Я к чему веду. Я программист уже почти десять лет. В практике возникают такие проблемы и задачи, которые тебя заставляют порой изменить в корне взгляд на само программирование. Так, что берись за практику. 

ЗЫ Чуть не забыл. В список того что изучить, добавь юнит тесты. Вот они тебе реально деньги и нервы в будущем сэкономят.

ЗЗЫ Сегодня чето опять слушал Бодо Шефера. Вот он там все твердит «Вам нужен наставник». Так вот это не только Шефер такое твердит ;)
avatar

теги блога Тимофей Мартынов

....все тэги



UPDONW
Новый дизайн