Legal Code
645 subscribers
1 file
87 links
Навчання програмуванню. Вирішення юридичних задач за допомогою IT-навичок. Технічний світогляд юриста.

Рекламу не пропонувати :)
Download Telegram
Channel created
Channel name was changed to «Legal Code»
Channel photo updated
Hello, world!

Меня зовут Андрей и я буду вести здесь канал-блог:
- о том, как юрист может научиться кодить (буду делиться своим опытом, впечатлениями и мыслями);
- о том, что ждёт по ту сторону монитора и как оно тебя меняет;
- о некоторых вопросах, объединяющих право и код, правотворчество и программирование, правоприменение и выполнение программ, правосудие и принятие решений компьютером.

Какова моя цель? Давно хотел собрать своеобразное коммьюнити юристов-программистов, а также колеблющихся, грезящих кодингом юристов (и студентов). Может, и не обязательно "юристов". Но обязательно тех, кто любит/хочет создавать технологические продукты своими руками, а не чужими. :)

Тут будет мясо. Я не буду рассказывать о том, что мы в 21-м веке и мир меняется. Будут конкретные истории, понятные примеры, логика и щепотка математики. Может, иногда будут немного спонтанные мысли. Но обещаю, что всё происходящее будет заряжено живой практикой, а не пыльными изысканиями.

Так что начну с канала, а затем, думаю, и чат запустим.
Программирование и кодинг — разные вещи?

Программирование зачастую определяется как процесс (а иногда даже как искусство) создания и изменения компьютерных программ. Но всегда ли это означает написание программного кода (кодинг)? Если мы найдём хотя бы один пример программирования без кодинга, значит это уже не одно и то же. И такой пример есть.

Чатботы. Есть масса сервисов для создания чатботов, как они сами заявляют, "без знаний программирования" (https://ru.pipe.bot/docs), "без кодинга" (https://chatfuel.com/), "для непрограммистов" и т.д. Давно наткнулся как-то на список более полусотни конструкторов чатботов. Но чатбот — это, вне всяких сомнений, компьютерная программа (с которой юзер работает через мессенджер). А вы её разрабатываете при помощи выбранного вами конструктора. Вы определяете логику её работы, возможности, ограничения и многое другое. Значит вы программируете. Но не кодите.

Кодинг — базовая форма компьютерного программирования. Это непосредственное написание/изменение программного кода (а в некоторых случаях и его безбожный копипаст с небольшими правками). Освоив кодинг, вы получите шанс выжать максимум из программирования. Но стремительно развиваются разные сервисы в духе "кодь меньше, программируй больше". Ведь нередко нужно просто сверстать красивый сайтик по шаблону, не думая о стандартах вёрстки и не высчитывая ширины прямоугольников.
Нужна ли математика для того, чтобы кодить?

И нет, и да. Давайте разберёмся.

1. Начну с хорошей новости. Высшая математика не нужна. Алгебра во многих своих проявлениях не нужна. Геометрия не нужна для многих задач (проще сказать, когда она нужна). Короче, всё то, из-за особенно страдают гуманитарии в школе, не нужно для изучения многих языков программирования и их применения в несложных проектах.

Если, конечно, вы не решите программировать сразу в таких областях: машинное обучение (в частности, нейросети), big data, поисковые алгоритмы, статистика, блокчейн, криптовалюты и криптография вообще, создание программ для математиков, биологов, астрономов и для других отраслей с серьёзными вычислениями и т.д.

2. Но вообще без математики не обойтись. Вам понадобится, как минимум:
- понимание сути четырёх арифметических действий (+,-,*,/), а также их взаимозаменяемости (например, добавление отрицательного числа = вычитание такого же числа, но с положительным знаком)
- понимать разницу между "больше" (>) и "равно или больше" (≥) и т.д.
- умение выводить пропорции, например 200 и 50, 400 и Х, тут Х = 400:(200:50) = 400:4 = 100
- понимание того, как происходит округление (в большую, в меньшую сторону; на определённое количество знаков после запятой)
- больше я пока не вспомнил.

В целом, для уверенного старта нужна не самая сложная часть школьной программы. Разумеется, в зависимости от задачи вам могут понадобиться более пикантные инструменты из программы старших классов и даже с вышки. Но я программирую уже два года, создал около 15 разных проектов (многие с базами данных, некоторые с авторизацией юзеров), и мне ни разу не понадобились: синусы, косинусы и их собратья; логарифмы; квадратные уравнения; число Пи и всё, что связано с окружностью, и многое другое из школьного курса, и вообще ничего из вышки. Может быть, я нубас. Разве что, когда я переписывал код нейросети из книжки, была одна сложная формула, но её требовалось просто переписать.

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

Да. Но не всё так плохо. Давайте разберёмся.

В программе юрфаков курс логики обычно есть. И в нём, помимо прочего, должны излагаться такие вещи: конъюнкция (логическое "И"), дизъюнкция (логическое "ИЛИ"), отрицание (логическое "НЕ"), импликация ("ЕСЛИ ... ТО"), а также понятие об истинности/ложности высказывания ("True" / "False"). Эти несколько вещей и составляют "логическую основу" кодинга, во всяком случае, для начинающих. Давайте разберём на конкретном бытовом примере.

Пример из жизни, чтоб показать, что мы уже мыслим логически:

1. Бытовушное описание.
Когда я проснусь, то не ранее 8 утра захочу открыть окно, чтобы проветрить свою конуру. Но я это сделаю, если температура на улице больше 9°C и если нет дождя, снега, града и прочей дичи, падающей с небес.

2. Логическое описание.
Если я проснулся, тогда проверю время. Если уже есть 8:00, тогда я выгляну в окно, чтобы проверить температуру за окном и наличие осадков. Если температура выше 9°C и если нет осадков, тогда я открою окно.

3. Описание псевдокодом (абстрактный код, который пародирует языки программирования и который можно быстро приспособить под любой из них).
if( awakeningDone == True ){
if( time >= "8:00" ){
if( temperatureC > 9 AND precipitation == False ){
openTheWindow();
}
}
}

Как видите, наши "когда" и "не ранее" в бытовушном описании мы превратили в "если" в логическом описании.
А все имеющиеся "если" в логическом описании мы превратили в конструкции if( условие... ){ код... } в описании псевдокодом. Кроме этого, состояние пробуждения проверяем на истинность ( awakeningDone == True ), сравниваем время ( time >= "8:00" ), температуру ( temperatureC > 9 ) и проверяем наличие осадков на ложность ( precipitation == False ), ведь они нам не нужны.

Вот вам и пример формализации бытовой логики, ничего сложного. :)

К ней ещё не раз вернёмся, ведь в мире кодинга страшна не логика, а страшно и разрушительно её отсутствие.
Нужен ли English, чтобы кодить?

Да. Но не такой сложный, как у юристов.

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

1. Чтобы кодить, как и в случае с математикой, для начала хватит и школьной программы. Популярнейшие языки программирования создавались и создаются в англоязычной среде, в их основе английские слова. Из-за этого большую часть времени вам придётся использовать такие сложные слова, как:

if, else, for, while, switch, function, return, class, private, public, match, replace, round, floor, ceil...

Иногда могут всплывать ещё более сложные: array, import, include, explode, implode, decode, encode... Да, иногда будут попадаться стрёмные триады типа ignore_user_abort, а иногда даже верблюды: getElementById.

Но эти слова/словосочетания самодостаточны и однозначны. Я пока ещё не видел, чтоб одно и то же слово в языке программирования имело разные значения. А теперь посмотрите, что творится в юридическом English, какого уровня обороты используются там, сколько идиом и традиций... Языкам программирования далеко до этого. :)

2. Да, существует ещё такая штука, как документация языков программирования и разных технологий. Но её, снова-таки, пишут простым языком, без сложноподчинённого террариума. Первая книга на английском, которую я осилил полностью и без боли, был мануал по одной программе. На англоязычных форумах тоже не Шекспиры сидят.

3. Но почему от кодеров в вакансиях иногда требуют уровень владения английским Intermediate, а то и выше? Да потому, что:
- нужна уверенность, что он/она не будет каждые 10 минут тратить 1 минуту в гугл-переводчике;
- передовые технологии и обновы в первую очередь документируются и обсуждаются на английском, нужно держать руку на пульсе;
- команды интернациональны, все должны понимать друг друга;
- ну и вишенка: нередко хотят перенести на самого кодера общение с клиентом, ибо внедрён Agile и всё такое.

Поэтому можно начать кодить и со "школьным" английским. А там глядишь, романтика создания технологий собственными руками вдруг заставит раскачать свой English.
Нужен ли педантизм/буквоедство, чтобы кодить?

Да. Но похлеще, чем у юристов. Последние три дня я утверждал, что можно кодить со школьной математикой, школьным English и развитой бытовой логикой. Но в случае с педантизмом/внимательностью такое не прокатит.

1. Если вы пропустите запятую или кавычку в договоре, иске или законопроекте, то быть может, вам это простится. Договор подпишут, суд примет иск, а законопроект пройдёт все стадии. Но компьютер тут схалтурить не даст: программа зачастую просто не запустится, если допустить подобную ошибку. А если запустится, тем хуже для вас: может быть заложена потенциальная ошибка или уязвимость, которая проявится со временем.

⛔️ Примеры, когда не запустится вовсе (язык PHP):
$law = "good; — тут нужна закрывающая кавычка
$law = "good'; — тут нужна закрывающая кавычка того же типа, что и открывающая
$law = "good" — тут в конце инструкции должна стоять точка с запятой (;)
law = "good"; — тут пропущен знак $ для обозначения переменной

🐛 Пример, когда запустится, к сожалению:
if( $userPassword = $realPassword ){ //code } — тут блок //code будет выполняться всегда, ибо в блоке if происходит не сравнение (знак == ), а тупо присваивание (знак = ). Так можно заложить страшную уязвимость, если не тестировать свой код.

2. Как же быть? На самом деле, специальный софт для кодинга заботливо помогает отслеживать такие вещи ещё на стадии написания кода. Также при тестировании отдельная подпрограмма укажет номер строчки, в которой обнаружилась ошибка, и даже её тип. Более того, если вы сидите в браузере на чужом сайте, можете нажать F12, чтобы увидеть возможные ошибки в панели разработчика (вкладка "Console"). Но на софт полагайся, а сам(-а) не расслабляйся, ведь страшны ошибки не синтаксические, а логические (о них будет отдельный пост).

3. Поэтому если вы заслуженно считаете себя педантом/буквоедом, вам хорошо даётся вычитка драфтов и дьюдилы, у вас взгляд натаскан на двойные пробелы, а нерасставленные знаки препинания вызывают боль, то вход в мир кодинга станет для вас прогулкой. Если же нет, тогда это будет хорошее испытание. В любом случае программирование — это мир, где вы почувствуете, что ваша любовь к точности и порядку востребована.
Каким может быть первый раз

В программирование юрист может войти по-разному. Подумал и объединил известные мне способы в три пути. И выставил их по порядку от простого к непростому. А ещё их можно проходить последовательно.

📜 Через алгоритмизацию разных процессов, например, юридической рутины. Тут юрист сначала выполняет роль архитектора, а каменщиком является нанятый в штат или временно подряженный кодер. Юрист здесь является автором общей логики продукта, определяет цели и условия их достижения (то есть ставит технические задачи). Кодер же задаёт юристу рамки, обусловленные бюджетом, платформой, интерфейсом и другими техническими вещами. Но роль юриста вовсе не должна ограничиваться командами типа "сделай здесь красиво, а здесь чтобы фоточка выскакивала". Юрист тщательно выписывает алгоритм/контент либо в доке на Google Drive, либо в каком-нибудь софте для прототипирования, то есть он реальный соразработчик. Таким образом, вы плавненько переходите от стратегического мышления к техническому пониманию, и вам уже будет легче взяться за кодинг. Но всё ещё не так легко.

🎨 Компромиссный вариант — программы/сервисы по типу What You See Is What You GetWYSIWYG. Благодаря одной из них я стал лигалинженером в Axon Partners, но это будет отдельная история (спойлер: потом её стало мало, чтобы удержаться). В таких программах вы в 80-90% случаев не пишете никакой код, а либо строите что-то вроде конструктора, либо прокладываете логические лабиринты, а оно потом работает так, будто вы кодили. Можно быстро влиться, и дальше может произойти чудо. Если вы стали настолько усердно работать в них, что перестало хватать встроенного функционала и вы всё больше смещались в те 10-20% случаев написания кода — поздравляю: вы почти совершили мягкий переход. Теперь нужно выбрать: оставаться дальше в тени WYSIWYG и вести ограниченную жизнь или овладеть джедайской силой кодинга.

🛠 Сразу через кодинг, пытаясь делать то, что нафантазировал ваш учитель, автор учебного пособия, организатор курсов и т.д. В моём случае это была информатика в лицее, где нам предлагался язык Паскаль, а в качестве инструмента чудная прога АЛГО. Самое лучшее началось, когда дали задание на дом — сделать собственный проект. Первая моя работа — виртуальный собеседник на тему футбола (но из-за ограничения на количество строк кода разговор получился коротким). Этот путь сложен тем, что приходится одновременно и прототипировать продукт, и физически создавать его строчка за строчкой, то есть развивать и глобальное, и локальное мышление. Но в процессе уже можно получать удовольствие.
Какой язык программирования выбрать?

Это частый злободневный вопрос. Часто связан с вопросом, какой язык программирования (далее — ЯП) лучше/перспективнее. Как по мне, это очень похоже на вопрос "в какой отрасли права лучше запустить свой юрбиз?".

В программировании есть ЯП, популярные сейчас, и есть "угасающие". Есть и практически заброшенные, с узким кругом почитателей (прям как латынь). Есть ЯП, которые целесообразны для программирования "железа" (роботы-пылесосы, датчики для смарт-курятников и т.д.), а есть те, за счёт которых работают веб-сайты. Так что выбор ЯП — вопрос того, чем вы хотите заниматься. Ведутся специальные рейтинги ЯП, по которым вы сегодня можете примерно оценить "популярность" и "перспективность" основных ЯП.

Основываясь на данных dou.ua и proglib.io, выстраиваю здесь свой топ 5 ЯП с точки зрения полезности для юриста:

1. JavaScript
суть: наиболее широко применяется на веб-сайтах, гибкий, можно делать весьма разнообразные штуки, есть хорошие библиотеки.
популярность: ⌨️⌨️⌨️
перспективы: 🚀🚀🚀🚀
сложность: 🤯🤯
мой опыт: использую постоянно.

2. Python
суть: минималистичный синтаксис, хорошее коммьюнити, много библиотек, подточен под машинное обучение и анализ данных, имеет официальную философию.
популярность: ⌨️⌨️⌨️
перспективы: 🚀🚀🚀🚀
сложность: 🤯
мой опыт: прошёл вводный курс, потихоньку начинаю использовать.

3. PHP
суть: применяется в основном в веб-проектах, удобно строить большие и динамические сайты, поддерживается многими провайдерами.
популярность: ⌨️⌨️
перспективы: 🚀🚀🚀
сложность: 🤯🤯
мой опыт: использую постоянно.

4. Java
суть: потенциально охватывает множество устройств, активно используется для кодинга под Android.
популярность: ⌨️⌨️⌨️
перспективы: 🚀🚀🚀
сложность: 🤯🤯🤯
мой опыт: -

5. C#
суть: ведущий язык для платформы .net, поближе к Windows.
популярность: ⌨️⌨️
перспективы: 🚀🚀
сложность: 🤯🤯🤯
мой опыт: -

Здесь не упомянуты такие, возможно, интересные для юристов языки, как R, Go и Swift. В ненужности юристам C/C++ на фоне других ЯП уверен.

А вы уже кодили, кроме уроков информатики в школе?
✔️ДА; НЕТ
Чем вообще отличаются языки программирования?

Все различия между языками программирования (далее — ЯП) я бы условно поделил на три группы: устройство/возможности, синтаксис/внешность и тренды в применении.

⚙️ Устройство / Возможности
Самая важная группа, ведь ЯП прежде всего — это "рабочая лошадка". У разных ЯП есть разные возможности и ограничения, также нередко одни и те же функции реализованы по-разному. Также различается механика запуска и выполнения исходного кода. Кому интересно, есть неплохая сравнительная таблица. Но давайте в это пока не углубляться. Скажу только, что для новичка в мире кодинга эти различия вытекают в следующее: перейти с JavaScript или PHP на C++ или Java сложнее, нежели наоборот.

🎇 Синтаксис / Внешность
Все популярные ЯП, на первый взгляд, выглядят одинаково: тупо текст, напичканный сторонними символами: {}()""'';$=>. Но если присмотреться, разные правила синтаксиса определяют разное общее впечатление от вида большого куска кода. Нередко можно услышать, что Python элегантен, ведь в нём не нужно ставить вездесущие фигурные скобки {}. Но за этой простотой кроется другая угроза: нужно следить за отступами. Также вы могли видеть, что у кодеров на мониторе код бывает разноцветный. Эта "раскраска" зависит не от ЯП, а от настроек программы, в которой пишется этот код. Вовсе не стоит выбирать ЯП исходя из этого критерия, это как выбирать адвоката по цвету рубашки и волос.

🚲 Тренды в применении
Так сложилось, что ЯП ещё нужно оценивать и с точки зрения целесообразности его применения для решения той или иной задачи. Много кому покажется смешным, что свои первые две нейросети я написал на PHP, ведь для такого дела в тренде Python. Но в этих "традициях" действительно нередко есть смысл: наличие тех или иных библиотек на конкретном ЯП означает, что именно с этим ЯП задачу можно решить быстрее, легче, удобнее и дешевле, не "изобретая велосипед заново". А если вы хорошо овладели, скажем, двумя ЯП, вам несложно будет выучить третий под конкретную задачу, если сильно понадобится.

А что для вас важнее: возможности (⚙️) или тренды (🚲) ?

Если у вас есть вопросы/пожелания, пишите их в комментарии к этому посту, мне в личку или на почту (см. в описании канала).