Первые главы в Thinking in C++
Первые главы в Thinking in C++
Ой, какая интересная тема. А я только заметил.
Если нет вообще никаких знаний (ну бывает такое - из школы не донесли), то надо начинать с алгоритмов и структурных схем. У меня дома валяется книжка - уч. для вузов про программированию (общее). Я бы с такой лит-ры начал (вечером посмотрю как называется). Как по мне, так достаточно разобраться с типами данных и что с ними можно делать, дальше дело техники.
Выше писал, трехтомник Кнута.
https://ru.wikipedia.org/wiki/%D0%98...BD%D0%B8%D1%8F
WBR, Michael.
Цель расчетов - понимание, а не числа (с) Хемминг.
Ммм, а чем Дельфи от Билдера отличается, кроме как синтаксисом?
Я когда-то перешел с ТР на ТС, там конечно разхница была большая, а когда переходил с Дельфи на Билдер. так практически этого и и не заметил.
А меня например Си бесит, например тем, что можно написать:
Код:u32 a; u16 b; b = a;
вот "галимый паскаль" такого бы не пропустил, сразу ошибку бы выдал.
Или вот пример, который один из моих сотворил. Ну он начинаюший, ему еще можно, но все-таки.
Он написал сначала:
Все было классно, пока он не решил что переменной Flow не надо быть u64 а достаточно u32.Код:static u32 Div; static u64 Flow; void DecCalc(void){ u64 tmp; ... if(Scale==MAX_SCALE) tmp=(U64)((Flow* 0x00000000FFFFFFFF)/1000); else tmp=(U64)((Flow* 0x00000000FFFFFFFF)/10); Decrement=(u32)(tmp/Div);
Ну и поменял. Естественно, все работать перестало.
(да, я в курсе что надо поменять в этой функции, чтобы оно и с 32-х битным Flow все работало, так и сделали. но потом.)
"Замполит, чайку?"(с)"Охота за Красным Октябрем".
"Да мне-то что, меняйтесь!"(с)анек.
<-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.
что писать? тут у меня разные цели.
Во-первых, хотел бы писать простейшие программы для настройки и управления windows. например, сделать простое окошко в котором бы выводились значения ключей из реестра. например, что бы быстро на клиентской машине узнать IP и тут же параметры политик входа в домен. Ну в общем цели у меня простые.
Во-вторых хочу научится писать драйвера, точнее даже не писать а грамотно уметь портировать их. тут сейчас такие дела что в дистрибе Линух исходников драйверов есть больше чем под винду.
Ну заодно еще ядро Линукс по-изучать с нуля. создавать тонкие клиенты на разных машинах.
Это достаточно сложно. Но охота пуще неволи. (С) Обычно в теперешних реалиях на ассемблере пишут небольшие фрагменты кода, которые должны исполняться предельно быстро, и встраивают эти фрагменты во что-то, написанное на языке высокого уровня, например, на С++. Или используют ассемблер для программирования систем с небольшим ОЗУ, например, микроконтроллеров. Но имейте в виду, что ассемблер аппаратно-ориентирован, поэтому нужно сразу понимать, какую платформу планируется использовать.
Для этого си избыточен. Достаточно скриптовых (интерпретируемых) языков, на них получится раз в дцать быстрей.
Год-другой придется на обучение потратить, это минимум. Если надо получить работоспособные и стабильные драйвера, а не поделки.
Для начала взять все книги Таненбаума и переписать наизусть, потом брать документацию под целевую платформу и ее переписать наизусть.
И до кучи, победить на конкурсе Чайковского, получить 6ой разряд токаря
Скорость зачастую решается грамотной оптимизацией на си, дальнейшая перепись на асме дает совсем низкий прирост. Обычно на асме пишут такое, от чего мозги у си взрываются и чего он совсем не может. Под 23 бит микроконтроллеры за последние 6 лет мне оно потребовалось только раз - финал бутлоадера, надо передать управление на пользовательское приложение и при этом переопределяется стек. Средствами голого си этого не сделать.
---------- Сообщение добавлено 16:37 ---------- Предыдущее сообщение было 16:10 ----------
Как выучить си за 21 день. Не совсем юмор.
WBR, Michael.
Цель расчетов - понимание, а не числа (с) Хемминг.
Написание драйверов для ОС, это, процентов на 70, если не больше, изучение документации ОС. Проблема языка программирования там на втором месте. Ну и если драйвер Линукс - то только C, если Windows, то C или C++. Никаких ассемблеров там, за очень редким исключением, не надо.
А вообще задача озвученная ТС практически не реальная, научится языку для достижения поставленных целей далеко не самое важное. Ну и портирование драйверов одной ОС на другую - это написание драйвера с нуля, по мотивам исходного.
Электроника наука слабоизученная (c)
Неизвестный специалист антенного хозяйства по поводу периодического пропадания сигнала в коллективной антенне
alexcryke, задачи ясны. Но не уверен, что стоит начинать с конца, лучше начать с азов.
Принцип всех языков похож,
изучить новый не сложно,
поэтому pascal мне кажется для начала хорош.
Согласен с картинкой приведенной чуть выше.
По порядку это -
начинать еще со школы,
потом профильный вуз,
общение с правильными людьми,
чтение правильных книжек,
а потом попадание в правильнуб контору.
И после годов этого всего можно заниматься самыми серьезными вещами.
У меня есть пара друзей программеров, прошедших этот путь.
Я говорю что нужно изучать по порядку а не в вуз поступать.
И в любом случае это нужно и полезно хоть с чего начинай.
Главное чтобы желание было. Иогда всего добьешься. ;)
Для простых виндовых приложений Delphi самое то наверное, это тот же pascal только с обьектами.
Поэтому pascal для начала в самый раз. Если идти по порядку. Хотя некоторые и с Си начинают.
А в линуксе копаться, там на Си, и драйвера и ядро.
Offтопик:
Недавно, на днях слыхали выложили наш линукс "Эльбрус". Он для наших процов и для не наших.
Мне кажется это очень интересным, попробовать и железо и ОС.
http://www.mcst.ru/programmnoe-obespechenie-elbrus
Последний раз редактировалось CAH91; 08.04.2019 в 17:41.
САНЯ, Пролетарии всех стран соединяйтесь!
Тут конечно можно поспорить, является ли __set_MSP не сишным кодом - с одной стороны нет, т.к. :Код:#define APP_START (0x8003000U) typedef void (*pFunction)(void); //------------------- pFunction Jump_To_Application; uint32_t JumpAddress; //----------------------------------------------------------------------------------- static void StartApplication(void){ JumpAddress = *(vu*) (APP_START + 4); Jump_To_Application = (pFunction) JumpAddress; __set_MSP(*(vu*) APP_START); // Initialize user application*s Stack Pointer Jump_To_Application(); }
с другой стороны, с точки зрения написания самой программы - это сишный макрос, причем библиотечный, а что там они в библиотеке написали, дело десятое.Код:__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) { register uint32_t __regMainStackPointer __ASM("msp"); __regMainStackPointer = topOfMainStack; }
"Замполит, чайку?"(с)"Охота за Красным Октябрем".
"Да мне-то что, меняйтесь!"(с)анек.
<-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.
вообще конечно тема драйверов - это отдельная тема обсуждения. мне почему-то подумалось, что может быть и не с самого нуля всё, вроде в интернете есть информация всякая, но опять же загвоздка в том, что много отсылов к исходникам на Си, а не понимая языка, там ловить и нечего.
Суть вот какая - старые винды не хотят работать на новом железе из-за отсутствия поддержки новой версии ACPI и моста PCI.... а новые версии драйверов из новых ОС не хотят дружить со старым ядром и HAL ядра. мне подумалось а ведь в новых дистрибах линукс же есть их исходники и для acpi и для pci и даже для usb3.0.... почему бы не портировать их под ядро ВинХП (Виста)?
Есть такой пакет Microsoft DDK (Driver Development Kit) для разработки драйверов, как я понял он может наверное проверять исходник на ошибки и компилить в машинный код адаптируя его под конкретное ядро ОС MS (?).
Возможно, но какие?
Научиться писать сложные *.БАТники тоже не плохо.
а еще я вот подумал, а нет ли таких программ в которых можно программы собирать из конструктора?
Был у нас разработчик, который с него начал изучение С++. В общем так делать не надо
Так тоже можно, но тогда для начала изучить работу процессора вроде i8086 или 80286, это даст понимание "изнанки" всего этого... Но я бы не советовал такой путь.
Кстати, для начала неплохо. Но есть опасность так на нём и застрять. Расслабляет
Неее, не надо мёртвых языков. Если для начала хочется лёгкой жизни - можно начать с C#.
Так у них там сейчас вроде только дельфи, то бишь паскаль...
Это говнокодеры за 40. А говнокодеры до 25 как-то получаются и без паскаля, так что проблема не в нём ;)
Во, кстати, в 2019 году можно начать с go.
Про алгоритмы - однозначно плюсую. Наговнокодить самому сортировку пузырьком, обход каких-нить графов и т. д. и т. п. Потом можно браться за реальную задачу.
Но это трудный этап, т. к. практической ценности эти программы не будут иметь.
О! Хорошая учебная задачка. Найдите опенсорсную програмку на с/с++ (раз уж вы этот язык учите), которая делает что-нибудь с реестром. Разберитесь, как она работает, переделайте под свои нужды. Stackoverflow вам в помощь.
Это через несколько лет, если не надоест. Увы...
А потом забыть этот язык как страшный сон... Для простых ГУЙ-приложений сейчас есть C# и QT. Delphi не нужен. Совсем.
Только если тащить какой-нить старый проект с сотнями мегабайт исходников...
Питон, powershell.
Лучше не надо. Там куча ограничений, на обход которых обидно тратить время...
Есть в той или иной степени - это прямой путь потратить время, наделать невнятных поделок, но так и не научиться программировать
∇·D = ρ
∇·B = 0
∇xE = – ∂B/∂t
∇xH = j + ∂D/∂t
© J. C. Maxwell, O. Heaviside
Во всём согласен с Meta|_, кроме Go.
---------- Сообщение добавлено 09.04.2019 в 00:03 ---------- Предыдущее сообщение было 08.04.2019 в 23:59 ----------
Про Джаву не упоминали ещё? Пригодится, чтобы на смартфончик мегакрутой софт писать. И продавать на гугл-сторе
---------- Сообщение добавлено 00:06 ---------- Предыдущее сообщение было 00:03 ----------
Да, проблема в пхп
Как выясняется из обсужения, уровень ТС в программировании нулевой. Но цели заявлены наполеоновские: ядро ОС, драйверы...
Лет тридцать назад действительно совет дать было бы нетрудно. Взять тот же qbasic, и вперед! Рисовать на экране, вначале простые фигуры, потом выводить графики функций, потом написать "змейку" или косилку. Это все весело и совсем не скучно.Помню, мы с другом всю ночь делали нарды, именно на qbasic*е, рассвет наступил неожиданно.
Только не надо вначале "осваивать ЯП теоретически", это будет напрасно потраченное время. Надо сразу, с первых строк получать результат. Честное слово, написать программу "угадай число" или "быки и коровы" (где не нужна графика, а только текст) намного полезнее изучения классов, наследования и полиморфизма. Там уже при обдумывании или усложнении алгоритма станет понятно, для чего нужны и переменные, и массивы, и функции, и циклы...
Сейчас таких языков, как qbasic, которые позволили бы в несколько строк вывести на экран, скажем, куб, я не знаю. Ни под Винды, ни под Линукс.
Имея в виду конечную цель, начинать надо с С. Не самый лучший выбор для
первого языка, но в общем-то, и не самый плохой. Главное, не зацикливаться на
нем, а после появления понимания, убежать во что-то более высокоуровневое (с
драйверами вряд ли выйдет).
Я сам рисую окошки, кнопочки и графику на TCL-TK.
Эта связка, по-моему, единственная в своем роде, действительно
позволяет в несколько строк получить на экране окошко с графикой. Но, к великому сожалению,
начинающему такое нельзя. Синтаксис у нее наркоманский.
А быстрые функции пишу к такому интерфейсу на С.
Здесь более опытные товарищи наверняка смогут посоветовать систему
программирования (как сейчас говорят, IDE) для С с графикой. Чтобы сразу
рисовать. Но просто - не будет. Компьютеры давно повернулись к пользователю жопой.
Но все равно, практика и только практика. А теория - параллельно. При
возникновении проблем, идей и т.д. все понятия жадно хватаются, тут же
применяются и усваиваются навсегда.
_________________
Евгений
Социальные закладки