Программист. С чего начать?
Здравствуйте, мне 17 лет. Только закончил школу и планировал поступать на программиста, но из-за Covid-19 не сложилось, и я решил самообучаться.
С 13 лет активно изучал Pascal(У меня был учитель - наставник, который таскал меня на конкурсы, олимпиады и тд.) и так на протяжении 4 лет изучал только алгоритмы, работы с более сложными языками как таковой не было. Сейчас активно начал изучать C#, после планирую выучить JS. Хотел бы конкретно узнать, что мне следует знать для дальнейшего развития, что бы можно не только создать приложение, а понимать принцип его работы на базовых уровнях.
4
показа
2.9K
открытий
C# - привязка к биллу гейтсу, зачем оно нужно. Конечно можно заставить его работать в юинксах, но зачем...
Я бы посоветовал изучать C++ и JS.
На двух этих вещах можно запилить любой максимально хороший, экономный и быстрый веб-проект (C++ - сервер, JS - клиент).
C++ ещё по причине того, что он вобрал всю историю развития ВООБЩЕ ВСЕГО, что есть в языках программирования, на нём можно писать в любой парадигме - процедурной, функциональной, с ООП, без ООП, с ручным управлением памятью, автоматическим, с убощиками мусора, без них - крайне много свободы. Плюс язык активно развивается и каждые 3 года выходит новый стандарт с кучей ништяков. Современный код на С++ краток и не может упасть. После этого любой другой язык будет изучаем за полдня, а кроме того хорошее понимание как работает компутер, ОС, и прочие аллокаторы.
Метод изучения - придумать себе проект и делать его. Больше ничего не нужно для мотивации, остальное всё лежит в гугле. Например придумайте себе проект вида "сделать клёвый сайт-сервис TODO" и процесс ответа на сопутствующие вопросы с помощью гугла будет процессом получения серьёзного образования.
Основные языки современности и будущего: C++, JS, Python, Go. На них одних щас пишется почти всё известное, что вы замечали в жизни в настоящее время. Ещё надо знать SQL, как универсальный язык взять/положить любые данные и какой-нибудь key-value способ. Document-oriented mongoDB и прочее такое скоро подохнет как недо-SQL и недо-keyvalue.
Ну есть ещё специфические упоротые платформы - андроид, иос - там всякие котлины и свифты, но всё это можно осилить за день, обладая фундаменталом.
`# apt install dotnet-sdk-3.1`.
но зачем...Чтоб не бороться с проблемами других языков.
Современный код на С++ краток и не может упастьДо тех пор, как не вызовет легаси-код.
Ну есть ещё специфические упоротые платформы - андроид, иос - там всякие котлины и свифты,Либо продолжать писать на C# и просто выставить нужный таргет для сборки.
Для этого есть фаззинг, memory, address, thread санитайзеры. При наличии тестов и запуске этих тестов с санитайзерами риск проблем очень сильно снижается.
Либо продолжать писать на C# и просто выставить нужный таргет для сборки.Лучше Java. У MS открыт только .Net Core.
Костыли, которые не нужно строить при наличи вменяемого рантайма.
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.
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
Ну удачи, попробуйте коммерческий проект собрать бесплатной версией.
Из последнего, что помню, атлассиановский софт отказывался запускаться на OpenJDK, просто опираясь на имя рантайма. В последних версиях они, вроде, это поправили.Они не это поправили, а перестали использовать часть библиотек, которые доступны только в Oracle JDK.
Нет. CoreCLR и CoreFx, около года назад объединённые в единый репозиторий( https://github.com/dotnet/runtime/ ) — вот .NET Core.При чем тут репозиторий? CoreCLR это именно VM .Net Core, а чтобы не писать самому сортировку в каждом приложении есть стандартные библиотеки. В случае с .Net Core это CoreFX. В каком репозитории они лежат значения не имеет.
Ну и я нигде не говорил, что убогий ASP является часть .Net Core
Да, вроде, собирается. Лицензия на VS денег стоит для компаний с выручкой больше миллиона долларов в год, но сами build tools бесплатны и опенсорсны, а в качестве альтернативной IDE можно взять Rider(VS Code не считаю, она для полноценной разработки не подойдёт).
убогий ASPЧем ASP.NET плох? Батарейки в комплекте, на Techempower видно, что не тормозит.
При чем тут репозиторий? CoreCLR это именно VM .Net Core,Их с CoreFX смержили в единый проект, потому что
* рантайм знает о библиотеках / неявно от них зависит(например, чтоб jit мог выкидывать range checks в циклах не только для массивов, но и большинства встроенных коллекций).
* языки тоже опираются на части CoreFX, которые не входили в CoreCLR(в какой-то момент гении оптимизации вообще выносили tuple в nuget-пакет, что вело к интереснейшим сайд-эффектам)
А если нет миллиона долларов в год?
Чем ASP.NET плох? Батарейки в комплекте, на Techempower видно, что не тормозит.Тем, что даже DI надо переизобретать в каждом проекте. По сравнению со Spring для .Net вообще нет ничего сопоставимого. Я уж не говорю о Netty.
Ну и по остальному да, такой разброд и шатание весьма показателен, что .Net'у еще расти и расти до прода. Java на Linux живет уже давно. Как вариант переноса сервиса с Windows на Linux наверное подойдет, а в случае написания с нуля лучше брать Java, т.к. по большей части костылей уже давно прошли.
То бесплатная IDE с примерно той же функциональностью для большинства случаев. Платная, впрочем, стоит $45 в месяц — как и IDEA для Java.
Тем, что даже DI надо переизобретать в каждом проекте.DI в дотнете из коробки уже года четыре, причём встроенный контейнер заменяется на 3rd party в один вызов метода.
По сравнению со Spring для .Net вообще нет ничего сопоставимого.Большинство фич из коробки же есть, даже 3rd party либы не нужны — собственно, потому портом Spring на .NET никто и не пользовался.
Netty* Большая часть есть из коробки
* DotNetty, который, впрочем, опирается на встроенные асинхронные стримы / клиенты / серверы
Дело не в IDE, а компиляторе. IDEA сторонний проект.
DI в дотнете из коробки уже года четыре, причём встроенный контейнер заменяется на 3rd party в один вызов метода.Какой контейнер? Dependency Injection это паттерн. В Java Spring используется повсеместно и позволяет очень быстро и удобно разбивать все на модули.
Большинство фич из коробки же есть, даже 3rd party либы не нужны — собственно, потому портом Spring на .NET никто и не пользовался.Это может сказать только человек, который никогда не пользовался Spring. Ну да, порт умер до того, как появился .Net Core, конечно же им никто не пользовался в те времена, когда .Net нужен был только для разработки на Windows. Хорошая попытка, но нет.
* Большая часть есть из коробкиБольшая часть чего? Его главная заслуга, что он из коробки держит нагрузки сопоставимые с C/C++ приложениями.
* DotNetty, который, впрочем, опирается на встроенные асинхронные стримы / клиенты / серверыС edge-triggered epoll?
У 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
С edge-triggered epoll?* Нативная реализация .NET на *nix решила проблемы с производительностью и стабильностью, которые были у mono(единственного способа запускаться на unix на тот момент), что видно в ссылке выше.
Да. Код нативной реализации сети в .NET, который выставляет нужный флаг:
https://github.com/dotnet/corefx/blob/release/2.1/src/Native/Unix/System.Native/pal_networking.c#L2025
Стек до нативной функции от публичного API:
Interop.Sys.TryChangeSocketEventRegistrationSystem.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).
Начните с Тони Роббинса.
Привет! Я В программировании уже 10 лет, как и ты в 17 понимал, что хочу этим заниматься и даже умел в css, html и переделывать чужие пхп-скрипты. В универ я поступил, но проучился 2 курса всего. Из-за отсутствия диплома ни разу не страдал, никаких проблем с работой не испытывал, а получаю до сих пор побольше своих сокурсников, ведь я раньше начал ;)
Из того что следует изучить я бы посоветовал математический анализ и дискретную математику. Это нужно для того, чтобы начало работать "абстрактное" мышление и ты понял, прочувствовал и сознал логику. Язык программирования выбирай любой из актуальных - вообще не принципиально. Человек понявший парадигму программирования без особых трудностей сможет перемещаться между языками и технологиями в рамках этой парадигмы. Синтаксис нового ЯП изучить куда быстрее, чем новый иностранный язык.
Но я правда очень советую - займись математикой! 2-3 скажешь огромное спасибо и будешь зарабатывать 300к\сек. При том не нужно слишком глубоко - просто основы
И всё же не стоит пренебрегать вышкой. Диплом лучше получить, если есть желание однаждый уехать за границу поработать, да и даже если его нет сейчас, то однажды оно вполне может появиться. А начать раньше ни кто не мешает и при условии обучения в универе. Я лично устроился джуном сразу после первого курса и оставшиеся 4 года успешно совмещал работу и учёбу
Я не говорю о том, что нужно ей пренебрегать. Речь только о том, что это не панацея и в современном мире не особо много она дает. Если есть возможность получить и желание получить - лучше получить. Если нет, то и расстраиваться не стоит.
З.Ы никаких проблем с заграницей без диплома нет. Работал в Чехии, ОАЭ, Тайланде.
Начни читать 'Искусство программирования' Кнута))
Начни с идеи отличного продукта, который ты сможешь продавать или продать.
И реализовывай её хоть на своём Паскале, благо сейчас даже он умеет в кроссплатформу.
А зачем ему идея продукта, если он хочет быть программистом, а не предпринимателем?
Можете назвать примеры продуктов, которые созданы начинающими программистами на продажу?
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
«Сразу по окончании вуза создал «ВКонтакте», крупнейшую на данный момент социальную сеть в России.»
😏
В 2002 году Павел Дуров поступил на Филологический факультет СПбГУ по специальности «Английская филология и перевод».
Организатор и коммерсант он хороший, а что касается программирования - то это больше заслуги его старшего брата Николая.
Начни с английского, затем с сайта интел скачай документацию на процессор для разработчиков. Она скорее как справочник, но пробегись глазами, чтобы понимать на чём работаешь. Можно также скачать документацию и к ARM процессорам.
Дальше найди какую-нибудь известную embed операционную систему на гитхабе и попробуй разобраться как она работает. Можешь даже запилить свою пет-ОС, начав отсюда https://habr.com/ru/post/509996/
После переходи к изучению книг Фаулера по рефакторингу и архитектуре, почитай Буча про ООП и прочие паттерны программирования. По хорошему, перечитай все прочие бестселеры на амазоне. Параллельное программирование обязательно к прочтению.
Дальше знакомишься с теорией реляционных баз данных, изучаешь SQL и ты в принципе готов на джуна.
А дальше практика, либо пилишь свой стартап, либо идёшь в корпорацию падаваном. В мелкие конторые лучше не ходи, чтобы не терять веру в человечество.
По хорошему нужно разобраться в структурах данных. Понимать как изнутри работает 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к рублей.
Привет, самый простой способ начать разбираться с программированием это высокоуровневые языки программирования, к примеру Ruby, Python.
Самое интересное в этой сфере даже не язык программирования и синтаксис, а более фундаментальные вещи "Как работает компьютер?", "Как работает интернет?".
Можешь попробовать пройти несколько уроков на http://rubycourse.ru/, там как раз простыми словами затрагиваются подобные темы.
Прочитал: не сложилось и я решил самоубиться.
Столько всего понаписали, аж страшно стало становится "программистом" ...
Изучил 1С-Битрикс и 1С-Бухгалтерия.
Работаю с бухгалтериями солидных предприятий и иногда создаю сайты для магазинов с привязкой к складу.
На жизнь хватает...)
Рекомендую начать с Javascript