20
А как все же стать программистом? Часть 3. The End.
30 Комментариев  

Теперь взглянем на процесс образования. Важны знания, не существенно получены они за 4 года в вузе или за 4 года самообучения после работы.

Disclaimer: все ниже написанное, естественно, ИМХО.


В комментариях к первой части люди несколько агрессивно восприняли мое деление на кодеров и программистов. Поясню, кодер это ступень в эволюции программиста. И если взять студента, то он так же будет сначала кодером, но произойдет это во время его обучения и к его концу он эволюционирует в программиста. Конечно стоит понимать, что я подразумеваю серьезное обучение.


Без вуза, или если вуз так себе, придется самому руководить этим процессом. А для этого придется немного разобраться что это вообще такое. Потому я и пишу эти посты.


Войти в IT можно молниеносно, вопрос в том пойдете вы дальше ко дну или начнете двигаться вверх. Распишем некоторую гипотетическую карьеру.


1. Верстальщик.

Для верстки требуется знание HTML, CSS и немного JavaScript. Первые два вообще не языки программирования, а последнего требуется не так уж много. Конечно нужно разобраться и в паре инструментов, но это не сложно. А сама область работы весьма наглядна. Так что мощь тех самых абстракций позволяет практически ничего не знать о программировании и всем вот этом, чтобы быть верстальщиком.


2. Front или Back -end разработчик.

Все свободное время от работы верстальщиком вы тратите на изучение JavaScript или PHP, тем более у вас перед носом проходит разработка и вы уже начинаете немного понимать что там вообще к чему. Сама суть абстракций позволяет объяснить на пальцах не вдаваясь в подробности, как работает web. Вы изучите ходовой инструмент и сможете его применять.


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


Может сложиться впечатление, что я пренебрежительно отношусь к такому подходу или к самим кодерам, но это не так. Это вообще один из самых эффективных способов стать программистом. Главная беда в тех, кто увидел этот парадокс, когда человек потратив год-два получает столько же как и студент потративший много больше лет. Возникает ложное чувство, что образование (глубокое знание) вообще не нужно.


Отвлечемся на старый добрый срачь с чего нужно начинать учиться с C или Python(или какой другой высокоуровневый язык).


C проще Python или Python проще С. На самом деле оба варианты верны.


Python гораздо проще позволяет делать многие вещи, вы не следите за памятью, есть множество встроенных инструментов. Раз два и вы уже запустили http сервер и делаете какие-то «реальные» штуки. Веб-сайты, приложения и скрипты в шаге от вас. Вы уже достигли чего-то у вас есть что показать в реальной жизни. Но дается это все нагромождением абстракций, которые скрывают от вас всю ту магию и тайную машинерию. И в этом сложность Python, потому что бы действительно изучить его, нужно разобраться со всем этим, когда вы хотите просто пользоваться не задумываясь.


А С гораздо проще Python, в нем нет такого количества абстракций. Это маленький язык. Прославленная книжка Кернигана и Ритчи имеет всего 253 страницы. Вы не сможете с той же легкостью сделать веб-сайт. И может показаться что изучение C не принесет вам никаких достижений, но это не так. Можно ли на C сделать свой «объект» как в ООП и сборщик мусора для таких «объектов»? Можно, если не ставить перед собой задачу сделать что-то идеальное, то еще и не так уж сложно. Такие достижения не смахивают на те что вам понадобятся в реальной жизни, но они дают вам разобраться в принципиальных и важных вещах. Дают прощупать вам те самые абстракции, которые вы заберете с собой и сможете использовать не только с C.


Тут можно остановиться и сказать какие такие ООП, сборщики мусора, эй, мужик, я вообще таких слов не знаю. Откуда копать то скажи!


Ответ будет простой откуда можете. Если вы нигде не учитесь на программиста, попробуйте сделать свой блог. Через пару недель у вас мало чего получится, но узнаете много нового. Вы сможете остановиться и более осмысленно определить что делать дальше. Вы сможете задать себе, интернету и книжкам более конкретный вопрос. Если вы студент и вам преподают только «голимый» C, то задайтесь вопросом, а можно сделать свой бложик на C, ну или хотя бы чтобы какой-то текст в браузере появился?


Вообразите себе виртуальную карту «Программирования», она совершенно пуста или на ней есть пара каких-то обозначений. Вы стали изучать окрестности, нанося на карту все новые и новые обозначения. То поднимаясь ввысь, то гуляя по водным просторам или же закапываясь в самые недра. Но так шаг за шагам вы ориентируясь по тем знаниям что у вас уже есть, выбираете куда двинуться дальше.


В программировании есть такое понятие как прикладная область. Это та область для которой вы пишите свои программы. Финансы, биология, документооборот, игры. Так вам может потребоваться понимание каких то вещей, совсем не относящихся к программированию. Но и само программирование настолько обширно, что вы так или иначе специализируетесь в какой-то области. Серверная часть веб приложений, игровая графика, высокочастотный трейдинг. И каждая с таких специализаций требует разных знаний в самом программировании, так как знать абсолютно все, просто не возможно.


Так как все же стать программистом? Очень просто, нужно начать и больше не останавливаться. Даже любой программист должен периодически задаваться вопросом, так как же мне все же стать программистом?


Откуда можно начать:


https://www.codecademy.com/ - очень простое начало.


https://compscicenter.ru/ - заведение из СПб, с серьезной программой, по которой можно сориентироваться в том что вроде должен знать программист. Есть записи лекций.


https://stepic.org – русскоязычные курсы, есть курсы и от товарищей указанных выше.


https://www.coursera.org – множество англоязычных курсов и серий курсов.


Даже книжка C++ за 21 день неплохое начало, если вы не остановитесь на ней.

Показать полностью
8
А как все же стать программистом? Часть 2.
15 Комментариев  

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

Скучная часть, где же про программирование?! Еще будет.

Disclaimer: все ниже написанное, естественно, ИМХО.


Английский язык.


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


Для себя стоит определить три уровня знания английского:

1. Читаю документацию, пишу комментарии в повелительном наклонении.

2. Могу вести рабочую переписку и не стесняюсь общаться с коллегами.

3. Свободное владение.


Коммуникабельность.


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


Будьте открыты к общению и корректны. Да это страшное слово, корректны. Пренебрежение, экспрессивное матерное описание качеств кода, все это только накаляет атмосферу. В нормальном коллективе вы свободно можете признаться что не понимаете или что-то не получается и вам помогут ваши коллеги. В офисе, где каждый сам за себя, а зазнайки будто футболисты из американской молодежной комедии чморят новичков, это просто не возможно.


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


Ваша общительность должна передаваться и вашему коду. Стоит всегда помнить о том, что ваш код будет кто-то читать. Да и вы сами через пару лет вряд ли вспомните в чем тут было дело. Так что все эти советы по стилю кода, читаемым названиям переменных и осмысленных комментариях — совсем не глупость.


Обучаемость.


О да, это реальный навык для программиста. И его же проклятие. Учиться вам придется всю оставшуюся карьеру. Дело может быть даже не в том что вышел какой-то новомодный инструмент, а в том что программирование это поистине необъятная область знаний. И позанимавшись по книжке 1979 года выпуска, вы станете лучше как современный программист. А вы ведь хотите быть лучшим?


Для себя все обучение я разбиваю на три последовательные стадии:

1. Ознакомление — составление «словаря абстракций» и связывание уже известных абстракций.

Быстро за 2 дня прочитать книжку по теме попытаться понять основные места,

- найти «знакомые слова» и подходы.

2. Применение — решение задачи.

- Вы изучаете что-то новое потому что хотели что-то сделать, так сделайте это,

- при необходимости обращаясь к книжке в конкретных места.

- Голая теория неполноценна без практики, а практика без теории.

3. Углубление — тщательная проработка темы.

Дотошное выполнение заданий в книжке, вдумчивый разбор с заглядыванием во все

- закоулки и щели.


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


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


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

И к сожалению стоит сделать вывод что вы никогда не найдете всех знаний в одном месте.


P.S. Этот цикл постов - не гайд из нескольких последовательных пунктов, а попытка объяснить как вообще становятся программистами. И кодеры из предыдущей статьи не ругательное выражение, а ступенька на этом пути.

Показать полностью
10
А как все же стать программистом? Часть 1.
33 Комментария  

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

Disclaimer: все ниже написанное, естественно, ИМХО.


Для начала стоит разобраться чем же орудуют эти самые программисты.


Языками программирования? Да. Средами разработки? Конечно. Тетрадками для записей и белыми досками? Точно.


Но мы все сведем к абстракциям. Мир программирования это вообще волшебная страна кровосмесительного союза различных абстракций, что-то вроде «Игры Престолов».

Наше определение абстракции — это некоторая идея, модель, в которой выражены все нужные нам свойства и отброшено все лишнее.


Как работает компьютер? Есть два различимых состояния, один из которых ноль, а другой единица — это простенькая абстракция. А та высокотехнологичная штука, в экран которой вы сейчас пялитесь — нечто иное как конкретная реализация этой абстракции, и кстати многих других.


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


Кодер vs Программист


Это не общепринятая градация, а способ показать некоторую разницу между уровнем знаний и навыков. Затратив год вы можете найти работу в IT, но вы станете кодером. Другой человек потратив 4 года станет программистом, но в начале своего пути зачастую получает те же деньги. Из-за этого вспыхивают холивары на тему нужно ли вообще программисту образование. Отвечу заранее — нужно, корочка зачастую не обязательна, а вот знания нужны.


И так кто такой кодер? Кодер это человек знающий конкретную реализацию каких-то абстракций. Выучил HTML, CSS, PHP и JavaScript за год и пошел работать. Он знает конкретный инструмент, он может решать конкретные задачи. Чем не работник? Такой многим нужен.


Программист же потратил 4 года, в его резюме написаны те же HTML, CSS, PHP и JavaScript. Но в чем же разница? А в том, что программист изучал (ну мы считаем что он действительно изучал) абстракции лежащие в основе этих инструментов. Он лучше понимает свой инструмент, он лучше понимает решаемые проблемы. Соответственно и качество его работы лучше и способен он на большее. Ну это помимо того, что он знает много умных слов, конечно. Но начальную позицию он может получить такую же как и кодер.


Эта градация в первую очередь нужна самому себе, чтобы понимать на каком уровне развития ты находишься. Твой уровень не зависит от количество потраченного времени, а от качества знаний. Из наших вузов часто выходят замечательные кодеры, потратившие на это 4 и более лет.

Выйдут новые версии PHP, инструменты устареют, роботы покорят человечество, а абстракции будут жить вечно.


P.S. Это небольшое вступление, написанное на пробу. Дальше планирую написать о том какие навыки нужны, что такое предметная область и конечно же ссылки на конкретные материалы.

Показать полностью
-43
Домашние какахи
5 Комментариев  
Домашние какахи курьез, совпадение не думаю

Вот ведь действительно, подумалось мне.



Пожалуйста, войдите в аккаунт или зарегистрируйтесь