Подскажите начинающему программеру

Модератор: Модераторы разделов

Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):По-моему, в большинстве случаев достаточно: для низкоуровневых задач - C, для высокоуровневых (в т.ч. гуя) - скриптовых языков (я лично предпочитаю Перл).

Действительно, в ряде случаев для низкоуровневых задач достаточно С (или даже ассемблера под конкретный процессор), а для многих высокоуровневых задач вполне можно обойтись скриптовыми языками, скажем, Perl или Python. Однако это возможно далеко не всегда. С++ как раз тем и хорош, что, (при правильном использовании) обеспечивая быстродействие, сравнимое с быстродействием С, он предоставляет удобные инструменты для реализации самых высокоуровневых задач.

(deadsuslik) писал(а):Мне кажется, что популяризация ООП сказывается на качестве софта очень пагубно. Как известно, система тем лучше спроектирована, чем она проще. Когда не можешь хорошо спроектировать архитектуру, без ООП вообще не получится написать серьезный проект - запутаешься. А с ООП кое-как получится. Вот и получается, что занимаются вовсю инкапсуляцией, наследованием и полиморфизмом, вместо того чтобы думать, как можно упростить (улучшить) архитектуру системы.

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

Что же касается простоты, то объектно-ориентированная парадигма создавалась именно с целью упростить программирование. Архитектура системы действительно должна быть простой, в этом с вами, уверен, согласятся все опытные программисты. Однако понятие "простая архитектура" весьма относительно (я оцениваю простоту по одним критериям, а другой программист - по другим). Каковы критерии простоты на ваш взгляд, уважаемый deadsuslik? И чего, по-вашему, не должно быть в простой системе?
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

deninok писал(а):
05.04.2008 18:07
Что же касается простоты, то объектно-ориентированная парадигма создавалась именно с целью упростить программирование. Архитектура системы действительно должна быть простой, в этом с вами, уверен, согласятся все опытные программисты. Однако понятие "простая архитектура" весьма относительно (я оцениваю простоту по одним критериям, а другой программист - по другим). Каковы критерии простоты на ваш взгляд, уважаемый deadsuslik? И чего, по-вашему, не должно быть в простой системе?


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

Хорошая цитата (http://s01.de/~gottox/index.cgi/blog):

I know that most of you think that OOP is easier for big projects. But my question is, do we need big projects?
<...>
So why are the designs I'm working with that bad? - There's too much communication between the Objects. I have to search 6 different classes to find the piece of code I was searching for. This reduces working speed. Also it destucts one of the biggest advantages of OOP: reusability. The communication between the modules (classes) should be as minimal as possible.
Спасибо сказали:
bum
Сообщения: 138
ОС: Ubuntu 8.04

Re: Подскажите начинающему программеру

Сообщение bum »

deadsuslik писал(а):
06.04.2008 14:25
Нуууу, простота - очень интуитивное понятие. Как красота. Собственно, это почти одно и то же. Хорошая архитектура - это когда "ни прибавить, ни убавить" (по крайней мере она должна приближаться к этому). Прежде всего, в ней не должны быть реализованы функции, которые ей не нужны. Если какая-либо функция не есть часть природы системы, она должна реализовываться другой системой, взаимодействующей с данной. Еще не должно быть лишних слоев абстракций. Убивал бы за лишние слои абстракции.

Довольно спорная аргументация. Что вам вообще такого ООП сделало?

PS: абстракция - очень важная штука, напрасно вы к ней так вражески настроены.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Нуууу, простота - очень интуитивное понятие. Как красота. Собственно, это почти одно и то же.

Совершенно согласен с вами! В программировании красота и простота - понятия чрезвычайно близкие. Особенно в традиции Unix-программирования.

(deadsuslik) писал(а):Хорошая архитектура - это когда "ни прибавить, ни убавить" (по крайней мере она должна приближаться к этому). Прежде всего, в ней не должны быть реализованы функции, которые ей не нужны. Если какая-либо функция не есть часть природы системы, она должна реализовываться другой системой, взаимодействующей с данной. Еще не должно быть лишних слоев абстракций. Убивал бы за лишние слои абстракции.

Вот здесь давайте подробнее. Итак, ваш критерий простоты программной системы, по сути своей, один: отсутствие лишнего (будь то функции, или уровни абстракции). Прекрасно. Однако что в вашем понятии "лишнее"? Когда уровень абстракции нужно считать лишним? Когда без него (в принципе) можно обойтись?

(deadsuslik) писал(а):Хорошая цитата...
I know that most of you think that OOP is easier for big projects. But my question is, do we need big projects?

Хм... Не знаю, чьи это слова, но мысль, в них заложенная, в высшей степени странна. Он спрашивает, нужны ли нам большие системы? В этих словах я слышу намек на то, что большие системы нам не нужны... Интересно, а операционная система, управляющая компьютером этого человека, благодаря которой он смог написать эти слова и выложить их в Интернет - эта маленькая система? А, скажем, офисный пакет OpenOffice - это маленькая система? Или, может, GIMP - маленькая система? Да что там: Firefox, знаменитый ныне браузер - это маленькая система?

(deadsuslik) писал(а):So why are the designs I'm working with that bad? - There's too much communication between the Objects. I have to search 6 different classes to find the piece of code I was searching for. This reduces working speed. Also it destucts one of the biggest advantages of OOP: reusability. The communication between the modules (classes) should be as minimal as possible.

Да, здесь я полностью согласен с автором! Слишком большое число взаимосвязей между объектами (особенно если последних, скажем, несколько тысяч) - это кошмар. Автор справедливо замечает, что это наносит огромный вред повторному использованию такого кода. Полностью согласен! Однако он, автор этих слов, не обвиняет ОО-парадигму как таковую. Он лишь утверждает, что неправильное ее применение может свести все преимущества на нет.
Он говорит, что взаимосвязи нужно минимизировать, где только возможно! Абсолютно верно! Однако если вы, уважаемый deadsuslik, сколь-нибудь опытный программист, то вы не можете не знать, что уменьшение числа взаимосвязей между объектами (в абсолютно подавляющем большинстве случаев) достигается именно введением дополнительных уровней абстракции! Как же вы говорите, что "убивали бы за лишние слои абстракции"? Если же я неверно понял вашу мысль, тогда повторю вышеупомянутый вопрос: что есть лишний уровень абстракции?

(bum) писал(а):PS: абстракция - очень важная штука, напрасно вы к ней так вражески настроены.

Я думаю, что deadsuslik настроен враждебно не к самой ОО-парадигме, а к злоупотреблению ее средствами. Поправьте меня, deadsuslik, если я не прав...
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Подскажите начинающему программеру

Сообщение Portnov »

Eric S. Raymond в "The art of Unix programming" вводит понятие "компактности" системы. Систему называем компактной, если основные ее принципы (из которых всё остальное следует) легко укладываются в голове. При этом это может оказаться и довольно большая система (пример: unix как ос). И напротив, бывают небольшие, но совсемне компактные системы.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(Portnov) писал(а):Eric S. Raymond в "The art of Unix programming" вводит понятие "компактности" системы. Систему называем компактной, если основные ее принципы (из которых всё остальное следует) легко укладываются в голове. При этом это может оказаться и довольно большая система (пример: unix как ос). И напротив, бывают небольшие, но совсемне компактные системы.

Согласен! Кстати, упомянутая книга мне очень понравилась. Действительно, система должна (в идеале) легко укладываться в голове. И я убежден в том, что правильное применение ОО-подхода как раз и позволяет сделать систему именно такой. С другой стороны, НЕправильное его применение способно сделать систему ужасной.
Спасибо сказали:
Аватара пользователя
Dudraug
Сообщения: 313
ОС: Debian lenny/sid

Re: Подскажите начинающему программеру

Сообщение Dudraug »

Автору. Который считает что Си на даном этапе уже не нужен.

На си написаны такие крупные проекты как LINUX,GTK,GNOME,GIMP и это только то что приходит первое на ум.

Иногда выбирать надо не только исходя из задачи, а еще из того что тебе ближе по душе. Можно реализовать тот же гтк-гуй как на плюсах так и на си. Но кому то проще писать его на си, кому то на плсюсах (опустим при этом что родной язык для гтк это си)
P4-3.0, ASUS P5GD1, 1024MB OЗУ, GeForce 6600GT
Спасибо сказали:
Аватара пользователя
Subj
Сообщения: 151
Статус: Useful
ОС: win

Re: Подскажите начинающему программеру

Сообщение Subj »

Dudraug писал(а):
07.04.2008 17:28
(опустим при этом что родной язык для гтк это си)


Причем вся структура гтк есть псевдо ООП на костылях.
Как собсно любой другой "большой проект" на Си больше тяготит к созданию объектов и методов для них с последующим управлением онных
Building better software with Ada
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

bum писал(а):
06.04.2008 18:47
PS: абстракция - очень важная штука, напрасно вы к ней так вражески настроены.


Неправда. Совсем не вражески. Я говорил именно о лишних слоях абстракции.

Вертикальными связями так же нельзя злоупотреблять, как и горизонтальными.

(deninok) писал(а):Я думаю, что deadsuslik настроен враждебно не к самой ОО-парадигме, а к злоупотреблению ее средствами. Поправьте меня, deadsuslik, если я не прав...


Именно! Вы правы.

(deninok) писал(а):Цитата(deadsuslik)
Хорошая цитата...
I know that most of you think that OOP is easier for big projects. But my question is, do we need big projects?

Хм... Не знаю, чьи это слова, но мысль, в них заложенная, в высшей степени странна. Он спрашивает, нужны ли нам большие системы? В этих словах я слышу намек на то, что большие системы нам не нужны... Интересно, а операционная система, управляющая компьютером этого человека, благодаря которой он смог написать эти слова и выложить их в Интернет - эта маленькая система? А, скажем, офисный пакет OpenOffice - это маленькая система? Или, может, GIMP - маленькая система? Да что там: Firefox, знаменитый ныне браузер - это маленькая система?


Дело в том, что, скажем, Apache, gcc и vim оправдывают огромное количество кода, а KDE, OpenOffice и прочие фаерфоксы - не оправдывают. Серьезный проект != большой проект. "Программа должна делать одну вещь, но хорошо". Она должна быть большой только если эффективная реализация этой одной вещи достаточно сложна.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Дело в том, что, скажем, Apache, gcc и vim оправдывают огромное количество кода, а KDE, OpenOffice и прочие фаерфоксы - не оправдывают.

То есть вы OpenOffice и FireFox не используете?
Кстати, вы смотрели исходный код FireFox, чтобы делать такое смелое заявление?

(deadsuslik) писал(а):"Программа должна делать одну вещь, но хорошо"

Так FireFox и делает свою задачу хорошо!
Спасибо сказали:
Devilguard
Сообщения: 11
ОС: FreeBSD

Re: Подскажите начинающему программеру

Сообщение Devilguard »

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

"Программа должна делать одну вещь, но хорошо"

Вообще-то сейчас уже 2008 год, и прогресс не стоит на месте. Эта фраза уже устарела. Сейчас программы должны делать много вещей и при чем качественно.
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

Devilguard писал(а):
08.04.2008 14:52
Странно вы мыслите товарищи. Вы как думаете только о дестопах, а о коммерческих приложениях вы думали ?
Где одна система должна поддерживать уйма сетевых интерфейсов, осуществлять правильную обработку ошибок, иметь сложную разветленную логику, и быть надежной (работать месяцами-годами без перезагрузок ОС и самой программы).

"Программа должна делать одну вещь, но хорошо"

Вообще-то сейчас уже 2008 год, и прогресс не стоит на месте. Эта фраза уже устарела. Сейчас программы должны делать много вещей и при чем качественно.


Это вы называете прогрессом? По-моему, это шаг назад по сравнению с Unix-подходом. Дублирование - это нехорошо, согласны? Как избежать дублирования кода в разных программах? Можно выносить дублируемый код в либы. Это если данная функция действительно есть функция системы, но ее реализация стандартна. Часто гораздо красивее - распределить функции между различными системами, которые могут ничего друг о друге не знать и взаимодействуют друг с другом по стандартным протоколам. Такой подход наиболее: 1) гибок; 2) надежен.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Это вы называете прогрессом? По-моему, это шаг назад по сравнению с Unix-подходом.

Как вы считаете, deadsuslik, изменился ли Unix-подход со времен 1972 года? Остался ли мир разработки ПО таким же, каким был тогда?
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

deninok писал(а):
08.04.2008 23:21
Как вы считаете, deadsuslik, изменился ли Unix-подход со времен 1972 года? Остался ли мир разработки ПО таким же, каким был тогда?


Unix-подход - эо стремление реализовать сложные вещи как можно проще и красивее. Не надо лапшу вешать, что, мол, времена щас не те, системы гораздо больше и сложнее - почему они сложнее? Потому что мало кто стремится реализовать их проще и красивее.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Unix-подход - эо стремление реализовать сложные вещи как можно проще и красивее.

Уважаемый deadsuslik, будьте точны в своем ответе. Я не спрашивал вас о том, что такое Unix-подход. Я спросил, изменился ли этот подход за последние (почти уже) 40 лет?
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

deninok писал(а):
09.04.2008 10:24
(deadsuslik) писал(а):Unix-подход - эо стремление реализовать сложные вещи как можно проще и красивее.

Уважаемый deadsuslik, будьте точны в своем ответе. Я не спрашивал вас о том, что такое Unix-подход. Я спросил, изменился ли этот подход за последние (почти уже) 40 лет?


Чтобы я мог точно ответить, будьте точны в своем вопросе. Что вы понимаете под Unix-way? Я применяю этот термин очень обобщенно, именно как общий подход (а не конкретные примеры его применения на конкретных ист. этапах). Я как раз подчеркивал его отличие от ОО-подхода. Которое в том, что они вообще служат разным целям. ООП помогает сделать сложную систему понятнее. Unix-подход помогает сделать ее проще.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Что вы понимаете под Unix-way? Я применяю этот термин очень обобщенно, именно как общий подход (а не конкретные примеры его применения на конкретных ист. этапах). Я как раз подчеркивал его отличие от ОО-подхода. Которое в том, что они вообще служат разным целям. ООП помогает сделать сложную систему понятнее. Unix-подход помогает сделать ее проще.

Ну что ж, давайте порассуждаем. Из ваших слов я увидел, что вы противопоставляете Unix-философию объектно-ориентированной парадигме. Признаюсь, очень удивлен. Вы сравниваете теплое с мягким. Unix-философия - это гораздо более обширное понятие, чем ООП. Ибо ООП - это лишь одна из парадигм разработки, которых существует множество (я навскидку знаю пять), а Unix-философия - это фундаментальная система восприятия разработки программного обеспечения. ОО-парадигма (так или иначе) привязана к конкретному языку программирования (в контексте предоставляемых им ОО-средств), в то время как Unix-философия разработки, строго говоря, не привязана ни к языку программирования, ни к технологии, ни даже к операционной системе (!). Ибо я, программируя под Windows, вполне могу следовать Unix-философии (по сути своей) также, как если бы я программировал под Linux или FreeBSD.
Многие говорят, что Unix исторически связана с языком С, и это действительно так. Однако я могу следовать Unix-философии, используя даже shell, являющийся скриптовым языком сверхвысокого уровня.
Я являюсь приверженцем философии Unix, при этом используя в своей работе С++ и ООП...
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

(deninok) писал(а):Из ваших слов я увидел, что вы противопоставляете Unix-философию объектно-ориентированной парадигме.

Ну здрасте. Вот что я написал:
они вообще служат разным целям


(deninok) писал(а):ОО-парадигма (так или иначе) привязана к конкретному языку программирования (в контексте предоставляемых им ОО-средств)

Не-а. Не обязательно.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):
(deninok) писал(а):ОО-парадигма (так или иначе) привязана к конкретному языку программирования (в контексте предоставляемых им ОО-средств)

Не-а. Не обязательно.

Поясните, пожалуйста.
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

deninok писал(а):
11.04.2008 10:15
(deadsuslik) писал(а):
(deninok) писал(а):ОО-парадигма (так или иначе) привязана к конкретному языку программирования (в контексте предоставляемых им ОО-средств)

Не-а. Не обязательно.

Поясните, пожалуйста.

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

Кстати, сегодня Международный день крабовых палочек. Всех с праздником!
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):Можно реализовывать объектный подход и без языковых средств, специально для этого предназначенных.

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

(deadsuslik) писал(а):И наоборот, их может быть много всяких разных, как в C++, а вот именно того, что нужно, может не оказаться...

... и это справедливо для любого языка программирования! Ни один язык никогда не будет предоставлять встроенные средства для прямой поддержки всего того, что нужно каждому отдельному программисту.

(deadsuslik) писал(а):... и придется его реализовывать самому

... что крайне неразумно и расточительно (хотя бы по временным затратам), ибо гораздо умнее использовать для этого готовые библиотеки.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

По-моему, тема уже себя исчерпала... Или нужно в отдельное обсуждение переносить, а то оффтоп идет...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Подскажите начинающему программеру

Сообщение diesel »

deninok писал(а):
15.04.2008 10:57
По-моему, тема уже себя исчерпала... Или нужно в отдельное обсуждение переносить, а то оффтоп идет...

у мну такое ощущение что тут надо тему просто переименовать :) потому что собсно по теме в этой теме пару постов всего сказано :)
Спасибо сказали:
Sfunx
Сообщения: 47

Re: Подскажите начинающему программеру

Сообщение Sfunx »

Парадигма и язык - никак не связанные вещи.
Можно реализовать процедурное программирование на С++ и можно - объектноориентированное на С.

Скажу больше - я в своё время реализовал объектно-ориентироованные концепции даже на ассемблере i196. И жив :)

С является подмножеством С++ (с некоторыми ньюансами). Потому (имхо, и только имхо) - лучше освоить С, потом уж ++ (объекты).

Поскольку автор планировал программировать какието датчики температуры от далласа - то для этого ничего кроме С не надо. Объектная концепция для программирования ком-порта нужна как телеге запаска...

В общем моя точка зрения - это С, потом С++. По принципу - сначала простое, потом сложное.

Иначе может получиться выпускник нашего политеха, который (при специальности - программирование) знает как рисовать объекты в визула-васике, но ни в зуб ногой - что такое указатель или адрес памяти. Таких надо отправлять в биореактор вместе с составителями их программы обучения.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(Sfunx) писал(а):Парадигма и язык - никак не связанные вещи.
Можно реализовать процедурное программирование на С++ и можно - объектноориентированное на С.

Согласен.

(Sfunx) писал(а):С является подмножеством С++ (с некоторыми ньюансами). Потому (имхо, и только имхо) - лучше освоить С, потом уж ++ (объекты).

Хм... Конечно, понятие "нюансы" можно истолковать по-разному, но, на мой взгляд, вы поскромничали. Этих нюансов достаточно много...

(Sfunx) писал(а):В общем моя точка зрения - это С, потом С++. По принципу - сначала простое, потом сложное.
Иначе может получиться выпускник нашего политеха, который (при специальности - программирование) знает как рисовать объекты в визула-васике, но ни в зуб ногой - что такое указатель или адрес памяти. Таких надо отправлять в биореактор вместе с составителями их программы обучения.

А разве я не могу, взявшись сразу за изучение С++, понять сущность указателя?
Вы правы, многие программисты, берущиеся сразу за изучение С++, на самом деле изучают какую-нибудь известную IDE, а не сам язык. Это плохо, потому что у таковых действительно нет понимания языка, нет соответствующего образа мыслей...
Спасибо сказали:
deadsuslik
Сообщения: 15
ОС: Slackware Linux

Re: Подскажите начинающему программеру

Сообщение deadsuslik »

deninok, вы опять меня не поняли. Я имел ввиду, что на C как раз-таки можно реализовывать ООП просто и естественно. C - далеко не ассемблер, поскольку C позволяет нормально структурировать код.

Не любой цикл можно впихнуть в for, иногда приходится использовать while.При всей гибкости сишного for'а по сравнению, скажем, с паскалевским. А часто while лучше, даже если можно через for.

Что удобнее использовать - STL или GLib? По-моему, примерно одинаково.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: Подскажите начинающему программеру

Сообщение Portnov »

Ну да, а в качестве демонстрации можно показать Vala. Язык с синтаксисом от C# и объектной моделью от GObject, транслируется в C.

Тем не менее, более низкоуровневые языки (C, asm) следует изучать после более высокоуровневых (C++, Python, или вообще scheme). Ибо основы программирования (алгоритмы там и пр.) одинаковы везде, парадигму любую реализовать можно где угодно. А вот тонкости, присутствующие в низкоуровневых языках, преходящи - зависят от архитектуры аппаратного обеспечения и пр. Никуда не денешься - человек лучше усваивает то, что усваивает раньше. И хорошо бы, чтобы лучше были усвоены основы программирования, а не аппаратные (или другие) тонкости.

Кроме того, я продолжаю утверждать (как частный случай предыдущего абзаца), что изучать C++ после C - нельзя. Потому что человек, изучивший сначала C, а затем C++, станет на C++ писать как на C (благо внешне эти языки похожи). А такой код вызывает столько проблем, что выть хочется. Помните - "настоящий Fortran-программист может написать программу на Fortran на любом языке программирования!".
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение v04bvs »

Portnov писал(а):
16.04.2008 18:58
Кроме того, я продолжаю утверждать (как частный случай предыдущего абзаца), что изучать C++ после C - нельзя. Потому что человек, изучивший сначала C, а затем C++, станет на C++ писать как на C (благо внешне эти языки похожи).



По рукам получит пару раз и будет нормально писать :) Если конечно он С++ не в 35 лет выучил после 15 лет С.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Подскажите начинающему программеру

Сообщение deninok »

(deadsuslik) писал(а):deninok, вы опять меня не поняли. Я имел ввиду, что на C как раз-таки можно реализовывать ООП просто и естественно. C - далеко не ассемблер, поскольку C позволяет нормально структурировать код.

Предоставляемая возможность "нормально структурировать код" отнюдь не равноценна возможности "просто и естественно" реализовать ООП. В С нет встроенных средств поддержки ООП. Ибо если бы они были, то С считался бы объектно-ориентированным языком. Однако, насколько мне известно, он таковым не считается...


(Portnov) писал(а):Кроме того, я продолжаю утверждать (как частный случай предыдущего абзаца), что изучать C++ после C - нельзя. Потому что человек, изучивший сначала C, а затем C++, станет на C++ писать как на C (благо внешне эти языки похожи).

И еще раз соглашусь! Ну, не то чтобы "нельзя", просто очень не рекомендуется.

(deadsuslik) писал(а):Что удобнее использовать - STL или GLib? По-моему, примерно одинаково.

Скажите (только честно): у вас есть сколь-нибудь серьезный опыт использования STL и GLib, чтобы быть объективным в своем утверждении?..
Спасибо сказали:
Аватара пользователя
AMD
Сообщения: 478
Статус: Maestro
ОС: Linux Kubuntu 7.10

Re: Подскажите начинающему программеру

Сообщение AMD »

deninok писал(а):
16.04.2008 10:21
(Sfunx) писал(а):Парадигма и язык - никак не связанные вещи.
Можно реализовать процедурное программирование на С++ и можно - объектноориентированное на С.

Согласен.

(Sfunx) писал(а):С является подмножеством С++ (с некоторыми ньюансами). Потому (имхо, и только имхо) - лучше освоить С, потом уж ++ (объекты).

Хм... Конечно, понятие "нюансы" можно истолковать по-разному, но, на мой взгляд, вы поскромничали. Этих нюансов достаточно много...

(Sfunx) писал(а):В общем моя точка зрения - это С, потом С++. По принципу - сначала простое, потом сложное.
Иначе может получиться выпускник нашего политеха, который (при специальности - программирование) знает как рисовать объекты в визула-васике, но ни в зуб ногой - что такое указатель или адрес памяти. Таких надо отправлять в биореактор вместе с составителями их программы обучения.

А разве я не могу, взявшись сразу за изучение С++, понять сущность указателя?
Вы правы, многие программисты, берущиеся сразу за изучение С++, на самом деле изучают какую-нибудь известную IDE, а не сам язык. Это плохо, потому что у таковых действительно нет понимания языка, нет соответствующего образа мыслей...



Согласен на все 200% - сам попался на такую удочку (Удочка была Visual Basic под ms office потом под openofficce а потом с object pascalem под Lazarus) пока не спотыкнулся и осазнал что я ничего вообще еще не знаю а мои понятия не совсем правильные.

понятия не совсем правильные - имел ввиду в плане ООП. Спотыкнулся на создание компонентов для Лазаруса - они требуют хорошего понимания ООП.

Как же я решил проблему - искал разного рода литературу по ООП - скажем так изучения языка программирования какого нибудь С++, Java но с точки зрения ООП.

И вот нашел классные видео курсы по Java(Скажу честно - незнаю почему но я раньше не очень долюбливал Java - пока не начал изучать ее) и всего за три недели стал на истином пути.

Конечно компоненты не стал делать под Делфи и Лазарус посколько сконцентрировался на Java , но со временем и этим займусь.
Спасибо сказали: