Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
IDE — необходимость, независимо от нашего желания.
C/С++, python, Go, js — масштабно, ну и так, балуюсь на всем по мелочи.
И завязка на CMake имхо сильно сковывает, когда куча проектов на обычном gnu make.
Честно говоря не понял о чем вы…
почти только джавистыВот, кстати, да — в Java без IDE практически никак. Нет, конечно, можно программировать на Java и в редакторе, даже не в FAR с подсветкой синтаксиса, а вообще в Notepad без плюсов, но это экстрим, и так можно писать только если скорость написания и читаемость кода не волнует и рефакторить и «облагораживать» код не собираются. Java вообще интересный язык в этом плане — как будто настроена на то, чтоб извлекать пользу из IDE по максимуму. Наверное, из-за строгой типизации и изначально безопасного кода.
Какой бы программист не был, с IDE он все равно будет быстрее писать код, видеть все ошибки и т.д.
Но загвоздка в том, что ее надо настраивать, изучать (а современные IDE сложны), а это — лень. А без адекватной настройки она — да — будет скорее мешать, увы.
изучать и настраивать вим им не лень, а идешку они не осилят?
au FileType xml exe ":silent 1,$!xmllint --format --recover - 2>/dev/null"clang-format более 10к строк кода (clang/unittests/Format/FormatTest.cpp). Там даже Emacs иногда притормаживает :)И ИДЕ значительно чаще дает этот выигрышь по времени.
А уж взять код имеющегося плагина (если он open-source) и добавить в него простую фичу — это вообще час-два работы.
Последнюю фичу в Emacs — переключение на консоль и переход в конец буфера — я написал примерно за 10 минут
а вы, очевидно, написали, сколько времени будете вводить код плагина.
85% времени при разработке на Python я провожу в режиме «написать функцию -> проверить в REPL». Т.е. подавляющее большинство операций, которые я выполняю, напрямую связаны с переключением между текстовым редактором и REPL.
как юнит-тесты помогут мне в этой задаче?
Никак. Вы прыгнули с задачи про «соединение с БД и поиск ошибки» на задачу а-ля матлаб.
Давайте теперь предположим, что вы дошли до 10-го шага, когда должны получиться там какие-то финальные результаты, но получается полная хрень. И тут вы осознаёте, что ошибка была где-то на шаге 3. Будь это отдельный скрипт — открыли, поправили, запустили и пошли пить кофе. В вашем же случае нужно участие человека.
В Emacs у меня обычно открыто 2 буффера — один для кода, а второй с REPL.
А теперь давайте предположим, что к вам в команду пришёл новый сотрудник Вася и просит поделиться с ним вашими наработками. Вы ему дамп процесса python снимете и попросите восстановить на его машине? Попутно рассказывая, что первый шаг это 8 раз вверх, второй — 6, а если 4 вверх, то там ошибка, и результаты никуда не пошли?
заменить его REPL-ом
Боюсь, что это тесты очень часто используются только из-за того, что в языке нет REPL. Последний сценарий, который я делал в REPL
85% времени при разработке на Python я провожу в режиме «написать функцию -> проверить в REPL». Т.е. подавляющее большинство операций, которые я выполняю, напрямую связаны с переключением между текстовым редактором и REPL.
В языках «таких как Java» не требуется добавлять временный метод main, так как достаточно проставить точку останова в нужное место и после этого ввести в Watch нужное вам выражение.
Я никаких выводов не делал. Всего лишь указал вам на то, что считаю неверным и предупредил, что вас могут понять превратно.
Расскажите мне, пожалуйста, как мне правильно программировать на Python и самое главное почему?
Боюсь, что это тесты очень часто используются только из-за того, что в языке нет REPL.
Надеюсь, мое мнение вас не оскорбит. Но мне python не нравится совсем. И я вообще предпочитаю на нем не программировать. Это — уже совсем другой спор…
Мировая наша с ним состоит в том, что питон удобен для маленьких программ, а Java — для больших.
А так как я комментарии читал сверху вниз и отвечал последовательно, то, что вы писали ниже, я прочел позже.
Вы меня обвинили в самоуверенности на основании моих чисто пользовательских наблюдений за YouTube.
Но комментатор ниже прав: наличие крупных проектов само по себе не доказывает, что язык для них пригоден.
Думаю, скорее, вместо «постоянной пересборки проекта в фоновом режиме» при написании программ на Java в IDE типа Eclipse.
Кхм… т.е. на плюсах пишут только труъ-профи? ;)
А если подключить ещё пару фреймворков и вспомнить огромное JDK — то даже на простом проекте без поиска приходится тяжеловато (все классы не запомнишь).
можно, но в процессе написания кода, бывает, приходит понимание более точного названия — вручную переименовывать?
опять же в процессе разработки класс разрастается + появляются классы с похожим функционалом — вынести общее в общий абстрактный — вполне себе вариант.
И да, вы ещё забыли кучу различных рефакторингов
Когда случается потребность (пусть и редкая) — становится очень даже критичной. Ну и для работы с внутренними переменными тоже бывает полезно
Инструменты рефакторинга это делать аккуратнее, быстрее и с лучшим охватом мест использования (не приходится их искать).
Понимаю, но слишком уж максималитичо было сказано.
В ней не нужно было следить за выделением и освобождением памяти, не нужно было учить 100500 замысловатых конструкций и концепций языка и даже исключения везде указывались явно, так что забыть их проверить было просто невозможно.
Java — это практически единственный язык, писать на котором без IDE просто невозможно.
Потому что я, по вашему определению, «самоосознанная обезьянка».
Я считаю, что язык C++ образца 98 года ужасен
Я считаю, что регулярное переосмысление архитектуры проекта и последующий рефакторинг «говнокода» — неизбежная санитарная процедура.
Я убежден [...]
Во-первых, потрудитесь почитать хоть что-то вот от этого господина, например. Вы поймете хотя бы приблизительно, какого уровня задачи решают «обезьянки» в своей повседневной работе.
А если хотите знать, что им приходится учить, то, например, вот.
А во-вторых, посмотрите, как часто в вашем любимом проекте вылетают исключения, которые кто-то по ошибке забыл поймать.
Попробуйте — поймете.
регулярный рефакторинг бывает нужен, чтобы «подчищать за обезьянками», а для создания качественного кода «достаточно понимать всего пару принципов»
дебаггер не может сделать step backКстати, вот за это я их и не люблю. Особенно «весел» дебаггинг при отладке серверных систем, которые стартуют по 10 минут — приходится кучу раз делать запрос и кучу раз перестартовывать (по 10 минут каждый) чтобы выяснить причину. Был бы step back — цены бы такому дебаггеру не было.
Для JavaScript в принципе не может существовать полноценной IDE
без выполнения программы практически невозможно точно узнать что делает какой-то кусок кода
в C# такие есть динамические типы
Попробуйте, скажем, включить нумерацию строк в том же emacs!
Emacs при желании — это не только IDE, но и практически полноценная операционная система
Вот именно — гуглится. Т.е. даже такую элементарную вещь включить без помощи гугла — никак. А что говорить о более сложных вещах?
Поиск файла — да. В том же projectile работает. Только я с ним 2 дня медитировал, пока разобрался со способами индексации и удалось получить приемлемую скорость работы этой функции.
которой не хватает хорошего текстового редактора :)
Если гуглить — это, по-вашему, долго и сложно, то можно просто начать набирать `M-x line-...`,
Emacs — это непривычный текстовый редактор, да, но плохим его назвать точно нельзя.
Это не «сложно и долго». Это — излишне сложно и долго. Зачем мне вообще знать эту команду? Почему не мышкой? Нет, я понимаю, конечно, почему в emacs-е это так. Но это же является недостатком для промышленного использования — слишком сложно.
Это не «сложно и долго». Это — излишне сложно и долго
Почему не мышкой?
Но, чёрт возьми, это же прямо супермаркет какой-то: самый ходовой товар — не на полке с аналогичными, а на другом конце зала.
Просто воспринимайте емакс как конструктор текстового редактора. И если вам некогда возиться с конструктором, то логично использовать IDE.
я поднастроил себе редактор всего за месяц
который меня устраивал всем, кроме того, что в нем нельзя было работать без использования мыши
В emacs не надо учить 100500 хоткеев
Если вы запустились из Eclipse
Idea ещё и подсветит знакомые классы в стектрейсе
И идеология «надо всё делать без мыши» ущербна.
Мое утверждение 2: Vim не позволяет выбирать пункты из меню мышкой, тем самым навязывая пользователю стиль работы «keyboard-only», подходящий далеко не всем. К тому же, он предлагает свой совершенно шизофренический дизайн с двумя режимами «пикать и всё портить», перемещение по тексту клавишами, для этого не предназначенными и под всё это подводится теоретическая база (смехотворная, на мой взгляд), что передвиганное рук по клавиатуре занимает время, которое можно сэкономить.
Мое утверждение 3: навязывание ограничений пользователю говорит либо об ущербности системы, либо об ее недоработанности.
Я лишь хочу дать понять, что переход с них на полноценную IDE существенно вероятнее улучшит вашу эффективность, нежели наоборот.
Вы и правда считаете, что все эти люди — городские сумасшедшие, которые переходят на подобные редакторы в ущерб удобству?
в emacs таки при желании можно и мышкой тыкать, менюшки и прочие свистелки упрощающие жизнь любителям этого контроллера присутствуют)
держусь за мышку, значит мышкой поконтролю
И, наконец, люди, которые считают, что при увеличении проекта его будет так же легко контролить в Emacs, как в Eclipse, неправы. Они, очевидно, просто не имели дело с по-настоящему крупными проектами.
Или, хотя бы, осуществить контекстный поиск: пусть у меня в одном файле есть двадцать переменных «iter»
Можно в Emacs переименовать переменную или класс по контексту?
Или, хотя бы, осуществить контекстный поиск: пусть у меня в одном файле есть двадцать переменных «iter» в разных функциях — я могу получить список вхождений КОНКРЕТНОЙ из них, который не включает остальные, основывается на реальном парсинге кода, а не на регулярках, и шагать по нему?
Можно написать (хрен с ним, пусть с клавиатуры) что-то типа «add watch», чтобы потом, идя по коду отладчиком, видеть значение переменной в окошечке сбоку?
А как делается навигация типа «Ctrl+Click», то есть прыжок к декларации? И работает ли он для переменных, а не только для классов?
А вызвать дерево вызовов функции (функции, которые вызывают функции, которые вызывают эту функцию) можно?
А можно такое же дерево для наследования классов?
Основной инструмент для поиска по коду у меня — это grep
Я слишком избалован, чтобы при редактировании кода лезть в консоль всякий раз, когда мне понадобится найти слово.
Я имел в виду именно семантический поиск. Неоднократно сталкивался с Java-проектами, в которых класс с одним и тем же именем присутствует в разных пакетах.
Просто воспринимайте емакс как конструктор текстового редактора
Если продолжить аналогию с конструктором.Если было бы надо, то, думаю, давно сделали бы специальные детали с твёрдыми вставками и с тяжёлыми вставками…
Из лего можно собрать молоток.
У опытного программиста при неограниченном запасе времени получится не хуже.
Никогда в жизни у меня не было практической задачи «прыгнуть на 3 слова влево»
всего содержимого текущего тега, или значения атрибута тега
выравнивания тела функции
замены текущего слова
Универсальное решение для замены куска текста
а при вставке совершенно левого кода тут же его форматируют
Что-то типа Alt+Shift+Up и начать писать новое слово
Жмякаете dit, удаляете содержимое тега. Есть еще сочетания для удаления всего между {}, [], <>, "", и т.д.
Слово, предложение, блок обрамленный чем либо и т.д.
Т.е. ваше dit совершенно замечательное, но нифига не универсальное
У меня в коде нет предложений
Не, она будет работать хоть в LaTeX, если вы засуните туда теги.
Заменим понятие: предложение — строка
Покажите пожалуйста как это будет выглядеть для Python
Home, Shift-End, начать что-то писать. Ну или наоборот — End, Shift+Home

рефакторить приходится целыми подсистемами, с IDE это проще.
Программисты там часто берутся из разряда подешевле и побольше
им нужно поставить IDE которая будет бить их по рукам, и которая не даст сломать процесс, и которая будет заботливо расставлять пропущенные запятые, показывать что вместо = тут должно быть ==, что переменная не используется и т.п…
Те кто пишут для веб на PHP, JS, Python, Ruby.
Если уж абстрагировать до такой степени, то давайте сразу и доабстрагиуремся до того, что программирование в конечном счете — это редактирование текста.
А навскидку — в вебе существует гораздо больший зоопарк технологий, который IDE поддерживать просто не успевают.
Всякие тесты и CI распространены в гораздо меньшей степени, чем в явамире.
крупных проектов, большинство их сторонников встают на дыбы и начинают «рыть землю» на предмет «вы просто не умеете ими пользоваться», вместо того, чтобы мирно признать, что их проекты просто меньше, чем те, в которых работают на IDE. Это же удар по самолюбию — вроде как несерьезное дело делаешь…
Эксперта отличает умение подбирать инструмент под задачу и спектр владения этими инструментами
Ну так пользуйтесь чистым Vim. Он таки вполне расширяется до IDE.
вместо того, чтобы мирно признать, что их проекты просто меньше, чем те, в которых работают на IDE. Это же удар по самолюбию — вроде как несерьезное дело делаешь…
Например, низкоуровневая разработка для linux.
— не надо запоминать все эти комбинации, когда есть пакет ergoemacs-mode (рекомендую ставить из MELPA STABLE, в MELPA версия с глюками), который даёт старые добрые Ctrl+C, Ctrl+V и т.д.
(cua-mode)
И если размер проекта приближается к 100 тыс строк и состоит из тысяч файлов...
Проект на Scala, над которым мы работаем последние месяца 4, содержит всего 360 файлов и 17729 строк.Подозреваю, что на Java это проект занимал бы раз в 5 больше…
comint — и я могу выполнять команды прямо из любимого редактора с гораздо большим удобством, чем работая из терминала. Более того, легко делиться наработками с коллегами — им нужно лишь вставить код в буфер и выполнить одну команду. Для автоматических обновления приватных плагинов нужно, конечно, настраивать свой плагин-сервер.Я захожу на сервер по ssh, у меня там месяцами живёт сессия tmux + инстанс emacs
Вообще говоря, заметно общее увеличение активности Emacs-сообщества. Надеюсь, нас ждёт ещё много отличных плагинов, и когда-нибудь разработка на C++/Java в Emacs будет действительно приятной.
Хм, в emacs есть tramp-mode, через который можно на удаленные машины по томуже ssh ходить аки тонкий клиент… в чем смысл запускать emacs на удаленной машине?
если есть возможность свой конфиг утащить на удаленную машину
make install. Пути к программам и прочая мелочь донастраивается через M-x customize в отдельный файл (попадающий в .gitignore) по мере необходимости.может чего интересного у вас там есть под эти языки
Для начала неплохо бы добавить полноценную многопоточнсть в emacs… без неё ни о каких полноценных intellisense говорить не приходится)
Эта проблема давно решается запуском многопоточного бэкэнд-процесса, асинхронно выполняющего все медленные операции.
простейшие операции, типа комментирвоания пары сотен строк кода, подвешивают редактор
факт, что ST с этой задачей справлялся без запинок
Эту статью, например, я пишу в Emacs.Вы уж простите, но лучше бы писали в более простом текстовом редакторе, но с проверкой орфографии. Хорошая статья, но всё впечатление портят многочисленные ошибки.
И здесь ему редактор не может помочь абсолютно ничем.Это неправда. Всё сильно зависит от языка программирования и установленных плагинов. Например, для яыка Go и плагина vim-go:
Список параметров метода во всплывающей подсказке не покажет,Покажет. Либо вызываем
:GoInfo когда курсор на нужном слове, либо включаем в настройках let g:go_auto_type_info = 1 и подсказка выводится постоянно по мере перемещения курсора.перейти к определению метода не позволит,Позволит. Штатная команда Vim:
gd (goto definition).синтаксис не проконтролирует.Проконтролирует. При каждой записи файла выполняется проверка синтаксиса, выводится список найденных ошибок и курсор прыгает на первую ошибку.


Я использую сочетания клавиш тогда и только тогда, когда это приводит к заметному росту производительности
И если я буду зенками вращать вверх-вниз по пять раз за набор строчки, у меня морская болезнь начнется
Не знаю таких сочетаний клавишь, который приводили прямо таки к заметному росту производительности
fmt.P<Tab>
И не сумеет никогда
Редактор или IDE? Очередная попытка анализа