Какво представлява програмирането?

Blinky

Owner
Програмистите не са ли просто компютърни гении?

Програмирането е креативен процес, извършван от програмисти, за да обучат даден компютър как да извършва определена задача. Холивуд помога за изграждането на образ на програмистите, представящ ги като вездесъщи специалисти, които могат да разбиват пароли за секунди или да подобряват представянето на машини с 500% без особени усилия. За съжаление, реалността не е толкова интересна!

Значи програмирането е скучно? Не!

Компютрите могат да бъдат програмирани да правят интересни неща. От няколко години във Великобритания се използва система, която чете регистрационните номера на автомобилите. Колата се вижда от камера, снима се и изображението се обработва веднага, а данните от регистрационната табела са извлечени, проверени в националната база данни на регистрационните номера и ако автомобилът е откраднат, сигнал за това се появява в рамките на четири секунди.

С подходящите приставки компютрите могат да бъдат програмирани да извършват стоматологични прегледи. Това би било много интересно, макар и леко страшно!

Два различни вида софтуер

По-старите компютри, които са с черно-бели екрани и без мишка, обикновено използват конзолни приложения. Все още има много такива компютри, които са доста популярни с бързото въвеждане на данни.

Другият вид приложения изискват мишка и се наричат GUI програми или управлявано от събития програмиране. Те се използват на компютри с Windows, Linux и Apple Mac. Програмирането на тези приложения е малко по-трудно, отколкото на конзолните, но по-новите програмни езици като тези значително го улесниха:

Visual Basic
Delphi
C#

Какво правят програмите?


По принцип програмите манипулират цифри и текст. Те са изграждащите елементи на всички програми. Програмните езици ви позволяват да ги използвате по различни начини, например да добавяте числа или да съхранявате информация на диска за повторно търсене.

Тези цифри и текст се наричат променливи и могат да се управляват поотделно или в структурирани групи. В C++ една променлива може да се използва за преброяване, а структурна променлива борави с данните за ведомост на всеки служител, като например:

* Име
* Заплата
* Идентификационен номер в компанията
* Общо платен данък
* Социално-осигурителен номер

Една база данни може да съдържа милиони подобни записи и да ги извиква много бързо.

Програмите трябва да бъдат написани за операционна система

Програмите не съществуват от самосебе си, а им е нужна операционна система, освен ако самите те не са операционната система!

Win 32
Linux
Mac

Преди Java, програмите трябваше да бъдат пренаписвани за всяка операционна система. Програма, която върви на Linux, не можеше да се използва с Windows или Mac. Но с Java е много по-лесно да напишеш програма веднъж, след което да я използваш с всички операционни системи, тъй като тя се състои от общ код, наречен байткод, който след това бива интерпретиран. Всяка операционна система има Java интерпретатор, наречен Java Virtual Machine (JVM), написан за нея, който знае как да интерпретира байткод. C# има нещо подобно.

Програмите използват код на операционните системи

Освен ако не продавате софтуер и искате да го използвате на всички различни операционни системи, най-вероятно ще трябва да го модифицирате за нови версии на същата операционна система. Програмите използват функции и характеристики на операционната система и, ако те се променят, програмата също трябва да бъде променена, защото в противен случай няма да работи.

Много приложения, написани за Windows 2000 или XP използват частта Local Machine на регистъра. Но това създава проблеми с Windows Vista и Microsoft съветва хората да пренапишат засегнатия код. Microsoft вече са го направили, за да стане Vista по-сигурна.

Компютрите могат да разговарят с други компютри

Когато са свързани в мрежа, компютрите могат дори да стартират програми един на друг и да си прехвърлят данни чрез портове. Програмите, които пишете, също правят това. Именно поради тази причина програмирането е малко по-трудно, тъй като трябва да се справите с някои ситуации, например:

Когато мрежовия кабел бъде издърпан.
Когато друг компютър в мрежата бъде изключен.

Някой модерни програмни езици позволяват писането на програми, чиито части се стартират на различни компютри. Това е възможно само, ако може да се използва паралелизъм. Някои проблеми не могат да бъдат разделени по този начин:

Девет жени не могат да родят едно дете заедно само за един месец!

Програмни периферии, свързани с вашия компютър

Ако имате някаква периферия, например видео камера, контролирана от компютър, тя ще има кабел, който я свързва с компютъра, както и софтуер, който я контролира. Периферията може да има още

* Приложно-програмен интерфейс (API)
* Комплект за разработване на софтуер (SDK)

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

Игрите са просто програми


Компютърните игри използват специални библиотеки:

DirectX
XNA
SDL

Така те могат да се свързват много бързо с хардуера на дисплея. Екраните на игрите се ъпдейтват над 60 пъти за няколко секунди, а софтуерът на 3D игрите трябва да движи всичко в 3D пространство, да засича сблъсъци и други ефекти и да предава 3D изгледа към плоска повърхност (екрана) по 60 пъти в секинда. Това е много кратък период, но хардуерът на видео картата извършва голяма част от работата по предаването. GPU чиповете са оптимизирани за бързо предаване и могат да извършват тези операции до 10 пъти по-бързо от CPU, дори и с най-бързия софтуер.

Заключение

Много програмисти пишат софтуер като свой креативен израз. Мрежата е пълна с уебсайтове с отворен код, разработени от непрофесионални програмисти, които са щастливи да споделят своя код. Linux е създаден по същия начин, когато Линус Торвалдс споделя кога, който е написал.

Интелектуалното усилие за написването на средна по размер програма може да се сравни с написването на книга, като единствената разлика е, че при книгите не се налага отстраняването на грешки. Откриването на нови начини да направиш нещо или да решиш сериозен проблем носи радост. Ако уменията ви да програмирате са достатъчно добри, можете да си намерите работа на пълно работно време като програмист.
 
?????????????????????
 
От: Какво представлява програмирането?

Може да дадеш на някой програмист да коригира статията :) .
 
От: Какво представлява програмирането?

Без лични чувства, ама като човек, който си вади хляба с програмиране много години ще кажа, че статията е под всякаква критика.

Не ми се пише ферман точка по точка, за това ще се хвана за някой и друг произволен ред от статията, като този например.
Програма, която върви на Linux, не можеше да се използва с Windows или Mac.
Cygwin ? :D

по-новите програмни езици като тези значително го улесниха:

Delphi
До колкото си спомням последният път като дращих нещо на Delphi преди 10-на години там се пишеше на паскал.
 
Re: От: Какво представлява програмирането?

Без лични чувства, ама като човек, който си вади хляба с програмиране много години ще кажа, че статията е под всякаква критика.

Не ми се пише ферман точка по точка, за това ще се хвана за произволен ред от статията, като този например.

Cygwin ? :D

До колкото си спомням последният път като дращих нещо на Delphi преди 10-на години там се пишеше на паскал.

Явно е поустаряла. Направо да я махна, като гледам и актуална не е. ;)
 
От: Re: От: Какво представлява програмирането?

Явно е поустаряла. Направо да я махна, като гледам и актуална не е. ;)
Не е на нивото на форума 100%, поне на това ниво, на което предполагам искате да бъде.

Но пък съм напълно съгласен с един ред от нея :roll:
Значи програмирането е скучно? Не!
 
От: Какво представлява програмирането?

И примерно графичните библиотеки трябва да са OpenGL и DirectX.
XNA и SDL са middleware, а и XNA му спряха разработката преди някоко години. SDL е подобно, ама допреди малко даже не знаех какво е :) . Но в наши дни има далеч по-популярни фреймуърци за игри и графични работи.

На Мак операционната система се казва Mac OSX.

Windows отдавна не е само 32-битов. И има доста популярни мобилни операционни системи дето също може да се споменат - Android, iOS.
 
Re: От: Какво представлява програмирането?

И примерно графичните библиотеки трябва да са OpenGL и DirectX.
XNA и SDL са middleware, а и XNA му спряха разработката преди някоко години. SDL е подобно, ама допреди малко даже не знаех какво е :) . Но в наши дни има далеч по-популярни фреймуърци за игри и графични работи.

На Мак операционната система се казва Mac OSX.

Windows отдавна не е само 32-битов. И има доста популярни мобилни операционни системи дето също може да се споменат - Android, iOS.

Ако можете да допълните, аз ще коригирам, тъй като инфото явно е старо, но го имах налично. Не е копи-пейст. А и така да седи, всеки коментар след този остарял морално пост, ще е добре да се види, за да се види в стил Преди и Сега. :)

Благодаря, че ме поправяте или по-скоро постът, който имам.
 
От: Какво представлява програмирането?

Много хора се превъзбудиха от холивудски фирми и казват,че са програмисти.Лично съм имал в случай когато една много красива мадама ми сподели,че е програмистка.Попитах я кои програмни езици познава и отговора беше: "Миииии Word,Excel...."daaaaaammnnn!!!

Поста е тотално сбъркан и не отговарят почвечето неща,поне на 70 процента.Дори не става да се пренапише.По добре го изтрии.
Поздрави,
 
От: Какво представлява програмирането?

Мисля, че подобна статия трябва да е модерна. Да обхваща съвременните тенденции и да се обърне внимание на нови техники за програмиране. Приемам, че статията е насочена към хора, които хал-хабер си нямат какво е програмиране. Лично за мен програмирането с две думи е "решаване на проблем". Ако се наблегне леко на този смисъл, би могло да се получи още по-добре.
OFF: Думата "Проблем" в българския звучи малко изкривено. Английския разполага с няколко думи, които носят по-специфичен смисъл. Курсовете по "Управление на проблеми" са много полезни в този смисъл, но да не се отклонявам.
Да конкретно за Web-програмиране. Мисля, че подобна статия трябва да насочи младежите към съвременни езици за Web, като Ruby (jRuby), PHP, Node.js, TypeScript, CofeeScript. Тези езици могат да се използват и в Android-устройства. Лесни са за разучаване и са изключително мощни. Добре ще е поне да се споменат и някои web-базирани frameworks, без които направо не могат да живет съвременните Web-програмисти и дизайнери, като Sass, Compass, jQuery, Bootstrap, Foundation, YAML. Факта, че най-популярните социални ситеми FB (писан на PHP) и Twitter (Bootstrap), Yahoo (YAML) говори много. тези системи чртаят бъдещето на web-програмирането.

Лично аз под Linux използвам основно Unix-like базираните езици: bash (най-популярния език за системно администриране), Perl и по-малко Python (просто не съм го учил толкова, колкото Perl, иначе повече ме кефи). И трите езика ги има инсталирани по подразбиране в почти всяка Linux система.

Сигурен съм, че всеки колега програмист може да сподели доволно инфо с какво и как си вади хляба. А хляб (кинти) има много, стига да се овладее добре някой от езиците. В България се използва прекалено много Windows и се търсят доста програмисти, коиято владеят добре .NET програмирането.
Към момента от икономическото министерство споделиха, че има криза за 500 IT-специалисти. А догодина очакват да надминат 1000, защото сме свидетели на мощна емигрантска вълна, такава каквато нямаше и 90-те години.
Така че, които иска да се занимава с програмиране, може да е сигурен, че ще си намери работа и то сравянително добре заплатена. Средното заплащане в IT-бранша тук е около 2000 лв. Някои взимат доста повече, други стартират от около 1000 лв. Но личните ми наблюденията са, че като цяло фирмите дават по 2000лв.
Имам и колеги, които пишат на Java. До колкото знам, не падат под 3000лв чиста пара. Понякога съжалявам, че не се насочих към Java-та. Но тоя език ми е особено неприятен. По-скоро бих писал на C++.
 

Горе