суббота, 7 мая 2011 г.

Что надо знать программисту.

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

Также для общей информации приведу ссылку на рейтинг языков программирования

Список книг для начинающего программиста

Прочитав статьи в интернете, привожу здесь суммарный список знаний:

1) Высшая математика. Чтобы программировать на профессиональном уровне без математики никуда.

2) Английский язык. Статьи, блоги, новейшие книги по новым технологиям, документация написаны на английском. И вам придется выбирать, либо идти в ногу со временем (зная английский), либо несколько лет ждать, когда книгу о новом языке программирования переведут на русский и издадут.

3) Asm. Изучив ассемблер, приходит понимание, как работает компьютер, и откуда «ноги растут» у языков программирования высокого уровня.

4) С. Это язык, который пригодится любому программисту, поскольку используется в любой операционной системе, позволяет управлять памятью вручную. Занимает второе место в рейтинге языков программирования.

3) Pascal. Язык высокого уровня, на котором легко учится алгоритмам работы с массивами, графикой, файлами, строками, динамическими структурами данных (графы, деревья, списки)… Язык позволяет совершенно не знать ООП и помогает в понимании как построить алгоритм. Сейчас язык устарел и вряд ли вам пригодится в работе. Даже в наших ВУЗах его сняли с преподавания года три назад. Вакансий, требующих разработчиков Delphi, практически нет.

4) Prolog. Как пример логического программирования. Для его изучения потребуется знать, что такое предикат (то есть математическая логика).

5) Lisp. В этом языке все построено на списках, служит примером функционального программирования.

6) HTML. Язык разметки текста. Знания его вам пригодятся везде, как на работе, так и в развлечении (например в ведении блога). Учится очень легко. Можно даже совершенно не знать программирования, чтобы его выучить. Повторяется в пункте 19 с различными версиями.

7) PHP. Язык, который позволит создать web-страничку, понять как устроен интернет. Учится просто, нет заморочек с типами данных. Начав его учить с утра, в конце дня можно написать свою страничку.

8) ООП. Вот теперь пришла очередь ООП. Учить надо, это бесспорно. Без знаний ООП можно программировать только на ассемблере.

9) Java. Занимает первое место в рейтинге языков программирования. Очень много хороших учебников в открытом доступе.

10) С++

11) C#

12) JavaScript

13) Perl

14) Python

15) VisualBasic

16) Ruby

17) design patterns. паттерны: GoF, MVC, MVVM, MVP

18) Архитектура Windows и Linux. Налаживание сети. А также простые пользовательские вещи, незнание которых профессиональным программистом часто удивляет.

19) XML, XHTML 1.1, HTML 4, HTML 5, CSS 2, CSS 3, XPath, XSLT

20) SQL и его диалекты. Очень важная вещь для работы и создания любого проекта.

21) реляционные БД. SQL-92, TSQL (MsSQL), PL-SQL(Oracle), MySQL, PostgreSQL

22) необходимо связываться с БД, следовательно: ORM, Hibernate, NHibernate, Entity Framework, Linq-To-SQL, ADO.NET

23) архитектура x86

24) принципы юзабилити

25) принципы параллельного программирования

26) регулярные выражения

27) теория сложности алгоритмов

28) протокол TCP/IP

29) технологии COM, Corba. Технологии построения распределенных и компонентных приложений.

30) API Windows 98/NT и DirectX

31) MS Office + Visual Basic for Applications

32) принципы работы клиент-серверной и трехзвенной (с выделенным логическим ядром) архитектур

33) принципы построения Web-узлов

34) сетевые технологии (Телекоммуникации)

35) В понятие “знание Х” как само собой разумеющееся входит требование “опыта практической работы с Х”. Очень неплохо, если вы сможете продемонстрировать работодателю хотя бы один законченный проект. Ведь одно дело заявлять, что вы знаете Си++, и совсем другое - показать написанный на Си++ и устойчиво работающий, с инсталлятором и нормальным “хелпом” продукт, которым к тому же кто-то пользуется. Конечно, совсем не обязательно пытаться написать Windows 2000 или Word 99, но хорошему программисту вполне по силам сделать, например, аккуратную программу хранения и печати платежек, оригинальный визуальный OCX-элемент управления или небольшую игрушку. Положить их можно на сайтах, распространяющих ПО бесплатно (типа www.download.ru или www.freeware.ru), где самые интересные программы копируются десятками тысяч пользователей. Это будет прекрасной характеристикой результатов вашего труда. Кроме того, одновременно можно попытаться что-то и заработать на создании shareware-программ.

36) понимать все этапы жизненного цикла создания ПО

37) иметь опыт групповой работы

38) знать системы контроля версий (типа PVCS), репозиториями CVS, SVN, Git, Mercurial, TFS

39) разбираться в CASE-системах построения информационной модели БД

40) знать языки четвертого поколения, точнее, среды разработки высокого уровня, нередко встроенные в СУБД (Oracle Developer, PowerBuilder, SQL Windows и т. д.). Эти языки в большинстве своем очень похожи, и перейти с одного на другой не составляет никакого труда.

41) Неплохо организовать свою страничку в Интернете, благо узлов, предлагающих для них бесплатное место, сейчас полным- полно (например, www.chat.ru). Чем “круче” будет наворочена такая страничка с программной точки зрения (аплеты на Java и JavaScript, VRML-миры и т. д.), тем лучше. В идеале хорошо бы разместить свой CGI-скрипт, но для этого надо договариваться с провайдером. Над эстетикой оформления можно не задумываться, если программист, конечно, не собирается стать профессиональным дизайнером. Главное - продемонстрировать свои знания программиста.

42) технологии искусственного интеллекта, нейронных сетей

43) принципы построения интерпретаторов и трансляторов (во многих КИС используются встроенные языки)

44) желательно разбираться в предметной области (в 95% случаев это бухгалтерский и управленческий учет)

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

46) Веб-разработка: ADO.NET , ASP.NET, ASP.NET MVC (ASPX/Razor). Создавать клиентские приложения, следовательно, WinForms, WPF, MFC.

47) Участие в OpenSource проектах

48) Просмотр кода OpenSource проектов

49) Оглядываясь назад, я сделал неожиданное для себя замечание. Возьмем изучение шаблонов проектирования. Я читал много книжек, смотрел видео по этим темам, читал статьи. Но, всё это изучение закончилось бы ничем, если бы не два фактора. Во-первых, мне надо было применять это в реальных проектах. Во-вторых, я нашел тех, с кем можно было посоветоваться, кто мог бы доходчиво объяснить. И так по каждой теме. Будь то TDD, Agile, DDD или что-то другое. Ищите людей, которые смогут вам объяснить.

50) Саморазвитие. Чтение книг

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

Чтение статей

Мой список блогов и ЖЖ в Google Reader постоянно обновляется и дополняется. Чтение статей помогает оставаться в курсе событий и тенденций IT мира.

Написание статей

Написание статей помогает упорядочить мысли в собственной голове. Если вы не хотите публичности, то всё равно стоит писать статьи в закрытом блоге или просто в текстовом редакторе.

Участие в конференциях

Я люблю много общаться и заводить интересные знакомства. Конференции для меня отличный источник и того, и другого.

Узнавать у коллег, в чем вам ещё нужно подрасти

Это самый эффективный и психологически сложный способ «вытащить себя за волосы вверх». Спросить у своих коллег, чего мне не хватает, как мне стать лучше. Обязательно поинтересуйтесь — узнаете много интересного.

51) создавать клиентские приложения, следовательно, WinForms, WPF, MFC.

52) технологии Silverlight, WCF, WF, знания SOA

53) некоторые фреймворки разработки: Sharepoint, Microsoft CRM, SugarCRM

54) Continuous Integration (CC.NET, nAnt, TeamCity, TFS)

55) нужно знать разные оболочки разработки, инструментарии (Debuging, Profiling)

56) TDD, IoC, Scrum, Agile

57) Очень хороший вариант – сидеть на специализированных IT форумах. Сначала просто читать. Потом вчитываться в нерешенные проблемы, искать решения в гугле, и решать чужие проблемы. Потом научитесь видеть проблемы на поверхности. Или сможете без проблем решать их сами.

58) Книги библии








59) Займите себя чем-нибудь. До сих пор нет ни одного нормального Twitter клиента, все отстой. Ну, напишите и вы свой отстойный клиент. Есть всего один нормальный бесплатный движок для форумов phpBB, и то на php. На amazon kindle до сих пор нет notebook (идея уже забита). Крадите идеи, переделывайте их, реализуйте двойников. Посмотрите на телевидение, да там 99% программ украдено с запада. В IT воровать тоже можно, честно. Пускай даже вашей программой будете пользоваться только вы и пара ваших знакомых – роль будет играть то, что вы довели какой-то (хоть даже очень маленький) проект до конца.

Если вы делаете одну и ту же задачу дважды – вот она работа для настоящего программиста. Автоматизируйте все. Таскаете wallpapers с atata ветки? Напишите программу, которая будет делать это за вас и выставлять вам новые wallpapers по параметрам с этого RSS. Напишите сначала простую нерабочую программку, следите за ней, развивайте, дайте попользоваться друзьям. Сделайте нормальный GUI, выложите в интернет.

60) Будьте программистом

Самое основное – это пройти тот этап, когда человек превращается в программиста (благо математики достаточно близки). Эти шутки про алгоритм “вскипятим чайник” (все же ее знают, ведь так?), или про то, что программист, переходя дорогу с односторонним движением, смотрит в обе стороны – они не просто так. Это способ мышления. Нельзя никому верить, нужно проверять внешние параметры. Нужно уметь видеть ошибки. Нельзя никогда полагаться на умного пользователя. Это, кстати, одна из ошибок нашего преподавания, что преподаватели позволяют делать изначально плохие программы студентам. Студенты не валидируют данные, делают ужасные интерфейсы. Моим студентам сейчас не повезло, я за них взялся.

Чтобы размяться начините с чтения вот этой книги

Там собраны хорошие задачки, можно размяться порешать их. Можно просто посмотреть и разобрать ответы. Можно разобрать ответы, и попробовать написать на другом языке (иногда бывают мелкие специфичные для языка различия).

Притча о притче. "История Рампы" Лобсанг Рампа

«Одного раввина, известного своей ученостью и умом, как-то спросили, почему он так часто иллюстрирует великие истины простыми, незатейливыми историями. — Это, — сказал мудрый раввин, — лучше всего объяснить притчей! Притчей о Притче. В давние времена Истина ходила среди людей неприкрашенной, нагой, как и положено Истине. Кто ее видел — отворачивался от стыда или страха, ибо не мог смотреть ей в лицо. Так Истина и бродила среди народов Земли, нежеланная, всеми презираемая и отвергнутая. Однажды, неприкаянно ковыляя по дороге, она встретила Притчу, беззаботно гуляющую по свету в дорогих ярких одеждах. — Почему ты так печальна и несчастна, Истина? — спросила Притча с веселой улыбкой. — Потому что я так стара и уродлива, что люди избегают меня, — скорбно ответила Истина. — Чепуха! — рассмеялась Притча. — Люди избегают тебя не поэтому. Надень кое-что из моих одежд, ступай к людям и сама увидишь, что будет. — И вот Истина нарядилась в красивые одежды Притчи, и теперь, куда бы она ни пошла, всюду ее встречали как желанную гостью. — И старый мудрый раввин с усмешкой сказал: — Люди не в силах смотреть в глаза нагой Истине, они предпочитают видеть ее в одеждах Притчи».