суббота, 19 декабря 2015 г.

Программирование для детей. SCRATCH

SCRATCH - это инструмент для разработки для ребят от 8-ми лет. Разработали его сотрудники Массачусетского технологического института. С помощью Scratch можно создавать свои игры и делиться ими с друзьями. На официальном сайте https://scratch.mit.edu/ есть множество примеров.
Программирование в Scratсh - это группировка блоков-команд, которые заставляют картинки двигаться, менять внешний вид, издавать звуки.
Если с английским пока сложновато, можно выбрать интерфейс на русском.



Хорошие видео-лекции по SCRATCH на русском доступны на http://academy.mosmetod.ru 

пятница, 29 мая 2015 г.

0-3. Инструменты для разработки

Итак,  поскольку  0 уровень предполагает начинающих программистов в качестве читателей, то первое средство разработки, которое я посоветую, будет блокнот с подсветкой синтаксиса, но сначала

0. Google

Заведите себе аккаунт на Google.com с приличным именем, SIvanov, IvanPetrov, Petr.Sidorov (нe pussicat1994) и считайте его рабочим. Шлите с него резюме работодателям, используйте для поиска, берегите историю поиска смолоду. Поисковики хорошо учатся, и тот же гугл быстро сообразит, что вы увлеклись программированием, и лучшая ссылка  - ответ на ваш вопрос скоро будет появляться первой. Google - это, без преувеличения, главный инструмент современного разработчика. Многие задачи уже решались до нас, я имею ввиду технические задачи разной величины - разные алгоритмы, поиска, сортировок, генерация файлов известного типа - основной массе программистов редко приходится изобретать колесо - разве что переосмысливать, приспосабливать и иногда улучшать. И если вы работаете над банковским документооборотом и вам за пару дней нужно научиться генерировать отчеты в формате pdf, явно нужно искать готовые библиотеки. Конечно, мозг должен работать, решать самостоятельно задачи, но если после прочтения документации решение не очевидно и какое-то время не приходит на ум - пора гуглить, нечего выделываться. Погуглите, попробуете приспособить, поймете, какие все тупицы, и изобретёте свой велосипед.

1. Notepad++   https://notepad-plus-plus.org/

Его можно настроить на открытие файлов java (а потом и других, например xml, html). Некоторые программисты пользуются им, чтобы быстренько подправить что-то, когда среду разработки не хочется загружать, например.
Почему первое время нужно использовать блокнот?
Конечно, в блокноте нет автодополнения и автоматических подсказок, но когда вы только начинаете, важно хорошо освоить синтаксис языка, а не быстро выполнить задачу.
На техническом собеседовании на позицию младшего разработчика вас скорее всего попросят писать код - ручкой на листочке при очном интервью, или, например, на http://collabedit.com/ (нажмите Create New Document), если интервью по скайпу/телефону. Среда разработки отучает писать код руками, точнее, избаловывает: вместо набирания слов полностью пальцы автоматически жмут сочетания клавиш типа ctrl+пробел, а если вы до этого не программировали, то получится "не знал, да забыл".
В общем, скачиваем Notepad++ с официального сайта и устанавливаем (можно выбрать русский язык при установке)

Простой, редактор с подсветкой синтаксиса. Если настроить как программу по умолчанию для открытия файлов java, то в Windows удобно использовать с Total Commander

2. Far Manager http://www.farmanager.com/download.php

Проводник и мощная утилита для всего. Нужно установить его вместе с плагинами (обязательно Colorer) и выучить горячие клавиши. Far программисты (большинство знакомых мне) используют как

  • проводник (то есть для навигации) - он позволяет заглянуть внутрь архивов и скрытых папок (Enter), копировать (F5), перемещать/переименовывать (F6) файлы и папки. . F8 - удалить файл/папку.  Alt + F1 - выбор диска в левой панели, Alt + F2 - выбор диска для правой панели, Ctrl + /  - переход в корневую папку текущего диска
  • средство для просмотра (F3) редактирования(F4) кода по-быстрому (а не так давно для кого-то это был основной редактор кода). Программисты в основном создают новые файлы копированием и изменением старых (F2 - сохранить в редакторе). Подсветка синтаксиса F11 -> FarColorer  -> ListTypes -> Java
  • запускают компиляторы, сборщики, серверы. Обычно через командную строку (cmd).

И не только. Плагины и макросы - ключевые слова для более глубокого изучения Far. В любой непонятной ситуации жмите Esc.

Панели Far
Между открытыми на редактирование файлами, панелями и командной строкой можно переключаться по F12.

Замечание: По Enter происходит запуск исполняемых файлов или запуск ассоциированных с типом файла программ, по F4 файл открывается на редактирование редактором Far.

3. Командная строка Windows

Запускается  Пуск->Run набираем cmd, в Windows 8 набираем cmd в Поиске.
В Far набираем start для запуска командной строки в новом окне. Либо набираем команды во встроенной командной строке и переключаемся в окно командной строки через F12.
Как работает:
Вводится команда, для команд можно указать параметры. Если параметр содержить пробелы, его нужно заключить в кавычки, например, "%JAVA_HOME%"/bin

Тор-5 команд для начала:
help - выводит все доступные команды
cd  - смена каталога - в качестве аргумента передаем  путь, например,
        cd d:/dev/java  - переходим в каталог d:/dev/java
        cd ..  - переходим в каталог на уровень выше
dir - содержимое текущего каталога
start - запуск нового окна с командной строкой
exit - выход

4. Total Commander http://www.ghisler.com/download.htm

Альтернатива Far, удобно использовать в сочетании с Notepad++.
Папки показывает в соответсвтвии с настройками Windows, то есть по умолчанию скрытые папки не видны.
Доступно контекстное меню Windows.



Задачи:
0. Запустите командную строку, с помощью команд перейдите в папку %JAVA_HOME%/bin и посмотрите ее содержимое.

1. Запустите Far, не выходя из окна Far отредактируйте HelloWorldApp.java, чтобы выводились строки.
Hello World!
How are you?
I'm using Far.
Скомпилируйте и запустите.

2. Сделайте то же самое с помощью Total Commander и Notepad++.
Hello World!
How are you?
I'm using Total Commander & Notepad++.


среда, 27 мая 2015 г.

0-2. Пора кодить

output - выводить
input - вводить
print - печатать
static - статический
main - главный, основной
compile - компилировать
compiler - компилятор
interpreter - интерпретатор
Как выглядит код на java?
Что такое функция main?
Как создать простейшее java-приложение?
Что такое компилятор?
Что такое интерпретатор?
Что такое кодировка?



Ну что,  давайте напишем сразу что-нибудь простенькое на java, чтобы пробудить аппетит.
Процесс создания простейшего приложения включает 3 этапа:
  1. Редактирование файла исходного кода в текстовом редакторе или специальной программе, упрощающей жизнь программисту - таких программ немало.
  2. Компиляцию файла с исходным кодом
  3. Запуск скомпилированного класса

Для начала посмотрим на код самого простого java-приложения, выводящего на экран (в консоль) текст "Hello World".

HelloWorldApp.java
public class HelloWorldApp {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Это исходный код, то есть то, что пишет программист. Здесь дано описание некоторого класса HelloWorldApp. Как видите, исходный код - это человекочитаемый текст, написанный по определенным правилам. Правила определяют допустимые слова и символы, их последовательность, а так же их значение - в итоге мы получаем код на языке программирования, понятном компилятору.
Компилятор  - это программа, которая превращает исходный код в байт-код, понятный машине, точнее, как в нашем случае, интерпретатору байт-кода, встроенному в JVM.
Интерпретатор - это программа, которая обрабатывает код  и сразу его выполняет.

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

Итак, давайте просто откроем текстовый редактор (блокнот) и скопируем  в него код HelloWorldApp.java. Файл сохраняем как, d://devstart/0/HelloWorldApp.java.


Далее запускаем командную строку (Run - > cmd). С помощью команды cd (change directory - сменить каталог) переходим в каталог, куда сохранили HelloWorldApp.java. Затем запускаем компилятор javac
Подсказка: Работая в командной строке пользуйтесь стрелками вверх\вниз для перебора ранее запущенных команд. Чтобы вставить текст, кликните по заголовку окна правой кнопкой мыши выберите Edit -> Paste.

с:\>cd d:/devstart/0

d:\devstart\0>%JAVA_HOME%/bin/javac HelloWorldApp.java

В результате рядом с HelloWorldApp.javа должен появиться файл  HelloWorldApp.class - тот самый байт-код. Пробуем его запустить:

d:\devstart\0>%JAVA_HOME%/bin/java HelloWorldApp

Результатом должна быть строка

 Hello World!

Заметьте, что аргумент утилиты java - это имя класса, а не имя файла с байт-кодом. Команда java запустила JVM, которая выполнила приложение и завершила работу.




Теперь можно посмотреть поближе на тот код, который мы запустили.

Наше приложение состоит из одного класса, в котором есть только одна функция - main. Функция main по другому называется точкой вода в программу. В реальной жизни приложения состоят из десятков, сотен и даже тысяч классов, но у каждого приложения должна быть как минимум одна точка входа  -  некоторый класс с функцией main, принимающая на вход массив строк (String[])

Попробуйте добавить строчку "How are you?" к тому, что уже выводится, изменив тело функции. Чтобы вывод выглядел так:
Hello World!
How are you?

После изменения скомпилируйте и снова запустите приложение.

Если вы хотите вывести текст на русском языке, или иероглифы, то придется немного познакомиться с понятием кодировка: каждому символу(букве, цифре, точке, кракозябре) в компьютере соответствует последовательность из 0 и 1. Но проблема в том, что кодировки придумывались независимо разными организациями и различаются даже длиной последовательностей. Для некоторых кодировок, например, длины последовательсти хватило только на цифры, латинские буквы и некоторые символы. Поэтому текстовые файлы, содержащие, например, русские буквы, можно сохранить не в каждой кодировке.
Исходный код java - это тоже текстовые файлы, для них принято использовать кодировку UTF-8.
То есть нужно сохранить наш файл HelloWorldApp.java в кодировке UTF-8. Однако для этого лучше не использовать Notepad, который добавляет некоторые "невидимые" данные в начало файла (и уж тем более не используйте Word). На самом деле программисты практически не пользуются обычным блокнотом.  O том, в чем можно писать код - в следующей статье.

вторник, 26 мая 2015 г.

0-1. JDK и JVM. Установка Java

java - джава (не ява)
Oracle - Оракл
install - устанавливать
development - разработка
environment - окружение
settings -настройки
variable - переменная
library - библиотека
kit - набор инструментов
JDK и JRE: в чем разница?
Как установить Java (Windows)?
Что такое переменные окружения?
Как проверить, какая версия java установлена?
Для начала, совсем немного о языке Java и его истории. Из уважения к создателям, конечно, лучше прочесть хотя бы статью в Википедии.
Язык Java создавался по принципу WORA ("write once - run anywhere"), что фактически значит "создай приложение единожды - запускай где угодно".
Процесс создания приложения упрощенно выглядит так: мы пишем код - далее компиляция (превращение нашего текста в некоторый понятный машине) - запуск на виртуальной машине.

Виртуальная машина выполняет роль прослойки между вашим приложением и любой операционной системой. То есть чтобы запустить приложение  на Java, нужно предварительно установить виртуальную машину JVM (Java Virtual Machine), подходящую для вашей операционки. Виртуальные машины, удовлетворяющие определенным требованиям (спецификации), выпускают разные поставщики. Владелец торговой марки Java, компания Oracle, поставляет виртуальную машину в комплекте с некоторым набором готовых классов (библиотекой классов - Java Class Library).
Поскольку мы решили учиться программировать, нам также понадобятся инструменты для разработки. Все вместе это будет JDK - Java Developer Kit, точнее  Java™ Platform, Standard Edition Development Kit (JDK™). 



Текущая версия Java SE 8, однако велика вероятность, что, устроившись на работу, вы попадете в проект, создававшийся достаточно давно, и в нем будет использоваться Java 6, например. Для крупных компаний с серьезными приложениями (например, для  банков, страховых компаний) смена версии Java - очень трудоемкая и поэтому дорогая задача. 
Версии java поддерживают обратную совместимость (но есть тонкости), это значит, что код, написанный на Java 7 будет компилироваться на Java 8, но не наоборот. Язык развивается, и добавляются новые конструкции. Меняется стандартная библиотека классов, добавляется что-то новое, запрещается использовать что-то, написанное ранее.


Установка JDK

Шаг 0. 
Итак, загружаем дистрибутив JDK с официального сайта Oracle ссылка: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
поиск: [oracle.com download jdk]

После того как соглашаемся с условиями лицензионного соглашения, становятся доступны ссылки для скачивания. Ищем нужную версию для вашей операционной системы. Загружаем и начинаем установку.

Шаг 1.
 После загрузки запускаем полученный установщик. Теперь нам нужно внимательно установить необходимые компоненты в нужное место (Главное - запомнить, куда).


Начинаем установку, нажимаем Далее
Шаг 2-0. 
Опционально. Можно отказаться от установки публичной JRE:
Во-первых, вероятнее всего она уже установлена и используется браузерами, например.
Во-вторых, часто программисту на компьютер приходится устанавливать несколько разных версий JDK, в том числе старых. А публичная JRE по соображениям безопасности и требованиям многих сайтов должна быть последней версии.
Опционально: отказываемся от установки публичной JRE


Шаг 2-1.
Теперь о выборе директории, куда устанавливаем Java (для Windows):
Удобно использовать не стандартную директорию на системном диске C:, а создавать в корне папку, например D:/dev, куда будет установлена не только Java, но и другие необходимые разработчику инструменты. Плюс такого подхода еще и в том, что при переустановке системы, например, вам потребуется минимум действий, чтобы восстановить рабочее окружение.

Желательно: устанавливаем JDK туда, где ее можно быстро найти, этот путь нам пригодится.
Нажимаем Изменить

Установка закончена. 
Шаг 3.
 Готово. Теперь проверяем. Запускаем командную строку,
[в Поиске в Windows 8, или Пуск-Run набираем cmd ]

Помните, куда установила JDK? Нужно теперь проверить,что в указанной при установке директории есть папка bin и в ней есть программа java.exe
Смотрим, что в папке (там много всего интересного), и пытаемся запустить java из командной строки, указав полный путь
d:/dev/java8/bin/java -version


1. Ожидаемый результат:
c:\>d:/dev/java8/bin/java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)


2. Возможный результат:
c:\>d:/dev/java8/bin/java -version
'java' is not recognized as an internal or external command,
operable program or batch file.


Что-то пошло не так, нужно пройтись по шагам, возможно, переустановить java.

Замечание 1:
Если что-то пошло не так, иногда проще удалить JDK [через Установку и удаление программ], и установить заново.

Настройка переменных окружения

Переменная окружения (environment variable) используется для хранения текстовых строк. Например java -разработчики всегда используют переменную JAVA_HOME, задавая путь до каталога, где установлена JDK. Используется она, например, в командной строке, а также в скриптах запуска. 
%JAVA_HOME%/bin/java -version
Смысл в том, чтобы сделать скрипты запуска независящими от того, где на самом деле установлена JDK. ОС заменит выражение между % % на значение соответствующей переменной окружения, если она задана.
В нашем случае нужно создать системную переменную окружения JAVA_HOME и в значении указать путь, куда установлена JDK, у нас d:/dev/java8/
[В Windows 8 набираем в Поиске "environment variables", в более ранних версиях Мой Компьютер->Свойства->Дополнительно]






После установки переменной окружения проверяем, что команда java распознается.

c:\>%JAVA_HOME%/bin/java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)



Замечание 1:
Если вы на шаге 2-0, либо ранее установили публичную JRE, то помните, что теперь у вас их две (одна - публичная, другая в JDK), поэтому нужно будет иногда обращать внимание, в какую JRE вы добавляете файлы, например, и какая JRE запускается в конкретном случае.

Замечание 3:
Если вы на шаге 2-0, либо ранее установили публичную JRE, то в переменной окружения Path будет прописан путь к java, указывающий на публичную JRE. Когда вы набираете команду в командной строке, то сначала исполняемый файл ищется в текущем каталоге, затем в каталогах, прописанных в переменной Path. То есть, получим следующий результат выполнения команды (ранее установлена публичная JRE)
c:\>java -version
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) Client VM (build 25.31-b07, mixed mode, sharing)
В какой-то момент это может сыграть злую шутку, поэтому лучше приучить себя в целях разработки пользоваться  %JAVA_HOME%/bin/java

0-0. Классы и объекты

class - класс
object - объект
function - функция
operation - операция
attribute - атрибут
property - свойство
state - состояние
behavior - поведение
identity - отличительная черта
type - тип
instance - экземпляр
Что такое класс?
Что такое объект?
Какова разница между классом и объектом?


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

Если мы определим всех котов, как некоторые объекты, у которых есть имя, цвет, и состояние сытости, а также которые умеют спать, играть и просить есть, то мы получим класс котов.
То есть, класс - это некоторый шаблон, описывающий объекты, их состояние и поведение. Состояние определяется атрибутами (свойствами). Поведение определяется операциями (методами или функциями, иначе, в java эти понятия не разделяют).


Как видите, в примере выше первая табличка - это описание класса Автомобиль. Предполагается, что Автомобиль обладает такими свойствами, как марка, модель и цвет, эти свойства могут принимать строковые значения. Также автомобиль имеет мощность двигателя  - число. Автомобиль предоставляет нам два метода работы с ним; можно завести двигатель и включить фары.
Теперь по этому шаблону мы можем создать  конкретные объекты и с определенными свойствами. Например, МойАвтомобиль  - Toyota Camry белого цвета, с двигателем мощностью 200 лс. МойАвтомобиль и МашинаДеда - это экземпляры класса Автомобиль.
Попробуйте посмотреть вокруг и составить пару табличек, представляющих классы объектов, которые вы видите (настольная лампа, телефон).