LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

Особенностью и главной сложностью в С++ является то, что одно и то же можно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать безопасно/оптимально и т. п. Но без включения мозга при использовании этих инструментов код не станет более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придерётся к фразе «С++ расширяет С»: я в курсе, что это не совсем так, и есть несовместимости между С и С++, и что более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С» лучше всего отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем, Java. Но путь с нуля до Senior Java developer насколько же долог и тернист, насколько и путь Senior С++ developer, а то и тернистее. (При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества).

Кстати, совсем недавно мы ловили memory leak в Java приложениях. И это был ад, так как в Java есть много очень «удобных инструментов по автоматическому управлению памятью», которые представляют собой еще ту магию в которой приходилось разбираться. И это могли сделать единицы из нашей немаленькой команды. И это заняло прилично времени. В С++ это было бы проще, я уверен.

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?

Исправление Kroz, :

Особенностью и главной сложностью в С++ является то, что одно и то же можно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать безопасно/оптимально и т. п. Но без включения мозга при использовании этих инструментов код не станет более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придерётся к фразе «С++ расширяет С»: я в курсе, что это не совсем так, и есть несовместимости между С и С++, и что более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С» лучше всего отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем, Java. Но путь с нуля до Senior Java developer насколько же долог и тернист, насколько и путь Senior С++ developer, а то и тернистее. (При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества).

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

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?

Исправление Kroz, :

Особенностью и главной сложностью в С++ является то, что одно и то же можно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать безопасно/оптимально и т. п. Но без включения мозга при использовании этих инструментов код не станет более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придерётся к фразе «С++ расширяет С»: я в курсе, что это не совсем так, и есть несовместимости между С и С++, и что более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С» лучше всего отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем, Java. Но на Senior Java developer нужно учиться столько же, сколько на Senior С++ developer, а то и больше. При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества.

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

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?

Исправление Kroz, :

Особенностью и главной сложностью в С++ является то, что одно и то же можно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать безопасно/оптимально и т. п. Но без включения мозга при использовании этих инструментов код не станет более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придерётся к фразе «С++ расширяет С»: я в курсе, что это не совсем так, и есть несовместимости между С и С++, и что более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С» лучше всего отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем Java. Но на Senior по Java нужно учиться столько же, сколько на Senior С++, а то и больше. При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества.

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

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?

Исправление Kroz, :

Особенностью и главной сложностью в С++ является то, что одно и то же можно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать всё более безопасно/оптимально и т. п. Но без разумного использования этих инструментов, код не стане более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придирается к слову «расширяет С»: я в курсе, что есть несовместимости между С и С++, и более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С», хорошо отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем Java. Но на Senior по Java нужно учиться столько же, сколько на Senior С++, а то и больше. При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества.

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

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?

Исходная версия Kroz, :

Особенностью и главной сложностью в С++ является то, что одно и то же моно реализовать многими способами.

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

Теперь к конкретике:

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

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

а) С++ перекрывает Си, поэтому там всё сделано по-другому, поэтому безопасность выше б) С++ - наследник Си и в целом наследует его недостатки.

Моё мнение: C++ расширяет С конструкциями и библиотеками, которые позволяет сделать всё более безопасно/оптимально и т. п. Но без разумного использования этих инструментов, код не стане более безопасным или оптимальным, а за это отвечает программист. Это отличие от некоторых других языков, которые буквально навязывают лишь один способ написания программ, который весьма неплох в 90% случаев, и усложняет жизнь (иногда очень сильно) в оставшихся 10% случаев.

P. S. Для тех, кто придирается к слову «расширяет С»: я в курсе, что есть несовместимости между С и С++, и более правильно говорить, что С++ это другой язык. Но покуда мы не в суде и не в швейцарском банке, на мой взгляд выражение «C++ расширяет С», хорошо отражает смысл.

всё такое плохое, что делает Си опасным языком.

Это не делает язык опасным. Это лишь повышает порог входа для программистов. Но чтобы писать безопасные программы используя другие языки программирования, всё равно придется погрузиться в том, как ресурсы выделяются и высвобождаются. Простыми словами, на джуна С++ нужно учиться дольше, чем на джуна, скажем Java. Но на Senior по Java нужно учиться столько же, сколько на Senior С++, а то и больше. При этом под уровнем программиста я понимаю способность выполнять разного рода задачи, и при этом выдавать код одинакового качества.

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

Так что более опасно: декларировать что «теперь вы можете не думать о выделении и высвобождении памяти» и потом бороться с ситуациями когда это не сработало, или с самого начала приучать программиста о том, что он должен об этом думать? И, да, память - это не единственный ресурс: как на счёт автоматического постановки и освобождения блокировок (locks), открытия/закрытия соединений, выделения/освобождения идентификаторов и т. п.? Есть такие garbage collectors и умные… указатели?