Программист. С чего начать?

Здравствуйте, мне 17 лет. Только закончил школу и планировал поступать на программиста, но из-за Covid-19 не сложилось, и я решил самообучаться.

С 13 лет активно изучал Pascal(У меня был учитель - наставник, который таскал меня на конкурсы, олимпиады и тд.) и так на протяжении 4 лет изучал только алгоритмы, работы с более сложными языками как таковой не было. Сейчас активно начал изучать C#, после планирую выучить JS. Хотел бы конкретно узнать, что мне следует знать для дальнейшего развития, что бы можно не только создать приложение, а понимать принцип его работы на базовых уровнях.

0
30 комментариев
Написать комментарий...
Сергей Пеленев

C# - привязка к биллу гейтсу, зачем оно нужно. Конечно можно заставить его работать в юинксах, но зачем...

Я бы посоветовал изучать C++ и JS.
На двух этих вещах можно запилить любой максимально хороший, экономный и быстрый веб-проект (C++ - сервер, JS - клиент).
C++ ещё по причине того, что он вобрал всю историю развития ВООБЩЕ ВСЕГО, что есть в языках программирования, на нём можно писать в любой парадигме - процедурной, функциональной, с ООП, без ООП, с ручным управлением памятью, автоматическим, с убощиками мусора, без них - крайне много свободы. Плюс язык активно развивается и каждые 3 года выходит новый стандарт с кучей ништяков. Современный код на С++ краток и не может упасть. После этого любой другой язык будет изучаем за полдня, а кроме того хорошее понимание как работает компутер, ОС, и прочие аллокаторы.

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

Основные языки современности и будущего: C++, JS, Python, Go. На них одних щас пишется почти всё известное, что вы замечали в жизни в настоящее время. Ещё надо знать SQL, как универсальный язык взять/положить любые данные и какой-нибудь key-value способ. Document-oriented mongoDB и прочее такое скоро подохнет как недо-SQL и недо-keyvalue.

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

Ответить
Развернуть ветку
Konstantin Safonov
Конечно можно заставить его работать в юинксах

`# apt install dotnet-sdk-3.1`. 

но зачем...

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

Современный код на С++ краток и не может упасть

До тех пор, как не вызовет легаси-код.

Ну есть ещё специфические упоротые платформы - андроид, иос - там всякие котлины и свифты,

Либо продолжать писать на C# и просто выставить нужный таргет для сборки.

Ответить
Развернуть ветку
Гала Перидоловна
До тех пор, как не вызовет легаси-код.

Для этого есть фаззинг, memory, address, thread санитайзеры. При наличии тестов и запуске этих тестов с санитайзерами риск проблем очень сильно снижается.

Либо продолжать писать на C# и просто выставить нужный таргет для сборки.

Лучше Java. У MS открыт только .Net Core.

Ответить
Развернуть ветку
Konstantin Safonov
Для этого есть фаззинг, memory, address, thread санитайзеры. 

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

MS открыт только .Net Core.

Нет. Основной фреймворк под MIT с 2014, язык под стандартом ECMA, компилятор тоже, основные библиотеки — Apache или MIT.

Лучше Java.

* Которая теперь стоит денег, а Open JDK, которая _почти_ такая же, не признаётся правильной средой выполнения кучей софта по религиозным причинам.
* На iOS, AFAIK, не запустится и биндингов нет, а .NET работает как с Xamarin Forms, так и с нативным UI.

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

Вы хотя бы понимаете о чем пишите? Рейсы у вас рантайм тоже сам разруливает? Фаззинг в общем-то полезная вещь для всех языков, т.к. проезды по памяти могут быть в самом компилятора/интерпретаторе.

Нет. Основной фреймворк под MIT с 2014, язык под стандартом ECMA, компилятор тоже, основные библиотеки — Apache или MIT.

Это и называется .Net Core. CoreCRL и CoreFX и есть то, о чем вы говорите.

* Которая теперь стоит денег, а Open JDK, которая _почти_ такая же, не признаётся правильной средой выполнения кучей софта по религиозным причинам.

OracleJDK бесплатная, платные LTS релизы. OpenJDK и есть OracleJDK за исключением некоторых компонентов, которые нужды энтерпрайзу. Spring отлично работает и без них. О каких религиозных причинах идет речь?

* На iOS, AFAIK, не запустится и биндингов нет, а .NET работает как с Xamarin Forms, так и с нативным UI.

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

Ответить
Развернуть ветку
Konstantin Safonov
платного Xamarin.

Xamarin бесплатный уже года четыре, с тех пор, как их купила Microsoft.

О каких религиозных причинах идет речь?

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

Это и называется .Net Core.

Нет. CoreCLR и CoreFx, около года назад объединённые в единый репозиторий( https://github.com/dotnet/runtime/ ) — вот .NET Core.

Библиотеки, например, EF(как Core, так 6.x ветка) или веб-фреймворк ASP.NET, не являются частью ни .net, ни .net core, но открыты на тех же условиях:
https://github.com/dotnet/efcore — EF
https://github.com/dotnet/aspnetcore — ASP.NET Core

Base Class Library дотнета(именно оригинального, версии 4.8, который windows-only) открыта под MIT и лежит здесь: https://github.com/microsoft/referencesource

Ответить
Развернуть ветку
Гала Перидоловна
Xamarin бесплатный уже года четыре, с тех пор, как их купила Microsoft.

Ну удачи, попробуйте коммерческий проект собрать бесплатной версией.

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

Они не это поправили, а перестали использовать часть библиотек, которые доступны только в Oracle JDK.

Нет. CoreCLR и CoreFx, около года назад объединённые в единый репозиторий( https://github.com/dotnet/runtime/ ) — вот .NET Core.

При чем тут репозиторий? CoreCLR это именно VM .Net Core, а чтобы не писать самому сортировку в каждом приложении есть стандартные библиотеки. В случае с .Net Core это CoreFX. В каком репозитории они лежат значения не имеет.

Ну и я нигде не говорил, что убогий ASP является часть .Net Core

Ответить
Развернуть ветку
Konstantin Safonov
Ну удачи, попробуйте коммерческий проект собрать бесплатной версией.

Да, вроде, собирается. Лицензия на VS денег стоит для компаний с выручкой больше миллиона долларов в год, но сами build tools бесплатны и опенсорсны, а в качестве альтернативной IDE можно взять Rider(VS Code не считаю, она для полноценной разработки не подойдёт).

убогий ASP

Чем ASP.NET плох? Батарейки в комплекте, на Techempower видно, что не тормозит.

При чем тут репозиторий? CoreCLR это именно VM .Net Core,

Их с CoreFX смержили в единый проект, потому что
* рантайм знает о библиотеках / неявно от них зависит(например, чтоб jit мог выкидывать range checks в циклах не только для массивов, но и большинства встроенных коллекций).
* языки тоже опираются на части CoreFX, которые не входили в CoreCLR(в какой-то момент гении оптимизации вообще выносили tuple в nuget-пакет, что вело к интереснейшим сайд-эффектам)

Ответить
Развернуть ветку
Гала Перидоловна
Да, вроде, собирается. Лицензия на VS денег стоит для компаний с выручкой больше миллиона долларов в год, но сами build tools бесплатны и опенсорсны, а в качестве альтернативной IDE можно взять Rider(VS Code не считаю, она для полноценной разработки не подойдёт).

А если нет миллиона долларов в год?

Чем ASP.NET плох? Батарейки в комплекте, на Techempower видно, что не тормозит.

Тем, что даже DI надо переизобретать в каждом проекте. По сравнению со Spring для .Net вообще нет ничего сопоставимого. Я уж не говорю о Netty.

Ну и по остальному да, такой разброд и шатание весьма показателен, что .Net'у еще расти и расти до прода. Java на Linux живет уже давно. Как вариант переноса сервиса с Windows на Linux наверное подойдет, а в случае написания с нуля лучше брать Java, т.к. по большей части костылей уже давно прошли.

Ответить
Развернуть ветку
Konstantin Safonov
А если нет миллиона долларов в год?

То бесплатная IDE с примерно той же функциональностью для большинства случаев. Платная, впрочем, стоит $45 в месяц — как и IDEA для Java.

Тем, что даже DI надо переизобретать в каждом проекте.

DI в дотнете из коробки уже года четыре, причём встроенный контейнер заменяется на 3rd party в один вызов метода.

По сравнению со Spring для .Net вообще нет ничего сопоставимого.

Большинство фич из коробки же есть, даже 3rd party либы не нужны — собственно, потому портом Spring на .NET никто и не пользовался.

Netty

* Большая часть есть из коробки
* DotNetty, который, впрочем, опирается на встроенные асинхронные стримы / клиенты / серверы

Ответить
Развернуть ветку
Гала Перидоловна
То бесплатная IDE с примерно той же функциональностью для большинства случаев. Платная, впрочем, стоит $45 в месяц — как и IDEA для Java.

Дело не в IDE, а компиляторе. IDEA сторонний проект.

DI в дотнете из коробки уже года четыре, причём встроенный контейнер заменяется на 3rd party в один вызов метода.

Какой контейнер? Dependency Injection это паттерн. В Java Spring используется повсеместно и позволяет очень быстро и удобно разбивать все на модули.

Большинство фич из коробки же есть, даже 3rd party либы не нужны — собственно, потому портом Spring на .NET никто и не пользовался.

Это может сказать только человек, который никогда не пользовался Spring. Ну да, порт умер до того, как появился .Net Core, конечно же им никто не пользовался в те времена, когда .Net нужен был только для разработки на Windows. Хорошая попытка, но нет.

* Большая часть есть из коробки

Большая часть чего? Его главная заслуга, что он из коробки держит нагрузки сопоставимые с C/C++ приложениями.

* DotNetty, который, впрочем, опирается на встроенные асинхронные стримы / клиенты / серверы

С edge-triggered epoll?

Ответить
Развернуть ветку
Konstantin Safonov
Дело не в IDE, а компиляторе. IDEA сторонний проект.

У Xamarin нет отдельного компилятора, там используется стандартный Roslyn / mcs, поскольку он — просто набор библиотек, а рантайм — обычный mono / mono aot(на iOS), который понемногу заменяют .net core, которые никогда закрытыми или платными не были. С момента покупки майкрософтом библиотеки открыли, платных/закрытых компонентов не осталось. Единственное, где может понадобиться оплата — сборка под iOS, где Apple хочет денег за сертификат разработчика, но это верно для любого языка и не связано с дотнетом.

Вообще, я писал это на три комментария выше: "сами build tools бесплатны и опенсорсны".

Какой контейнер? Dependency Injection это паттерн. В Java Spring используется повсеместно и позволяет очень быстро и удобно разбивать все на модули.

Паттерн нужно реализовывать. Система, которая занимается разрешением зависимостей и управлением временем жизни называется DI или IoC container. Spring использует такую же терминологию:

https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-basics

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

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

Я жду примеры фич, отсутствующих в .NET-экосистеме.

Большая часть чего? Его главная заслуга, что он из коробки держит нагрузки сопоставимые с C/C++ приложениями.

* Бенчмарки Techempower, которые отражают ~реальные workloads(просто ответы, сериализация json, хождения в базу), говорят об обратном https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=db
* Нативная реализация .NET на *nix решила проблемы с производительностью и стабильностью, которые были у mono(единственного способа запускаться на unix на тот момент), что видно в ссылке выше.

С edge-triggered epoll?

Да. Код нативной реализации сети в .NET, который выставляет нужный флаг:
https://github.com/dotnet/corefx/blob/release/2.1/src/Native/Unix/System.Native/pal_networking.c#L2025

Стек до нативной функции от публичного API:

Interop.Sys.TryChangeSocketEventRegistration
System.Net.Sockets.SocketAsyncContext.Register
System.Net.Sockets.SocketAsyncContext.OperationQueue
System.Net.Sockets.SocketAsyncContext.PerformSyncOperation
System.Net.Sockets.SocketAsyncContext.Connect
System.Net.Sockets.SocketPal.Connect
System.Net.Sockets.Socket.DoConnect
System.Net.Sockets.Socket.Connect

Поверх стандартных сокетов построена вся остальная сеть в дотнете, что делает утверждение верным для более высокоуровневых типов(впрочем, встроенный HTTP-клиент позволяет передать обработку сторонней реализации, что часто используется на iOS / Android).

Ответить
Развернуть ветку
Михаил Фролов

Начните с Тони Роббинса.

Ответить
Развернуть ветку
Andrey Degtyaruk

Привет! Я В программировании уже 10 лет, как и ты в 17 понимал, что хочу этим заниматься и даже умел в css, html и переделывать чужие пхп-скрипты. В универ я поступил, но проучился 2 курса всего. Из-за отсутствия диплома ни разу не страдал, никаких проблем с работой не испытывал, а получаю до сих пор побольше своих сокурсников, ведь я раньше начал ;)
Из того что следует изучить я бы посоветовал математический анализ и дискретную математику. Это нужно для того, чтобы начало работать "абстрактное" мышление и ты понял, прочувствовал и сознал логику. Язык программирования выбирай любой из актуальных - вообще не принципиально. Человек понявший парадигму программирования без особых трудностей сможет перемещаться между языками и технологиями в рамках этой парадигмы. Синтаксис нового ЯП изучить куда быстрее, чем новый иностранный язык.
Но я правда очень советую - займись математикой! 2-3 скажешь огромное спасибо и будешь зарабатывать 300к\сек. При том не нужно слишком глубоко - просто основы

Ответить
Развернуть ветку
Никита Лещев
 В универ я поступил, но проучился 2 курса всего. Из-за отсутствия диплома ни разу не страдал, никаких проблем с работой не испытывал, а получаю до сих пор побольше своих сокурсников, ведь я раньше начал

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

Ответить
Развернуть ветку
Andrey Degtyaruk

Я не говорю о том, что нужно ей пренебрегать. Речь только о том, что это не панацея и в современном мире не особо много она дает. Если есть возможность получить и желание получить - лучше получить. Если нет, то и расстраиваться не стоит.
З.Ы никаких проблем с заграницей без диплома нет. Работал в Чехии, ОАЭ, Тайланде.

Ответить
Развернуть ветку
Я не скажу свое имя машине

Начни читать 'Искусство программирования' Кнута)) 

Ответить
Развернуть ветку
Ol Ka

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

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

Ответить
Развернуть ветку
Andrey Degtyaruk

А зачем ему идея продукта, если он хочет быть программистом, а не предпринимателем?

Ответить
Развернуть ветку
Prolis Labkk

Можете назвать примеры продуктов, которые созданы начинающими программистами на продажу?

Ответить
Развернуть ветку
Ol Ka

https://ru.wikipedia.org/wiki/%D0%94%D1%83%D1%80%D0%BE%D0%B2,_%D0%9F%D0%B0%D0%B2%D0%B5%D0%BB_%D0%92%D0%B0%D0%BB%D0%B5%D1%80%D1%8C%D0%B5%D0%B2%D0%B8%D1%87

«Сразу по окончании вуза создал «ВКонтакте», крупнейшую на данный момент социальную сеть в России.»

😏

Ответить
Развернуть ветку
tmarat7

В 2002 году Павел Дуров поступил на Филологический факультет СПбГУ по специальности «Английская филология и перевод». 
Организатор и коммерсант он хороший, а что касается программирования - то это больше заслуги его старшего брата Николая.

Ответить
Развернуть ветку
Alexey Pomogaev

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

Дальше найди какую-нибудь известную embed операционную систему на гитхабе и попробуй разобраться как она работает. Можешь даже запилить свою пет-ОС, начав отсюда https://habr.com/ru/post/509996/

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

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

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

Ответить
Развернуть ветку
Alexey Pomogaev

По хорошему нужно разобраться в структурах данных. Понимать как изнутри работает Hash Map, B-Tree и прочие деревья. Уметь всё это реализовать в тетрадке.

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

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

Это не самый лучший вариант. Эти справочники полезны только если ты пишешь компилятор или занимаешься виртуализацией. Сходу так далеко лезть не стоит, да и разобраться с этим будет достаточно сложно. Лучше заходить сверху и на том же godbolt смотреть результат компиляции. Понимания простого набора команд вроде mfense, mov, pop, push, call наверное будет прям с головой лет на 5 вперед. В моем случае просмотр ассемблерного кода и запуск под VTune обоснован тем, что 5% CPU выливается в десятки тысяч долларов на новое железо, а обычным проектам такое не нужно. Мало кто дорастает даже до 512Гб памяти и 128 ядер, а у нас там кастомные лезвия приезжающие прям целиком стойкой. Обосновывать покупку пары десятков таких стоек уже достаточно проблематично, когда люди с другой стороны просят показать всякие флеймграфы и прочее, чтобы самим посмотреть не офигели ли мы.

Ответить
Развернуть ветку
Гала Перидоловна

Наверное, достаточно https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321 В ней описано практически все, что используется в современном мире. Более глубокое погружение следует делать когда будет понятно в каком именно направлении интереснее разбираться. Можно почитать поверхностно, чтобы понимать чем отличается TCP от UDP и что такое Raft, но запрыгнуть сразу в сети и распределенные вычисления, имхо, не реально. Ну и если бы я вернулся на 15 лет назад, то не стал бы так радостно бежать использовать python(или другие интерпретируемые языки) везде, тратить время на веб разработку и бесcмысленные MySQL/PgSQL, которые по справочнику читов можно освоить за полчаса(для более сложных задач уже нужны DBA, которые знают внутренности самой СУБД). В общем лучше идти сразу либо в сети, либо распределенные вычисления, либо ML, есть еще небольшая вероятность попасть в системную разработку или какие-то VCS системы, но это прям нужно постараться в России такое место найти и чтобы это еще было не НПО РакетыВверх с зп в 20к рублей.

Ответить
Развернуть ветку
Dmitriy Strukov

Привет, самый простой способ начать разбираться с программированием это высокоуровневые языки программирования, к примеру  Ruby, Python.

Самое интересное в этой сфере даже не язык программирования и синтаксис, а более фундаментальные вещи "Как работает компьютер?", "Как работает интернет?". 

Можешь попробовать пройти несколько уроков на http://rubycourse.ru/, там как раз простыми словами затрагиваются подобные темы.  

Ответить
Развернуть ветку
Black Jack

Прочитал: не сложилось и я решил самоубиться.

Ответить
Развернуть ветку
tmarat7

Столько всего понаписали, аж страшно стало становится "программистом" ...
Изучил 1С-Битрикс и 1С-Бухгалтерия.
Работаю с бухгалтериями солидных предприятий и иногда создаю сайты для магазинов с привязкой к складу.
На жизнь хватает...)

Ответить
Развернуть ветку
Expert Man

Рекомендую начать с Javascript

Ответить
Развернуть ветку
27 комментариев
Раскрывать всегда