Основы программирования. Часть 0.

Пост для тех, кто хотел научиться программированию, но не знал с чего начать. Это мой дебют и как пикабушника, и как учителя, так что жду советов и критики)
Основы программирования. Часть 0. Пост для тех, кто хотел научиться программированию, но не знал с чего начать. Это мой дебют и как пикабушника, и как учителя, так что жду советов и критики)
Вы смотрите срез комментариев. Показать все
23
Автор поста оценил этот комментарий
Начинать изучение программирования с JS? Серьезно?
Иллюстрация к комментарию
раскрыть ветку (88)
16
Автор поста оценил этот комментарий
правильно надо как раньше, с паскаля))) в ДОСе.
раскрыть ветку (29)
9
Автор поста оценил этот комментарий
Ага ) С Ассемблера. Что бы сразу учились писать оптимальный код, а не гавнокостыли. Что бы операторы циклов воспринимали как манну небесную. Строгой типизации поклонялись. И молились на синтаксический и семантический анализаторы.
раскрыть ветку (20)
2
Автор поста оценил этот комментарий
Хороший код != оптимальный код. Если вы пишете под микроконтроллеры-да, надо делать оптимально. А если вы говнячите какой то Java EE проект-то тут надо нафигачить быстро, и что бы потом школьник знакомый с JEE смог так же быстро переделать что то там. А вообще - идея начинать с ассемблера сама по себе отличная, нужно хотя бы знать на пальцах что же там реально происходит в процессоре:)
раскрыть ветку (7)
2
Автор поста оценил этот комментарий
"нужно хотя бы знать на пальцах что же там реально происходит в процессоре" - это по другому курсу, предшествующему программированию. "Архитектура компьютера" называется. Как по мне, без этого курса вообще нельзя начинать программировать.
раскрыть ветку (4)
Автор поста оценил этот комментарий
блин ну хз, у нас была архитектура на 1ом курсе, вникнуть было тяжко(очень-очень тяжко). После паскалей, делфей уже сам решил почитать все стало намного легче
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Иллюстрация к комментарию
ещё комментарии
ещё комментарии
Автор поста оценил этот комментарий
Уже давно время затраченное на разработку дороже чем железо.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Боже, как же сложно пикабушникам думать, посмотрите зп и стоимость железа, а потом сравните, сделайте вывод.
Автор поста оценил этот комментарий
Асм != оптимальный код. + Что бы еще и здесь начали холивар какой синтаксис лучше: AT&T или INTEL? А потом еще трансляторы GAS,MASM, FASM, NASM и т.д.?
раскрыть ветку (8)
Автор поста оценил этот комментарий
ALASM наше фсё!)
раскрыть ветку (7)
Автор поста оценил этот комментарий
AT&T )))) :-P
Автор поста оценил этот комментарий
Спесси, Z80... о_О Еще кто-то пишет для спесси?
раскрыть ветку (5)
Автор поста оценил этот комментарий
Уже нет( И даже исходники на дискетках похерил вместе со спектрумом. Хотя там движок игрушки был готов+редактор карт. Художник был) Сценариста и руководителя не было, оттого и не закончили.

А вообще удивительно - помнят же ш люди!!))
раскрыть ветку (4)
Автор поста оценил этот комментарий
Как его можно забыть?? Дисковод, размером с видеомагнитофон, дискеты по 5 дюймов... :)
Иллюстрация к комментарию
раскрыть ветку (3)
1
Автор поста оценил этот комментарий
Ну, ты бы еще кассеты бы вспомнил)) У меня уже 3.5 были, считалось это круто)
раскрыть ветку (2)
Автор поста оценил этот комментарий
Кассеты фу, гадость :( Как зажуёт, так сидишь волоса на жопе рвёшь... А игру загрузить - 5 минут ждать!! Сука, и ведь ждали же!!! Ошибка чтения, всё заново... И звук этот трр-т-т-тррр :D
раскрыть ветку (1)
Автор поста оценил этот комментарий
Ага, и бордюр мигает)) на демосцене одно время было модным бордюр в работах использовать - при выборе нужной частоты появлялись гламурные полосочки, а некоторые даже бегущую строку фигачили))

Эх...
ещё комментарий
2
Автор поста оценил этот комментарий
Вам смешно, а наш колледж на первом семестре первого курса даёт только паскаль и только в ДОСе. До сих пор. (ВКИ НГУ)
раскрыть ветку (3)
4
Автор поста оценил этот комментарий
Паскаль для основ идеален.
Автор поста оценил этот комментарий
В принципе правильно, если только полгода. Для изучения азов в самый раз. А так лучше с С начинать. И никаких скриптовых языков и/или языков без строгой типизации.
Автор поста оценил этот комментарий
1\8 обучения на Паскале - нормально. Но и его не все могут освоить. А если бы был С, как на 2 семестре? Было бы в разы хуже.
Автор поста оценил этот комментарий
с "basik" на "электронике"
1
Автор поста оценил этот комментарий
Что значит "как раньше"? я год назад поступил и нас этот год не подпускали к другим языкам, пока мы не будем идеально понимать Паскаль :D
Правда, нам дали некую свободу и разрешили самостоятельно выбрать компилятор.
2
Автор поста оценил этот комментарий
Но для начинающих есть же питон. Он куда юзабельнее паскаля (в плане того, что много кто на нем пишет реальные проекты), но при этом куда проще его по структуре. С JS я практически не знаком, но, по-моему, питон человеку без представления о программировании будет освоить проще.

ПЫСЫ: Последнее предложение - чисто имхо.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Согласен. Сам сейчас Python учу. Все ясно и логично. Только не совсем понятно, что дальше делать, как со специализацией определиться...
11
Автор поста оценил этот комментарий
А вы предлагаете с Си? Я выбрал JS в первую очередь потому, что он уже есть на компе у каждого пользователя. А еще JS прощает некоторые ошибки новичков, типа забытых точек с запятой. Для изучения других популярных языков нужно ставить дополнительное ПО, а большинству это делать просто лень. А еще статьи будут не про веб-программирование.
раскрыть ветку (47)
9
Автор поста оценил этот комментарий
"А еще JS прощает некоторые ошибки новичков, типа забытых точек с запятой"
Новичкам как раз таки нельзя такие ошибки прощать. Нельзя баловать их такой роскошью.
"Для изучения других популярных языков нужно ставить дополнительное ПО"
Если человек не хочет (или не может xD) поставить IDE, то ему и не надо в программирование.
P.S. Вообще я не понимаю суть подобных постов. Если человек хочет изучать программирование - он сам начнет, сам найдет учебник, сам будет изучать. А если не хочет, то и 1000 подобных постов-уроков не сделают из него программиста. =/ Ну, это мое мнение и оно не претендует на место истины в последней инстанции.
раскрыть ветку (33)
6
Автор поста оценил этот комментарий
"Новичкам как раз таки нельзя такие ошибки прощать"
В принципе вы правы. Но программирование, это в первую очередь умение сформировать алгоритм Я планировал сделать упор именно на продумывании алгоритмов, а не на изучении правил конкретного языка.

"Если человек не хочет (или не может xD) поставить IDE"
Кроме IDE нужно ставить еще интерпретатор/компилятор. А тут можно сразу работать, даже не сворачивая эту страницу. Для многих самое сложное - это перебороть лень и начать заниматься, чему очень поспособствует сокращение необходимых телодвижений.

"А если не хочет, то и 1000 подобных постов-уроков не сделают из него программиста"
Среди моих знакомых много людей, от которых я часто слышу "Программирование это так сложно", "Я бы в жизни не смог(ла) написать программу" и так далее. Я же попытался показать, что программирование не так страшно, как кажется. Возможно у меня получилось плохо, но это уже вам судить)
раскрыть ветку (30)
2
Автор поста оценил этот комментарий
"Я планировал сделать упор именно на продумывании алгоритмов, а не на изучении правил конкретного языка"
Есть игры, обучающие продумыванию алгоритмов, например: http://code.org/learn
В первом посте есть только один пункт, который может заинтересовать в обучении - мы напишем игру. Когда-нибудь. Может быть... Дальше игры нет, сплошная математика, какие-то абстрактные понятия. Например типы. Их можно потрогать, увидеть? Нет. А почему "3" + 5 = "35", а не 8? В строго типизированных языках можно хотя бы сказать, что компилятор тупой как пробка и сам не может отличить числа от строки, но тут-то он вроде и умный, что во многих случаях как-то сам разбирается, а с другой стороны все такой же тупой. Булевы значения для многих вообще вынос мозга. Вроде всего два значения, но почему 5>3 - это некоторое true, над которым еще можно совершать операции - это недоступное для совсем новичков знания. Зато if (5>3) значительно легче понять - это конкретное действие: если 5 больше 3, то что-то сделать.
Для базового уровня стоит отходить от абстракций и больше ориентироваться на какие-то действия. Черт возьми, меня отец в начальных классах учил рисовать на визуалбэйсике. Рисовать, черт возьми - может показаться, что это не самое лучшее применение программирования, но оно как-то меня зацепило. Я делала линейные программки, которые просто проводят линии из одной точки в другую и складываются в картинку. А потом отец спросил, хочу ли я оживить картинку и на следующий день я уже умело орудовала переменными, условиями, циклами, потому что я видела результат. А просто подсчитать 3+4 - это абстракция, а не результат.
PS. Оформление нравится, а по содержанию - походит на обычный учебник :(
раскрыть ветку (23)
Автор поста оценил этот комментарий
"Например типы"
Про приведение типов будет в следующей статье. Изначально хотел запихнуть в эту, но подумал, что в плане обучения лучше малый объем статей, которые при этом выходят часто, чем огромный объем текста, продолжение к которому выходит раз в пол года.

"Зато if (5>3) значительно легче понять - это конкретное действие: если 5 больше 3, то что-то сделать."
Тут вы скорее всего правы и в большинстве обучающих материалов так оно и дается, но мне захотелось попробовать по-другому.

"А просто подсчитать 3+4 - это абстракция, а не результат".
Вы одновременно и правы и ошибаетесь. Все зависит от того, что это за числа. Если они взяты из головы, то да, это абстракция. Если они взяты из домашнего задания по математике - то это результат, который можно сразу использовать.

"Оформление нравится"
Спасибо)

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

"Если они взяты из домашнего задания по математике - то это результат, который можно сразу использовать."
Это верно, но домашку уже считают калькуляторами, которые выполняют те же функции, только привычнее :) Хотя да, без калькулятора в программировании никуда.

Я там дальше читала что-то про ООП в следующем уроке... Может все же повременить и дать условия, циклы?.. ООП - штука интересная, но только не в JS. Если при переходе на ООП в классических языках происходит сдвиг по фазе в голове (с пиханием объектов куда не попадя), то в джаваскрипт объекты - это вообще сдвиг по фазе... Или очень в общем их описать. Когда я объясняла что такое ООП - то лучше всего работал отдаленный от программирования пример про мебельную фабрику, которая имея схему (класс) может создавать объекты (стулья) с разными свойствами (породы дерева, обивка). От этого можно плавно перейти к мысли, что все - объекты, стулья - объекты, дома - объекты, которые содержат в себе квартиры - объекты, в которых живут люди - объекты, которые пишут функции-объекты, создают переменные-объекты, и даже 1+1 - это операция над двумя объектами, мухаха! Хм... Что-то я увлеклась...
раскрыть ветку (11)
1
Автор поста оценил этот комментарий
"пример про мебельную фабрику"
Собирался объяснять подобными примерами, правда пока без "фабрики", а только на примерах готовой "мебели". В JS и так даже скалярные значения являются объектами, так что с Классами можно и повременить)
Хотя тут надо еще подумать, что бы описать все максимально понятно...
раскрыть ветку (10)
Автор поста оценил этот комментарий
Лучше в следующем уроке помочь читателю написать простенькую программку с условиями :) Осталось только придумать программку...
раскрыть ветку (9)
Автор поста оценил этот комментарий
Это самое сложное)))
Хотя пара идей у меня есть)
раскрыть ветку (8)
1
Автор поста оценил этот комментарий
Скооперируйся с nekonyash и вместе выработайте методику подачи материала:)
раскрыть ветку (6)
Автор поста оценил этот комментарий
Спасибо за пост
Особо программированием не интересуюсь ,но занять время можно
Довольно интересно)
Подписался
P.S. Объясняете на порядок лучше моего информатика :D
За Мику отдельный плюс)
DELETED
Автор поста оценил этот комментарий
"Про приведение типов будет в следующей статье."
Расскажешь почему [] + [] == ''; {} + {} -> NaN; {} + [] == 0; '' + {} == "[object Object]", а {} + '' == 0 и кучу других приколюх?)
ещё комментарии
Автор поста оценил этот комментарий
>> А почему "3" + 5 = "35", а не 8?
О_О
Это в каком таком языке сложение со строкой даёт число???
раскрыть ветку (3)
1
Автор поста оценил этот комментарий
Это джаваскрпт, детка! Это хардкор!
А на самом деле все логично. Ты строку складываешь с числом. А вдруг в строке есть символы? Компилятору же лень проверять, действительно в строке "3" только число, так что он преобразовывает 5 в строку и применяет операцию соединения строк. Вот и получается, что "3" + "5" = "35". Как "а" + "b" = "ab".
А вот в php отдельная операция для соединения строк и сложения чисел. Так что там "3" + 5 = 8. И "3nvfdkgldf" + 5 = 8. Зато "авыаыв3" + 5 = 5. Потому что ленивое преобразование типов, ибо нефиг :)
раскрыть ветку (2)
Автор поста оценил этот комментарий
Про "3nvfdkgldf" + 5 = 8 забавно, не знал, что где-то такое есть.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Если вникать в мелкие детали - там много забавностей можно найти :) Просто нужно через год кодинга на одном языке открыть учебник с основами - там окажется довольно много маленьких деталей, про которые уже забыл из-за того, что изначально плохо понимал язык.
Кстати, в этом плане кого-то учить хорошо, так начинаешь читать учебник, чтобы материал лучше подать и находишь что-то давно забытое :)
Автор поста оценил этот комментарий
я так понимаю, автор хотел показать саму концепцию программирования на примере какого-то простого языка, и в общем то мое имхо-он сделал это хорошо. респект за понятное изложение.
Автор поста оценил этот комментарий
если смотреть с точки зрения "умение сформировать алгоритм"
то нет смысла вообще учить программирование.
по большому счету все типовые задачи давно решены и работа сводится к собиранию конструктора.
а вообще по алгоритмам есть целые курсы.

по поводу IDE - она включается компилятор как правило.
в некоторых случаях - интерпретатор.
1
Автор поста оценил этот комментарий
Главное продолжай делать посты)
ещё комментарии
2
Автор поста оценил этот комментарий
Золотые слова - "Если человек хочет изучать программирование - он сам начнет, сам найдет учебник, сам будет изучать".

Сейчас учись не хочу, и хабр, и стэковерфлоу и тонна инфы в гугле.... Раньше купишь книжку и изучаешь, что как да почему... А если не работает перечитываешь дважды....
раскрыть ветку (1)
Автор поста оценил этот комментарий
согласен. Так же не вижу смысла тратить на эти посты время и силы.
Все, что нужно знать - синтаксис и алгоритмы. Хотя бы немного.
А для этого надо всего лишь уметь читать.

Когда ко мне на курсы по безопасности веба в вуз приходят студенты ( как правило, нулевые), я им предлагаю самостоятельно за 2 недели разобраться с js, php, sql синтаксисом. Через 2 недели от 50 человек остается 5, с ними-то я и работаю.
1
Автор поста оценил этот комментарий
"Для изучения других популярных языков нужно ставить дополнительное ПО, а большинству это делать просто лень" - если человеку лень сделать несколько кликов мыши по инструкции, то ему программирование ни к чему
Автор поста оценил этот комментарий
C нетерпением жду как ты будешь объяснять вот такие вот моменты:

typeof null;
typeof function(){}

NaN === NaN;
NaN == NaN;

function Counter(){ this.count = 0; setTimeout(function(){ this.count++ }, '1000');} start = new Counter()

for (var key in animals) { setTimeout(function(){ console.log(key) }, '5000') }

Пока хватит )))
раскрыть ветку (5)
DELETED
Автор поста оценил этот комментарий
1 - 2) в js 6 типов насколько помню object, number, boolean, string, function, undefined всё что не число, строка, функция,булеан или неопределенная хрень - объект(хотя есть и объекты String, Boolean, Number - которые по typeof - object, в отличии от Function - которя верна себе потому что возвращает не объект а анонимную функцию), вроде как то так.
3-4) NaN - это образно говоря не число, так что тут логично не число не равно не числу
5) область видимости же, в function(){ this.count++ }, '1000';} переменная count не определена, и в итоге к пустому объекту прибавляется единица, а то NaN
6) если правильно понял косяк в setTimeout и в переменной key - которая глобальная, устанавливается три таймера, каждый из которых запустит анонимную функцию с console.log(key), но на момент запуска key ,но на момент их запуска key будет присвоено значение последнего ключа, поэтому вывод будет одинаковый
JS знаю плохо, поэтому где не прав поправьте
раскрыть ветку (2)
Автор поста оценил этот комментарий
JS знаю плохо

Вот и не лезь. Вопрос конкретно к автору. JS полон подводных камней, вот пусть объясняет.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Ебало прикрой наркоман
ещё комментарии
Автор поста оценил этот комментарий
Зачем сразу Си? Вы пробовали гуглить списки ЯП? Есть тонны языков созданнных специально для новичков и для обучения. К тому же JS несмотря на свою простоту имеет один существенный недостаток - он более чем весь состоит из нюансов, новичок как бы не старался всё равно будет косячить и метаться по граблям.
раскрыть ветку (3)
Автор поста оценил этот комментарий
Перед тем, как учить кого-то языку, надо знать его самому. С JS я достаточно хорошо знаком, а вот с тем же Питоном, например, только "на вы". А еще, языки, созданные специально для новичков, редко имеют практическое применение и по ним очень мало информации.
раскрыть ветку (2)
Автор поста оценил этот комментарий
Языки для обучения и не должны иметь практического применения, они созданы исключительно для того, чтобы научить людей думать "алгоритмически", чтобы люди поняли основные концепции программирования. ЯП реального применения намного проще изучать, когда уже имеется какой-то фундамент знаний и умений по программированию.
ещё комментарий
Автор поста оценил этот комментарий
а еще тут таких как ты было много и все они больше 3 статей не писали
Автор поста оценил этот комментарий
Необходимо СРАЗУ приучать к жестким условиям синтаксиса. Даже во всепрощающем JSе из-за отхода от норм синтаксиса опосля можно получить весьма неприятные баги. И учить программировать надо на языках, компиляторы которых создают нативный процессору код. А то наплодится даунов, которые ОС для мобильников на java пишут. Не верите? Исходники Ведроида качните.
1
Автор поста оценил этот комментарий
Почему бы и нет?
4
Автор поста оценил этот комментарий
В Школе программирования так же учат с JS. Притом отлично получается.

Основы программирования
Видеокурс http://geekbrains.ru/courses/58

Основы программирования
Онлайн-курс http://geekbrains.ru/courses/2
1
Автор поста оценил этот комментарий
Подскажите, с чего начинать тогда? Есть школьные познания в qb.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Delphi или C (оригинальный C, а не С++ или C#).
Автор поста оценил этот комментарий
А если с Питона, то норм?
раскрыть ветку (3)
1
Автор поста оценил этот комментарий
Мне кажется, нужно начинать со статической типизации
Автор поста оценил этот комментарий
Ну питон очень легкий, для обучения в принципе годится
Автор поста оценил этот комментарий
Норм. Бейсик тоже норм.
1
Автор поста оценил этот комментарий
Да ещё и в консольном интерпретаторе?
Иллюстрация к комментарию
ещё комментарий
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку