суботу, 28 травня 2011 р.

Куди ж податися, у Java чи у .NET?

На днях сталося дві події. Я начитався Парнаса (David Parnas) і знову стикнувся з класичною ситуацією, коли студент стоїть перед вибором куди ж податися? Чи то у Java чи то у .NET, а може у PHP? Цього разу на форумі і студент зовсім не мій. Я знаю скільки на ці пошуки витрачається дорогоцінної молодої енергії, тому вирішив розписати суть проблеми, застосовуючи мої улюблені аналогії. Сподіваюся ця аналогія, хоча трішечки різкувата, але допоможе розібратися.
Для початку декілька загальних слів про те, хто ж такий інженер. Інженер загалом займається тим, що змінює навколишній світ, створюючи і підтримуючи продукти, які до того не існували. Для створення продуктів інженер застосовує наукові знання, математику, практичний досвід (можна ще додати економічні та соціальні аспекти, особливо у програмній інженерії). Саме використанням наукових знань та математики інженер відрізняється від техніка. На відміну від науковця, який добуває знання, інженер творить, проектує і доводить, що те, що він спроектував буде працювати як слід, покращить суспільне життя і буде безпечним у всіх відношеннях. Для роботи інженер може обирати та використовувати різноманітні інструменти.
Приблизно таке міркує собі пересічний студент (це не вигадка, цитата з форуму, що там казати, я зовсім недавно так само розмірковував).
Итак 19 лет, студент 3его курса! По сути дела на данном этапе знаю нормально С\С++ прошло 1.5 года любви с ним с момента написания cout<<"Wake Up, Neo..."; сидеть еще 2 года на учебе понта не вижу... В голове мысль надо работать, делать опыт, делать деньги... на 4ом .NET от А до Я а на 5ом Java и PHP ну это к слову! Итак... Меня терзает мысли о том что быть человеком оркестром не хорошо, и быть про во всем тоже! Так как это не возможно, а лучше выбрать одну ветку это или .NET или Java или PHP или ЯблоДевелопер ! По сути дела больше тянет в .NET так как понравилася C# и испытываю симпатию к продуктам Microsoft (это не сарказм) а также тянет в Яблочную сторону но как бы денег не хватает чтобы купить макбук + девайс на iOS =) Java смотрел по Шилдту тоже неплохо но немного напрягает (я думаю с не привычки) linux-based системы и все такое, я как бы осознаю что Java это чистый Enterprice и ничего более , то есть если бы не было J2EE она бы сдохла давненько или осталась в разделе тупенькие приложение для мобилок на J2ME это сугубо мое мнение оно может быть не верным... PHP тоже неплох, но мну бесит HTML CSS то есть для меня радость занимать себя чисто программированием а не всякими разметками и т.д. Опять же более тянет в .NET или apple ... и если посмотреть на такие сайты как work.ua или trud.ua или rabota.ua (я сам в Днепре) то могу увидеть что больше всего требуется PHP потом Java потом .NET потом Apple ... И когда я на work.ua фильтровал по окладам выше 15к гривасов PHP — 2 Java — 3 .NET — null ! Я подумал странно! Ведь на прошлом опросе зарплат на ДОУ четко было видно рулит .NET и Java и по кол-ву работы и по размеру оклада... Вот я сейчас смотрю на work.uaPHP — 76 вакансий Java — 58 .NET — 16 ! Я как бы в курсе что судить по вакансиям не имеет смысла так как многие вакансии стоят тупо для вида не понятно почему! Но я не знаю откуда мне взять данные о том что же в спросе как говоритЦо! Перечитавшись топиков на форумах я стал выкупать что люди валят с PHP на Java да и многие студенты вроде меня видят свое будущее в Java! Если законы физики никто не отменял можно предположить что Java программистов будет океан а это плохо для джавистов... и тут я все больше плюсую .NET…
А тепер уявімо собі юного радіоінженера, що навчається у супер радіо-академії ШАГ. Подивимося, що ж він собі міркує.
Гаразд, я вже навчився штрикати кнопки на вольтметрі «С++», якого вже 1.5 років кохаю до нестями з того моменту як вперше в нього запхав батарейки. Я не знаю ні теорії електронного обладнання, я не знаю принципів побудови приймачів та передавачів, ні статистичної радіотехніки, ні перетворення Фурьє, ні спектрального аналізу, ні математичного аналізу, ледве можу взяти інтеграл, і щось віддалено чув про закон Ома. Відчуваю себе зле при розмовах про розрахунки електромагнітного поля та рівняння Максвела. Проте ще 2 роки сидіти на навчанні не бачу понту, я ж навчився користуватися цим супер вольтметром! Треба йти заробляти гроші, набувати ще крутішого досвіду штрикання кнопок на вольтметрі, можливо навіть навчусь приєднувати нові детальки до нього! Думаючи про це, я купив собі ще два вольтметра, один «С#» а інший «Java». Трохи навчився й на них штрикати кнопки. Але після цього мене почала доводити до сказу думка, що професійно вміти користуватися усіма цими вольтметрами не є добре та й неможливо, бо вони мають забагато деталей і режимів роботи. Тому треба вивчити один з них у всіх деталях, але який!? Взагалі то мені подобається «С#», він такий ошатний, кнопочки гарно натискаються і напис на ньому аж лисніть: Microsoft! Що за пречудова фірма… Вона ще крім того робить казкові унітази і зубну пасту! Як мені подобається ними користуватись. Тому саме вольтметр «С#» та мотлох, який необхідний щоб він працював я вивчити хотів би від А до Я. І то нічого що читати технічну документацію до нього я не можу англійською, тому купую за скажені гроші привезені з сусідньої держави, як попало перекладені (живу я в колонії, переклад мовою монополії) застарілі книжечки і читаю. Щоправда є ще один вольтметр – «МАК». Тай гарний же! Однак дорогий, купити не можу, тому не вивчатиму. Дивився до «Java». Що сказати – слабенько, слабенько. Не знаю чому, чи нема напису Microsoft, чи кнопок малувато. Ще є непоганий «ПХП», але мене дратують амперметри. Бо мені втішно напругу міряти, а не усілякі там струми! Фі! Знову ж таки тягне до Microsoft чи Яблука, там усе таке гарне та симпатичне, а який професійний маркетинг (ковтає слину і мрійливо посміхається). Полазив по сайтам робіт, а там чомусь більше потрібні такі, що вміють штрикати кнопки на «ПХП»… Дивні речі якійсь кояться. Чорт голову зломить в цих вольтметрах! Їх так багато, там їх використовують, там – ні! От лихо! Аби ж то усі використовували один амперметр! Тоді б я його зубрив би до посиніння, а потім напевно нарубав би грошей величезну купу. А так все це доводить мене до сказу! Та ще й викладачі днями вчать штрикати кнопки на вольтметрах і хоч би хто щось порадив! Вони ж такі досвідчені штрикальники! Полазив по форумах багато студентів типу мене бачать своє майбутнє у вольтметрі «Java». Але згідно з законами фізики, що я їх в школі сумлінно вивчав, якщо багато штрикатимуть кнопки на вольтметрі «Java», то тим, хто їх штрика на «Cбуде краще. От трясця, що ж його робити?!

У чому ж тут мораль? А в тому, що студент-радіоінженер так ніколи не думає, адже це є абсурдним для нього! (я був таким студентом і прекрасно знаю чим їх голови забиті у 19 років). Чому ж інженер-програміст мучиться у таких роздумах? Думаю це окрема тема для палкої дискусії. Тут я лишень хочу дати свої скромні поради, навіяні Парнасом.
Вивчайте англійську мову і читайте оригінальні свіжі статті та книжки з програмної інженерії. Вивчайте наукові основи програмної інженерії, комп’ютерних наук (в меншій мірі, тут без фанатизму, лише речі для побудови програм, типу основи мов програмування, а не завороти штучного інтелекту) та практики, які гарно себе зарекомендували. Вивчайте дискретну математику (заспокойтесь, не усе підряд, а ті розділи, які застосовуються у серйозних програмних проектах, а що саме застосовують і як – це предмет Вашого дослідження). Вчіться якісно будувати програмне забезпечення, аналізувати та тестувати його. Саме БУДУВАТИ, СТВОРЮВАТИ. Оберіть відкритий проект, або почніть самі з друзями. Починайте його робити, застосовуючи те, що чого навчилися! Проблема постане у виборі інструментів (не тільки мови, а й систем командної розробки, збирання, моделювання, тестування, реструктуризації, компілятори та інфраструктурні речі, типу БД чи операційної системи). Спокійно сядьте і напишіть набір критеріїв які важливі з економічної, соціальної, технічної точки зору. Абсолютно чітко і строго. Складіть список кандидатів і на основі критеріїв зробіть висновок. Наприклад, якщо критерій навчитися застосовувати об’єкти – ПХП тут ні до чого. Якщо замикання – Жава ні до чого. Якщо нема наслідуваних систем і однорідна платформа Windows, треба обирати .NET, але якщо потрібна потужнна безкоштовна система реструктуризації коду – VisualStudio не допоможе. Робіть ваші висновки НАУКОВО (не маркетинго, не емоційно, ні товаришозапивно, ні форумно) обґрунтованими.
Конкретний інструмент ви швидко освоюєте, не поспішайте так до них. Наполегливий народ за 3 роки стає лідерами команд. Це не ракетна наука. Зате ті 2 роки навчання, проведені правильно, дадуть вам поштовх і імпульс стати інженерами а не техніками. Це щось типу довгострокових інвестицій. Одразу одні витрати, а далеко пізніше результат. Якщо не інвестуватимете – нічого не отримаєте, і все професійне життя труситиметесь, а що, якщо завтра моя компанія раптом спише той вольтметрик, що я на ньому так звик клацати, що я робитиму?

суботу, 14 травня 2011 р.

Канапа і модуляризація


На днях мені привезли нову канапу, однак на тому місці, де її необхідно було поставити, стояла величезна кутова стара канапа. Я був вдома геть один, а місце звільнити треба було. Ось таке собі завдання: винести стару канапу у іншу кімнату. Вона мало того, що важка, що не підняти, так ще й велика, що в одвірок ніяк не протиснеш! Але я із завданням успішно впорався. Стара канапа була МОДУЛЬНОЮ, тому необхідно було лише від'єднати модулі один від одного та винести кожен окремо (навіть по одному підняти і протиснути модуль було неабияк важко, однак можливо). Хоча ця історія банальна, та вона була прекрасним наглядним прикладом застосування принципу "розділяй та володарюй", і його окремого випадку - "модуляризація". Мені дуже подобаються аналогії у процесі пізнання, тому впоравшись із завданням я усвідомив, що це пречудова аналогія модуляризації у програмному забезпеченні та інших продуктах. Хоча інструмент модуляризації не завжди існував, ми часто його сприймаємо як щось невід'ємне, тому неправильно розуміємо його суть, неправильно його застосовуємо. Це особливо стосується студентів. Тож згадаймо канапу наступного разу, коли намагатимемося пояснити студенту/джуніору принцип модульності, або зловимо себе на думці, що завдання під рукою не підйомне та страшенно заплутане (така згадка може привести на канапу і занурити в сон, ну і нехай!).