avva: (Default)
[personal profile] avva
Мне понравился комментарий в дискуссии на Hacker News о предподавании программирования:

"I've been teaching kids to code for 19 years now, and I still make them do it the hard way.
Just two days ago this year's crop of 83 students wrote their first Java programs in Notepad and compiled and ran it from the command-line.
[...]
And my curriculum goes through the basics of Java very slowly. As I've said on HN before, I make my students code FizzBuzz, but they will have literally done 106 complete programming projects before it."

(речь идет о старшеклассниках с нулевым опытом программирования)

Автор также объясняет, почему Notepad: важно объяснить ученикам, что программа это просто текст, и в нем нет ничего особенного. Через несколько дней после начала, когда это усвоено, ученики переходят на Notepad++ с подсветкой синтаксиса итп.

Примеры заданий, которые дает автор, есть на этом его сайте: https://programmingbydoing.com/. Действительно, перед FizzBuzz есть пусть на 106, но 70 более простых заданий.

Date: 2016-08-30 02:11 am (UTC)
From: [identity profile] occuserpens.livejournal.com
Аллах с ноутпедом, интересно, как он учит складывать числа из текстового файла. С полной обработкой ошибок или как в Смольном Институте?
Edited Date: 2016-08-30 02:12 am (UTC)

Date: 2016-08-30 05:09 am (UTC)
From: [identity profile] tat-ti.livejournal.com
Возможно, в несколько подходов.
Сначала - "хоть как-нибудь".
В конце - с полной обработкой ошибок и сдаваемым набором тестовых данных.
Хорошая же задача для понимания как надо писать код.

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

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

Date: 2016-08-30 06:27 am (UTC)
From: [identity profile] tembel.livejournal.com
вы про калькулятор? не понимаю трудонстей с notepad

Date: 2016-08-31 12:59 am (UTC)
From: [identity profile] occuserpens.livejournal.com
https://programmingbydoing.com/a/summing-three-numbers-from-a-file.html

Date: 2016-08-30 04:16 am (UTC)
From: [identity profile] olex-u.livejournal.com
Около года занимаюсь, в том числе, собеседованиями программистов из Индии. На FizzBuzz в Notepad отсеивается примерно половина. Для прохождения собеседования нужно, кроме того, написать пример immutable class in Java, найти максимальный элемент в списке и решить несложное задание по HTML/CSS.

Нет, это не шутка.

Date: 2016-08-30 02:49 pm (UTC)
From: [identity profile] avva.livejournal.com
Да, вполне могу поверить.

Date: 2016-08-30 05:05 am (UTC)
From: [identity profile] tat-ti.livejournal.com
Открыл Америку? Дрессировщики как бы намекают на "одно умение за один раз". Понятие "переменной" и "присвоить" они с молоком матери не впитали, у некоторых эти понятия в голове плохо укладываются, обрастая по мере укладывания мифами и легендами.

Некоторые понимают легко и непринужденно на "интуитивном" уровне. Но некоторым приходится давать небольшими кусочками (которые быстроумные могут перескакивать, переходя к сложным задачам на "подумать" на ту же тему).
Я не знаю, так ли ценны как будущие программисты "тормоза", но по учебному плану в них всех надо впихнуть некоторый объем знаний.

И да, под девизом "вы все равно не умеете работать в своей ОС, так что не все ли равно, на какой вам не уметь работать, давайте выберем ту, где вы принесете меньше вирусов из компьютерных классов": Linux + command line (для компиляции и запуска) + notepad++ (у нас, к сожалению, в учебных классах ставят зоопарк без этой зверюшки, поэтому кто в vim, кто в jeany, ибо тоже кроссплатформенные и студенты могут поставить их на домашних компах с виндоуз).
From: (Anonymous)
Он был школьник, я уже молодой специалист (в совсем другой области), оба не имели никакого опыта программирования, на двоих был один типа компьютер БК-0010-01. Что "программа это просто текст", для нас было как-бы с самого начала очевидно. Начали как водится с бейсика (он был там встроенный), очень быстро перешли на ассемблер. Там была прекрасная система команд, совсем не такая, как x86, в которой почти всё было можно, например можно было записать исполняемый код в видеопамять и он там работал, одновременно отображаясь в виде картинки. Брат там делал генетические алгоритмы, игру типа "жизнь" с разными экспериментами, я считал статистику для своей работы. В общем, у меня такое мнение сложилось, что если человеку это интересно, то его никак особо учить не требуется, надо просто показать как всё запускается (из командной строки, да, простейшим способом), дать документацию, потом оставить одного и не мешать.
From: [identity profile] theaspect.livejournal.com
к сожалению этот подход не масштабируется

Date: 2016-08-30 09:47 am (UTC)
From: [identity profile] link0ff.livejournal.com
У нас самый продуктивный программист использовал Notepad. У остальных продуктивность уменьшалась по мере приближения к IDE.

Date: 2016-08-30 03:54 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
А вот я в сторону ide (класса atom'а) поглядываю. Дедовский vim'овый метод с кучей параллельных файлов плохо работает.

Date: 2016-08-30 05:39 pm (UTC)
From: [identity profile] rustler2000.livejournal.com

Атом все еще косячный

Date: 2016-08-30 12:00 pm (UTC)
From: (Anonymous)
По-моему, всех россиян, родившихся не позже 80-х, так учили. По прозаической причине: доступ к компьютерам был ограничен. Текст программы писался на бумаге и только потом вбивался в файл (а иногда и не вбивался, а сдавался преподавателю, и он проверял его правильность по бумажному листу, т.е. компьютер в процессе обучения вообще не участвовал). Более того, на некоторых междугородних олимпиадах по программированию даже было правило: первые 30 минут турнира за компьютеры садиться нельзя, можно только писать на бумаге. Ну а что в командных турнирах на трёх членов команды один компьютер — это до сих пор так. Пока один кодит в IDE, другой пишет код другой задачи на бумаге.

Date: 2016-08-30 12:36 pm (UTC)
From: [identity profile] chva.livejournal.com
Я в 1994-м году в Петербурге ходил на олимпиаду по программированию, там задания выполнялись на бумажках.

Date: 2016-08-30 03:53 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
На всякий случай, FizzBuzz - это простая программа, или FizzBuzz на java?

public interface FizzBuzzSolutionStrategyFactory {

public FizzBuzzSolutionStrategy createFizzBuzzSolutionStrategy();

}

и всё такое?

Date: 2016-08-30 03:57 pm (UTC)
From: [identity profile] avva.livejournal.com
простая программа, конечно.

Date: 2016-08-30 06:12 pm (UTC)
From: [identity profile] pritkiy-kaban.livejournal.com
Чистка сортира зубной щеткой учит ценить швабру, факт. Только не все поймут подход.

Date: 2016-08-31 01:42 am (UTC)
From: [identity profile] boris epshtein (from livejournal.com)
Не огорчайтесь. Есть открыватели, а есть каталогизаторы старого, библиотекари, популяризаторы. Есть люди, которые пишут стихи, а есть те, которые читают вместо этого статьи о исландской поэзии 13 века. Есть те, которые спят с женщинами, а есть те, которые рассуждают о проблемах человеческой сексуальности. Это все совершенно нормально.

Date: 2016-08-31 08:06 pm (UTC)
From: [identity profile] akimka.livejournal.com
Я не понимаю смысла вопроса с физзбаззом. То, что пишется сразу без размышления:

for m in range(1,100):
_if (m%3==0) & (m%5==0):
__print('FizzBuzz')
_ elif m%3==0:
__ print('Fizz')
_ elif m%5==0:
__ print('Buzz')
_ else:
__ print(m)

не принимается из-за избыточности? надо типа красивее сделать? Можете объяснить в чем тут прикол? Ведь нигде не указывается при задаче этого задания, что его надо каким-то определенным образом делать.
Edited Date: 2016-08-31 08:08 pm (UTC)

Date: 2016-08-31 09:12 pm (UTC)
From: [identity profile] avva.livejournal.com
Это не "без размышления": то, что условие на 15 надо поставить первым, кажется вам очевидным, но людям, которые только-только выучили условные операторы, надо до этого додуматься. А совсем никчемные программисты просто не увидят подвоха и вначале поставят проверки на 3 и на 5, "точно по условию".

Физзбазз - это очень простая задача для сколько-нибудь компетентного программиста, и в этом ее особенность: то, что огромное кол-во кандидатов ее реально не могут сделать, что-то нам сообщает.

Date: 2016-08-31 09:20 pm (UTC)
From: [identity profile] akimka.livejournal.com
интересно. С учетом того, что я только начал учить программирование. Хочу поменять карьеру, так что, то что мозги работают "как надо" меня радует.

А то, на что вы дали ссылку, реализовано очень здорово тут:

https://www.hackerrank.com

там еще много всего. Мне как начинающему очень интересно - просиживаю теперь там целыми днями.

Date: 2016-09-01 12:49 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
https://blog.codinghorror.com/why-cant-programmers-program/

Date: 2016-08-31 09:25 pm (UTC)
From: [identity profile] akimka.livejournal.com
Кстати вот скажите опять таки, как опытный человек, то, что решение задачи "напишите функцию, которая считает медиану, первый и третий квантиль" заняло у меня около 30-40 минут это нормально или плохо?

n=int(input())
X = list(map(int, input().split()))

X= sorted(X)

def median(list):
 n=len(list)
  if n%2==0:
   return(sum(list[n // 2 - 1:n // 2 + 1]) // 2,list[:n // 2 ],list[n // 2 :])
  else:
   return(list[n // 2],list[:n//2],list[n//2+1:])

print (median(median(X)[1])[0])
print(median(X)[0])
print(median(median(X)[2])[0])
Edited Date: 2016-08-31 09:31 pm (UTC)

Date: 2016-09-01 07:09 am (UTC)
From: [identity profile] avva.livejournal.com
Ну это долго, конечно, для интервью например. Я бы хотел максимум 10 минут. Но если вы только начали учить программирование, то вполне нормально.

Я бы это по-другому написал, мне немного не нравится, во-первых, что у вас функция называется median но де-факто занимается не только этим, и во-вторых код не очень легко понять. Я бы наверное написал (предполагая то же определение первого и третьего квантиля, как у вас, а то они бывают разные) что-то типа:

def median(list):
  n = len(list)
  if n%2 == 0:
    return (list[n/2-1]+list[n/2])/2.0
   else:
     return list[(n-1)/2]

X=...
X = sorted(X)
n = len(X)
half_n = n // 2

print(median(X[:half_n])
print(median(X))
print(median(X[n-half_n:]))


Date: 2016-09-01 05:05 pm (UTC)
From: [identity profile] gruimed.livejournal.com

Ищу нечто похоже для 12ти летнего ребенка...

Date: 2016-09-07 09:37 am (UTC)
From: [identity profile] theaspect.livejournal.com
https://scratch.mit.edu/
http://www.kodugamelab.com/

Date: 2016-09-09 06:06 pm (UTC)
From: [identity profile] krech.livejournal.com
Не очень понятно что имел в виду gruimed - что на что должно быть похоже.

Но безумный интерфейс Scratch'a не имеет никакого сходства с написанием кода в Notepad.

P.S.
Если говорить о том, что использовать для обучения 12-летнего ребенка программированию - то, по моему глубокому убеждению, это должен быть SmallBasic.

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

Практически отсутствующий порог входа, и достаточно плавная кривая обучения далее, на несколько месяцев-полгода-год.
Edited Date: 2016-09-09 06:15 pm (UTC)

Date: 2016-09-09 06:27 pm (UTC)
From: [identity profile] avva.livejournal.com
Посмотрел на SmallBasic, спасибо (так, бегло, не запускал сам). Довольно интересная штука. Я сам недавно думал о преимуществах Бейсика как первого языка. Но мне кажется, что что-то вроде GW-BASIC'а еще лучше бы подошло (особенно с такой прекрасной средой). Почему:

- номера строк помогают четко понять, что происходит и сформировать внутреннее представление программы как последовательности строк кода
- отсутствие структурного программирования, т.е. GOSUB 900 и RETURN вместо Sub/EndSub, поощряют ребенка учиться "дебагировать в уме"
- нету всех этих TextWindow.Write, которые лишний уровень абстракции. Есть просто функции.

Как вы думаете? Это ностальгический бред с моей стороны или действительно неплохо было так попробовать?

Date: 2016-09-09 07:08 pm (UTC)
From: [identity profile] krech.livejournal.com
Номера строк в SmallBasic'e тоже есть, но в современном стиле, т.е. просто IDE показывает номера строчек.

Старинные, обязательно указываемые номера строк на мой взгляд не нужны, равно как и Goto/Gosub c номеров указанием.

Я довольно много писал в этом (с номерами) стиле в своё время, шедевральные спагетти получались - но не считаю что навык их распутывания полезен в будущем, если конечно не стоит задача готовить ассемблериста. Опять же придеться объяснять почему нумеруем не подряд а 10-20-30 и зачем нужна команда ren.

Думаю что структурный подход куда более здоровый и естественный.

Насчёт "просто функций" - вполне можно было бы сделать и так.
С другой стороны всякие "Turtle.Move (100); Turtle.Speed=9" - дают как бы некоторый заход в объекты, а с учетом автодополнения писать их не проблема.
(хотя конечно очень много можно было бы изменить/улучшить)



Основное чем берёт SmallBasic - это даже не синтаксис, который мог бы быть и другим, совсем не бейсиковым.

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

Нет этих чудес типа
public class GoodFirstProgram
{ public static void main( String[] args )
{ System.out.println( "Hello World!");}}
...
Open a command prompt. (Start Menu | All Programs | Accessories | Command Prompt) Then type, in order, the commands below...

(с) programmingbydoing.com

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


Другой важный момент - это достаточно толковая интеграция Лого-черепашки с бейсиком, что делает обучение ещё более наглядным. И что немаловажно - более увлекательным. Нынешних детей со смартфонами и компьютерными играми трудно впечатлить вещами типа "print 2+3", а вот с Turtle.Move и т.д. можно вполне весело куролесить, как показывает практика.
И на перемещения черепашки отлично ложатся и циклы, и переменные, и подпрограммы...
Edited Date: 2016-09-11 05:40 pm (UTC)

Date: 2016-09-09 06:22 pm (UTC)
From: [identity profile] krech.livejournal.com
"...wrote their first Java programs in Notepad and compiled and ran it from the command-line."

С самого начала отсеять всех тех, кто не умеет работать в командной строке и не отличается усидчивостью - оставив наиболее подготовленных и мотивированных?

Что ж, и такой подход в какой-то мере имеет право на существование.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
2829 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 09:58 pm
Powered by Dreamwidth Studios