Nazwa przedmiotu:
Podstawy informatyki i programowania
Koordynator przedmiotu:
Rajmund Kożuszek
Status przedmiotu:
Obowiązkowy
Poziom kształcenia:
Studia I stopnia
Program:
Informatyka
Grupa przedmiotów:
Przedmioty techniczne
Kod przedmiotu:
PIPR
Semestr nominalny:
1 / rok ak. 2021/2022
Liczba punktów ECTS:
6
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
1. liczba godzin kontaktowych – 61 godz., w tym  obecność na wykładach: 30 godz.,  obecność na zajęciach laboratoryjnych wraz z konsultacjami projektu: 30 godz.,  udział w konsultacjach związanych z realizacją przedmiotu: 1 godz. 2. praca własna studenta – 89 godz., w tym  analiza literatury i materiałów wykładowych związana z przygotowaniem do kolejnych wykładów, wskazanie przykładów do wykonania: 20 godz.  przygotowanie do laboratorium i realizacji projektu: 14 godz.  praca na laboratorium i wykonanie zadania projektowego: 45 godz.  przygotowanie do kolokwiów: 10 godz. Łączny nakład pracy studenta wynosi 150 godz., co odpowiada 6 pkt. ECTS.
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich: 2.25 pkt. ECTS, co odpowiada 61 godz. kontaktowym.
Język prowadzenia zajęć:
polski
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym: 3 pkt. ECTS, co odpowiada 75 godz. realizacji ćwiczeń
Formy zajęć i ich wymiar w semestrze:
  • Wykład30h
  • Ćwiczenia0h
  • Laboratorium450h
  • Projekt225h
  • Lekcje komputerowe0h
Wymagania wstępne:
Bez wymagań wstępnych
Limit liczby studentów:
210
Cel przedmiotu:
Celem przedmiotu jest przekazanie podstawowej wiedzy dotyczącej podstaw informatyki programowania. Obejmuje ona: podstawy architektury systemów komputerowych, reprezentację bitową liczb i znaków, algorytmizację problemów, pojęcie złożoności obliczeniowej, zasady programowania strukturalnego, podstawowe struktury danych, wyjątki. Wprowadzone zostanie pojęcie niezawodności wraz z objaśnieniem stosowania testów jednostkowych i systemowych. Przedstawione zostaną podstawowe narzędzia programistyczne: środowisko zintegrowane, debugger, system kontroli wersji, generator dokumentacji. Praktyczna nauka podstaw programowania prowadzona będzie w oparciu o język Python. Studenci będą utrwalać wiedzę teoretyczną i zdobywać umiejętności praktyczne dzięki realizacji ciekawych zadań i projektów programistycznych.
Treści kształcenia:
WYKŁADY: 1. Wprowadzenie (2 godz.) Informacje o przedmiocie. Regulamin przedmiotu. Podstawowe pojęcia: program, algorytm. Pseudokod i schemat blokowy. Stworzenie pierwszego programu komputerowego. Debugger. Zintegrowane środowisko uruchomieniowe. 2. Podstawy (2 godz.) Podstawy architektury systemów komputerowych. Języki maszynowe, assemblery, języki wysokopoziomowe, kompilatory i interpretery. Podstawowe typy danych i ich reprezentacje bitowe, w tym reprezentacja znaków i łańcuchów znakowych. Algorytmizacja problemów, pojęcie złożoności obliczeniowej. Specyfikacja wymagań, projektowanie, tworzenie zadań. 3. Podstawowe elementy programu (2 godz.) Typy wbudowane, operatory. Podejmowanie decyzji, powtarzanie. Funkcje. Moduły i pakiety. 4. Paradygmaty programowania (2 godz.) Paradygmaty programowania wspierane przez Pythona: zasady programowania strukturalnego, podstawowe struktury danych; wstęp do programowania obiektowego: klasy i instancje. 5. Struktury danych i algorytmy (4 godz.) Tworzenie własnych struktur danych takich jak listy i drzewa. Podstawowe algorytmy: sortowanie, przeszukiwanie binarne. 6. Pobieranie i zwracanie danych (4 godz.) Pobieranie i wypisywanie danych na strumienie standardowe. Praca z plikami (samodzielnie i z użyciem bibliotek: csv, json, xml). Wyrażenia regularne. Sprawdzanie danych wejściowych i formatu plików. Argumenty wywołania programu. 7. Narzędzia (2 godz.) Środowisko zintegrowane, debugger, profiler, linter, system kontroli wersji, generator dokumentacji. Styl kodowania, PEP. 8. Niezawodność oprogramowania (2 godz.) Pojęcie niezawodności oprogramowania, testy jednostkowe i systemowe. Sprawdzanie pokrycia testami. Wyjątki. 9. Reużywalność kodu (2 godz.) O potrzebie tworzenia reużywalnego kodu oraz o wyższości dobrze przetestowanych modułów nad własnymi implementacjami. Przegląd możliwości biblioteki standardowej i wybranych bibliotek zewnętrznych. Generowanie liczb pseudolosowych. 10. Rekurencja (2 godz.) Rekurencyjne typy danych. Rekurencyjne algorytmy: problem wież Hanoi. Przeszukiwanie z nawrotami: problem konika szachowego. 11. Graficzny interfejs użytkownika (2 godz.) Prosty program z GUI. PROJEKT: Projekt to większe zadanie do samodzielnego zrealizowania. Zadnie powinno być ciekawe, np. gra. Konsultowanie, dyskutowanie postępów i ocenianie projektu odbywa się na spotkaniach w laboratorium. LABORATORIA: Na kilku początkowych spotkaniach studenci realizują oddzielne zadanie na każdym spotkaniu. Na pozostałych pracują nad małym zadaniem projektowym oraz konsultują duże zadanie, które realizowane jest samodzielnie w ramach Projektu. 1. Organizacja laboratoriów. Podstawowe polecenia systemu operacyjnego Linux. Przesyłanie plików: ssh. Uruchomienie pierwszego programu. Rozdanie tematów małego zadania projektowego. 2. Narzędzia: zintegrowane środowisko programistyczne. Debugger. Linter. Kontrola wersji. Rozdanie tematów dużego zadania projektowego, które będzie realizowane w ramach Projektu. 3. Tworzenie prostych programów: typy danych, operatory, sterowanie przebiegiem wykonania programu, pętle. 4. Tworzenie funkcji, tworzenie własnych typów danych. 5. Tworzenie własnych kontenerów: listy, drzewa 6. Implementacja prostych algorytmów: sortowanie, przeszukiwanie binarne. 7. Komunikacja obiektów ze światem zewnętrznym: konsola, pliki. 8. Obsługa sytuacji wyjątkowych. Testy jednostkowe. 9. Praca nad małym zadaniem projektowym, omówienie postępów prac nad dużym projektem. Omówienie dokumentacji. 10. Praca nad małym zadaniem projektowym, omówienie postępów prac nad dużym projektem. Ocena przyjętych założeń, ocena szkieletu programu. Przypomnienie dobrych praktyk programistycznych. 11. Praca nad małym zadaniem projektowym, omówienie postępów prac nad dużym projektem. 12. Praca nad małym zadaniem projektowym, omówienie postępów prac nad dużym projektem. 13. Praca nad małym zadaniem projektowym, omówienie postępów prac nad dużym projektem. 14. Omówienie i ocena obu projektów.
Metody oceny:
Realizacja przedmiotu obejmuje następujące formy zajęć: - wykład prowadzony w wymiarze 2 godz. tygodniowo; pierwsze kolokwium po zrealizowaniu siódmego tematu, drugie kolokwium kończące przedmiot. Na wykładzie występowały będą elementy interakcji z prowadzącym, co pozwoli na dostosowanie tematyki i tempa wykładu do rzeczywistych potrzeb. Wykłady prowadzone będą w oparciu o slajdy, których treść będzie udostępniana studentom przed wykładem. Oprócz tego przygotowane i udostępnione zostaną przykładowe kody programów, ilustrujące tematykę omawianą na wykładach. - zajęcia laboratoryjne w wymiarze 2 godz. tygodniowo; w ramach tych zajęć student, korzystając z oprogramowania i sprzętu komputerowego, będąc pod opieką prowadzącego zajęcia, będzie realizował wskazane ćwiczenia dotyczące podstaw programowania. Na laboratorium będzie odbywało się konsultowanie i ocenianie zadań projektowych. Na laboratorium oraz podczas realizacji zadań projektowych wykorzystywana będzie idea odwróconego uczenia (ang. flipped classroom). Oznacza to, że znaczną część wiedzy potrzebnej do realizacji zadań studenci zdobywają samodzielnie, a spotkania z prowadzącym są okazją do weryfikacji jakości zdobytej wiedzy oraz ukierunkowania dalszych poszukiwań. Sprawdzanie założonych efektów kształcenia realizowane jest przez:  ocenę wiedzy i umiejętności związanych z realizacją zadań laboratoryjnych – ocena z wybranych ćwiczeń laboratoryjnych oraz zadania projektowego;  ocena projektu;  ocenę wiedzy wykazanej na dwóch kolokwiach pisemnych.
Egzamin:
nie
Literatura:
Mark Summerfield: Python 3. Kompletne wprowadzenie do programowania. Wydanie II. Helion, 2010 Niklaus Wirth: Algorytmy + struktury danych = programy. WNT, 2004 David Beazley, Brian K. Jones Python. Receptury. Wydanie III. Helion, 2014
Witryna www przedmiotu:
https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103A-INxxx-ISP-PIPR&callback=g_00801e58
Uwagi:
(-)

Efekty uczenia się

Profil ogólnoakademicki - wiedza

Charakterystyka W01
ma wiedzę w zakresie tworzenia oprogramowania obejmującą techniki programowania strukturalnego. Umie tworzyć użyteczne aplikacje. Zna środowiska i narzędzia ułatwiające programowanie. Zna podstawy projektowania i tworzenia oprogramowania
Weryfikacja: kolokwium, laboratorium, ocena projektu
Powiązane charakterystyki kierunkowe: W08
Powiązane charakterystyki obszarowe: P6U_W, I.P6S_WG.o, III.P6S_WG

Profil ogólnoakademicki - umiejętności

Charakterystyka U01
potrafi zaprojektować, zrealizować i przetestować program, używając właściwie dobranych metod i narzędzi
Weryfikacja: laboratorium, ocena projektu
Powiązane charakterystyki kierunkowe: U07
Powiązane charakterystyki obszarowe: P6U_U, I.P6S_UW.o, III.P6S_UW.o

Profil ogólnoakademicki - kompetencje społeczne

Charakterystyka K01
rozumie znaczenie wiedzy w rozwiązywaniu problemów poznawczych i praktycznych oraz potrzebę zasięgania opinii ekspertów w przypadku trudności w samodzielnym rozwiązywaniu problemu
Weryfikacja: laboratorium, projekt
Powiązane charakterystyki kierunkowe: K03
Powiązane charakterystyki obszarowe: P6U_K, I.P6S_KK, I.P6S_KR