Я переучиваю своих друзей и знакомых на программистов. Весь процесс занимает от двух до трех месяцев. 25 уроков по 4 часа. Потом все смогли устроиться программистами.
Эта статья не о том, как надо учить, скорее просто описание процесса, который работает.
Немного о себе: десять лет программирования. Половину которого программировал на Java. Всего я переучил на программистов восемь человек. Еще троих учу прямо сейчас. Переучиваю, только если вижу, что человеку такая работа подойдет.
Об учениках: 3 парня и 8 девушек. У половины техническое образование. Также есть юрист, экономист, бухгалтер и историк. Некоторые уже где-то работали, некоторые только закончили универ. Программированием никто не занимался со школы. Частая история: закончил (а) универ, а кем и где работать — хз.
Почему программирование?
Прежде чем учить человека программированию, лучше объяснить, что это дает и зачем оно ему нужно.
1 Несложная интересная работа.
Программирование — это несложная и интересная работа. Была возможность сравнить с тем, чем в банке экономисты занимаются. Это небо и земля. В банке все гораздо скучнее. Да и соблюдать дресс-код в 30-ти градусную жару не очень приятное дело.
2 Хорошо оплачивается.
Мне просто приятно видеть, как мои друзья через 5 лет работы начали покупать себе машины или квартиры.
3 Гибкий график.
Жесткий график — это неприятно. Это вам подтвердит каждый, кто стоял в пробке в час пик, или кого штрафовали за опоздание в 5 минут. А как насчет возможности приходить на работу в 11 утра, а уходить в 5? Скажете мечта? Для большинства программистов это реальность. Справляйтесь со своей работой, и вам слова никто не скажет. Во многих конторах вы можете не приходить на работу, а работать из дома.
4 Профессиональный рост.
Почти в любой организации, чтобы получить престижную должность и хорошо зарабатывать, нужно делать карьеру. Программисту достаточно просто оставаться программистом. Вам не нужно переучиваться с программиста на администратора или бороться за должность начальника. Можно просто расти профессионально. Программисты с пятью-десятью годами опыта работы получают шикарные зарплаты.
5 Высокая международная мобильность.
Три самых высокооплачиваемых специальности на западе: юрист, хирург/врач и программист. Но наш юрист за границей будет бесполезен: другие законы, прецедентное право и т.д. Врачу нужно учить язык, заново сдавать экзамены. Программисту ничего учить не придется. Тот же язык. Те же стандарты. Часто даже заказчики те же.
Почему именно Java?
Совокупность трех следующих факторов и заставила меня переучивать людей на джавистов.
1 Java — один из самых легких языков для изучения
У меня получается научить человека за три месяца.
2 Большой спрос на рынке труда.
Можно устроиться на работу без опыта. Фирмы охотно берут на работу толковых новичков и занимаются их дальнейшим обучением.
3 Самые высокие зарплаты по отрасли.
Одни из самых высоких. Особенно актуально для начинающих программистов.
Ключевой принцип
Есть такое хорошее правило, чтобы собрать рюкзак в поход:
1 составьте список всего необходимого
2 вычеркните все, без чего можно обойтись.
Примерно представляю, чем придется заниматься java junior в первый год работы. Знания, без которых можно обойтись в первый год работы — исключаем!
Я выкинул из обучения много интересных и хороших вещей. Чтобы стать хорошими программистами их придется учить. Но я даю достаточный минимум, чтобы устроиться на работу. Одна теория без практики часто оказывается неэффективна.
Вот чем я советую заниматься java junior в первый год обучения:
1 Радоваться, что есть хорошая работа.
2 Изучать проект.
3 Читать умные книжки.
Формат занятий
Одновременно учу 2-3 человек. Оптимальный размер группы для меня – три человека. Три месяца. Два занятия в неделю по четыре часа. Всего 25 уроков.
Все объясняю исключительно на примерах. Наглядность наше все. Например, чтобы понять коллекции, мы написали на занятии свои ArrayList & LinkedList. Даю домашние задания для закрепления материала.
С чего лучше начать?
С паскаля. Как показывает практика и мой субъективный опыт, все в школе изучали паскаль. В зависимости от ситуации выделяю 2-4 занятия на вспоминание паскаля.
1 Переменные и ReadLn/WriteLn.
2 if, for, while, массивы.
3 Функции и процедуры.
4 Закрепление изученного.
Формат уроков
Обычно рассказываю новую тему 10-20 минут.
Сажусь за компьютер (остальные сидят рядом) и пишу работающие примеры рассказанного. Потом, всем по очереди даю задания по текущей теме. Каждый человек за такой урок успевает сделать по 3-5 небольших заданий.
Поощряю подсказывать друг другу (учит работе в команде).
Подсматривать старые примеры можно. Копипастить ничего нельзя.
Краткое содержание первого урока по Java
(может не быть первым из всех, если были предварительные уроки по паскалю)
1 Рассказываю, что такое Java, JVM, JDK, J2SE, J2EE
2 Устанавливаем JDK, IDE (мой выбор — Intellij IDEA)
3 Создание первой программы. Показываю один раз, затем народ повторяет.
4 Ввод/Вывод, работа с переменными. Провожу аналогии с паскалем — очень помогает. Гораздо легче понять материал, когда есть аналогия с тем, что знаешь.
Альтернативные методики
Участие в свободных проектах — идеальный инструмент для саморазвития. Человеку, который может хорошо работать, но не фанатеет от программирования, подходит плохо.
Чему учу
<b>Программирование</b> ООП Наследование: extends, implements Полиморфизм: overriding, overloading Инкапсуляция Интерфейсы: interface Абстрактые методы и классы: abstract Пакеты: package Остальное Области видимости переменных Перекрытие переменных Скрытие методов другими методами. mutable, immutable Клонирование, контракты. <b>Синтаксис языка</b> Операторы if-else for, for each while, do while switch-case-default try-catch-finally, return throw, throws, catched & uncatched exceptions synchronized instanceof, (type cast) приоритеты операторов: + * ++ -- [] = == != && || finalize Модификаторы public, protected, package, private static final x3 Типы данных Примитивные типы: boolean, char, byte, short, int, long, float, double Ссылочные типы: Object autoboxing hashCode, equals Generics <b>Библиотеки</b> java.lang Интерфейсы-маркеры: Cloneable, Serializable, Remote Integer, Real, Double, Character, ... String, StringBuilder,StringBuffer, StringWriter Thread,ThreadLocal, ThreadGroup Throwable, Exception, Error, RuntimeException java.io Serializable InputStream, OutputStream Reader, Writer FileInputStream, FileOutputStream BufferedReader, PrintReader, Scaner DataInput, DataOuput, ObjectInput, ObjectOutput java.util java.util.Date java.util.Iterator List java.util.ArrayList<E>, java.util.LinkedList<E>, java.util.Vector<E>, java.util.Stack<E>. Queue/Deque java.util.ArrayDeque<E>, java.util.LinkedList<E>. Set java.util.HashSet<E>, java.util.LinkedHashSet<E>, java.util.TreeSet<E>. Map<K,V> java.util.HashMap<K,V>, java.util.LinkedHashMap<K,V>, java.util.TreeMap<K,V>, java.util.WeakHashMap<K,V>. Многопоточность Thread, Runable, join, interrupt, sleep, daemon, yield, wait, notify
Чему не учу
1 Алгоритмам, графам и т.д.
Сам призер кучи олимпиад. За 10 лет реальной работы ничего не понадобилось.
2 UI, аплеты и т.д.
Скорее всего, будущие проекты в жизни моих учеников будут связаны с Tomcat, JBoss, WebLogic
3 HTML/JavaScript
Непрофильные навыки. Рекомендую заниматься самообучением.
Работа
Я не могу научить всему, да и не стараюсь.
Моя цель в том, чтобы человек получил работу, фирма — перспективного сотрудника, и обе стороны были заинтересованы в его дальнейшем обучении.
Как устроиться на работу. Ключевые моменты.
1 Правильно составить резюме.
Представьте, какой договор может составить профессиональный юрист, а какой — обычный неподготовленный человек. В важных вещах не нужно стесняться обращаться к профессионалам. Так и тут: резюме нужно не составлять самому, а попросить знающего человека.
2 Собеседование
Я провожу несколько тестовых собеседований. И отправляю «выпускников» походить на собеседования в несколько контор — для опыта.
3 Опыт
В резюме должно быть от 3 до 6 месяцев опыта работы. Это добавляет уверенности человеку, который решил взять вас на работу.
Идти работать только в айтишные конторы.
А еще лучше в большие айтишные конторы. Только они занимаются обучением новичков. Цель первого года работы — получить как можно больше опыта, а не денег. Уже на позиции middle developer спрос превышает предложение, и зарплаты начинают резко расти.
Истории из жизни учеников
Как правильно просить повышения.
История одной моей ученицы.
— Получала я как-то зарплату в $2400. Подошел очередной срок пересмотра зарплаты. Хочу 2800, но как договориться?
Решила попросить $3000, с таким расчетом, чтобы сторговаться на 2800. Однако когда дошло до обсуждения новой суммы, выяснилось, что выше 2600 поднимать не хотят. Неужели я не стою больше? — подумала я, и записалась на собеседование в стороннюю фирму.
Через пару дней сходила на собеседование, там предложили $3000.
Прихожу на следующий день на работу, распечатала job offer, и к менеджеру на разговор. Подумал он, позвонил куда-то. Через полчаса подошел и предложил $3200.
Довольная звоню в фирму, где проходила собеседование и говорю, что не могу у вас работать, так как на текущем месте работы предложили 3200. Там предлагают 3400. Совсем выбили из колеи. Я же уже настроилась продолжать работать, а тут такие новости. Но т.к. боевой настрой еще был, опять пошла к шефу. В итоге получила $3600.
Гораздо больше шансов получить прибавку к зарплате, если оба (я и шеф) уверены, что я стою большего.
Самая быстрая карьера в истории.
История номер два. Рассказываю от первого лица.
Решил я устроиться на свою первую работу. Составил резюме на позицию java junior, приписал 4 месяца опыта в несуществующей форме и пошел на собеседование.
Взяли. Поработал три месяца. Учил java и разбирался в проекте. Но фирма не понравилась. Через три месяца уволился. Посидел дома месяц, позанимался, и пошел на собеседования снова. В этот раз я уже искал позицию java middle и, по резюме, имел год опыта работы. Поработал два месяца. Проекту с десяток лет, профессионалы справляются, но новичку на таком проекте очень скучно. Уволился.
Нашел новую работу. Теперь в моем в резюме было полтора года стажа. В этот раз проект полностью устраивал, но хотелось развиваться и другую зарплату. Должна же быть где-то фирма, которую я ищу — думал я. Поработал три месяца.
На свою последнюю работу, устроился на позицию senjor java developer. Три года работы в резюме внушали уважение. Уже три года работаю в понравившейся фирме. Именно то, что я искал. Я доволен, заказчик тоже.
Тут главное не останавливаться. Не нужно молча терпеть, если видите, что не ваше. Не бойтесь увольняться. Возможно идеальная работа от вас в одном собеседовании. Ну, или в двух, трех, четырех.
P.S.
Сегодня у моей первой ученицы первый день работы тимлидом. Горжусь ей.
Автор: general