Последний раз я писал про свои успехи в программировании
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# после прочтения этой книги?))
Блин, самое сложное во всех этих вещах — это как и в
трейдинге, засунуть куда подальше нетерпеливость и последовательно методично заниматься предметом. Ведь хочется всё и сразу и именно поэтому ничего не получается.
Хм. Зато чем дальше я двигаюсь (хоть и очень медленно), у меня прям уважение к самому себе растет, если я что-то начинаю понимать:))
Все виды циклов сводятся(являются частными случаями) к GOTO:)
Тут перечисление лишнее, если ты освоил *типы данных* ты освоил и массивы, так как массив — это тип данных.
Вообще конечно, понятие тип данных — это, по большому счету, баззворд, нет никаких типов данных, данные ничем не отличаются от программы, возможно это до тебя дойдет когда-нибудь:) Это во многом ключ к пониманию программирования вообще.
Хотя даже если смотреть на то что изучаешь системы немногим меньшче, чем никакой. В одну бочку запихал LINQ и BITmap. Пипец.
Бывают знатоки, которые простейшие задания типа сортировки массива сделать с трудом еле могут. ) Зато синтаксис знают.
Это возможно. Но зачем? Ничего путного с таким обучением написать невозможно. Быдлокодеров обученных по книгам и не представляющих как вообще все работает — пруд пруди. Написать робота или использовать API биржи — это же слезы будут. Только на уровне студенческой практики… А время? А другие, более интересные занятия?
Стать программистом — это не значит прочитать даже все книги, понять и порешать задачки. Программист — это человек который с детства этим занимается, те кто пишут реально классный код, строят торговые системы — они в 90-х писали програмульки под Спектрум на ассемблере и взламывали чужой код. Если в команде есть такой чел — проект будет легким а софт быстрым. Если этого не было с детства, если это не интересовало, то взять сесть и стать хоть что-то вменяемое писать — сродни чуду. В обратном случае мы видим делфи-подобные поделия типа МТ или Quik.
Из книг — почитайте Кнут Искусство Программирования. Это наверное лучая книга по этой теме. И да, программеру без разницы на каком языке писать. Дело нескольких дней переключится с C на фортран или на что другое. Главное понять принцип.
Допустим, ты решил заниматься танцами. Прочитал книгу, изучил теорию. Весь фундамент знаешь теоретически… Ну ты понял — вопрос яиц остаётся открытым =)
Главная мысль такой деятельности как трейдинг или программирование заключается в том, что лишь практическая задача на пути её ПРАКТИЧЕСКОГО решения возбуждает нужный ход мыслей, чтобы задавать правильные теоретические вопросы и правильно формировать свою базу знаний.
Никогда по книгам ты не станешь профи!
И у тебя снова взорвётся мозг. Прям один в один будет ситуация. И тогда ты поймёшь, что проблема не в книге =)
sortarray sortarray, да можно писать на чем угодно, смотря какие задачи стоят. Кому-то больше по душе тот же Node.js.
Суть моих комментов в том, что если и изучать C#, то лучше сразу фокусироваться на Web.
sortarray sortarray, скорость не важна? Вы в каком мире живете?
Если web приложение обслуживает полтора юзера, может и не важна. Сами почитайте что написали.
Тимофей Мартынов, ASP.NET MVC — технология для разработки web приложений, на базе шаблона Model-view-controller. Суть в том, что в приложении должно быть четкое разделение на:
1. Model — обрабатываемые данные, модели данных, база данных
2. View — web страницы, UI, куда выводится вся информация
3. Controller — логика web приложения.
что такое рефакторинг?
Тимофей Мартынов, рефакторинг, это реорганизация кода. Начиная от названия переменных, заканчивая какими-то конструктивными моментами (например некоторые учатки кода можно написать более проще, чем написано).
Reshaper помогает оптимизировать многие процессы связанные с рефакторингом. Можно погуглить.
Вот этот вопрос очень интересный. Не поделитесь, как Вы его решили для себя?
6) Как сделать, что бы роботы сами выводили прибыль и сами её тратили.
7) Как сделать, что бы роботы тратили деньги на что-то полезное, а не только на шлюх и блэкджек.
Чего не будешь знать изучив книгу?
Много чего.
Всё зависит от тебя и только от тебя — возможности применения языка не имеют границ. Также, как изучив алфавит и грамматику можно написать роман «Война и мир», а можно остаться на уровне трех букв на заборе. При одном и том же наборе усвоенных правил и элементов.
,
Тимофей, как программист-программисту, отвечу:
"•не знаю как работать с параллельными вычислительными потоками" Предположим есть цикл
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 — тоже не особо нужны, хватит и простых конструкций
Вообще, по теме конкурентных вычислений рекомендую почитать о модели Акторов Карла Хьюитта
кругом кодеры
в написать пост и в форме ответа не хватает кнопки «код» с подсветкой синтаксиса
неудобно листинги читать
вот пример
www.mql5.com/ru/forum/72893/page3
можно сравнить с подсветкой кода и без
На смартлаб чот не особо кто-то код выкладывает
насколько я помню
это же АД в jpeg код выкладывать
Блог им. karat39
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
smart-lab.ru/blog/310446.php
smart-lab.ru/blog/310562.php
Изначально также барахтался в теории языка, но впоследсвтии осознал, что только прикладная сфера даст понимание предмета, поэтому ушел в общем в просмотр всяких простейших прог итд на время, но тут потихоньку пазл начал складываться.
Соотвественно, вернулся в теорию, чтобы до конца разобраться в инструментах и начать писать что хотелось, но тут осенило оказывается(!) для решения практических задач нужно еще и конкретно так иметь базу в формальной логике, алгоритмах, матане, да и азах железа еще.
Ладно, пришлось окунуться в эту сферу, немного разобрался что к чему, научился структурировать проблемы и понял механизм нахождения путей решения задач.
Вновь возвращаюсь к синтаксису теперь. Тяжко, конечно, в первый раз. Но осознаю, что без как таковой практики в программировании абсолютно делать нечего.
Кстати, наверное, самым большим личном прорывом для меня была самосочиненная/придуманная прога-application на iphon'е, т.к. проблема включала в себя и интерфейс, и массивы, и функционал, и If statement'ы, и делегирование итд + алгоритм. кот. нужно было самому придумать итд. Хочу сейчас сделать видео, кстати, выложить на youtbub'e для таких же чайников как я и рассказать о своем опыте, что изучал, что смотрел, какие подводные камни встретились на пути, хорошее и плохое о различных видео в паблике итд итп, ну и чтобы комментили и какую-либо информацию для себя по предмету получить в дальнейшем.
developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson2.html#//apple_ref/doc/uid/TP40015214-CH5-SW1
Самый большой минус, что эппловские языки не созданы для работ с базами данных изначально, тем не менее, лично для меня была цель научиться хотя бы программировать базово для начала и по сути сейчас осознаю, что овладеть другими языками в дальнейшем не будет составлять такой сложности, т.к. язык и ООП, и functional.
Ну и app'ы на iphon'е можно легко стругать если есть навыки Swift.
и как осваивать WPF?
в чем разница?
Быстрая обработка больших данных? Быстро это массив на 1000 элементов агрегировать за 2 секунды пятью разными функциями?
Или в 3х летней тиков находить уровни за секунду? ;)
Неоднократно написали другие username-ы, начинай писать что-то практическое. Я когда в первый день только задумался о трейдинге как таковом, сразу же начал зачитываться литературой. Изучал матчасть. Наслушался кучу всего о психологии. И о том как люди «заигрываются». Через полгода такой умный был, сам от себя охеревал. А когда решил первый раз заявку на реале отправлял, чуть не обделался был весьма озадачен. Я к чему веду. Я программист уже почти десять лет. В практике возникают такие проблемы и задачи, которые тебя заставляют порой изменить в корне взгляд на само программирование. Так, что берись за практику.
ЗЫ Чуть не забыл. В список того что изучить, добавь юнит тесты. Вот они тебе реально деньги и нервы в будущем сэкономят.
ЗЗЫ Сегодня чето опять слушал Бодо Шефера. Вот он там все твердит «Вам нужен наставник». Так вот это не только Шефер такое твердит ;)