Pull to refresh
-1
0

программист на Go/Python

Send message

Преподаватели, которые готовят к олимпиадам, действуют по принципу Парето (супер результаты всегда показывает меньшинство, по какому бы уровню мы не проводили отсечку: чтобы подготовить одного олимпиадника, нужно начать заниматься с 50-ю детьми, у которых есть хоть какие-то задатки) и их программы подготовки просто хорошие. Хотя с тем, что для реально слабой группы они вряд ли подойдут, я согласен.

  1. Да, действительно про 40 часов я упустил, извините. Но я и не видел свой список как критику изначального поста, скорее появилось желание резюмировать.
    Ещё один момент заключается в том, что в случае обучения с полного нуля каждый лишний кусок информации — плохо. Особенно плохо, если в самом начале требуется делать много "магии": ты сейчас не поймёшь, просто запомни. Когда в самом начале детей сажают в IDE с интерфейсом авиалайнера, они создают папочки "проектов", когда нельзя просто вывести на экран 2+2, а нужно написать


    #include <stdio.h>
    int main( void ) {
    printf("%d", 2+2);
    }

    то это реально путает и пугает. Именно поэтому начинать с Java или C#, где шагу нельзя ступить, не создав класс (аналогичный по непонятности и многословности кусок получается), неправильно. И именно в этом плюс Python для обучения. Там можно просто написать


    print(2+2)

  2. Это далеко не только мой опыт. То, что уровень поступающих — ключевой фактор, понимают очень много людей. Неспроста многие рейтинги вузов одним из главных факторов берут баллы ЕГЭ поступающих.


  3. Я имел в виду лучших представителей преподавательского сообщества, а не всех подряд. Посмотрите на списки победителей и призёров олимпиад по информатике Московской области: Дубна, Мытищи, Долгопрудный, Королёв. Вот в таких местах концентрируются талантливые дети (ученики всяких там лицеев при вузах, интернатов и пр., дети работников этих "наукоградов") и соотв. преподаватели. И опять же — я когда писал, то не критиковал напрямую вас — это далеко не первая статья на хабре про эти проблемы и это первый раз, когда я такую статью прокомментировал, поэтому отвечал сразу "облаку воображаемых адресатов". Надо было быть точнее в формулировках.


5-й год преподаю в школе по совместительству (вообще я пишу на Си под Linux всякие low-level и high-load вещи и прошивки для FPGA), учу детей в маленьком центре дополнительного образования в Подмосковье.


  1. Большинство этих центров — шлак, который работает по той же системе, что развлекательные бизнесы (а родители думают, что за деньги получат лучший результат, чем в школе). Особенный треш — кружки робототехники — после них никаких систематических познаний ни в механике, ни в программировании у 99% детей нет — просто хорошо поиграли в чужой Лего за деньги, на которые можно купить свой. На хороших кружках робототехники действительно учат основам программирования на базе Scratch-подобных графических языков, рассказывают про зубчатые передачи, ремни и пр., готовят к НПК. Но уложить и то, и другое за ограниченное количество занятий очень сложно.
  2. Тех, кто даёт детям, начинающим изучать программирование с нуля, ООП нужно больно бить чем-нибудь тяжёлым. У среднего семиклассника проблемы с отрицательными числами и напрочь забыта Декартова система координат, о том что такое уравнение, выражение и переменная в математике у него самое смутное представление. Они долго и трудно въезжают в алгоритмическую конструкцию "следование" — понятие переменной, как чего-то, что хранит состояние, операция присваивания — это просто взрыв мозга для значительно числа детей 7-9 кл., которые до этого не видели программирования. Если начинать с нуля, то при занятиях раз в неделю с не самыми тупыми детьми можно начинать разговор о ветвлении через месяц-полтора, а о циклах — через три. О массивах — через полгода. Это хороший темп для детей чуть выше среднего.
  3. Легче всего забыть насколько же мы все были тупыми в их возрасте. Труднее всего не позволять себе гнать вперёд, чётко контролировать настоящие знания каждого (т.е. то, что он/она может сделать сам, без подсказок, подглядок и помощи товарищей)
  4. Группа должна быть до 15 человек. Если преподаватель хороший, то он даже при таком размере может обеспечить более-менее индивидуальный подход.
  5. ДОЛЖЕН БЫТЬ ОТБОР. Нельзя сажать вместе "нулевых" и тех, кто уже ходил на районную олимпиаду, только писал на Pascal. Главная тайна всяких гарвардов и пр. "элитных" вузов: средний уровень поступающих — определяющий фактор успеха. С сильной группой можно вести разговор на совершенно другом уровне. Я бы сказал, что сильная группа вытерпит даже не очень хорошего преподавателя, а слабая группа не достигнет ничего даже с очень хорошим.
  6. Начинать нужно либо с простого функционального языка типа Scheme (но никто сейчас так не делает, даже я только мечтаю), либо с простого процедурного языка или поддерживающего эту парадигму типа Pascal/Python/Go/Javascript или даже C. Java/C#/С++ — плохая идея.
  7. Вы вряд ли придумаете более хорошую программу, чем уже выстрадана хорошими учителями ещё с советских времён. Зайдите на сайт Полякова (автор учебника), скачайте пару учебников, если у вас есть минимальный опыт преподавания, то вы не будете смотреть на блок-схемы и последовательность простая арифметика — простой ввод/вывод — ветвление — циклы — массивы свысока.

Как опознать говённый кружок для детей:


  • выйти на контакт с преподавателями до оплаты нереально — с вами разговаривают девочки на телефоне, которые назойливо и подлизываясь впаривают товар, при этом не могут поговорить по сути
  • в группах сильный разброс по уровню (на этапе созвона можно спросить про разброс возраста — если мнутся или говорят, что он больше 3-х лет — сразу до свидания) — да, когда нужно срубить бабла, а народу мало, то 11-классник садится рядом с 7-классником и у них разная скорость освоения материала, потому что какой бы говённой ни была математика в школах, мозги всё-таки как-то растут, в итоге либо одному скучно, либо другой на грани истерики от непонимания
  • мало практики, нет хорошего домашнего задания каждую неделю, а сами занятия проходят в формате бла-бла-бла у доски или "смотрите как я умею" с трансляцией экрана и просьбой набить то же у себя
  • с вами никогда не спорят (Ваш Вовочка из 7-го Б хочет программировать игры на C# под Unity? Никогда до этого не программировал, а в школе информатики не было? Но ведь… Всё равно хочет? Ну хорошо, приходите). 99% родителей далеки от тематики образования, сами зачастую школу не любили, и не понимают, что четвёрка по математике превращается в тройку по физике в следующем году и пр.


P.S. Министерство образования должно быть распущено в полном составе, вплоть до районных управлений образования. Эти люди просто не нужны. Хорошие преподаватели лучше их знают что и как преподавать, на плохих никакой управы нет, а всё остальное, что имеет значения — это зарплата и помещения.

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

Хотя есть исключения. Тот же Ricky Gervais, который имеет чисто французскую фамилию Жерве, но сам произносит её как Джервейс

На закуску: пианист родом из Южной Африки — Christian Bezuidenhout — Кристиан Безёйденхаут
Александр Джуллиард (Alexandre Julliard)


Жуйяр. Александр Жуйяр.
Для тех, кто не владеет хотя бы навыками чтения основных европейских языков давно придуманы
практические транскрипции
Я разработчик для ПЛИС. Практически в каждом достаточно сложном проекте в состав конфигурации FPGA входит ARM-ядро (Microblaze). А сейчас Intel и Xilinx выпускаются гибриды — ARM + FPGA на одном кристалле.

Потому что делать на конечных автоматах то, что можно написать на Си — нерационально. Быстрее разработка, легче отладка, меньше ошибок, кушает меньше ресурсов. Потому что у FPGA конечное число логических вентилей и ЛЮБОЙ кусок логики или необходимость помнить что-то (если только не используется внешняя память — а DDR3 на платах с FPGA часто встречается) расходует эти ресурсы. Более того — с приближением к этому лимиту сильно возрастает сложность задачи по разводке схемы, она может даже не развестись с нужными скоростными характеристиками. Дешёвые FPGA стоят совсем недорого, каждый купить может какой-нибудь Microzed, а быстрые стоят тысячи долларов. А для серьёзных задач нужны быстрые. Реализовать процессор на FPGA можно, только вы получите 32-битный медленный аналог CPU 20-летней давности за сумасшедшие деньги. FPGA адекватны только для особого спектра задач, например для высокоскоростной потоковой обработки данных, когда вы пишете несколько конечных автоматов, на выходе будет стоять, скажем IP-ядро контроллер Ethernet MAC-уровня, а если есть несколько тысяч долларов и лишние ресурсы, то можно даже сделать TCP/IP. Но для такой задачи нужно разработать свою печатную плату (а иногда не одну), произвести её (это очень дорого по сравнению с любыми Xeon)

А ещё область разработки для FPGA — это заповедник проприетарщины. Честно, тут нечему завидовать. Тут ситуация как в разработке ПО до появления Open Source — платные «компиляторы» и пр.

И чтобы 2 раза не вставать: нет, квантовые компьютеры никогда не заменят обычные. Они работают по совершенно другому принципу, для них известно всего пара десятков очень узконаправленных алгоритмов и максимум, что их ждёт — роль сопроцессоров для спец. вычислений (криптография, некоторые области математики и пр.). Если удастся создать квантовый компьютер с достаточным числом кубитов (а вероятность этого экспоненциально уменьшается с каждым новым кубитом)
Респект :) На самом деле людей, которые хорошо знают предмет и умеют понятно и интересно рассказать другим, очень мало.
Я тоже долго хейтил С++ и топил за Си. В итоге согласен с тем, что сейчас писать на Си практически нет смысла, особенно если нужен быстрый код — у С++ реально получается быстрее (и даже меньше по размеру). У него только один минус — это дьявольски раздутый и сложный язык. Но возможно оно того стоит.
Моё мнение полностью опрокинул вот этот доклад:
youtu.be/PDSvjwJ2M80
Нетехнические проблемы техническими методами не решаются. Можете хоть обмазаться медиумами и иггдрасилями, согреться ими или съесть их не получится.

P.S. Прямо демотиватор нужно сделать на базе той собачки в горящем доме: «в стране закончилась гречка» — «программист: а что, если придумать новый децентрализованный протокол для анонимного обсуждения того как всё в стране плохо?»
У него комплекс Тараса Бульбы («я тебя породил, я тебя и убью») и непонимание того, что если один раз повезло и Node.JS «выстрелил», то это не значит, что «выстрелит» снова; что успех Node ему не принадлежит, им не определяется, и, возможно, случился не по тем причинам, по которым он думает сейчас или думал тогда. И т.д. и т.п. А в общем это всё также смешно как нынешние попытки Тима Бернерса Ли и Роба Пайка (см. upspin) воевать с тем, во что превратился Интернет, Джимми Уэлса — с Facebook и пр.
Спасибо за фикс с pytest!!!
Я начинаю приходить к мысли, что «на ловца и зверь бежит», и что человеку с определённым образом мыслей, поведением и стилем решения проблем, в итоге всё чаще предлагают работу, которая ему подходит. И этот процесс может проходить даже в одной и той же компании при формально одной и той же должности.
В современном Python можно проставить аннотации типов (притом эта система аннотаций выразительнее Golang) и о несоответствии типов сообщит современная IDE (типа PyCharm) или инструмент типа mypy ещё на этапе написания. А в рантайме Go может выдать не меньше ошибок — например, при работе с map, или при парсинге HTTP-запроса, или при парсинге шаблона для html/template с диска, или при попытке заполнить структуру из JSON, пришедшего от фронтенда.
А когда понимаешь, что никак не получится создать функцию, которая бы принимала на вход любые структуры, имеющие определённый набор полей, то становится действительно горько.
Использовать interface{} и приведение типов? Ага, и править бесконечные switch-statements по всему коду при добавлении нового типа? Это классический антипаттерн «как не надо делать полиморфизм», который дядюшка Боб приводит в каждой второй лекции.
Использовать interface{} и рефлексию? Это всё распространится как рак по всему коду, также «безопасно» как указатели в Си и ужасающе неудобно.
И вообще: interface{} — это та же динамическая типизация, только хуже, потому что неудобно и то, что Python делает автоматически, придётся писать вручную. Его применение считается в Go антипаттерном и неспроста.
Есть ещё один вариант, по которому большинство и идёт: копипастить код как обезьяна. Нет, спасибо.
Нет, не перевесили. Я действительно жалею, что не начал на Python (при всех его недостатках).
Обобщённое программирование (или динамическая типизация, которая его по сути подразумевает) требуется для написания хорошего чистого кода, где намерение выражено явно, нет дублирования, код короткий насколько это возможно, написан на должном уровне абстракции и т.д.
Я изучил Go и написал на нём пару проектов. Плююсь до сих пор и жду введения обобщённого программирования. Они так зациклились на том, чтобы сделать трудным написание плохих программ, что сделали трудным написание хороших.
А как замена C/Python для простых командных утилиток — пойдёт.

Тот же C тоже бывает разный. Есть студенты, которые пилят говнокод для Ардуино, а есть люди, решающие задачи, которые по большому счёту ни на чём кроме С и не решить, использующие API Linux, которые нигде в литературе не описаны, поэтому им приходится изучать патчи ядра, lwn и списки рассылки.
Я согласен в том плане, что люди, которые говорят «дженерики» в большинстве своём знакомы с ними по конкретной реализации (например, в Java) и не очень представляют что это за понятие, что оно подразумевает и как реализовано в разных языках. Потому что обобщённое программирование есть во всех динамически типизируемых языках по определению (от LISP до Python и JS), в Haskell, в Rust… и зачастую требования «сделайте нам дженерики» подразумевает «сделайте как в C#/Java/C++», что является неверной постановкой вопроса.
Говорить «дженерики» — имхо, то же самое, что говорить «чай матЭ» («матЭ» по-испански — «убил», а трава называется правильно «йЕрба мАтэ») или «ты какой чай пьёшь: чёрный или зелёный?» («я люблю разный чай — от гуандунских улунов до хэй ча»).
Да какие проблемы? В аннотациях типов Python используются []
Пусть уже сделают наконец, а то 10 лет языку, а на нём писать нормально нельзя.
Они настолько заигрались с тем, чтобы сделать трудным написание плохих программ, что сделали трудным написание хороших.

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity