Отличный фреймворк!
Простой, чистый, производительный!
Так на его могиле и напишем...
Полсотни интернет-зависимых не спят. Прижав тощие и не очень задницы к стульям, они флудят в самописном чатике. Удовольствие стоит 6 рублей в час (цена «городского интернета» в далеких
2000-х с одним сервером на город-полумиллионник).
На это хватало сэкономленного на студенческих обедах. На выход в Глобальный Интернет по 33 рубля (хренасе!) в час — уже нет. Писк модема на 33600. Ночь.
Самое главное — на сервер можно зайти по FTP и выложить на всеобщее обозрение свое Ясделие. Свой сайт. Или чат. Или что ты там еще придумал. И кто-нибудь обязательно туда придет, посмотрит и оценит. И ты увидишь это на счетчике посещений (предтеча лайков размером 88?31).
В стеке технологий (правда, тогда слово «стек» употребляли с чем-то вроде «push ax») у нас было много всего:
- PHP3, который еще не успели охулить (или успели, но в «городском интернете» про это никто не знал).
- HTML4, который не во всех тогдашечных браузерах умел рендерить таблицы.
- CSS-1.0 — магия.
- JavaScript, который ламеры путали с Java.
- Шестая чашка дрянного нескафе-голд.
Эти технологии были потрясающими. В прямом смысле. Например, JavaScript мог трясти окнами браузера и открывать десять тысяч окон, отправляя в нокдаун неугодного пользователя чата. Нынешние фреймворки так не умеют.
Но через пару лет пришли хулители из Java (которая не Script) и рассказали, что все, что мы делаем — дерьмо. И на сервере код наш — дерьмо. И на клиенте — дерьмо. И браузеры наши — дерьмо. И вся веб-разработка дерьмо. Впрочем, доля горькой правды в этом была. Браузеры того времени и впрямь были удивительными механизмами.
Кладбище фреймворков. Начало
Глотком свежего воздуха стал Prototype (кто-нибудь помнит этот фреймворк?). Было так круто писать вместо document.getElementById что-то типа $()!
Вот только Prototype расширял функционал базовых объектов. А это посчитали дерьмовым. И старичок загнулся практически сразу, как появился jQuery.
Меня это бесило дня два. Мне нравилось писать
$("id").style.color = "#FFF";
вместо
$("id").css({color: "#FFF"});
Но кто-то сказал, что это плохо, и я пересел на jQuery. Многие пересели.
Prototype оказался только шлюзом в мир, полный настоящего, вонючего дерьма! Оно хлынуло потоком. Маленькими кусками вроде mootools, который реально где-то полгода делал вид, что он конкурент jQuery и Prototype. И большими кусками вроде Dojo (кто это помнит?!), Yahoo! UI Library (в итоге — Extjs).
Нам нужен был MVC (или HMVC?), и у нас появился выбор: Backbone, CanJS, Knockout и еще десяток новых каждую неделю. Нам надоел CSS, и снова мы могли выбирать: Less, Sass, PostCss. Кто-то сказал, что JavaScript — дерьмо, и так появился CoffeeScript, и меня реально убеждали, что надо писать именно на нем, ибо прогресс! Блин, ну и где он теперь?!
TypeScript. ES6. Отлично, JavaScript стал типизированным, но перестал работать в браузере: теперь его приходилось компилировать. И не только его. Много-много рутинной магии на сервере.
Поэтому появились автоматизаторы рутинной серверной магии по типу Grunt, Gulp, Broccoli, Webpack. Меня выворачивало наизнанку от синтаксиса Angular, и я был рад сплясать на его могиле, когда появился React (к которому нужен был Redux). Даже Vanilla JS, фреймворк в 25 байт в сжатом виде, на фоне общего зоопарка выглядел не так плохо.
Каждый день появлялись новые фреймворки и библиотеки, которые решали проблемы, о которых мы даже не задумывались. Каждый день появлялось то, что можно поизучать. Мы читали хабр, и у нас глаза блестели от счастья (или от ингибитора обратного захвата серотонина). Но не проходило и полгода как новую хорошую технологию кто-то яростно охуливал, и она становилась сначала отстоем, а потом — дерьмом.
Бывало, начинаешь проект с новыми и хайповыми технологиями и методологиями, а заканчиваешь уже с отстойными. Хотя по сути ничего не менялось, разве что появлялась парочка статей на хабре «Почему ангуляр — отстой» и «Scrum умер и больше не работает». Проект, работа и даже собственная компания казались отстоем просто потому, что кто-то сказал «MVC — для лохов!».
Не быть лохом
Правда в том, что большей части разработчиков фиолетово на сам проект. Куда важнее чувствовать себя «в тренде». Не быть лохом. Поэтому часто хипстерскость технологии — решающий фактор в выборе работы. И мало кто из работодателей сознается, что набирает людей для поддержки унылого проекта на фреймворках полугодовой давности.
В вакансиях студии выпячивают только те технологии, которые не успели обрасти разгромными отзывами. Мы тоже так делали и прятали под стол гадости вроде лучших отечественных CMS-систем. Да мы даже обернули её Zend-ом, чтобы клиенты радовались маркетинговому трепу про мощность админки, а мы — пользовались MVC, не особо мучаясь.
Мы в студии не в самом плохом положении — можем экспериментировать и менять технологии как перчатки. У нас негласное правило — на новом проекте попробуй новую технологию. Стек всегда остается более-менее актуальным. Но глобально это не решало вопрос. Не все проекты заканчиваются сразу после релиза, ага.
Разнообразие мнений породило проблему выбора и обучения junior-ов. Я собеседовал людей, которые на полном серьезе говорили, что учили Angular, а не JavaScript. Ай хэйт ю, агнуляр.
Я видел разработчиков, которые считали, что умеют писать «на jQuery» — точнее, они могут найти подходящий слайдер и воткнуть его на страницу. И (цитирую дословно) «настроить под себя». Эти люди гордо именовали себя «jQuery-интеграторы», но не могли отсортировать список значений в select-боксе. Они беспокоились, что разговор зайдет о чем-то, что может быть сложнее «интеграции плагинов» (точнее, занятий, которые они почему-то считают «программированием»). Когда их просили написать чуток кода на бумажке без копипасты с гитхаба, их поры сочились гормонами сжиженного стресса.
Но черт возьми! Не они в этом виноваты!
Не читай срачи, а трогай ручками
Как-то вечером я захотел сделать небольшой проект для души: сайтик с простым бэкэндом и кое-каким интерактивом на Javascript. И решил предварительно посмотреть, на чем сейчас модно писать. Господи, зачем я это прочитал...
[Разработка > Каково оно учить JavaScript в 2016 перевод]
Мой проект не закончен до сих пор. Кажется, скоро я открою стартап или начну искать ко-фаундера.
Сейчас в арсенале нашей студии:
- jQuery + CanJS + Less + Gulp на одних проектах;
- и React + Redux + Babel + JSX + ES6 + Browserify + PostCSS + Webpack на других.
Но я не знаю, сколько времени осталось, пока они не вошли в категорию «X — дерьмо!».
Если ты талантлив и одарен, у тебя, скорее всего, есть и обратная сторона этих ништяков — ты слишком умный. Ты оптимизируешься, экономишь силы. Перестаешь изучать и пробовать технологии на практике. И все больше полагаешься на стороннее мнение. Становитесь зашоренными. Изучение и применение технологии заменяешь чтением веселой статьи на хабре про то, что она — отстой.
В курилке можно назвать технологию X отстоем — это поднимет авторитет в глазах коллег и даст моральное право не изучать ее и не использовать. Со стороны выглядит также круто, как если бы ты освоил технологию. Но это не одно и то же.
Сингулярность ближе, чем ты думаешь. Избегай зашоренности. Меньше полагайся на чужое мнение. Смотри сам. Изучай сам. И попробуй потрясти этот мир. Всмысле
window.moveBy(x, y)
:)
DigitalSmile
Спасибо! Как увидел Масяню, аж чуть не всплакнул…
По теме — автор абсолютно прав. Огромное количество людей сейчас учат технологии, а не алгоритмы и языки. Такой «тренд» во всех сферах.
zxcabs
Может все потому что в огромном кол-ве мест требуется «скачать и подключить jq плагин» и на этом все? Много ли где в вебе требуется больших знаний, кроме самой платформы?
safinaskar
Вы будете удивлены, но новые серии Масяни продолжают выходить до сих пор. От того же автора. http://www.mult.ru. Последняя серия вышла 1 июня 2016 г.
DigitalSmile
Класс, даже не знал. Пойду досматривать упущенные годы.
Мне казалось Масяню перестали рисовать году 2006… Хотя уже и не вспомню сейчас всех подробностей.
Shultc
Простите за оффтоп. Смотрю Масяню на ютубе, на её канале. Но так же на канале самого Олега Куваева (создатель) выходит много Масяньского контента. Последний, вполне годный ролик вышел за день до вашего комментария.
am-amotion-city
Как было принято писать во времена ночного модемного писка, ППКС.
В точку. А еще можно сразу не технологии хаять, а языки. ООП? — Отстой. Прототипы? — да как вы вообще на нем что-то делаете? — Функциональный, говорите? А лямбды есть? А если найду?
Люди «программируют» на джиквирях, реактах, рельсах, джангах и симфониях. Проитерировать массив? — Как это в языке нет оператора «бакс»?
На моем первом компьютере, при помощи которого производилось компилируемое и переносимое программное обеспечение, которое мне удавалось продавать за приличные деньги, было 4М оперативки и жесткий диск на 270М. И не было ни единой книги, в которой можно было бы прочитать, как итерировать массив — хоть с баксом, хоть без бакса.
Поэтому нынче на собеседованиях я всегда прошу писать ванильный код — будь то js, ruby, питон, R, или черт с рогами.
VolCh
Шёл из коробки с symfony В поддерживаемом проекте году этак в 2012 заменён на jQuery.
Не далее как в начале этого года предлагали переписать проект на Symfony 2.3 c Dojo на фронте на Symfony 3 + React
Durimar123
>Когда их просили написать чуток кода на бумажке без копипасты с гитхаба
Хотелось бы узнать смысл, что вы хотели узнать этим тестом?
И что, по вашему мнению, показывает присутствие/отсутствие этого навыка?
zevvssibirix
Сможет ли человек интерпретировать код, или будет дрюкаться между парой мониторов (с штормом и браузером), надалбывая CTRL+R, в надежде, что очередной кусок копипасты заработает как надо :) В прочем, ctrl+r многие уже автоматизировали…
stardust_kid
Бывает и обратная проблема, когда программист три дня изобретает велосипед вместо того, чтобы нагуглить существующие решения и попытаться их понять.
zevvssibirix
Да, но это другая проблема. По-моему инженерного решения не имеет.
stardust_kid
А мне кажется, решение в научном подходе. Есть проблема, изучи историю вопроса, проанализируй существующие решения, сделай свое на их основе. Если истории вопроса нет, проблема уникальная. Тогда только начинай изобретать. Но мне за время работы во front end такие случаи встречались считанные разы.
В общем не вижу ничего плохого в копипасте, точнее в осознанном использовании готового кода. Только вот, чтобы набить скилл читать код с листа, нужно пару лет подолбить CTRL+R.
Durimar123
>Сможет ли человек интерпретировать код
Может тогда стоит попросить его объяснить, что делает тот или иной код?
А тест по созданию кода проверить также — дать тест и пусть делает как хочет.
Или интересует сам метод создания кода?
am-amotion-city
Мой личный опыт показывает, что люди, претендующие на позицию мидла и выше заслуженно, пишут код на бумажке с легкостью. Все без исключения.
А люди, которые просто заглянули на огонек на шару — нет.
Вот такие эмпирические данные.
Durimar123
>Мой личный опыт показывает, что люди, претендующие на позицию мидла и выше заслуженно, пишут код на бумажке с легкостью. Все без исключения.
Может мидлы которые работают с одним языком и обладают подобным качеством.
Но очень сомневаюсь, что сеньеры плотно знакомые с 5-10 языками и 3-4 платформами, по 2-5 лет практики на каждом, смогут писать код ручкой.
Кто помнит как в winapi получить scan code и преобразовать в wchar текущей кодировки? Например на delphi.
Или что именно настраивать в адроид Intent, что бы передать URL в другую APK.
kloppspb
Напрасно сомневаетесь.
am-amotion-city
Напрасно сомневаетесь.
Ну где-то, конечно, там будет
ScanManager.getCode(НЕ_ПОМНЮ_СПИСОК_ПАРАМЕТРОВ_НАИЗУСТЬ)
, но это и даже хорошо.Durimar123
Давай проверим.
Задача Delphi на форме отловить wm_keydown, и при нажатии клавиши вывести символы которые соответствуют этой клавише для всех используемых языков системы.
am-amotion-city
Я, простите, компьютер с операционной системой Windows в последний раз в жизни видел в 1999 году. На Delphi32 я, конечно, попрограммировать успел. В 1995.
Но даже я, прямо сейчас, отвечу на этот вопрос с легкостью: этот код писать не нужно, аналогичную задачу только недавно решала команда
Atom
’а, в версии 1.13 они внедрили продвинутую систему реакции на то, что в win-системах называетсяWM_KEYDOWN
.Надо заглянуть к ним в код, и взять решение оттуда, потому что в гитхабе работают люди, профессиональному уровню которых я доверяю. Ваше решение наверняка будет хуже.
Знаю я это потому, что слежу за новостями в мире IT.
И такой ответ, прикиньте, удовлетворит любого интервьюера.
Durimar123
Т.е. написать код вы не можете.
А так же утверждаете, что темплейт этого ответа можно использовать для подобных вопросов «И такой ответ, прикиньте, удовлетворит любого интервьюера.»
Как-то слабо коррелирует с
«Мой личный опыт показывает, что люди, претендующие на позицию мидла и выше заслуженно, пишут код на бумажке с легкостью. Все без исключения.»
am-amotion-city
Написать код я, разумеется, могу: на тех языках, которые не поросли мхом забвения и для тех операционных систем, от которых меня не тошнит. Я могу написать работоспособный код на всех тех пяти-шести языках, на собеседование по работе с которыми мне может втемяшиться пойти.
Durimar123
И какие это языки? Надеюсь С++ там есть?
На любой платформе, любом IDE.
Копирование в буфер клавиатуры текста в HTML формате, где каждое 2е слово italic.
Ну и если позволят знания, то с добавлением имиджа в середину текста.
Если сложно, то загрузка указанного ХМЛа, подсчет количества русских букв «я» в этом хтмле.
ps
спорим, что код никто так и не увидит.
am-amotion-city
На что спорим-то? Удивительно, все-таки, заставили потратить 5 минут.
Достаточно?
Durimar123
Вообще-то разговор шел про С++.
am-amotion-city
Во-первых, это ваш разговор с вашим альтер эго у вас в голове шел про
C++
, перечитайте статью.Во-вторых, на
С++
такие задачи за пределами сумасшедшего дома не решаются.В-третьих, если в проекте на
C++
кому-то прямо потребуется парсить удаленный файл, биндинги к какому-нибудь embedded (типаlua
, который дажеnginx
уже сто лет как умеет) запрещены дауном архитектором, а вокруг — колючая проволока, и не сбежать — я буду это писать наC
, а никак не наC++
. По той же простой причине, по которой я не ем на завтрак картон: я не дебил.webkumo
А можно поподробнее расшифровать вашу мысль? Чем вам не угодил (вообще или в данной ситуации) C++?
am-amotion-city
Мне
C++
всем угодил, это прекрасный язык для своих задач.Но тут нужен
recv
из чистого сокета, а потом один цикл по строке с дополнительным буфером на еще один чар если пришелUcs32
, или на еще три чара, если пришелUTF-8
/UTF-16
. Занахрена мне тутC++
?:)
Durimar123
Ну вот мой тест:
«И какие это языки? Надеюсь С++ там есть?»
>я буду это писать на C, а никак не на C++
Без проблем С тоже подойдет. Упростим задачу, HTML файл локальный.
am-amotion-city
Юноша, в какой именно момент вы решили, что я пришел к вам на собеседование? Что я вообще пойду на собеседование и в частности на собеседование по
C
/C++
?Почему вы считаете, что даже имея в анамнезе опыт программирования на
C
/C++
(и даже ассемблере) — я все это помню сейчас?И — главное — вокруг меня все еще нет колючей проволоки, чтобы писать парсинг строк на — мало того, что непригодных для этого языках — так еще и нелюбимых?
Durimar123
Не я же говорил, что здорово тестировать написание кода на бумажке, и не я утверждал, что сеньеру как 3 байта переслать.
am-amotion-city
И что из этого следует?
Я говорил. И я, заметьте, написал. На интересных мне в данный момент языках. В число которых, так уж получилось, не входит
C++
.Кроме того, я более-менее постоянно собеседую сеньоров. И вышеуказанный тезис родился в результате анализа моего опыта. Знаете, что такое опыт?
В общем случае из этого никак не следует, что я сам тоже могу. Я не хожу на собеседования.
mitja
Мне кажется, тут очень важно правильно расставить акценты. Сеньор, ходящий по собеседованиям, и правда в большинстве случаев напишет код на бумажке без проблем. Так как на собеседованиях нынче модно давать подобные задания. Стало быть, если человек всерьез ищет работу, то он этот навык постарается прокачать. Опытному специалисту это не должно составить большого труда, просто надо потратить некоторое количество времени.
А вот является ли способность написать код на бумажке подтверждением чего либо, кроме тщательной подготовки к собеседованию — это уже другой вопрос.
fi11er
Не бросайтесь в крайности. На собеседовании никто не просит написать код с использованием апи. Если бы меня попросили написать на бумажке такую задачу, то на питоне я бы написал что-нибудь в стиле:
А как положить переменную buffer в буфер и как реализовать get_current_selection я бы погуглил.
Durimar123
А что можно тестировать написанием КОДА на бумажке без доки?
Замечу не написанием блоксхемы, или описание принципа решения, а именно КОД.
Что дает подобный тест?
kloppspb
Подобный тест даёт понимание о потенциальном распределении времени: сколько человек будет писать код, а сколько — искать как его написать.
Собственно, только от джуниоров требуется написать такой код, который сразу зработает, ну так им и задачи дают совсем примитивные: показать уровень знакомства с языком, стандартными библиотеками, самыми основами алгоритмов.
onikiychuka
Да очень много дает.
Я ходил недавно на собеседование и как раз писал код на бумажке. Никаких проблем забываниями сигнатур API функций у интервьюверов не было. Достаточно примерно помнить что функция есть в стандартной библиотеке. А вот практические навыки твои видно просто прекрасно.
Например:
Решаем простую алгоритмическую задачку на java, которая свелась к fold (свертке списка). Ну я пишу 2 решения — одно циклами, другое на Stream API. Меня спрашивают — а как бы нам это сделать параллельно. Я отвечаю — можем использовать AsParallel в Stream API, но в общем это может быть медленнее(из-за кривизны Stream API), так что обязательно надо бенчмаркать. Просто смотря на код — фиг поймешь быстрее будет или медленнее.
Интервьювер сразу видит что я и код написать могу 2х стилях (функциональный и императивный) и то что неплохо знаю стандартную библиотеку java и границы применения ее API
Ну и если вы дете в команду интервьювера -ему же интересно как вы там КОД писать будете. Как переменные назвать (a, b, c или что-то более осмысленное), как методы. Насколько легко ему будет понять — что вы пишете.
Так что — имхо писать код на бумаге во время собеседования — одна из самых логичных практик.
Durimar123
Почему просто не ответить, что есть два решения, у каждого такие то плюсы и минусы?
>переменные назвать (a, b, c или что-то более осмысленное), как методы.
На бумажке? Давать реальные названия переменным и функциям?
Да это какое-то садомазо.
ElectroGuard
Это ищется за 5 минут или быстрее. Либо среда подсказками поможет, либо хелп. А вот нормально сделать иерархию классов, не знаю, многопоточку — вот тут — да — умения нужны. Знания элементарно добываются в интернетах, если хотя бы зачатки программного мышления есть. С умениями сложно.
0xd34df00d
А вы такую задачу бы на собеседовании дали? А зачем? На какую должность?
Я когда собеседовался на senior C++ software developer/researcher (ну там, матана немножко, это всё), мне дали задачку «напиши, как бы ты писал парсер языка вроде JSON». Я сказал, что на бумажке на плюсах писать больно, давайте я вам на хаскеле напишу, а там обсудим, как потом это переложить хоть на Boost.Spirit, хоть на ручками запроганный рекурсивный спуск. Тем более, что с чуваком, который меня собеседовал, мы перед этим имели телефонное интервью, и минут 5-10 поговорили за жизнь, где я узнал, что он тоже по всяким таким вещам угорает. Ну а раз пишу на хаскеле, то давайте решим, можно ли мне пользоваться примитивами из Attoparsec'а, или нельзя, если нельзя — то давайте я ими всё равно воспользуюсь, просто распишу, как они работают.
И всё, никаких вопросов. Потому что проверять алгоритмику интереснее и полезнее, вероятно, чем непосредственные навыки написания кода.
andreysmind
Из моего опыта, в случаях, когда просят решить задачу на бумажке, можно обойтись встроенными средствами языка, в самом крайнем случае — стандартная библиотека. Хотят видеть насколько человек понимает что он пишет, как планирует заранее, как думает.
stardust_kid
Писать код на бумажке, безусловно, полезно. Но проблема в том, что AWS, например, не умеет запускать код с листа, а Github не принимает коммиты по почте. Так что приходится волей-неволей использовать IDE, а там и недалеко от того, чтобы в документацию заглянуть или на SO.
То есть это полезное умение, но оно не релевантно бизнес-задачам.
am-amotion-city
Оно релевантно бизнес-задачам.
IDE подскажет, орфографию метода. Но если разработчик на каждый чих ходит в SO, то я лучше возьму вместо него на работу тех людей, которые на SO отвечали на те вопросы, которые он задает.
Кроме того, у нас, например, IDE используют только джуниоры и некоторые мидлы. Сеньоры пользуются простыми редакторами текста. С опытом приходит понимание, что лучше два часа подумать, а потом за пять минут записать, чем сразу начать писать и писать неделю. А когда ты в основном думаешь, нужны [пусть пассивные] знания, которые как раз и есть «умение писать код на бумажке / в голове».
stardust_kid
Взять-то вы может и возьмете, только кто ж вам даст.
am-amotion-city
Отучаемся судить по себе. У меня в отделе нет ни одного сеньора с репутацией на SO менее 10К.
herr_kaizer
Плохой критерий профессионализма.
am-amotion-city
Я нигде не говорил, что это критерий профессионализма.
balexa
Вы не берете людей с репутацией меньше 10к?
am-amotion-city
Нет конечно, оно само так сложилось. Кроме того, у нас не только сеньоры работают.
0xd34df00d
А если у человека вообще нет аккаунта на SO?
am-amotion-city
То у человека вообще нет аккаунта на SO. Что вы от меня хотите? У наших сеньоров есть.
aikixd
Время вобщем полезное тратят на ЧСВ. Открыл утром блокнот, написал пару файлов, используя какую нибудь нотацию, прописал руками комманду для компилятора со списком файлов и настройками проекта, запустил веб сервер через консоль, настроил новый хост в конфиге, написал скрипт для копирования бинарников, добавил принтов по всему коду, для дебага…
Ну вы поняли. Может это и не про вас, но я таких людей встречал. Какой смысл отказываться от ИДЕ?
andreysmind
Ну ты сейчас ящик Пандоры открыл.
am-amotion-city
Я не начинаю новый проект дважды в день, если бы начинал — использовал бы IDE.
Никакого. Ну, кроме того, что я помню многое из того, что люди с IDE давно забыли из-за автокоплишена. Я запоминаю номера телефонов, и езжу на на машине с ручной коробкой передач. Боюсь отупеть до стадии «без IDE не могу».
0xd34df00d
У меня такой глупый и стыдный вопрос: а зачем это помнить всё?
Номера телефонов и точные названия функций — это фактологическая информация, не несущая принципиальной новизны для картины мира.
am-amotion-city
Я уже где-то приводил этот пример: это как с таблицей умножения. Практической пользы никакой, но люди из класса с калькуляторами по прошествии времени показали себя гораздо тупее, чем учившие таблицу умножения.
Я тренирую память, потому что без тренировки замечаю отрицательную производную, а позволить себе отупеть — не могу.
0xd34df00d
Не скажу за всех, но я ей довольно часто пользуюсь.
И да, где почитать про сравнение людей из класса с калькуляторами?
Это далеко не единственный способ тренировки. И, возможно, если снизить когнитивную нагрузку за счёт номеров телефонов и сигнатур функций, получится развиваться более эффективно.
am-amotion-city
Вот и развивайтесь более эффективно, я разве что-то навязывал, или, тем паче, спрашивал совет?
Вообще, удивительный феномен: я просто поделился наблюдением и по просьбам (!) выложил свое ви?дение «почему так». Просыпаюсь с утра — чуть не с десяток комментариев, убеждающих меня в неверности моего подхода. От разных людей. В том числе — от вроде бы неглупых.
Зачем вот лично вы меня убеждаете? Риторика про «для зашедших почитать» — не пройдет, вы апеллируете именно к моим высказываниям, субъективным, перевести в объективную плоскость контекст не удастся.
Мне мешает IDE и моя производительность при ее использовании не повышается. Возможно, потому, что я пишу только те части, где IDE, даже самая крутая, уже не справляется: аспекты, метапрограммирование, сложные рефлексии, и т.п. На собственно написание кода я трачу менее 10% времени. Мне не нужна IDE.
Вам нужна? — Отлично. У вас другие юзкейсы? — Прекрасно. Я-то тут при чем? Вы бы хотя бы поинтересовались, на каких языках я пишу, для начала, если уж хотите конструктивную дискуссию.
0xd34df00d
Считайте, что я делюсь наблюдениями в форме вопросов или ответов на ваши утверждения.
Мне помогает. Я вполне продуктивно могу писать код в необустроенном vim, если уж на то пошло, но с IDE удобнее.
На каких?
am-amotion-city
Сейчас с основном на эрланге. Чуть меньше — на эликсире. Все еще довольно много руби. Экстеншены сейчас уже почти нет, но все еще бывает: plain c. Хаскелла чуть-чуть, немного перла в zsh случается. Луа, кофе и иногда ванильный js. Ах да, SQL.
Все это вперемешку. Часто бывает так, что за час — сменяются три разных языка. В основном проекте у меня 4 разных малосвязанных языка. И моему
Atom
’у все равно: у него нет ограничения сущностью «проект».И да, у меня конечно же есть https://zealdocs.org/ с быстрыми клавишами, если вдруг.
0xd34df00d
Ну, у меня совсем другая ситуация. Ряд проектов только на плюсах, ряд — на хаскеле. В одном проекте два языка редко встречаются.
zirix
А если вместо заучивания таблицы умножать в уме?
Для интеллекта подобные задачи полезнее чем простое заучивание.
am-amotion-city
Спасибо, кэп. Я даже на выходе из супермаркета всегда с точностью до копеек знаю общую сумму, потому что складываю, умножаю и тренируюсь.
Но, знаете, ни одному спортсмену ни одной заковыристой дисциплины — еще не мешали занятия простым бегом.
0xd34df00d
Они отнимают время. Потому что пока вы в супермаркете держите в уме сумму покупок, я продумываю, как решать какую-нибудь задачку (а последнее время и в супермаркет не хожу).
am-amotion-city
Вы крутой, я — нет. Я вообще задачки не решаю, только и делаю, что хожу по супермаркетам и считаю копейки.
0xd34df00d
Пассивно-агрессивное поведение не стоит того.
am-amotion-city
Если вы еще не окончательно ушли в астрал и продолжаете делать вид, что разговариваете со мной — потрудитесь использовать русский язык во всей его красоте и величии.
Распарсить эту фразу и вычленить смысл я не смог. Впрочем, какая разница.
0xd34df00d
Смысл в том, что совершенно не обязательно так общаться, например.
am-amotion-city
Так ведь и не я начал. Это же вы подошли со своими комментариями, построенными на выдерганных из контекста цитатах и стали мне рассказывать, в чем я ошибаюсь.
Почему вы ожидаете, что я в ответ смиренно закачу глазки и соглашусь с тем, что я нес ту ахинею, которую вы мне приписываете? И вообще, почему вы считаете, что мне сто?ит относиться доброжелательно к людям, которые считают приемлемым менторским тоном рассказывать, как правильно, а как — нет?
0xd34df00d
На каких именно, по-вашему, выдерганных из контекста цитатах построен комментарий выше?
Потому что, ну, вы сами менторским тоном тут рассказываете, как правильно?
am-amotion-city
Это вы мне предлагаете задачки решить, чтобы логику подтянуть?
Наличие «комментариев, построенными на выдерганных из контекста цитатах» не опровергается одним контр-примером.
Боже, где? Вот мой оригинальный комментарий:
Потом уже мне начали задавать вопросы, на которые я отвечал; также были реплики, которые, возможно, привели к избыточной категоричности в ответах. При этом я — серьезно, посчитайте — раз 15 оговорился, что данные эмпирические, из моего личного опыта, необобщаемые.
И знаете что? — Эта дискуссия убедила меня в том, что считать мелочь полезнее, чем решать мифологические задачки.
0xd34df00d
Я вам изначально отвечал на этот ваш комментарий, зачем вы приплетаете сюда что-то, что, тем более, было написано после вашего ответа на него?
Порешайте задачки, серьёзно, это полезнее, чем телефоны запоминать и мелочь считать.
am-amotion-city
Я ничего никуда не приплетаю.
Посмотрите определение слова «контекст» в словаре.
Вы мне изначально отвечали на комментарий, который, внезапно, являлся моим ответом на ваш предыдущий комментарий. Вы хоть сами понимаете, что говорите?
0xd34df00d
Тогда в предыдущем комментарии, значит, были выдерганные из контекста цитаты? Не покажете?
Femistoklov
Хмм… А может, лучше тренировать не память, а другие когнитивные способности — к пониманию, обучению и т.д.?
PsyHaSTe
Это типичное поведение UNIX-пользователей.
Если совсем примитивно, пользователю линукс нравится полагать, что он хозяин положения и крепко держит в руках поводья. При этом для него достаточно имитации. То есть поводья которые он держит заходят в черный ящик, а оттуда появляются с другой стороны и ведут к лошадям. Когда пользователь дергает за них, то позади ящика они вроде как в точности реагируют на его действия.
Лошади правда могут повести себя совсем не так как ожидалось, но сами поводья работают исправно. Настолько исправно, что человек не замечает черного ящика и думает, что его руки погружены по локоть в каждую лошадь. И с места кучера все очень хорошо видно, хоть и все лицо в пыли, а красные глаза слезятся от ветра.
Пользователь Виндовза для него выглядит как жирный недалекий турист, который сидит в мягком комфортном салоне кареты позади и все команды подает не лошадям, а специально нанятому профессиональному кучеру, по рации. Вместо того, что интересоваться повадками и анатомией несущих его животных он занимается своими делами, спит, читает книги и смотрит в окно на красивые пейзажи. Вот лох. Как так можно, ехать на дилижансе и ничего не знать про лошадей?
В реальном мире (без метафор) это выглядит как следующий пример:
Допустим пользователю Винды и Линукса вдруг стало нужно поменять скринсейвер и задержку его появления.
Первый мышкой через набор менюшек, выберет нужный скринсейвер и потянет ползунок на нужную задержку.
Второй вызовет терминал и там напишет что-то наподобие sudo set screensaver «aqua» set delay 100000 ms (псевдо команды).
В реальности и первый и второй пользователь обратились в черный ящик через предоставленный им интерфейс и совершили абсолютно идентичные действия с идентичными последствиями.
Но у пользователя линукса возникает иллюзия, что он это сделал каким-то более прямым правильным способом. Что использовал немного магии, заюзал шорткат. Как бы залез под капот и что-то там подкрутил почти неглядя под восторженные вздохи воображаемой публики.
Короче говоря, таким людям просто нравится набирать текст в консоли. Все.
0xd34df00d
Странные обобщения. Я UNIX-пользователь и я люблю IDE и вообще купил себе CLion для плюсов.
kloppspb
Аналогично. Правда, код пишу часто отлаживая какие-то мелкие фрагменты и набивая их в простеньком редакторе. А вот всё вместе (~50000 cloc и больше) собирается и доводится уже в IDE.
PsyHaSTe
Окей, если я скажу «большинство UNIX-пользователей в большинстве ситуаций», тогда возражения снимаются? Просто в никсах по моему опыту почти все делается в консоли, даже то, что делается через интерфейс, тупо в силу привычки.
Хотя золотая середина имхо это IDE с шорткатами.
VolCh
«большинство UNIX-пользователей, имеющих отношение к серверному администрированию UNIX-систем, часто»
Fixed
Юникс-системы это и MacOS, между прочим. Более того — это самая распространенная пользовательская Unix-система. Да и без неё всякие Ubuntu всё больше используют обычные пользователи, не имеющих вообще представления о консоли ни в никсах, ни в винде. Вот у нас на несколько сотен пользователей никсов приходится несколько десятков пользователей винды (из-за специфического софта, необходимость установки винды нужно обосновывать руководству и технарям), при этом активно работают в консолях обеих систем хорошо если два десятка человек, при том, что это даже не все разработчики.
PsyHaSTe
Окей, возможно стоит пересмотреть стереотипы.
atamanenko
TFW используешь консоль на линуксе раз в месяц для массовой конвертации аудио/видео/пикч, для чего на винде надо качать МОВАВИ YOBA КОНВЕРТЕР на сто мегабайт с сомнительным результатом или все те же ффмпег/имиджмеджик. Не считаю SSH и прочие рабочие моменты
Eldhenn
> Первый мышкой через набор менюшек, выберет нужный скринсейвер
Из десяти предложенных, потому что кнопку «выбрать свой» в этой версии отключили — слишком сложно, смущает пользователей.
> потянет ползунок на нужную задержку
Из трёх стандартных.
PsyHaSTe
Давайте не будем натягивать сову на глобус и исходить из того, что функционал эквивалентен. Потому что если окажемся ближе к реальности, то окажется, что в никсах человек уже давно не помнит название команды и аргументы, и лезет в поиск за ними, тогда как виндоюзер знает, что это где-то в «параметрах экрана». А дальше уже выбирает наиболее подходящий пункт меню и довольно быстро добирается. А у первого товарища наблюдается проблема, что настройка слетает после перезагрузки, а флаг «preserve» конфликтует с каким-то другим.
Просто это очень похоже на детское «я тебя убил — у меня супер-оружие… — ненене, а у меня суперброня, так что не убил. Убил — не убил. Убил — не убил...»
am-amotion-city
Давайте вы станете говорить про что-то такое, в чем вы хоть немного разбираетесь: например, про установку скринсейвера в винде мышкой.
Iora
А мне понравилось обобщение. А тот факт, что есть UNIX-пользователи, использующие IDE только подтверждает пример, равно как и тот факт, что есть Win-пользователи, предпочитающие конфигурировать ОС не через меню, а меняя напрямую ключи реестра или через ту же CMD/PowerShell.
Вообще, слегка развивая аналогию, можно сказать, что сторонники Linux намеренно себя ограничивают (зачем я будут использовать IDE, которая может найти все включения произвольного символа, отрефакторить код и т.д., я лучше буду использовать редактор, который ничего этого не умеет, будут помнить, что где находится, и хотя я не смогу объяснить, зачем я это помню, у меня будет возможность при случае этим козырнуть), а потом этими ограничениями гордятся и впадают в праведный гнев, когда кто-то не признает их превосходства над собой.
Впрочем, этим не только линуксоиды грешат, но и не-ИТ-шники тоже.
VolCh
Большинство пользователей unix (самая популярная — МакОсь) и unix-like (самая популярная GNU/Linux) пользуются графическими интерфейсами для пользовательских задач.
safinaskar
Всё-таки не согласен. Да, многие пользователи gnu/linux именно такие, как вы описали. Но между gnu/linux и windows есть отличие, имеющее мало отношения к gui vs console. Для gnu/linux доступна куча информации о внутреннем устройстве ос и всех её компонентов. И доступны все исходные коды. В случае возникновения проблемы можно зайти в её изучении настолько глубоко, насколько вы захотите. Вплоть до самостоятельного нахождения бага и исправления memset (a, b, c) на memset (b, a, c) (условно) в коде какой-нибудь утилиты.
Недавно у меня перестал грузиться мой дебиан. Я достал бекап ос, сделал diff между "хорошей" забекапленной версией и "плохой" текущей, долго перекидывал туда-сюда файлы, пакеты. Наконец, докапался до проблемы. Выяснилось, что почему-то исчез один каталог. Я его создал в "плохой" системе и она начала грузиться.
Вы скажете, что всё то же самое можно сделать и в винде, пускай привлекая консоль. Допустим, но что если пойти ещё дальше? Допустим, я сделал diff на две эти системы debian, увидел, что ядро одно. Значит, ядро можно исключить из рассмотрения. Значит, дальше ребутаться между системами больше не нужно (это время отнимает), можно просто переключаться между ними с помощью systemctl switch-root или ещё чего-то в этом духе, не перезагружая ядро. Переключаться туда-обратно, таскать туда-сюда файлы, выяснять, в чём причина проблемы. Даже если бы опции switch-root не существовало бы, её можно было бы запросто написать.
Винда может так? Сомневаюсь.
В процессе такого же копания с виндой запросто можно упереться туда, где документации уже нет, а код закрыт.
Вот недавно ставил windows 7. Обновлял. В какой-то момент перестал обновляться. Обновление виснет. Вот как эту проблемы решить? В дебиане есть apt-get, он устроен относительно просто. apt-get update по сути просто скачивает несколько файлов, причём он пишет в консоль, какие именно. Можно прикинуть, в чём там может быть дело, 404 file not found или ещё чего. На крайняк открыть сорцы. В случае с windows непонятно, куда копать дальше. Пришлось поискать в инете. Оказалось, нужно вручную скачать определённые обновления и установить. Как я должен был сам до этого допереть?
Как тут не вспомнить недавнюю историю "Билл Гейтс не смог установить Windows 8.1". И вроде у него такая же проблема была, винда в какой-то момент перестала обновляться. :)
PsyHaSTe
Не совсем понял, какое отношение преимущества опенсорса имеют к гуй вс консоль, о чем говорилось в моем комментарии… Опенсорс рулит, с этим никто не спорил нигде.
safinaskar
Ну значит я вас не понял :)
PsyHaSTe
Кстати по-поводу обновления в виндовом мире давно существует NuGet, который для клиентских приложений в десятке прикрутили. Советую попробовать.
Foosa
Можно узнать, чем IDE в данном случае мешает думать-то? Она же не требует вводить минимум 1 строчку кода в минуту.
Просто интересует, почему ваши синьоры выбирают путь отшельников, вместо того, чтобы пользоваться вещами, ускоряющим написание кода, навигацию, поиск и рефакторинг?
am-amotion-city
Когда их большинство, они не могут называться отшельниками.
Вам они ускоряют, а сеньорам — нет. Все просто.
Foosa
Действительно! Спасибо что поделились своей незыблимой истиной!
Пойду выбью это на скале.
Рассчитывать на диалог не вижу смысла.
am-amotion-city
Что именно вам непонятно? IDE не ускоряет работу квалифицированного специалиста. Вы задали вопрос, в котором IDE априори полагалось «ускоряющим написание кода, навигацию, поиск и рефакторинг». Этот тезис неверен, следовательно, неверен весь силлогизм.
Foosa
Спасибо, что участвуете в диалоге (говорю без сарказма).
Мне кажется между нами возникло недопонимание.
Что вы вкладываете в понятие тестовый редактор?
Правильно ли я понимаю, что ваши сеньоры не пользуются ни подсветкой синтаксиса, ни автодополнением кода, ни навигацией (например ctrl+click из IDEA)?
Т.е. и vim и emacs с подобными возможностями мы не рассматриваем как текстовый редактор, потому что там это тоже все можно накрутить при определенном желании.
Мне действительно интересно, как можно программировать эффективно, не имея под рукой документацию и возможности автоматизации.
Про недостатки переиспользование способа «сейчас начну писать, а там как пойдет» я не спорю. Я не понимаю отказа от автоматизации рутинных задач.
Я бы не прочь и статью прочитать с описанием вашей методики и наблюдений
am-amotion-city
То же, что и все.
vim
,emacs
,atom
,visual code
,brackets
— это все редакторы, не IDE.Запросто. Документация у меня, если надо, под рукой, но не прямо перед глазами: и это принципиальная разница. Я помню 95% тех трех языков — с которыми имею дело сегодня — наизусть. А мои коллеги с IDE и бесконечными автокомплишенами и всплывающими подсказками — нет. И это замедляет их работу on the long run.
Рутинных задач передо мной не стоит: их решают джуниоры. И знаете, что? — IDE рефакторит код плохо. Любая, самая продвинутая. Там, где надо имена поменять — мои
sed
+awk
все равно быстрее. А там, где посерьезнее — надо думать, и менять код в 99% случаев не так, как того хочет IDE.Автоматизация хороша там, где думать не надо. На конвейере, например. Но это, к счастью, не наш случай.
И да, я действительно считаю что помнить наизусть таблицу умножения — лучше, чем уметь пользоваться калькулятором. Аналогия абсолютно прозрачная.
sentyaev
Я в какой-то момент заметил, что автокомплит, интелисэнс и автоформатирование, все эти всплывающие подсказки и бульбочки стали мешать и отвлекать от решения задач.
am-amotion-city
Именно.
Foosa
Вообще, еще по университету помню убеждение: «Зачем мне это учить и понимать сейчас? Я знаю, где это можно найти. Если что заново выучу». Но ни к чему хорошему это не приводит. В этом плане я с вами согласен.
Несомненно, отсутствие базовых знаний (в том числе и разрабатываемого проекта) тормозит разработку. Это как если писать на новом фреймворке — каждый раз будешь гуглить «а как сделать X в фреймворке Y».
Но, по моим ощущениям, ваш подход возможен в условиях разработки и поддержки очень небольшого кол-ва проектов. Либо вы занимаетесь только одним проектом в течение длительного времени и не выпадаете из его «контекста».
Но я не представляю, как можно рефакторить и дорабатывать проекты, которые ты, например, делал год назад.
Как у вас происходит изучение новой библиотеки/фреймворка?
Можно узнать у вас, в какой области вы ведете разработку?
Как выглядят задачи, которые вы решаете?
am-amotion-city
Ну да. Повторю в этой ветке в сотый, наверное, раз: я нигде не утверждал, что мой опыт обобщаем. Я просто рассказал, как у нас. И все.
Запросто, если год назад ты подумал о том, что через год ты вернешься к этому проекту. Да, код выглядит немного как чужой, ну и что?
Сел на выходных и написал один из микросервисов, про которые уже давно говорили «хорошо бы» на новой библиотеке/фреймворке.
SaaS. Вот, типичная задача последнего месяца: есть около двадцати потоков данных, из внешних источников. Часть pull, часть — push. Данные разнородны, но внутри должны быть приведены к единому виду. Нагрузка не очень высокая, но заметная — примерно 1К обновлений в секунду. У этих данных в нашем приложении есть подписчики: потенциально около миллиона, пока — в районе десятков тысяч. Когда какая-нибудь сущность из приходящих данных меняется, нужно оповестить всех подписчиков, которые заинтересованы в изменении именно этой сущности. Такое событие потенциально может происходить до тысячи раз в секунду.
Вот. Кода там немного, особенно нашего. Об архитектуре я думал примерно в тысячу раз дольше, чем писал код. То есть, даже если IDE мне бы дало ? увеличение скорости, я бы выиграл 1‰ общего времени.
Я ответил на ваш вопрос?
Foosa
Несомненно. Спасибо за подробное объяснение. Прошу прощения, если диалог со мной понизил вам карму.
Возник еще вопрос в продолжение темы.
Мне было бы интересно узнать, чем вы пользуетесь при обдумывании архитектуры?
UML, псевдокод, какой-то софт, ручка+листочек, просто размышления в голове?
am-amotion-city
Мне уже очень давно плевать на карму.
О, это тема для отдельной статьи на сотню тысяч знаков :)
Если вкратце — я занимаюсь всякой ерундой, типа бессмысленных дискуссий на хабре, просмотра второсортных сериалов, написания стишков, чего угодно, что максимально отвязано от технологического процесса. При этом я продолжаю возвращаться к задаче и вертеть ее так и этак.
Я пробую разные инструменты, языки, средства, задаю странные поисковые запросы по любому поводу, который приходит в голову, и так далее. Разговариваю с коллегами, обрисовывая кусочки проблемы (не всю!). В результате у меня появляется «approach».
Тогда я набрасываю прототип и уже предметно делаю презентацию для всей команды. Команда объясняет, почему оно не взлетит.
GOTO 10
.В какой-то момент появляется ощущение, что я понимаю архитектуру, тогда я тщательно записываю все текстом. Никакими инструментами наподобие UML/прочего софта я не пользуюсь.
В начале века я участвовал в разработке инструмента, позволяющего рисовать свои modelling language (на основе Meta Object Facility — не взлетело) и теперь очень хорошо понимаю, почему все эти инструменты не в состоянии описать архитектуру лучше простого текста.
Ну а потом — сажусь и пишу прототип. Как правило, за пару дней.
Foosa
Я думаю вам может быть интересно:
В онлайн курсе Барбары Оуклей «Научись учиться» (https://www.coursera.org/learn/learning-how-to-learn) как раз было интервью с математиком, который говорил о таком же подходе. Он часто пытается решить задачу, но если не получается, он отправляется ездить на велосипеде, или на скалодром — переключиться с задачи. И часто именно в такие моменты ему приходит решение.
Про modelling language интересно было бы услышать. Но, я мало знаком с этой темой, поэтому, только если у вас свободное время и желание: не могли бы вы раскрыть немного эту тему? Что пытались сделать и с чем столкнулись? Правильно ли я понял, что UML не позволяет отобразить все, что необходимо при проектировании архитектуры?
am-amotion-city
Метамодель
UML
— всего лишь один из возможных экземпляров мета-метамоделейMOF
. Не позволяет, да, а то, что позволяет — избыточно громоздко.Может быть, когда-нибудь я и напишу заметку про
MOF
.0xd34df00d
Ага. «Вам они ускоряют, а сеньорам — нет. Все просто..»
am-amotion-city
В контексте того, что до этого я сто раз пояснил, что это за сеньоры, я убрал тавтологичное «наши сеньоры» и оставил просто «сеньоры». Сенсация!
Вам надо было в журналисты идти, а не в IT, там навык перевирать слова собеседника, выдирать из контекста фразы и самозабвенно к ним апеллировать — весьма востребован.
0xd34df00d
Так и человек не ваш, зачем его сравнивать с вашими сеньорами?
Впрочем, да, в этом проблема таких обсуждений в интернете: куски теряются.
am-amotion-city
Куски теряются только у людей, которые пользуются IDE, у меня с памятью пока все нормально.
Вот дословно текст, на который я отвечал:
Это — внимание! — вопрос. Содержащий ложный силлогизм. Своим ответом я всего-навсего указал на то, что силлогизм ложный. Все. Все далекоидущие выводы — исключительно на совести людей, которые нужные задачки решают, вместо того, чтобы память потренировать.
0xd34df00d
С памятью-то, может, и нормально, а вот с логикой — нет. Понимаете, я не вы, и я, например, читал только процитированную часть в вашем ответе. Потому что цитата — то, на что вы отвечаете, раз уж она приведена.
Порешайте всё-таки задачки.
0xd34df00d
«И понимать» тут ключевое. Если есть, что понимать, то лучше понять сейчас. А учить табличные значения, действительно, смысла мало.
А те вещи, что предлагает IDE, они ближе к табличным значениям.
0xd34df00d
Я исследую новую библиотеку с хреноватой документацией. Я хочу посмотреть, какие у неё есть методы с сигнатурой, похожей на
Item a -> Compiler a
. Почему я руками должен шастать по документации, когда IDE моей мечты могла бы мне всё это подсказать?am-amotion-city
Вы никому ничего не должны, разумеется. Если вам удобнее с IDE — это прекрасно.
0xd34df00d
Я так понял, что использование IDE коррелирует с более низким профессионализмом. Мне вот и интересно, почему и как.
am-amotion-city
Я нигде не утверждал, что коррелирует. Я просто поделился наблюдениями относительно одной отдельно взятой компании. Этот опыт может быть совершенно нерелевантным.
Мое скромное мнение таково: бесконечные подсказки отвлекают и в целом прививают привычку «не стану ничего запоминать, мне все подскажут». Что плохо потому, что у людей теряется целостное понимание проекта. Я смотрю в код, если мне что-то непонятно; IDE могло бы быстро меня от этого отучить. Я не хочу. Вот и все.
webkumo
Как оно может отучить смотреть в код, если документация зачастую неполная или не отражает контракт полностью? А вот быстрая навигация в код, который вызываешь — всегда под рукой. Причём на любую глубину. В том числе с учётом IoC. Да и автоматически всплывающих подсказок у меня, например (с дефолтными для них настройками), самый минимум — ЧЯДНТ?
PS ваши комментарии ну очень похожи на не осилил — значит потенциально вредно… надеюсь, что так только кажется.
am-amotion-city
Меня за мою долгую жизнь упрекали во многом. Но вот не осилил IDE — клянусь, это впервые. Я был, например, в группе бета-тестеров продукта MS Visual InterDev 1.0. И до примерно 2002 года плотно сидел на IDE, да и потом были иногда рецидивы.
Я никого ни в чем не уговариваю, не знаю уж, почему все считают своим долгом обратить меня обратно в свою веру. Не можете без IDE — отлично, значит IntelliJ не разорятся, а им я желаю только добра.
webkumo
подсказка: из-за категоричности ваших суждений. Они вызывают условный butt hurt на уровне восприятия.
Они JetBrains
PS продукты MS называть IDE у меня не всегда язык поворачивается… Перегруженные, неудобные, с кучей проблем при переходе от версии к версии… По крайней мере так мне это запомнилось ещё по университету.
PsyHaSTe
Всегда считал студию лучшей IDEшкой на рынке. IntelliJ пробовал — мне понравилось меньше. Ждем райдер, может он поборется со студией за это звание. Все-таки это не просто IntelliJ, а InelliJ + R#, а вот это уже может перевесить.
am-amotion-city
Ну, страдать за категоричность суждений мне не привыкать :)
VolCh
Как правило (по крайней мере на собеседованиях, где я был с обеих сторон), не требуется написать рабочий код (по сути нужен лишь псевдокод), но нужно показать:
— навыки алгоритмизации и декомпозиции задач
— самые начальные знания управляющих конструкций
— знание стандартной библиотеки на уровне «есть функция/метод которые делают вот это»
stardust_kid
Шикарно написано, философски даже.
Есть такие строки у Леонарда Коэна:
Cyrus
Всегда было интересно, что это за проекты такие, в которых технологии важнее предметной области? Не встречал такого, что бы знание фреймворка давало преимуществ больше, чем знание местных костылей и умение гибко, планомерно делать код лучше.
Если брать не абстрактные холивары, а конкретную работу, то там всегда есть какой-то стек, к которому нужно подготовится. Если разработчик настолько ригидный, что вечно застревает в каком-то стеке (далеко не классическом), инфантильно ненавидит Angular2, Ember, React, etc словно это готовые коммерческие проекты, в которых кто-то кому-то должен, то это уже о чем-то говорит? Никто же не просит контрибьютить ежедневно, но поддерживать актуальное состояние знаний технологий нужно, а главное иметь фундаментальные знания, позволяющие включится в поток после перерыва без нытья.
А нытье будет, просто потому что страшно, что, освоив один инструмент нельзя делать одно и тоже всю жизнь — но это же никак не отличается от остальных профессий. Если хочется больше стабильности, надо подниматься на уровень выше.
maxru
Fen1kz
Да сколько можно-то! Когда уже у вас, мерзких хипстеров, делящих фреймфорки на "старое дерьмо" и "новомодное дерьмо" выйдет из моды ныть на новые инструменты.
Фронтенд очень быстро развивается и это хорошо, новые инструменты в среднем лучше и адекватнее старых. Всяко лучше чем 4 года ждать патч от Oracle.
Вот тут автор жестко палится тем что нету у них такого проекта, а он просто накидал слова из гугла. Browserify + Webpack, масло масляное.
"Главный бармалей" в веб-студии который не может написать простенький сайтик с бекендом, как это обыденно.
sentyaev
Не совсем понятно, что вы считаете развитием.
Фронтэнд — это здоровенный кусок легаси с которым в обозримом будущем ничего не сделать (надеюсь я не прав).
И все «новые инструменты» это по сути новая обертка над этим легаси.
MikailBag
Оберткой над чем являются React, Webpack?
VolCh
React — над DOM прежде всего.
MikailBag
про React согласен.
Взамен предалагаю Babel :)
VolCh
Babel — среда для использования оберток над JS :)
Webpack — обёртка над ОС/шеллом по сути :)
sentyaev
Если очень грубо, то:
React, Angular и т.д. оберта над HTML.
Babel, Typescript и т.д. обертка над Javascript.
less, sass и т.д. обертка над CSS.
Webpack с компанией отдельная история, эти тулы действительно решают свои задачи.
MikailBag
Python — это обертка над C.
Java — это обертка над C++.
C++ — это обертка над C.
C — это обертка над ассемблером.
Ассемблер — это обертка над машинными кодами.
Вывод:
Давайте сразу на машинных кодах писать.
SunX
Побуду занудой:
С каких это пор C++ стал оберткой на C? C++ написан на C++ и не является надмножеством C, так что максимум: C++ — это обертка над ассемблером.
sentyaev
Python и Java компилируются в байткод и запусткаются на виртуальной машине (с Python есть нюансы, но не стоит их тут рассматривать).
C и С++ компилируются в машинный код.
А вот в результате работы, например, Angular + Typescript + sass + Webpack вы получите набор HTML, JS и CSS файлов. И все это добро уже работает в браузере.
Для приложений которые генерируются на сервере HTML + JS работает отлично.
Да и браузер — отличный механизм доставки приложений и их обновлений.
Сейчас есть необходимость в одностраничных приложениях это раз, плюс есть большой кусок мобильной разработки.
Чего бы мне хотелось в идеале — иметь такуюже платформу как браузер, но заменить там HTML, JS, CSS на то, что отвечает современным потребностсям.
Ну и появление webassembly это как раз движение в этом направлении.
MikailBag
JavaScript-движки — либо VM, либо JIT-компиляторы, лиюо что-то посередине.
По сути, то же что и Java-движки. Скажем, апплеты тоже компилируете вы, а запускаются они на стороне пользователя.
P. S. Про WebAssembly: ничего против не имею, джавистам, плюсистам и питонистам станет проще.
sentyaev
Вы правы.
Я же немного о другом говорил, что большинство современных тулов (typescript, angular, react например) транслируют/компилируют «нечто» в HTML, JS, CSS. А дальше да, все это исполняется на vm/jit.
Но ведь все эти инструменты появились только потому, что HTML, JS, CSS не могут решать задачи современных приложений. Я именно это имел ввиду.
VolCh
Как не могут, если в них компилируется? :) По сути все эти исходники для бабеля/вебпака/… это сахар для HTML, JS, CSS, позволяющий упростить и ускорить работу разработчика, но ничего нового в возможности не привносящий. Более того, у грамотного разработчика «нативный» HTML, JS, CSS скорее всего будет быстрее, красивее, легче и т. д. чем результат компиляции.
sentyaev
Конечно, я выразился не совсем корректно, конечно могут.
Когда я говорю, что не могут, я имею ввиду задачу вида:
Сделать X за Y часов и Z ресурсов.
MikailBag
Ладно, рассматривайте их как байткод для веба.
Вы же не будете писать на ассемблере под JVM.
Jaromir
Учите
мемыweb components. Они уж точно не протухнут. А использовать можно уже сейчас, докинув полифилловstardust_kid
Вы гарантируете это?
Jaromir
Они ведь будут встроены в браузеры
MikailBag
некоторые перемещают в категорию "X — дерьмо!" и браузеры тоже :)
ktarasov
«М-да, бяда, ой бяда бяда.» Про собеседования понравилось, есть похожий опыт. :)
Вообще, посмотрите, например на ремонт электроники. С паяльником сидят только энтузиасты. В сервисных службах же, тупо меняют блоки, даже не могут сказать как этот блок в деталях работает. Все усложняется. Да и не хотят разбираться, ибо компания снижает себестоимость.
Программирование такая же область, где энтузиасты изучают алгоритмы и паттерны и пишут фреймворки, а те кто хочет рубануть денег «в легкую» — интегрируют JQuery плагины. Печалька.
stychos
Спасибо, автор.
IIvana
Тенденция достаточно обща и началась не вчера: https://habrahabr.ru/post/282986/
Lemko
Спасибо, автору. Прям как у нас.
safinaskar
Javascript — гэ. От начала до конца. Это просто хак. Многие библиотечные функции возвращают «значение или null», но с null'ом можно забыть сравнить, отсюда баги. И это вместо нормального std::optional из C++ или Maybe из Haskell. Если пишем
var a = {"a": 0}; a.b
, то ошибку поймаем только в рантайме. Никакого этапа компиляции тут нет. Да и вообще, это, типа, не ошибка.a.b
— это не синтаксическая ошибка, это просто undefined. Да и вообще, огромное количество кода, который в компилируемых языках был бы запрещён, в Javascript разрешён. Это не ошибка, это undefined. Список можно продолжать, ищите сами списки в интернете вида «100 недостатков Javascript». Это просто кошмар для человека, привыкшего к компилируемым языкам, таким как C, C++, Haskell, а также к такому красивому, пускай и заброшенному и малофункциональному языку на сегодня как Pascal.Сейчас хайп вокруг разных технологий на базе js, но неудивлюсь, если вдруг очень скоро будет признано, что js — гэ, а вместе с ним node и все фреймворки на нём :)
VolCh
По-моему, вы путаете разделение языков на компилируемый/интерпретируемый и на с сильной/слабой типизацией. Ассемблеры — семейство компилируемых языков, но обычно вообще без типизации, даже слабой.
И, кстати, многие функции стандартной библиотеки C возвращают в качестве признака ошибки 0 или -1. Это не считая kernel panic/BSOD.
safinaskar
А я не говорил, что единственная проблема javascript в том, что он некомпилируемый. Если взять javascript и, так сказать, в лоб его переделать из интерпретируемого в компилируемый (возможно, добавив попутно типизацию), он всё равно сохранит многие недостатки.
Да и вообще, проблема не в том, что javascript некомпилируемый. Просто я перечислил известные мне компилируемые языки как положительные примеры, как примеры "хороших" языков в отличие от "плохого" javascript. Python тоже, наверное, можно было привести в качестве примера "хорошего", но я не знаю python, поэтому упоминать его не стал.
У javascript проблемы не только с типизацией. Слышал, что есть некий typescript. Думаю, эти ребята просто взяли javascript и в тупую добавили типизацию, не изменив всего остального. Значит, многие проблемы javascript всё равно остаются.
Да, это плохо. Но если говорить про C++, это решаемо. Можно обернуть эти функции в обёртки, которые возвращают std::optional, std::variant и т. д.
Как пример хорошего языка приведу Haskell. Наверное, привёл бы тут ещё и Python, если бы знал его. (Сюда же, видимо, Go и Rust.) Haskell с одной стороны не подвержен всевозможным утечкам памяти, сегфолтам и т. д., в отличие от C/C++, но с другой стороны нет вот этого вот бардака в стиле "любая переменная может оказаться null, а ещё undefined", как в javascript
PsyHaSTe
Все проблемы JS давно известны, тем не менее это единственный язык для клиентского взаимодействия. Так что придется его любить таким какой он есть либо не пользоваться им вовсе. Тем более, что есть удобные тулзы по уменьшению боли aka TypeScript и компания.
safinaskar
Вполне возможно, что на js вообще программировать перестанут, а будут писать лишь на том же typescript или на чём-то ещё и потом транслировать в js. Ну или браузеры введут новый язык. И программирование на js исчезнет как со стороны клиента, так и сервера. Вместе со всякими node. Я это просто к тому, что сам вот этот js в какой-то момент может быть объявлен отстоем
VolCh
1) На сервере и вообще в CLI JS далеко не единственный язык, в том числе не единственный интерпретируемый со слабой типизацией, но его популярность растёт. Плюс используется для разработки мобильных приложений без привязки к браузеру. Это только то, что массово мелькает на разных общеразработчиских ресурсах.
2) Недостатки JS могут удаляться потихоньку, объявлением части функциональности deprecated с последующим выпиливанием.
safinaskar
Даёшь сайт http://jssadness.com (по аналогии с http://phpsadness.com )
http3
Таки да.
Но так поступают как раз лохи. :)
Таки да. В вакансиях тех работ, где я работал, было куча умных словечек, которые не использовались в проектах. :)
Да? :)
Сингулярность — это Windows XP + Opera 12. :^)