Автор Тема: Программирование [+16]  (Прочитано 2948 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« : 05/10/2012, 12:38:11 »
Привет!
Я тут новенький, но надеюсь вы меня примите в свой круг.
Сразу извиняюсь за "позерство", ограничение по возрасту это на всякий случай, а то всякое происходит.
Так вот, предлагаю в этой теме обсуждать программирование на разных популярных и не популярных языках. Писать свои впечатления о языках, ну или что то подобное.
Выкладывать свои какие то небольшие программки, которые вы написали на каком-либо языке.

 Ну раз я создал тему, то и написать что то нужно. Так вот:
После того, как я дико хвастался перед преподом по информатике тем, что наконец то закончил изучать С++, мне в ответ сказали что-то типа, - "Если ты действительно хочешь быть офигенным программистом - ты должен знать ассемблер, как таблицу умножения". Честно скажу, я слегка смутился, потому что я даже не знал о существовании такого языка, я погуглил, конечно толкового мануала (документации) не нашел, но нашел что-то типа небольшого урока, где рассматривался простейший код - всем известный "Hello World".
Так вот там было строк 50 точно, хотя это совершенно обычная программка. Если кто тут есть, кто интересуется данным языком, выложите мануал, подходящий новичку  :red:.

Надеюсь тема вас заинтересовала  ;).
Конечно, на ассемблере можно создать все, что угодно, но жизнь и так коротка.

Оффлайн Judge

  • Активный участник
  • ***
  • Сообщений: 200
  • Пол: Мужской
  • Любитель 6-03 и 6-22
Программирование [+16]
« Ответ #1 : 05/10/2012, 14:07:28 »
Приветствую на форуме!

Сразу скажу, что мануала по ассемблеру у меня, к сожалению, нет, так что, в принципе, дальше можно не читать  :D

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

Кстати, стоп! Я сказал, что ассемблер у него был свой. И это важный момент: у каждого семейства процессоров, вообще говоря, свой ассемблер. И это его жирный минус и то, от чего, среди прочего, избавляют языки более высокого уровня: написал какую-нибудь фичу для TMS320T5410 на его ассемблере - в железяке, работающей на TMS320T6472 ты его уже не используешь, придется переписывать всё заново. Это первое.

Второе - вытекает из первого. Знание ассемблера предполагает знание архитектуры конкретного процессора. Схема процессора у меня всё время лежала на столе. Какова разрядность того или иного регистра, как размечено адресное пространство памяти, как те или иные команды проходят по конвейеру, начинается буфер с чётного или нечётного адреса - без знания этих хитростей не будет работать ничего. Совершенно обычна ситуация, когда после добавления или удаления пустой инструкции NOP программа перестаёт или, наоборот, начинает работать. И каждый раз у этого есть инженерное объяснение, хотя с точки зрения логики это бред и чудеса.

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

Всё, что я сказал, написано вот здесь. А желающие поорать "как тебе не стыдно ссылаться на Лурк!!!11" просто пусть пойдут и убьются.

Вывод: общее представление об ассемблере иметь полезно, но серьёзно им заниматься имеет смысл только в том случае, если тебе это действительно нужно для решения конкретных задач (а не просто потому что это круто). В противном случае лучше потратить своё время на что-нибудь более полезное.
Mit freundlichen Grüßen, der Richter.

Оффлайн Wanderer

  • Ветеран Форума
  • *****
  • Сообщений: 1689
  • Пол: Мужской
Программирование [+16]
« Ответ #2 : 05/10/2012, 15:26:37 »
Hero
Если хочешь понять, что такое ассемблер, то есть одна неплохая книжка. Называется "Ассемблер. Самоучитель", автор - Александр Крупник. Она достаточно тоненькая (чуть больше 200-х страниц) и в ней довольно простым языком описаны с самых азов основы программирования на ассемблере для семейства процессоров x86. Даются там базовые вещи, никаких особенностей архитектур конкретных моделей нет. Объяснено, как работать с двоичной и шестнадцатиричной системами счисления, что такое регистры, стек, косвенная адресация и прочие интересные вещи. Даже если ты не будешь в дальнейшем программировать на ассемблере, но если интересуешься этим, то для общего развития почитать полезно.
«Из всех возможных решений выбирай самое доброе»
А. и Б. Стругацкие, «Волны гасят ветер»

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« Ответ #3 : 05/10/2012, 17:57:07 »
Judge Спасибо, вот серьезно, я думал, что хоть что-то знаю о этом языке до того, как ты написал, очень много узнал, ну то есть, все что ты написал я не знал, кроме того, что это очень низкоуровневое программирование.
 
Wanderer Спасибо за книгу, это тоже мне помогло, или еще поможет.

И вот вопрос: Стоит ли тогда мне начинать учить ассемблер, или лучше программировать все таки на C++, а ассемблер знать только самые базовые "фичи"?
Конечно, на ассемблере можно создать все, что угодно, но жизнь и так коротка.

Оффлайн Judge

  • Активный участник
  • ***
  • Сообщений: 200
  • Пол: Мужской
  • Любитель 6-03 и 6-22
Программирование [+16]
« Ответ #4 : 05/10/2012, 18:54:13 »
Wanderer
О, Крупник! Уважаю этого чувака! Его книжку "Изучаем С++" я заюзал так, что у неё начала отваливаться обложка  :) Правда, там информация была настолько высококонцентрированная, что иногда 10 страниц приходилось читать неделю. Зато, действительно, только "идея и суть" языка, без всякой экзотики и выкрутасов.

Других трудов этого автора я, правда, не читал.

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

А качать книжки лучше всего с сайта www.twirpx.com. Это мой любимый сайт с книжками: никакой рекламы, никаких "Подождите 60 секунд, а пока посмотрите порноролики" и - главное! - всё разложено по полочкам и систематизировано. Там за этим очень следят.
Mit freundlichen Grüßen, der Richter.

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« Ответ #5 : 05/10/2012, 19:26:30 »
Judge писать прикладные программы, возможно для кого это покажется слишком легко, или что то типа того, но это действительно то, что мне нужно. Вообще, писать какие то небольшие приложения или утилиты - это так здорово, это правда очень круто и захватывающе, то есть, когда ты уже написал несколько хороших приложений, или программ - ты можешь уже основать какую-нибудь небольшую компанию, или создать сайт со своими продуктами. То, есть представь, не ты ищешь сайт с программами, а ищут твой сайт, что бы найти твою программу. Это действительно круто.
 
Еще на счет ассемблера: думаю, этот язык нужен для таких компаний как Apple, то есть, они написали код, только для своего железа и не на каком ПК не будет работать, если я конечно правильно понял тебя.

Вот сайт, на котором я искал документацию.
Вот сайт, на котором я искал книги.

Еще я очень долго занимался веб-разработкой, то есть самое основное, даже не успел до PHP дойти, но html,css,js я все таки успел освоить, собираюсь добить уже "интернет-разработку" и начать учить PHP и Perl, но что-то я слышал на счет Perl, что он каким то боком связан с CGI. Надеюсь ничего с терминами не напутал.

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

Оффлайн Judge

  • Активный участник
  • ***
  • Сообщений: 200
  • Пол: Мужской
  • Любитель 6-03 и 6-22
Программирование [+16]
« Ответ #6 : 05/10/2012, 19:42:20 »
Hero
Цитировать
Еще на счет ассемблера: думаю, этот язык нужен для таких компаний как Apple, то есть, они написали код, только для своего железа и не на каком ПК не будет работать, если я конечно правильно понял тебя.

Не совсем. Дело в том, что если ты собираешься писать программы для обычных компьютеров, то там везде процессоры x86 и, соответственно, один язык ассемблера (именно так: строго говоря, ассемблер - это программа, которая переводит программу на языке ассемблера в машинные коды, хотя на эту терминологическую тонкость все обычно забивают). Яблочники тоже уже несколько лет как перешли с PowerPC на x86. Да и для других процессоров есть компиляторы с языков C и C++.

А с Эппл вообще всё хитро: они даже свой язык придумали (objective-c, если мне не изменяет память), на котором и рекомендуют вести разработку программ, хотя можно писать и на обычном C++.

Для чего нужен ассемблер, я уже писал. Что касается моего списка, то мой вариант - предпоследний: я инженер по эксплуатации магистральной сети связи, а свои скромные познания в программировании на работе применяю по своей доброй воле и без гарантий  :)
Mit freundlichen Grüßen, der Richter.

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« Ответ #7 : 05/10/2012, 19:56:49 »
Judge А интересуешься веб-разработкой? Совсем недавно вышел html5 и его вдруг признали языком программирования, я даже как то смутился.
 :confused:  :confused:  :confused:
Конечно, на ассемблере можно создать все, что угодно, но жизнь и так коротка.

Оффлайн Judge

  • Активный участник
  • ***
  • Сообщений: 200
  • Пол: Мужской
  • Любитель 6-03 и 6-22
Программирование [+16]
« Ответ #8 : 05/10/2012, 20:00:23 »
Hero
Нет, не интересуюсь.

Кстати, для личных вопросов здесь принято использовать личные сообщения. А то придут модераторы и настучат всем по мозгам  :)
Mit freundlichen Grüßen, der Richter.

Оффлайн Dagdamor

  • Ветеран Форума
  • *****
  • Сообщений: 1431
  • Пол: Мужской
Программирование [+16]
« Ответ #9 : 07/10/2012, 14:27:26 »
Hero
Цитировать
После того, как я дико хвастался перед преподом по информатике тем, что наконец то закончил изучать С++, мне в ответ сказали что-то типа, - "Если ты действительно хочешь быть офигенным программистом - ты должен знать ассемблер, как таблицу умножения".

Над тобой просто посмеялись. Эта фраза эквивалентна следующей: не быть тебе финансистом, пока не научишься работать с арифмометром, разбирать и собирать его с завязанными глазами. ;) На самом деле этот инструмент давно устарел, им не пользуются практически нигде. Примерно то же самое и с ассемблером. Не нужно уметь мыслить нативным кодом, чтобы быть программистом. Нужно другое: уметь проектировать архитектуру приложения, уметь правильно выбирать язык, уметь писать устойчивые и надежные алгоритмы, уметь тестировать написанное.

Если тебе хочется попробовать что-то новое, я бы советовал изучить Java. Никогда не будет лишним по жизни. А Асм, как уже сказал Джадж, пригодится максимум для написания ассемблерных вставок. Это сейчас редкость.

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« Ответ #10 : 09/10/2012, 05:10:50 »
Dagdamor Посмеялись звучит как то уж слишком грубо. Может это был сарказм, или просто он пошутил. Но я хотя бы разобрался для чего, как и все такое - это плюс.
Но все таки надо решить C++ или Java.

Конечно, на ассемблере можно создать все, что угодно, но жизнь и так коротка.

Оффлайн user100

  • Новичок
  • *
  • Сообщений: 2
Программирование [+16]
« Ответ #11 : 09/10/2012, 22:33:08 »
Во времена диалапного интернета я сам искал вопрос на ответ "какой язык учить?" и все как один писали "настоящий программист должен знать ассемблер!" Ну что поделать. Нет, конечно в этом были плюсы - все необходимые инструменты весили 20Мб против огромных Дельфей и прочего... А вот с документацией были проблемы, точнее с моим английским. Чтобы прочитать какую-нибудь дурацкую HowTO уходило несколько часов со словарем, а потом ничего не работало из-за какой-нибудь ерунды. Если честно, я рад, что это дело быстро бросил, после того как понял, что чтобы нарисовать дурацкую форму с дурацким ползунком надо 3 дня ассемблера или 10 мин MSAccess и его макросов.

А что дальше? Случайно наткнулся на Java и втянулся. Приходилось, кончено, в школе учить Паскаль, делать упражнения на VBA, а в институте заставляли пол года C++, а некоторым преподам нравился только C#. А когда заинтересовался веб столкнулся с PHP и JavaScript. Для учебы еще нужен был Матлаб и Python. Но я оставался верен Java и писал на ней все работы и курсачи. (Так как моя специальность не программист, то очень часто приходится слышать от преподов-дедков: "Java, а что это? А можно вот этот же, но на чем-нибудь другом."

А вот теперь пришло время отдавать долги и использовать полученные знания в реальном проекте. И вся эта гора кода написана многими поколениями работников на смеси VBA и ABAP, с легкими вставками SQL и *.bat файлов. И надо продолжать их путь: дописывать и исправлять. Что-то мне говорит, что в жизни таким образом обычно и бывает. Так что хорошие программисты-прикладники, это не знание языков, а, скорее, образ мышления.

Советовать бы я стал не учить что-то конкретное, а просто поставить себе какую-нибудь цель и ее выполнить наиболее рациональным образом. Хотя знание VBA и, например, Java (как легкий язык, который поможет потом втянуться в Си-подобное) знать стоит. Именно эти языки являются, на мой взгляд, полезными представителями 2-х разных императивных "наречий".

Конечно, все что я написал потеряет смысл если есть желание развиваться именно в системной программировании.

Оффлайн Hero

  • Новичок
  • *
  • Сообщений: 24
  • Пол: Мужской
  • "Я не люблю анчоусы" - Марк Цукерберг
Программирование [+16]
« Ответ #12 : 15/10/2012, 12:04:44 »
Решил не создавать для этого отдельную тему, ибо не засорять форум, надеюсь на скорые отклики. И так, мой вопрос состоит в том, есть ли на данный момент хороший мануал по html 5, не обязательно даже русский, хотя, если есть русский то очень хорошо  ;)  , но если русского нет, хотя бы англоязычный мануал.
Конечно, на ассемблере можно создать все, что угодно, но жизнь и так коротка.