Jump to content
ТУК НЕ СЕ ПРЕДЛАГАТ ХАКЕРСКИ УСЛУГИ ! ×

За програмирането, или от къде и как?


Recommended Posts

Здравейте,

От доста време се опитвам да разбера от къде е най-добре да се започне в програмирането. Многократно е задаван този въпрос, но аз не откривам удовлетворяващ отговор, тъй като в почти 100% от отговорите доминира личното предпочитание или просто ти казват учи "езика-Х" ако искаш да стане нещо от теб и след няколко години ще си ОК, ако имаш талант. Хмм!

Дали първо трябва да се проумее какво в действителност представлява програмирането. Някои наричат програмирането кодиране (кодене), други мислят, че овладяването на така наречените скриптови езици те прави програмист. Гледам, че масово се рекламират Python, C-#, JavaScript..... Дали поради сложността дали поради други причини (вероятно има, при това не малко), но езици като Delphy и C++ (само като пример) изглеждат по-малко атрактивни. Може би някой знае нещо което ние самите не знаем за себе си и обществто което съставляваме, не зная. Едно нещо със сигурност ми е известно и то по същество е парадокс. Вродената интелигентност на Българите е висока, но в края на обучението става сякаш по-ниска. Някой се е погрижил задържането развитието на тази интелигентност да е наистина пълно и всеобхватно. 

Не зная, може би си търся оправдание, макар и "продукт" на друга система, или съм започнал да прихващам от все по-често срещаната придобита имбецилност, но все не успявам да намеря отговор на въпроса, от къде да се започне?

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

Темата ми напомня на периода когато започнах да изучавам програма за 3D моделиране. Тогава лично на мен ми беше казано: "Ръчкане му е майката!", а други ме канеха да пием по ракия да ми обяснят нещата. Оказа се, че трябва да се запозная подробно с интерфейса, инструментите за работа и да имам проект в главата си. Оказва се също, че всички подобни програми страшно много си приличат по отношение на инструментите с които се борави. Основната разликата е в това, че понякога в зависимост от избрания софтуер са на различно място в интерфейска на програмата. Въднъж научи ли се основното е необходимо кратко време за запознаване с интерфейса на друг софтуерен продук, за да може потребитял да работи свободно с него.

С програмните езици не е ли така, и ако може да се направи паралел от къде да се започне? Всичко се учи, многократно съм се убеждавал в това, но без никакво съмнение е по-лесно ако не се налага да преоткриваме топлата вода. Добре, но все някой трябва да ти покаже къде е тази топла вода иначе е напълно възможно да подминаваш иточника без да разбираш за това, а времето не тече назад.

Link to post
Share on other sites

Програмирането няма нищо общо с програмните езици.

Кризата не е само в България. Тя е световна. Най-тежка е в дефиниционната област.

За да бъде човек програмист трябва да започне с основата, а именно - Теория на информацията. Без тази база нищо не би се получило. Ще имаме повърхностни знания и абсолютно неразбиране. "Програмиостът" ще си служи с клишета и ще копира от Git Hub и други подобни ресурси. Познанията му ще се изчерпват с предоставеното от Google.

След като тази дисциоплина бъде усвоена (но не и преди това) се преминава към изучаване на числените методи.

Държа да подчертая, че има огромна разлика между математика и числени методи.

Ако не ми вярвате вижте как се изписват диференциалните уравнения (тогава, когато използвате формални методи на представяне) и как това  се прави, когато ги реализираме в програмна система. Без числени методи няма програмиране.

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

След като сте усвоили числените методи пристъпвате към изучаване на алгоритмите.

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

Алгоритмите са важен елемент, но и тук има специфика.

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

Следващата стъпка е изучаването на Логика и програмируеми автомати (ЛПА).

Защо трябва да изучаваме ЛПА?

Освен полупроводникови съществуват и фотонни, хидравлични и пневматични компютри. Дали вие знаете или не за тях, това не променя факта. Вие трябва да можете да управлявате системи. Управлението не е като конрола (за справка SCADA).

След ЛПА е добре да се изучат основите на т.н. "техническа кибернетика".

Кибернетиката е измислена от Аристотел (ученик на Платон и учител на Александър Македонски, роден през 384 година п.н.е.). По негово време не е имало микропроцесори, но са ползвали астролаб (супер механичен компютър за геопозициониране), чиято точност нито един съвременен компютър не е в състояние да достигне.

Кибернетиката е наука за управление на процеси (без значение какъв е техния характер).

Когато понаучите нещо от гореизброеното може да се заемете с приложно програмиране, но преди това е добре да познавате науката "Компютърни системи и технологии (КСТ), която, често асоциират с програмиране, каквото тя не е.

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

Направи ли ви впечатление, че до тук не съм написал и дума за "език за програмиране"?

Съществува термин "образовано невежество".

Дипломата не ви дава знания. Тя ви дава образователен ценз. Знанията са резултат от вътрешна мотивация, усилен труд и практически опит.

Преподавателите по компютърни науки в средните училища в голямата си част са лица, които (в най-добрият случай) ще ви позволят да се явите на олимпиада (няма да коментирам каква) и да спечелите някой медал по "програмиране". Ако обаче ги попитате за реален проблем те няма да могат да ви помогнат. По лоши учители от преподавателите ви са тези от курсовете и тези които "много ги разбират нещата". Като цяло не е трудно да не ги забележите. Те ползват три основни мантри, които повтарят като папагали, а именно: "Linux", "Open code", "Pyton". Трите магически думи, които те произнасят с фанатичен пламък в очите и леко пренебрежителен тембър, който да внуши респект сред простосмъртните. Е, понякога добавят и "Java", "C#", ".NET", "Objective C" и други подобни, но това е само когато говорят пред верни последователи на "правата вяра".

В университетите (най-вече в тези, в които се изучава "Computer Sciences") е още по зле. Но по-зле от това е идеята, че "английският език е важен за изучаване на програмирането като такова"

Английският език може да нанесе огромни щети на начина ви на мислене.

Това има име. Нарича се когнитивно-дефиниционна криза.

Мога да ви дам куп примери що за идиотщина е английският език и как "индийските програмисти" унищожиха (и продължават да рушат) IT индустрията. Истината е, че индийците, които масово се настаниха в университетите и във фирмите са или от кастата на търговците или от кастата на брамините с всички произтичащи от това последици. За тях всички други са от "низша каста" (за справка случая с белгийския посланник и сандвичите, който е показателен) и те правят това, което са правили винаги - насаждат невежество. В това им "благородно начинание" им помага The British Council. Но това е една друга тема.

Сега да се върнем към ... ПРОГРАМИРАНЕТО.

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

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

В този ред на мисли - Няма "достъпен" и "сложен" език за програмиране. Всеки един програмен език има своя специфика.

Всеки може да бъде научен да програмира, но не всеки може да създаде качествен код.

Казано с други думи има разлика между това да напишеш програма и това да създадеш приложение, което да прави това, което се очаква от него.

Държа да завърша с това, че това не е просто мое лично мнение.

Това, което пиша е мение, на едни от най-големите имена в областта на програмирането като Доналд Кнут, Грейди Бук, Здравко Гаич, Хавиер Пачеко, Ралф Джонсън, Ричард Хелм, Ерик Гама и много други за които мнозина не са и чували. Лично аз не спирам да се уча, но предпочитам да се уча от тези, които са доказали на практика, че познават материята, която обсъждаме. Такива хора са достойни да бъдат наричани учители. Те рядко използват чуждици, а още по рядко си служат с неразбираема терминология. Те дават реални примери и ви сочат пътя. 

Оствам на разположение за въпроси по тази тема.

Признавам, че лично за мен тя предствлява голям интерес и ще се радвам да се запозная с аргументирано мнение различно от моето.

С уважение

Георги Тодоров Герасимов

(Avatara)

  • Like 1
Link to post
Share on other sites

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

В този случай формулите са типичен пример за използване на числени методи. Записани в този им вид те позволяват да бъдат преобразувани в алгоритми , а от там в програмен код,

 

P_002.png.50e66793b84b8a0dc1f39487ae9076c3.png

 

Знам, че за мнозина от вас това изглежда "много сложно", но ако притежавате базовите познания, няма как да не видите до какви елементарни, от гледна точка на математиката, действия е сведено всичко. На практика нямате нищо друго освен събиране. Изваждането и умножението са частни случаи на събирането.

Така изглежда един от хилядите елементи на програмирането. Това, не се решава на олимпиади, а и не се изучава във ВУЗ. За да научите какво е това и за какво се ползва е нужно да ви се наложи да решите РЕАЛЕН проблем.

И ако някой все още се чуди за какво служат тези формули ще му отговоря:

Това е част от алгоритъма на системата за управление реална система за противовъздушна отбрана (ПВО) 

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

Всички сложни задачи трябва да бъдат сведени до нещо много елементарно (в нашият случай до събиране), което да бъде лесно за реализация.

Колкото е по-елементарно едно решение, толкова по ефективно и надеждно е то.

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

Всяка една програма има свой жизнен цикъл. Колкото по-голям е той, толкова по-добра е програмата.

 

 

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

Link to post
Share on other sites

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

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

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

Цитат

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

Не мога да не се съглася, но с условие. Може би допускам грешка правейки паралел, но нали така се учим да говорим. Отначало думи и цели изрази, и след разбиране на същността (значение и правила за използване) и с достатъчен набор словестни единици и изрази започваме да вербализираме мисълта си така, че да могат хорат около нас да ни разбират.

При всички езиците за програмиране се говори за едно и също нещо, синтаксис. Толкова ли да са подобни или нещо бъркам. Вярвам, че уместно приведах примера с програмите за 3D моделиране. ДА, никой не те учи как се проектира/моделира необходими са набор от много други знания плюс въображени и абстрактно мислене, но аз говоря за познаване на средата за разработка. Просто съм убеден, че с програмните езици е същото, но някой или не знае къде e ключът или преднамерено и упорито го крие за да изглежда като:

Цитат

учител .... с фанатичен пламък в очите и леко пренебрежителен тембър, който да внуши респект сред простосмъртните

В личен план не че не бих започнал от теория на информацията, числените методи, цветни графи, ЛПА, но от контекста на вашия обширен коментар става очевидно, че тези неща не се учат дори в университетите или поне не във всеки. Защото ако не там тотогава къде? Или се предолага, че става въпрос за гений. Постоянно чувам как някой "учител" казва, че обучаващите се ще научат толкова колкото са възможностите им, което по същество е обида. Причината да мисля така е, че имам наблюдения как една и съща дисциплина преподавана от двама или трима се усвоява по различен начин, а интелектуалното и образователно ниво на обучаващите се е видимо твърде близко за да бъде прието като обективен фактор за "провал". Спомням си за един израз: "Онези който не разбират материята се изразяват най-сложно." Може би не е 100% вярно, не зная.

Едно нещо е 100% истина. Ако искаш да запомниш наученото трябва да го приложиш на практика. Тоест без проект/идея в главата все по-често че се сблъскваме с парадокса на вишиста: "Дипломира се и забравя!"

Мислих доста по отношение на логиката. Нали до голяма степен това представлява алгоритмичното мислене. Та се замислих по повод на това, че повреме на писане на програмен код с цела решаване на някаква задача (в най-широкия смисъл на израза, повреме на обучение) трябва да се следва някаква логика. Много курсисти/ученици изпитват големи (понякога) непреодолими трудности (отказват се) в начален етап от обучението. 

И на фона на всичко което изписах до момента ето мята гледна точка как да по-лесно да проумеят нещата. Разхождането изглежда елементарно нещо, но далеч не така. Мозъкът взема решение с кой крак да тръгнете, работи постоянно за запазване на равновесието, корегира стойката при ходене и при симптоми за падане. Чрез очите следи за препятствия и опасности и т.н. и т.н. Всичко това може да бъде описано с блокова схема и разбито на по-малки задачи. Такъв подход не е за слабоумни, въпреки че така биха се изразили някои "учители". Тоест един от важните моменти е да научат курсистите първо да мислят после да кодят. Изглежда никой не го прилага. По аналогичен начин би могло да се подходи и към самият синтаксис. Научаването на ключовите моменти до пълна автоматизация е самият ключ, но както вече писах някой/и упорито поддържат информационно затъменение по въпроса. В крайна сметка всичко е пари. Ако всеки знае как, нама да плаща за да го учи.

А къде в цялата "игра" е абстактното мислене, до колко полезно е? Задължително ли е или всички го притежаваме (макар и в различна степен) и то се проявява по естествен път в процеса на учене. Това вече може да се окаже едно от онези неща за които се твърди, че не са научаеми.

 

  • Like 1
  • Thanks 1
Link to post
Share on other sites

Здравейте,

Благодаря Ви за коментара, защото това е дискусия, при това аргументирана и определено следваща определена логика.

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

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

Причината за това е т.н. "Станфордски синдром".

Името идва от техническият унивесситет в Станфорд (Stanford University), възпитаниците на който нанесоха непоправими щети на IT индустрията. Всичко започва в момента, когато група студенти биват привлечени като системни администратори на UNIX сървъри. Това е фатална грешка, тъй като в един момент те решават, че знаят всичко и започват яростна кампания срещу Дж.Форсайт и К. Молер, които не са на това мнение. Това е типичен конфликт между поколенията, но той е иницииран от вън. 

Тази кампания активно е насърчавана от AT&T, компания която както тогава така и сега е доказала, че е в състояние да възпроизвежда невежество в невиждани мащаби.  

Именно AT&T са основните поддръжници на Linux, обратният полски запис (на ккойто ще отделим специално внимание), най-лошият мрежови стандарт (Стандарт А), както и на много други неща, но за тях малко по-късно.

Основната причина за безумната злоба на AT&T е категоричният отказ на военните да приемат безумните им (от технологична гледна точка) решения. Те не могат да преглътнат, че губят търгове от Bell, IBM, Oracle и други компании, които проявяват прагматизъм и имат добри технически екипи. И тук на сцента се появяват Брайт Керниган и Денис Ричи и започва стремоглавото спускане в пропастта.

Но нека бъдем последователни.

Синтаксисът на езиците за програмиране е резултат от тяхното функционално предназначение. 

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

Вие много правилно сте написали: "При всички езиците за програмиране се говори за едно и също нещо, синтаксис. ".

Това е много вярна констатация. Говори се за "синтаксис", но някак се избягва темата за функционална насоченост. Това е класическа стратегема за отклоняване на вниманието от важното и насочването му към второстепенното (незначителното).

Нека разгледаме кой програмен език за какво точно служи:

 

НОРМАЛНИ ЕЗИЦИ ЗА ПРОГРАМИРАНЕ

(програмни езици подчинени на логиката и здравия разум)

 

FORTRAN - Прекрасен език за програмиране, когато ставая дума за научни и инженерни разчети. Самото име на езика, недвусмислено ни показва за какво става дума. FORmula TRANslator - транслатор на формули. Определено Джон Бекус и колегите му от IBM и NASA са си разбирали от работата. Самият Бекус разработва това, което днес познаваме като нотация (запис) на формалните езици за програмиране. Джон Бакус е член на Академията на науките на САЩ.

 

ALGOL - Това е първият език за програмиране от високо ниво сертифициран от International Federation of Information Processing (IFIP). Името на езика същои е показателно ALGOrithmic Language - Програмен език за алгоритми. Тук имаме типичен инженерен подход и инженерно мислене. В резултат на това е създаден език, който е основата на всички императивни езици за програмиране. И тук отново се сблъскваме с името на Джон Бекус и т.н. "нормална форма на Бекус", която по-късно е усъвършенствана от Питър Наур.

 

ADA - Създаден специално за нуждите на Министерството на отбраната на САЩ (Department of Defense, DoD). ADA се използва при разрабортка на софтуер за вградения автоматизирани системи, работещи в реално време. Преди всичко това са бордови системи на военни обекти. Езикът е модулно-структурен при това с висока степен на типизация. ADA дава началото на това, което наричаме "обектно ориентирано програмиране". Езикът носи името на Ада Лавлейс.

 

PL - Procedural Language. Процедурно разширение на Structured Query Language (SQL), разработено от Oracle. Произхожда от ADA. Използва се за разработка на форми, отчети и процедури. На практика присъства във всички системи за обработка на бази данни (СУБД). Банки, финанси, управление на производствени процеси и много други приложения.

 

LISP - LISt Processing language (често на жаргон наричан "езика на Бог"). Създаден от Джон Макартни. Това е човекът, който въвежда термина "изкуствен интелект" и който също като Форсайт работи и преподава в Станфорд. За първи път в LISP се използва автоматично разпределяне на паметта и събиране на "боклука". LISP e функционален регистронезависим език.  Колкото абсурдно да звучи съвременните езици за програмиране като синтаксис не са нищо пвече от подобие на този език. LISP е стандартизиран по ANSI. Когато говорите за AutoCAD трябва да разбирате LISP (AutoLISP). 

 

PROLOG - Език за логическо програмиране. Използва предикати и математическата логика на Хорн. Това е първият език, който работи въз основа на съпоставяне на образци. Кросплатформен език. На практика Java и .NET са някаква разновидност на PROLOG. Важно е да се знае, че това е езикът, който Япония използва за създаване на софтуер за компютрите от пето поколение (第五世代コンピュータ, за това мога да говоря с часове, защото има убийства, разузнаване, международни скандали и много пари). За справка - в момента ние ползваме компютърни системи от четвърто поколение.

 

PASCAL - Процедурен език създаден от Никлаус Вирт, като базов език за обучение по програмиране. Вирт е известен със закона според който: "Програмите стават толкова по-бавни, колкото по-бързи стават компютрите.". Pascal е строго типизиран език. Това е език за структрурно програмиране. Използва се в над 20 апаратни платформи и 10 операционни системи. Стандартизирам по ANSI.

 

DELPHI - Императивен, структурен, обектно ориентиран език за програмиране с най-високата степен на статична типизация на използваните променливи съществувала някога. разработен е в Apple (не, не е грешка) от групата на Лари Теслер, известна с идеите си свързани с взаимодействието "човек-компютър". Именно на Теслер дължим "бързите клавиши" (комбинациите Ctrl+C, Ctrl+V и т.н.). Той е водещ инженер в компании като Xerox, Apple, Amazon, Yahoo. Не друг а Теслер работи над т.н. "текстови процесор". Теслер създава заедно в Вирт Object Pascal. Delphi е изключително мощен мултиплатформен език за програмиране (един код за Windows, iOS, Linux, Android, MAC OS, FreeBSD, Kolibri OS и др..). DELPHI е регистронезависим език.  Delphi има клонинги - Lazarus и Kylix, който е специално разработен за програмиране на приложения за Linux.

 

Забелязахте ли, че всички "нормални" езици за програмиране се използват за управление на процеси? Това е фундаментален признак от гледна точка на техническата кибернетика и не само.

 

ЗАЩО ТОВА СА "НОРМАЛНИ" ЕЗИЦИ ЗА ПРОГРАМИРАНЕ?

Като начало защото са създавани именно за програмиране и за управление на ситеми уи процеси.

Това са изключително авангардни езици за програмиране, ако ги сравним с "модерните" в моменмта.

 

Ето няколко елементарни примера:

В Delphi извикването на конструктора на базовия клас се извършва явно, за разлика от C++ и C#. Това позволява пълен контрол над базовите конструкции, което не може да се реализира по никакъв начин на C++ или C#.

За разлика от C#, Delphi позволява създаване (инстанция) на екземпляр от класа, съдържащ абстрактни методи. Под абстрактни ще разбираме такива методи, кото не нямат реализация, но са важни за функционирането на програмата. Това се реализира посредством т.н. "виртуални функции". В C# отсъства понятието "виртуален конструктор".

В Delphi се използват два полиморфни механизма - класически и виртуален

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

 

И НЕЩО, КОЕТО Е ИЗКЛЮЧИТЕЛНО ВАЖНО, КОГАТО ГОВОРИМ ЗА СИНТАКСИС.

В Delphi, а и в повечето "нормални" програмни езици присвояването на стойност на променливата  се записва като := , което е заимствано непосредствено от математическата нотация. Знакът за равенство = е оператор за проверка на равенство, който връща булево значение (TRUE или FALSE, ИСТИНА или ЛЪЖА).

При всички C подобни езици (C++, C#, R, Perl, Ruby, Python, Java и др.) за присвояване се използва знак за равенство без две точки =. Когато се извършва проверка за равенство се изписва ==. Това често поражда атипични грешки и е в пълен разрез с математическата логика.

 

ИЗПОЛЗВАНИЯТ В C ПОДОБНИТЕ ЕЗИЦИ, КАТО C++, C#, R, Perl, Ruby, R, Python, Java И ДР. СИНТАКСИС Е НЕПРАВИЛЕН. ТОЙ НЕ ОТГОВАРЯ НА МАТЕМАТИЧЕСКИТЕ СТАНДАРТИ, КОЕТО ВОДИ ДО ПОГРЕШНО РАЗБИРАНЕ НА ПРОГРАМИРАНЕТО КАТО ПРОЦЕС, ОСНОВАВАЩ СЕ НА МАТЕМАТИЧЕСКА ЛОГИКА.

 

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

Регистровата зависимост (зависимостта горен/долен регистър или големи.малки букви) е отдавна отречена. Въпреки това тя е "свещенната крава" в Linux,  а от там във всички C подобни езици.

Но това не е кой знае какъв проблем. Съществуват много по-серозни недоразумяния, за които умишлено или не се премълчава.

Ето един съвсем конкретен пример.

Както Java, C#, Python, Perl и много други "административни" езици са създадени като програмни езици обслужващи управляема среда. 

На практика тези езици не позволяват "ръчно" да управлявате разпределението и управлението на паметта, защото това се извършва от средата, за която са предназначени. На пръв поглед, това е "удобно" от гледна точка на безопасността, но влияе изключително отрицателно върху общата производителност.

Има и още нещо, което е добре да се знае.

Всички "нормални" езици за програмиране, макар и създадени в САЩ и Централна Европа, в настоящият момент са най-ненавиждани именно там. Това е в резултат на политическа конюктура и тук отново се връщаме към компанията AT&T и най-вече към нейните лобиски клонове.

В момента има изключително силна "динамика" на развитие на езиците за програмиране.

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

Ако ми позволите един пример, за да се аргументирам.

 

Пример:

Едно дете може да ползва дистанционното управление на телевизора, за да сменя канали, за да усилва или намалява звука.

Въпросът е: А дали това дете може да проектира и изработи дистанционно управление или телевизор?

 

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

Защо се случва това?

Всичко е много просто и се корени в начина, по който се финансира образованието. Този начин се основава на субсидиране. Субсидирането обаче предполага оценка от технически некомпетентни лица, които се явяват разпоредители на субсидията. Резултатите са налице.

Но както вече писах всичко започва в Станфорд в края на 70-те години на миналия век. Това е началото на деградацията, на която сме свидетели и днес. Имате ли представа какво са писали Керниган и Ричи за другите езици за програмиране? Няма да повярвате колко злоба се е изляла. При това самите те прзнават, че C e език за програмиране който създава много сериозни проблеми именно заради ... синтаксиса.

Не. Не е грешка.

Разполагам с първото издание на тяхната книга "Езикът C". Освен това точно там те открито признават, че C е написан специално за UNIX и то за версия, използвана в DEC PDP-11.

Но те не спират до тук.

Денис Ричи чистосърдечно признава, че синтаксисът на C не е нищо повече от ...  команди на UNIX. 

Но дори това не е най-сериозният проблем. Сега внимавайте много добре.

 

Синтактичните структурио на програмните езици наследници на C са базирани на използването на т.н. "обратен полски запис"  Reverse Polish Notation (RPN)

 

Обратният полски запис е математическа нотация (запис), в която всеки оператор следва всички негови операнди.

Обратният полски запис е въведен от Бърк, Уорън и Райт през ... 1954 година. Използва се за да бъде ограничен достъпа до компютърната памет и за да може да се използва стека за изчисляване на израза. Обратният полски запси се използва при калкулаторите (за справка HP-12C) и при UNIX базираните системи (в т.ч. езици за програмиране). 

Мисля, че изводът, че "съвременните" езици за програмирена (които в голямата си част са "стекови") на практика са езици за програмиране на ... калкулатори.  

Мисля, че е излишно да споменавам, че и дума не може да става за абстрактна логика и някакво реално развитие. 

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

Извинявам се за дългият пост, но се опитвам да защитя своята позиция. Важно е да знаем истината.

Темата е много интересна за мен, а и Вие поставяте много правилни въпроси. 

  • Like 1
Link to post
Share on other sites

Ще продължим ли темата?

Да поговорим например как през 1970 година една статия на Уинстън Рой повлече IT индустрията към дъното.

Но въпросът е колко са чували за т.н. "модел на водопада"?

Или да поговорим как точно се определя кой език е популярен, защото това е много сериозен въпрос. До колко информацията, която масово се разпространява е обективна или става дума за елементарна дезинформация (все пак има много добре работещи формули, въз основа на които може да се изчисли доколко едно твърдение е достоверно). Да не се окаже, че езиците за програмиране, които са "модерни" не са нищо повече от опит големи групи от специалисти да се превърнат в неконкурентноспособна маса. Дали web-програмирането е толкова актуално, колкото някой се опитва да ни убеди? Има много въпроси, които изискват отговор.

 

Link to post
Share on other sites

Извинявам се, че пиша с такова закъснение, но наистина бях зает. НО, няма да скрия, че и не очаквах такъв интерес след втория ми коментар. Не само Вие сте изненадан от българското форумно простраство.

Отговорите ви не са дълги и трудни за четене. Аз не припадам от възтор по пропагандираното в стил туитър красноречие. Това НЕ е маркер за знание и интелект, и определено ще ми бъде интересно някой обосновано да докаже, че в 5(ПЕТ) ред текст може да изчерпа коя да е тема. Дискусиите по своята същност са мрежа. Всеки въпрос който се разисква, е като възел свързан с огромен брой други възли посредством връзки. Не може да побутнем един възел, без да размърдаме няколко съседни, които дори не са пряко свързани, но не поради друга причина, а защото повечето хора са свикнали връзката да е буквално физическа и ако минава през да кажем междинно звено (буфер..., каквото и да е) то значи нямат връзка помежду им. Така се оказва, че ако читателят/слушателят е от онези чието внимание не може да бъде задържано достатъчно дълъго отдавна е "изпуснал нишката", а от там и интересът спада в геометрична прогресия. Но това е отделна много обширна тема. Нека не се отклонявам повече.

Така както представяте действителността ще се окаже, че съм бил прав (не, не сън единственият) твърдейки, че нещо в системата на образованието (в най-общия смисъл) преднамерено и с умисъл, но не от вчера, е сбъркано до ниво да се забравят/изкривят фундаментали знания. Но е много перфидно замислено. Или хората са си загубили мозъците или е перфидно. Напомня на моделът използван в проект "Манхатън" - разделяне на знанието така, че всеки да знае точно толкова колкото да му позволи да си върши работата. Това е все едно в училища и университети да има предмет "Как да бъдем перфектните работници (роби, органични машини)", а с подходяща лобистка, академична, медийна пропаганда, ентусиазмът към новия предмет би изумил и самите лобисти.

Да разбирам ли обаче, че отричате необходимостта от така нареченото абстрактно мислене в програмирането? Според мен такова нещо всъщност не е критично важно и дори си мисля, че е своебразен филтър срещу ентосиасти, освен ако абстактно не визира въображението. От няколко седмици проектирам нещо. Вчера приключих и докато се "разхождах" из виртуалното пространство попаднах на информация относно това която сътворих и бях същисан. Оказа се, че съм преоткрил топлата вода. Това по същество е значимо постижение, тъй като проектирах нещо което дори не ми е специалност. Няма да споделям подробности, но се оказва, че не е никак лесно, но понеже ми трябваше след седмици работа го постихнах без дори да подозирам какво права. Тоест вярно е твърдението, че нуждата създава иновации.

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

Така за мен възниква следния въпрос; Къде е "Светият Граал", или кой е "Светият Граал" или кое е крайъгалния камък в това знание, ако въобще съществува?

Достатъчно подробно описвате предназначението на различни програмни езици. НО. Как се създава програмен езика без търсената от мен база от знание. Да не опира до гениалният един процент от населението? Не ми се вярва обяснението да е толкова елементарно. 

Тук държа да се знае следното. Не приемам умишленото усложняване на обучителния процес под предлог, че така талантите изпъкват на преден план! 
И после какво?...... Следва да цитираме другаря Сталин, има разминаване в желание и възможности. Това е вярно, но е далеч по-сложно и не може да го хвърляме в лицето на всеки с или без повод. Програмирането едва ли е ядрената физика в компютърните науки. Човек е способен да създаде нещо или ако е абсолютен гений (такива хора не се учат от другите, те създават невъзможното според другите) или ако има основата плюс опита. Аз не бих могъл да измисля програмен език служещ за конкретни цели.

Понякога се чувствам като докоснат от по-виша сила, някак си благословен. Причината е, че през годините не рядко попадам на "специалисти" които са казвали: "Това няма как да се направи." Времето доказа, че съм бил прав казвайки многозначително "Ще видим....".
След знанието, опитът е всичко останало.

Чета ви и ми се струва, че скоро може и да се доближа до фундаментът за който говоря. Дали това не са DELPHI, PASCAL, LIPS?

Цитат

Обратният полски запис е математическа нотация (запис), в която всеки оператор следва всички негови операнди.

Глупаво или не, но не бях обърнал внимание на този факт. Изглежда, че и аз, като стотици хиляди други, съм "жертва" на вредния корпоративен лобизъм.
А по отношение на субсидиращите и разпределителите на субсидии всичко е сведено до примитивното: "който плаща той поръчва". Независими са само образователните групите за домашно обучение.

Цитат

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

Именно. Аз търся истината. Но в този случая такава или не съществува или упорито се крие. Преди няколко години слушах интервю на виден (колко да е виден) български учен (по памет археолог, жена), която сподели нещо което ме шокира. Според нейните думи знанието трябва да се предава като нещо елитарно насочено към точно опрделена група. На практика, в момент на пълно откровение, призна че знанието не е право а привилегия. И водещият едва прикри възмущението си. Имам наблюдения, че все повече са единомислещите по този въпрос от които поколенията ще зависят. Сякаш някой се е заел с живата екранизация на "Прекрасния нов свят".

Цитат

 

Ще продължим ли темата?

Да поговорим например как през 1970 година една статия на Уинстън Рой повлече IT индустрията към дъното.

Но въпросът е колко са чували за т.н. "модел на водопада"?

Или да поговорим как точно се определя кой език е популярен, защото това е много сериозен въпрос. До колко информацията, която масово се разпространява е обективна или става дума за елементарна дезинформация (все пак има много добре работещи формули, въз основа на които може да се изчисли доколко едно твърдение е достоверно). Да не се окаже, че езиците за програмиране, които са "модерни" не са нищо повече от опит големи групи от специалисти да се превърнат в неконкурентноспособна маса. Дали web-програмирането е толкова актуално, колкото някой се опитва да ни убеди? Има много въпроси, които изискват отговор.

 

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

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

Edited by o00o
  • Thanks 1
Link to post
Share on other sites

Леко разводнихте темата.
Въпроста „от къде е най-добре да се започне в програмирането?“  за мен има прост отговор. Първо щом си решил да се замислиш по темата, то нещо те е привлякло към нея. Обикновенно е някаква нова технология или въпроса „ама това как се прави?“. Започва голямото четене и ако си от „нашата“ порода заедно с четенето започва и разписването на простите примери от различните уроци, които четеш. Теглиш базови инструменти, пишеш базов код или правиш някакъв базов пример и обикновенно това е началото.  

Отговороът на  „от къде е най-добре да се започне в програмирането?“ - От себе си! 

Това е начин на мислене, опознаване, непримиримост и любознателност.  С какъв език ще започнеш обикновнно се определя от това какво първо те е накарало да търсиш нещо по даден въпрос. Ако си любопитен как може да си направиш преимущество в някоя браузърна игра ще се срешнеш с HTML, JavaScript или PHP (поне в началото). Ако те интересува, как да си направиш хак за CS то вероятно ще се сблъскаш с предложения от тези езици (C/C++ или Python). 

Та за да програмираш трябва желание, ако го имаш то имаш най-важното нещо!!!

  • Thanks 1
Link to post
Share on other sites

По-скоро се отдадохме на анализ. :$

Има нещо, което е изключително важно: Каква е ролята на формалните методи и каква на абстрактните?

Това е фундаментален въпрос.

Но има нещо, което е много по важно: Какви въпроси трябва да решаваме?

Съгласете се, че дори да сте перфектен математик няма как да създавате алгоритми въз основа на аналитично представяне. Алгоритмите се базират на числени методи, а там математиката е доста различна. 

Що се отнася до абстрактните методи те са обект на неформалната логика, която също е специфичен раздел от числените методи.

Но има нещо много по-сериозно. Нещо, което се пренебрегва, а то е от изключително значение.

Ако ми позволите ще си послужа с два примера, които касаят всеки един от нас.

 

Пример 1

Фирмата X (умишлено избягвам конкретни имена на фирми) произвежда специализирани машини за баланс на джанти.

Фирмата Y произвежда аналогични машини.

Софтуерът, използван от фирмата X гарантира точност от 0,01 kg, а тази на Y до 0, 001 kg.

Софтуерът на фирмата X гарантира максимално отклонение от 0,05 от градуса, а този на фирмата Y - 0.,02 от градуса.

Въпрос:

Машините на коя от двете фирми гарантира по-дълъг пробег на автомобила, камиона, автобуса и защо?

Машините на коя от двете фирми гарантира по-голяма сигурност на пътя и в критична обстановка?

 

Промер 2

Фирмата А, произвежда делители на честота за мрежи високо напрежение.

Фирмата B, също произвежда делители на честота за мрежи високо напрежение.

При софтуерът на фирмата A е допусната грешка, в резултат на която делителят на честота дава отклонение от 0,5 оборота на всеки 30 дни.

Въпрос:

Какви биха били последиците от това отклонение?

 

А сега още един въпрос, над който си струва да помислим.

Знаете ли колко е загубил;а Република България от загуба на т.н. "нематериални активи" в периода 1990 до 2000 година?

За десет години сме загубили над 87,4 милиарда USD (осемдесет и четири милиарда щатски долара).

А за периода 2000 до 2020 година (която още не е приключила)?

 

Въпрос:

А какво можехме да направим с тези пари?

 

Но и това не е толкова важно.

о00о сподели, че е направил нещо, което някой друг е направил преди него.

Защо това да е проблем?

Той не е копирал, а сам е достигнал до решението, което е много различно и тук отново се връщаме на темата "необходимост".

В случая поради липса на планиране и предварително разузнаване е търсено решение, което е било налично.

Да, но в процеса на търсене са усвоени познания и навици, които едва ли биха били усвоени, ако решението бе копирано.

Поправете ме ако греша.

Но ние някак избягваме темата за образованието като такова.

Ако позволите отново пример.

 

Пример 3

За да може един специалист да лекува той трябва да се обучава минимум 14 годин. 

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

В университета се изучава анатомия, обща физиология, биохимия, биофизика и т.н..

Без тези познания и без определени практики никой не би допуснал специалиста да упражнява лекарска професия.

Имаме програмист, който пише софтуер за апарати за образна диагностика, но той няма и най-малка представа какво е основнио уравнение на компютърната томография. за да поправи този пропуск той би следвало да познава поне това уравнения. Да, но при него се използват тройни интеграли.

За усвояването на тройни интеграли се изискват познания по математически анализ и в частност п "Избрани глави от мателматиката" (ИГМ).

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

Да добавим към това, че програмиста трябва да има поне малка представа за вътрешни заболявания, а това вече е от сферата на "Медицински информационни системи" или МИС.

До тук нито дума за програмиране и език за програмиране.

При това от нас се изисква нещо от вида: http://www.dclunie.com/dicom3tools.html

Въпрос:

Ако бяхте фирма за производство на ехографи, бихте ли се доверили на програмист завършил едномесечен курс за програмиране?

 

А дали често ролята на средното образование не се пренебрегва? 

 

 

ЗАКЛЮЧЕНИЕ

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

(казано просто: От грешки в определен вид софтуер се умира)

Когато говорим за системи за управление на процеси трябва да бъдем внимателни (за справка контрол на полетите, енергетика, медицина, военно дело, непрекъсваеми процеси, металургия, химическа промишленост, аеро-космическа промишленост, корабостроене, силови агрегати и пр.).

В България програмистите бяха лишени от избор. Това стана, когато бе унищожена промишлеността.

В момента в България има само 9 (девет) стартъп компании, като всички са в София. Осем са в тотален упадък и само една се опитва да се задържи. Това е жестоката истина, а тя не ме радва.

 

 

 

 

 

 

Link to post
Share on other sites

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

Както и да е. Според мен се получи много интересна тема.

Wikipedia не е извор на познанието, но....
Започнах с PASCAL, защото 

Цитат

Паскал (Pascal) е структурен език за програмиране, създаден през 1970 г. от проф. Никлаус Вирт (Niklaus Wirth) от Швейцарския национален технологичен институт. Основната му цел е била да служи като език за обучение, т.е. да бъде лесен за научаване и да учи на добър стил на програмиране. Езикът, кръстен в памет на френския математик Блез Паскал, се използва от широк кръг програмисти, като добива особена популярност при студентите и учителите заради простотата си.

Аз нямам проблем да се върна в първи клас, след като това е необходимо. Времето ще покаже дали съм на прав път.

  • Thanks 1
Link to post
Share on other sites

Абсолютно вярно. Pascal е създаден като език за обучение.

Интересното започва след това.

По обясними причини Pascal се налага като основен език за военни приложения (най-вече заради предимствата, които предоставя при обработка на паралелни процеси, но това е една друга тема).

С появата на Delphi езикът се превръща в основен инструмент в разработка на приложения за СУБД. Много от информационните системи на службите за сигурност са разработени на тази база. Причините са много, но преди всичко това са предимствата, които MIDAS предоставя като технология. А по-късно с DataSnap предимствата стават повече от очевидни, най-вече при големи проекти (клас A, AA и АА+).

Delphi се превръща в основно инструмент на руските и азиатските хакери. Не просто вируси, а вируси без аналог. Причината е, че много лесно може да интегрирате код на assembler и ако знаете (или има кой да ви покаже) може да пишете малко по размер, но много ефективни приложения.

С появата на Indy се слага край на митовете за Linux. Не остава сървър върху който "делфийците" да не са експериментирали с "оръжието за масово поражение". :$

Основна цел на атаките Linux и UNIX сървъри. Цел на атаките са специализираните  структири, както и военни сървъри. И това е само началото.

С появата на мобилните приложения, започва да става още по-забавно. 

Android наследява всички недостатъци на Linux, a iOS си остава тясно обвързан с UNIX.

Руснаците не проявяват интерес. Те отдавна се занимават с промишлените системи, но китайците, корейците и арабите се развихрят с пълна сила.

В специализираните форуми все по-често се срещат постове на китайски език и уникални примери.

Според полковник Хадестат II, който определено е експерт по киберармиите на Далечния Изток САЩ и Русия са чувствително изостанали.

И в същото време тече активна десинформация. Добре планирана и съставена според Директива TS.3600.1. Христоматиен пример за това как се спазва стратегически план. Целта е пълно елиминиране на всяка потенциална заплаха. 

Всеки е свободен да вярва в каквото желае, но силата е в този, който е в състояние да наложи пълен контрол над "желязото".

Войната в Нагорни Карабах, на която сме свидетели, доказа по безпоренначин, правотата на подобна концепция.

Азърбайджан използва т.н. "баражни боеприпаси" (дронове камикадзе).

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

Нека не забравяме, че годината е 2020 и военната техника има своя желязна логика изразяваща се в трите основни изисквания: ПО-РАЗРУШИТЕЛНО, ПО-ЕВТИНО, ПО-ТРУДНО ЗА ПРИХВАЩАНЕ. С една дума - ПО-ЕФЕКТИВНО.

Войната има своя логика. Но нека се запознаем с това, което отдавна не е тайна и може да видите свободно по време на военните изложения. Повярвайте това е много малка част и има много по-забавни решения. :$

Наричат ги "тихите убийци". Приличат на детски играчки, но са с ужасна разрушителна мощ.

 

BB_001.png.33c2740c080bc1149c5623a749943e4e.png

 

Те са типичните "умни" оръжия. В редица случаи управлението им се базира на т.н. "изкуствен инстинкт", за което съм писал в доклада си "Философиа на кибернетичната война".

Моделите с ударни функции (като Predator) доказаха своята ефективност, срещу асиметрични действия в Афганистан и Пакистан. Основният проблем при този вид модели обаче си оставаше високата цена. Съгласете се, че е абсурдно да се жервта БЛА (Безпилотен Летателен Апарат) на стойност над 4 милиона USD.

Беше повече от очевидно, че подобни решения бяха безперспективни.

Първоначалната идея бе взаимствана от полета на ястреба (това се нарича "бионика"). Целта е да се създаде нещо малко, което може да се рее продължително и да нанася светкавичен удар върху набелязаната цел.

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

Баразжните боеприпаси са известни като T-RAM (Tactical Remote Aerial Munition), което може да бъде преведено като "Тактически Дистанционно Управлявм Въздушен Снаряд - ТДУВС".  Един от основните доставчици за ВВС на САЩ е компанията Textron Defense Systems. 

 

BB_002.png.4c8344ba7422f6e9d312c367a07dcbd6.png

 

Но изискванията стават все по-големи. На снимката виждате KillerBee, разработка на компанията Raytheon. БЛА е в състояние да носи 14 кг. боен заряд, като е в състояние да се ползва и за създаване на т.н. "тактически рой", при това великолепно се синхронизира със системите за автоматично управление на бойните действия. 

В Министерството на отбраната на Великобритания от години съществува програма, носеща наименованието Indirect Fire Precision Attack (точен удар по цел извън непосредствената видимост). Резултатът от тази програма е комплексът Fire Shadow, който e с доста впечатляващи параметри. Крейсерска скорост от 150 до 300 км/h при обхват от 100 км (което позволява да се ползва като алтернатива на далекобойната артилерия и ракетното въоръжение). 

И за да ме разберете за какво говоря, към момента са продадени такива системи на обща стойност над 10,8 милиарда EUR (десет милаарда и осемстотин милиона), а колко са поръчките можем само да предполагаме. 

 

BB_006.png.f2a82dc8d912d33ff6c2a3787aba5e32.png

 

Но не си мислете, че всичко е толкова сложно. Все пак понякога се изисква да се решават много по елементарни тактически задаачи.

 

BB_005.png.e6c455e4f519e5b4fd2662002ae2f4cc.png

 

Switchblade тежи едва 1 кг. Средна скорост - 60 км/h. Продължителност на полета 20 до 40 минути. Способни са да атакуват с изключен двигател (планиращ полет). Изключително опасен боеприпас, който е много ефективен при сухопътни сражения.

Но и това не е всичко. За специалните части (тактическите и оперативните разузнавателни звена) има компактни и леки многогункционални системи.

 

BB_003.png.1078791ce698aa5e0b7b656c9f950da8.png

 

На горната снимка виждате една разработка на Textron T-RAM , която е предназначена за ликвидиране на малки подразделения на противника. Използва се при специални операции.

 

BB_004.png.b7a55dac3dd774d2dd3682b3136d28cc.png

 

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

Но ...

Ще ме запитате: Ама какво общо има това, за което пишеше с програмирането и избора на програмен език?

Има. Има и то как.

Вие как смятате. Дали тези, които разработват подобни системи и печелят поръчки за милиарди, ще оставят някакви "аборигени" от България да им се бъркат в бизнеса? :D

Вие наистина ли вярвате, че някой ще ви допусне до развойните звена на тези компании или (не дай Бог) ще вземе да публикува кодовете на управление в GitHub или друг подобен публичен ресурс?

Допускате ли само за миг, че в някой университет някой ще ви научи как се създава софтуер за подобни апарати?

Нека бъдем откровенни.

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

Защо не прочетете още веднъж, но много внимателно този пост и да се замислите?

Въпросът е какво искате да правите?

Какви програми искате да пишете и за какво?

Играчки за пубери, за които смисълът на живота е да се "тагнат" пред мола или съвременни тактически симулатори?

За някоя "кифла", която иска да обяснина всички, че "... оня Гошко е голям мръсник, защото заглежда Мими" или да поговорим за това как се разработват системи за пораснали мъже?

Повярвайте има разлика и тя определя избора на език и не само.

Като се замисля и до сега в internet масово се тиражира твърдението, че ADA е език за програмиране на системи с изкуствен интелект, който вече не се изучава, но ние сме недоверчиви.

Като се замисля, май няма и никаква видима връзка между радиоуправляемите мини и Delphi. :$

Но все пак трябва ли да вярваме на всичко написано? :D

  • Thanks 1
Link to post
Share on other sites

Според мен е важен и избора на източник, от който да учиш. 

Аз бих препоръчал книгата  Програмиране с Pascal принципи и методи  от Т.М. Смит. 

Потърсетея в сайтовете за книги втора употреба. 

  • Thanks 2
Link to post
Share on other sites

Blagovest, това касае донякъде синтаксис и език, но в момента нещата са много силно развити.

На практика RAD Студио Delphi отдавна не е само и единствено Pascal, а е нещо много по-мащабно.

Това налага един много по различен подход в процеса на обучение. 

 

Задължително е обучението да е обвързано с практически решения за различни платформи.

 

Много е важно това да бъде разбрано. :$

Ето една прекрасна статия, която обяснява много. Горещо я препоръчвам. Мисля, че трябва да се изчете много внимателно,. защото дава отговор на много важни въпроси, пред които всеки един програмист или начинаещ такъв се изправя.

 

https://blogs.embarcadero.com/rad-studio-with-delphi-the-original-low-code/?utm_source=Eloqua&utm_medium=email&utm_content=Article-201021-Blogs

 

 

Link to post
Share on other sites

Може и да ви се стори безперспективно, но преди да прочета отговорите вече бях изтеглил Learn Pascal in three days and learn it well. Но след като има добра книга на Български език ще си я набавя.

Иначе всчко изписано до момента е безкрайно инрересно. Бих казал, че ми изглежда повече от обикновенно енциклопедично знание или еродираност.
И формулите горе бяха забелязани, но на този етап поне на мен ми идват в повече. :$
За китайската следа в Азербайджан бях изненадан, докато другите са ясни. И за австралийската военна индустрия не подозирах. Е това започва да напомня тънко-тънко за социално инженерство. :) И ако дори 10% от описаното е вярно, наистина живеем в матрицата. Нали САЩ и Русия бяха лидери във военните технологи....

Както и да е за програмирането ми е приказката. Че няма начин да стана част от екипа на Тектроник то е ясно xD, но ще се престоря, че съм стъпил на правилния път. Малко неравен и по-напред вероятно и трънлив, за кратко надявам се, но е важно "нещо" (макар и въображяемо) да мотивира достатъчно и така, че да не спираме.

На 21.10.2020 г. at 21:43, blagovest написа:

Според мен е важен и избора на източник, от който да учиш.
............

А това колко е вярно....  От доста време забелязвам, че все по-малко хора го осъзнават. То нали всеки и всичко е авторитет и авторитетно. Има "сили" които много "помагат" да го осъзнаем.

Цитат

Те са типичните "умни" оръжия. В редица случаи управлението им се базира на т.н. "изкуствен инстинкт", за което съм писал в доклада си "Философиа на кибернетичната война".

Намерих го, тепърва ще го чета и за линка в края благодаря. Да видим колко ще разбера и от двете.

 

п.п.
Много им завиждам на чужденците за военната и космическа индустрии. Колко благинки получи човечеството от тези разработки, малцина осъзнават, а за изследователската дейност и научни разработки.... това е цял роман. Но докато развитите осъзнават, че науката чака човека, има места където упорито вярват в обратното твърдение. Някои дори го бъркат с Бог, но Той е все така високо, а царят не просто е далеч, но се оказа с нос по-дълаг и от Боратино. Простете за "лирическо отклонение".

Edited by o00o
  • Thanks 1
Link to post
Share on other sites

Здравейте,

Има още нещо, което е много важно да се знае.

ЗАЩО ОБУЧЕНИЕТО В Т.Н. КОМПЮТЪРНИ НАУКИ ПРОТИЧА ПО "ТОЗИ" НАЧИН?

Защо се изучават едни програмни езицуи, а други се отричат? Защо се субсидират "проекти" със съмнителна стойност, а значими такива никога не получават финансиране? Защо непрекъснато се говори за big data, artificial inteligence (AI), когато към момента няма нито една работеща теория, която да обяснява какво точно трябва да се разбира под "интелект". Защо използваме понятия като ERP, CIS, Data Mining, Web Mining, Online Analytical Processing (OLAP) и др., без да разбираме защо всичко това е толкова важно и каква е крайната цел, на подобен вид дейност?

А ако се окаже, че всичко е много по-елементарно, отколкот някой се опитва да ни го представи?

Не вярвате ли?

Ето ви едно малко потвърждение на моите думи.

 

Pic_023.png.efe57b34bf8b34fdae59a6aaa90a1e13.png

Стандартна структура на DSS

 

Всичко, за което питам по-горе на практика не е нищо повече от отделни компоненти на т.н. "Системи за поддръжка на решения" (Decision Support System, DSS). Това са апаратно-програмни системи, които помагат да се взимат правилните решения, когато става дума за държавно управление, управление на финансите, управление на военни операции и т.н.. Тези системи са всичко онова, което виждате по филмите. Но в случая. говорим за съвсем реални системи, които управляват това, което се случва в една или друга точна на Земята. Не знам дали разбирате за какво точно говоря, но това е РЕАЛНАТА власт, а не това, което ви покават по телевизията.

 

E_003.png.79b4b27b37f5031eb952d0db47e60323.png

Как вашите колеги от Турция използват DSS

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

А помните ли развойните центрове, към заводите?

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

Но въпросът е: Зао в МОН никой дори не опитва да предприеме някакви стъпки за да разреши този проблем?

А имате ли представа какво е нивото и какви са познанията, на други ваши колеги? А как се провежда обучението им?

 

E_002.png.f4c069ba2ea25bd0e040013c98289dc5.png

Провеждане на практически занатия покиберсигурност.

Отговорът е много прост и той има свои съвсем конкретни документи, които обясняват всичко на достъпен език.

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

Първият (и най-важен от тях) е MR-661-OSD, издаден през 1996 година, в който подробно се обяснява какво е  "национална военна стратегия, спрямо потенциални заплахи". Документът заменя директива TS.3600.1.

Но има един доста по-забавен документ, който обяснява цялата тази истерия с Linux, java, "облаците", web и пр.. Това е директива PDD-68, която влиза в сила на 30 януари 1999 година. Обърнете внимание на датата. Това е много важно. Това е началото на края.

Но още през декември 1992 година е издадена директива TS.3600.1., за която вече споменах. Още тогава става ясно, че ако се позволи всеки да получи достъп до знания, които представляват заплаха за националната сигурност може да стане страшно. Съгласете се, че след бомбардировките над Хирошима и Нагазаки атомно оръжие не е използвано за военни цели, което обаче не може да се каже за кибернетичните такива. 

Кибернетичните оръжия както и системите за радио-електронна борба (РЕБ) се използват всеки ден в хода на реални военни операции. Това е факт.

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

В България липсва каквато и да било стратегия не замо за подготовка на кадри, но и за това как и по какви програми би следвало да бъдат обучавани.

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

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

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

Добре е да престанем да се считаме за "велики" IT-специалисти, а да се поучим от опита на държавите, които наистина са се доказали. Трябда да се научим да извличаме полезното и ефективното.

 

E_004.png.10084ae704e17659f26f37b0118d9c29.png

Отличителни знаци на някои от основните подразделения за киберзащита на САЩ.

 

Няма никакво значение на колко години сме и какви са познанията ни към момента. По-важно е какво ни мотивира и какво искаме да научим.

В кибернетичните войни няма "малки" и "големи". Има такива, които знаят и могат и такива, които наивно вярват, че кражбата на лични данни е най-великото постижение, до което може да се достигне.

От самите нас зависи, какво и как ще научим и как ще го реализираме. Никой няма да дойде и да ви помогне. Емиграцията няма да реши проблема, а просто ще ви постави под контрол. Ако вярвате, че ако учите в САЩ, Великобритания, Германия или Франция щ енаучите нещо, то значи сте абсолютни наивници.

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

 

E_005.png.91b28c7d8b45e1f93a21cece2216b45d.png

Обучението има цена тогава и само тогава, когато бъде максимално ефективно използвано.

 

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

Моля да ме извините, но ние сме мъже. Ако искате да прекарате целия си нещастен живот, като слугувате на някого за мизерна заплата (с която да си изшплащате кредита и текущите разходи) забравете за написаното. Ако мислите да ходите по някакви измислени интервюта, където някакви женици, които нищио не разбират от това, което правите ви задават абсурдни въпроси, забравете за написаното. Ако сте се примирили или не ви стиска да бъдете силни, забравете за написаното. 

За за тези, които въпреки всичко не са се отказали и са твърдо решени да продължат ... :D

 

E_001.png.2d93b614958d66787c85c7aa43119afd.png

Информационните системи са основна част от националната сигурност на една държава.

 

... мога да цитирам само една реклама на уиски: "Животът е несправедлив.".

Да. Така е, но има за какво да се живее. И никой няма да изживее нашия живот заради нас, докато ние сме заети да вършим глупости. 

И ...

Не взимайте на сериозно това, което пиша. Нали ви цитирах едни директиви. Аз просто следвам указанията на Устав СВ FM. 34-1.

Както бе писал Кърт Вонегът "Всички истини които ще прочетете са сто процентова лъжа.". :D

 

E_006.png.1c3cf52ecf84f935ffa988f21b81d494.png

 

Link to post
Share on other sites
  • 2 weeks later...

Ще продължа записките си по темата, защото ошпределено има сериозно неразбиране на важността на проблема, шпред който сме изправени.

 

ПЪРВА ОСНОВНА ГРЕШКА

Първата основна грешка, която е масово допускана е, че не се прави разлика между "програмист" (programmer), "разработчик" (developer)  и "независим доставчик на програмно осигуряване" (Independent Software Vendor, ISV). 

 

Това са три много различни специалности, изискващи различна подготовка, различен подход и развиващи се по много различен начин.

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

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

Програмистите използват езици за програмиране като PHP, Python, Ruby, Java, Java Script и други. Самият процес на програмиране се реализира въз основа на конкретно задание или за конкретен проблем. Това може да бъде електронен магазин, система за оn-line обучение или анкети и други подобни.

Що се отнася до СУБД, в редица случаи те имат предпочитание към неструктурираните такива, а от SQL-базираните в момента най-често ползват MySQL. Също така предпочитат да използват структурни текстови записи като XML и JSON, които определено имат своите предимства.

Работата на програмистите е изключително тежка и  отговорна.

Много често (когато работят в екип по голям проект) те не виждат непосредствено крайният резултат от своята работа, което е сериозен стресиращ фактор. От тях се изисква непрекъснато да следят за настъпили промени и изменения. Обикновенно програмистите работят по т.н. "ТАКТИЧЕСКИ" (краткосрочни) проекти. Понякога от програмистите се изисква решение в рамките на месец, а дори има случаи когато срокът е пет работни дни.

 

КАКВО ИЗУЧАВАТ ПРОГРАМИСТИТЕ

Най-масово допусканата грешлка е, че програмистите изучават ... "програмиране" или "програмни езици и системи". Това не само не е вярно. Подобни твърдения на практика обезценяват труда на добрите програмисти.

Ето малка част от това, което изучава един програмист:

  • Приложна математика и информатика;
  • Информационни технологии;
  • Администриране на информационни системи;
  • Информатика и изчислителна техника;
  • Приложна информатика;
  • Информационна безопасност;
  • Автоматизирани системи.

Както сами може да се убедите нито дума за програмни езици. Това обаче е базата (минимума) познания, които притежава всеки един програмист.

И ако ми позволите само един малък пример.

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

Съгласете се, че на практика говорим за комплексни познания и най-вече наличие на практически опит, който се придобива трудно и изисква време.

 

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

 

Като може да се види от така направеното определение, тов са друга категория хора. тези хора са носители на това, което на юридически език се нарича "авторски права".

Разработчиците са тези от които се изисква документирано карйно приложение. Това, което е важно се крие в думата "документирано".

Към момента разработчиците ползват като езици за програмиране (те също програмират, но малко по-различно) SQL, ALGOL, BASIC, C#, F#, J#, понякога C++, Forrtran, както и някои специализирани програмни езици.

Те използват много инженерни приложения като MatLab, Signal Lab и др.. 

За разлика от програмистите разработчиците проектират (което се различава от "изграждат"), а много често оптимизират това, което се нарича "структура на базите данни".

В своята работа те ползват ORACLE, DB2, IB, FireBird, MS SQL.

И тук има една много важна подробност.

Разработчиците както и ISV никога не ползват Linux, като основна операционна система в своята работа.

Това е основно правило, защото както вече споменах те са носители на авторски права и следват политика, различна от тази на Linux Foundation. 

Програмистите (и най-вече тези, които пишат web-базирани приложения) masowo използват Linux, но ISV и разработчиците никога и по никакъв повод не го правят. Да, те ползват Linux сървъри за определени цели, но самите разработки се извършват  в среда на Windows и то само и единствено на професионални весрии на тази ОС, някои от които дори не са достъпни за масовия потребител.

Разработчиците работят по т.н. "ОПЕРАТИВНИ" проекти. Някои от тях са с продължителност от 5 до 10 години.

 

Независимите доставчици на програмно осигуряване (ISV) са физически или юридически лица, които са елемент от екосистемата на големите компании и които разработват масово използвани крайни приложения.

 

ISV работят съвместно с гиганти като BEA Systems, Software AG, Microsoft, IBM, Sun Microsystems, Hewlett Packard, Dell, Sony, Apple, NVidia. Siemens, Rafael и др..

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

ISV са платформен необвързани.

Поради гореизложеният факт те ползват само два езика за програмиране: Delphi, C++ и Assembler.

От СУБД ползват професионалните решения на ORACLE, DB2, IB, FireBird, MS SQL.

 

ISV СА ОСНОВНИТЕПРИТЕЖАТЕЛИ НА ПАТЕНТИТЕ В IT СЕКТОРА.

 

Обикновенно работят по проекти от клас A, AA и АА+.

Това, което е важно да се знае е, че: ISV сами определят на кого, какво и как да продават.

 

Както вече бе упоменато нито една IСV не работи директно с Linux Foundation. Само и единствено тези, които работят с Microsoft по някоя от партньорските им програми го правят индиректно и то само в рамките на стриктно съблюдване на определени рестрикции.

 

ISV не работят с "отворен код" и рядко публикуват разработките си в електронен вид. 

Linux също не е напълно "открита" система, което е причина за наложените ограничения.

За правка: Нека някой ми покаже пълната документация на ядрото на Linux (визирам абсолютно всички изходни кодове, а не векторите на взаимодействие).

ISV са оснопвните инвеститори в IT сферата. Те разполагат с много "свободен паричен ресурс", който реинвестират за развитие на различни технологични решения.

 

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

 

ВАЖНО!

Някои ISV се състоят от един единствен човек, но това по никакъв начин не намаля размера на капитализацията им.

ISV отговарят за "СТРАТЕГИЧЕСКИТЕ" проекти. Минимална продължителност 20 години. Стандартно - 50 години. 

Предпочитана форма за лицензиране - CREATIVE COMMONS PUBLIC LICENSE  (CCPL).

 

 

Забележка: Знам, че написаното ще подразни мнозина и ще има много несъгласни с мен, но това са фактите. На мен също многo неща не ми харесват, но е нужно да се съобразяваме с определени дадености. Ние печелим от това, което продаваме, а не от реклама. Ние продаваме лицензи. Зад всеки един лиценз стоят години упорита работа, познания и опит. Никой не е длъжен да купува това, което се предлага на пазара. Все пак има много безлатни решения, които са достъпни. А разработчиците би следвало да се издържат от своя труд, а не да чакат подаяния.

 

 

  • Thanks 1
Link to post
Share on other sites

ВТОРА ОСНОВНА ГРЕШКА

Втората основна грешка в програмирането е по-страшна и с много по-тежки последствия от първата.

Както и при първата грешка така и тук основната причина се крие в НЕПОЗНАВАНЕ НА ФУНДАМЕНТАЛНИТЕ (СИСТЕМНИТЕ) РАЗЛИЧИЯ.

Лично аз наричам тази грешка "грешка на слабата типизация".

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

 

Всеки един програмен език има специфика с която трябва да се съобразяваме.

Тази специфика по никакъв начин не зависи от използвания синтаксис.

 

Запомнете това много добре.

 

Нека обясним това с конкретен пример, който вярвам би бил от полза за много начинаещи програмисти.

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

И така сега внимавайте много добре.

 

ВЪПРОС: КАКВА Е РАЗЛИКАТА МЕЖДУ МАСИВИТЕ ИЗПОЛЗВАНИ В PHP И ТЕЗИ В Java Script?

 

Не бързайте с отговора. Това е фундаментален въпрос, който крие доста подводни камъни. 

Като начало и двата езика наследяват синтаксиса на C.

Как се работи с масиви в C?

 

ВАЖНО!

В eзика C масивите са строго типизирани.

 

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

int myArray[10];
int fibonacci[10] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34};

Масивът може да съдържа 10 елемента, като всички са само и единствено цели числа.

Сумата от тези числа може да намерим по следния начин:

int i, sum;
for (i = 0; i < 9; i++) {
  sum += fibonacci[i];
}

 

Много начинаещи програмисти на Java Script и PHP допускат грешката, че ще могат да използват този модел. Истината обаче е доста различна.

 

МАСИВИ НА Java Script

Една от съществуващите заблуди е, че масивите в Java Script имат вида:

 

ГРЕШНА ПРЕДСТАВА

let myArray = [];
let fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34];

 

Истината е, че масивите в Java Script са нетипизирани и имат следния вид:

 

ПРАВИЛНО

myArray[0] = 5;
myArray[1] = 5.5;
myArray[2] = 'cat';
myArray[3] = [1,2,3];
myArray[4] = (a,b) => {a+b};
myArray[1000] = 'mind blown';// myArray = [5, 5.5, 'cat', [1,2,3], (a,b) => {a+b}];

Какво означава това:

  • Масивите в Java Script са с променлива, а не с фиксирана дължина;
  • Всеки един елемент в масива може да бъде от различен тип (цяло число, реално число, символен низ, масив и пр.);
  • Всеки един масив на Java Script може да се допълва или намалява.
  •  

ИСТИНАТА Е, ЧЕ МАСИВИТЕ В JAVA SCRIPT РЕАЛНО СА ЛИНЕЙНИ СПИСЪЦИ.

 

Най-елементарният начин да работите с масив в Java Script e следния:

 

ГРЕШНА ПРЕДСТАВА

let sum = 0;
for (i = 0; i < fibonacci.length; i++) {
  sum += fibonacci[i];
}

 

Ще сработи, но ...

Нека погледнем какви са опасностите, коитоо подобен подход крие от гледна точка на компютърната сигурност.

  • Използват се ненужни междинни променливи;
  • Елементите на масива, могат да приемат стойности, които нямат нищо общо с първоначалния замисъл.

Нали разбирате, че може да заменим число със символен низ, защото това е позволено?

Нека сега погледнем на елементите на масива в java Script под един различен ъгъл.

 

ЕЛЕМЕНТИТЕ В МАСИВА ПРИ JAVA SCRIPT СА ОБЕКТИ.

 

Изхождайки от тази специфика може да запишем следното:

 

ПРАВИЛНО

let sum = fibonacci
   .filter(Number.isInteger)
   .reduce(
      (x,y) => {return x+y}, 0
    );

 

Мисля, че всеки един може да направи разлика между двата подхода.

Освен това в Java Script може да използвате pop(), push(), shift() и unshift() , които предоставят много добри възможности за разработка.

 

МАСИВИ НА PHP

Масивите в PHP наподобяват тези в Java Script. Те са с променлива дължина и са слабо типизирани. 

 

$myArray = [];
$fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34];

$myArray[0] = 5;
$myArray[1] = 5.5;
$myArray[2] = 'cat';
$myArray[3] = [1,2,3];
$myArray[4] = function($a, $b) { return $a + $b; };

Това обаче не бива да ви подвежда.

 

На PHP масивите са хеш-таблици или речници.

(не бъркайте хеш-таблиците с хеш функции)

 

Това ги различава съществено от тези в C и Java Script.

Най-лесно може да разберете това, ако използваме масив с цветове.

 

$colours = [
  'red' => '#FF0000',
  'green' => '#00FF00',
  'blue' => '#0000FF',
  'orange' => '#FF6600',
];

 

Това е много сериозно предимство. Сортировката на елементите на масивите в PHP могат да бъдат сортирани както по стойност така и по ключ.

Това многократно повишава ефективността в случаите, когато се налага търсене или сортировка.

Ако например имаме списък с имена, търсенето би могло да се извърши по следния начин:

 

$users = [
  1 => 'Andi',
  2 => 'Benny',
  3 => 'Cara',
  4 => 'Danny',
  5 => 'Emily',
];
$lookupTable = array_flip($users);
return $lookupTable['Benny'];

 

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

Но нека се върнем към примера с числата на Фибоначи. 

Когато програмираме на PHP е уместно да ползваме foreach.

 

$sum = 0;
foreach ($myArray as $key => $value) {
  $sum += is_numeric($value) ? $value : 0;
}

 

Ако желаете може да ползвате и функции на много по-високо ниво.

Ако искате да копирате това, което направихме на Java Script може да използвате следния код:

 

$sum = 
  array_reduce(
    array_filter($fibonacci, 'is_numeric'),
    function ($x, $y) { return $x + $y; },
    0
  };

 

Това, което мога да кажа е това, което твърдят всички мои колеги:

Масивите на PHP са невероятно мощен инструмент, който предоставя свръх възможности, които често остават недооценени.

Ако се научите да ги използвате бихте могли да постигнете неверотни резултати.

 

ИЗВОДИ

 

Какви са основните изводи от написаното?

Съветвам всички начинаещи програмисти да се обърнат за съвет към колегите, които публикуват в този форум.

Повярвайте много от тях имат невероятен опит с PHP и Java Script, а и ако трябва да бъда искрен ще ви обяснят нещата на много по-достъпен език.

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

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

Това, на което колегите тук могат да ви научат няма да научите в никой ВУЗ и в никой курс. Възползвайте се и бъдете активни. Няма нищо лошо в това да задавате въпроси.

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

 

С това приключваме анализа на втората фундаментална грешка, допускана от начинаещите програмисти.

 

P.S. Специализираните приложение (военни, непрекъсваеми процеси, системи, работещи в реално времеи др) не допускат използване на нетипизирани програмни езици. Изискванията там са за строго типизиране. Това е важно не само от гледна точка на документацията, но също така е задължително от гледна точка на надеждността и сигурността на програмните решения.

  • Thanks 1
Link to post
Share on other sites

ТРЕТА ОСНОВНА ГРЕШКА

Третата основна грешка в програмирането касае само и единствено тези, които са решили да се развиват като независими доставчици на софтуерни решения (Independent Software Vendor, ISV).

Тази грешка (за разлика от предходните две) е умишлено провокирана. Но преди да поговорим за нея, нека уточним няколко прости правила за ISV.

 

Правило I - Потребителят никога няма право.

Никога и по никакъв повод. Извесно е още като "правило на кучето" (Кучето скача според тоягата). Като на потребиотеля не му харесва софтуера, който правите нека сам си направи такъв, който му харесва. До тогава или да ползва или да си затваря устата. В interent има достатъчно решения и никой не го задължава да избира вашето.

И сега внимавайте много добре.

Задължително анализирайте предложенията на потребителите, когато са конструктивни.

Винаги го правете и няма да сбъркате. Но ...

Никога не се поддавайте на въздействието на необосновани критики. Има и такива потребители, които вечно не са доволни от това, което получават. Те са "отровни консуматори" и като такива следва да бъдат изолирани.

 

 

Правило II - Програмните продукти задължително се заплащат.

Дали нa някого му харесва или не е без значение. Като толкова иска да има нещо безплатно нека да си вземе безплатно Bentley Flying Spur. 

 

B_001.jpg.e1b534a950989aee837c4c7af4b42710.jpg

 

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

Що се отнася до желанието на Linux някой да им работи без пари, за чест и слкава е по-добре те да поработят без субсидиране от NSA и МИнистерството на отбраната. Когато им спрат субсидиите и преминат само на продажби тогава може и да си помислите дали да работите с тях, но личния ми съвет е: НИКОГА НЕ ГО ПРАВЕТЕ, АКО ИСКАТЕ ДА ЗАБОГАТЕЕТЕ. 

Дори робите не само са работили за господаря, но са били хранени и обличани.

 

Когато Linux Foundation ме нахрани и напои безплатно, когато ми плати сметките за електричество, вода, телефон, internet и пр., когато ми плати изискуемите данъци, осигуровки и такси, тогава аз ще работя за тях без заплащане. Житейска теза.

 

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

 

 

Правило III - Вие продавате продукт, а не услуга.

Ако сте ISV трябва да си повтаряте това правило по няколко пъти на ден.

Реклама и услугу продават Amazon, Google, Facebook, LinkedIn, Twiter и др..  Това категорично не е вашия път. Ако ще печелите от това, по добре си останете на ниво сайтове.

 

РЕКЛАМАТА ОТ ГОДИНИ ДРАЗНИ ПОТРЕБИТЕЛИТЕ (за справка телевизионните реклами)

 

Идеята да печелите от реклама ще ви унищожи. Както казваше един мой приятел музикант:

 

"Ама сега тези 72 цента възнаграждение от YouTube кка да си ги поделим на пет човека?" (колкото беше групата тогава).

 

Продажбата на продукт е много гадно занимание (за справка Правило I), но повярвайте струва си.

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

 

 

Правило IV - Забравете термина "отворен код".

Никога не се подвеждайте да публикувате уникалните си кодове където и да било. Индийциуте и китайците само това чаката. След месец с учудване ще установите как фирма от Индия е спечелила държавна поръчка с това, което вие гордо сто качили в GitHub.

Отвореният код е като дарителските кампаннии на "ХелпКарма". 

Вие решавате каво и къде да публикувате. Вие решавате на кого може да имате доверие.

Не се оставяйте някой да се възползва от вашата доброта.

 

 

Правило V -Ако работите като ISV вие го правите за пари

Нищо друго не ви интересува. Това, което е важно са месечните приходи и чистата печалба.

 

Не забравяйте, че оборотът не е печалба.

Като ISV вас ви интересува само и единствено печалбата.

 

Може д ви звучи гадно, но е така. За вас като ISV смисъл имат само реалните продажби (реалните постъпления), а не нечие мнение.

Може да ви казват, че продукта, който сте направили е "пълен боклук", но когато този продукт ви донесе първите 500 000 в конвертируема валута само за седмица, тогава ще разберете за какво говоря.

Никога не се поддавайте на изказвания от рода: "Ама това някой вече го е направил.". 

Дори да е така, това е ВАШИЯТ продукт и от ВАС зависи дали ще го реализирате.

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

 

АКО НАПИСАНОТО ПО ГОРЕ НЕ ВИ ДОПАДА, НИКОГА НЕ Е КЪСНО ДА ЗАПОЧНЕТЕ НА ЗАПЛАТА.

 

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

И след като разгледахме трите основни правила на ISV е време да се върнем към третата и най ужасна грешка.

 

НАЙ-УЖАСНАТА ГРЕШКА, КОЯТО МОЖЕ ДА ДОПУСНЕТЕ КАТО ISV Е ДА СЕ ОПИТАТЕ ДА СЛЕДВАТЕ МОДНИ ТЕНДЕНЦИИ.

 

Никога и по никакъв повод не го правете.

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

Бъдете последователни и никога не се поддавайте а внушения, най-вече на медийни. Това може да ви струва скъпо.

Link to post
Share on other sites
Цитат

$users = [
  1 => 'Andi',
  2 => 'Benny',
  3 => 'Cara',
  4 => 'Danny',
  5 => 'Emily',
];
$lookupTable = array_flip($users);
return $lookupTable['Benny'];

За PHP примера ти е правилен и смислово логичен, но в практиката рядко се ползва за търсене. Проблема при този пример е, че когато обърнеш местата на ключа и стойността имайки две еднакви имена в масива, последното име презаписва първото по ключ и стойност. Тоест:

 

$users = [
  1 => 'Andi',
  2 => 'Benny',
  3 => 'Cara',
  4 => 'Danny',
  5 => 'Emily',
  6 => 'Benny',
];
$lookupTable = array_flip($users);
echo $lookupTable['Benny']; // 6

При този пример ще получиш 6, а 2 няма да съществува и в новата променлива ще имаш 5 стойности. В името на примера си дал опростен вариант, просто давам уточнение, защото масивите на езика освен, че са много мощен инструмент са и доста логически обосновани. Впрочем обектите на PHP наследяват масивите и работата с обекти става много приятна. 

  • Thanks 1
Link to post
Share on other sites

Много благодаря,

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

Обяснението ти е много по-коректно от това, което аз давам като пример. Няли нямаш против за напред да го добавям?

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

Още веднъж благодаря за коментара.

Link to post
Share on other sites
преди 34 минути, Avatara написа:

Много благодаря,

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

Обяснението ти е много по-коректно от това, което аз давам като пример. Няли нямаш против за напред да го добавям?

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

Още веднъж благодаря за коментара.

Нямам нищо против да ползваш примера от мен. Той е леко изменен вариант на твоя. Важно е да се отбележи, че търсенето по ключ е най-бързият вариант за търсене на информация в масив. Търсене по стойност става по-бавно, защото на практика трябва да извъртиш целия масив поне веднъж, докато по ключ ти питаш дали съществува ключа и го взимаш. Ще споделя тестови линк, за да видите за какво говоря:
http://sandbox.onlinephpfunctions.com/code/7657235b9cda464ab7f1697155a58bb43d6415cb

Ето кода към него:
 

<?php

$users = [
  1 => 'Andi',
  2 => 'Benny',
  3 => 'Cara',
  4 => 'Danny',
  5 => 'Emily',
  6 => 'Benny',
];

$flipped = array_flip($users);
//Print flipped array.
print_r($flipped);
echo PHP_EOL;
//Is set  key 2
echo isset($users[2]) ? $users[2] : 'User is not found!';
echo PHP_EOL;
//Found first key 2 
echo array_search('Benny', $users);
echo PHP_EOL;
//Get value of first key 2
echo isset($users[array_search('Benny', $users)]) ? $users[array_search('Benny', $users)] : 'User is not found!';
echo PHP_EOL;
//Search all results
$searchName = 'Benny';
foreach ($users as $key => $userName) {
    if ($userName == $searchName) {
        echo $key.' - '.$userName . PHP_EOL;
    }
}

Резултати:
 

Array
(
    [Andi] => 1
    [Benny] => 6
    [Cara] => 3
    [Danny] => 4
    [Emily] => 5
)

Benny
2
Benny
2 - Benny
6 - Benny

 

  • Thanks 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.