вівторок, 5 квітня 2011 р.

Expert vs. Multipurpose

Не могу молчать, как говориться. Невинный вопрос "Если админ не смог настроить принтер на Ubuntu, потому что знает только Windows, значит ли это, что он плохой админ?" Получил совершенно невероятный ответ "Да - значит". Безаппеляционность? Ответчик не подумал? Возможно, но мне кажется, что это своего рода (не люблю слово трэнд) тенденция в обществе. Давайте попытаемся (ибо автор не является специалистом в системном администрировании), разобраться подробнее. Для начала, я представлю себе те области, с которыми сталкивается Windows админ каждый день
  1. Сама система. Windows изнутри не так прост как кажется, доменные и групповые политики, права, доменные учетные записи, права на запуск и остановку сервисов, конфликты сервис-паков, наличие и поддержание актуального состояния драйверов. Тут же проблемы с "железом", которое ведет себя мягко говоря не адекватно, но системная поддержка его есть.
  2. Отдельная тема система активации и корпоративных ключей для офисных программ. Политики реестра, его обновление и чистка. Политики файерволов.
  3. Почта. Outlook + Exchange. Exchange - большая отдельная тема, до конца раскрытая единицами (у каждой единицы лет по 15 опыта за плечами и все в системном администрировании). Sharepoint - головная боль любого Windows админа.
  4. Прикладное ПО. Что-то ставиться криво, что-то выносит систему в BSOD. Нужно следить за "лицензионной чистотой", обеспечивать бесконфликтную работу, опять-таки чистить реестр уже с другой стороны. Дампы и адреса, анализ логов и понимание проблем
  5. Обновление. Критические обновления, зеркалирование, кумулятивные обновления, бэкап данных и образа дисков, периодическое обновление образов.
Уже не так весела и легка жизнь Windows админа? И ведь я смотрю на вещи очень и очень примитивно, только по рассказам друзей и коллег понимая, какова же реальность этой каждодневной работы. А ведь Linux администрирование - это также сложно, но только с другой стороны. И в обоих системах есть нюансы, и профессионал должен их знать, и уметь оперативно решать проблемы, и минимизировать время простоя (что иногда ой-как не просто).

Мне аналогией первого порядка автоматически мниться замечательная история про "если бы водителей принимали на работу так же, как программистов". Ну давайте пофантазируем, на мой взгляд Эксперт в Java - это
  1. Досконально знать JavaSE SDK - типизацию, принципы ООП, generics и autoboxing, аннотации и 6 типов синхронизации потоков, JDBC и AWT, Swing и XML-средства. Знать, понимать и уметь использовать web service annotations. Четко понимать всю иерархию Collections, знать разницу между Set, List и Map, понимать назначение тех или иных реализаций, уметь создать свою реализацию ArrayList, LinkedList, HashMap, TreeHashMap. Уметь написать свой quicksort для коллекций. Досконально знать возможности пакета reflection, особенности реализации garbage collector и class loader. JAAS
  2. Досконально знать JavaEE SDK - servlets, EJB, JSF, Portlets, JPA, JNDI, RESTfull, XML-RPC, JAXB, JAXR, JSP, WebBeans, JTA, JAXP, JMX, JAF, StAX, RMI
  3. Понимать особенности работы JVM - оптимизации, принципы и стратегию работы JIT, механизм компляции и трансформации байт-кода, встроенные в JVM механизмы оптимизаций. Желательно знать, как и с помощью чего они реализованы.
  4. Thrid-party frameworks - Spring, Hibernate, JDO, парочку парсеров (Xserces, jdom, dom4j), Apache commons, SpringSecurity. И разумеется не просто знать, а уметь использовать и понимать принципы реализации. Знать почему лучше фрэймворк А, а не фрэймворк Б. 
  5. Версионирование. Отличия как в аспектах языка, так и в реализациях между Java 1.1, 1.3, 1.4, 5, 6, 7. Умение писать обратно-совместимый код, проектировать переносимые приложения. Понимать, как средствами предыдущих версий реализовать механизмы из более старших.
А еще test frameworks, OSGi, AspectJ, Grids, Hadoop, GWT, Groovy/Grails и многие, многие другие. Однако, поскольку тезис наш о том, что "PHP давно не экзотика", то все теже знания и в томже объеме программист должен иметь и в PHP. А как же иначе? И "Python давно не экзотика", значит и Python необходимо знать на том же уровне. А еще С/С++ (ну вдруг нужно будет низкоуровневый модуль написать) и Ruby-on-Rails (ну вдруг нужно будет что-то быстро написать, не нанимать же еще специалиста). И разумеется 1C, ведь все ведут бухгалтерию, ну и Парус до кучи - а то ведь и с госорганами могут быть подряды.

Вот только 80% программистов вопит о "кровопийцах работодателях", "желании получить на халяву мастера-на-все-руки", "эксплуотаторах" и "только в этой стране", когда слышат про два языка на экспертном уровне. А некоторые из вопящих еще и не считают необходимым иметь сколь-нибудь выходящие за рамки первой выдачи Гугла знания об единственном языке программирования. И это считается нормальным.
А как только речь заходит об админе, то он разумеется должен, поганец, знать Windows и Linux, который давно не экзотика (без поправки на то, Linux - это Ubuntu, Debian, Slakware, Gentoo, RedHat, Mandriva, ASP и еще куча дистрибутивов).

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