• Как повысить уровень программирования?

    tiabc
    @tiabc
    Бизнес-партнер и консультант по технологиям
    Хорошие разработчики постоянно развиваются и никогда не стоят на месте. Любое развитие состоит в делании дел, в решении конкретных задач и в обратной связи, которую ты получаешь от других или в результате рефлексии.

    TL;DR: Читайте книжки, делайте дела, читайте чужой код.

    Что можно начать делать прямо сейчас, чтобы стать программистом лучше?

    1. Изучайте базу. Алгоритмы, сети, криптографию, архитектуру, ос, устройство браузеров, компиляторы и т.д. Изучение подобных вещей дает понимание какие задачи бывают в реальном мире и как "большие дядьки" решают возникающие проблемы. Это кладезь инсайтов.

    2. Устройтесь на фултайм-работу с сильной командой даже если джуниором. Я считаю, что есть только один способ расти как разработчик: работать фултайм над одним бизнес-продуктом. Такой подход учит решать проблемы масштабируемости, думать заранее, работать над процессом, которому вы следуете в разработке, решать задачи, возникающие с длительной эксплуатацией, решать проблемы с удобными окружениями и вообще учиться планировать свою работу в связи с нуждами бизнеса.

    3. Написание кода - не самая большая часть работы сеньор-девелоперов, я бы сказал. Но когда речь заходит о самом коде, нужно понимать что ты пишешь и зачем. Есть классические книжки, которые можно найти, например, в матрице компетентности программиста, есть современные, но полезные типа The Art of Readable Code, которую я очень рекомендую. Нужно читать книжки. На собеседовании я всегда спрашиваю какие книжки читал или читает соискатель и если ответ отрицательный, то это большой минус.

    4. Участвуйте в опенсорс. Там вам всегда приходится сталкиваться с образом мысли самых разных людей и кодом, который они пишут. Это учит вас читать чужой код, находить в нем ошибки и критически и аргументированно к нему относиться, предлагая свои решения. Опенсорс-разработка, так же как и книжки, дает вам тот чужой опыт, который бы вы никогда сами не получили от людей, которые часто умнее или опытнее вас в чем-то. В опенсорсе, кстати, в отличие от бизнесовой разработки, есть шанс в удовольствие писать очень качественный код, в котором в бизнесе далеко не всегда есть необходимость.

    5. Наберитесь терпения. Это не случится за один день. Думайте над именованием, разделяйте обязанности, изучайте алгоритмы и экосистему, оптимизируйте ваше рабочее место, изучайте новые технологии, читайте статьи и в течение ближайших лет регулярных усилий вы обретете новый способ мышления и будете разрабатывать поддерживаемое и надежное ПО. Легкого пути, к сожалению, нет.
    Ответ написан
    2 комментария
  • Что такое Less и Sass?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Лень двигатель прогресса. Хороший пример - принцип DRY - Don't repeat yourself. Я весьма подозреваю что вы стараетесь соблюдать этот принцип когда делаете макеты или чем вы там занимаетесь. Так же я весьма уверен что вы хотя бы пытались чуть автоматизировать рутину своей повседневной работы. Так же у вас могли быть ситуации когда вы переиспользовали какие-то элементы. Мало ли.

    Так вот... CSS это тупая таблица стилей. Селектор и стили, ничего сверх умного тут придумать нельзя. Лет 5-10 назад было довольно модно держать один мегажирный CSS файл на 10К+ строк и радоваться жизни внося все больше изменений и т.д. Соответственно даже если вы соблюдаете всякие правила модульной верстки и все такое, у вас возникает несколько проблем:
    • организация стилей, то есть держать все в одном файле не удобно особенно когда проект длится годами
    • Дублирование стилей и селекторов. По мере развития проекта появляются какие-то снипиты которые можно реюзать. Так же у вас может появиться масса однообразных селекторов отличающихся лишь немного. При модульных подходах вложенности редко имеет место быть но все же имеет. Но не будем забывать что большинство фигачит селекторы просто так. В итоге если мы переместили блок или переименовали класс какого-то блока нужно отредактировать еще массу селекторов.
    • Привязка размеров и параметров к другим стилям, например у вас в стилях задана ширина блока, от нее зависят другие параметры, отступы для других блоков и т.д. Да, в css3 появился calc для этого но это было относительно недавно и только с недавних пор можно почти без опаски использовать эту штуку.
    • Таблицы стилей, как и HTML ориентированы на удобный разбор этого добра машиной, но не человеком. Человек же существо ленивое и как-то вот лень лишний раз скобку поставить или точку с запятой. Просто лень.


    Есть так же хорошее правило, или идея если хотите.... Если код можно сгенерить - его лучше сгенерить. То есть для решения всех выше перечисленных проблем придумали препроцессоры. Они как бы были и раньше всех этих scss/less/stylus но как-то не решали всех проблем и т.д. Что в итоге было предложено (перечисляю в том же порядке что и в списке выше).

    • У CSS есть такая штука как @ import. Но не очень круто импортировать сотню стилей в продакшене. Стоит сделать так что бы все стили были склеены при сборке проекта. Эта идея в итоге развилась и если разработчик использует это дело правильно, можно зайти в любой файл со стилями и увидеть список всего от чего зависят эти стили. Какие стили подключаются и т.д. Причем один файл с зависимостями может быть подключен в нескольких файлах а препроцессор сам разберется как и куда все вставлять сгенерив максимально оптимизированный по структуре файл. А разработчик получил четкую структуру файлов и возможность быстро найти где что и от чего зависит.
    • С селекторами проблему предложили решить наиболее логичным вариантом. Если у нас есть вложенные селекторы, то имеет смысл определять их внутри блока этого селектора. Это существенно упрощает поддержку стилей. Так же для управления снипитами и прочим добавили миксины - эдакие параметризованные или нет функции которые выплевывают шматок CSS. До появления штук вроде autoprefixer это был единственный способ писать поддерживаемые стили, использовать плюшки CSS3 и вообще новые плюшки и не сойти с ума от префиксов. Префиксы это только пример, там могут быть самые разные штуки позволяющие грамотно производить реюз стилей
    • Проблему зависимостей значений стилей друг от друга решили... собственно самым очевидным способом - переменные. Это удобно, легко поддерживать и в умелых руках это мощный инструмент. Нужно поменять базовые цвета - не нужно лазить по 100500 блоков и править значения руками, можно поправить переменные и все будет хорошо.
    • Насколько я помню SCSS/LESS не стремились решить эту проблему. Какие-то решения образовывались сами собой с течением времени. В плане минимализма и выразительности пожалуй сейчас самая крутая штука это stylus.


    Что в итоге произошло. В один прекрасный момент какие-то там рубисты придумали SCSS (они вообще не любят все что не в стиле ruby в плане минимализма и выразительности). Затем чуваки подумали и сказали, SCSS это круто но почему-то они используют синтаксис знакомый именно Ruby разработчикам а не обычные для CSS конструкции. В итоге реализовали LESS, причем его уже реализовали на javascript, что с наличием node.js позволило это все добро еще на одной платформе собирать. А так как под эту платформу и так плодили препроцессоры оно удачно вписалось.

    Далее уже шли какие-то модификации дальнейшие, вроде того же Stylus, где синтаксис упростили просто до нельзя.

    Личное мнение. На сегодняшний день я не вижу смысла использовать чистый CSS хоть на малых хоть на больших проектах. Вот вообще никакого.
    Ответ написан
    3 комментария
  • Существует ли для chrome расширение позволяющие эмулировать работу мыши клавиатурой?

    @Toast
    Vimium
    https://chrome.google.com/webstore/detail/vimium/d...

    Чтобы начать поиск нажимаем / , как в виме и вводим строку поиска. Но для того что вам нужно, жмем букву f и он подсветит буквами все кликабельные элементы, так же есть плюшки быстрого перехода к полям ввода. Удобно встроен help, просто нажимаете ? и он появляется. Полезная штука, рекомендую.

    Чтобы работала и русская раскладка в настройки нужно добавить:
    map  ? showHelp
    map  о scrollDown
    map  л scrollUp
    map  р scrollLeft
    map  д scrollRight
    map  пп scrollToTop
    map  П scrollToBottom
    map  яР scrollToLeft
    map  яД scrollToRight
    map  <с-у> scrollDown
    map  <с-н> scrollUp
    
    map  в scrollPageDown
    map  г scrollPageUp
    map  к reload
    map  пы toggleViewSource
    
    map  ш enterInsertMode
    
    map  Р goBack
    map  Д goForward
    map  пг goUp
    map  пГ goToRoot
    
    map  пш focusInput
    
    map  а     LinkHints.activateMode
    map  А     LinkHints.activateModeToOpenInNewTab
    map  <ф-а> LinkHints.activateModeWithQueue
    
    map  . enterFindMode
    map  т performFind
    map  Т performBackwardsFind
    
    map  хх goPrevious
    map  ъъ goNext
    
    map  нн copyCurrentUrl
    map  на LinkHints.activateModeToCopyLinkUrl
    
    map  з openCopiedUrlInCurrentTab
    map  З openCopiedUrlInNewTab
    
    map  Л nextTab
    map  О previousTab
    map  пе nextTab
    map  пЕ previousTab
    map  п0 firstTab
    map  п; lastTab
    
    
    map  ц moveTabToNewWindow
    map  е createTab
    map  не duplicateTab
    map  ч removeTab
    map  Ч restoreTab
    
    map  щ Vomnibar.activate
    map  Щ Vomnibar.activateInNewTab
    
    map  Е Vomnibar.activateTabSelection
    
    map  и Vomnibar.activateBookmarks
    map  И Vomnibar.activateBookmarksInNewTab
    
    map  па nextFrame
    
    map  ь Marks.activateCreateMode
    map  ё  Marks.activateGotoMode
    Ответ написан
    Комментировать
  • Как настроить подключение к серверу через плагин Sublime Text - FTPSync?

    BedwaRe
    @BedwaRe
    Пиши код
    Мухи к мухам, котлеты к котлетам. Не пытайтесь сделать из Sublime ftp клиент или веб-браузер, он не заточен для этого. Используйте связку Sublime Text + WinSCP и поверьте, в ближайшее время её не перебить никому.
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux выбрать?

    Mint на данный момент одно из лучших решений, для вас. Программировать вам будет удобно практически на любом дистрибутиве. Установка необходимых программ склоняется к нескольким строчкам в терминале.
    С драйверами все так же очень хорошо в 99.9 процентах случаев, за исключением очень уникальных звуковых карт.
    У меня большой опыт использования различных систем и пока я остановился именно на Mint. Как на самом простом в использовании и первоначальной настройке (для моих нужд система готова спустя 20 минут после установки)
    Постараюсь расписать свои впечатления.
    Mint
    -Наиболее виндоподобен интерфейсом. Переход на него не принесет особого дискомфорта.
    -Для корректной работы, потребовалось настроить видео, скачав драйвер с офф сайта радеон.
    -Высокая скорость работы после установки драйвера.
    Elementary OS
    -Очень высокая скорость работы и красивый интерфейс
    -Есть некоторые недочеты во взаимодействии пользователя с системой.
    -Накладывает ограничения там, где казалось этого и быть не должно. Так и не смог запустить установку deb пакета. Что бы я не делал, писало - нет доступа.
    -После официального обновления не запустилась. Зависла на загрузочном логотипе ос :D
    Ubuntu 13.04
    -Своеобразный интерфейс, требующий пару дней на привыкание.
    -Немного ограниченный набор приложений, которые возможно установить из коробки(решается установкой Synaptic)
    -Не вышло через граф. интерфейс настроить проводное подключение к интернету.
    ArchLinux
    -Хардкорная установка и настройка. Новичок без 2го устройства и открытого мануала по установке, врядле разберется, как правильно настроить систему.
    -Огромный выбор возможных приложений для установки, из коробки.
    -Система для тех, кто любит точно подстраивать под свои хотелки, рабочее окружение и может потратить на это недельку, другую.

    Вывод таков. Вам подойдет любой дистрибутив из 10 популярных. Любой из них при правильной настройке можно заставить работать так, как нужно хозяину. С драйверами, так же ни один из них проблем не имеет. У каждого большое количество поклонников и на официальном форуме разобраны почти все возможные проблемы.
    Вопрос только в том, чего душе угодно? Сразу из коробки иметь красивый и дружелюбный интерфейс (Mint, Elementary OS) или подстроить всю работу приложений, интерфейс, вывод информации под себя(ArchLinux).
    Ответ написан
    1 комментарий