• Кодер -> Программист -> Архитектор?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Архитектор - в первую очередь опыт работы, в идеале в разных проектах, чтобы понимать на практике разницу между реализацией разных SDLC.

    Название Waterfall или Scrum - это просто названия без конкретной реализации. Можно реализовать отличный Waterfall и все будут довольны, можно реализовать ужасный Scrum и все развалится. Поэтому опыт разных проектов помогает увидеть именно разные реализации.

    Архитектор, бизнес-аналитик и менеджер - три звена, которые создают основу работы проекта, каждый со своей стороны.
    Бизнес-аналитик - должен максимально разбираться в бизнесе заказчика, чтобы понимать значение требований и переводить их для исполнителей.
    Архитектор - должен как минимум немного разбираться в бизнесе, но его основная задача - решить как воплощать требования бизнеса. Определять железо, технологии, требования. Говорить, что "вот для этого нужно использовать 10 этого и 20 этого, и использовать вот такие языки, библиотеки, платные решения". Техническое hi-level видение проекта.
    Менеджер - по согласованию с бизнес-аналитиком и архитектором должен решать кадровые вопросы. Количество людей, качество людей, работу команды, тайминги, офис и оборудование - все денежные вопросы. Отчеты. Договариваться, убеждать заказчика о ценах и сроках. Выбивать новые задачи и развивать проект. Следить за настроением в команде.

    Переход программист-архитектор не всегда последователен. Он должен быть инициирован программистом.

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

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

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    Ну типа жил был транзистор значит. И он был такой весь из себя крайне радикальный - не было у него по жизни других настроений, кроме двух - либо он говорил всем "да" и пропускал через себя всё, что в одно ухо (левая дырка) влетело, то из другого (правая дырка) сразу вылетало. Либо же настроение его могло поменяться, тогда он становился крайне негативным и переставал пропускать себя любую информацию - замыкался в себе, думал о главном.
    А настроение его зависело от того, насколько хорошо он питался. Суёшь ты ему в рот (третья дырка) нормальное питание - он добрый, на всё согласен, информацию через себя пропускает. Чуть только начинаешь его кормить меньше, чем он хочет (есть у него определённый уровен неообходимого питания) - он тут же отключался от мира и ни на что не реагировал, пока снова не пихнёшь ему в рот достаточноого питания. Так и получилось, что аналоговый уровень питания, то есть количество еды, которое ты ему кладёшь в рот, в итоге превращается в бинарное значение - 0 или 1 на правом ухе.

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

    И вот в современных процессорах миллионы этих транзисторов (если быть точнее, то на текущий момент около 1,400,000,000) спаяны вместе. чтобы распознавать входные команды и выдавать результат по заданной схеме.

    Ты спросишь, мой маленький друг, как же розетка соединяется с процессором? Как эти 220В превращаются в 0 и 1 на моём мониторе?. А всё дело в том, что блок питания преобразует переменный ток в постоянный, который потом подаётся на процессор. Блок питания совсем не мудрёный - пара диодов и трансформатор, можешь даже собрать его сам дома из говна и палок. А интересное дальше.
    Но если подать ток на схему из транзисторов - то они застынут в одном положении, заданном схемой, и ничего происходить не будет? Да, ты прав, чтобы компьютер считал, необходимо менять ток на его входных ножках, тем самым отдавая ему разные команды. Но тут возникает проблема синхронизации - поменять напряжение одномоментно невозможно (физика, типа, химия там, электроны бегают, заряд меняется, дырки должны образоваться успеть) - нужно определённое время. Поэтому придумали "частоту". Рядом с транзисторами сидит важный кристалик, который генерирует ток по синусоиде с равномерной частотой. Эта синусоида немного рихтуется, превращаясь в бесконечный поток "есть питание" и "нет питания" меняющийся с одинаковой частотой. На графике это выглядит как пила, примерно. И вот все договорились, что будут засекать момент, в котором "всё готово", все транзисторы заняли своё положение и всё устаканилось и наконец можно считать выходной результат, например, на верхушке зубчика пилы, то есть когда генератор частоты дал 1. И вот совремменные процессоры делают это с частотой 2 гигагерца, то есть 2 миллиарда раз в секунду все транзисторы в процессоре меняют своё состояние.

    P.S. Я сделал небольшое допущение. На самом деле в правом ухе не 1 и 0, а точно такое же напряжение, которое ты подал на левое ухо, если транзистор включён, либо никакого, если выключен. Но чаще всего это потсоянный небольшой ток. Благодаря уровню необходимого питания на ртах у транзисторов, этот небольшой ток может быть либо меньше необходимого (0), либо больше, при котором транзистор включается(1). Это всё зависит от того, из чего сделан транзистор. Это уже химия, дружок. Сплавы всякие, металлов. Они ещё полупроводники называются, потому что до конца не определились, готовы они всегда пропускать ток, или никогда. Этим тохитрые людишки и воспользовались, заставляя полупроводники менять своё настроение и позволять тебе играть в майнкрафт.
    Ответ написан
    5 комментариев
  • Есть ли "roadmap" для разработчика android приложений?

    @Stancialeta
    Привет!
    Я бы рекомендовал изучить темы:

    Java
    --------
    * Object: hashCode, equals, wait, notify
    * Collections: List, Set, Queue, Map
    * References: Strong, Soft, Weak, Phantom
    * Concurrency: Thread, Runnable, Executor, Future, Synchronized, Volatile, Synchronized collections.
    * io: InputStream, OutputStream, File, serialization
    * Network: URL, urlconnection, etc
    * json, xml
    * generics
    * reflection
    * class loader
    * enum

    Android
    --------
    * Android tasks and backstack (LaunchMode(singleTask, singleTop, etc), Task Affinity)
    * Activity: Lifecycle, What, start, start with result
    * Services: IBinder, Message Handler
    * ContentProvider: how to use and why
    * Broadcast Receiver: how to use and why
    * Intent & Intent Filters: common and in manifest.xml
    * Fragments: Lifecycle, Why, FragmentManager, NestedFragmentManager
    * Notifications: how to use
    * Permissions: what and how
    * Resources: what and how
    * Styles: how to use and why
    * InputEvents
    * MaterialDesign: RecyclerView, CardView, FloatingActionButton
    * Layouts (also CoordinatorLayout)
    * Toolbar
    * Pager
    * Settings
    * Menu
    * Dialogs
    * Toasts, Snackbar
    * Animation, Shadows
    * Support lib, Support design
    * Network: frameworks (OkHttp, Retrofit)
    * Process: separated processes
    * Application: using
    * Concurrency: AsyncTask, best practices for long time work.
    * Bitmaps: using, reusing
    * VectorDrawable
    * Deep Linking

    Common:
    --------
    * Patterns
    * Caching
    * di

    Misc:
    -------
    Git
    Gradle
    Ответ написан
    1 комментарий
  • Какую литературу почитать или посмотреть уроки по программированию на Android?

    GavriKos
    @GavriKos
    Хотите попробовать - садитесь и пишите.
    Ну разве что базово подучите язык (java/kotlin), а дальше - только практика.
    Ответ написан
    1 комментарий
  • Популярный Telegram канал для Android разработчиков?

    @Gnoemes
    @android_ru
    @Android_Architecture
    Каналы по популярным библиотекам:
    @dagger_2
    @reactivex
    @moxy_ru
    Ответ написан
    1 комментарий
  • Как наилучшим образом обеспечить совместимость при использовании Material Design?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    cуществуют вспомогательные библиотеки v7 которые обеспечивают обратную совместимость в плоть до 7й версии API. Т.е. я могу создавать приложения 27 версии, использовать библиотеку v7 и все мои приложения будут работать до 7й версии API?

    Уже нет
    Some of the Support Library packages have package names to indicate the minimum level of the API they originally supported, using a v# notation, such as the support-v4 package. Starting with Support Library version 26.0.0 (released in July 2017), the minimum supported API level has changed to Android 4.0 (API level 14) for all support library packages. For this reason, when working with any recent release of the support library, you should not assume that the the v# package notation indicates a minimum API support level. This change in recent releases also means that library packages with the v4 and v7 are essentially equivalent in the minimum level of API they support. For example, the support-v4 and the support-v7 package both support a minimum API level of 14, for releases of the Support Library from 26.0.0 and higher.

    Но это не столь критично, потому что ниже четвёрки сейчас поддерживать что-то не особо имеет смысл.
    Тем не менее, библиотека поддержки нужна для облегчения работы. Чаще всего на практике её используют. В ней куча полезных виджетов и других классов(например, фрагменты нужно использовать именно из неё, из пакета android.support.v4.app.
    values-*, drawable-* и так далее тоже используют, это бывает полезно.
    Ответ написан
    Комментировать
  • Полезные ресурсы, а лучше книги про Паттерны?

    Хорошая книга Head First Design Patterns. Примеры на Java.
    В качестве первой книги по паттернам идеально, на примерах все показано.
    shop.oreilly.com/product/9780596007126.do
    Ответ написан
    Комментировать
  • Что все-таки должен уметь делать frond-end-разработчик?

    @xfg
    Бекендер предоставляет api для манипулирования данными, а ваша задача эти данные отобразить конечному пользователю. Взаимодействие с сервером ваша задача. Вы делаете полностью клиент. На каком фреймворке или без, вам решать. Но в подавляющем большинстве случаев пишут classic websites, где клиентская часть генерится на сервере и клиент соответственно писать не нужно, поэтому весь сайт делает бекендер, отдать можно только верстку верстальщику, а фронтендер в таком проекте не нужен.

    Фронтендер такой же программист. Скажем у фейсбука есть API, вас просят написать веб клиент к этому api. И вы должны это сделать. На выходе должен быть готовый продукт, которым уже может пользоваться конечный потребитель. Это фронтендер. Это его отличает от верстальщика, задача которого картинку напилить в html.
    Ответ написан
    Комментировать
  • Как транслировать отзывы из группы VK на сайт, если нужно совсем другое оформление чем в стандартном приложении VK?

    Все делается средствами API. Если у вас отзывы под фото или создано обсуждение. Разбираете JSON и выводите с нужным вам оформление на сайте.
    Ответ написан
    1 комментарий
  • Как исправить ошибку windowsSDKdir при сборке проекта в yeoman genrator?

    Собирать надо из командной строки "Developer Command Prompt", а не из обычной. Девелоперская консоль добавляет в PATH пути к тулчейну. Очевидно, сейчас msbuild никак не может найти CL.exe.

    Разберитесь сначала с этим, а потом посмотрим, надо ли вам WindowsSDKDir.
    Ответ написан
    1 комментарий
  • Какие задачи нужно уметь выполнять на JS начинающему?

    copist
    @copist
    Empower people to give
    Какие задачи нужно уметь решать на чистом JS, перед тем как переходить к изучению библиотек и фреймворков?


    Кроме синтаксических конструкций, математических и логических выражений, нужно знать:
    • Область видимости переменных
    • Замыкания
    • Объектно-ориентированное программирование, в частности наследование через прототипы
    • Шаблон проектирования "модуль"
    • Операции над DOM
    • Понимание принципов событийно-ориентированного программирования
    Важно - нужно знать, откуда копипастить.
    Тебе нужно быть очень хорошо знакомым с одной-двумя-тремя популярными библиотеками на JavaScript. В идеале ты должен иметь представление о том, что определённый класс задач может быть решен с помощью определённых библиотек, хотя бы одной, но такие знания приходят с практикой. Вообще ты должен быть знаком с ними так близко, чтобы помнить, в какой части мануала по библиотеке можно найти описание форматов входных данных нужной тебе функции и какой будет результат, чтобы скопировать и вставить в свой код, а потом поправить, чтобы работало.

    Важно - инструменты программиста JavaScript
    У тебя должен быть удобный инструмент для разработки (IDE, Integrated Development Environment), чтобы он тебе подсвечивал код (syntax highlight) и подсказывал о синтаксических ошибках (syntax check), о формальных параметрах функций (type hinting), о стиле кодирования (code style), помогал писать код (live templates).
    Ты должен знать, как отлаживать скрипты в популярных браузерах (Firebug, Chrome Developer Tools и другое). Что такое точки останова, как управлять исполнением во время останова, как посмотреть и поменять содержимое переменных, как настроить останов по условию.

    Хотелось бы узнать что это за задачи(упомянутые вами 80%)


    Реальные задачи джунов:
    1. Возьми из сборника задач по javascript любой скрипт случайно и вслух расскажи, что он делает.
      Важно - читать и понимать чужой код намного важнее, чем писать свой. И на работе тебе это приддётся делать чаще, чем ты думаешь. Чтобы подключить к своему проекту чужую JS либу, нужно понимать что она делает, как она конфигурируется, как управлять её поведением. Скажу точно, что написать свой скрипт, который строит графики, намного сложнее, чем понять, как настраивается highcharts.

    2. Напиши скрипт на JS, который в заданном тексте удалит один или два символа, выбранных случайно
      1. Усложнение: удалять можно только буквы в словах, а знаки пунктуации и цифры удалять нельзя
      2. Усложнение: принять, что этот текст является программной на Javascript, удалить одну-две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя)
      3. Усложнение: воспользуйся этим скриптом и "попорти" код какого-нибудь другого скрипта на Javascript, а потом отладь, найди ошибку и восстанови работоспособность
      Важно - этим обычно все и занимаются - ищут баги. Только в реальной жизни они и без этого скрипта появляются. И не по одному, а прям пачками.

    3. На страницу HTML нужно встроить график курса доллара по отношению к рублю. Формат входного массива значений курса определи сам, исходя из своего скрипта для построения графиков.
      1. Усложнение: на одном графике должны быть два курса, по разным шкалам. Наприме, курс доллара к евро и курс юаня к рублю
      2. Усложнение: первоначально график вывести в детализации по месяцам, но чтобы можно было "приблизить" (drilldown) детализацию до дней
      3. Усложнение: первоначально график вывести текущем месяце, но чтобы можно было загрузить данные для предыдущего месяца без перезагрузки страницы (AJAX)

    4. При клике по картинкам, вставленным в текст HTML, показывать всплывающее окно для просмотра увеличенной картинки.
      1. Усложнение: в всплывающем окне сделать навигацию по картинкам, вперёд/назад и к нужной картинке
      2. Усложнение: в всплывающем окне вместо картинки показать видео-ролик с Youtube
      3. Усложнение: в всплывающем окне показать текст HTML

    5. По клику на кнопку "Click me" показать всплывающую форму.
      1. Усложнение: реализовать проверку данных на корректность перед отправкой формы (непустое значение, минимальное количество символов, максимальное количество символов, минимальное числовое значение, максимальное числовое значение)
      2. Усложнение: если в значении текстового поля встретилась гиперссылка, то считать её за 22 символа при любой длине этой ссылки (как в твитере)
      3. Усложнение: реализовать отправку формы на сервер через AJAX, без перезагрузки страницы
      4. Усложнение: саму форму в виде HTML загрузить с сервера через AJAX, в момент клика по кнопке "Click me", правила проверок данных должны как-нибудь "извлечься" из самой загруженной формы, например из аттрибутов полей ввода

    6. К форме ввода данных на поле ввода даты "навешать" всплывающий календарь для выбора даты.
      1. Усложнение: сделать форму календаря мультиязычной. Хотя бы через настройки на том же JavaScript
      2. Усложнение: сделать так, чтобы с помощью календаря можно было выбрать диапазон дат, чтобы она была привязана к двум полям формы "дата начала" и "дата окончания", и чтобы значение в поле "дата начала" обязательно была меньше чем в поле "дата окончания"
      3. Усложнение: сделать так, чтобы с помощью в календаре можно было видно визуально этот диапазон
      4. Усложнение: диапазон может быть открытым, но не пустым, то есть пользователь должен задать хотя бы дату начала или дату окончания.

    7. Сделать пред-просмотр веб-страницы HTML с разными темами. Тему страницы выбирать через селектор на javascript, а показывать в фрейме.
      1. Усложнение: сделать селектор "тип устройства", чтобы менять размер фрейма (например, "iPhone 5c 1136x640") и "чекбокс" для смены ориентации страницы "горизонтальная" или "вертикальная" (соответственно 1136x640 или 640x1136)
      2. Усложнение: в селекторе тем предусмотреть поиск тем по подстроке, и аналогично поиск устройств по части названия (авто-дополнение, auto-complete)
      3. Усложнение: тема страницы должна меняться без перезагрузки фрейма



    Задачи повышенной сложности, исходя из личного интереса
    1. Реализовать форму для многошагового мастера: форма должна состоять из нескольких страниц (шагов), пользователь может переключать страницы через какие-нибудь элементы управления "вперёд/назад" или "перейти на страницу".
      1. Усложнение: реализовать функциональную связь значений, когда некоторые данные зависят друг от друга (ввёл число в поле "количество" и в поле "сумма" значение пересчиталось)
      2. Усложение: доступность некоторых полей ввода должна зависеть от данных (например, если указал "есть личный самолёт", то значит можно ввести "марка самолёта")
      3. Усложение: видимость некоторых страниц должна зависеть от данных из предыдущих страниц (например, если указал "есть личный самолёт", значит появилась страница "ТТХ самолёта"; иначе страница должна скрыться)

    2. Реализовать однопользовательскую браузерную игру "змейка", "тетрис", "найди пару"
    3. Реализовать многопользовательскую браузерную игру "крестики-нолики", "морской бой" на два игрока в режиме "hot seat"
      1. Усложнение: два игрока на разных компьютерах, ходы передаются по websocket
      2. Усложнение: ограничение на ожидания окончания хода 15 секунд, по окончании ожидания автоматически делается случайный ход

    4. Реализовать todo-list. Пользователь вводит список, затем он превращается в строки с "чек-боксами". Когда "чекбокс" включен, строка зачёркивается.
      1. Усложнение: пользователь может переименовывать, удалять, добавлять строки
      2. Усложнение: список хранить в localStorage браузера, чтобы при перезагрузке страницы он восстанавливался
      3. Усложнение: пользователь может иметь несколько независимых списков todo

    5. Реализовать простой графический редактор. Пусть рисуется точка в месте, где пользователь кликнул.
      1. Усложнение: добавить переключатель режимов "точка"/"линия", в режиме "линия" рисуются линии между двумя последовательно кликнутыми точками
      2. Усложнение: можно менять толщину, цвет линий, размер точек
      3. Усложнение: последовательность кликов можно воспроизвести ещё раз с самого начала, равномерно или с реальной задержкой между кликами, с обычной скоростью или ускоренно
      4. Усложнение: можно выгрузить получившийся рисунок в формате PNG или SVG, причём SVG c анимацией воспроизведения



    Можно использовать любую существующую библиотеку.
    Например,
    для построения графиков www.highcharts.com
    для загрузки и передачи данных через AJAX: jquery.com + что-нибудь на сервере
    для всплывающих диалогов с картиками, видео и формами: fancyapps.com/fancybox и https://jqueryui.com/dialog/
    для валидации форм rickharrison.github.io/validate.js
    для календаря https://jqueryui.com/datepicker/
    для автодополнения https://jqueryui.com/autocomplete/
    для передачи данных между несколькими пользователями socket.io или обычный AJAX
    Ответ написан
    16 комментариев
  • Ошибка при установке генератора yeoman после установки windows 10?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    yeoman не использовал, но у вас в ошибках белым по черном у написано, что нужен python.
    Либо он у вас совсем не стоит, либо путь к нему не прописан в path.
    Ответ написан
    1 комментарий
  • Как повысить ежемесячный доход?

    trevoga_su
    @trevoga_su
    чувак, спрашивать на форуме ИТ-шников про то, стоит ли брать грузовик для того, что бы денег заработать - это все равно, что спрашивать в курятнике, как варить суп из курицы. У местного контингента спецефический склад ума.

    Тебе расскажут про то, что надо бабки в образование вкладывать и пр. Ты для себя сам реши - что ты хочешь. Либо свой бизнес, пусть хоть и не прибыльный, но свой, либо в офис на ближайшие Н лет.
    Ответ написан
    3 комментария
  • Почему у одних псевдоэлементов одно двоеточие :before, а у других два ::before?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Потому что два двоеточия — это псевдоэлемент, а одно — псевдокласс (как :hover).
    Псевдоэлементы появились только в CSS3, поэтому браузеры принимают и одно, как в CSS2. Источник.

    P.S. Если не надо поддерживать IE8, то давно можно писать ::, см. caniuse
    Ответ написан
    3 комментария
  • Почему у одних псевдоэлементов одно двоеточие :before, а у других два ::before?

    @GreatRash
    По новой спеке правильно писать два. но не все старые браузеры понимают новую спеку, поэтому для кроссбраузерности пишут одно.
    Ответ написан
    2 комментария
  • Как к проекту подключить скачанный пакет например Bootstrap и автоматически подключить все необходимые файлы?

    gunlinux
    @gunlinux
    Freelancer
    bower, да еще один менеджер.
    Порог вхождения ниже чем у gulp.

    Third Party ресурсы просто держите отдельно

    .bowerrc
    {
      "directory": "build/components/",
    }


    $ bower init
    $ bower install --save-dev bootstrap


    Ну и побочный usecase, вся документация и исходники есть локально. Не надо рыскать и искать сайт с документацией и прочим.
    Проблема - бывает приходится заходить в компоненты и собирать компонент, пока всего два раза. Но и использую я его неделю.
    Ответ написан
    3 комментария
  • Где посмотреть примеры качественного кода вёрстки сайтов, лендингов, веб-приложений?

    paulradzkov
    @paulradzkov
    Дизайнер, верстальщик, начальник отдела UI
    Первый путь.
    На Гитхабе поискать по ключевым словам (BEM, SMACSS, OOPCSS) — найдутся бойлерплейты и стартеркиты, которые по определению должны быть хорошего качества.

    Можно искать глубже, по упоминанию в исходном коде этих ключевых слов — найдутся тысячи проектов, но тут сложнее определить, что качественнее.

    Второй путь.
    Искать в Гугле людей, которые пишут про BEM, SMACSS, OOPCSS и прочих крутых фронтендеров. Искать их профили на гитхабе, изучать их проекты. Если они пишут про методологии, то они явно их используют в работе.
    Ответ написан
    Комментировать