О программировании, C*, linux, и не только об этом...

Форум для обсуждения любых тем
Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

О программировании, C*, linux, и не только об этом...

Сообщение Llama »

Прошу прощения, что несколько сумбуроно - много всяких мыслей на эту тему в голове накопилось...

0) В последнее время (раньше просто не сталкивалс) я часто встречаюсь с высказываними некоторых товарищей являющихся жертвами или создателяси определенной мифологии. Я попытаюсь эти мифы несколько систематизировать и рассеять.

1) Для того, чтобы знать linux нужно знать C
Для понимания принципов работу операцинной системы (пофиг какой) в том виде, в котором это нужно подавляющему большинству пользователей и не-C програмистов, знать C не надо Достаточно читать документаци по это конкретной системе и весма желательно что-то общее на это тему - книг хватает - например Олифер "Операционные системы" или Танненбаум с таким же кажется названием. Применительно к linux, рекомендуется любая толковая книга по Unix. Книги, которая бы описывала общие принципы функционирования (процессы, потоки, коцепция файловой системы, и т.п. ) *nix (в том числе и самого linux) на примере linux я не видел. Я видел только всячиские руководства сисадмина, зачастую заточеные под дистрибутив. Для желающих разобраться на общеобразовательно уровне (не для написания модулей сдра) существует гугл, где можно найти русскоязычные описания некотрых частей ядра - например VFS, sheduler, virtual memory. Также рекомендуется читать серую мягкую книгу Linux TCP/IP (название точно не помню) - она поможет осазнать принцимы работы linux в сетях TCP/IP. Ессно, вещи типа BGP/OSPF и т.п. там не описаны - для ознакомления с ними рекомендуется Олифер "Компьютерные сети" - вполне хороший учебник

2) C* - универсальный язык программировани, программы написаные на нем работают быстрее всего (не считая ассемблер), он широко распространен, другие языки похожи на него и вообще его знать надо полюбому, если хочешь программировать
Да C* универсален - но ассемблер универсальнее и быстрее. В современных условиях железо дешевеет значительно быстрее мозгов (даже с учетом индусов). Ключевыми моментами в значительной части становятся скорость создания продукта, простота его поддержки (возможно сторонними разработчиками), стоимось его использования (лицензии на ОС, БД, компоненты сторнних разработчиков - например, можно написать продукт, который будет маленьким и простым, но бля своей работы ему потребуется MS Office) Вообще, на сегодняшний день главным показателем становится не те деньги, которые будут заплачены разработчику разово, а TCO. Тем не менне, для ряда задач C* оказывается не оптимальным - например слабать средней размерности e-shop на java, perl, python или php будет быстрее, чем на C*. С развитием сетей и распространением архитектуры клиент-сервер, особенно web-based решение ниша C* будет сокращаться - а простых и "некрасивых " языков типа python, ruby, perl или того же Visual Basic будет расти. Поэтому стоит подумать о том, как бы не оказаться зажатым в специфичной нише.


3) Надо стремиться изучить язык в совершенстве, а то работы не найдешь.
Эффективный код - вещь хорошая, но...
Стоит помнить, что каждый человек может совершать ошибки, а исправлять их будете не всегда вы. Можно написать "крутой" код, о котором профи скажут "О!", но поддерживать проще код написаный без лишних наворотов и с хорошими коментариями. Вменяемый коментарий важнее короткого "крутого" кода.
Изучить синтаксис и приемы работы с высокоуровневыми языками можно достаточно быстро, важнее иметь представление о технологиях, иначе мы часто получаем на выходе БГУИР или БГУ людей, которые могут писать на C*/Delphi вроде бы как и все, но в тоже врем и ничего - сведения о проектировании программ часто проходят сквозь уши навылет, кодингу уделяется больше внимания. А уж чем отличается XP от RUP, где какие приимущества, элементырные представления о том, как стоит и как не стоит общаться с заказчиком - этому практически не уделяют внимания! Конечно, простому программеру в большой команде не дадут напрямую общаться с заказчиком, но повлиять на выбор приемов совместной работы он вполне в состоянии, если захочет.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

В общем ты прав и отрицать это сложно. Но хотелось бы просто высказать свое мнение по поводу некоторых положений.

1) Это действительно так. И это мы видим на твоем примере (на сколько я знаю, ты не пишешь С). Кому как не тебе об этом говорить...

2) Абсолютно верно. Тут особенно вспоминается leikind, который говорил о ПРАВИЛЬНОМ выборе инструмента. И он прав. Но и у C и даже у языка ассемблера всегда будет своя ниша, в которой они практически незаменяемы. Практически, потому что можно написать операционную систему на Паскале, компилятор - на Бейсике, а архиватор на Perl'е. Но разумность такого решения у меня лично вызывает сомнения. С этим спорить нельзя. А если хотите, я готов, так как ниша, занимаемая этими языками, мне лично наиболее интересна.

3) Мое мнение: "крутой" код - это не код, который компактен за счет максимального использования возможностей синтаксиса языка. Вспоминается пример про if/then/else и тернарный оператор ?/: в C. В этом плане я полностью с тобой согласен. Лучше пускай код будет хорошо читаться, занимая при этом в 2-3 раза больше строк. Но крутой код - это код, использующий эффективные алгоритмы и эффективные структуры данных для данной задачи. Вот смотря на такой код, профи скажет "ООО!!!".

А по поводу многих выпускников. Вопросам проектирования, а тем более общению с заказчиком, уделяется малое внимание. Это чистая правда. Наверное кодингу уделяется больше. Но больше - не значит достаточно. Цитата из книги "Языки программирования. Разработка и реализация" Пратта и Зелковица:
К сожалению, в силу ряда объективных причин уровень подготовки специалистов в области информационных технологий в нашей стране резко упал ... (вырезано) ... В сегодняшних университетах студентам чаще преподают навыки программирования на конкретных языках программирования (то есть их синтаксис), а общие вопросы семантики языков программирования и проблемы их разработки и реализации остаются в стороне. Появилось целое поколение молодых программистов, не имеющих представления ни о математических моделях, лежащих в основании языков программирования, ни о методах и способах их реализации.
То же самое касается и построения эффективных алгоритмов.
Многие скажут: "А нахера мне знать о разработке языков программирования!!!". Вообще на эту тему можно закатить спор на несколько страниц. Но я просто привел цитату людей, чьи слова помогают показать мне свое мнение. Зная общие принципы построения компиляторов, можно писать намного более эффективный код на любом языке (С, Pascal, Python, Ruby, Lisp, да на чем угодно).

Это все было мое личное мнение. Извините, если оно не совпадает с вашим. Как есть...
а по ночам, девушка, я программы пишу ...

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Слово "крутой" не зря взято в кавычки. См. в гугле исходники deccs - если я не ошибаюсь 526 символов на perl - неявные переменные и преобразования используются по полнной программе - но попробуте это понять. Хотелось бы заметить, что данный трэд ни в коем случае не замышлялся как наезд на C - к вечеру оформлю в тект еще пару мыслей.
Опыт растет прямо пропорционально выведенному из строя оборудованию

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

вообще нужно стремиться понять Идеологию языка при изучении ... навыки понимания мелких деталей придут с опытом... можно на С++ писать код в стиле Паскаль и С - ну так от этого его использование не будет полноценнным... хороший язык позволяет опытному разработчику "думать" в концепциях языка при проектировании и разработке ... надеюсь что не так сумбурно и мысль понятна
...
ну так а чем собственно оператор ? : для простых случаев хуже if? как раз он очень к месту и удобен...
...
нда - насчет книг о строении ОС , могу порекомендовать - "Операционные Системы" В. Столлингс... в дополнении к общей теории рассматриваются примеры реализации некоторых концепций для Linux в том числе.
+ еще если кого интересует почему С++ именно такой какой он есть и , в общем, как он дошел до такой жизни - "Дизайн и эволюция С++" Б. Страуструп

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

[to Llama]

Ты так и не оформил в текст пару мыслей ... :)
а по ночам, девушка, я программы пишу ...

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

[to dimm_coder]
вообще нужно стремиться понять Идеологию языка при его изучении ... навыки понимания мелких деталей придут с опытом... можно на C++ писать код в стиле Паскаль и C - ну так от этого его использование не будет полноценным... хороший язык позволяет опытному разработчику "думать" в концепциях языка при проектировании и разработке ... надеюсь что не так сумбурно и мысль понятна
Идеологию действительно нужно понять. Но по этому поводу у меня еще несколко мыслей. Универсальных идеологий нет. Часто люди, которым по нраву какая либо идеология, применяют ее везде, даже когда она не очень подходит. Например, очень часто C++ применяют там, где он не нужен, где с лихвой хватило бы и С.
А вообще, любой язык позволяет опытному разработчику "думать" в концепциях языка. Вопрос в том, насколько хороши эти концепции вообще и хороши ли они для какой-либо конкретной задачи.
ну так а чем собственно оператор ? : для простых случаев хуже if? как раз он очень к месту и удобен...
я писал:
Мое мнение: "крутой" код - это не код, который компактен за счет максимального использования возможностей синтаксиса языка. Вспоминается пример про if/then/else и тернарный оператор ?/: в C.
Это по поводу Guest'a в топике "О программировании ;- )) - см. сабж" посылал некоторых людей (привет, leikind) учиться программировать на основании того что они использовали if/then/else там, где можно было исползовать тернарный оператор ?/: . Причем Guest не принимал во внимание учебную цель этого примера. Так что это ни как не гон на такую возможность реализации ветвления.
а по ночам, девушка, я программы пишу ...

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Еще мысль:
Многие программисты считают себя самыми умными
По крайней мере, некоторое пренебрежение к тем людям, которые работают руками у некоторых из нас есть. И редко кто вспомнит, что у самих-то руки растут оттудаже, откуда и ноги, а у некоторых оотудаже растет еще и голова с ушами.

Нередко встречаются люди (скоро уже придут и сядут по своим офисам), которые служат придатком к машине - нажимают кнопочки согласно шаблону и инструкции без понимания структуры и целей проекта. Но это еще полбеды... Без дураков нет бывает ни программирования, ни бизнеса, ни жизни вообще. Хуже то, что некоторые общеозвестные разработчики development enviroments выпускают, а производители конечного ПО использую соответсвующим образом, такие среды, в которых добиваться понимания сути проекта становится непросто, даже если читать документацию. Менеджмент ставит людей (не факт, конечно, что способных) в позу придатка к машине и системе и гордо называет это современным бизнесом. Я не хочу быть аморфным куском дерьма, из которого по необходимости будут делать винтики, затычки или тампаксы.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Гость

Сообщение Гость »

Универсальных идеологий нет. Часто люди, которым по нраву какая либо идеология, применяют ее везде, даже когда она не очень подходит. Например, очень часто C++ применяют там, где он не нужен, где с лихвой хватило бы и С.
А вообще, любой язык позволяет опытному разработчику "думать" в концепциях языка. Вопрос в том, насколько хороши эти концепции вообще и хороши ли они для какой-либо конкретной задачи.
Конечно. я о том и говорю, что хороший язык программирования - это в первую очередь не набор операторов (т.е. определенный синтаксис), а - набор концепций (идеология, можно сказать), которую он предлагает программисту для решения задач. Есть узкоспециализированные языки, необходимые для решения задач некоторого направления (например Prolog, LISP, VHDL, etc) , а есть языки более общего назначения (С++).
Следует принять во внимание, что на разработку определенного продукта выделяется определенное время, деньги, т.е. ресурсы - и это необходимо также учитывать при выборе средства программирования. Например, GUI программу для работы с БД, где в принципе не так критичны производительность, можно писать и на VB - во всех планах, скорее всего, с точки зрения менеджмента будет менее ресурсоемким.
Главное, как бы это не было трудно, но не нужно быть фанатиком некоторого одного языка или средства программирования, особенно для хорошего руководителя проекта или менеджера.

Насчет, "крутого" кода ( скорее вычурного ) -
что делает след код:
a += b;
b = a - b;
a -= b;
ну тут, да - могу сказать, в большинстве случаев можно написать и попроще и не уступающий по производительности (ну иногда при опр стечении можно и это применить)... ну сколько секунд кто потратил на разбор - что это такое ;)

dimm_coder
Интересующийся
Сообщения: 65
Зарегистрирован: 19 авг 2003, 10:56
Откуда: Anwerpen, Belgium / Belarus
Контактная информация:

Сообщение dimm_coder »

ну вот - снова :( Что-то с авторегистрацией при заходе на форум или что - но я снова послал от - ГОСТЬ.
Ну да ладно:

2 Llama:

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

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

Аватара пользователя
satanic_mechanic
Интересующийся
Сообщения: 56
Зарегистрирован: 18 июл 2003, 01:36
Контактная информация:

Сообщение satanic_mechanic »

Насчет, "крутого" кода ( скорее вычурного ) -
что делает след код:
a += b;
b = a - b;
a -= b;
ну тут, да - могу сказать, в большинстве случаев можно написать и попроще и не уступающий по производительности (ну иногда при опр стечении можно и это применить)... ну сколько секунд кто потратил на разбор - что это такое ;)
Ну это довольно просто. Задача уровня городской олимпиады. Реализация обмена значений переменных без использования дополнительной памяти. Также можно с помощью исключающего или (XOR):
a ^= b;
b = a ^ b;
a ^= b;
а по ночам, девушка, я программы пишу ...

Аватара пользователя
Jek
Неотъемлемая часть форума
Сообщения: 425
Зарегистрирован: 25 авг 2002, 08:50
Откуда: Minsk
Контактная информация:

Сообщение Jek »

Какой там городской... Школьной. Старо как мир. Приколы бывают, если меняешь местами элементы массива, не проверив при этом, не указывают ли индексы на одну и ту же ячейку :)
"Но в декабре я по ошибке позвонил вместо
модема на винчестер." (Linus Torvalds, "Just for fun")

Ответить