Программирование. Реактивный старт — помощь начинающему
Доброго времени суток, Хабр!
Небольшое введение в текущее положение дел:
До сегодняшнего дня, с программированием меня связывал только олимпиадный аспект. А значит, и запас того, что я могу реализовать на этот момент на плюсах ограничивается всего-навсего проектом из одного-единственного исполняемого файла, в котором используется исключительно STL, а единственный метод взаимодействия этой чудо-программы с окружающей её средой — чтение из файла и запись туда же.
Но вот наконец-то мы набрались смелости и решились перейти из стана программистов убогих не совсем полноценных к отцам-Программистам.
Уже даже есть идея для первого проекта и команда единомышленников, вот только беда, у них опыта не более моего.
Думаю, что многим есть, что посоветовать начинающим — что использовать (библиотеки, на чём писать, etc.), как научить приложение работать с БД, как самим организовать БД, различные карты расположения распространённых грабель, книжечка для начала — в общем всё, что действительно стоит знать программисту в первый год своего Существования.
Языки, на которые ориентируемся — С++, Objective-C, возможно, Python — но, как сказано в комментариях ниже, если существуют намного более подходящие для этого альтернативы — не стесняйтесь предлагать, всегда рады новому.
P.s. Если чуть подробнее о проекте (что бы знать, в каком направлении отправлять) — некий апп, состоящий из трёх частей: серверная, клиентская и БД. Да, вероятно этого многовато для «Hello, world, we will conquer you!», но это как нельзя лучше представляет то, чем мы планируем заниматься в будущем, и, по крупинкам собирая знания, успешно заниматься. Клиентская часть должна уметь отправлять запросы на сервер в вебе и получать оттуда ответы. Сервер, соответственно — обрабатывать эти запросы и отвечать на них используя данные БД. Крайне интересуют советы по реализации Каждого из компонентов.
P.p.s. Думаю, не мы одни будем вам признательны, так что заранее: СПАСИБО!
Веб-интерфейса от приложения не требуется. Окошко в трее, иногда взаимодействующее с пользователем, отправляя запросы на сервер и получая оттуда ответы. Т.е. в клиентской части интересна не реализация красивого веб-приложения, а взаимодействие с удалённым сервером.
Советов много, а комплексного подхода никто не предложил…
Ребята, всё полностью зависит от задачи. И, если не хотите распыляться, проведите прежде всего концептуальный анализ критичных мест архитектуры.
Ответьте себе на следующие вопросы:
— Насколько «быстрым» должно быть клиентское приложение?
— Какая нагрузка планируется на сервер?
— Какие данные и способы их отображения будут в клиентском приложении? Как с ним будет взаимодействовать пользователь?
— Какие требования предъявляются к каналу передачи данных между клиентом и сервером (задержки, real-time-требования)?
— Какие предельные сроки?
— Сколько времени планируется поддерживать проект (ставка на качество или на скорость разработки)?
— Планируется ли продавать исходники или поддерживать проект самостоятельно?
Выбор инструментов сильно зависит от ответов на эти вопросы.
Мой хороший друг рекомендует использовать те инструменты, которыми я владею. Не забывайте, серебрянную пулю до сих пор так и не изобрели, и для одной и той же логики на любом языке так или иначе придётся написать примерно одинаковое число строк кода.
для турбо старта смтрите в сторону c#
или как более извращенный вариант perl + win32 gui с последующей сборкой и компиляцией в exe через perlapp (этот способ для вас наверн будет самым быстрым, посольку перл очень легок в изучении)
Благодарю. Но тогда ещё вопрос вдогонку: а как оно с практической точки зрения? Всё таки, думаю, лучше с самого начала учиться идейным вещам, нежели расставлять костыли. В данном вопросе важна не столько «турбо» составляющая старта, сколько «качественная».
.NET и С# в мире Windows — это текущий тренд, продвигаемый Microsoft. И бросать эту затею, по всей видимости, MS не собирается. Так что в этом плане все очень идейно.
Сомневаюсь, что можно назвать это «знакомством» (всё-таки ни одного внушительного проекта написано не было), но в целом более-менее комфортно можем работать в c++, отчасти — objective, из разметки — разве что, пожалуй — азы HTML, но знанием это называть ещё рано.
Не стоит базировать советы на конкретно плюсах или objective, если существуют решения элегантнее и проще. Желания обучаться чему-то новому — предостаточно.
Если Вас не затруднит — можно вкратце о каждом из них — чем полезен и какие его аспекты достойны внимания. Если бы ещё могли поделиться источниками знаний по ним (не просто синтаксис; пишем hello, world; массивы, а практическое применение — общих книг и так предостаточно), было бы просто замечательно.
javascript вам понадобится для работы со страницей на стороне клиента.
Python, Perl, PHP для работы со страницей на стороне сервера. Т.е. пишете сценарии.
При смешении html, javascript и одного из этих трёх языков (Python, Perl, PHP) у вас получается рабочее веб-приложение, которые вы и так каждый день видете.
Python, Perl, PHP — каждый из них хорош по-своему. Это вы поймёте, когда хоть немного с ними поработаете.
Это стандартные средства. Кстати, если хотите, то посмотрите ещё ASP.NET.
Если хотите по-подробнее, то смотрите сюда. Я объяснил то, что думаю, основы этих языков объяснять — увольте, это уже Ваша обязанность.
Уточню, если это имеет значение:
Конкретно связанного с вебом там будет только удалённая отправка и получение запросов/ответов на/от сервера.
Т.е. веб-интерфейс будет отсутствовать в принципе, сама программа должна представлять просто процессик в трее, иногда выходящий на поверхность и получающий команды от пользователя + возвращающий ответы на запросы с сервера.
Исходя из прочитанного, я бы вам порекомендовал смотреть в сторону платформы .NET, и вот почему.
1) Возможность реализовать то, что вы планируете, какими угодно способами: в виде веб-приложения (ASP.NET, ADO.NET), в виде десктоп-клиента (WPF + WCF), как Silverlight-приложение (типа Flash, можно запустить и в браузере, можно сохранить локально на десктоп).
2) Для всех таких вариаций вам нужно будет знать, по большей части, только C#, синтаксис которого будет очень знаком и его будет несложно изучить. Для всего остального (в основном, это разметка HTML или XAML) существует визуальный редактор в Visual Studio.
3) Различные компоненты .NET фреймворка упростят и ускорят разработку: проще работать с БД, проще организовывать веб-сервисы (если мы говорим о десктоп-клиенте), проще обрабатывать события и т.п.
4) По всему этому написаны тонны документации, как на английском, так и на русском. Это и книги, и MSDN, и куча форумов по каждой из технологий, подкасты, видеокасты, тысячи их.
5) В процессе разработки вы также можете изучить/закрепить/научиться применять основные паттерны программирования, которые вам в дальнейшем сильно пригодятся.
6) Если вам не будет хватать возможностей .NET-фреймворка, то есть разработки, расширяющие его возможности (тот же NHibernate).
7) Разочаруетесь в .NET — будет проще потом перейти на платформу Java, у них немало общего.
Если вы научитесь в полной мере использовать возможности .NET, то это точно будет реактивный старт.
Ложка дегтя: это все ориентированно на win-платформу. Хотя, многие вещи заработают и на других платформах.
Из книг:
— Стив Макконел. Совершенный код.
— Эрих Гамма и др. Приемы ООП. Паттерны программирования.
— Джеффри Рихтер. CLR via C#.
— Герберт Шилдт. Полное руководство C#.
— John Sharp. MS C# Step by Step.
В идейном плане (aka далёком, а может и не очень, будущем), приложение должно уметь отправлять запросы на сервер в вебе и принимать ответы оттуда. Вообще говоря, ориентация больше на веб.
Ориентируемся мы конечно на них, но и другие языки использовать не остерегаемся. Будем только рады узнать про более подходящее решение. Да, и попутно — в практике часто встречается написание приложения на нескольких языках? К примеру, серверная часть на языке N, клиентская на языках M и K.