LINUX.ORG.RU

Студенты пишут быдлокод (им это сходит с рук)

 , , , ,


3

3

Лор овцы, среди вас кто-нибудь преподавал будущим программистам? Допустимо ли ставить оценки за стиль и аккуратность кода? А вам самим в универе ставили?

А то домашние задания херачат как кот на клавиатуре повалялся. Функции на 5 экранов, переменные с названиями x, y, tmp1, tmp2, ошибки не проверяются. Некоторые даже отступы до сих пор для себя не открыли, так и фигачат. Сейчас это всё никак не оценивается: работы проверяются автоматической системой, скомпилялось, тесты прошли - домашка зачтена. Хочу им слегка повправить кое-че. Допустимо ли туда прикрутить стайл-чекер какой-нибудь? Какие есть разумные статические чекеры для C, C++, C#, Java и Pascal (сейчас разрешается любой из этих языков по выбору)? Как вообще оценивать общую адекватность кода - например, чтобы студент не срал временными файлами под себя, а аккуратно создал временный каталог через mkdtemp? Или всякие подводные грабли в плюсах: например, есть деструктор, но нет копирующего конструктора и оператора =. И тысячи подобного. Какой-нибудь софт умеет на такое ругаться?

А собственно стиль кодирования допустимо наавязывать студентам? Надо же им когда-то понять, что Camel_Case_With_Underscores используют только мудаки, или что за отступы в один пробел в некоторых районах бьют свинцовой трубой по пальцам. Или это всё эстетство, а студентов просто готовят к реальному миру и суровому энтерпрайз-быдлокодингу? Че думаете?

Ответ на: комментарий от DarkEld3r

Ну так -Wall -Werror?

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

deterenkelt
()
Ответ на: комментарий от intelfx

Ты заставил меня пройтись до википедии… https://en.wikipedia.org/wiki/Valgrind#Limitations_of_Memcheck

Кстати, мне с новым gcc прилетело уведомление, что там теперь можно засадить канарейку в стек http://wiki.osdev.org/GCC_Stack_Smashing_Protector Но это опять же надо про неё знать и код писать соответствующе.

deterenkelt
()

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

nagibator
()
Ответ на: комментарий от E

Такой код комментировать не имеет смысла, например.

Книга называлась «О вкусной, здоровой пище и тривиальных вещах в программировании»?

deterenkelt
()

Лор овцы

Так толсто, что я даже не знаю, что сказать.

Valkeru ★★★★
()
Ответ на: комментарий от deterenkelt

А чуть дальше пройтись? :)

http://en.wikipedia.org/wiki/AddressSanitizer

В конце концов, -fstack-protector-strong тоже можно запихнуть в строку вызова компилятора в проверяющей системе.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от peregrine

Предлагаю делать так: не принимать задачи в которых совсем нет комментариев

Лабораторные работы могут быть и простейшими

(если их слишком много

define 「слишком много」

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

Это изничтоживание порядочных программистов, которые умещают комментарии в 80 колонку.

deterenkelt
()
Ответ на: комментарий от deterenkelt

UMR ловит memcheck. Ну а use after return и повреждение рядом лежащих переменных — несудьба, да. Впрочем, я так и сказал: «большинство».

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от AIv

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

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

т. Оккам

deterenkelt
()
Ответ на: комментарий от intelfx

Впрочем, я так и сказал: «большинство».

Мог бы просто написать, что согласен с этим.

В конце концов, -fstack-protector-strong тоже можно запихнуть в строку вызова компилятора в проверяющей системе.

А канарейку в стек пихать дядя Ваня будет? Или будем хакать промежуточное представление в вэлгринде, чтоб насильно засадить? :D А ТС-то потянет? http://wiki.osdev.org/GCC_Stack_Smashing_Protector#How_to_implement_it

deterenkelt
()
Ответ на: комментарий от anonymous

паскаль лучше?

Паскаль клёвый. Я на нём указатели и ссылки осваивал. Правда, там такой синтаксис был, что я каждый раз натыкаясь на них в своём же код смотрел в открытую на коленях книгу. Когда в Си пришёл, всё почему-то сразу стало просто и понятно. Только терпеть не могу char *var, по-моему указатель — такой же идентификатор, а то что идентификатор — указатель, должно быть как пометка к его типу, что он указатель на char, т.е. char* var.

deterenkelt
()
Ответ на: комментарий от Eddy_Em

Нет языка, кроме С, и ассемблер — пророк его!

Ассемблер — не язык, а тип компилятора.

deterenkelt
()
Ответ на: комментарий от Eddy_Em

Ничего в асм не перемалывается. gcc напрямую машкоды генерирует.

4.2

«GCC's external interface follows Unix conventions. Users invoke a language-specific driver program (gcc for C, g++ for C++, etc.), which interprets command arguments, calls the actual compiler, runs the assembler on their output, and then possibly runs the linker to produce a complete executable binary.» — https://en.wikipedia.org/wiki/GNU_Compiler_Collection#Design

deterenkelt
()

Я думаю что тса нужно забанить.

bhfq ★★★★★
()

Надо же им когда-то понять, что Camel_Case_With_Underscores используют только мудаки

Вот тут ты серьезно попутал!

yoghurt ★★★★★
()
Ответ на: комментарий от PolarFox

Минус твоего подхода — смешение двух разных неразличимых для человека символов.

Включи в редакторе отображение whitespace characters.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от mashina

В отечественных (хороших) ВУЗах обычно не учат ремеслу

Если ВУЗ не учит программиста его ремеслу - это плохой ВУЗ.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

жесть... ты долго потом работу искал?

Не понял. Я был начальником этого говнокодера.

Puzan ★★★★★
()
Ответ на: комментарий от PolarFox

Отличный подход! К тому же разовьет навыки командной разработки!

r0ck3r ★★★★★
()
Ответ на: комментарий от zikasak

Интересный способ оценивать качество студента.

tailgunner ★★★★★
()
Ответ на: комментарий от zikasak

если человек, поступив в вуз, не знает, как пишется слово «вуз», то это плохой студент

Те, кто даже заглавные буквы и знаки препинания не осилил, вообще только в дворники годятся.

anonymous
()
Ответ на: комментарий от zikasak

про начало предложения согласен. но в чем еще я ошибся?

Про конец забыл.

anonymous
()
Ответ на: комментарий от anonymous

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

Правда, нонешняя школа — то еще говнище.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от deterenkelt

Только терпеть не могу char *var, по-моему указатель — такой же идентификатор, а то что идентификатор — указатель, должно быть как пометка к его типу, что он указатель на char, т.е. char* var.

Правильно будет писать именно char *v;.

Потому что в char *v, b; b будет char. Соотв. запись char* v, b будет по мозгам бить, когда код будешь читать через некоторое время.

P.S. Опустим тот момент, что объявлять две переменные на строке вообще не оч. хорошая идея зачастую.

Norgat ★★★★★
()
Ответ на: комментарий от deterenkelt

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

Надеюсь ты тут имел ввиду Haskell и co. под 'функциональщиной'?

Norgat ★★★★★
()
Ответ на: комментарий от Lavos

Это *магическое число* которое требует вызываемая функция.

/*
 * Iterate through the groups which hold BACKUP superblock/GDT copies in an
 * ext4 filesystem.  The counters should be initialized to 1, 5, and 7 before
 * calling this for the first time.  In a sparse filesystem it will be the
 * sequence of powers of 3, 5, and 7: 1, 3, 5, 7, 9, 25, 27, 49, 81, ...
 * For a non-sparse filesystem it will be every group: 1, 2, 3, 4, ...
 */
static unsigned ext4_list_backups(struct super_block *sb, unsigned *three,
				  unsigned *five, unsigned *seven)
Norgat ★★★★★
()
Ответ на: комментарий от peregrine

А на ASM-е можно сделать всё что на C и даже лучше. Зачем придумали C? Да затем, что С более высокоуровневый ЯП и писать на нём проще, также как и на каком-нибудь питоне писать проще, чем на C. Но за всё надо платить, да, вот и платят производительностью.

Очень рекомендую прочитать следующую статью http://habrahabr.ru/post/230777/

void_ptr ★★★★
()
Ответ на: комментарий от Eddy_Em

Сказка.

Здь, ну ты просто заставляешь троллить тебя!;-)

Давай сравним дифференцирующий фильтр (принимает две колонки чисел - x, y - со стандартного ввода, и пишет численную производную от этого на стандартный вывод) на С и на питоне?

AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от AIv

Лично я писать на сях буду намного быстрей, чем на пхытоне. И работать шустрей будет наверняка!

есть две колонки чисел - x, y - со стандартного ввода, и пишет численную производную от этого на стандартный вывод

В смысле — разделенные разности что ли?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Конечные разности.

y'_i = (y_{i+1}-y_i)/(x_{i+1}-x_i) в точке (x_{i+1}+x_i)/2

Насчет шустрее работать - когда появляются текстовые форматы и ИО с диска это некритично. Лично ТЫ будешь писать эту задачу на С-ях гораздо медленее чем я на питоне - просто по тому что на питоне она занимает ровно четыре строчки, из которых первых две

#!/usr/bin/python
import sys
вишь, я ползадачи уже написал;-)

AIv ★★★★★
()
Ответ на: комментарий от AIv

Пофиг. Я не собираюсь пхытон изучать.

А если 1 раз надо посчитать, то я быстрей это сделаю в октаве! Там вообще 1 строчка:

dydx = diff(y) ./ diff(x);

Ну, а если надо часто использовать, то наверняка это будет не standalone приложение, а часть чего-то, т.е. какой, нафиг, пхытон? Только С.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от aedeph_

Если ВУЗ не учит программиста его ремеслу - это плохой ВУЗ.

Его ремеслу обучают в ПТУ.

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

tailgunner ★★★★★
()
Ответ на: комментарий от Eddy_Em

У меня с незапамятных времен коллекция фильтров, я ее эпизодически пополняю. Иногда че то надо быстро на коленке сделать и запустить 50 раз скажем. Ты что, не в курсе что есть unix-way???

AIv ★★★★★
()
Ответ на: комментарий от AIv

"Че-нить быстро на коленке" делается в октаве. Зачем мне пхытон?

Ну, при желании можно на сях написать. И мне пофиг, что длина программки будет не 4 строчки, а 40! Зато не нужно будет ломать мозг извращенным пхытоном. Оторвать бы яйца тому, кто пхытон придумал! Это ж жесть, а не ЯП!!!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от aedeph_

Достаточно не принимать работу до тех пор, пока она не будет нормально оформлена. Пусть привыкают.

И отчеты принимать только в латехе.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

Хотя и задача дурацкая, на фортране код будет практически такой же, как и на питоне.

aedeph_ ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.