Что должен делать программист. Что должен уметь программист, чтобы получить работу в сфере финансов

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

Быть на «ты» с компьютером

Это самый простой и базовый навык, присущий каждому программисту. Он предусматривает живой интерес к компьютерным технологиям, который уже, в свою очередь, порождает те или иные вопросы у будущего специалиста: для начала - как поставить «винду»? Как найти и взломать модную игрушку? А что такое BIOS, хостинг, ядро системы, ООП? – и понеслось...

Затем тебя начинают дергать родственники, друзья, девушка, подружки девушки, мол, постав программу, почисть систему от вирусов, переставь Windows и т. д. Поначалу это даже нравиться: приятно же ощущать себя компетентным в той или иной области. Но потом появляется закономерный вопрос: почему бы не начать на этом зарабатывать? Конечно, брать деньги со знакомых как-то неохота, но вот продать свои знания и энтузиазм какой-то серьезной фирме – вполне реальная затея. Выбираешь тот или иной язык программирования, начинаешь учить и вновь ощущаешь себя полным нубом..

К чему все это? А к тому, что мир информационных технологий – это мир игрушек, с которыми должно хотеться играть. Именно с интереса к этим «игрушкам» все и начинается. Если его нет, нет и программиста.

Английский

Без английского не обойтись. Чтобы выучить язык программирования, продется перелопатить много литературы, видео-уроков и документации. Почти все (99%) первоисточники написаны на английском языке. Если его не знать, то спектр материалов для изучения сузиться в разы. Соответственно скорость изучения языка программирования значительно снизиться.

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

Разговорный уровень, понимание английского на слух – это дополнительные бонусы. Под словосочетанием «знать английский язык» иметься в виду знать так называемый «технический английский язык». То есть нужно понимать специализированные статьи и документацию, а это далеко не то же самое, что «живое» общение с иностранцами.

Математика

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

Есть, конечно, области программирования, где нужно знать специфические формулы, но, во-первых, так далеко не везде, во-вторых, с ними можно ознакомиться по ходу и в этом могут помочь специализированные математические программы. Физика и математика пригодиться особенно в том случае, если вы хотите создавать качественные компьютерные игры.

Общительность

Общительность – одно из ключевых свойств хорошего программиста. Дело в том, что большинство серьезных проектов пишется в команде - это и удобнее, и быстрее. Если хотите работать на более-менее серьезную «контору», с людьми нужно уметь общаться, договариваться, дискутировать и соглашаться. Также нужно будет уметь ладить с начальством, которое иногда будет разбираться в программировании лучше вас, а иногда не будет понимать в этом деле вообще ничего.

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

Гибкий ум

Самого ума (умение оперировать нужными знаниями) мало, нужно чтобы он был гибким. Гибкий ум предусматривает умение учиться (пополнять знания, заменять устаревшую информацию на новую). Есть люди вроде бы умные, но очень консервативные. Они владеют неплохим логическим мышлением, высказываются внятно и последовательно, но вот выучить что-то новое, увы, не могут. А есть наоборот – голова очень пытливая, всем интересуется, все нужно, но в голове каша, то есть не может связать всю накопленную информацию в целостную позицию, структурировать ее.

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

Данный текст появился как ответ на стандартную реакцию "настоящих программистов" в ответ на мои слова что я програмист 1С. "А-а-а, 1с-ник, да какой тыпрограммист, так скриптописатель в лучшем случае. Копаетесь там в своей бухгалтерии и почему-то считаете себя программистами. Настоящий программист знаешь сколько всего должен знать?"

Когда я в заинтересованно спрашиваю что же именно должен знать НАСТОЯЩИЙ ПРОГРАММИСТ обычно получаю в ответ какие-нить частные проблемы именно того прогера, с которым я в эту минуту беседую. Причем выдаваемые чуть ли не за истинную сущность всего программирования как такового. Ну что-то типа -- "Если ты не знаешь как использовать семафоры в Делфи ты не программист". Или -- "если ты не знаешь как устроены хэш-таблицы ты не программист". Мне это надоело, я покопался в интернете и решил собрать в один пост все, что должен знать НАСТОЯЩИЙ ПРОГРАММИСТ по мнению самих НАСТОЯЩИХ ПРОГРАММИСТОВ. Список с разбивкой по разделам знания под катом

МАТЕМАТИКА

Численные методы, дихотомия/метод Ньютона, интер- и экстраполяция, сплайны, метод Гаусса/Якоби/Зейделя, QR и LU-декомпозиция, SVD, МНК, методы Рунге-Кутты, метод Адамса, формулы Ньютона-Котеса, метод Ритца, метод Бубнова-Галеркина, метод конечных разностей/элементов, FFT/STFT, сходимость и устойчивость, l-bfgs и другие квазиньютоновские методы, adagrad, PARAFAC, cassowary, interior point methods, вариационные методы для байесовского вывода, nesterov, автоматическое дифференцирование, alternating least squares, what every computer scientist should know about floating point arithmetics by Goldberg, Nocedal & Wright/Boyd & Vandenberghe

Алгоритмы, Кнут-Грэхем-Паташник/Зорич/Винберг, Spivak/Dummit-Foote, математический анализ, линейная алгебра, комплексный анализ, функциональный анализ, дифференциальная геометрия, теория чисел, дифференциальные уравнения/интегральные уравнения/вариационное исчисление/оптимальное управление, производящие функции, ряды, комбинаторика, теория вероятностей/математическая статистика/случайные процессы/теория массового обслуживания, цепи Маркова, интегральные преобразования (Фурье, Лаплас, Вейвлет), NZQRCHOS, матпакеты (Mathematica, Maple), теория категорий

Теория информации, сжатие, Хаффман, RLE, BWT, LZ, коды коррекции ошибок, сжатие с потерями (изображения, аудио, видео), информационная энтропия, формула Шеннона, сложность Колмогорова, maximum entropy problem, kullback-leibler divergence, elias/shannon-elias encoding

Дискретная математика, K2, теорема Поста, схемы, конечные автоматы (ДКА и НДКА), автомат Калашникова, клеточные автоматы

Криптография, Шнайер/Ященко, Принцип Керкгоффса, симметричная (DES, AES), асимметричная (RSA), качество ГПСЧ, алгоритм Диффи-Хеллмана, эллиптические кривые, хэширование (MD5, SHA, CRCn), DHT, криптостойкость, криптоатаки (атака гроссмейстера), WEP/WPA/WPA2 и атаки на них, цифровая подпись и сертификаты, PKI, HTTPS/SSL, доказательство с нулевым разглашением, пороговая схема, murmurhash/cityhash, DKIM

Квантовые вычисления, алгоритм Шора, квантовая криптография

ОБЩИЕ ОСНОВЫ ПРОГРАММИРОВАНИЯ

Мультитредность, обедающие философы, deadlock/livelock/race condition/starvation, атомарность, lock инструкции процессора, memory model/barrier/ordering, CAS или LL/SC, wait/lock/obstruction-free, ABA problem, написание lock-free контейнеров, spin-lock, TLS/per-thread data, закон Амдала, OpenMP, MPI, map-reduce, critical section/mutex/semaphore/condition variable, WaitForSingleObject/WaitForMultipleObjec ts, green thread/coroutine, pthreads, future/deferred/promise, модель акторов, parameter server, RDD (as seen in sparks), downpour SGD, wait-free, stackful vs stackless

Вычислимость, машина Тьюринга, нормальные алгоритмы Маркова, машина Поста, диофантовы уравнения Матиясевича, лямбда-функции Черча, частично рекурсивные функции Клини, комбинаторное программирование Шейнфинкеля, Brainfuck, эквивалентность тьюринговых трясин, проблема останова и самоприменимости, счетность множества вычислимых функций, RAM-машина, алгоритм Тарского, SAT/SMT-солверы, теория формальных систем, interactive proofs, теорема Левина-Кука, 3SAT, PSPACE = NPSPACE,

Алгоритмы и комбинаторная оптимизация, Кормен/Скиена/Седжвик/Кнут/Ахо-Хопкрофт-У льман/Пападимитриу/Шрайвер-Голдберг/Преп арата-Шеймос/e-maxx.ru, структуры данных, алгоритмы, сложность, символика Ландау, теорема Акра-Баззи, time-space tradeoff, классы сложности, NP-полные задачи, КМП, графы и деревья, потоки в сетях, матрица Кирхгофа, деревья поиска (особенно RB-дерево и B-дерево), occlusion detection, куча, хэш-таблицы и идеальный хэш, сети Петри, алгоритм русского крестьянина, метод Карацубы и матричное умножение Винограда-Штрассена, сортировки, жадные алгоритмы и матроиды, динамическое программирование, линейное программирование, diff-алгоритмы, рандомизированные алгоритмы и алгоритмы нечеткого поиска, псевдослучайные числа, нечеткая логика, gusfield (suffix tree, string alignment), motif search, scanning line, cache oblivious, funnel sorting, VEB-layout, корневая оптимизация, алгоритмы для динамических графов, модели вычисления (RAM-machine/pointer machine/decision trees и т.д.), алгоритмы в иерархиях памяти/стриминговые алгоритмы, time forward processing, range & rank, LSM-trees, buffered a-b-trees, toku trees, персистентные структуры, succint-структуры, lossy-струтуры (bloom/bloomier filter, hash-tables with false positives), locality sensitive hashing, space-time tradeoff в хэш-таблицах, scheduling strategies

Машинное обучение, Тибширани/Bishop, подходы к моделированию AI, переобучение/кроссвалидация, байесовские сети, нейросети, сети Кохонена, Restricted Boltzmann machine, градиентный спуск/hill climbing, стохастическая оптимизация (метод Монте-Карло, метод отжига, генетические алгоритмы, муравьиные алгоритмы), SVM, gradient boosting, кластерный анализ, метод главных компонент, LSH, обучение с подкреплением, MDP, information retrieval/data mining/natural language processing, машинное зрение, Szeliski, OpenCV, image processing, OCR, фильтры Собеля, каскад Хаара, Viola-Jones framework, SURF, введение в психофизиологию зрения, IPython/pandas/scikit-learn, (ME)HMM, CRF, label bias problem, stacked NN, LeToR, factorization machines, autoencoders, RNN/CNN, вместо NLP лучше отдельные задачи (language modelling, co-reference detection, text chunking, POS-tagging, probabilistic parsing, statistical machine translation, misspell correction, question answering, NER, collocation detection, text summarization, speech recognition, fact extraction, sentiment analysis), эффективное вычисление softmax, feature engineering/selection, quality estimation, Manning/Jurafsky/McCallum/Koehn, latent topics (LDA, chineese restaurant, pLSI), parallel coordinates, vowpal wabbit, NLTK, structured learning, EM-алгоритм, contrastive divergence, optimal brain surgery, belief propagation, semi-supervised learning, inductive vs transductive learning, kernel trick, discriminative/generative pairs (as seen by Ng & Jordan), sequence to sequence learning, bagging, анализ социальных графов, рекомендательные системы/collaborative filtering, multimodal learning

ОБЩИЕ ПРИНЦИПЫ НАПИСАНИЯ ПРОГРАММ

Архитектура и стиль кода, Макконнелл/Фаулер/Лебланк/Гамма/Александ реску-Саттер/Буч, защитное программирование, паттерны, SOLID/GRASP/KISS DRY SPOT/YAGNI, UML, OOP (Smalltalk), OOD/OOA, метрики кода, uncle Bob

Методологии разработки, Waterfall/RUP/Agile/Scrum/Kanban/XP, TDD/BDD, CASE

Инструментальные средства разработки, IDE, IntelliSense, отладчики (VS/Olly/WinDbg/kdb/gdb) и трейсеры (strace/ltrace), DWARF debug information format, дизассемблеры и декомпиляторы (IDA/HexRays/Reflector), системы контроля версий (SVN, GIT), merge/branch/trunk, системы именования файлов и бранчей, continuous integration, ant, code coverage, статический анализ (lint, cppcheck), динамический анализ (valgrind, фаззинг), верификация и валидация ПО (Frama-C, RAISE (RSL), Coq), профайлинг, багтрекеры, документирование кода, системы сборки (CMake), пакетные менеджеры (NuGet)

Фреймворки, Qt, moc и метаинформация, концепция слот-сигнал, Саммерфилд-Бланшет/Шлее, PoCo, промышленные библиотеки: GMP, i18n, lapack, fftw, pcre

Проектирование GUI и представление информации, Раскин/Тафти, юзабилити, основы дизайна и типографики, закон Фиттса, основы верстки, LaTeX, алгоритмы визуализации данных (as seen in d3), subpixel rendering

Тестирование, юнит-тесты, функциональное, нагрузочное, интеграционное тестирование, тестирование UI, mocks/stubs/spies, fixture, запахи и паттерны тестов (Osherove/Meszaros)

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Общее представление об языках программирования, грамматики, иерархия Хомского, теорема Майхилла-Нероуда, лемма о накачке и лемма Огдена, алгебра Клини, НДКА → ДКА, алгоритмически неразрешимые задачи в формальных языках, Драгонбук, Фридл, регекспы и их сложность, PCRE, БНФ, Boost.Spirit + Karma + Qi/Ragel, LL, LR/SLR/LALR/GLR, PEG/packrat, yacc/bison/flex/antlr, статический анализ кода, компиляция/декомпиляция/обфускация/деобф ускация, Clang/LLVM/XMLVM/Emscripten, GCCXML, OpenC++, построение виртуальных машин, JiT/AoT/GC, DSL/DSEL, on-stack replacement, type checking/type inference алгоритмы, CYK parser, advanced compiler design and implementation by Muchnick

Язык ассемблера, Зубков/Хайд/Дреппер/Касперски/Фог/Абраш, x86, FPU/MMX/SSEn/AVX, AT&T и Intel-синтаксис, masm32, макросы, стек, куча/менеджеры кучи, соглашения вызова, hex-коды, машинное представление данных, IEEE754, little/big endian, SIMD, аппаратные исключения, прерывания, виртуальная память, реверсинг, срыв стека и кучи, return oriented programming, alphanumeric shellcode, L1/L2/RAM/page fault и их тайминг, язык ассемблера ARM

C++, стандарт, Comeau, 1TBS, Страустрап/D&E/Джосаттис/Вандервуд, Дьюхэрст/Мейерс/Саттер, RAII/copy-and-swap/exception-safety, правило пяти, Александреску/Абрахамс-Гуртовой, type erasure, CRTP, NVI, SFINAE, Koenig lookup, Duff"s device, Boost, Сик-Ламсдейн/Карлссон, TR on C++ performance, тест Степанова, forwarding problem/move semantics, SPECS, GotW, Meyer"s singleton, cppgm

Компиляторы С++, особенности реализации стандарта, ограничения реализации, интринсики, отличия стандартных библиотек (контейнеры, rand), ABI, реализация виртуальных функций, виртуального наследования, исключений, RTTI, switch, указателей на функции и методы; оптимизации, copy elision (RVO, NRVO), sizeof на различных платформах, дефайны компилятора и среды, __declspec, ключи компилятора, empty-base optimization, статическая и динамическая линковка, манглинг, распределенная компиляция, precompiled header, single compilation unit, (strict) aliasing/restrict, inline/_forceinline, volatile, быстрое вычисление математических функций через битхаки, linkers & loaders by Levine

Прикладное программирование, C#/F#, Шилдт/Троелсен/Рихтер, генерики, yield, linq/plinq, рефлексия, AST, WCF, WinForms/WPF/Silverlight, AOP, фреймворки логгирования, .NET assembly, Scala, Хорстманн/Одерски, pattern matching, макросы/квазицитаты

Функциональное программирование, Haskell/Ocaml/Scheme/Alice или Oz, SICP/TaPL/YAHT/Purely Functional Data Structures/Харрисон-Филд, HOF (map/fold/filter), система типов Хиндли-Милнера, монады, тайпклассы, АТД, dependent types, ленивость/энергичность, логическое программирование (Prolog или Mercury), конкурентное программирование (Erlang или Oz)

Веб-программирование и скриптовые языки, Фланаган/Zend PHP5 Certification Course + Study Guide, Apache/nginx, CGI/FastCGI, PHP/Zend Framework/ReactPHP/Zend Engine/Doctrine или Propel/CodeIgniter или Symphony или Yii, Python/Django/Twisted, Ruby/RoR, ASP.NET MV*, JavaScript/jQuery/React/Google Closure/ExtJS/node.js, ООП в JavaScript, HTML5, CSS3/табличная и блочная верстка, RSS, canvas/WebGL, Ajax/WebSockets, вопросы безопасности (XSS, SQL injection, CSRF), highload, C10k problem, SWIG, CDN, shadow DOM, квирки браузеров, real time bidding/trading, anomaly detection, архитектура single page apps, устройство веб-краулеров, web/social graph random walk, asm.js и компиляция в js, v8/spidermonkey internals, PaaS/IaaS, SPDY

БАЗЫ ДАННЫХ

Базы данных/Распределенные системы, Грубер/Дейт, ANSI SQL, T-SQL, ODBC, MySQL/PostgreSQL/MS SQL/BDB/SQLite/Sphinx, хранимые процедуры, триггеры, алгебра Кодда/А, Tutorial D, нормальные формы, оптимизация и выполнение запросов, структуры данных индексов, транзакции и ACID, CAP-теорема Брюера, graph DB, document store, wide column store, key-value storage, теория распределенных систем, CRDT, net split проблема, протоколы консенсуса, теория шардинга/репликации, ORM (C++ ODB), ERD, OLAP, семантическая сеть, triplestore, RDF/Turtle, SPARQL, OWL, Semanticscience Integrated Ontology, reasoner, DBpedia, big table/hbase vs. dynamodb/cassandra/riak, 2/3PC, chubby/zoo keeper, leader election (paxos/raft), hdfs/gfs/glusterfs, deduplication problem, causality detection (vector clock/stamps), R/W quorum, load balancing, устройство индексов поисковых систем, event sourcing, CRDT, дизайн протоколов и принципы коммуникации, с точки зрения эволюции, расширяемости, надежности, дизайн программных интерфейсов (API)

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Операционные системы, Silberschatz/Рихтер/Соломон-Руссинович/Р обачевский/Вахалия/Стивенс/Таненбаум/Lov e/Linux Kernel Internals, менеджер памяти, менеджер кучи и ее устройство (LAL/LFH/slab), менеджер устройств, менеджер процессов, context switch, реальный и защищенный режим, исполнимые файлы (PE/ELF/Mach), объекты ядра, отладочные механизмы (strace/ptrace/dtrace/pydbg, Debug API) и минидампы, bash, сетевой стек и высокопроизводительные сервера, netgraph, CR0, IPC, оконная подсистема, система безопасности: ACE/ACL и права доступа, технологии виртуализации, RTOS (QNX), программирование драйверов, IRQL, IRP, файловые системы, BigTable, NDIS/miniport/FS drivers/filter driver, Mm-, Io-, Ldr-функции, DKOM и руткиты, GDT/IDT/SDT, ядра Windows/Linux/BSD, POSIX, TRIM

Форматы, XML/XSLT/XPath/XMLStarlet/DOM/SAX, RTF/ODF, JSON/BSON/bencode, YAML, JPEG/PNG/WebP, AVI/MPEG/RIFF/WAV/MP3/OGG/WebM, SVG, Unicode, кодировки однобайтные/UTF-8/UTF-16/UCS-2/UTF-32, проблемы длины и сравнения Unicode-строк, base64, markdown

Компонентно-ориентированные модели, Роджерсон/Таварес, COM/OLE/ActiveX/COM+/DCOM RPC, ATL, апартменты, моникеры, MIDL, XPCOM, CORBA, TAO, D-Bus

Сеть, Стивенс, OSI model/Internet model, Ethernet, TCP/IP, TCP window, алгоритм Нейгла, сокеты, Protocol buffers/Thrift/Avro/ASN.1, AMQP, ICMP, роутинг/BGP/OSPF, ARP, атака Митника, syn flood, HTTP/FTP, P2P/DHT, DHCP, SMB/NBNS, IRC/XMPP, POP3/SMTP/ESMTP/IMAP, DNS, WiFi/WiMax/GSM/CDMA/EDGE/Bluetooth/GPS, ACE, Wireshark

АППАРАТНОЕ ОБЕСПЕЧЕНИЕ

Аппаратное обеспечение, Хоровиц-Хилл/Титце-Шенк, полупроводниковая электроника/спинтроника/фотоника, транзистор, триггер, схемотехника, микрокод, технология создания процессоров, logic synthesis, static timing analysis, FPGA, Verilog/VHDL/SystemC, SISAL, Arduino, устройства памяти (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC/CISC, Flynn"s taxonomy (ID), принстонский и гарвардский подход, архитектуры процессоров, архитектуры x86, VID/PID

Процессоры, конвейеризация, hyper-threading, алгоритм Томасуло, спекулятивное исполнение, static/dynamic branch prediction, префетчинг, множественный ассоциативный кэш, кэш-линия/кэш-промах, такты, кольца защиты, память в мультипроцессорных системах (SMP/NUMA), тайминг памяти, intel optimization manuals, performance counters
___________________________________

Ну как, впечатляет?Интересно, есть в мире хоть ОДИН ЧЕЛОВЕК, который реально все это знает?

Привет всем! Меня зовут Константин Ботнарь. Уже почти 8 лет преподаю программирование. А началось все, когда я был аспирантом и читал лекции своим ровесникам в одном из одесских вузов. Теперь преподаю в Компьютерной школе Hillel, веду курс Introduction: введение в программирование. Хочу немного развеять мифы вокруг самой востребованной профессии 21 века и рассказать, кто такие программисты и чем они занимаются.

Выпускники выходят в свободное плавание

Тыжпрограммист, или Что такое особый склад ума

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

Правда ли это? Отчасти. Но успешный программист не всегда обязан быть снобом. Что важно инужно знать программисту:

  • Уметь работать в команде. Независимо от того, с чего начинать: веб-программирование, создание мобильных приложений, верстка и многие другое – это командная работа. Поэтому без этого – никуда.
  • Понимать, что такое приоритет и как правильно его расставлять. Даже в самой престижной компании программистам часто падают задачи в стиле «Сделай сейчас, а это еще вчера нужно было, а вот здесь – быстро и только подправить». Структурирование задач – один из важнейших навыков крутого проггера.
  • Обладать феноменальной усидчивостью. Нет, в офисе от звонка и до звонка сидеть не придётся, а вот проводить много времени за ноутбуком или компьютером – точно. Именно поэтому айтишников и считают нелюдимыми: просто пока все отдыхают, большинство из них предпочитает поработать.
  • Не бояться совершенствоваться и учиться новому. Языки программирования устаревают, нужно учить новые, мобильные приложения создаются на новых платформах, каждый день появляются десятки сервисов. Если хочется стать хорошим программистом – нужно быть гибким и готовым прокачивать свои навыки.
  • Любить свой компьютер. Здесь и добавить больше нечего. Ваша машина – это основной рабочий инструмент.

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

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

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


Будущие программисты

В деталях – истина

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

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

К чему нужно быть готовым, начиная :

  • Даже простые задачи иногда требуют огромного количества времени. Конечно, потом их можно будет решать гораздо быстрее, но поначалу придётся очень напрягаться для поиска решения проблемы.
  • Как программировать – важно не не упасть, а суметь подняться. Любая неудача на пути, слетевший код, пропуск переменной – это просто ступенька к успешному будущему. И даже если сайт лёг, то нельзя его бросить и просто уйти. Нужно поднять свой багаж знаний и опыта и найти ту самую переменную.
  • С чего начать программирование: помнить, что с первого раза вряд ли получится. Ни хороший сайт, ни удобное мобильное приложение, ни даже чат-бот. Ошибки в программировании – это абсолютно нормально, и я бы даже сказал, что полезно. Мои лучшие выпускники тратили на поиски решения и реализацию своих проектов по несколько сотен часов. И писали правильный код. Зато потом для них эта задача была чем-то сравнимым с ребусом в детских книгах.

Алгоритмы – это важно

Всё в программировании основывается на алгоритмах. Если в целом, то есть понятие декомпозиции. Это разбивка больших и сложных целей на маленькие подцели. Или максимальное упрощение поставленной задачи. В результате дробления проблема уже не кажется такой сложной, а её решение как будто лежит на поверхности.

Вот такое отношение к вещам называется алгоритмическим мышлением. Узнали себя? Поздравляем! Тогда путь программиста – как раз для вас! Осталось только добавить необходимых знаний и опыта.

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

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

Программист: ожидание и реальность

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

В сфере IT одиночке выжить не так-то просто. Помните, чем раньше сможете выйти из своей комнаты и продать свой проект, тем быстрее поднимитесь по карьерной лестнице.

В программировании самое сложное – начать, поэтому хочу будущим web-программистам дать простой, но очень значимый и важный совет: не бойтесь новых начинаний.

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

Каждый проект – новая среда, неизученные задачи, обновлённая команда. Можно, конечно, отступить. Но тогда нельзя стать IT-гуру. Окунитесь в этот опыт, почерпните из него что-то новое для себя, наберитесь опыта и знаний.

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

Занимайтесь любимым делом

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

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

Оцените материал

Эта статья - не самоучитель по кодингу. И не пост о том, «какой язык программирования выбрать». Если вы хотите понять, насколько вам интересно изучать мир кода, то более важным вопросом будет: что такое программирование? Как выглядит программирование изнутри? Совместимы ли я и программирование?

Принцип «логика, а не математика»

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

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

Принцип «поймать падающую звезду»

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

Проблема в работе с процессами заключается в том, что если вы ничего не делаете с их результатами, то они просто растворяются. Говоря литературно, «уходят в небытие», никогда не воссоздаются, очень похожи на звёзды, которые сверкают на небе и исчезают. Другими словами, вам надо «поймать их».

Если вы создаёте что-то с помощью процесса, вам надо схватить его, или вы его потеряете. Вот где в игру вступают переменные - как способ «запечатлеть» результаты процесса. Этот принцип сильно помогает понять, что такое программирование, на ранних этапах обучения. И если вы рано его ухватите, то найдёте его очень полезным.

Принцип «словаря»

В программировании есть много «типов». Представляйте типы как строительные блоки языка программирования. Один из типов - это строка, или коллекция символов внутри кавычек. И «яблоко», и «апельсин» - это строки. Их можно, например, объединить и сделать «яблокоапельсин». Числа - это другой тип. Числа можно складывать, вычитать, умножать (помимо остальных действий). Затем идут «массивы» - множество объектов в определённом порядке. [«Первое», «идёт», «перед», «вторым»], например, является массивом с первым элементом «Первое» и последним элементом «вторым».

Но, возможно, одним из самых мощных типов является «хэш», или пара «ключ-значение». Хэш имеет много названий. В Ruby это «hash». В JavaScript он называется «object» (объект). Возможно, лучшее имя ему дал Python: «dictionary» (словарь). Если немного подумать, то словарь это и есть набор ключей (слов), указывающих на свои значения.

Но почему это имеет значение? Оказывается, такая структура часто нужна для хранения данных. Например, таким образом можно упаковать информацию о человеке:

{"first_name" => "Jonathan", "last_name" => "Richards", "nationality" => "British" }

Есть ключи «first_name» (имя), «last_name» (фамилия) и т.д. Это как бы свойства, или атрибуты человека. Можно ещё добавить «hair_colour» (цвет волос), «age» (возраст), или «gender» (пол). И каждый из этих ключей имеет значение. Значительная часть программирования связана с определением форматов структур данных. И пары «ключ-значение» становятся ценнейшим оружием в арсенале, поэтому полезно понять, как они работают, как можно раньше.

Принцип «матрёшек»

В программировании полно объектов, которые находятся внутри объектов внутри других объектов. Программируя, вы часто обнаруживаете, что пытаетесь структурировать данные, и часто эти структуры содержат внутри себя другие структуры.

Добавим в предыдущий пример свойство «siblings» (братья/сёстры):

{"first_name" => "Jonathan", "last_name" => "Richards", "nationality" => "British", "siblings" => { "brothers" => , "sisters" => ["Fiona", "Mary"] } }

Этот принцип вы будете встречать на протяжении всего программирования. В HTML одни элементы включают в себя другие элементы:

Вы так же удивитесь, но перевод алгоритмов с естественного языка на язык программирования это самая обычная работа. Когда программисту дают задание реализовать чёткую логику, придуманную другими. И наоборот, перевод запрограммированной логики на естественный язык тоже нужен. Когда этим «другим» надо описать, как точно работает программа. Да, всё верно, С++, PHP и другие языки программирования можно воспринимать, как особенные иностранные. Математика тоже бывает нужна, но, как правило, при выполнении каких-то узкоспециальных задач, с которыми вы, возможно, ни разу не столкнётесь. Начинать можно и без математической подготовки.

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

1.3 Три этапа на пути к профессии

Теперь, когда вы достаточно утомлены всякой околопрограммистской чепухой и немного удивительными фактами, настало время перейти непосредственно к учёбе. Ваше профессиональное становление должно происходить в три этапа:

1) Пробный период. Вы должны попробовать данный вид деятельности.
Дело в том, что освоение профессии - полгода или даже год учёбы. И вам надо, как можно раньше понять, сможете или нет. Стоит ли вам инвестировать своё время и даже деньги. Или ждёт разочарование.

В этот период необходимо освоить 2-3 технологии настоящего программирования. Но они не должны требовать много времени на освоение. Если справитесь, есть смысл тратить обещанные полгода-год на следующий этап.

2) Самостоятельная учёба.
Если прошли предыдущий этап, можно инвестировать своё время в овладение профессией.

3) Стажировка.
Ваша первая работа и первые деньги.

2 Пробный период

2.1 Что делать?!

На самом деле есть только один способ узнать сможете вы или нет. «Чтобы начать программировать, надо начать программировать. А чтобы начать программировать, надо начать программировать!»

Многие считают программирование сложным занятием, надо много чего знать для работы программистом. И это правда. Если бы это было просто, им не платили бы такие большие зарплаты. Но с другой стороны, есть много книг в свободном доступе. Причём большинство из них качественные. Профессионалы из больших компаний склонны писать огромные книги или статьи, где описывают свой бесценный опыт другим. Странные люди конечно. Вместо получения огромных денег за работу занимаются книгописательством, за которое платят меньше, а то и совсем ничего. Эти «странности» будут рассмотрены позднее. А сейчас надо чётко усвоить, секретов в данной профессии очень немного. Большинство вопросов решаются поиском в интернете. Поэтому несмотря на сложность, программирование одна из самых доступных профессий.

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

Лично моё мнение, это должны быть:

2.1.1 HTML
Очень простой язык программирования. Если быть точнее, это даже не язык программирования, к которым все привыкли. Процедурный и объектно-ориентированный, типа С++, PHP, Ruby и т.п. На нем невозможно написать, «что делать в магазине». Это язык разметки, который вы встретите в любой web-страничке. Инструкции этого языка выглядят примерно так: «Вот у этого параграфа должен быть наклонный шрифт», «Здесь отобразить картинку picture.png», «Размер шрифта данного куска текста 12 точек. Цвет красный».

Это очень полезный язык для начинающих. Даже если вы не собираетесь в web-разработку, эти знания вам пригодятся. Ориентировочное время освоения, 2-5 дней. При этом, необязательно запоминать обширные справочные данные. Достаточно научиться пользоваться этими самыми справочниками. Среди программистов, HTML не считается чем-то серьёзным и сложным. А вот незнание основ HTML, то в чём вы можете признаться только самым близким людям. Работодатели и коллеги будут вас воспринимать, как умственно-отсталого.

По мере изучения HTML вы будете постоянно сталкиваться с отсылками к технологии CSS. Изучение не обязательно на данном этапе. Но если увлечётесь СSS, эти знания не будут лишними.

2.1.2 JavaScript

Это уже «настоящий» язык программирования. Его изучение тесно связано с HTML. Вот тут вас ждут первые настоящие сложности. Хотя по языку огромное множество учебников, видеоуроков и всевозможных сайтов, где все разжёвано до самых мелких подробностей. Это будет реальным испытанием.

Наверняка кому-то не терпится начать изучать С, Python и даже Haskell. Но даже если вы собрались стать системным программистом. Скорее всего, рано или поздно столкнётесь с HTML и JS.

Одна из причин выбора JS как первого языка программирования, его применимость в разных областях. Начиная с логики web-страничек на стороне клиента. Кончая JS-подобным языком QML, куда нас тянут за уши разработчики фреймворка Qt.

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

Любой учебник содержит упражнения. И на начальном этапе вы должны делать эти упражнения. Чем больше, тем лучше!

Однако, есть две небольшие категории людей, которым можно заменить JS на что-то другое:

1) Те, кто имеет хороших наставников по другим технологиям программирования.
К примеру, брат\сват, работающий системным программистом С. И он готов вам помогать. В этом случае С может быть предпочтительней. Но насколько знаю, около 30% программистов, WEB-программисты. Так что с большой вероятностью JS будет правильным выбором.

2) Люди, которым какой-то другой язык нужен, прямо сейчас для работы. Системным администраторам, как правило, SQL и bash.

В случае SQL я бы не стал обольщаться. Это тоже «ненастоящий» язык. Сложность между HTML и JS. Его скорее всего, придётся учить в любом случае всем. Но со временем я бы советовал, всё равно попробовать что-то типа JS, поддерживающее процедурное и ООП парадигмы. Плюс в изучении SQL всё-таки есть. Если вы его не осилите, смысла продолжать нет.

А вот с bash всё по другому. Слышал, JS позволяет заменять bash через модуль в node.js. Так что, если надо написать скрипты с нуля, JS будет поинтереснее. Если исправлять написанное до вас, тогда другого выбора нет. Так же, как и с SQL, JS останется у вас на очереди.

2.2 Учебные пособия

Очень важный вопрос, какие учебные пособия использовать. Здесь перечислены варианты в порядке , которoм должны их проходить.
  1. Видеоуроки. Их стало очень много на любые темы. Youtube обязательно выдаст плейлисты по любым популярным технологиям. Даже на русском. Там всё наглядно, и начинать ваять свои первые «Hello, world!» надо именно с них. Недостаток только один. Они могут не покрывать всех глубин изучаемого языка. Но вам хватит проблем и без этого.
  2. Мультимедийные учебники. Скорее всего, это коллекции видеоуроков плюс ещё чего-то. Очень часто продаются за деньги.
  3. Книги. Самые тяжёлые для восприятия. Они как раз покрывают больше тонкостей различных технологий. Оставьте на потом. Когда исчерпаете возможности предыдущих вариантов.
Но только пожалуйста, здесь и далее. Не надо покупать никакие курсы и платить за чудо-учебники. Все «чудеса» уже давно лежат, максимум на торрентах. По моему мнению, запрещённый в России rutrracker, содержит самое лучшее собрание мультимедийных учебников и книг.

2.3 Решение технических проблем

Проявив силу воли и терпения, вы героически начали изучение предмета. И перед вами стали вставать всевозможные технические проблемы. Вы можете всё делать по инструкции. Но ваши примеры могут не работать. Хотя бы потому, что инструкции могут быть написаны для предыдущих версий программных инструментов. Самый сложный шаг может быть с первым запуском исходного кода, который вы просто переписали из учебного пособия.

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

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

Вам кажется, подробное описание использования кавычек с арифметическими операциями - какой-то сумасшедший бред, которым вы не будете никогда пользоваться? Вы может быть и нет. А вот автор считает это простым. Поэтому далее в учебнике, сложение символов с кавычками и без, будет встречаться повсюду. Но даже, если вы решите, что лучше взять учебник по другому языку программирования, на который вы возлагаете большие надежды. Он тоже будет мучать вас строками типа "5" + 3. Причём, с теми же «дурацкими» многословными объяснениями.

Неразрешимые проблемы, это часть жизни любого программиста. И как бы вы прилежно всё не делали, никуда от них не денетесь. Лично я, даже не смотря на 5 лет стажа, также смотрю в книги о чём-то малопонятном и сложном. И также иногда думаю: «Ваще ерунда какая-то. Как же я буду это решать?!» И абсолютно так же, как и у вас. У меня многое зависит от решения проблем, кажущихся совсем тупиковыми.

Если вы имеете проблемы, с которыми можно обратиться на форум или тематическую группу соцсети, то с моими проблемами, это бесполезно.

На самом деле, есть особый алгоритм для их решения:

1) Надо очень хорошо подумать над причинами. Анализ сообщений компилятора, среды выполнения или интерпретатора(JavaScript), связанные с ошибкой. Вы должны очень хорошо понимать, что вам пишет компьютер о проблеме. Если не понимаете, ищите в интернете по тексту или коду ошибки. Очень часто объяснения находятся, но на английском. Даже после перевода мало что можно понять. Но надо очень сильно стараться. На самом деле это не просто ситуация, где вы решаете конкретную проблему. Это ситуация, где вы получаете новый опыт. Не менее важный, чем знания из учебника. Наряду с этим, проводится анализ потенциально проблемного кода. Если вы переписали или скопировали код откуда то, надо досконально в нём разобраться.
Если за полтора-два часа вы, казалось бы, всё исследовали и поняли. Но так не нашли решение. Значит надо оставить проблему до завтра. Даже если есть ещё идеи.

2) Займитесь чем нибудь другим, что не зависит от вашей проблемы и получается. Можно даже продолжить изучать ваше текущее учебное пособие. Вы удивитесь, но со временем придут идеи, как решить вопрос. Если они не совсем ясные. Бросаться сразу на решение, не рекомендуется. Лучше записать и оставить на завтра.

3) На следующий или любой другой день. Пробуем все новые идеи, для решения проблемы. Повторяем первый этап.

4) Если всё по прежнему плохо, готовим вопрос наставнику или на форум. Вам надо чётко понять, что вы хотели сделать. И что представляет из себя ваш код. Просьбы разобраться за вас в коде, который вы даже не удосужились хорошо изучить, говорят о полном неуважении.

Как правило, этого вполне достаточно для решения любых проблем.

2.4 Работа с наставниками

Небольшой свод правил по работе с различными опытными специалистами, наставниками, менторами и т.п.
  • Прежде чем спрашивать, надо попытаться найти решение самому.
  • Спрашивать старайтесь только то, что не описано в книгах, документации и интернете. В противном случае, вас пошлют туда.
  • Если вас куда-то послали, туда надо сходить. Иначе наставник пойдёт туда сам и найдёт решение. Это очень испортит его мнение о вас.
  • Что бы наставник не стоял у вашего стола часами и не смотрел за каждым вашим шагом, надо группировать вопросы. Задавать их «оптом», множество накопившихся за один раз. А не по мере возникновения.
  • Вопросы лучше задавать тогда, когда ваше движение вперед заблокировано. Если есть ещё чего делать кроме, делайте. Оно тоже может породить вопросы. Которые лучше задавать вместе.

3 Самостоятельная учёба

Вставай на твоё место! Книги уже лежат перед твоими товарищами. Возьми своё платье и позаботься о своих сандалиях. Читай прилежно книгу. Не проводи дня праздно, иначе горе твоему телу! Пиши твоей рукой, читай твоим ртом, спрашивай совета того, кто знает больше тебя.

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

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

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

Я свяжу твои ноги, если ты будешь бродить по улицам, и ты будешь избит гиппопотамовой плетью!
Наставления писцу. Древний Египет

После освоения основ JavaScript. Вы уже хорошо представляете себе, что такое писать код программ.

И вы готовы потратить полгода-год на овладение профессией. И что немаловажно, для вас это дело времени.

3.1 Что изучать?

Всех людей, стремящихся овладеть какой либо профессией, можно поделить на две категории: любителей и профессионалов.

Любители , люди которым нравится данное занятие. И они готовы делать его даже бесплатно. Жертвуя временем, которое можно потратить на развлечения, отдых и пр. Раз уж вы попробовали, то отлично понимаете, нравится вам программирование или нет. У любителей есть одно очень хорошее качество. Их не надо мотивировать. Они будут много, добросовестно работать и с удовольствием получать новые знания. Потом, они с таким же удовольствием будут делиться этими знаниями с коллегами и друзьями. Но самые любители из любителей пишут статьи и даже целые книги о своём опыте.

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

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

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

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

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

Самые высокооплачиваемые специалисты - это любители с опытом. Они же получают наибольшее удовольствие от работы и жизни. Поэтому на данном этапе надо определиться, что нравится больше всего.

Технология (язык программирования, который будете изучать) обязана быть коммерчески востребованной. Из ТОП 10 популярных языков. Иначе, не сможете получать деньги за свой труд. Это значит, программистом вам не стать. Придётся отдельно зарабатывать деньги, отдельно программировать. Что, естественно, невозможно.

У вас впереди ещё стажировка. И на стажировку берут охотно только по дефицитным специальностям. Особенно удалённо. Поэтому думайте\решайте, чему хотите посвятить свою жизнь. Что будете изучать на данном этапе. Можно продолжить и JavaScript. Можно попробовать, что-нибудь другое. Никто не мешает передумать на середине пути. Вы уже испытали себя и есть определённое поле для экспериментов.

Единственное исключение я бы сделал для С++. Это сложный язык. Он, наверное, требует в два раза больше времени на освоение. Чем просто С или JS. При этом зарплата будет больше максимум на 20%. С++ это язык любителей С++.

Если вам не по нраву JS, и вы чувствуете в себе описанного выше «профессионала», наверное, лучшим выбором будет Java. Как-то раз я не смог даже запустить программу, написанную на этом языке(jar архив). Но, с другой стороны, разработчики Java в связке с Oracle(PL\SQL) из больших корпораций, возможно, самые высокооплачиваемые разработчики в IT. При том, что это технологии средней сложности. (Предполагаю, в мире Java платят уже только за умение запускать jar файлы.)

Ещё есть замечательный язык Python. Он будет очень полезен всевозможным математикам, статистикам, т.к. открывает им дверь в мир Data Science. С другой стороны, это язык web-разработки для всех остальных.

Учёба на данном этапе нацелена на повышение своей квалификации до максимума. Фактически, вы будете повышать рыночную цену своего труда. Будте уверены, всё, что потеряете из-за программирования на данном этапе, вернётся многократно.

Самостоятельная учёба имеет преимущество перед стажировкой. Можно получать более фундаментальные знания. На самом деле, большинство программистов профессионалы. Они выучили немного. Попали на работу. И эксплуатируют свои немногие знания. Большинство того, что они читают, небольшие статейки на тему, как состряпать чего-то быстро. Либо заткнуть какую-либо проблему. Им очень не хватает фундаментальных знаний. Вы удивитесь, но не всё можно
«нагуглить». Что-то надо знать и уметь изначально. Хотя бы потому, что придётся разбираться с тем, что вы «нагуглили». Код, который вы найдёте, может написать очень хороший специалист. При недостатке фундаментальных знаний вы просто не разберётесь в нём.

Вы должны выбрать для себя большую, фундаментальную книгу по какому-либо языку программирования. И изучить её до конца. Вместе со всеми учебными заданиями.

Выполнение учебных задач на данном этапе, тяжёлое, тоскливое занятие! Вам будет скучно, неинтересно, захочется всё бросить. Большинство так и делают. Мотивируйте себя, придумывайте интересные задачи, продолжайте учиться. И вы не будете этим самым большинством.

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

Английский язык
Как известно, программисты такой народ, который умеет читать по английски, но не умеет говорить. Это тот язык, на котором вы будете искать решение своих проблем, общаться с заказчиками. Разговорный английский сильно расширяет круг поиска работы. Это очень хорошо сказывается на зарплате. Хотя, надо признать, времени на него можно потратить столько же, сколько и на язык программирования.

Технический английский, изучить проще. Просто переводите материалы нужные вам, в различных переводчиках. Запоминайте незнакомые слова.

SQL
В большинстве случаев эта технология вам понадобится рано или поздно. Необязательно изучать надстройки типа PL\SQL(кроме изучения Java). Но освоить создание таблиц, джойны и юнионы очень желательно. Самым полезным, пожалуй, будет изучение на примере PostgreSQL.

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

Освоить «слепой» десятипальцевый метод печати на клавиатуре
Печатать предстоит очень много. Поэтому освойте обязательно. В сети достаточно бесплатных онлайн-тренажёров. Можете попробовать освоить его перед первым, «испытательным» этапом. Если у вас не хватит терпения на даже на это, двигаться дальше нет никакого смысла.

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

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

3.2 Общепринятые способы получения знаний

ВУЗ
Могу очень много поведать про высшее образование. Но это не имеет никакого практического значения. Если коротко. Лучше быть стажёром через год самостоятельной учёбы, чем через четыре года посещения ВУЗа. Те, кто начнёт заниматься по моим рекомендациям сейчас, через 4 года будут проводить технические тесты при приёме на работу тех, кто сейчас поступает в ВУЗы.

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

Курсы и школы, проводимые большими компаниями для своих будущих сотрудников
Самый известный случай, пожалуй, «Школа анализа данных» Яндекса.

Тут вас будут учить реально дорогие специалисты. И они будут делать это для своих внутренних нужд. Как правило, такие курсы имеют какие-то требования к кандидатам. Яндекс требовал математическую подготовку. EPAM требовал знание основ программирования. Просто так туда не попасть. Но если есть возможность посещать эти курсы, стремиться туда стоит однозначно! Даже если вы пробудете в «рабстве» у этих компаний за какие-то 400-500$ в месяц целый год. Большой плюс таких курсов. Там не требуют никакого образования.

3.3 Стратегия обучения

Большинство учащихся рассчитывает выучить программирование, просто учась. Типа сел за учебник незнающим предмет, а закончил его учить и стал всё понимать. Весь процесс начинающим представляется линейным. Двигаясь от главы к главе, проходя учебные задания, человек набирается знаний. Других моделей люди не представляют. Потому что никогда не делали сложных и долгих проектов. А на самом деле всё не так просто. Любой программист знает, в ходе выполнения проекта неизбежно открываются новые детали, которые мешают или наоборот помогают в его реализации. Как правило, чем больше проект, тем меньше он походит на то, что задумывалось вначале.

Простой пример. Вы заказали себе костюм в ателье. Оговорили все детали. Через неделю звонит мастер с известием, оговоренная форма швов очень плохо смотрится на костюме, надо менять. Потом выясняется, надо менять часть материала. Нужного нет. Вы меняете и меняете. В конце концов получаете примерно 2/3 от того, что задумали изначально. В случае с разработкой программного обеспечения. В проекте делового костюма может получится купальник. Причем за цену костюма. Если думаете это невероятно, cпросите потом толковых менеджеров проектов. А пока вам надо усвоить одно, в проекте вашей учёбы будет много неожиданного. И вы должны уметь работать с этими неожиданностями.

Если не углубляться в дебри управления проектами, вы должны развиваться в IT не линейно, как описано вначале. А «по спирали». Выглядит это примерно так. Если вы не знаете компьютер хорошо. Не надо загадывать, что через год будете программистом С++ или PHP. Сначала изучаете компьютер. Вам открываются новые возможности и препятствия. Например, стали больше понимать что хотите делать в итоге, сайты или десктопные приложения. Потом, на этапе пробного периода, попробуете программировать для web (html, js). Вы узнаете о программировании ещё больше. После пробного периода, можно уже загадывать своё основное направление. Какой язык будете изучать. Кто то в самом начале пути может не подозревал о системном программировании. Что есть отдельное направление, где разработчики пишут невидимые обычному пользователю программы. И возможно для вас это будет интереснее чем то, о чём мечтали вначале.

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

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

Кроме этого, «менеджерские» качества очень пригодятся тем, кто считает себя «тупым». В IT очень легко быть умным и очень тяжко наоборот. Умный может запросто взять учебник, прочесть и тут же сделать что-то полезное. Тупые возьмут тот же учебник прочитают и ничего не поймут. Таким надо разбивать учебный материал на части и больше тренироваться (писать код) на основе этих частей. Можно разбить материал на такие части, чтобы дошло до кого угодно. Для тех, кто умеет планировать свой учебный процесс и решать «неразрешимые проблемы»(2.3) нет непреодолимых препятствий. Вы осилите абсолютно всё, вне зависимости от интеллекта. Пусть это займёт значительно больше времени. Но вам гораздо важнее иметь целостные и протестированные знания\опыт, чем скорость их приобретения.

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

3.4 Когда искать работу

Очень сложно сказать, когда надо искать свою первую работу по данной специальности. Фактически, вы можете начать поиски работы сразу после первого этапа. Подозреваю, многие так и сделают. Если вам до 23 - 25-ти лет и вы живёте там, где хорошо развита отрасль разработки ПО, у вас это получится. Может вы не станете хорошим специалистом. Но на жизнь заработаете точно.

С другой стороны. Есть люди живущие там, где разработкой ПО не занимается никто. И есть люди которым далеко за 25. Такие должны дольше учиться. Чтобы из низкоквалифицированных превратиться в высококвалифицированных. Ради получения в свои ряды высококвалифицированных программистов работодатель готов на многое. Вам могут предложить помощь в релокации. Или даже удалённую работу. Возраст за 30 или 40 лет, не будет иметь большого значения. Главное, показать свой высокий наработанный уровень.

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

У раннего поиска есть большой минус. После собеседования работодатель будет иметь о вас какое-то мнение. Которое не захочется менять со временем, если вы когда-то показали низкий уровень знаний. Через полгода, когда будете знать гораздо больше, ваше резюме, возможно, даже не будут рассматривать. Потому что мнение о вас останется прежним. Остаётся только надеяться, что про первое собеседование со временем забудут. Но это минимум полгода. Может так быть, что работодатель ведёт базу данных кандидатов. Чтобы не собеседовать их дважды. В этом случае всё будет очень печально.

3.5 «Что мне нужно знать, чтобы взяли Junior-ом?»

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

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

Ещё есть фактор возраста кандидата. Который немного снижает вашу привлекательность. Чем больше возраст, тем больше снижение. Есть фактор наличия хорошего портфолио, который повышает. Опыт, рекомендации и многое другое.

Вы можете много стоить, как программист C++, но очень немного, как программист PHP.
Самое «халявное», фактор вашей известности работодателям. Когда вы известны большему количеству работодателей. Больше шансов, что вас куда-то возьмут.

«Терпенье и труд всё перетрут!» Непрерывное самообразование - ваша гарантия получения работы!

4 Первая работа стажёром

4.1 Как искать первую работу?

4.1.1 Портфолио

Для начала написать портфолио. Это должна быть небольшая программа или скрипт для сайта, которая делает работу, похожую на полезную. Назначение должно быть понятно вашему потенциальному работодателю. Например, адресная книга. Если вы сделаете калькулятор для расчёта траекторий полёта спутников Земли, будет конечно круто. Но ваш будущий работодатель навряд ли в теме. Поэтому не сможет оценить результат. Желательно, чтобы программа как-то хранила настройки и данные пользователя. Должен быть какой-то небольшой и целостный кусок кода. Если вы, допустим, пришлёте свой патч к какому-то свободному проекту, работодателю, возможно, будет лень вникать в исходный код всего проекта. И оценивать, что вы там поменяли в этом контексте. Хорошо, если приложение будет пользоваться SQL базой данных, там где это имеет смысл.

И самое важное, конечно. Как оно будет написано. Это должен быть хорошо форматированный и структурированный код. Будте готовы, работодатель возьмёт строку из этого кода и забьёт в поисковик.

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

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

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

Поверьте, создание портфолио и code review(проверка кода) более опытными коллегами добавит +30% к вашему опыту. Так же позволяет адекватно оценить, вашу текущую квалификацию. Ваш код, конечно, не будет идеальным. Приготовьтесь, там будут находить ошибки(бесплатно!) Это ещё полбеды. Но вот когда вы не знаете почему написали код вот так, а не по другому, настоящая беда. Значит это только то, что код писали не вы! В этом случае отфутболят с пожеланием придти через полгода со своим кодом.

4.1.2 Резюме

Вообще, по резюме можно многое сказать о человеке. Например, плохоструктурированное резюме. Скорее всего напишет разработчик, не особенно заботящийся о структуре исходного кода.
Скопированный из сети раздел, например, «Профессиональные качества». Говорит о том, что кандидат склонен приврать. Отсутствие достижений, которые не вспоминают даже на собеседовании, говорит, что человек «профессионал». И ещё много чего.

Как-то раз была забавная история. Взялся раскритиковать резюме одного коллеги. Выводы были неутешительными. Говорю: «У тебя такое плохое резюме, что я бы тебя взял на работу! Специалист ты хороший. Но вот со твоим резюме хорошей работы тебе не найти. Поэтому тебя можно будет держать на маленькой зарплате. И ты никуда не денешься!»

Чтобы такого не было. Резюме тоже желательно дать почитать специалистам HR и программистам на оценку.

Естественно, в резюме не надо врать или приводить сомнительные факты. Его будут очень внимательно читать люди с большим жизненным опытом. Любые попытки скрыть что-то или приукрасить будут расцениваться крайне негативно.

Лучше иметь скромное резюме. Но быть уверенным, что ответите за любое слово в нём.
Если вы уже приобрели какой-то опыт работы и вам есть чем похвастаться. Можете добавить раздел «Портфолио», в самом конце. Подробно описать проекты, в которых участвовали. Интересные технические решения, достижения(подробно). Хоть 10 страниц. Но именно в конце.
Обязательно укажите, что готовы к релокации(переезду) и командировкам.
Также вам поможет заполненный профиль в LinkedIn, HeadHunter и других сайтах поиска работы.

4.1.3 Поиск работы

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

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

Сам поиск работы занимает от месяца до двух. Обычно, если вы откликаетесь на вакансию, с вами связываются через 2-3 дня. Потом, в течение недели собеседование и\или тестовое задание. И далее, в течение месяца работодатель будет думать над результатами. Прямые отказы, обычно, не присылают. Про вас просто забывают и всё. Так что приготовьтесь к множеству интервью, после которых вы забудете о них. Не надо возлагать надежды ни на какие варианты. Прошли собеседование и погружайтесь обратно в изучение программирования.

4.1.4 «Карма» программиста

Есть один очень любопытный момент при поиске работы. Предположим, вы изучали JavaScript. Добросовестно учили и изучили. Потом ищете работу программистом JavaScript. И вам внезапно предлагают стать, к примеру, системным программистом. Работодатель может сказать, ваш JavaScript хорош. Но вакансии стажёров у него только для системных программистов С. Поэтому можете пойти на стажёра С.

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

4.1.5 Собеседование

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

Если собеседование заочное, тут всё просто. Вам понадобиться хорошая связь, интернет и телефонная. И полтора-два часа времени, когда никто не будет мешать. Если тишина и хороший интернет у вас дома невозможен. Договоритесь с друзьями, что они дадут вам свою комнату с компьютером или квартиру на время собеседования. Видеосвязи обычно не требуется. Скорее всего понадобиться Skype и TeamViewer. Тяжёлые среды разработки, компиляторы, редакторы обычно не нужны. Простого редактора кода, типа Sublime или Notepad++ хватит. Работодатель сам напишет, что нужно иметь для собеседования.

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

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

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

Обычно, размер зарплаты у стажёра, с некоторым багажом знаний по теме, это размер зарплаты обычного офисного хомячка в том же городе. Но если предложили меньше, мой совет, соглашаться всё равно. Допустим работаете сисадмином. Получаете 500$. Думаю, 500$ для сисадмина в средней полосе России потолок. И вот вам предлагают должность программиста (фактически стажёра) за 300$. Если для вас это «отстой». Даже не начинайте ничего изучать. Закройте эту статью. И забудьте о программировании как о будущей профессии.

Ваша первая зарплата разработчика должна быть достаточной чтобы выжить. Дело в том, что вместе с 300$ будете получать опыт и знания на 1000$. Получите опыт коллективной разработки. Вашу работу будут оценивать более опытные коллеги. Получите безграничный доступ к их опыту. Скорее всего ваше портфолио будет прирастать реальными проектами. Всё это сделает вас настоящим и востребованным специалистом. Если не будете лениться и воспользуетесь всем этим. Уже через полгода, догоните свои 500$. И это будет только начало вашей карьеры.

Конечно, может так случиться, «Опыт и знания на 1000$» не получите. В этом случае, просто ищите другую работу.

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

Собеседование, это как первое свидание с девушкой. Всё всегда вежливо, культурно и хорошо. Только вот следующее может не состоятся.

4.2 Стажировка

Задача стажировки отшлифовать полученные знания.

4.2.1 Фриланс

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

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

Не надо возлагать больших надежд. Просто попробуйте найти заказы в конце самостоятельного обучения. Будет здорово, если у вас получится. Но не надо считать, что прошли стажировку и стали настоящим программистом. Это хорошее занятие, только когда вас ещё не берут серьёзные компании. Либо вы там уже отработали 3-5 лет.

4.2.2 Компании

Как то раз слышал про один экономический закон. Чем больше объединение работников, тем больший доход это объединение получает на каждого работника. Соответственно, в больших фирмах зарплаты у работников обычно выше. Чем у отдельных «фрилансеров». По крайней мере в IT. Именно известные гиганты индустрии платят самые топовые зарплаты и скупают лучшие умы. Поэтому «дядю», собирающего специалистов в кучку и дающего работу, надо любить. Потому что вместе можно заработать гораздо больше, чем по отдельности.

А раз так. Вам необходимо научиться работать в команде. Использовать коллективные средства разработки. Коллеги будут делиться с вами опытом, помогать исправлять ошибки. Вы сами удивитесь, как много нового есть в профессии, с чем не сталкивались ранее.

Как говорилось ранее, большинство людей «профессионалы». Попав на свою первую работу, они «успокоятся». И их стратегией будет «выживание». Они будут осваивать только знания, необходимые здесь и сейчас. Допустим, надо составлять SQL запросы для кода. Они быстро посмотрят в инете, как сделать запрос под конкретную задачу. И напишут код на этой основе. Потом код попадает на «сode review» к опытному коллеге. Там выясниться, что вместо двух запросов и кучки кода, можно написать один запрос, но с «джойнами». И вот стажёр лезет в инет. Читает там кусок какого-нибудь материала о «джойнах». Переделывает код. Так каждый день. Таким образом большинство стажёров накапливает знания.

Правильно было бы после 3-4 подобных вопросов, связанных с базой данных, взять руководство по этой СУБД и изучить полностью. Этим обычно заняты только «любители». Которым становиться любопытно, что кроме «джойнов», там ещё есть.

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

Стажировка плавно перетекает в обычную работу. Сложно выделить тот момент, когда вы можете считать себя полноценным разработчиком. Наверное когда на ваши вопросы коллегам, кончаются простые ответы. И вы понимаете, большинство проблем придётся решать самим. Обычно этот период полгода. Если хорошо потрудились на предыдущем этапе. Если же поторопились, устроились, дочитав книгу по основному языку наполовину. Значит продолжайте освоение книги и дополнительных технологий.

После стажировки вы вольны делать всё, что угодно. Фрилансить. Делать самостоятельные проекты и прочее. Но мой вам совет. Иногда почитывать связанную с вашей работой литературу. Для повышения квалификации. Если раньше вы читали, как вообще писать код. То сейчас вам можно прочитать, как это делать очень хорошо и правильно. Будьте уверены, вы всегда будете видеть новые горизонты профессиональной подготовки. Не ленитесь! Особенно, если хотите большую зарплату.

5 Заключение

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

Теги:

Добавить метки

Комментарии 179