PDA

Просмотр полной версии : Языки - с чего начать новичку и почему


TRam_
17.12.2016, 15:00
Книжка мне понравилась и все тут.Переучиваться с Бейсика на остальные языки программирования тяжелее всего. Один из известных программистов когда-то писал "кто учился программировать на бейсике - тот потерян для программирования".

Это свойства, а не код. А мне нужен чистый код. Чтобы после каждого действия я мог видеть изменения в коде.Ну вот в VB такого просто нет. Есть библиотеки, в которых код, исполняющий создание и управление формой, уже создан, а тебе предоставляется возможность только настроить "параметры окна" и "функции, обрабатывающие такое-то и такое-то взаимодействие". И, как я понял, просмотреть именно на применение параметров тут нельзя (в отличии от многих других сред визуального программирования типа Делфи или VisualStudio), но меняет это не так много (так что если просто хочешь посмотреть на примеры, проще это сделать тут - https://ru.wikipedia.org/wiki/Visual_Basic). Код обработчиков тебе всё равно надо написать самому, он будет иметь не много общего по сравнению с "установкой начальных параметров". А учиться "как писать код" лучше всего именно на консольном приложении, без ООП.

VB от просто BASICA я так понимаю только визуализацией отличаетсянет. В простом бэйские нет объектов (https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D 0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1 %80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%8 0%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5), а VB они есть, и ими являются все элементы интерфейса...

сандро
17.12.2016, 18:24
1. Кто сказал, что мне понравится программирование? И из меня вообще получится хоть какой то программист. Это процесс долгий. Может помучаюсь с книжкой и брошу это занятие.
2. Я все понял, спасибо за подсказки.
3. Что такое объекты? Объясните простым языком человеку, который не знает что такое программирование?
4. Популярный тест "точка по кругу" или "таблицы шульте", можно сделать в VB без проблем.

TRam_
17.12.2016, 19:01
Что такое объекты? Объясните простым языком человеку, который не знает что такое программирование?Объекты (экземпляры классов) - элементы программы, которые могут проводить над собой некие заложенные в них действия согласно кода программы. Например, объектом является кнопка на форме, кнопке можно задать новую надпись или задать новые координаты, тем самым переместив её на экране.

Популярный тест "точка по кругу" или "таблицы шульте", можно сделать в VB без проблемЕсли сможешь найти элемент, который выглядит как квадрат и который можно вращать, а также разберёшься как подключить периодические изменения цвета к таймеру, то может быть и да. Но вот начинать надо не с этого. Для начала попробуй сделать хотя бы кнопку, которая бы двигала другие кнопки по экрану или меняла в них надписи (или цвет заливки).

сандро
17.12.2016, 20:11
Я та почитал что такое объектно-ориентированное программирование и ничего не понял. Как я вижу программирование? Разрабатываем алгоритм. Допустим, при нажатии на кнопку "p" (у каждой клавиши есть сэкн код или как там его) даем команду винде на воспроизведение какого-то звука с определенной громкостью, с определенной частотой, при нажатии на клавишу "+" частота звука допустим будет увеличиваться на 11025 ГЦ, при нажатии "-" частота будет падать на тоже значение, при нажатии на клавишу "0" звук прекратит проигрываться. Потом это хозяйство компилируется.
Открываем викимапию: Методы
Процедуры и функции, связанные с классом. Они определяют действия, которые можно выполнять над объектом такого типа, и которые сам объект может выполнять.

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование — порождение класса от двух или более классов-родителей. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс — это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

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

Инкапсуляция обеспечивается следующими средствами:

Или: Появление в ООП отдельного понятия класса закономерно вытекает из желания иметь множество объектов со сходным поведением. Класс в ООП — это в чистом виде абстрактный тип данных, создаваемый программистом. С этой точки зрения объекты являются значениями данного абстрактного типа, а определение класса задаёт внутреннюю структуру значений и набор операций, которые над этими значениями могут быть выполнены. Желательность иерархии классов (а значит, наследования) вытекает из требований к повторному использованию кода — если несколько классов имеют сходное поведение, нет смысла дублировать их описание, лучше выделить общую часть в общий родительский класс, а в описании самих этих классов оставить только различающиеся элементы.

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

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным — независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект. Данный подход реализован в языках программирования Smalltalk, Ruby, Objective-C, Python.

Однако общность механизма обмена сообщениями имеет и другую сторону — «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому во многих современных объектно-ориентированных языках программирования используется концепция «отправка сообщения как вызов метода» — объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. Однако, это приводит к тому, что сообщения уже не являются самостоятельными объектами, и, как следствие, не имеют атрибутов, что сужает возможности программирования. Некоторые языки используют гибридное представление, демонстрируя преимущества одновременно обоих подходов — например, CLOS, Python.

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

От таких слов хочется блевать.

Dublin
17.12.2016, 22:40
Вот хорошо написано про ООП
Часть 1 (https://habrahabr.ru/post/87119/)
Часть 2 (https://habrahabr.ru/post/87205/)

сандро
18.12.2016, 00:08
Это уже лучше. Я так понимаю в обычном программировании ("в блокноте") никаких классов и объектов нет?

TRam_
18.12.2016, 02:52
Я так понимаю в обычном программировании ("в блокноте") никаких классов и объектов нет?Собственно любое программирование - это и есть написание кода "в блокноте" (размещение элементов на форме и настройка их свойств - это не программирование, а вёрстка). Наличие или отсутствие поддержки объектов определяется только языком программирования, и они могут применяться в том числе для "простых" консольных приложений. Язык VisualBasic объекты поддерживает и широко использует.

сандро
18.12.2016, 12:05
Короче прежде чем программист начнет писать код в блокноте, он нарисует себе схемку? Что из чего следует?

alex8888
18.12.2016, 13:14
Недавно попался сайтик и книжки про язык "Дракон" (http://drakon.su/). Скорее всего это пока только описание работы с блок-схемами, но сами схемы действительно составлены очень грамотно и точно. Жалко, что нет пока "интертрепатора" для разработки пользовательских приложений, но вот в разработке алгоритма очень даже неплохо.

сандро
18.12.2016, 13:31
А что такое интерпретатор?

Garikk
18.12.2016, 13:44
Не путайте человека, ООП, схемки и т.п.

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

alex8888
18.12.2016, 13:59
Возьми ка ты для начала вот эту книженцию (https://yadi.sk/i/bWCF-hPs33vxUv). Для самого начала можно почитать. А там будет видно, интересно тебе это или нет.

SmaiL
18.12.2016, 14:43
А почему все против начала изучения программирования с С++? Ну серьезно..

GeneZone
18.12.2016, 15:09
А что такое интерпретатор?

Интерпретатор - это "переводчик" команд языка высоко уровня в машинный или объектный код. В отличие от компилятора, интерпретатор работает "на лету", т.е. каждая строка программы, при вводе(нажатии клавиши "ввод" или "Enter") или запуске программы командой RUN(если это, к примеру, BASIC), переводится в код и сразу же определяется наличие ошибок. Вернее, сначала проверяется наличие ошибок, потом перевод в код и выполнение.

сандро
18.12.2016, 15:39
А почему все против начала изучения программирования с С++? Ну серьезно..
Объясню почему я купил две книжки по VB и Phytonу, а не по С. Научиться программировать, я хотел давно. Но я не собираюсь принимать участие в олимпиадах по программированию, где надо разрабатывать математический алгоритм. Я хочу скажем для начала создать программку как у психолога -"тока по кругу". И мне нужна такая книга, где после описания листинга будет пример работы программы. Т.е. либо это чистый EXE файл, либо ЕХЕ + DLL. Либо только DLL. А таких книг я не встречал. Кто подскажет, ну что, куплю. Электронные книги в формате DJVU или PDF мне не интересны. Я человек старой советской закалки и мне нужна нормальная бумажная книга. Нужен упор на графику. Ну например игра "пасьянс".

Dublin
18.12.2016, 15:57
Я хочу скажем для начала создать программку как у психолога -"тока по кругу".

Для начала...хм, хозяин-барин, возражать не буду:drinks:
Вообще каждый адекватный учебник по программированию (для начинающих, в частности С++) начинается с консолей и известного "Hello World". Это база, как азбука для школьника. Начинается всё с переменных, типов данных, массивов, классов, функций и т.д. ООП это уже как книжка, которая состоит из букв (азбуки). Если напишите такую программу "для начала" - ну тут просто не будет слов. Кстати а в каком порядке ваша книжка излагает материал?

сандро
18.12.2016, 16:06
Я беру крайности, чего я хочу достичь в программировании, т.е конечная цель. А вот Hello Worlda то в книгах и нет. Только листинг все. Мне нужные живые примеры. Все книги что я встречал по С там только код и все. Моя книжка по VB 6 излагает материал так же от простого к сложному. Там только начало с Зенит-Чемпион! Но после каждого действия пример работы программы.

TRam_
18.12.2016, 16:17
сандро, даже для движения точки по кругу тебе нужно будет вспомнить школьную геометрию, и написать выражение, как из времени вычислить координату твоей точки. Если тебе нужно, чтоб "точкой" был прямоугольник, и он не "двигался плоскопараллельно", нужно написать выражение для его вращения. А потом окажется, что вращать виджеты, имеющиеся в VB, нельзя, и нужно самому написать алгоритм отрисовки "прямоугольника, повёрнутого на такой-то угол". Причём это надо будет написать не где-попало, а в специальном обработчике, который должна будет вызывать операционная система. В общем "подводных камней" тут для тебя будет видимо-невидимо.
Начни с простого. Если ООП, то со сдвигания элементов на форме по клику мыши. Если с классического программирования, то с "Hellow World" и простейшего калькулятора. Кстати ООП в школе, классе в 8 я тоже по изготовлению калькулятора изучал.

либо ЕХЕ + DLL. Либо только DLLТолько DLL ты не запустишь. DLL - это модуль, предназначенный для совместного одновременного использования несколькими программами, а без программ он ничего сделать не может.

Мне нужные живые примеры.Для "живых примеров" есть пошаговый режим выполнения программы.

Dublin
18.12.2016, 16:26
Вова так написал, что у меня чуть мозг не взорвался от таких вычислений:)
Сандро, название книги с автором напишите плз.

Garikk
18.12.2016, 16:54
А почему все против начала изучения программирования с С++? Ну серьезно..

С нуля сразу заморачиватся указателями, вычислением адресов, конструкторами/деструкторами...оно надо? сейчас модно на яве/питоне/js/C# писать, для чего такой оверхед то нужен?

Я вот с VB5 и Atari Basic начинал, сейчас на яве пишу. С/CPP особо не знаю и както ниразу мне особо нужны в нём не было

Yolkin
18.12.2016, 16:56
Сандро, название книги с автором напишите плз.
Давно хотел попросить.

Dublin
18.12.2016, 17:15
С нуля сразу заморачиватся указателями, вычислением адресов, конструкторами/деструкторами...оно надо? сейчас модно на яве/питоне/js/C# писать, для чего такой оверхед то нужен?
Я вот с VB5 и Atari Basic начинал, сейчас на яве пишу. С/CPP особо не знаю и както ниразу мне особо нужны в нём не было

Но есть и другая сторона медали: программист, знающий С++ без проблем перейдет на Яву со своими тонкостями. То есть будет знать 2 языка.

E.depo
18.12.2016, 17:20
Взорву тоже чуть-чуть мозг:)
Мне пришлось когда-то изучать Бейсик (я по мнению TRam-па - потерян:D) И мы вот изучали его со схем-диаграмм, ну там прямоугольники, ромбики и стрелочками - связи. Вот такой способ изучения был гораздо лучше, чем просто строчки в Блокноте (китайская грамота). По крайне мере это более наглядно было, сразу видно ход мысли программиста, что за чем следует, легко определяются ошибки логики, а главное - очень хорошо посмотреть и сравнить, если имеется альтернативный вариант решения задачи. Главный минус схемы - это лень чертить и потом, раньше строчки были короткие и помещались в формы, а сейчас... (точно китайская грамота).
Странно вот, почему-то забросили такой способ обучения, это было более понятно, особенно для развитии логики алгоритмического мышления.

csf
18.12.2016, 17:41
А почему все против начала изучения программирования с С++? Ну серьезно..А правда, что Вы знаете С++?
Я вот на нём пишу последние 50 лет... И не встречал человека, который мог бы сказать: "Я знаю С++".
Есть куча вопросов. Может поможете???!!!

TRam_
18.12.2016, 18:09
Есть куча вопросов. Может поможете???!!!Типа как сделать шаблонную оболочку для набора классов различного размера с набором виртуальных функций, переопределяющую внутренние функции классов для работы со структурами в оболочке через вызовы статических лямбда-выражений :) ?

"Я знаю С++"так стандартов С++ несколько, он многолик. Тут вопрос в другом - встречалась ли логика, которую невозможно было бы написать или ещё не встречалась.

Garikk
18.12.2016, 18:15
Но есть и другая сторона медали: программист, знающий С++ без проблем перейдет на Яву со своими тонкостями. То есть будет знать 2 языка.


Какая сторона? Я кроме явы знаю Python, C#, PHP, JS и блин :) 1С 7.7 и 8 :))

Си отличается от других языков только геморроем с менеджментом памяти, зачем оно в нынешних временах если не заморачиватся системным софтом, я не знаю

Dublin
18.12.2016, 18:31
Какая сторона? Я кроме явы знаю Python, C#, PHP, JS и блин :) 1С 7.7 и 8 :))

Я действительно рад, что вы полиглот языков, но я имел ввиду другое:) Ява то унаследовала в себе и С++ и С#, да и писалась она для привлечения внимания Сишников. Поэтому если человек знает С++, то ему не составит труда перейти на Яву

Garikk
18.12.2016, 19:05
Ява то унаследовала в себе и С++ и С#, да и писалась она для привлечения внимания Сишников. Поэтому если человек знает С++, то ему не составит труда перейти на Яву

Все языки похожи (кроме разве что ассемблера), достаточно хорошо выучить один, остальные различатся будут только синтаксисом "скобочек" и некоторыми конструкциями которые учатся за неделю.

Нужно както более на реальность окружающую смотреть, явисты и дотнетовцы сейчас более востребованы чем сишники

сандро
18.12.2016, 19:24
Давно хотел попросить.
Книга VB6 в задачах и примерах 2-е издание. Игорь Сафронов 2014 год. 400 с.

Yolkin
18.12.2016, 19:31
Я вот на нём пишу последние 50 лет...
Скока-скока??
;)

E.depo
18.12.2016, 19:47
Я и не знал, что есть С++ для деревянных счёт :D

GeneZone
18.12.2016, 19:50
Мне пришлось когда-то изучать Бейсик...

Мне тоже, когда-то(году, примерно в 1987), в школе пришлось изучать программирование на уроках информатики. Сначала был Б3-34:D, причём он был один, только у учителя, и мы проверяли свои поделки по очереди, иногда несколько занятий подряд. Потом мы изучали ФОРТРАН. Почему именно его, а не БЕЙСИК - непонятно до сих пор. Причём, в школе не было ни одной ЭВМ, реально - НИ ОДНОЙ. Мы составляли программы дома, на бумажке, потом, в определённые дни, ездили в политехнический институт, там были машины, не помню точно какие, но, кажется "ИСКРА", с монохромным дисплеем. Там наши программы проверяли. У меня где-то даже валялась распечатка моей программы.
Потом, после окончания школы и армейки, я уже сам, немного баловался со спекрумовским Бейсиком и Ассемблером Z80.

E.depo
18.12.2016, 20:02
GeneZone - ты бы ещё вспомнил, что вместо жёстких дисков, были обычные кассетные магнитофоны под компакт-кассеты, вначале на 60 минут, потом на 90.
Господи - мы объёмы информации мерили минутами :rofl:

GeneZone
18.12.2016, 20:47
Да, и Спекрумовская игрулина, объёмом под 64 кБ(!), загружалась минут 10 :), а то и больше...

SmaiL
18.12.2016, 21:42
А правда, что Вы знаете С++?
Я вот на нём пишу последние 50 лет... И не встречал человека, который мог бы сказать: "Я знаю С++".
Есть куча вопросов. Может поможете???!!!
Я не знаю С++, ну, на каком-то серьезном уровне.. Относительно простенькие программы с графиками делал, разнообразные математические алгоритмы программировал (всякие полиномы Лагранжа, методы Рунге-Кутты, в общем все численные методы пихал в программу), но не больше.
Так вот, к чему я. Я не прораммист и быть им не стремился, но волей-неволей два раза необходимо было его начинать изучать. Первый раз в школе, и это был Паскаль. Второй раз в старшей школе и в университете, и это уже был С, потом С++. Так вот, мне С++ понравился больше синтаксисом, как-то логичнее он мне выглядел что ли, не знаю.. Не скажу, что он чем-то кардинально от Паскаля отличается, все одно и то же.. А однажны сдавал одному... кхм.. преподавателю лабу на Джаве, то она думала, что это плюсы :D

csf
19.12.2016, 08:14
Скока-скока??
;)Я и не знал, что есть С++ для деревянных счёт :DЯ понимаю ваш сарказм, жаль что вы не поняли мой юмор (но это уже моя проблема:o). В конце 80-ых пришло оборудование, с которым были исходники программного обеспечения на Simula. А через год-два (могу запамятовать) пришли новые программы, но исходники были уже на С++. Вот с той поры я и считаю своё знакомство. Язык шикарный, на нём можно написать всё что хочешь (в отличии от любого другого языка программирования).
Поэтому (плюс/минус) 25 лет уже есть. Но до сей поры не могу сказать, что знаю С++. Только знаком...

сандро
19.12.2016, 08:22
Народ, посоветуйте книжку по C. Так чтобы были примеры работы программы в винде, т.к. после каждого листинга файл ехе.

Yolkin
19.12.2016, 08:51
Народ, посоветуйте книжку по C. Так чтобы были примеры работы программы в винде, т.к. после каждого листинга файл ехе.
Йессссс!!!!
Уговорили-таки!!!

Garikk
19.12.2016, 10:28
Сейчас отпугнёте в итоге

alex8888
19.12.2016, 11:39
Я ж ссылку давал - смотри по ней, книжка в самый раз, правда по шарпею (с#).

E.depo
19.12.2016, 11:54
сандро - давай зубри LUA, нам позарез нужен программист в Train Simulator:D

Арсений К.
20.12.2016, 16:08
Я вот тоже начал задумываться о том, чтобы учить какой-нибудь язык, но максимум, что делал — "Черепашка" в начальной школе. Собственно, какой язык посоветуете (сам думал насчет С++)?

Dublin
21.12.2016, 00:00
Раз пошла такая пьянка, и если выбирать между С++ и Java то лучше Java) Хоть программу на стиралку составить можно будет, а на плюс-плюсах фигульки