что изучить быстрее
Ну ну. Люди тож в идеальном мире не нужны - только вид из окна портят.
George, ты эстет. Мне тебя не понять.
[/QUOTE] То-то и оно, что эффективность работы команды определяется как сильными её участниками, так и слабыми. У команды из всех сильных участников эффективность наивысшая; из всех слабых - низшая или нулевая, если участники разные - то и эффективность будет где-то между нулём и максимумом. Если результат - величина хоть как-то постоянная (например, соответствие ТЗ), то время его достижения определяется тем участником, кто работает медленнее остальных. IRL всё несколько сложнее, но в целом принцип "на финише все или никто" работает.
А вот на личности я давно уже не перехожу. ;) Смотри по пунктам:
Эти мои вопросы всё ещё эквивалентны?
Вопрос в том, что такое стандартный багаж знаний. По сути, каждому достаточнот знать то, с чем он должен работать осознанно. Если надо уложить кирпичи - изучи, как класть кирпич. Надо выбрать структуру данных - изучи их. Надо выбрать шаблон проектирования - разберись с ними. Не раньше, но и не позже.
Меня в школе учитель физики удивлял способностью прикидывать интеграл какой-нибудь функции в уме. Потом мы вычисляли его точно, результат совпадал иногда аж до сотых долей. Сложность алгоритма чаще всего достаточно именно прикинуть в уме, а сложность каких-то базовых алгоритмов вообще можно запомнить как таблицу умножения. Человек в среднем случае существо ленивое и затруднять себя вычислением сложности алгоритма не будет. Да, важно отличать sort от find, свойства объектов от переменных класса, ну и ещё в таком духе знать то, с чем работаешь.
Совок, между прочим, начинается как раз с мелочей. Стало быть, ответственному за внешний вид, будь он архитектор или дизайнер, не зазорно подумать даже о собачьих будках. Так, если ты вставишь с краю какого-нибудь делового центра из стекла и бетона кривой деревянный сарай, ты сразу сможешь оценить эффект.
Это лишь в случае, когда главный участник не может заменить (изменить) кого-то из тех, кто тормозит.
Но про сильных и слабых - это ты говоришь. Я говорю о том, что в команде могут присутствовать спецы с различными навыками (включая базовые). И те навыки, которые ты назвал - не являются универсальными для всех.
Посмотрел. Ты исказил смысл как тебе было удобно (смотри выделенное). Одно дело - какими-то необходимыми, а другое дело - определить для всех некий искусственный минимум, взятый с потолка.
Я об этом и говорю. О чём спор тогда?
А что я назвал?
[QUOTE=меня]Если программист не понимает, как выбирать, создавать и оценивать алгоритмы, если он не понимает структуры данных и методы работы с ними, если он не понимает, как работает компьютер и каковы его ограничения - он вряд ли когда-то напишет хоть что-нибудь хорошее.[/QUOTE]Конечно, эти навыки не нужны дизайнеру и проектировщику интерфейсов, они не нужны продавцу - но тогда о какой команде мы говорим? Если о команде именно программистов - тогда я предположу, что у них даже больше универсальных навыков, чем я тут написал.
Откуда я взял этот минимум? С собеседований. Вопросы по конкретной технологии там задают сравнительно редко, чаще встречаются общие задачки, типа зеркального отображения строки, использования односвязного списка, рекурсии и т.п. На язык решения смотрят не всегда, хотя и часто. Логика понятная: умение программировать интересует собеседующих больше, чем знание языка.
А какой базовый минимум предложил бы ты?
Я об этом и говорю. О чём спор тогда?
Спор о том, что надо уметь и знать прежде чем строить хотя бы сарай. Начать, пожалуй, можно и прямо с его постройки. Первый сарай почти наверняка получится кривым. Потом надо взять источник и разобраться с тем, почему получилось криво. Но ведь и для начала надо хотя бы уметь пилить и забивать гвозди!
В программировании для начала надо чуть больше, но ненамного. Но чтобы перерасти начало, надо таки учиться программировать, и постоянно применять это умение. Можно, сидя на унитазе, прочитать того же Макконелла, но от этого не будет толку. Можно прочитать его же за компом и прорешать задания на бумажке и непременно на компе - от этого толку будет гораздо больше. Но больше всего толку будет, если написать сколько-нибудь ценное приложение, используя те знания, которые уже выучены и натренированы. И опять же, моя позиция в том, что не зная основ из того же Макконелла или Вирта, не сделаешь ничего сложнее хелоуворда. Ну, ещё надо, чтобы всё это укладывалось в голове. На это нужно время и терпение, ну и практика. Лично я в школе долго не знал, что можно использовать бесконечный цикл для управления программой, хотя про циклы как таковые знал очень неплохо.
Надо расписать подробнее, что подразумевалось.
Например, что значит: "выбирать, создавать и оценивать алгоритмы"? Должен ли программист знать разнообразные виды сортировки и знать, как они будут работать в зависимости от увеличения размера данных или ему достаточно знать что есть библиотечная функция sort?
Что значит: понимать "структуры данных и методы работы с ними"? Тут вообще каждый может понимать как хочет. Один скажет - массивы и структуры, другой - словари и списки, третий - файлы и базы данных. А что требуется то?
Что значит: понимать "как работает компьютер и каковы его ограничения"?
Должен ли начинающий программист знать это на уровне продвинутого пользователя или более него? А зачем? Что конкретно он должен знать?
А то может мы по разному понимаем.
Возможно, главным было бы умение проводить профилировку и тестирование программ. А все навыки бы подстраивались под это. Но почему-то начинают учить не с этого...
Вот с этой цитатой согласен (не цитирую полностью, ибо можно перейти).
Для начала надо уметь разбивать решение задачи на последовательность шагов, которые потом придётся кодировать. Надо уметь решать задачи - в математическом смысле: ты знаешь, что у тебя на входе, ты знаешь, что должно быть на выходе, и тебе надо построить последовательность шагов, каждый из которых ты на месте конкретизируешь. Уметь сообразить хотя бы, как подойти к задаче и за что взяться сначала. Это умение создавать алгоритм.
Умение выбирать алгоритм - это как минимум способность для решения своей задачи найти в книжке Макконелла/Вирта/Кнута/etc. такой, который ещё не реализован библиотечной функцией. Где-то реализовано больше, где-то меньше. Ограничиваться таким умением не стоит, но для начала оно потребуется.
Умение оценивать алгоритм - это способность выбрать лучшее решение из нескольких возможных и применимость его для решения своей задачи. Это умение понять, почему так долго ищется маршрут по карте московского метро, вычисляется 25-е совершенное число или намертво ложатся все четыре ядра процессора. :) И таки да, поняв - исправить.
И это как минимум для старта - с таким набором скиллов уже можно надеяться на то, что начатое хоть как-нибудь закончится в виде работающей программы.
В первую очередь это то, с чем непосредственно работаешь. Начинающему питонисту нет пользы от знания того, что в конце сишных строк находится 0x00. Остальное - "в порядке повышения образованности". А ещё это - понимание каждого слова в мануале по инструменту. Например, понимание разницы между списком и кортежем.
Должен ли начинающий программист знать это на уровне продвинутого пользователя или более него? А зачем? Что конкретно он должен знать?
полезно знать, что компьютер не может работать в выключенном состоянии, что он не может поделить некоторые числа нацело, что он не может вычислить некоторые выражения точно. Если пишешь аську, нелишне представлять себе работу стека TCP/IP. Ну и в таком духе.
Меня однажды взяли на работу, для чего достаточным оказалось уметь отлаживать код. Там просто предположили, что остальному я смогу научиться на месте. В результате хаотичной, но настойчивой учёбы и ежедневной многочасовой практики я таки чему-то научился. Похоже, важнее всего умение настойчиво двигаться в сторону результата, учиться и стремиться к наилучшему. Одним профилированием сыт не будешь.
Не удержусь:
Раскланиваются со знакомыми, мило беседуют и наслаждаются солнышком.
Нечаянно Наталья Гончарова наступает в лужицу и пачкает край платья.
Пушкин достает белоснежный платок, припадает на колено и протирает Наталье ботиночки и край платья. Прохожие умиляются и одобрительно улыбаются поэту…
Свидетель этого рассказывает своему другу:
Вчера Пушкина с Гончаровой видел — она в лужу наступила — он платок достал, ботиночки ей протер! Кавалер!
Друг рассказал своему другу, тот — следующуму, и так далее…
5-ый рассказывает 6-му:
Пушкин вчера с Гончаровой шли — дороги не разбирают, торопятся — прям по лужам шлепают!
10-ый — 11-му:
Пушкина вчера видал — Гончарову пьяную тащил — она шатается, прям по лужам идет! Грязная вся!!!
20-ый — 21-му:
Вчера Пушкин с Гончаровой домой шли — в жопу пьяные, грязные, песни орут. Идут — чуть не падают! Фу!
50-ый — 51-му:
До чего докатились! Вчера Пушкина видел на набережной — Гончарову ногами пинает, а она в жопу пьяная в луже валяется! Грязная, матом на него орет!
100-ый — 101-ому:
Прикинь — вчера видел — сидит Гоголь на столбе и дрочит!
Это шоб тут никто не подумал, дескать флудим и все такое. Тут только и делают, что пекутся об афторе. Я вот ночи не сплю, например. Думу думаю!
А спор Санила Сана и Когрома че то надоел уже - фигня изначальная какая-то по-моему. :)
Ну тогда давайте поговорим про "совок" и Тёму, что-ли?
Я буду как-бы за совок, а вы за Тёму... ;)
http://tema.livejournal.com/776202.html?thread=413256714#t413256714
Думаю, там примеры не совка, а некоторых мутантов-гибридов. Делали люди несколько поколений всё прямое и параллельное из цемента, из чугуна, а тут их попросили сделать бантик. Ну на тебе цементный бантик...
А халтура и дилетантство - оно так и называется. Зачем сюда ещё "совок" приплетать?
Да тут был аргумент, типа: "кто не знает алгоритмы - тот совок". Ну и в подтверждение статья некоего Тёмы.
Но пока только 2 практические задачки вспомнил (алгоритмы которых смог оптимизировать), потому идею отложил.