Svetlin Nakov's Blog, page 2

February 5, 2024

Академия за тийм лидери и стажанти: един успешен експеримент

Наскоро завърши успешно първата експериментална академия за тийм лидер и стажанти по софтуерна разработка, организирана от д-р Светлин Наков с подкрепата на СофтУни. Целта на начинанието беше да се срещнат топ студенти, завършващи СофтУни с опитни програмисти, които правят първите си стъпки като проектни ръководители (team leaders), за да разработят в екип реален софтуерен проект от практиката в продължение на 3 месеца (от ноември 2023 до февруари 2024), доброволно, без заплащане и без други ангажименти. Така студентите трупат реален практически опит за работа в софтуерен екип (със съответните технически инструменти, практики, срещи и междуекипна комуникация), а тийм лидерите трупат опит като екипни ръководители.

Академията се оказа доста успешен експеримент

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

В крайна сметка съм щастлив, че инициативата се оказа доста успешна. Имахме 25 отбора средно с по 4-5 участника, в които бяха създадени 25 софтуерни проекта, част от които напълно завършени и функционални, а други все още в процес на доработка и развитие. От тях 22 отбора се явиха успешно на защита и представиха публично проектите си, екипите си и екипното си взаимодействие.

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

Проекти, екипи, участници

Средно-статистическият проект в академията за тийм лидери и стажанти се състоеше от практическа софтуерна задача с обем 5-15 човекомесеца, в която бяха написани средно 50 000 – 100 000 реда код, във вид на 500-1000 commits и 100-150 pull requests.

Прави добро впечатление, че повечето кандидат тийм лидери работиха доста професионално.

Повечето проекти имаха добре организиран работен процес с дъска за управление на задачите, добре структурирано хранилище за кода (GitHub repo), ползваха branches и pull requests (PR) с code review process.Много от проектите имаха и CI / CD система, автоматизирани тестове и автоматизиран deployment в cloud среда.Всички тийм лидери бяха организирали подходящи канали за екипна комуникация (например Discord канал) и провеждаха регулярни срещи на екипа (от веднъж седмично до всеки ден). Повечето екипи ползваха ефективни инструменти за организация и проследяване на задачите и напредъка по проекта (като Notion, Trello, Click Up, GitHub Projects и други).Откъм технологии имаше огромно разнообразие: JavaScript, React, Python, Django, Node.js + Express + MongoDB, C# + ASP.NET, Java + Spring, SQL Server, PostgreSQL, PHP + Laravel и разнообразни cloud технологии.Най-много проекти имаше с JavaScript. Почти всички проекти ползваха JavaScript базиран front-end, най-често с React. Много от проектите ползваха JavaScript и от страна на сървъра.

Следва списък на проектите, екипите и участниците в тях:

Project “Transport Company Web App”

Проектът представлява фирмен уеб сайт на транспортна фирмаAlgona Ltd”: https://algona.ltd

Technologies: static Web site + service request forms + admin panel. Written in C# and .NET + SQL Server + Azure CI/CD + Azure deployment.Team management: Trello + Discord, 1 meeting / week, GitHub repo + pull requests.The scope of the project is not large: few pages + 2-3 dynamic forms + admin panel + vehicle tracking tools.Project public repo: https://github.com/IvanovvAlex/Algona

Dev team:

Alex Ivanov (team leader)Denitsa Slavkova (FE + design lead)Dimiter Blagoev (FE)Maria Zaharieva (FE)Anton Todorov (BE)Iliya Zapryanov (BE)Lyubomir Sokolov (BE)Spasko KatsarskiGeorgi VasilevProject “Motorsport Events Mobile App” (Race Fanatic)

Проектът представлява мобилно приложение за събития, свързани с моторни спортове (драг, дрифт, рали, мотокрос, събори и други): https://racefanatic.app.

Technologies: hybrid mobile app, written in JS (MEAN stack + Ionic), Node.js, Ionic, Angular, MongoDB, Swagger. Broad range of event management functionalities + admin panel. Team management: 2 meetings / week. Trello board + Discord. GitHub + pull requests.FE Hybrid Mobile App repo: ​​https://github.com/Getsov/Motorsport-Events-AppFE Admin Panel repo: https://github.com/Getsov/Motorsport-Events-adminBack End (BE) repo: https://github.com/Getsov/Motorsport-Events-Server

Dev team:

Valeri Getsov (team leader)Nikolay GavazovHristo Yonkov (BE)Dimo Hristov (FE)Pavel Dimitrov (BE)Atanas AntonovBorislav Asenov (FE)Project “AI Software Generator”

Проектът представлява app generator with AI, based on chatbot with LLM. Used AI assistants, based on Open AI API.

Technologies: Python, LangChain, OpenAI API, GitLab + CI / CD, Docker, Kubernetes cluster, auto deploy.Team management: Scrum-based development, daily scrum, 2-week sprints, GitLab, Discord.Project repo: https://gitlab.com/aspar-public/example-apps

Dev team:

Trifon Trifonov (team leader)Nataliya Benova-Walsh (FE)Yanko Rashkov (BE)Petko Todorov (BE)Georgi Lukanov (BE)Todor Daskalov (BE)Ivan Tsvetanov (BE)Boyan Todorov (BE)Peter Stoyanov (BE)Project “Real Estate Website”

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

Technologies: front-end: React + JS; back-end: PHP + Laravel + MySQLTeam management: Scrum process, Jira, 2-week sprints, 1-2 meetings / sprint.Project public repo: https://github.com/realestateSoftuni/RealEstate

Dev team:

Ivan Ivanov (team leader)Polina DrumevaKrasimir NenovGabriela IlievaKrasen StefanovProject “Cloud Admin Dashboard”

Проектът представлява internal CRM system for managing AWS cloud resources: visualizes the breakdown for used AWS services and their pricing.

Technologies: React + Refine CRM + AWS, DynamoDB, GraphQL, LambdaTeam management: Jira, Discord, 2-3 meetings / week, working with branches and pull requests in a private GitHub repo.Private GitHub repo: link unavailable.

Dev team:

Petar Nikov (team leader)Elia KuzmanovaZarko BoyuklievBoris KapitanskiProject “Online Booking Platform: mi-casa-su-casa”

Проектът представлява онлайн резервационна система за хотели, вили, апартаменти и други имоти, (като booking.com): users book properties, owners add / list properties, view reservations.

Technologies: React + PHP + Laravel + MySQLTeam management: Jira, sprints (1-4 weeks), Discord, GitHub, PR + code reviewsPublic repo (FE): https://github.com/stanislavivanov995/real-estate-app-fePublic repo (BE): https://github.com/stanislavivanov995/real-estate-app-be

Dev team:

Stanislav Ivanov (team leader)Kosta KazakovJuliyan MarinovMehmed SyuleymanSlavi KaraslavovProject “NFT Marketplace”

Проектът представлява децентрализирано блокчейн приложение: платформа за търговия на NFT токени. Състои се от smart contract + front-end app.

Technologies: blockchain, smart contracts, Solidity Infura API, React + Redux; Ethers.jsTeam management: several sprints (blockchain intro, transactions, smart contracts), GitHub project board, 2-weeks sprints, 1 meeting per week, private Discord serverProject repo: https://github.com/TL-Academy

Dev team:

Borislav Stoyanov (team leader)Chavdar TonchevVladislav StefanovNikolay RadkovDarin IvanovProject “Kitchen Helper: Recipe App”

Проектът представлява сайт за готварски рецепти с ChatGPT интеграция, генериране на аудио инструкции и други забавни функционалности (публична част + admin panel): https://kitchenhelper.eognyanov.com

Technologies: Python back-end (FastAPI) + Vue.js front-end, Docker, gRPC, RabbitMQ, GitHub workflows, CloudinaryTeam management: 2-week sprints, 2 meetings / week, Notion boards, Discord chatsExcellent project presentation (with well prepared slides)Public repo (BE): https://github.com/eognianov/kitchen-helper-backendPublic repo (FE): https://github.com/eognianov/kitchen-helper-frontend

Dev team:

Emilian Ognyanov (team leader)Dimitar DimitrovVelin IlievProject “E-Government Apps”

Проектът се състои от няколко приложения, свързани с електронно управление: електронно гласуване (e-voting), електронно преброяване (e-census).

Technologies: back end: Java, Spring, PostgreSQL, Python, Docker, Azure, Hibernate, JWT, cryptography; front end: React + TS + MUI + AxiosTeam management: Notion, backlog + sprints in GitHub, 50+ meetings, many interactions, daily meeting, Discord serverExcellent presentation (with well prepared slides)Public repo: https://github.com/ivan-parnarev/E-Government

Dev team:

Ivan Parnarev (team leader)Kaloyan MilchevYana MetodievaNedko KaraivanovBogomil BogomilovProject “Goodreads Enhanced”

Проектът представлява сайт за ревюта на книги (като Goodreads). Не е довършен.

Technologies: C#, .NET and SQL Server (back-end), JS + React (front-end)Public repo (BE): https://bitbucket.org/techleadproject/backendPublic repo (FE): https://bitbucket.org/techleadproject/frontend

Dev team:

Teodor Stefanov (team leader)Alex ElinovaVladimir MitevGeorge KostadinovIvaylo IvanovProject “Homes Building Market”

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

Technologies: .NET 8 back-end, microservices, Redis, React front-endTeam management: Jira + GitHub, pull requests, 158 finished tickets, 800+ commitsGood functionality, high state of completeness. Good teamwork and demo.Project repo (BE): https://github.com/rosteslav/HomesBEProject repo (FE): https://github.com/rosteslav/HomesFE

Dev team:

Rosteslav Yordanov (team leader)Alexandar PetrovIvaylo IvanovViktor GeorgakievPetar BelchevKristian IvanovProject “Cardflow: Trading Card Games Market”

Проектът представлява trading platform for games cards, focusing on the Bulgarian market: https://cardflow.market

Technologies: React + TypeScript front-end; Django + MongoDB back-end; Google cloudTeam management: Jira, GitHub, PRs, CI, sprints, Discord, Figma designsProject repo: https://github.com/julkascript/cardflow

Dev team:

Yulian Prodanov (team leader)Milen PalachorovValentin KaradzhovSimeon TodorovZhivko TringovKaloyan HristovProject “IoT Device Management App: Street Lights”

Проектът представлява device management system for IoT devices (Raspberry controllers), managed from a Web app, aimed to control street lights.

Technologies: MicroPython (for the controller programming), React, Material UI, Node.jsTeam management: Trello task board, GitHub, 2 meetings weekly, Discord chatPrivate project repo

Dev team:

Damian Boytchev (team leader)Atanas StoychevNikolay MarzakovProject “Bicycle Production Tracker”

Проектът представлява ERP система за проследяване на производството на велосипеди: controls the production process of custom-made bicycles (client, assembly workers, QAs, managers).

Technologies: React front-end, C# backend (MS SQL Server + Entity Framework)Team management: 950 commits, 150 PRs, task tracking with Click Up, 2 meetings per week, daily communicationProject repo: https://github.com/airfanBG/SoftuniBMX

Dev team:

Daniel Damyanov (team leader)Nikolay YuchormanskiKrasimir IlievTodor TodorovGeorgi KolevProject “Dropshipping Software System”

Проектът представлява dropshipping tracker Web app and toolset for Amazon + Browser extension UI: https://drop-shipping-trm.vercel.app

Technologies: backend (Node.js + MongoDB) + client app (React.js) + Browser extension (vanilla JS)Team management: Discord discussions and real-time collaboration, weekly sprintsVery good documentation in GitHub (congrats!)Project public repo: https://github.com/TodorYadkov/dropshipping-scraper

Dev team:

Deyan Danailov (team leader)Todor YadkovRosen DobrevMaxim KraychevProject “FitBySide: AI Fitness App”

Проектът представлява Fitness mobile app: store and track training sessions (workouts and sets), view statistics (visual with charts): https://fitbyside.com

Technologies: React + Node.js + Express, MongoDB, Mongoose, packaged as a mobile app.Team management: communication in Discord, weekly team meetings, other one by one meetings, 500+ commitsPrivate project repo

Dev team:

Iliya Iliev (team leader)Vladislav TrifonovIvelin GachevValentin ObretenovZdravka MladenovaKiril HristovPetya IvanchovaRumen RaenkovProject “Python Scrapy: E-Commerce Site Scraper”

Проектът представлява Python tools for scraping ecommerce sites (web stores): collects info like products, prices, descriptions, photos, etc. It scrapes these sites: Technopolis, Technomarket, Zora, Ozone, Technomix (for 6 hours total).

Technologies: Python, Scrapy, Playwright, headless browsersTeam management: meetings almost every day, GitHub, PR, code reviewsProject repo: private

Dev team:

Kristiyan Tashev (team leader)Atanas ChebishevYordanka StefanovaVeselin DelchevAlex KolevProject “Health Prescription Software”

Проектът представлява софтуерна система за електронни лекарски рецепти (за лекари, пациенти и фармацевти). Physicians create prescriptions for their patients, prescriptions are available for pharmacies by patient ID (personal EGN): https://health-prescription.azurewebsites.net

Technologies: C# + PostgreSQL, Azure, GitHub, GitHub Actions; front-end: JavaScript, React.Team management: meeting one per week + daily sub-team meetings + review and testing meetings; Jira board, 700+ commits, 20+ meetingsProject repo FE: https://github.com/health-prescription-team/health-prescription-software-FEProject repo BE: https://github.com/health-prescription-team/Health-prescription-software-API

Dev team:

Nikola Madzharov (team leader, BE)Ivan Kukutsov (BE)Simona Osoyska (BE)Veneta Ivanova (FE)Ivaylo Stavrev (FE)Viktor Shandrov (FE)Project “E-Prescription 2.0”

Проектът представлява digital prescriptions app (for doctors, pharmaceutists and patients) with quite good UI and pleasant UX.

Technologies: JavaScript + Node + Express + (back-end); React (front-end)Team organization: 2 meetings / week, Scrum and Kanban, YouTrack (project tracker), GitHubBack-end repo: https://github.com/e-prescription-2-0/e-prescription-serverFront-end repo: https://github.com/e-prescription-2-0/e-prescription-2.0

Dev team:

Lyuben Sirakov (team leader)Ali MusliValentin ObretenovMiroslav DimitrovProject “Learn to Drive App”

Проектът представлява приложение подготовка на водачи на МПС (за шофьорския изпит). Проектът не е завършен.

Technologies: .NET, C#, VueJSTeam management: Azure DevOps, meetings, project task boardProject repo: https://dev.azure.com/vallentink/Driving%20Course%20App

Dev team:

Valentin Kolev (team leader)Donika MarkovaAlex ManolovIvo IvanovProject “E-Books Online”

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

Technologies: Python + Django + PostgreSQL back-end; React + Vite front-endProject repo (backend): https://github.com/MitkoVtori/e-book-online-store/tree/back-endProject repo (frontend): https://github.com/MitkoVtori/e-book-online-store/tree/front-end

Dev team:

Mihaela Nemtsova (team leader)Viktor Dremsizov (front end)Teodor (front end)Viktor Dimitrov (front end)Mitko (back end)Borislav (back end)Anton Dimitrov (back end)Project “AI Social Platform”

Проектът представлява малка социална мрежа (като Facebook) с AI-генерирано съдържание (text generation and image generation with OpenAI API).

Technologies: бack-end: C#, .NET, .NET Web API, OpenAI API, Azure; front-end: ReactTeam management: Trello for task management, GitHub with branches and pull requests (PR), Discord chats, meetings 1-2 times / week + daily chat discussionsProject repo: https://github.com/SoftUni-s-Team-Lead-AI-Social-Platform/AI-Social-PlatformGood project documentation (congrats!)

Dev team:

Dzheylyan Ademova (Jenny) – team leaderAnton IlievBagriyan BorisovGeorgi YunchovMartin MilevYolinka DomuschievaProject “Fakturiko: Invoicing Platform”

Проектът представлява онлайн платформа за менажиране на фактури (invoicing platform): for accounting, invoices, clients, reports, expense management, etc.

Functionality: register / login, create customer, create, list, edit invoices, generate PDF documentsTechnologies: Docker, AWS, cloud storage, PDF generation; Angular front-end; Node + Express back-endTeam management: Kanban board, issue tracker, GitHub, Digital Ocean; 1800+ commitsProject repo: private

Dev team:

Martin Marinov (team leader)Anastasia Popova (BE)Nikolay Slavov (BE)Nina Nikolova (FE)Emil Nikolov (FE)Project “Pets Match: Connecting App for Pets Owners”

Проектът представлява Web app for connecting pet owners with other pet owners to match their pets. It implements pets matching functionality (like Tinder for pets) + pets marketplace functionality.

Technologies: C#, .NET 8 and ReactTeam management: 2 meetings / week, Jira, GitHub, new branch per task, test + production environmentProject repo: https://github.com/connectingpets/petsmatch

Dev team:

Kalin Stoev (team leader)Anton Todorov (BE)Ivaylo Milanov (BE)Ivaylo St. Ivanov (FE)Iliyan Paskov (FE)Project “Investment Tracker”

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

Technologies: Angular front-end, C# back-end, Identity server, Web API, othersTeam management: Trello board, GitHub, branch per feature, 3 meetings per week, 370 commitsProject repo: https://github.com/MihaelPavlov/Angular_Projects/tree/main/investment-app

Dev team:

Mihael Pavlov (team leader)Lachezar GeorgievСертификати

След проведените публични защити на разработените проекти в рамките на инициативата “Intern & Team Lead Academy (Nov 2023 – Feb 2024)“, следните участници в академията получават сертификати:

Team leaders certificates (for successful management of software development team):

Alex IvanovValeri GetsovTrifon TrifonovIvan IvanovPetar NikovStanislav IvanovBorislav StoyanovEmilian OgnyanovIvan ParnarevRosteslav YordanovYulian ProdanovDamian BoytchevDaniel DamyanovDeyan DanailovIliya IlievKristiyan TashevNikola MadzharovLyuben SirakovDzheylyan AdemovaMartin MarinovKalin StoevMihael Pavlov

Student intern certificates (for successful participation in a real-world software development team):

Denitsa Slavkova
Dimiter Blagoev
Maria Zaharieva
Anton Todorov
Iliya Zapryanov
Lyubomir Sokolov
Spasko Katsarski
Georgi VasilevNikolay Gavazov
Hristo Yonkov
Dimo Hristov
Pavel Dimitrov
Atanas Antonov
Borislav AsenovNataliya Benova-Walsh
Yanko Rashkov
Petko Todorov
Georgi Lukanov
Todor Daskalov
Ivan Tsvetanov
Boyan Todorov
Peter StoyanovPolina Drumeva
Krasimir Nenov
Gabriela Ilieva
Krasen StefanovElia Kuzmanova
Zarko Boyukliev
Boris KapitanskiKosta Kazakov
Juliyan Marinov
Mehmed Syuleyman
Slavi KaraslavovChavdar Tonchev
Vladislav Stefanov
Nikolay Radkov
Darin IvanovDimitar Dimitrov
Velin IlievKaloyan Milchev
Yana Metodieva
Nedko Karaivanov
Bogomil BogomilovAlexandar Petrov
Ivaylo Ivanov
Viktor Georgakiev
Petar Belchev
Kristian IvanovMilen Palachorov
Valentin Karadzhov
Simeon Todorov
Zhivko Tringov
Kaloyan HristovAtanas Stoychev
Nikolay MarzakovNikolay Yuchormanski
Krasimir Iliev
Todor Todorov
Georgi KolevTodor Yadkov
Rosen Dobrev
Maxim KraychevVladislav Trifonov
Ivelin Gachev
Valentin Obretenov
Zdravka Mladenova
Kiril Hristov
Petya Ivanchova
Rumen RaenkovAtanas Chebishev
Yordanka Stefanova
Veselin Delchev
Alex KolevIvan Kukutsov
Simona Osoyska
Veneta Ivanova
Ivaylo Stavrev
Viktor ShandrovAli Musli
Valentin Obretenov
Miroslav DimitrovAnton Iliev
Bagriyan Borisov
Georgi Yunchov
Martin Milev
Yolinka DomuschievaAnastasia Popova
Nikolay Slavov
Nina Nikolova
Emil NikolovAnton Todorov
Ivaylo Milanov
Ivaylo St. Ivanov
Iliyan PaskovLachezar GeorgievБлагодарности

Благодарности на всички участници в тази инициатива!

Благодарности на тийм лидерите, които отделиха от свободното си време, за да ръководят екипи, да менторират своите екипи от стажант-програмисти, да отговарят на технически и всякакви други въпроси, да правят код ревюта, да дават съвети, да организират и провеждат срещи, дискусии и обсъждания по проектите, които сами донесоха в тази инициатива и управляваха с мотивация и отдаденост. Благодаря ви от името на всички участници! Вие дадохте много за тази инициатива. Надявам се, че и понатрупахте лидерски опит и успяхте да добавите в портфолиото си още един проект, в който сте на позиция “team leader” на екип от софтуерни разработчици. Пожелавам ви натрупаните умения и опит да ви отварят врати в кариерното ви развитие!

Благодарности на студентите-стажанти за отделеното време, енергия и усърдие при разработката на проектите, за търпението, вложените усилия и страст, за старателната работа и произведения краен резултат. Вярвам, че сте научили много и сте записали в портфолиото си още един значим практически проект за вашия кариерен старт в tech индустрията, за който ще разказвате с трепет по интервютата за работа. Желая ви безкрайни успехи в софтуерните професии и бързо кариерно израстване!

 •  0 comments  •  flag
Share on Twitter
Published on February 05, 2024 08:13

December 16, 2023

Светът на програмирането през 2024 г.

Наскоро дадох моята прогноза за света на програмирането през 2024 г. и бъдещето на технологичните професии в България. Отговорих на основните въпроси, които всички, които се чудят дали да навлязат в професията “софтуерен инженер”:

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

Споделям видео от събитието: https://fb.com/events/346653434644683

 •  0 comments  •  flag
Share on Twitter
Published on December 16, 2023 04:33

December 13, 2023

Мнения за СофтУни БУДИТЕЛ

Понеже много хора търсят мнения, коментари и лични впечатления за гимназия “СофтУни БУДИТЕЛ”, в тази страница съм събрал линкове към най-смислените впечатления от родители относно училището на СофтУни за дигиталните професии на бъдещето:

Мнения и ревюта за гимназия СофтУни БУДИТЕЛ в Google MapsРевюта и оценки за “СофтУни БУДИТЕЛ – училище на бъдещето” във FacebookРодителски коментари и “информация от кухнята” на СофтУни гимназиятаИзбрани мнения и отзиви от родители и учители от сайта на гимназия СофтУни БУДИТЕЛОценка за качеството на обучение и образователния процес в гимназията от Националния инспекторат по образование (НИО)Мнения за гимназия СофтУни БУДИТЕЛ от форума на “BG-Mamma”Мнения от ученици и учители за гимназия “СофтУни БУДИТЕЛ” в YouTubeРевю за гимназията от образователния сайт “Данибон”Какво се случва в гимназия “СофтУни БУДИТЕЛ”: събития, постижения, проекти – FB страницаНовини от училищния живот в гимназия СофтУни БУДИТЕЛ

 •  0 comments  •  flag
Share on Twitter
Published on December 13, 2023 23:19

November 25, 2023

AI for Business and Startups – My Talk at Innowave Summit 2023

Recently I had a talk titled “AI for Business and Startups” at Innowave Summit 2023 conference, where I demonstrated how to use modern generative AI tools for many tasks to boost your business or startup. I share my slides, which are full of demo prompts and sample results:

Download my slides and demo resources:

AI-Tools-for-Business-Innowave-Nakov-Nov-2023.pptxAI-Tools-for-Business-Resources.zip

This is what I covered in this talk:

Artificial Intelligence is already here!AI Tools for Business: Where is AI Used?ChatGPT and Bard in Daily TasksChatGPT and Bard for CreativityChatGPT and Bard for MarketingChatGPT for Data AnalysisDALL-E for Image Generation

Enjoy. And sorry, I was not allowed to record a video for this talk.

 •  0 comments  •  flag
Share on Twitter
Published on November 25, 2023 06:59

October 19, 2023

Обучение AI for Business

С радост споделям на всички колеги, че от октомври 2023 г. водя заедно с колеги специализирано обучение “AI for Business” (изкуствен интелект за бизнеса):

https://digital.softuni.bg/trainings/3738/ai-for-business-october-2023

В това обучение навлизаме в дълбочина в някои съвременни инструменти като ChatGPT, Claude, Bard, Bing Chat, Perplexity, Poe, You и други AI чатботове с голям езиков модел (LLM).

В AI курса ще ви науча на тънкостите на запитванията (prompt engineering) и как да пишете ефективни запитвания. Ще ви покажа и демонстрирам как да ползвате AI инструменти при стартиране на бизнес, за изчистване на бизнес идея, за маркетинг стратегии и маркетинг кампании, за бизнес комуникации, писане на договори, оферти и други бизнес задачи. Ще ви науча как да ползвате ChatGPT и подобни инструменти вместо Интернет търсачка и какво ни дава това в ежедневието.

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

По темата за AI чатботове и инструменти в образованието сме поканили Ангел Георгиев, който ще демонстрира как се ползват такива инструменти за самообразование и в помощ на учители и преподаватели.

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

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

В основата на организацията за този курс стоя лично аз (д-р Светлин Наков), но работим заедно с няколко колеги от сферата на маркетинга и технологиите (Алекс Иванов, Ивайло Саралийски, Ангел Георгиев и други експерти), за да добавим повече стойност за обучаемите.

Запишете се за обучението “Изкуствен интелект за бизнеса” от октомври 2023 г. в СофтУни: https://digital.softuni.bg/trainings/3738/ai-for-business-october-2023.

 •  0 comments  •  flag
Share on Twitter
Published on October 19, 2023 02:39

August 30, 2023

IT индустрията в България: ключови фактори за успеха и бъдещето

По време на конференцията DevBG All in One 2023, обещах на българската ИТ общност да споделя слайдовете от моята лекция на тема “IT индустрията в България: ключови фактори за успеха и бъдещето“, в която разказвам за историята на успеха на технологичната индустрия в България, нейният растеж през годините, причините за този растеж, талантът, експортно-ориентираната екосистема, образованието (училищно, университетско и ИТ академиите), еволюцията на софтуерните фирми (от вътрешен пазар към аутсорсинг до продуктови компании и развойно центрове на международни фирми), потенциалът за растеж (поне 2 пъти), трендовете за напред, задвижвани от навлизане на AI инструментите, deep tech, наука, иновации и предприемачество):

СъдържаниеКолко е голяма ИТ индустрията в БГ?Брой софтуерни специалисти в България (по исторически данни от БАСКОМ)50К-60К софтуерни специалисти към 2023 г.Дял на софтуерната индустрия в БВП: близо 5%Защо България има толкова успешна ИТ индустрия?Концентрация на талант + експортна ориентацияОбразованието за tech индустриятаУчилищно образование по софтуерните професии и профили (2022/2023 г.)Студенти в университет в ИТ специалности (2022/2023 г.)Учащи в СофтУни (2022/2023 г.)Еволюция на БГ софтуерната индустрияЛокален пазар -> аутсорсинг фирми -> продуктови компании -> развойни центрове на чужди фирмиКолко може да порасне ИТ индустрията? Сравнение със САЩ: поне 2 пътиТрендове в ИТ индустрията: AI напредък, ИТ пазарът в България, Deep tech, наука и иновации AI в софтуерната индустрия: AI инструменти и AI-задвижвани low code платформиКак да постигнем повече като индустрия? Образование, deep tech, наука и иновации, предприемачество

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

 •  0 comments  •  flag
Share on Twitter
Published on August 30, 2023 01:41

July 8, 2023

Свободно учебно съдържание по Модул “ООП” – дипломна работа на Светлин Наков във ФМИ на ПУ

Днес (8.07.2023) защитих дипломната си работа в Пловдивския университет и станах за втори път магистър, този път по педагогика и това ми дава учителска правоспособност, т.е. мога вече и официално да съм учител по програмиране в училище. По-интересното, обаче, е проектът с който защитих, а именно разработката на безплатно учебно съдържание за преподаване на програмиране и ООП в български училища. В тази статия ще обясня защо този проект представлява особено важна кауза в помощ на училищното ИТ образование и как той помага на българските ИТ учители и на цялата ИТ индустрия и технологичната екосистема в България.

Дипломна работа: Учебно съдържание по обектно-ориентирано програмиране (ООП) в профилираната подготовка по информатика

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

Diplomna-Rabota-OOP-Nakov-POIIT-2023Download

В дипломната работа са разработени и предоставени за безплатно ползване за българските ИТ учители учебни програми и учебно съдържание (пълен комплект учебни ресурси, презентации, демонстрации, упражнения, проекти, изпити, тестове) с високо качество, на български език, за преподаване в “Модул 1. Обектно-ориентирано проектиране и програмиране” от профилиращ предмет “Информатика” от профил “Софтуерни и хардуерни науки” в профилираните гимназии.

Специализираната учебна подготовка по профилиращите предмети в българските профилирани гимназии се извършва във втори гимназиален етап от средното образование (в 11 и 12 клас). Един от най-търсените профили в днешно време е профил “Софтуерни и хардуерни науки”, в който учат около 20 000 ученика в над 150 училища, където програмиране и ИТ преподават над 300 учителя.

В профил “Софтуерни и хардуерни науки” водещите профилиращи учебни предмети са информатика и информационни технологии (ИТ). Задължителното обучение по информатика според наредбите на МОН се състои от най-малко 4 модула, от които първият и най-важен модул е “Модул 1. Обектно-ориентирано проектиране и програмиране (ООП)”. В него учениците усвояват основите на програмирането, работата с класове и обекти и принципите на ООП. Дали един ученик ще поеме успешно по пътя на програмирането и софтуерната разработка, зависи именно от този първо модул: дали ще успее да се запали по програмирането, да му стане интересно, да намери смисъл в него, за да има мотивация да учи още и още.

Презентация: дипломна работа – учебно съдържание за модул ООП – д-р Наков – ФМИ на ПУ От какво имат нужда българските ИТ учители?

В края на 2022 г. д-р Светлин Наков и фондация Софтуерен Университет”, проведоха мащабно проучване сред 373 учители по информатика и ИТ в България с цел анализ на проблемите, с които се сблъскват учителите в работния процес и ресурсите, от които се нуждаят, за да оптимизират работата си. От Фондацията знаехме, че ИТ учителите страдат и искахме да им помогнем. искахме да разберем какви са им болките и какво можем да направим за тях.

В проучването участваха 373 ИТ учителя от цяла България (от малки населени места и големи градове, от малки и големи училища, начални, основни, средни, гимназии, с най-разнообразен учителски опит и с различна специализация). Учителите категорично заявиха, че най-големият им проблем е липсата на качествено учебно съдържание по програмиране и ИТ, по което да преподават в клас:

Оказа се, че ИТ учителите имат най-остра нужда от качествено учебно съдържание за модулите от гимназиален профил “Софтуерни и хардуерни науки”, а именно: “Модул 1: ООП”, “Модул 2: Структури от данни и алгоритми”, “Модул 3: Релационни бази данни” и “Модул 4: Програмиране на информационни системи”:

Това е мотивацията да стартираме проект в СофтУни Фондацията за изготвяне на качествено учебно съдържание със свободен лиценз за преподаване на Модул “ООП в българските училища. С две думи: изготвяме и подаряваме качествени учебни материали на българските ИТ учители, за да могат децата на България да учат ефективно, съвременно и адекватно на днешните технологии, за да захранят с добре подготвен талант технологичната ни индустрия, която непрестанно расте и вече генерира почти 5% от брутния вътрешен продукт на страната ни (източник: БАСКОМ).

От анкетата на СофтУни Фондацията си направихме извода, че недостигът на качествено учебно съдържание за преподаване на програмиране и ИТ в училище е сериозен и повсеместен. Разбира се, учебни материали има най-различни (например учебници или записки), но повечето са набързо събрани от ентусиасти и качеството им не е достатъчно добро, според нуждите на учителите. Има огромна разлика между някакви учебни материали (правени за 2-3 дни от някой начинаещ) и старателно разработени учебни материали с високо качество, които съдържат учебна презентация за всеки урок и детайлно разписани упражнения с постъпкови насоки за работа, с автоматизирано оценяване, с материали за изпити и въпроси за държавен изпит. Такива материали се изготвят за половин година, с около 500-600 часа усилена работа на добре подготвен експерт по учебно съдържание, с дълбоки познания по програмиране и методика на ИТ образованието.

Учителите най-често споделят, че имат нужда от по-съвременно, по-добре структурирано съдържание, в по-удобен за ползване формат (презентации + примери + упражнения), имат нужда от много и разнообразни упражнения за различно напредналите ученици и практически проекти, с които да разпалят страстта на учениците да програмират. Ето с това се захванахме във фондацията в края на 2022 г. и след половин година усърдна работа вече сме готови с Модул “ООП” и продължаваме напред със следващите модули. За момента финансираме проекта вътрешно със средства на СофтУни и Фондацията и лични дарения от д-р Светлин Наков и Ангел Георгиев от СофтУни.

Безплатни учебни материали за обучение по програмиране в Модул “ООП”

Какво свършихме заедно с моя екип по учебното съдържание за учители в СофтУни Фондацията за Модул “ООП” от профилираната подготовка по информатика в гимназиите? Ето я статистиката за свършеното:

650 слайда: 20 учебни презентации, общо 110 страници224 задачи (задания + напътствия + автоматична проверка), 25 упражнения, общо 235 страници4 проекта с напътствия, общо 97 страници2 примерни изпита: 6 изпитни задачи, общо 7 страници3 теста за ДЗИ, 45 въпроса, общо 16 странициОбщо: 465 страници учебни материали45 доволни учителя вече използват материалитеОколо 400 часа работа на екип от добре обучени експерти по учебно съдържание1000+ GitHub commits, реализирани за около 8 месецаВсичко това е базирано на учебно съдържание от СофтУни, което е създавано и развивано в продължение на години от д-р Наков и негови колеги

Най-важното е, че постигнахме наистина високо качество на учебните материали, а това означава, че вдигаме съществено шансовете на учениците да се запалят по програмирането и да се научат да програмират на добро ниво още в училище и вдигаме чувствително качеството на преподаване в 150 училища! Можете да изтеглите свободните учебни материали по програмиране и ООП от GitHub хранилището на проекта:

https://github.com/BG-IT-Edu/School-Programming/tree/main/Courses/Software-Sciences/Module-1-OOPУчебна програма по ООП в три варианта

Нашата учебна програма за ООП модула е разработена в 3 варианта (базов – за 72 учебни часа, разширен – 108 учебни часа и експерт – 144 учебни часа). По учебен план за профил “Софтуерни и хардуерни науки” програмиране и ООП трябва да се изучават минимум в 72 часа, но от Фондацията препоръчваме двойно повече часове, ако учениците нямат предишен опит с програмирането.

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

Какво съдържат безплатните учебни материали по ООП?

Учебните материали се състоят от всички учебни ресурси, от които един ИТ учител има нужда, за да преподава качествено и ефективно модул “ООП”: добре обмислена учебна програма + обучителни слайдове (презентации за всеки урок) + живи примери (code demos) + упражнения с насоки за решаване (задачи за работа в клас + домашни) + инструкции и постъпкови ръководства + автоматизирана проверка на решенията (online judge система) + авторски решения (за ориентация на учителите) + практически проекти (учене чрез правене) + изпитни теми (за контролна и класна работа) + въпроси за ДЗИ (за подготовка за матурата по Информатика в 12 клас).

Учебни презентации за преподаване на ООП

Ето няколко примера как изглеждат презентациите на практика:

Задачи за упражнения

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

Система за автоматична проверка

Автоматизираната проверка на решения на задачи от упражнения и изпити, написани от учениците, спестява много време и усилия на учителите. Повечето задачи, които сме подготвили в учебните ресурси, идват заедно с линк към online judge система, където след изпращане на кода за съответната задача, се получава автоматична оценка (на базата на поредица от тестове):

Задачи за практически изпити

Като част от учебното съдържание за обучение в Модул 1 “ООП” са разработени задачи за контролни изпитвания в клас (изпити). Те са ориентировъчни и дават на учителя примерна структура на изпита, типовете задачи, които може да се подготвят и примерни задачи, съответстващи на учебния материал. За да се избегне преписване, препоръчваме на учителите да разработят свои задачи за всяко практическо изпитване, вместо да взимат примерните задачи наготово. Ето как изглеждат указанията към учителите за всяко контролно изпитване:

Изпитни тестове във формат ДЗИ

Като част от учебното съдържание за обучение в Модул 1 “ООП” са разработени и примерни изпитни тестове. Те съдържат въпроси за подготовка за теоретичен тест по модела на ДЗИ (Държавен Зрелостен Изпит по “Информатика” за профил “Софтуерни и хардуерни науки”).

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

Ето пример как изглеждат въпросите от теста за ДЗИ на практика:

Практически проекти

Практическите проекти имат за цел да предоставят на учениците възможност да затвърдят знанията и уменията си чрез създаването на цялостно приложение на C#, което решава някаква интересна задача (най-често реализира игра). Те се състоят от детайлно задание + постъпкови инструкции за изграждане на приложението. Опитът ни показва, че много ученици се запалват и мотивират да работят по проектите, защото те са им по-интересни от задачите в упражненията. Ето как изглеждат тези задания за проекти с постъпкови инструкции:

Оценката на учителите за учебното съдържание по ООП

На 17 май 2023 г. д-р Светлин Наков и Александрина Механджийска проведоха семинар с ИТ учители от гимназии в цялата страна с цел дискусия на постигнатия прогрес и получаване на обратна връзка относно разработените учебни материали за Модул “ООП” от профилиращ предмет “Информатика” за гимназиален профил “Софтуерни и хардуерни науки”. Анкетата за обратна връзка попълниха 45 ИТ учителя, които споделиха доста позитивни мнения:

Учебните материали са структурирани добре и са изключително полезни на учителите. Десетки анкетираните учители ги ползват постоянно.Разделянето на темите на три варианта с по-малък и по-голям хорариум предоставя гъвкавост спрямо наличните учебни часове и нивото на учениците.Презентациите са оценени много високо и форматът им много се харесва на учителите. Подходът с малко текст, много примери и анимирано показване на всяка следваща част от слайда се харесва на учителите.Упражненията като цяло се одобряват. Учителите харесват, че има много задачи, измежду които да си избират. Ползват ги и за упражнения в клас и за домашни. Харесват методиката и логиката на упражненията. Харесват възможността за автоматична проверка в онлайн judge системата. Харесват, че има и трудни и лесни задачи, за различно напреднали ученици.Наличието на практически проекти дава възможност на учениците да използват наученото за разработка на приложения и игри, като по този начин им дава мотивация да продължат да развиват уменията си в областта на програмирането. Харесват се от учителите и учениците.Има училища, в които се очаква от следващата учебна година да се направи преход от Java към C#, за да може да се използват предоставените учебни материали от СофтУни Фондацията.

Ето и няколко извадки от анкетата с обратна връзка от учители по ООП:

Планове за напред: още учебно съдържание за ИТ учителите

От СофтУни Фондацията вярваме, че най-ефективното място, в което да насочим усилията си за подобряване на българското ИТ образование, са учителите. Когато помогнем на учителите да преподават програмиране и ИТ по-ефективно, по-съвременно, по-практически и по-вдъхновяващо, ефектът се мултиплицира: един учител преподава на стотици ученици и така достигаме до десетки хиляди ученици.

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

Информатика: ООП – 11 клас – курсът е 100% завършен (към юли 2023)Информатика: Структури от данни и алгоритми – 11 клас – курсът е завършен на 80% (към юли 2023)Информатика: Релационен модел на бази от данни – 12 клас – стартирахме работа (от юли 2023)Информатика: Програмиране на информационни системи – 12 клас – планиран за 2023 г.Компютърно моделиране и информационни технологии – 5 клас – работим по курса от юни 2023 г.Компютърно моделиране и информационни технологии – 6 клас – планиран за 2024 г.ИТ: Уеб дизайн – 12 клас – планиран за 2024 г.ИТ: Решаване на проблеми с ИКТ – 12 клас – планиран за 2024 г.ИТ: Обработка на анализ на данни – 11 клас – планиран за 2024 г.ИТ: Мултимедия – 11 клас – планиран за 2024 г.

За първите 8 месеца от работата на екип “свободно учебно съдържание за учители” в СофтУни Фондацията успяхме да разработим почти изцяло учебните материали за двата най-важни курса от профил “Софтуерни и хардуерни науки”. Стартирахме работа и по курсовете “Компютърно моделиране” за 5 клас и модул “Бази данни” за 11 клас. За да се случи всичко това д-р Наков отделя по 3-4 часа всяка седмица, а ръководителят на проекта Александрина Механджийска отделя болшинството от времето си, за да наставлява екипа.

За следващите 16 месеца планираме да разработим учебно съдържание за изброените по-горе учебни курсове, като ще опитаме да привлечем финансиране от публична fund raise кампания в допълнение с лични дарения за каузата.

Чувствам се особено добре, когато задвижваме с колегите кауза с толкова позитивно и значимо въздействие върху образованието на младото поколение ИТ специалисти и технологични лидери. Тази кауза ми припомня, че човек трябва да дава своя принос към обществото според възможностите си и според способностите си, за да правим всеки ден България и света по-добро място за живеене. Аз вярвам в тези принципи и така живея. Така възпитавам и децата си.

 •  0 comments  •  flag
Share on Twitter
Published on July 08, 2023 09:35

March 19, 2022

How to Start Your First Developer Job?

Many of wanna-be-developers ask me how to start their first software developer job. In this video lesson I explain my experience, based on my 16K students alumni from SoftUni (as of March 2022) and my 20 years of experience as educator devoted to train programmers and give them a tech job.

Video Lesson: Starting the First Job in the Software IndustryTLDR: Build a GitHub Portfolio of Software Projects to Prove Your Skills and Start a Job!

Software companies want proven skills and experience to hire you as a junior developer. This experience is your GitHub profile, which you should build for 1-2 years before applying for your first tech job!

The recipe to start an IT job is simple: learn coding and technologies ➡ create a portfolio of projects ➡ learn what the employers need ➡ apply carefully ➡ interview / assessment ➡ job. It takes from 6 months to 2-3 years, mostly learning the software development profession and building a portfolio of practical software projects.

Now, I will give you the details: the steps to gain software development skills, to build a developer portfolio and CV, to find job offers for junior developers, to prepare and carefully apply for a job and to pass the technical interview.

Most career guides focus on the tech interview, but only 5% of the applicants reach an interview. I focus on the other 95%: learning, skillset development, building a portfolio of projects and CV, applying with careful preparation for each job position.

About Svetlin Nakov, PhD

I am a passionate software engineer and a tech trainer, with 20+ years of experience in the software industry, a co-founder of SoftUni – the largest tech education institution in South-Eastern Europe, with 300K+ students in the last 9 years. I am author of 15+ tech books on programming and software technologies. I am a regular conference speaker and inspirator for thousands of young people to learn programming and start an IT job.

Steps to Start a Developer Job: Learn ➡ Portfolio ➡ Apply ➡ Job

These are the essentials steps to start a tech job (in 6 months to 2-3 years, depending on the time you invest and your skills level at the start):

Goals: decide what profession to learn (e.g. Java developer, QA engineer, front-ebd developer, etc.)Learn: learn coding and software technologies, build practical skills, write 100K lines of code in 2000 hours, spend 6-36 months in your tech educationPortfolio: build a portfolio of software projects in GitHub (the most important step!)Positions: find junior job positions to apply (positions, which match your skills)Prepare: add skills to match the job requirements (learn more to match the job requirements)Apply: carefully prepare and send a job application (application message + CV + cover letter)Interview: prepare for a technical job interview or technical assessment (I will not focus on this topic, because only 5% of the applicants reach an interview)Survive: make your best to survive the trial period (learn and improve your skills constantly, especially in out-of-work hours)Define Your Career Goals: What IT Profession to Learn?

Defining your career goals should be your first step when you consider starting to invest in a software development career. My tips and tricks here are the following:

Learn about the most wanted tech professions on the market, e.g. Java developer, JavaScript developer, Python developer, C# developer, QA automation engineer, front-end developer, etc.Research the job market, talk with friends and experts, read articles, find what is hot and is possible for you to learn in a short timeframePlay with different languages and technologies! This is quite important before you months or years invest in learning. Who do you know what you like? How do you know the difference between Java and Python for example? You should try them: follow tutorials, run code examples, watch videos, play with sample projects.Answer for yourself individually: what is exciting and motivational for you? Is this a front-end and UI or code logic and algorithms? You will feel it! Try! Try! Try! This is how you will know.Start learning and check if computer programming is your passion! How?Once you start a coding tutorial or code academy, you will know if you like this. Do you really enjoy coding? Shall you do this every day for years with pleasure?Is it easy for you to learn programming? Some people learn with ease, others have different style of thinking and need more effort to learn engineering and technologies.Do you have enough time to spend in learning the software engineering professions (2000-3000 hours to an entry level developer job). If you don’t have time, how you could find it?Important: what the market needs? Once you find what technologies, programming languages and frameworks you like, match them with the market demand. For example, JavaScript is quite more popular and in demand than Perl or Ruby. At the start, for your first job learn the technologies that the market wants. Check them in the IT jobs portals.

This is an example how you could use LinkedIn Jobs to compare the market demand for different software technologies in certain locations:

Educate Yourself! Study Hard! Learn Programming, Concepts, Platforms, Frameworks, Tools

The next step, which is highly time-consuming, is to learn software development: develop practical programming skills, algorithmic thinking and problem solving skills, learn the software development fundamental concepts, learn modern development platforms and software technologies, software frameworks and developer tools.

Learning the software development profession takes time: 2000-3000 hours (from 6 months at full dedication to 2-3 years at part time).

You should learn coding, algorithmic thinking, development concepts, software development, software platforms, frameworks, tools and engineering practices. But how to learn the software development profession?

There are have many sources of tech education available (free and paid): tutorials, books, video courses, code camps and many others. For example, SoftUni Global provides an excellent zero-to-career learning program for software developers, taken already by 16K students and most of them started a tech job!

The most important part of your education for a software developer is to get a practical experience.

Practice, Practice, Practice! Learn by Doing!

Why do you need to practice? Because coding is a skill. It cannot be learned by watching videos.

The only way you can learn to code is by coding. Follow the exercises and hands-on projects from your course / tutorial / book, write the code, play with it, modify it, run it, fix the bugs and you will get the practical skills from your tech education process, not just the theory.

The recipe for developing your practical coding skills is simple and is used in all successful tech education centers (academies, courses, tech colleges, etc.): practice hands-on exercises, follow coding tutorials, do hands-on projects, gain experience, develop your own unique software projects.

How Long Does It Take to Learn Software Development?

I already explained this, but it is important to repeat it:

To learn software development for a career start, you should spend on learning 2-3 years @ part-time (or 6-12 months @ 12 hours / day). This means that you should spend of coding at least 2000-3000 hours! Measured as lines of code to write in order to reach an entry level dev job, this effort could mean 100K-150K lines of code (LOC).

Your learning speed depends on the level of your mathematical thinking, on your previous experience and on your passion and dedication to the learning process. I have students who managed to learn programming and start a junior developer job in less than 6 months, but this is not the typical case. Typical students go from zero to IT career for 2 years, while they preserve their other activities (e.g. going to the university or practicing their daily job)!

Learn by Doing! Write Code Every Day for Years!

I will repeat this again, because it is really important:

To learn programming, you need to write code! Watching videos or reading books gives you only knowledge. Solving hands-on exercises, following hands-on tutorials and developing practical projects gives you experience and practical skills. These activities are the essential part of learning the software engineering profession.

In the beast case scenario, you should code every day for 2-3 years!

2000-3000 Hours of Practice for a Junior Dev Job

Let’s do a simple calculation: 2 years = 600 days (I leave some free days) * 3-4 hours / day == 2000+ hours. Another simple calculation: 600 days * 200 lines of code (average) == 120K LOC. The same could be achieved in 6 months if you invest all your time (6 days a week): 6 months * 26 days * 12 hours = 1872 hours.

As I already mentioned, 2000-3000 hours of practical programming is enough to start a junior developer job. It takes significant time and effort to reach a junior level expertise.

That’s why the demand in the IT industry is so high and salaries are so good: it is not easy to become a software engineer and start a tech job! To get hired as software developer, you should match the industry requirements and it takes time to develop such skills.

GitHub Portfolio of Projects: Prove Your Experience

The most important part of your software developer education are your practical projects, which you build for months of hard study and hard work! In the modern software industry the best way to showcase your practical software projects is your GitHub profile.

Do you know these green blocks represent? These blocks represent the days with code commits in your GitHub coding history. More green blocks and darker green color is better.

Why Your GitHub Profile is So Important?

GitHub is the world’s largest software project hosting platform, where most developers and software companies put the code they write. It acts as social network for developers. If you are a wanna-be-developer, you should definitely build a rich GitHub profile to showcase your projects and experience!

Your GitHub profile is more important than your CV, because in GitHub your skills come with evidence of time and effort spent on practical coding.

Your GitHub profile is your proof of developer experience! Make sure your GitHub portfolio it is carefully developed, maintained and well documented.

This is extremely important if you don’t have employment history in the software industry or other evidence to prove your experience with certain software technology. Employers want skillful developers with experience. You should have experience to start a junior dev job or event an internship (typically 1-2 years)! That’s the reality. To match the requirements, you should spend 1-2 years in coding (or less in more intensive form) and leave a proven track record of your skills in GitHub.

Job Market Says: 1-2 Years of Experience for a Junior Developer Job

Job ads almost always require previous experience as software developer. These are some typical examples (taken from LinkedIn Jobs in March 2022), demonstrating what companies want for a junior dev position:

Another example of junior developer job requirements:

How to Prove Your Developer Experience before Your First Dev Job?

Typically job positions require 1-2 years of experience for junior developer. But how could you have 1-2 years of experience as software engineer before your first developer job? The answer is simple: you should work as software developer on your own educational projects for 1-2 years (or less time in more intensive form) before your first tech job. To prove your developer experience, you should build a solid GitHub developer portfolio of projects!

Your Project portfolio with your commit history proves your experience. It holds an evidence of your work as a software developer and the code you have written in the lest few years.

This is an example of a GitHub profile of my student (in its starter phase in March 2022): https://github.com/yavorhr. This guy is intensively studying software engineering and is carefully preparing his developer portfolio in order to showcase his developer skills and prove his developer experience and match the requirements for a junior dev job. This is how his history of code contributions looks like:

I am sure that he will start a developer job in the next few months, because he has proven track record of developing Java projects with Spring, Hibernate and MySQL. His CV will not be empty, but will have several projects and will show 1-2 years of experience. He will match most of the requirements for a junior Java developer position.

Number of Commits in Your GitHub Profile

Another important metric in GitHub is the number of commits. My students from the above example has 400+ commits in the last year. This means that he wrote some code 400 times and sent it to GitHub. This demonstrates hard work and proves that this guy is writing code regularly. This is a very good sign for the employers.

I know that someone could try to cheat and create a fake the commit history, but this is hard to be achieved with a bot or by hand without investing a significant effort. If the commits are fake (e.g. a bot could every day increase a number in a text file and commit automatically), but this will be easily visible, because your profile and commit history are public. It is better to invest in writing code and develop your real skills, instead of faking your GitHub profile!

Strong GitHub profiles should hold at least 500-1000 commits per year. Longer commit history is better (2-3 years is better than 6 months).

This is of course indicative, but you can use this number as reference. Committing often, after each significant and meaningful change, is highly recommended. Regular commits serve as evidence of your coding experience gained over the time! Your commit history is easily visible from the contribution map (the green blocks) in your GitHub profile:

If you are a wanna-be junior developer, track your commit history and make sure you demonstrate through your public commits that you work hard on software projects over a long period of time. This is your coding experience, which is often required in the job descriptions.

Sample GitHub Portfolios

These are a few sample developer portfolios of my students from SoftUni, who have learned programming, created several practical projects in GitHub with solid commit history to prove their skills and started their first dev job in the software industry with ease:

GitHub: https://github.com/TodorBelchev (2600 commits in the period 2020-2022)LinkedIn: https://linkedin.com/in/todor-belchev-329a58171GitHub: https://github.com/tsonewa (350 commits in the period 2021-2022)LinkedIn: https://linkedin.com/in/dimitrinka-tsoneva-65650b105GitHub: https://github.com/mischelll (520 commits in the period 2019-2020)LinkedIn: https://linkedin.com/in/mishel-ivanov-703094191GitHub: https://github.com/alexmehandzhiyska (450 commits in the period 2021-2022)LinkedIn: https://linkedin.com/in/alexandrina-mehandzhiyskaGitHub: https://github.com/Sineastra (1100 commits in the period 2020-2022)LinkedIn: https://linkedin.com/in/orfey-kostadinov-a152131b6

You could look at these profiles and find how these students have demonstrated a proven track record of software development experience through their software projects and rich GitHub commit history. As a result of their effort to build their developer skills and portfolio, they already started their first junior developer job. Their profiles prove their hard work as developers for at least 2 years. We could say that these GitHub profiles demonstrate coding experience of 1-2 years (at least).

Document Your GitHub Projects!

More than 99% of the projects in GitHub consists of just code, without any documentation: description, goals, technology stack, design and architectural decisions, API documentation, etc. This is not good!

When you are wanna-be junior developer, you should showcase your work as software developer, to demonstrate what projects you have in your portfolio and to publicly show your skills and hard work in software development through your commit history. Your GitHub profile demonstrates what languages, platforms and software technologies you have experience with. If you have developer experience and you don’t show it, how would the employers know about your skills?

GitHub is the ideal tool to publicly demonstrate your experience and skills. Work on software projects, create a solid commit history, document your project and deploy a 1-click live demo!

My recommendation for each showcase project in your GitHub software project portfolio is to follow this structure in your project documentation:

Meaningful project title, e.g. Car Reservation System, not MyApp2Short project description: goals, use cases, implemented functionality, technologies used, etc. Example: The JS app “Contact Book” holds a searchable list of contacts and provides list / view / add functionality. It is based on Node.js + Express.js + Pug.Live demo: deploy your app live in Internet to allow your future employer to see it in action through a one-click link. You may use Heroku or ReplIt or AWS or other online cloud platform. Make sure the app is accessible without a registration, or provide a sample login credentials.Technical documentation: API endpoint descriptions, architectural diagrams, class diagrams, etc. This helps external users to learn how your project works from a technical perspective.Screenshots: this is very, very important! When your project provides screenshots, visitors of your GitHub profile can get an idea what you have build in just few seconds.

These examples could serve as reference how you should document and showcase your portfolio projects in GitHub (description + tech stack + screenshots + live demo):

https://github.com/nakov/ContactBookhttps://github.com/nakov/Eventureshttps://github.com/nakov/ShortURLhttps://github.com/nakov/TaskBoard GitHub Portfolio: Tips and Tricks

Start building your GitHub profile as early as possible! Ideally, in the first month when you start writing code. Thus you will get more proof of your coding skills. Initially you will upload very simple code, but over the time, your projects will become more rich and valuable. At some time, you could hide your earliest projects and showcase only the final achievements of your work.

Constantly commit and push your daily work. This creates a commit history in your GitHub profile and makes your contribution history blocks green. Committing often demonstrates that you write code regularly. This is what employers want to see in your job application: a proof that you have long history of coding experience!

Document well your projects. Describe project goals, technologies, architecture, APIs, etc. This is an example how you can do this: https://github.com/nakov/ContactBook.

Deploy your projects as 1-click showcase. This is an example how to do this in Repl.it: https://replit.com/@nakov/contactbook.

Publish your contacts in your GitHub profile! If you are looking for a job, be open to accept messages from potential recruiters who want to offer you to apply in their company. Publish your email address and LinkedIn profile. You may get some spam, but also some job offers. This is an example how to do this:

Find Junior Positions, Matching Your Experience

The next step in your journey to your first developer job is to find junior job positions, that match your experience. Of course, if you don’t have experience, you should return to the previous steps to learn software development and develop a portfolio of practical projects in GitHub.

How to research the job market and decide where to apply? You could analyze the job market for junior positions and answer about yourself the following:

What skills employers require, which you don’t have?What skills are required everywhere in the junior dev job ads? Do you have them?Some typically required skills for the junior dev positions are: coding, Git, OOP, databases, Web technologies

Once you find your skill gaps, return back and learn more to match better the job market! Make projects in your portfolio, to keep record of your skillset. For example, if you find that most job offers in your region require PostgreSQL, you could learn it like this:

Install PostgerSQL and play with it.Follow a tutorial about PostgreSQL. Commit all your sample cod from the tutorial in a GitHub repo, named “PostgreSQL-projects”. When someone opens your profile and see your PostgerSQL projects, it will be obvious that you have some experience with this technology.

Repeat the above for the other technologies, that are in high demand and you don’t have experience with, e.g. Docker or Selenium.†

Prepare to Apply Carefully

Most job applicants don’t read carefully the job description and don’t try to match the job requirements. Of course, they have very low success rate. Be smart! Match the job requirements with your GitHub portfolio and CV and you will have significantly higher chance to get to a job interview!

This is what I recommend to do during the process of finding job offers and analyzing them carefully:

Analyze each specific job position you want to apply for! What is missing in your skillset? How can you add skills to match the requirements?If your skillset totally cannot match the job position, proceed to the next job offer.If your skillset and GitHub portfolio matches most of the job requirements, do your best to match all the others! How? Add the missing skills required by the job position.Watch a video lesson, then follow a tutorial, then create a project in GitHub, to build a public evidence that you have some experience with the required technology or skill.Example: Extracting the Requirements from the Job Description

Assume this is the job description:

You can easily extract the technical requirements from it like this:

Now, you should match these requirements in your GitHub portfolio and in your CV (professional resume). This is how you can add skills to match the job position.

Example: Matching the Requirements

Go through the technical keywords from the job description and match them with your GitHub profile. For example, lets assume, that your GitHub profile is this one: https://github.com/kristian9577.

These are the keywords from the job description from the job ad:

Java ➜ you have a solid coding portfolio with Java here: https://github.com/kristian9577/Java-OOP. You should mention this link in your CV, cover letter and job application message.Spring ➜ you have a solid practical project with Spring framework, Spring MVC, Spring Boot, Spring Data, Hibernate and MySQL: https://github.com/kristian9577/Spring-Project. Obligatory put this project in your CV, cover letter and job application. This is the strongest asset of your job application.Mockito ➜ this is a technology, that you don’t know. You don’t have any experience with it. What to do? Learn it and add it to the your GitHub portfolio! How to learn Mockito? First find lessons and tutorials: https://google.com/search?q=mockito+tutorial. Next, play with it ➜ create a Mockito project in GitHub for your portfolio. This is an excellent example how you could integrate Mockito tests in your existing Spring MVC app: https://github.com/royrusso/spring-mvc-rest-mockito.Docker ➜ this is the next technology from the job offer, which you don’t know it, but many companies want it. What to do? Learn Docker and add it in your GitHub portfolio! Watch video lessons, follow tutorials, add Docker to your existing projects.Do the same for the other required technologies from the job ad. In the above examples, these could be: Cucumber, Oracle, React, Maven. Make sure you have a link from your project portfolio in your CV and cover letter.Spend more time and effort on technologies, which are commonly required, and less time and effort to exotic technologies. In our case, React and Maven are “should learn” technologies, while Cucumber is a kind of exotic technologies, which are not widely used. You can ask friends from the software industry to help you recognize what to learn and what to skip. Here “to learn” means to have it in your GitHub and “to skip” means just to watch a video to have an idea what is it.

The above process could take several days, even weeks, but it will pay off! If you have already spent 1-2 years to learn programming and modern software technologies, why you don’t want to spend additionally 1-2 weeks to extend your skillset and match easier what software companies want from you for a junior dev position?

Invest in yourself! Extend your tech skills. Match the job requirements, then carefully apply and you will succeed! Trust me, I have helped thousands of students to start a tech job. These guidelines really work!

The Job Application: Portfolio, CV, Cover Letter

Most people start from this step and skip the previous preparation. They will 99% fail, be sure!

The carefully prepared job application is quite important to get to a job interview. Yes, it is. But you can’t have a good job application, if you don’t have skills, if you don’t have rich GitHub portfolio of projects and you have solid gaps in your skills. First, invest in your skills to match the job requirements.

If you match the job requirements, you should carefully prepare your unique job application. Yes, the job application should be unique and personal. If you copy / paste it, you will fail. Guaranteed!

The Job Application: Assets

A strong job application for a tech position should consist of:

Email / application message, e.g.Dear HR Manager, I would like to apply for the [position] in [company name], which I found [where].Write a personal text, don’t copy/paste my template. mention the name of the company, its values, culture, whatever you find interesting in the job description.Portfolio of projectsMy portfolio of projects are available at: [GitHub link]I have experience with [technology from the job requirements] during the development of this project [GitHub portfolio link] and this project [link] …Resume (CV)My resume is attached as PDF document / available online at [link]Your CV should be adjusted for the target job position! It should match the job requirements. The most important technologies for the target job position, should be put first, with more detailed description + link to your GitHub projects.Cover letter (CL): You could send your cover letter as separate PDF document or put it as free text in your application email. It should explain why you are the right candidate: skills + technical experience + personal attitude. It should be unique, personal, honest. Never copy/paste!I am the right candidate for this position, because [personal qualities]. I have the right skillset, visible from my GitHub portfolio of projects: [link]. I know the industry of [company name] from [where]. I am highly motivated to join [company name], so please give me a chance to come to an interview to prove my skills and motivation.Don’t copy/paste the above template. It is just an example to catch the idea!

The above assets could serve as reference how to apply for a tech job, after you have matched the job requirements. You should always send the following assets: application message (or cover letter), CV (professional resume), GitHub portfolio (it can be inside the CV or in the cover letter or a separate document).

Apply for the Job Carefully!

Job applications should be prepared carefully. Remember this!

If you have bugs, wrong company name, typos, bad text formatting, bad file names like `CV-new(2).docx`, this will reduce your chances.The job application should be individual, for the specific position, personal, unique (just like a love letter). It should match the certain company and certain position. It cannot be general.Never copy / paste your cover letter or application message! Your will fail, guaranteed!Adjust your CV to match the target position. Put something about each keyword from the job description. To have what to put, first perform a research and extend your skillset and portfolio.Always write your cover letter from scratch for each individual job position.Give you contacts (email, phone, etc.) and expect to be contacted! Write your full name (not badgys37 or asfd).If your age is 30+, don’t mention it. You are not obligated. If you are too young (e.g. at age of 15), don’t mention this. In your CV put a photo, where you look serious, at age of 20-30, in a business style, not from a disco bar. Match the cultural values of the target company. Some companies discourage sending photos in the CV.How to Write a CV and a Cover Letter?

Writing a technical CV and a cover letter are out of scope for this guide, because these topics are very, very common. You could find thousands of guidelines in Internet:

https://google.com/search?q=writing+a+technical+cvhttps://google.com/search?q=writing+tech+cover+letter

Much more important is not to write an impressive CV, but to put enough effort to match the job requirements with relevant GitHub projects in your portfolio and thus to have what to put in your CV. Hundreds of companies provide guidelines and CV building tools which you can leverage. In Internet you could find thousands of good and bad examples. I leave this step to you.

The Tech Job Interview / Exams / Technical Assessment

Remember that 95% of the candidates are not invited to an interview! Why? because they don’t match the job requirements. Put your effort to match the job requirements. If you really match the job description and you can prove this by your GitHub portfolio and commit history, your interview will be just a formality.

Focus on preparation: study hard, build an impressive portfolio, select job positions and apply carefully! I already explained in detail all these steps.

Understanding the Hiring Process

From the employer perspective, the typical tech job hiring process works like this:

The company posts a job ad in several job portals (e.g. in LinkedIn Jobs, in a local job portal or the social channels).Typically this is done by the HR team (or by the company owner in smaller companies).The company collects all job applications for a time-bound period (e.g. 2 weeks).This is typically done by the HR (human resource manager).Employer selects the best candidates based on their job application documents (CV, cover letter, portfolio).Obviously stupid candidatures are directly rejected, e.g. empty CV, job application full of mistakes, copy/pasted applications, and many others. This step is performed by the HR team or by the team leader, who will manage the new employees when hired.Selected candidates are either invited to an interview or to some kind of technical assessment and then to an interview.The technical assessment could be an online or onsite test or coding exam or project assignment to check the skills and motivation of the candidates.Some companies rely on exams, tests or other skill assessments, while others will just call you for an interview.After the technical assessment and the interview, the company sends a job offer to the best performing candidates.The job offer describes the offered position, job responsibilities, offered salary and benefits, offered starting date, contract terms and other details.Interview Preparation

In case you are invited to an interview, you should prepare yourself for the interview:

Research the company: learn as much as possible. What they do? What is its target industry for the job position you apply? Do you have friends in this company? Look in Internet and in the social channels. What are the company values?Research the technologies from the job advertisement! I already explained how to do this: watch video lessons, follow tutorials, create a GitHub projects with the target technologies.Prepare for typical tech interview questions: https://google.com/search?q=tech+interview+questions.

There are thousands of tech interview guidelines that you could find in Internet or in YouTube, so it is always a good idea to prepare for the most common tech questions, but do when you are invited to an interview. 95% of job applications don’t reach an interview. Focus yourself on the previous steps!

Finding Tech Interview Guidelines

If you are a software developer, you should know how to search in Internet. Put your job position + “interview questions” and you will find many good resources. Examples:

https://google.com/search?q=junior+java+interview+questionshttps://google.com/search?q=junior+javascript+interview+questionsThe Technical Assessment

Some companies prefer to give a technical assessment before inviting you to an interview.

In case you are invited to live exam (onsite or remotely), collect as much information about it and prepare yourself.If you have strong developer skills, it is likely to pass the exam with good results.If you are not well prepared, you will find out where are your skill gaps, and you may fill them before your next job application.In case you are given a practical project assignment, make your best to fulfil it in the best possible way, which matches your skills.Read the project assignment carefully and do what it says, not what is easiest for you.Write your solution, following the industry best practices: use a GitHub repository, work in branches, commit often, create documentation, write clean code, etc.Use the best practices for the project architecture, project quality, write automated tests, implement continuous integration in GitHub Actions, etc.If you have a friend, who is an experienced developer, ask him for advices, for mentorship and a for a code review. Do submit a project, which is far away from your skills. You will fail to defend you project later during the job interview.Using an external mentorship help is a good idea, but never assign someone else to write your code! This is a cheat and you will be rejected at the interview and eventually will be added to some blacklist. Remember that you will eventually start the job, not your friend!It’s always better to write your code without external help, and eventually ask a friend for a code review to improve your code, than heavily use external help!Invest in Yourself: Learn → Build Portfolio → Start a Job

If you are still reading this guideline on “How to Start Your First Developer Job“, you should remember the most important key points from it:

Your carefully prepared GitHub profile is your strongest asset to start a developer job! Your portfolio of practical projects is the proof your experience and it is the best way to demonstrate that you match the job requirements.To learn software development and start a tech job, you need to invest 2000-3000 hours in coding. This means to spend from 6 months (intensively) to 2-3 years (at part time) to develop your skills and write 100K-150K lines of code in your GitHub repository.Starting a developer job is 95% preparation (study, practice, experience, job research) and only 5% to apply for a job and eventually reach a job interview.

Follow this first dev job guide and you will succeed! Already 16K young people learned programming and started a tech job with SoftUni. Join them at:

https://softuni.org

Invest in your skills, learn programming and start a tech job.

 •  0 comments  •  flag
Share on Twitter
Published on March 19, 2022 06:51

February 15, 2022

Creating an URL Shortener App in JavaScript: a Step-by-Step Project Tutorial

Today I started a new series of project-based video tutorials for software developers. My goal is to teach software development by building real-world projects, step-by-step, from zero to a fully functional app.

The “URL Shortener” App in JS

In this tutorial, I create a simple URL Shortener app using JavaScript. The app maps links entered by users to “short links“, which redirect to the original link. We will be using Node.js and Express.js for creating the server-side Web application and Pug as a template engine. This tutorial will be split into several parts, and in each part, we will further develop our project. In the end, we will have a fully functional app.

URL Shortener in JS: Part 1 – Building the App Structure

This is the first part of the “URL Shortener in JS” project tutorial. Watch my video lesson and follow the steps to build the app yourself:

The Source Code for “URL Shortener – Part 1”

You can play with the source code from this first part of the “URL Shortener in JS” tutorial here: https://replit.com/@nakov/URLShortener-Part-1.

URL Shortener: Tech Stack

We shall use the following technology stack to build the app:

Language: JavaScriptPlatform: Node.jsFramework: Express.jsArchitecture: Model-View-Controller (MVC)User interface: plain HTML + CSSTemplating Engine: PugDatabase: FirebaseIDE: Repl.it (online dev environment)The Model-View-Controller (MVC) Pattern

The URL Shortener JS app will use the classical Model-View-Controller (MVC) pattern for building server-side Web apps:

Controller

Handles user actionsUpdates the modelRenders the view (UI)

Model

Holds data for the UI

View

Displays the UI, based on the model dataWeb Framework: Express.js

We shall use Node.js and the Express.js Web framework to build the server-side app logic. Express is a simple server-side MVC framework for building Web apps in JavaScript:

Templating Engines

We’ll use a templating engine, to build the app UI (to render HTML by a set of templates). First, let’s review how templating engines work (as a concept):

The “Pug” Templating Engine

We shall use the “Pug” templating engine for JavaScript to build the app pages and the page layout. Pug simplifies writing HTML pages by using a minimalistic syntax for HTML tags. The diagram below explains briefly how Pug renders app pages:

Start Building the “URL Shortener” App in Repl.it

First, we create a new Node.js app in repl.it (our online development environment for JavaScript):

In our main directory we have an index.js file that is automatically generated by repl.it:

After we initialize our repl.it project, we split our code logic into different folders. We create folders for:

data (it will hold the app data layer, which will hold the short URLs and will provide functions to retrieve / add / edit / delete them)controllers (it will hold the app MVC controllers, which will process the HTTP requests from the user’s Web browser)views (it will hold the app UI templates, which will render the pages)public (it will hold the app public static files, such as CSS, fonts, images, icons, etc.)

This is how our app structure should look in repl.it:

You don’t need to install manually any libraries because they will be added automatically when you start the project for the first time.

First, in our index.js we need to write the following code:

App Main Script: index.js​

This is the entry point of the app. It initializes and starts the Web server at port 8080:

const express = require('express');const app = express();app.use(express.static('public'))app.set('view engine', 'pug');const data = require("./data/app-data");data.seedSampleData();const mvcController = require("./controllers/mvc-controller");mvcController.setup(app, data);let port = process.argv[2];if (!port) port = process.env['PORT'];if (!port) port = 8080;app.listen(port, () => { console.log(`App started. Listening at http://localhost:${port}`);}).on('...', function(err) { if (err.errno === 'EADDRINUSE') console.error(`Port ${port} busy.`); else throw err;});In the first row, we import the ExpressJS node module. Then we bind it to a constant and use it to make static our public folder. Doing this will allow us to use the public folder from any part of our application.We will also set our view engine to pug. This will render all .pug files we set as views.We define constant named data and invoke the function. seedSampleData() inside it. We will create them later. Every time our project is started this function will be initialized.Our next task is to tell the index.js that our MVC-controller exists and set up it.We set our virtual port for repl.it to 8080, and tell the program to listen to this port.If there is an error, it will be automatically displayed on the server’s console.MVC Controller Actions: mvc-controller.js

This file holds the MVC controller actions, which will handle user HTTP requests (GET and POST):

function setup(app, data) { app.get('/', function(req, res) { let visitors = 0; for (const url of data.urls) visitors += url.visits; let model = { urls: data.urls, visitors }; res.render('home', model); });}module.exports = { setup };

The MVC controller defines a function (action) to handle the requests for the app front page: HTTP GET /. It does the following:

Counts the total number of URL visits.Prepares a model for displaying, which holds the URLs and the URL visits.Renders the home.pug template, which will visualize the data from the model.App Data Layer: app-data.js​

This file holds the app’s data layer. It will keep the URLs and their corresponding short URLs:

let urls = [];function seedSampleData() { urls.length = 0; // cleanup urls.push({ url: "https://softuni.org", shortCode: "su", dateCreated: new Date("2022-02-19T16:41:56"), visits: 86 }); urls.push({ url: "https://nakov.com", shortCode: "nak", dateCreated: new Date("2022-02-17T14:41:33"), visits: 160 });}module.exports = { urls, seedSampleData};In our data folder we create an app-data.js file. It will hold the data layer for the app. At the start we shall keep it in the memory and later we will implement database storage.The app-data.js component holds the urls and populates sample data (seed the data). We add an empty array that we fill with the seedSampleData() function.In our function we have 2 different objects {} that we push into the urls array.This is a temporary solution and in our next parts will be changed with a real database.Home Page Template: home.pug​

This file hold the Pug template for the app home page, it its first version (before adding the layout):

h1 URL Shortenerul li Short URLs: #{urls.length} li URL visitors: #{visitors} Finally, we create our home.pug view inside the views folder. That is the HTML page that will load when the user goes to the ‘/’ URL, that we defined in our controller.We have an unordered list ( ul ), in which we have two rows ( li ). The first is for the count of our URLs, and the next is the total sum of all visitors summed from all URL visits.If we want to print the data bound to the variable visitors, we must add hashtag # and braces { } around it so that our compiler knows that this isn’t a regular HTML text.Running the App for the First Time

When we run the app for the first time, it will install most of the required libraries:

Then, most probably, the app will show a missing dependency: the pug library:

Installing Pug from NPM in Repl.it

The missing “Pug” library can be installed using the NPM package manager from the Repl.it:

Running the App Again

After completing all the previous steps you will have a simple working JS Web app, which will be able to display some sample data in the Web browser. This is how the app may look like in Repl.it, when running properly:

This is not much, but we just started. We will handle the rest in the next parts of this video tutorial.

URL Shortener in JS: Part 2 – Building the App UI

In this second part of my “URL Shortenerproject-based JavaScript tutorial, we shall build the user interface (UI) of the app:

Site layout: the layout template (master layout holding page header part, main part and footer part)Page UI: the Pug templates for each app page (the app screens)Page controllers: the controller actions for each page, showing sample data in the UICSS styles: the desktop and mobile CSS style definitions for app header, footer, main part, tables and forms

Watch the video lesson and follow the steps to continue building the JS URL Shortener app yourself:

The Source Code for “URL Shortener – Part 2”

You can play with the source code from this first part of the “URL Shortener in JS” tutorial here: https://replit.com/@nakov/URLShortener-Part-2.

Create the Site Layout Template

The site layout template (layout.pug) defines the layout for all site pages:

Create the Home Page Template

Now we can rewrite the home page template to use the layout template:

Define the Basic CSS Styles

Let’s define some CSS styling to make the site layout look better:

Implement the “View Short URLs” Page

Define a new controller action to handle “GET /urls“:

[image error]View Short URLs: Page Template

Define a template urls.pug to render the short URLs in an HTML table:

The Short URLs Page in the Browser

If you follow the video tutorial correctly, you will get the following result, when the “View Short URLs” page in open in the Web browser:

Styling the Short URLs Table

Let’s write some CSS to make the tables look better (and in particular the table, holding the short URLs):

[image error]

With the above CSS styles, the “Short URLs” table now looks quite better:

The “Add URL” Controller Actions

To implement the “Add URL” functionality, we shall need controller actions + UI templates (views). Let’s first define the controller actions:

The “Add URL” Form

Let’s create the “Add URL” form template:

This is how the “Add URL” page should look in the Web browser:

Add Mobile Device Support

The app UI looks broken on small screens (like smartphones and tablets):

Mobile Device Support: Viewport

The visible page area (viewport) should match the device screen width:

Fixing Mobile Issues: Long Tables

Long table content will cause a horizontal scrollbar. The fix is easy:

table td { word-break: break-all;}

This is how the table will look on small screens after the above fix:

Styling the Form for Mobile

On mobile devices, where the screen is small, the “Add URL” form looks unpleasant and does not resize as expected. This is how we can fix it:

URL Shortener in JS: Part 3 – Implementing the App Functionality

Keep up with the next part of this tutorial and see how our project grows over the time. It’s coming soon.

 •  0 comments  •  flag
Share on Twitter
Published on February 15, 2022 02:21

February 10, 2022

Finance Academy: съвременно образование за инвестиции и лични финанси

Днес ще ви споделя защо СофтУни сключи дългосрочно партньорство с Finance Academy – съвременна образователна академия за инвестиции, финанси и предприемачество.

Финансовата, икономическата и инвестиционната грамотност стават все по-важен въпрос от живота на българина, особено сред по-образованите, по-предприемчивите и сред хората с технологични и иновативни професии, които традиционно имат и по-висок стандарт на живот. Българинът, обаче често пъти учи по метода “проба-грешка” или на принципа “един приятел каза“. Може би е дошло време това да се промени в посока повече образованост и натрупване на компетентност в областта на финансите.

Finance Academy: доказани експерти преподават как практически да инвестираме и управляваме финансите си

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

Finance Academy: съвременно образование с много практика

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

Към колегите ИТ специалисти: образовайте се финансово!

На програмистите и софтуерната индустрия, в която работя от 20+ години насам, мога да препоръчам финансовата академия, защото тя е бърз и ефективен начин да се научиш от доказани експерти да планираш финансово и да инвестираш разумно, вместо по метода “проба-грешка“, който е особено популярен в ИТ света. Когато си изкарал пари, е по-разумно да се образоваш, за да ги инвестираш и управляваш интелигентно, вместо да експериментираш. Затова колеги, препоръчвам ви: четете и учете, образовайте се, придобийте финансова и инвестиционна експертиза, и тя ще работи за вас години наред.

Как да се запиша за финансовата академия?

Запишете се за безплатния въведителен курс “Основи на инвестициите”, за да пробвате, видите, чуете и усетите дали финансовият свят ви привлича и дали ви е интересно да трупате знания, умения и експертиза относно финанси и инвестиции. Пробвайте, за да разберете дали Finance Academy е вашият начин да учите или ще си намерите свой алтернативен път. При всички положения печелите, защото ще повишите финансовата си култура и индиректно благосъстоянието си и качеството си на живот.

 •  0 comments  •  flag
Share on Twitter
Published on February 10, 2022 06:23