Про то что что надо учить программированию, а не просто языку, и что язык всего лишь средство, я думаю всем понятно. Полагаю, что большая часть из прочитавших эту статью, открывали (а может быть еще откроют) толстые и умные книжки вроде творений Макконнелла. На заданные вами вопросы старался ответить на протяжение всей статьи.
Вспоминаю студенческие годы, ...
Курсовой проект, насколько мне известно, редко бывает (если бывает) на первом курсе. Следовательно, до него явно было несколько специальных предметов, посвящённых обучению программированию. То, что одни не учили, а другие не хотели (не могли) учиться, проблема отнюдь не C++. Я почти уверен, что ваши одногрупники мучились бы так же и с другим языком или технологией.
В Pythone действительно много хорошего. Однако, в процессе обучения «с нуля», можно столкнутся с некоторыми неприятностями… Перечислю то, с чем сталкивался лично я в процессе обучения людей.
Сложно, объяснить человеку, который очень смутно представляет (если вообще представляет) что такое тип данных, что же не так с абсолютно валидным кодом типа «if (5 == someObject.getValue)» в котором забыли добавить скобки после вызова метода. А человеку, который знает, что сравнение числа с указателем на функцию (хорошо, в данном случае, с объектом класса «method») лишено смысла, всё просто объяснить.
Запись «for x in range(1, 5)», сложнее для понимания, чем обычный цикл с параметром в C-подобных языках. Просто наблюдение.
Ещё один интересный пример: можно попытаться объяснить что, как и почему надо делать, если мы вдруг захотим наследовать класс от двух классов, у которых разные метаклассы. Конечно тут вопрос не начального обучения, но всё-таки.
Верно, вы правы. С начала, не совсем понял что вы имели ввиду.
Но всегда же ведь можно использовать сторонние библиотеки. Для примера, проверил с QString, строка поворачивается нормально. Думаю, что есть и более маленькие библиотеки или другие способы поворота. Сам я работаю с Qt.
В плюсах появилось функциональное программирование? А можно и мне его отсыпать?
Начиная с C++11 появились встроенные лямбды, можно использовать замыкания, никто не мешает писать функции высшего порядка. Появились, например шаблоны с переменным числом параметров, кортежи, вывод типов… Всё это было и до стандарта C++11, правда в сторонних библиотеках.
Для начала нет необходимости объяснять всё подробно. Люди просто не обладают достаточными знаниями для того, чтобы начать бросаться перед ними фразами вроде «std::cout — это экземпляр класса ostream, представляющий собой стандартный буферизированный выходной поток, по умолчанию связанный с дисплеем консоли». Насчёт include все должно быть понятно сразу. Обычно до того, как показать программу есть некоторая вводная лекция, на которой затрагивают этапы сборки, в том числе и препроцессинг. Уже через месяц всё (за исключением глубокого понимания потоков) будет понятно, если не после двух лекций. Зависит от уровня аудитории на самом деле. Многие приходят из школы с пониманием что такое функция, например.
Вот я, например, не просил, чтобы делали эту статью. Поэтому, утверждать, что кто-то сделал какую-то работу для меня (и для той части аудитории хабра, которая её тоже не просила), совсем не корректно. Сделали что-то по своей (!) инициативе, разместили на публичном ресурсе… так чего же вы ждёте? Того, что вас будут носить на руках, только за то, что вы затратили какие-то личные ресурсы? Это уже даже не смешно. В общем, все просто…
Уникальная статья и хороший контент? Возможно, вот только статья вполне подойдёт и для случая с продажей тушенки или автомобилей, или чего-то еще. Для IT (причем вообще тут IT, к слову), полезность данного опуса лежит в области комплексных значений. Заявлять же «хороший контент» без обозначения явных критериев «хорошести», это, простите, моветон. Ещё и опубликовано в хаб «программирование».
Насчёт автора оригинального доклада тоже не все понятно. Ну, работает человек 10-20-30 лет «в области IT», и что с того? Интересно узнать какие были реальные проекты и достижения. Вот это, например, должен был сделать «хороший журналист». А конспект выступления… ну извините.
Зато получите +1 формальный признак для защиты диссертации (если вы конечно собираетесь её защищать) и баллы в рейтинг (если работаете штатным сотрудником института). Поэтому надо понимать, куда и с какой целью вы пишите. Постараюсь переформулировать свою предыдущую мысль: на Хабре несколько иной стиль постов и тематика. Я, например, не увидел связи поста с: «Учебный процесс в IT, Анализ и проектирование систем, Будущее здесь».
По сабжу… Ну есть ваша концептуальная модель и набор каких-то правил. Есть еще тысячи похожих моделей (я почти уверен!). Чем то, что вы предлагаете лучше (в корне отличается) от других схожих разработок? Что вы создали на основе предлагаемого в посте (программное обеспечение, новую методику обучения, реформировали систему образования РФ)? Что улучшилось (ухудшилось), когда вы все это внедрили и по каким критериям? Если бы вы рассказали об этом, то почитать пост было бы интересно (имхо).
А так получается что-то вроде: «У меня тут очередная свежая теория, коллеги...».
Какой стиль, так и отдаёт душком российской «науки»… Хабр все-таки не еще один псевдонаучный журнал ВАК РФ или сборник трудов международной псевдонаучной конференции.
Но мне хотелось бы поговорить об одной из самых важных и всегда актуальной: желание хорошо жить и хорошо зарабатывать.
В таком случае, лучше явно указать критерии хорошей жизни и хорошего заработка. Не для всех они одинаковы.
5% лучших специалистов получают 50% всех денег. 20% лучших специалистов получают 80% всех денег.
Можно ссылку на исследования российского рынка труда? Цифры необходимо чем-то подкреплять. Графики тоже. Я почти уверен, что этому даже на первом курсе института учат.
Не замечал ничего кроме черного фона под иконками.
Выбор временного пояса ассоциируется с местоположением. Этот значок обозначает точку на карте.
Логично то, что если вы открыли меню настроек, то получите доступ к настройкам (исключение авиарежим, но он там достаточно органично смотрится). А вот в виджете как раз нет авиарежима.
Под иконкой-черной дырой прячется набор других предустановленных гугловых приложений:
Ничего подобного не замечал.
Упражнение для телепатов: не заглядывая в инструкцию, догадайтесь, что находится за кнопкой с клизмой.
Скорее, упражнение для тех, кто не пользовался другими приложениями гугл. Стоит увидеть хотя бы раз логотип google maps, и все станет интуитивно понятно. Ассоциации с клизмой меня настораживают.
Что, думаете, произойдёт при нажатии иконки Wi-Fi? Не угадали, откроется меню настройки Wi-Fi.
Думаю, что это вполне логично. Для быстрого включения/выключения wi-fi есть соответствующий виджет, на котором еще и bluetooth есть даже, и другие полезные кнопочки.
Ну не такая уж и злостная венгерка, как например «rgfpArray») Все вполне пристойно, если подходить без фанатизма.
Тот же QtCreator генерирует имя поля для свойства в стиле «m_», что соответствует венгерской нотации. Ну а в Qt Coding Style ничего не написано по данному вопросу, если мне не изменяет память.
gSettings — префикс выражает глобальный статус переменной;
srcName, dstName — различие между объектами (например при копировании);
mName — префикс выражает статус члена данных (или "_" вместо «m», по аналогии с Python).
На странице 187, в данной книге есть таблица с префиксами и их значениями. На мой взгляд, префиксы куда удобнее для понимания и для работы в IDE, а также несут дополнительную информацию о назначении переменной (член данных, временная, статическая и так далее). К слову, именование констант с префиксом «kMaximumLength» выглядит куда лучше, чем «MAXIMUM_LENGTH».
В гайде очень много спорных моментов и очевидных вещей. Помимо не освещённых моментах, о которых писали выше, хотелось бы увидеть рекомендации по оформлению кода реализации классов, что-то вроде:
Foo::Foo( int arg1, int arg2 )
: mArg1( arg1 )
, mArg2( arg2 )
{}
Курсовой проект, насколько мне известно, редко бывает (если бывает) на первом курсе. Следовательно, до него явно было несколько специальных предметов, посвящённых обучению программированию. То, что одни не учили, а другие не хотели (не могли) учиться, проблема отнюдь не C++. Я почти уверен, что ваши одногрупники мучились бы так же и с другим языком или технологией.
Сложно, объяснить человеку, который очень смутно представляет (если вообще представляет) что такое тип данных, что же не так с абсолютно валидным кодом типа «if (5 == someObject.getValue)» в котором забыли добавить скобки после вызова метода. А человеку, который знает, что сравнение числа с указателем на функцию (хорошо, в данном случае, с объектом класса «method») лишено смысла, всё просто объяснить.
Запись «for x in range(1, 5)», сложнее для понимания, чем обычный цикл с параметром в C-подобных языках. Просто наблюдение.
Ещё один интересный пример: можно попытаться объяснить что, как и почему надо делать, если мы вдруг захотим наследовать класс от двух классов, у которых разные метаклассы. Конечно тут вопрос не начального обучения, но всё-таки.
Но всегда же ведь можно использовать сторонние библиотеки. Для примера, проверил с QString, строка поворачивается нормально. Думаю, что есть и более маленькие библиотеки или другие способы поворота. Сам я работаю с Qt.
Начиная с C++11 появились встроенные лямбды, можно использовать замыкания, никто не мешает писать функции высшего порядка. Появились, например шаблоны с переменным числом параметров, кортежи, вывод типов… Всё это было и до стандарта C++11, правда в сторонних библиотеках.
Уникальная статья и хороший контент? Возможно, вот только статья вполне подойдёт и для случая с продажей тушенки или автомобилей, или чего-то еще. Для IT (причем вообще тут IT, к слову), полезность данного опуса лежит в области комплексных значений. Заявлять же «хороший контент» без обозначения явных критериев «хорошести», это, простите, моветон. Ещё и опубликовано в хаб «программирование».
Насчёт автора оригинального доклада тоже не все понятно. Ну, работает человек 10-20-30 лет «в области IT», и что с того? Интересно узнать какие были реальные проекты и достижения. Вот это, например, должен был сделать «хороший журналист». А конспект выступления… ну извините.
По сабжу… Ну есть ваша концептуальная модель и набор каких-то правил. Есть еще тысячи похожих моделей (я почти уверен!). Чем то, что вы предлагаете лучше (в корне отличается) от других схожих разработок? Что вы создали на основе предлагаемого в посте (программное обеспечение, новую методику обучения, реформировали систему образования РФ)? Что улучшилось (ухудшилось), когда вы все это внедрили и по каким критериям? Если бы вы рассказали об этом, то почитать пост было бы интересно (имхо).
А так получается что-то вроде: «У меня тут очередная свежая теория, коллеги...».
В таком случае, лучше явно указать критерии хорошей жизни и хорошего заработка. Не для всех они одинаковы.
Можно ссылку на исследования российского рынка труда? Цифры необходимо чем-то подкреплять. Графики тоже. Я почти уверен, что этому даже на первом курсе института учат.
Выбор временного пояса ассоциируется с местоположением. Этот значок обозначает точку на карте.
Логично то, что если вы открыли меню настроек, то получите доступ к настройкам (исключение авиарежим, но он там достаточно органично смотрится). А вот в виджете как раз нет авиарежима.
Ничего подобного не замечал.
Скорее, упражнение для тех, кто не пользовался другими приложениями гугл. Стоит увидеть хотя бы раз логотип google maps, и все станет интуитивно понятно. Ассоциации с клизмой меня настораживают.
Думаю, что это вполне логично. Для быстрого включения/выключения wi-fi есть соответствующий виджет, на котором еще и bluetooth есть даже, и другие полезные кнопочки.
Учитывая некоторую связь заголовка и картинки, вы не находите, что женщины могут обидеться?)
Тот же QtCreator генерирует имя поля для свойства в стиле «m_», что соответствует венгерской нотации. Ну а в Qt Coding Style ничего не написано по данному вопросу, если мне не изменяет память.
gSettings — префикс выражает глобальный статус переменной;
srcName, dstName — различие между объектами (например при копировании);
mName — префикс выражает статус члена данных (или "_" вместо «m», по аналогии с Python).
На странице 187, в данной книге есть таблица с префиксами и их значениями. На мой взгляд, префиксы куда удобнее для понимания и для работы в IDE, а также несут дополнительную информацию о назначении переменной (член данных, временная, статическая и так далее). К слову, именование констант с префиксом «kMaximumLength» выглядит куда лучше, чем «MAXIMUM_LENGTH».
В гайде очень много спорных моментов и очевидных вещей. Помимо не освещённых моментах, о которых писали выше, хотелось бы увидеть рекомендации по оформлению кода реализации классов, что-то вроде: