2/04/2008

Так с чего же начать изучение программирования?

Нет да нет на глаза попадаются советы начинающим под заголовком вроде: «С чего же начать изучать программирование?». Под словом программирование подразумевается написание кода на языке C#. Авторы советуют изучить С++, прежде чем начать осваивать C#, так как синтаксис C# основан на C++; затем советуют «обязательно освоить WinAPI, MFC» и под конец «желательно изучить COM». По мнению авторов этот нелегкий путь поможет с легкостью изучить C#.

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

Да, и еще ... язык программирования – это язык. А программист – это переводчик, который умеет свои мысли излагать на другом языке, например, на C#. Известно, что лучшие переводчики с английского – это не те, кто изучал в ВУЗе латынь, а те кто вырос в англоязычной среде.

Под конец, поймите одну простую истину: раз уж весь мир из точки A пришел в точку B и собирается идти в точку C, то чтобы со всем миром двигаться в точку C, не обязательно начинать движение из точки A.

Смотрите туда, куда идете.

Быстрее изучайте C# и обязательно LINQ, хотя найдется тот, кто будет советовать изучить SQL, чтобы лучше понять LINQ J

 

P.S.
Мой путь: GW Basic (кажется так наывался),
Pascal
, Assembler, Prolog, Lisp, C, C++ (вместе с WinAPI и MFC), Java, JavaScript, SQL, C#. Теперь в работе использую: C#, JavaScript (редко), SQL (все реже, потому что в C# 3.0 есть LINQ);  Среда разработки: Visual Studio 2008 (при царе Горохе использовал Borland .... признаюсь, было время, был подвержен истерии под названием «must die», но к счастью это прошло J).

MVC - это на самом деле MS

Смотрим на паттерн Model-View-Controller. Что видим? Видими Controller, под управлением которого находятся View и Model. При этом View и Model ничего не знают друг о друге так же, как и про Controller. Т.е. View и Model можно назвать сервисами. Вуаля, S получили.

Теперь, осталось получить  M. Все просто: в наше время тот, кто хоть чем-то управляет, называется Manager.

Вот и получается, что MVC - это на самом деле MS.

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

1/29/2008

Классификатор может расплавить мозг.

Простая задача: найти код классификации ПО, которое использует Windows Workflow Foundation. Найти код надо на сайте «ФЕДЕРАЛЬНАЯ СЛУЖБА ПО ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ, ПАТЕНТАМ И ТОВАРНЫМ ЗНАКАМ (РОСПАТЕНТ)». Я не кричу – это они J.

Так вот .... найти классификатор было нелегко. Для последователей привожу ссылку: «Международная патентная классификация
(8-я редакция)
». Шок был, когда увидел следующий список:

Раздел A УДОВЛЕТВОРЕНИЕ ЖИЗНЕННЫХ ПОТРЕБНОСТЕЙ ЧЕЛОВЕКА

Раздел B РАЗЛИЧНЫЕ ТЕХНОЛОГИЧЕСКИЕ ПРОЦЕССЫ;ТРАНСПОРТИРОВАНИЕ

Раздел C ХИМИЯ; МЕТАЛЛУРГИЯ

Раздел D ТЕКСТИЛЬ; БУМАГА

Раздел E СТРОИТЕЛЬСТВО; ГОРНОЕ ДЕЛО

Раздел F МЕХАНИКА; ОСВЕЩЕНИЕ; ОТОПЛЕНИЕ; ДВИГАТЕЛИ И НАСОСЫ; ОРУЖИЕ И БОЕПРИПАСЫ; ВЗРЫВНЫЕ РАБОТЫ

Раздел G ФИЗИКА

Раздел H ЭЛЕКТРИЧЕСТВО

Догадайтесь, где здесь будет про ПО? Хе-хе.

Первое, куда зашел, это был «Раздел A». Логика простая – ПО помогает жить, мне уж точно J. Потом посетил «Раздел B». Логика тоже понятна – есть слово «технологические». Загляните, там такое .... и так много; это не просто ужас, а ужас-ужас. J

Зашел в «Раздел H», потому что ПО работает на компьютерах, которые пока что потребляют электричество.

Короче, будете в классификаторе, идите прямо в G06Q – «Системы обработки данных или способы, специально предназначенные для административных, коммерческих, финансовых, управленческих, надзорных или прогностических целей; системы или способы, специально предназначенные для административных, коммерческих, финансовых, управленческих, надзорных или прогностических целей, не предусмотренные в других подклассах».

Да-да, ПО в «Раздел G». Ну, где еще может быть про ПО, как не в Г? Бывает, устаешь, и все ПО хочется послать в раздел У. J
Пойду прогуляюсь ...



P.S.
У - в смысле унитаз J

1/28/2008

Закон третьей стороны или как возникают конфликты

Закон третьей стороны гласит: непрекращающиеся конфликты поддерживаются третьей стороной. Под третьей стороной понимают любого, кто посредством ложных сообщений создает раздоры между двумя сторонами (людьми, или человеком и группой, или между двумя группами). Автор закона  - Рон Хаббард (американский исследователь, философ). Закон применим на любом уровне - семьи, компании, государства. Существует стандартная технология обнаружения и обезвреживание третьей стороны – личное и открытое общение!

 

P.S. ака ЗЫ

Ну, все - теперь и мой блог хакеры атакуют в рамках борьбы с саентологами J.

 

P.P.S. ака ЗЗЫ

Disclaimer cпециально для хакеров: то, что я привожу здесь имя основателя саентологии – не означает мою приверженность J. Не ломайте мой блог, плиз J.

 

Для тех кто не знает причем здесь хакеры и саентологи: война у них сетевая посредством DDos-атак. А мне что с этого, спросит, как говорят, проницательный читатель J? А то, что от этих войн сети забиваются DDos-барахло-пакетами, и до многих сайтов не достучаться; даже почту не мог получить почти весь день.

Короче,  хватит воевать; миру мир, конец войне J.

1/27/2008

Про LINQ to SQL и INNER JOIN

Например, в БД есть две таблицы и ограничение:


Request:

[Id] [uniqueidentifier] NOT NULL

[Date] [datetime] NOT NULL

 

Form:
[RequestId] [uniqueidentifier] NOT NULL,

[Key] [nvarchar](10) COLLATE Cyrillic_General_CI_AS NULL,

[Value] [nvarchar](4000) COLLATE Cyrillic_General_CI_AS NOT NULL,

[Id] [uniqueidentifier] NOT NULL,

 

Ограничение:

CONSTRAINT [Request_Form] FOREIGN KEY([RequestId]) REFERENCES [dbo].[Request] ([Id])

 

В переводе на человеческий J:
есть таблица запросов
Request, в которой хранятся идентификаторы и даты, а также есть таблица Form, в которой хранятся пары Key и Value, при этом для одного Request может быть несколько строк в Form.

 

Например, надо из Form выбрать 20-ть Value, которым соответствуют Key = “mail”, и также значение Date из родительского Request.

На SQL этот запрос выглядит следующим образом:

 

SELECT TOP (20) [t1].[Date], [t0].[Value] AS [Mail]

FROM [Form] AS [t0]

INNER JOIN [Request] AS [t1] ON [t1].[Id] = [t0].[RequestId]

WHERE [t0].[Key] = @p0

 

Но не надо бежать и изучать SQL с его «страшными» INNER JOIN'ами. Можно использовать LINQ to SQL (часть язык C# 3.0), который SQL-запрос сформирует сам. Вот как он выглядит:

var mails = from frm in dc.Form

                        where frm.Key == "mail"

                        select new { Date = frm.Request.Date, Mail = frm.Value };

 

где dc – это экземпляр наследника DataContext'а.

Пример, использования в A
SP.NET:

<asp:DataGrid runat="server" ID="_MailList" AutoGenerateColumns="true" Width="100%"

           BorderWidth="0" AlternatingItemStyle-BackColor="#e0e0e0">

</asp:DataGrid>

…

_MailList.DataSource = mails.Take(20);

_MailList.DataBind();        // запрос к SQL Server’у

 

Наследник DataContext’а формируется автоматически с помощью MSLinqToSQLGenerator'а на основе следующего .dbml-файла (далее фрагмент):

<Table Name="" Member="Form">

    <Type Name="Form">

      <Column Name="RequestId" Type="System.Guid" CanBeNull="false" />

      <Column Name="Key" Type="System.String" DbType="nvarchar(10)" CanBeNull="false" />

      <Column Name="Value" Type="System.String" CanBeNull="false" />

      <Column Name="Id" Type="System.Guid" IsPrimaryKey="true" CanBeNull="false" />

      <Association Name="Request_Form" Member="Request" ThisKey="RequestId" Type="Request" IsForeignKey="true" />

    </Type>

</Table>

<Table Name="" Member="Request">

    <Type Name="Request">

      <Column Name="Id" Storage="_Id" Type="System.Guid" IsReadOnly="true" IsPrimaryKey="true" CanBeNull="false" />

      <Column Name="Date" Type="System.DateTime" IsReadOnly="true" CanBeNull="false" />

      <Association Name="Request_Form" Member="Form" OtherKey="RequestId" Type="Form" />

    </Type>

</Table>

 

Знать .dbml -формат необязательно, потому что в Visual Studio 2008 есть графический редактор, с помощью которого достаточно легко создать схему БД и отношения между таблицами.

Кстати, у DataContext есть метод CreateDatabase(), который предназначен для создания файлов БД (.mdb-файл  - SQL Server; для SQL Server CE не проверял, но вроде тоже поддерживает) на основе .dbml-файла.

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