• Какие книги полезны для повышения эффективности одного программиста?

    @cluberr
    Книги и в каком порядке лучше читать:
    1) "На пике" Брэд Штульберг и Стив Магнесс
    2) "Программист-фанатик" - Чед Фаулер
    3) "Путь программиста" - Джон Сонмез
    4) "В работу с головой. Паттерны успеха от IT-специалиста" - Кэл Ньюпорт
    5) "Программирование без дураков" - Катрин Пассиг
    Ответ написан
    Комментировать
  • Как (и возможно ли) дотянуться до Junior JavaScript Developer в кратчайшие сроки?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Во первых: совершенству нет предела.
    Во вторых: невозможно объять необъятное и впихнуть невпихуемое.
    В третьих: как ты не крутись, а технологии развиваются быстрее, поэтому отставание неминуемо, как следствие приходится всегда чем-то жертвовать ради чего-то более важного.

    Итого: заказчика не интересуют твои философские страдания. Его интересует как быстро, качественно и за какие деньги ты решишь его проблемы. Решаешь за разумное время, адекватный ценник и с удовлетворительным качеством - не важно как ты себя именуешь, спрос на тебя будет.

    Джуниористость/синьористость конкретного разработчика - штука весьма условно субъективная. На собственном опыте скажу, что одно дело, когда ты первый и единственный парень на деревне - ты почти что бог, потом с той же головой, теми же руками, опытом и знаниями оказываешься в среде подобных себе, разной степени синьористости божков, и, внезапно, ты сырой джун но с очень хорошим потенциалом.

    Я не очень понимаю, чего вдруг тебя потянуло в разработку. В целом дело это весьма муторное и рутинное, и его надо бы, по хорошему, очень сильно любить, чтобы прям вот пёрло, тогда есть шанс зацепиться, удержаться и даже эволюционировать как разработчик.

    Я бы, для начала, досконально убедился, что это вот именно прям вот то самое, чем я бы хотел заниматься ближайшие лет пять, а то и десять, потому что иначе не стоит даже и начинать.

    Меня на программирование пропёрло весьма рано, лет в 14-15. Я ощущал собственное безграничное могущество, послушная железяка выполняла любое моё повеление, любой мой каприз, при условии, что он правильно сформулирован. Если железка не делала что нужно, или делала что не нужно, то это всегда была моя вина, это значило что я прокосячился. Подобное осознание настигло меня весьма скоропалительно, после чего мозг начал усиленно дисциплинироваться, и количество лютых фейлов пошло на убыль.

    Коммерческая разработка - это, примерно, от 70% времени/сил на дебаг и фиксы, потому что мало где процессы поставлены грамотно. По хорошему до сего дня (а мне под 40) я только одну команду видел, где процессы прям вообще очень хорошо поставлены и мне посчастливилось какое-то время с ними поработать. За эти несколько месяцев я подрос на целую голову. Самостоятельно достичь сходных результатов было бы весьма затруднительно.

    Сам я сменил стек совсем недавно, начал в конце 15 года, и процесс продолжается до сих пор. Сменил я по одной простой причине - во всех моих прежних проектах большая часть логики с бэка уехала на фронт, и прекраснейший jQuery перестал справляться чуть более чем полностью. Он, по прежнему, хорош, но задачи, которые приходится решать, требуют совершенно других подходов. Для себя я выбрал React, но в целом на рынке имеются альтернативы. По моим данным очень большим спросом пользуется Angular 2+.

    Когда говорят о фронтенд разработке, постоянно говорят о технологиях, стеке, но почти никто не упоминает, что не стеком единым... Существенная часть разработки - это, для начала, понять задачу и построить у себя в голове модель. Заказчики бывают разные, от очень толковых, до очень безтолковых. Соотношение первых ко вторым примерно 1% и всё остальное... Т.е. в большинстве случаев тебе скажут минимум, своеобразно, плюс ты это поймёшь по своему. Потом, по ходу пьесы, в самые неподходящие моменты, начнут всплывать подробности, которые: забыли упомянуть; ну это же очевидно, ты же профи; мы сами не знали, это только выяснилось; ну это же мелочи, мы думаем тебе это будет не сложно; а ты не спрашивал; и т.п....

    В результате, по своему опыту скажу, частенько проекты примерно на середине выглядят ужасно и обложены костылями. На моем опыте бывало не раз, что нормально получалось только раза с третьего-четвертого...

    Казалось бы, а какое это имеет отношение к джуну? Да прямейшее, потому, что, редко в какой команде джуна возьмут как джуна. Обычно джуна берут чтобы платить поменьше, а работы накинут где как мидлу, а где и как синьору, потому что, нередко, бизнес не жирует, ресурсы жестко ограничены, задачи нужно решать хоть как-то, а решения принимают люди, которые ничего в нашем деле не понимают...

    Если ты попадешь в команду, где люди будут понимающие, квалифицированные, процессы выстроены, а джуну задачи будут сгружать джунские, то, считай, тебе крупно повезло. Шансов на это примерно 1%. Особенно учитывая, что джуны это обычно студенты лет в районе 20...

    Когда я менял стек, то я тоже был какое-то время 35-летним джуном. С этим ничего не поделать, потому что, внезапно, стек это не просто так, и имеется масса нюансов, которые с наскоку не освоишь. Чтобы все пощупать, попробовать на зубок, понять и осознать требуется время и усилия, иногда много времени и много усилий. Да, весь прежний багаж служит опорой и поддержкой, и там, где настоящий джун будет копаться недели, ты за пару часов по аналогии поймаешь идею и двинешь дальше. Но эти пару часов никто не отменял, а идей которые нужно отловить сотни, если не тысячи...

    Сложнее всего разобраться в архитектуре конкретного проекта, потому что, внезапно, стиль кодирования и конвенции чрезвычайно важны, если ты не один работаешь над проектом от и до. Если до тебя, вместе с тобой или после тебя кто-то будет работать над проектом, дорабатывать, поддерживать это дело, исправлять баги, в конце концов (а они бывают всегда и везде), то очень желательно, чтобы любой разработчик мог в кратчайшие сроки, оперативно и легко вникнуть, разобраться и понять, что там к чему, откуда, куда, зачем и почему. Чаще всего у проектов с этим проблемы, поэтому накладные расходы множатся, а эффект сходит на нет, усугубляясь текучкой кадров.

    Даже если тебе попадается практически идеальный проект, внезапно оказывается, что твоя оперативная память это 5-7+-2 объекта, а удерживать в голове одновременно нужно сотни...

    Зачем я все это рассказываю? Затем, что это реальность, которая для джунов не делает исключений.

    Термин "фигак-фигак и в продакшен" встречается повсеместно, т.к. ресурсы (деньги, время, кадры) практически всегда весьма жестко ограничены и ничего ты с этим не поделаешь.

    У верстальщика в этом плане все проще, потому что его работу видно сразу и невооруженным взглядом. Но просто верстальщик и хороший верстальщик - это земля и небо.

    С другой стороны сейчас предпочитают фронта, который еще и неплохо верстает. Слава флексбоксам и современным браузерам, сейчас это делать намного проще, чем годы назад.

    Теперь относительно того что делать - если в бэкграунде нет сильных скиллов по алгоритмике и структурам данных (олимпиады по программированию, универский курс информатики), то прям очень сильно рекомендую прокачать. Будучи наставником на нескольких курсах фронтенда я постоянно встречают студентов, которые "вроде бы" знают язык, но затрудняются скомпоновать пару циклов с условиями, вот буквально просто виснут на неопределенное время, причем без результата. Лично я рекомендую кодварс. Своих студентов я прокачиваю именно там. Достаточно прорешать 30-40 задачек, чтобы базовые скиллы ушли на уровень рефлексов и перестали парить мозг. Правда желательно решать это все с наставником.

    Косвенный бонус тут будет в том, что ты привыкнешь решать задачи на JavaScript. Я когда менял стек, поначалу мыслил на PHP, и подобный финт на кодварс позволил мне переформатировать мышление на JS. Вот мой профиль на кодварс как пруф: https://www.codewars.com/users/iCoderXXI

    Далее, когда ты освоишься в JS практически, очень неплохо будет досконально разобраться в том как работают замыкания и прототипное наследование. Это прям основа основ, и это спрашивают на каждом первом собесе.

    Понять надо настолько глубоко, чтобы легко и просто, с юморком, рассказывать это любой первой встречной бабушке, да так, чтобы та всё поняла... Это вот прям залог успеха в JS, потому что все остальное держится на этих двух китах. В ютубе имеется курс Зоракса (Zorax) и JavaScript Weird Parts, оба про то же самое, первый на русском, второй на инглише. Кантор, безусловно, крут, но эти двое объясняют попроще и понятнее (имхо).

    После этого прокачиваемся в использовании встроенных методов JS, таких как map, reduce, includes, replace и пр. (на том же кодварс)

    После этого нужно прокачаться в ES6+, стрелочные функции, let/const, деструктурирование, рест оператор, классы, промисы, генераторы, async/await, декораторы - без этих продвинутых штук в современных фреймворках ловить нечего.

    После этого снова идем на кодварс, и все то же самое прорешываем уже с использованием новых знаний. Внезапно код становится в разы лаконичнее, понятнее и читабельнее.

    Потом уже заостряемся на API форм, DOM, AJAX (fetch/axios), вебсокетах, Localstorage и пр.

    И вот только теперь можно переключаться на фреймворки. Проще всего освоить Vue (по слухам), наибольшим спросом пользуются React и Angular, для общего развития так же неплохо бы немного послушать про Ember.JS.

    React только на первый взгляд выглядит простым, на самом деле это только view-библиотека, а в любом нормальном SPA есть много чего еще кроме view, поэтому React всегда идет в компании Redux, Router, и еще целой толпы всего, что тоже придется осваивать, не только с точки зрения API, но и с точки зрения философии (а нахрена оно вообще сдалось?)

    Перед походами на собесы очень желательно иметь портфолио из нескольких готовых проектов, вылизанных стилистически.

    Далее освежаем базу по JS - типы, замыкания, прототипы, и смело топаем по собесам, будучи морально готовыми завалить первые десять.

    Вообще джуновых вакансий не густо, точно гораздо меньше, чем джунов на них претендующих. А вот синьоров и мидлов на рынке остро не хватает, поэтому стратегия такая - качаться до мидла без вариантов.

    Еще вроде большие компании вроде Яндекса устраивают летнее обучение, с последующим трудоустройством лучших кандидатов, но это не точно.

    Оптимистичный прогноз - 6-12 месяцев плотного фигачинга и ты в тренде.
    Ответ написан
    7 комментариев
  • Как стать продвинутым сайтоклепателем (формоклепателем) и отправиться на каторгу, чтобы пахать за говяжий дошик и оплачивать сарай?

    Astrohas
    @Astrohas
    Python/Django Developer
    Хочу поделится своим опытом так сказать (раз уж тут у нас клуб анонимных новичков институтов).
    Если ты считаешь что родился в жопе мира, то я родился еще в худшем местоположении - в кишлаке, на севере Таджикистана (страна есть такая). Из цивилизации тут больше чем нихуя. Но я старался. Да нас тоже учили сгребать лопатой, но ну не в -30, а в + 40 , и не лопатой, а руками ... гребать хлопок. Школы - примитивные, уроки информатики - такие что уж смотреть двух девочек с одной чашкой было намного приятнее чем сидеть там. Но я блин не хотел сдаваться. Я не хотел до конца оставаться нонеймов с заработком 80$ в месяц. И я начал учить все новые и новые предметы. Туже информатику. Скажи ка мне каков шанс выиграть областную олимпиаду чуваку ни разу не проработавшего с компьютером? 0? Но я выиграл. А потом еще две (правда на тот момент времени был куплен ноутбук).
    Потом у меня была республиканская олимпиада. На тот момент у меня были знания алгоритмов, пару сертификатов от Интуита и полка прочитанных Кнутов. Но увы, республиканская олимпиада стала для меня разочарованием. Нет медальку золотую я получил, но был разочарован уровнем вопросов этой олимпиады. Представь - самая пиздатая олимпиада, а вопросы уровня написят программу вычислющею факториаль чисьла n . Фейспаль на фейспальме.

    Далее было еге для поступления. Таджикское еге, скажу честно чуть лучше по чем русское, ибо внезапно более продуманное. И в итоге получил 525 баллов, в то время как проходной был 240. Могу ошибаться, но это рекорд среди 80к абитуриентов. Поступил в политех. В первый день ожидал, что наконец-то получу знания которые мне нужны. Нихуя!
    В первый месяц нас учили рисовать заголовки в ворде.
    Второй месяц матемматика уровня уравнение аж с двумя неизвестными.
    3 месяц наконец-таки программирование - основы программирования на VB.net.
    Четвертый месяц Физика.
    Потом, в пятом месяце изучали рисование на фотожопе.
    Потом у нас была "практика программирования" - посути тоже что в третьем месяце - VB.Net.
    Потом месяц был угробен на экономику и культуроведение.
    Потом была Высшая математика.
    И это все за первый курс. Я ненавидел эти предметы. Я ненавидел этот вуз, VB.net и блядские семестровые и курсовые работы. Но выбора не было - либо сиди страдай, либо отслужи в блядской армии.
    Начался второй курс. В списке предметов появились элементы более приближенные к программированию.
    Месяц первый - Базы данных - 1. На деле проектирование баз данных акссес мышкой.
    Второй месяц, более приблеженная к моим знаниям дисциплина - Основы веб Дизайна. Проходила какая-та не разбирающаяся в хтмл и эсэсэс училка, программировала на нотепаде с хтмл тегами времен 2004 года. Еще советовала юзать Dreamвивер ибо это Чудо !11. Мне хотелось застрелиться.
    Потом проходили дискретку. Так как я отпетый алгоритмизд, то с этот предмет относительно был одобрен моими яйцами.
    Потом было ООП. Под ООП, оказывается подразумеваться решение тупых задач из книжек Златопольского и Абрамова на c++.
    Потом был предмет с гордым названием - Практика визуального программирования. По сути, тот же vb.net, опять задачи Абрамова и Златопотолокского, но потом постепенно подключали базу акссес. Так как там с провайдерами баз данных был лютый пиздец, всей группой решили выбрать одну версию вижуалстудии и микрософт оффиса (оба 2010), ибо на других версиях код напросто отказывался работать.
    Потом в следующем месяце был предмет - "программирование баз данных". Начало было многообещающим, препод даже одобрил то что я буду использовать python, но после первого занятия, препод пошел подыхать в больницу, а вести стал чувак который месяцем раньше вел "Практику визуального программирования". Все 16 он повторял точь в точь то что вел месяцем раньше. Многие даже сдали предыдущие работы. Справедливости ради скажу, что препод это был аспирантом, и часто во время занятий рассказывал анекдоты (преимущественно про блондинок).
    Следующий месяц прошли два предмета - Правоведение и литературу. Ахует как нужные предметы.
    После был месяц Объетко Ориентированного Пирограммирования - 2 . К счастью, помимо решения задач из книг Златовлаского, пробегались по презентациям из педивикии. Вроде еще класс создавали...
    Следующий месяц, пришлось слущать лекции по гражданской обороне...
    Потом месяц с охуенно нужным для меня - веб быдлокедера предметом - Математические вычленения на Maple.
    Последний месяц второго курса была, более менее адекватная преподша. Вела JavaScript, и я не особо придирался к ее знаниям, ибо сама призналась до лекции что с JavaScriptom пока не работала, и заодно научиться.....
    Теперь уже прошел месяц третьего курса. Прошли Программирование на интернет (это название предмета такое). По сути тот же Vb.net но с добавлением ASP. Опять задачи из книг Абрамовича. Бляд... вместо того чтобы делать сайты нас заставляли решать задачи типа "Дано число а и б найти какое из них большее". Тока в отличии от Vb.Net предметов до этого, данные выводились на страницу через риспонсе.врайт.............
    И так а знаете что ? Не один из вышеперечисленных двух дюжин предметов я не учил всерьез. Я просто сдавал во время работу, и порою читкодил на экзаменах.
    Хотите узнать как стать нормальным программистом учась в институте? Никак. Нужно просто поднят свою жопу и начать кодить. Пытаться сделать что -то. Никто за тебя изучать не будет. Скачай видеокурсов по хтмл хтмлакдемии на нонеймклабе, пройди их. Потом сверстай двух десятков макетов. Потом потихоньку иди в фриланс.
    На этом этапе не жажды денег и девок.

    Во втором курсе меня пригласили после пар поработать в институте. Взамен зарплата аж 40$ и некоторые бонусы с учебой. Я согласился. Зарплата конечно же не ахты, но бонусы это круто. Ещь за одним столом с педаггогами высоких мастей, в груди стоит бейдж "специализд центра тестирования", можно приезжать на автомабиле. Еще играеш в волейбол с деканом и всякими замдеканами.
    Но на 40 не проживешь. Поэтому я по ночам фрилансил. А теперь представь в 6,00 вставать, в с 8 до 12 быть на парах, с 13 до 16 работать в инсте. Потом с 18,00 до 01,00 фултайм удаленка или фриланс. с 1,30 до 6,00 сон. Бодрый бляд сон. 4,5 часа сна. Каждый день. А сколько спишь ты Анон? А бляд забыл, мне еще нужно готовиться по часу в сутки изучая алгоритмы ибо олимпиада студенческая скоро. У меня уже в копилке медаль золотая и кубок, но бляд бонусы победителя ахуенны - освобождение от рабства на 0,5 года и прибавка к стипендии в размере 4 косарей.

    -----
    Итак если хочешь чтобы не выпилили из института и хочешь стать нормальным программисздом, подними жопу и изучай. И тот факт что ты родился/живешь/или потерял девственность в жопе мира не должно тебя ограничивать.
    PS. Прошу прощения всем за нецензурную речь. .
    Ответ написан
    7 комментариев
  • С чего начать обучение для фриланса?

    kumaxim
    @kumaxim
    Web-программист
    И так, с чего начать обучение:
    1.Самый низкий порог вхождения у языка PHP. Начинайте именно с него
    2.Изучите популярные CMS: WP, DLE, Joomla и т.д. Очень много заказов есть типа "Создать сайт", причем экзотики в 2 из 3 проектах не нужно. Здесь минус в том, что школоты тут полно и цену они сбивают весьма сильно...
    3.Далее категория заказов "А можно ли сделать вот так". Сводится все это к разработке/переработке модулей на все тех же CMS. Нужно учить PHP + API этих самых CMS. Возьмите один движок и копайте по нему в эту область, не рвитесь сразу за всеми. Порог вхождения тут тоже не велик, но здесь больше голодные студенты обитают
    4.Когда перерастете уровень дополнений/модулей, переходите к фреймворкам. Сейчас самый популярный Yii. Фреймворк позволяет Вам делать какие-то уникальные приложения, которые достаточно тяжело реализовать на готовых системах. Здесь ценник по существеннее, чем в первых двух, т.к. школота в силу своих умственных способностей сюда влезть не может.

    Теперь расскажу как вообще этому обучаться на своем примере. Я делаю так:
    1.Открываю тоненькую книжечку по языку(листов 100, не более), смотрю на основы
    2.Делаю примеры из этой книжке в IDE/блокноте. Это дает мне определенную базу
    3.Далее у меня есть список из примерно 20 задач(любую методичку по программированию откройте), которые я всегда делаю на новом языке. Это позволяет мне "привыкнуть" к новому коду и начать изучать стандартную библиотеку языка
    4.Затем я начинаю брать низкобюджетные заказы на фрилансе по этому языку
    5.После этого начинаю учить самый популярный фреймворк языка, опять же на низкобюджетных проектах.
    6.Сделать с 12-15 проектов я могу уже браться за что-то более менее серьезное с почасовой оплатой на фултайме.

    Вот это мой путь. По срокам - базу я себе нарабатываю за 1,5-2 месяца, на это время у Вас должна быть какая-то "подушка".

    P.S. надеюсь помог. ))
    Ответ написан
    7 комментариев
  • Какую идею для программы взять, реализуя которую, можно набраться опыта в программировании на Java?

    ntkt
    @ntkt
    Потомственный рыцарь клавиатуры и паяльника
    Всем нюансам? Ну, запилите многопользовательский web-сервис интерактивного онлайн-дизассемблера на java :)
    1. В универе было N лабораторных по криптографии на Java: алгоритмы, работа с вводом-выводом и бинарными форматами (ключи/сертификаты). Имхо, неплохая тренировка на основу языка. А нюансы и ООП лучше щупать на более масштабных и сложных задачах.
    2. Начнем с простого приложения -- сокет сервера на Java, который слушает порт по TCP и отвечает Hello World. Сначала -- однопоточный, потом многопоточный, и клиента к нему. Потом попинаем по TCP туда-сюда сериализованные объекты или какую-нить бинарщину.
    3. Дальше -- пишем простейший веб-сервер. Однопоточный, многопоточный. Прикрутите листинг папок или кэширование файлов.
    4. Потрогали основу -- переходите на готовые фреймворки и сервлет-контейнеры (пишем свой J2EE Hello world, пробуем GWT/Spring/Struts/что угодно -- не обязательно все самое сверхновое, главное -- потрогать), обязательно совмещаем и повторяем имеющиеся наработки. Тут же немного щупаем работу с БД (хоть чистый JDBC или через соотв. обертку из фреймворка), JMS/MQ и проч. (видим что-нить интересное -- сразу собираем примеры, дебажим, допиливаем, усваиваем и т.д.).
    5. Пишем свой кей-сервер публичных PGP-ключей с веб-интерфейсом, например, или веб-сервер отображения котировок криптовалют. Или берем любой FOSS Java проект, да хоть типа OpenGROK, и допиливаем в нем какую-нибудь интересную Вам фичу.
    Ответ написан
    Комментировать