Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46

Конструирование программного обеспечения

13.05.2016, 04:53. Показов 2997. Ответов 39
Метки нет (Все метки)

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

P..S. В интернете поискал там пишут про совершенный код, чистый код, вот хотел узнать ваше мнение

Заранее спасибо!)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2016, 04:53
Ответы с готовыми решениями:

Архитектура программного обеспечения
С самого начала прошу прощения за вероятно глупый вопрос. Возможно невероятно глупый. :D Не могу найти какую-нибудь книгу по тому как...

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

инвестиционный проект программного обеспечения
Всем привет! Где можно найти расписанный инвестиционный проект какого нибудь программного обеспечения или базы данных т.е. сколько денег...

39
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.05.2016, 00:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shamil1 Посмотреть сообщение
Упрощённый пример:
с более низкого уровня всегда проще перейти на более высокий,
нежели наоборот.

идя от низкого к высокому - все узнаваемо.
есть понимание, что на самом деле под капотом у компиляторов.

тот, кто когда то начинал с ассемблера, не задавал тупых вопросов аля:
"я не понимаю указатели".

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

программист с++ без подготовки может бегло читать код c# или java.
для него нет ничего нового в этих языках.

программисту java при переходе на плюсы придется изучить множество нюансов:
"блин, столько головняков. вот у нас все было оч просто".

а всего то - ручная работа с памятью.

в случая с функциональными языками добавляется ещё одна преграда - парадигма.
парадигма языка оттачивает мышление.

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

Цитата Сообщение от Shamil1 Посмотреть сообщение
Если вы сначала выучили язык А и привыкли писать в стиле А (без goto), то при переходе на язык Б вы просто выучите, как записать цикл, используя if и goto.
Если вы сначала выучили язык Б и привыкли использовать goto, то при переходе на язык А вы будете продолжать использовать goto, так как он это позволяет. Вам потребуется изменить свои представления от том, как пишутся программы, чтобы отказаться от использования goto.
если вы знаете goto, то вы легко поймете, как устроенны и for и while
вам легко дадутся новые знания.
вам ничего не придется менять в своих представлениях.

но если вы ничего не знаете ни об указателях, ни об адресной арифметике,
то после какого нибудь питона, на сишечке вам придется начинать свой пусть с нуля.
с деццкого садика под названием "базовый курс".
1
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 01:11
Цитата Сообщение от hoggy Посмотреть сообщение
но если вы ничего не знаете ни об указателях, ни об адресной арифметике,
то после какого нибудь питона, на сишечке вам придется начинать свой пусть с нуля.
с деццкого садика под названием "базовый курс".
то есть, Вы утверждаете, что толкового человека, не знающего ни один язык программирования, проще научить си, чем такого же толкового человека, но знающего питон? знание питона мешает разобраться с указателями?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.05.2016, 01:18
Цитата Сообщение от Shamil1 Посмотреть сообщение
то есть, Вы утверждаете, что толкового человека, не знающего ни один язык программирования, проще научить си, чем такого же толкового человека, но знающего питон? знание питона мешает разобраться с указателями?
я утверждаю, что быстрее и проще сначала выучить си, а затем питон.
чем сначала питон, а затем си.

потому что человек при движении от низкого к высокому
не будет нести пенальти на переобучение.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 01:30
Цитата Сообщение от hoggy Посмотреть сообщение
идя от низкого к высокому - все узнаваемо.
есть понимание, что на самом деле под капотом у компиляторов.
тот, кто когда то начинал с ассемблера, не задавал тупых вопросов аля:
"я не понимаю указатели".
а вот идя от высокого к низкому приходится сталкиваться с новым для себя.
Уверен, что проще знающему только Хаскель объяснить, что такое указатели, чем знающему только ассемблер объяснить, что такое монады.

Добавлено через 7 минут
Цитата Сообщение от hoggy Посмотреть сообщение
потому что человек при движении от низкого к высокому
не будет нести пенальти на переобучение.
в чём переобучение при движении от низкого к высокому? что я должен забыть, для того, чтобы начать писать хорошие программы на Си?

Если взять хорошо написанную программу на Питоне и как можно ближе к тексту перевести её на Си, то получится хорошая программа на Си. Если взять хорошо написанную программу на Си и как можно ближе к тексту перевести её на Питон, то получится очень плохая программа на Питоне.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.05.2016, 01:36
Цитата Сообщение от Shamil1 Посмотреть сообщение
Уверен, что проще знающему только Хаскель объяснить, что такое указатели, чем знающему только ассемблер объяснить, что такое монады.
указатели - это из мира си, а не ассма.

не проще.
для этого нужно будет объяснить что такое "процедурная парадигма",
со всеми вытекающими.

сишнику так же придется менять мышление.

Добавлено через 2 минуты
Цитата Сообщение от Shamil1 Посмотреть сообщение
в чём переобучение при движении от низкого к высокому?
ни в чем.

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

Цитата Сообщение от Shamil1 Посмотреть сообщение
что я должен забыть, для того, чтобы начать писать хорошие программы на Си?
вам придется изучать си с нуля.
питон вам в этом не поможет.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 01:56
Цитата Сообщение от hoggy Посмотреть сообщение
вам придется изучать си с нуля.
питон вам в этом не поможет.
если не знать питон, то всё равно придётся изучать си с нуля

изучению си питон не поможет, зато поможет написанию программ на си
а вот написанию программ на питоне, привычка писать "в си стиле" только помешает... нужно будет её ломать

Цитата Сообщение от hoggy Посмотреть сообщение
переобучаться придется при движении от высокого к низкому.
в чём переобучение при движении от высокого к низкому? что я должен забыть?
(в предыдущем сообщении опечатался я в вопросе)
0
Эксперт .NET
 Аватар для Usaga
14138 / 9366 / 1350
Регистрация: 21.01.2016
Сообщений: 35,219
17.05.2016, 05:33
Shamil1, ТС прямо сказала в одном из своих постов, что хотел бы познакомиться с "подкапотной" работой компьютера. Так, что тут не то, что функциональные, тут и ОО-то языки ему не помогут. Лучше бы, конечно, ассемблер, но и Си сойдёт.

Монады это, конечно, хорошо, но без чёткого представления о таких вещах как стёк, куча, процессорный кеш и т.д, ТС нормальные программы писать не сможет. Я это не просто так говорю, я это каждый день на работе вижу, глядя в C#-код коллег в институте лабораторки по Си покупавших. Функциональный язык это либо следующий этап после ООП (в чём я не уверен), либо альтернативная ветка, но, в любом случае, это куча абстракций, которыми не получится нормально пользоваться, не имея представления об фундаментальных основах работы ПК.

И ещё, много ты программ видел написанных на Хаскел или F#? А на Си? И это не просто так. Я ввязался в спор потому, что считаю совет по изучению Хаскела, как первого языка программирования, вредным советом. Ты тоже в школе начинал знакомство с математикой с интегральных уравнений? Всё должно идти по возрастающей - от простого к сложному, от низкоуровневого к абстрактному, а не наоборот.

В конце-концов, ТС может остановиться на изучении низкоуровневых вопросов - узнать как работают DLL-ки, разобраться в понятиях адресных пространств процессов, прерывания, и т.д, да и забросить это дело. Станет "очень продвинутым пользователем" и на этом успокоится. А вот функциональные языки ему в этом вообще никак не помогут.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 10:09
Цитата Сообщение от Usaga Посмотреть сообщение
Монады это, конечно, хорошо, но без чёткого представления о таких вещах как стёк, куча, процессорный кеш и т.д, ТС нормальные программы писать не сможет. Я это не просто так говорю, я это каждый день на работе вижу, глядя в C#-код коллег в институте лабораторки по Си покупавших. Функциональный язык это либо следующий этап после ООП (в чём я не уверен), либо альтернативная ветка, но, в любом случае, это куча абстракций, которыми не получится нормально пользоваться, не имея представления об фундаментальных основах работы ПК.
Сколько нужно времени, чтобы получить представление о том, что такое стек, куча, процессорный кэш? Один день или, может быть, один час?
Сколько строк текста (без воды) можно написать про эти понятия без привязки к конкретному ЯП?

В любом серьёзном учебнике по любому языку объясняется, что такое стек и куча. Даже в книжках по VB 6.0 писали, как хранятся переменные в памяти (например, на сколько адрес массива отличается от адреса первого элемента).
Кликните здесь для просмотра всего текста

Вот, например, цитата из одного учебника по Haskell.
Ранее мы говорили, что полностью вычисленное значение – это дерево, в узлах которого находятся одни
лишь конструкторы. Процесс вычисления похож на очистку дерева выражения от синонимов. Мы начинаем с
самого верха и идём к листьям. Потом мы выяснили, что для предотвращения дублирования вычислений мы
подставляем в функции не сами значения, а ссылки на значения. Теперь нам понятно, что ссылки указывают
на объекты в куче. Ссылки – это атомарные переменные. Полностью вычисленное значение является сетью
(или графом) объектов кучи типа CON.
Поговорим о том сколько места в памяти занимает то или иное значение. Как мы говорили память ком-
пьютера состоит из ячеек, в которых хранятся значения. У каждой ячейки есть адрес. Ячейки памяти неде-
лимы, их также принято называть словами. Мы будем оценивать размер значения в словах.


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

Добавлено через 20 минут
Цитата Сообщение от Usaga Посмотреть сообщение
И ещё, много ты программ видел написанных на Хаскел или F#? А на Си? И это не просто так. Я ввязался в спор потому, что считаю совет по изучению Хаскела, как первого языка программирования, вредным советом. Ты тоже в школе начинал знакомство с математикой с интегральных уравнений? Всё должно идти по возрастающей - от простого к сложному, от низкоуровневого к абстрактному, а не наоборот.
Вот видите - и Вы тоже попали в ловушку императивного программирования. Для Вас Хасклель - математика интегральных уравнений. А на самом деле Хаскель не сложнее чем Си. Так что тут выбор не между "от простого к сложному" и "от сложного к простому".

Программ на Хаскеле существенно меньше, чем на Си.
Программа на императивном языке описывает, как нужно сделать. Программа на декларативном языке описывает, что нужно сделать. Пока компьютеры были маленькими и глупыми, проще было объяснять им, как нужно делать. Теперь уже можно оставить эти низкоуровневые детали компьютеру. Но в ИТ сила инерции очень велика. В некоторых крупнейших банках до сих пор большинство используемого кода написано на RPG II.

Я не предлагаю писать на Хаскеле. Я считаю, что программист должен знать хорошо как минимум три языка - функциональный, объектно ориентированный и (относительно) низкоуровневый. Например, F#, C# и С. Или Haskell, C++ и С. И начинать учить предпочтительно именно в таком порядке.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9366 / 1350
Регистрация: 21.01.2016
Сообщений: 35,219
17.05.2016, 11:51
Цитата Сообщение от Shamil1 Посмотреть сообщение
Сколько нужно времени, чтобы получить представление о том, что такое стек, куча, процессорный кэш? Один день или, может быть, один час?
Сколько строк текста (без воды) можно написать про эти понятия без привязки к конкретному ЯП?
Получить представление не достаточно, нужно поработать со всем этим, закрепить это самое представление опытом.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы сейчас меня пытаетесь убедить, что без знания грамматики нельзя писать хорошие книги, и если кто решил стать писателем, ему нужно сконцентрироваться на учебниках по грамматике. Я же пытаюсь возразить, что грамматика, конечно, важна, но выучить её не так сложно и это можно отложить.
Я даже не знаю что на это ответить... Для меня это открытие, что можно начать писать повести, отложив изучение алфавита на потом потому, что это легко.

Толи мы друг друга не понимаем, толи спорим о разном.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 14:02
Цитата Сообщение от Usaga Посмотреть сообщение
Для меня это открытие, что можно начать писать повести, отложив изучение алфавита на потом потому, что это легко.
Ссылки/указатели не являются алфавитом. Даже в учебнике по Си они появляются очень не сразу.

Добавлено через 1 час 46 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Толи мы друг друга не понимаем, толи спорим о разном.
Видимо, мы по-разному понимаем программирование.

Для меня программирование - это в первую очередь умение писать программы в принципе, а умение пользоваться каким-то конкретным инструментом. Указатели - это всего лишь инструмент. Причём, пользуемся мы им не от хорошей жизни, а из-за низкого текущего уровня развития ПО и железа.
Чтобы быть кузнецом, нужно уметь работать с металлом (понимать принципы работы с металлом) и обладать большой физической силой (чтобы махать молотом). С моей точки зрения, кузнец в первую очередь должен уметь работать с металлом, а что касается физической силы - если будет нехватать - подкачаешься. Тем более, что с учётом новых технологий (более высокие температуры и т.п.) молот уже не должен быть таким тяжёлым, как раньше. А через какое-то время вообще изобретут какого-нибудь робота, который за тебя будет молотом махать, а кузнец будет только показывать, куда и с какой силой бить. И тогда кузнецом сможет стать любой задохлик.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.05.2016, 14:14
Цитата Сообщение от Shamil1 Посмотреть сообщение
если не знать питон, то всё равно придётся изучать си с нуля
зная питон си придется изучать с нуля.
зная си, питон с нуля изучать не придется.

Цитата Сообщение от Shamil1 Посмотреть сообщение
изучению си питон не поможет, зато поможет написанию программ на си
нет, не поможет.

Цитата Сообщение от Shamil1 Посмотреть сообщение
а вот написанию программ на питоне, привычка писать "в си стиле" только помешает... нужно будет её ломать
на питоне в принципе невозможно писать "в стиле си".
си поможет быстро освоить питон.

Цитата Сообщение от Shamil1 Посмотреть сообщение
в чём переобучение при движении от высокого к низкому? что я должен забыть?
дело не в том, что придется о чем то забыть.
а в том, что придется познать нечто принципиально новое.
что повлечет за собой изменения и в мышлении,
и во взглядах на вещи.

Добавлено через 37 секунд
Цитата Сообщение от Shamil1 Посмотреть сообщение
Даже в учебнике по Си они появляются очень не сразу.
сразу же за обычными переменными.
0
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 16:38
Цитата Сообщение от hoggy Посмотреть сообщение
на питоне в принципе невозможно писать "в стиле си".
Почти любую программу на Си можно практически один к одному переписать на Питон. Это значит, что на Питоне можно писать в "Си стиле". В "Си стиле" означает, что полученную программу можно будет почти один к одному перевести обратно на Си.

Простейший пример:
Mожно написать в Питоновском стиле:
"{name} хочет есть {food}".format(name="Боб", food="лазанью")
а можно в Си стиле:
"%s можно %s %s способом" % ("строки", "интерполировать", "старым")

Программу, написанную на Питон, нельзя один в один перевести на Си, потому что в Си нет срезов, ассоциативных массивов, циклов "for in", исключений, анонимных (lambda) функций, встроенных функций высшего порядка, классов и так далее.

Цитата Сообщение от hoggy Посмотреть сообщение
дело не в том, что придется о чем то забыть.
а в том, что придется познать нечто принципиально новое.
При изучении Питона принципиально нового гораздо больше. Например, классы и функции высшего порядка.

Цитата Сообщение от hoggy Посмотреть сообщение
сразу же за обычными переменными.
Открыл первый попавшийся учебник по Си. Первым попался "Язык программирования Си" Брайан Керниган, Деннис Ритчи.
Учебник состоит из 8 глав. Массивы - в первой главе. Типы - во второй. Указатели - в пятой.

Цитата Сообщение от hoggy Посмотреть сообщение
зная питон си придется изучать с нуля.
зная си, питон с нуля изучать не придется.
Поясните?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.05.2016, 19:12
Цитата Сообщение от Shamil1 Посмотреть сообщение
Почти любую программу на Си можно практически один к одному переписать на Питон.
почти любая программа на си
использует ручную работу с памятью.
питон не умеет ручную работу с памятью.

продемонстрируйте мне пожалуйста
сишный малок на питоне.

Цитата Сообщение от Shamil1 Посмотреть сообщение
При изучении Питона принципиально нового гораздо больше. Например, классы и функции высшего порядка.
и что нового здесь для сишника?

для сишника - это лишь синтаксический сахар.
компилятор делает за него то,
что до этого ему приходилось делать вручную.

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

сишник понимает, что это - всего лишь кусок памяти.

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

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

Цитата Сообщение от Shamil1 Посмотреть сообщение
Открыл первый попавшийся учебник по Си. Первым попался "Язык программирования Си" Брайан Керниган, Деннис Ритчи.
Учебник состоит из 8 глав. Массивы - в первой главе. Типы - во второй. Указатели - в пятой.
массивы то в первой, а имена переменных и типов - только во второй.
а ещё в главе "массивы" не дается никакого определения,
чем на самом деле является массив.
зато используются булевые ветвления,
которые в книге так же описываются позже.

материал в этой книге преподносится немножко рывками.

а вообще то все эти 8мь глав - базовый курс языка.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Поясните?
все, что я написал вам до этого,
это и есть объяснение этой простой мысли.
хз, как ещё можно её до вас донести.

буквально сегодня был случай:
ещё один паренек повстречался.

формально, он - программист с++.
вот только он начал с си быдлера.

и вот итог: человек не различает, где язык, где ИДЕ, где компилятор.
вообще не ориентируется в пространстве.
попытка освоить "вижуал с++" привела его
к полной дезоринтации.

и это можно понять: си быдлер - высокоуровневая rad-технология.
её не существует в отрыве от ИДЕ.
а пареньку теперь придется заново учить с++.
хотя казалось бы, именно на нем он и писал до этого.

и на моей памяти это - не единственный случай.


при переходе с более высокого уровня на более низкий,
человек открывает для себя столько разных нюансов,
о которых он бы даже и не подумал бы.
и ему приходится занового учиться.
1
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
17.05.2016, 22:16
Цитата Сообщение от hoggy Посмотреть сообщение
почти любая программа на си
использует ручную работу с памятью.
питон не умеет ручную работу с памятью.
продемонстрируйте мне пожалуйста
сишный малок на питоне.
У Вас цель - вручную с памятью поработать или решить поставленную задачу?
И почему обязательно "сишный малок". В питоне свои команды для выделения памяти.

Цитата Сообщение от hoggy Посмотреть сообщение
и что нового здесь для сишника?

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

Цитата Сообщение от hoggy Посмотреть сообщение
буквально сегодня был случай:
ещё один паренек повстречался.
Паренёк вместо изучения С++ двигал мышкой в RAD. В результате он не знал C++. И в чём прикол? И какое это имеет отношение к тому, что пишу я?
Какую мысль Вы пытаетесь донести до меня? Что на свете есть много программистов, не знающих С++? Верю. Полагаю, что программистов, не знающих Haskell ещё больше.

Цитата Сообщение от hoggy Посмотреть сообщение
при переходе с более высокого уровня на более низкий,
человек открывает для себя столько разных нюансов,
Например, при переходе с Си++ на Си?
Что-то ни разу не слышал, чтобы у человека, хорошо знающего Хаскель и C# были какие-то проблемы с изучением Си. Скорее уж наоборот.

И, чтобы не быть голословным, назовите пару ньюансов, которые при изучении Си откроет для себя хороший специалист по VB 6.0 (по сути, а не по синтаксису).
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.05.2016, 00:49
Цитата Сообщение от Shamil1 Посмотреть сообщение
У Вас цель - вручную с памятью поработать или решить поставленную задачу?
вы вообще в курсе,
как именно сишники решают свои поставленные задачи?

зайдите на гитхаб, ткните наугад в любой сишный проект,
и задайте вопрос её разработчику:
какая у него была цель: написать софтину,
или вручную работать с памятью?

Цитата Сообщение от Shamil1 Посмотреть сообщение
И почему обязательно "сишный малок".
выше вы там писали, что можно почти любой сишный код
один-к-одному переложить на питоновский.

сишники работают с памятью.
с их точки зрения все есть "куски памяти,
и функции их обработки".

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

если не справились с маллоком,
ну покажите, как вы на питоне один-к-одному
выполните перехват какой нибудь winapi функции?

Цитата Сообщение от Shamil1 Посмотреть сообщение
В питоне свои команды для выделения памяти.
дизайн языка python вообще не предполагает
никакой работы с памятью напрямую.
тем паче - в ручную.

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

Цитата Сообщение от Shamil1 Посмотреть сообщение
Сишник понятия не имеет ни про классы, ни про функции высшего порядка. Он не только запрограммировать их не может, ему даже такая идея в голову не придёт.
видимо вы меня не поняли.
я начинаю сильно подозревать,
что о сишке вы только по наслышке слышали.

тогда я поясню ещё раз:
когда я писал:
Цитата Сообщение от hoggy Посмотреть сообщение
и что нового здесь для сишника?
для сишника - это лишь синтаксический сахар.
компилятор делает за него то,
что до этого ему приходилось делать вручную.
то имел ввиду, что сишник не просто знает, что это такое.
но так же имеет понимание,
как это реализуется на уровне компилятора.

у него есть понимание "низкоуровневой реализации",
просто потому, что он много раз делал нечто подобное.

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

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

не знаю, как насчет фп.
полагаю как минимум многие из её элементов используются.
а вот ооп используется и ещё как.
например, гляньте в сторону библиотеки gtk+
это красноречивый пример объектно ориентированной архитектуры.
хотя написана она на чистом си.

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

Цитата Сообщение от Shamil1 Посмотреть сообщение
И в чём прикол?
а программист с++ стучал по клавишам.
а в результате ничего не знает о кэш-миссах,
например.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Какую мысль Вы пытаетесь донести до меня?
что подниматься проще,
чем спускаться.

поэтому спуск займет больше времени, чем подъём.

человек может двигать мышкой и не знать с++.
а может выучить с++, а потом подвигать мышкой.
осознаете разницу?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, при переходе с Си++ на Си?
здесь особый случай.

изучение с++ начинается с основ.
а его основа - си.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Что-то ни разу не слышал, чтобы у человека, хорошо знающего Хаскель и C# были какие-то проблемы с изучением Си. Скорее уж наоборот.
человек, который хорошо знает два языка
исповедующие разные парадигмы - полиглот.

Добавлено через 7 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
назовите пару ньюансов, которые при изучении Си откроет для себя хороший специалист по VB 6.0
банальности вроде низкоуровневой работы с памятью не очевидны?

огромный мир, который был
заботливо инкапсулирован от него VB.

такой хороший специалист верно хорошо понимает работу с COM.
и находит её простой и понятной.

у него будет прекрасная возможность узнать
как на самом деле этот COM устроен.
правда изучать придется полностью с нуля.
с книжек для самых маленьких.
и на один только COM у него уйдет времени больше,
чем он потратил на весь VB вместе взятый.
1
Модератор
Эксперт функциональных языков программирования
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
18.05.2016, 11:04
hoggy,
Наконец-то я начинаю понимать Вашу мысль. Вы утверждаете, что если человек хочет научиться программировать и для этого изучить несколько языков, то лучше сначала пару месяцев потратить на Си, а потом приступать к остальным языкам (а не наоборот), потому что:
за пару месяцев изучения Си он будет знать не только Си, но ООП, ФП (причём, не только концепции, но и как это реализуется на уровне компилятора) и так далее... и после этого легко и быстро выучит Java и Haskell.
а за пару месяцев изучения Python/Java он научится только мышкой по экрану двигать...


Цитата Сообщение от hoggy Посмотреть сообщение
вы никак не положите один-к-одному коды этих языков
просто потому, что у самих языков слишком разный дизайн.
Не хочу спорить. Предлагаю пойти на любой сайт с задачами по программированию, выбрать задачу. Вы напишете решение на Си, а я его один-к-одному портирую на C# и Haskell. А потом для сравнения напишу код на Haskell, чтобы показать чем "си стиль" отличается.
Один-к-одному не значит, что я возьму Си-код и откомпилирую его под Хаскель. Это значит, что каждой конструкции (в широком смылсле) кода на Си будет соответсвовать определённая конструкция на Haskell. Например, каждому циклу будет соответсвовать описание и вызов рекурсивной функции.

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

Задача состоит в том, чтобы получить нужный результат, а не в том, чтобы использовать malloc или какую другую функцию. Например, если мне надо считать с консоли 10 чисел, я просто создаю массив. Зачем мне malloc? Иногда приходится сложнее. Например, была у меня задача вызвать некую АПИ функцию (на VB 6.0). Функция возвращает структуру А, одним из полей которой является массив структур Б. На VB я не могу описать дословно такую структуру, так как в VB указатель на массив не является указателем на первый элемент. Решение:
Вызываем АПИ-функцию, передавая ей пустой указатель. Функция (согласно документации) возвращает мне размер памяти, необходимый для результата.
Выделяем нужное количество памяти (просто как массив байт). Вызываем АПИ-функцию, получаем результат (который у нас описан как массив байт).
Вычисляем адрес первого элемент массива структур Б в результате (то есть, в структуре А). Описываем массив структур Б, вычисляем адрес первого элемента. Копируем из одного адреса в другой нужное количество байт.
Задача решена.


Цитата Сообщение от hoggy Посмотреть сообщение
если не справились с маллоком
Издеваетесь? Функция malloc выделяет блок памяти. Вы считаете, что на Питоне нельзя выделить блок памяти? Даже массив или объект в куче создать нельзя?
На питоне при желании можно даже вот так писать:
x86.mov(eax, MemRef(edi, disp = 0, index = ecx, 4)

Цитата Сообщение от hoggy Посмотреть сообщение
банальности вроде низкоуровневой работы с памятью не очевидны?
Не очевидны. Вы можете что-то конкретное назвать, а не общие фразы?
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
18.05.2016, 15:48  [ТС]
Shamil1, hoggy, Usaga, я извиняюсь, тут видимо спор возник небольшой)
я мельком прочитал, и увидел, все из вас говорят про парадигмы программирования(функциональное, процедурное, ООП). Можете сказать к какому из этих пунктов C относится, и есть ли книжки по этой парадигме. Может я конечно понятие само парадигмы не очень понял. Спасибо!!
P.S. не хотел новый вопрос создавать, может вы знаете.
0
Эксперт .NET
 Аватар для Usaga
14138 / 9366 / 1350
Регистрация: 21.01.2016
Сообщений: 35,219
18.05.2016, 15:51
immortalWarrior, на википедии есть подробное описание.
0
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 46
18.05.2016, 16:02  [ТС]
Usaga, да, я поискал, нашёл уже, спасибо)
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
22.05.2016, 01:20
Цитата Сообщение от Shamil1 Посмотреть сообщение
Сишник понятия не имеет ни про классы, ни про функции высшего порядка.
подстановка указателя на функцию в другую функцию и делает вызывающую функцию функцией высшего порядка)) так что имеет...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2016, 01:20
Помогаю со студенческими работами здесь

Разработка, внедрение и адаптация программного обеспечения отраслевой направленности
Решите пожалуйста тест,очень надо!!!! 1.Суть структурного подхода состоит: а) в декомпозиции системы на ряд модулей, процедур, функций...

Защита программного обеспечения
Приветствую всех. Понадобилось на работе разработать защиту для ПО, которая бы обеспечивала сочетание 1 лицензия - 1 компьютер. Как...

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

Тестирование программного обеспечения
Народ, помогите если знаете. Дали такое задание: Протестируйте программное обеспечение на неверный ввод исходных данных. Если знает кто,...

Учет программного обеспечения
Привет всем, проблема вот в чем. Имеется база по учету программного обеспечения, в ней присутствуют таблицы: ПО, пользователи и лицензии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru