Problem z nauką programowania

Problem z nauką programowania
IC
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:3
0

Cześć

Chciałbym zapytać o umiejętność programowania.

Przeczytałem część 'podstawy programowania' z książki pt.'Automate the boring stuff with Python'. Mam wrażenie, że rozumiem w takim podstawowym stopniu jak działają pętle, ify, po co są te import module i różne funkcje lub metody na danych.

Wiem, że to są bardzo podstawowe rzeczy i chciałbym przerobić jakieś bardziej dogłębne pozycje, żeby zrozumieć różne struktury i zasady rządzące nawet nie konkretnie Pythonem, ale programowaniem. Tylko, że...

Problem pojawia się jak biorę się za jeden z zaległych projektów właśnie z tej książki. Pierwsze trzy rozdziały poszły bez problemu. Od list mam problem z każdym projektem po kolei. Umiem napisać jakąś tam część kodu, ale do tej pory całkiem bezbłędnie i sam rozwiązałem tylko jeden z trzech projektów z działu 'lists'. Nie wiem w czym jest kłopot. Książkę przerabiam niecałe 2 tygodnie. To jest kwestia jakiegoś wrodzonego braku umiejętności myślenia potrzebnego do programowania? To można jakoś rozwinąć? Możecie mi coś polecić? Jakieś konkretne strony z zadaniami?

Przykładowo, jakiś papier-kamień-nożyce napisałem bez problemu. Natomiast przez 1.5h próbowałem rozwiązać takie zadanie i w końcu odpuściłem, wygooglowałem kod i sobie go zwizualizowałem, rozumiem dlaczego tak to działa, ale nie mogłem na to wpaść..

CH
Nawet sie tym nie przejmuj.
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Postów:1320
3

To chyba normalne, o ile nie trafiłeś w odpowiednie miejsce w spektrum aspergera lub nie jesteś gościem, który od dziecka tłukł matmę i ma odpowiednio ustawiony mózg. Z czasem przejdzie, albo nie przejdzie i się będziesz męczył. Nikt Ci nie odpowie. Ja jestem z tych co się męczą, ale można z tym żyć, pracować, nawet wykonywać jakieś taski i dostawać wypłatę lepszą niż na magazynie, nawet jej wielokrotność :P

Silv
No ale właśnie odpowiedziałeś. ;)
ToTomki
Dobra, nikt mu nie przepowie jak dokładnie będzie z nim*, nie nikt mu nie odpowie ;)
Miang
raczej który bawił się klockami, a nie tłukł matmę
p_agon
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:96-230
  • Postów:953
0

To ja moze polece klasykiem: Why Learning to Code is So Damn Hard

Jakieś konkretne strony z zadaniami?

Hyperskill
https://www.hackerrank.com/
https://leetcode.com/


Reasumując wszystkie aspekty kwintesencji tematu, dochodzę do fundamentalnej konkluzji: To by nic nie dało, nie dałoby nic! Przez 10 minut można, przy 2h to już jakaś zemsta pagona.
IC
Dzięki, zabookmarkowałem to do przeczytania na jutro przy wypoczętym umyśle, bo dzisiaj już nie da rady :D
p_agon
Taktyk ;)
DR
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 4 godziny
  • Postów:1129
2

@icantcode: Moim zdaniem jak nie wiesz jak czegoś rozwiązać przez dłuższy czas to podglądanie z internetu nie jest takim złym pomysłem. Z biegiem czasu coraz rzadziej będziesz musiał to robić. Będziesz sobie przypominać, że już kiedyś rozwiązywałes podobny problem. Niestety jest to długa droga i łatwo się zniechęcić.

Ps. Tylko nie zrozum tego jako nauki na pamięć. Chodzi o to, że szukasz jak ktoś to rozwiązał i starasz się zrozumieć.

witeks44
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 minut
  • Postów:187
1

Może spróbuj jeszcze raz to przeczytać i zrozumieć, wytłumaczyć samemu sobie. Sam miałem problem ze zrozumieniem list jednokierunkowych i ogólnym działaniem wskaźników w C++. Jednak w pewnym momencie, gdy ćwiczyłem i więcej czytałem, doszło do mnie o co w tym wszystkim chodzi i kolejne zagadnienia drzew/grafów były o wiele prostsze. Tak samo z nauką asemblera, przerobić kilka prostych zadań aż załapie się, o co w tym chodzi :D Spróbuj podejść do problemu na inne sposoby. Po prostu niektóre rzeczy muszą się poukładać w głowie.

P1
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:22
2

Python chociaż jest łatwym jezykiem to niestety nie jest gwarancją łatwej i skutecznej nauki. W pythonie problem jest taki, że większość rzeczy jakie warto znać jest niewidoczne dla osoby początkującej. Po prostu Python wprowadza uproszczenia, podejmuje decyzje za osobę, ukrywa złożoność (ona nie znika!) i efekt jest taki, że łatwo jest osiągnąć coś co działa, a z drugiej strony nie wiadomo z czego to wynika :-)

Ja zacząłem od C++, bo i tak nie miało to dla mnie znaczenia. Innych języków nie znałem, wtedy kojarzyłem jedynie, że Pascal i Delphi jest dla leszczy[0]. Nieświadomy byłem, że C++ jest złożony i wymagający. Po prostu brałem przykłady, które były stosunkowo proste i ciekawe więc przepisywałem, modyfikowałem i doczytywałem na temat rzeczy, które wydawały mi się dziwne i jednocześnie ciekawe. C++ jest bogaty w szczegóły, ciężko jest je przegapić i żeby iść do przodu trzeba się nad nimi pochylić, doczytać, sprawdzić, chwilę pomyśleć.

Tyle mi wystarczyło, aby krok po kroku zorientować się jakim poj*banym język jest jest C++, bo programowanie w nim to jednocześnie narkotyk, a z drugiej strony masochizm, ale po drodze miałem duży przegląd haseł, schematów i informacji, który umożliwił mi przejścia na inne języki, bo to co C++ oferuje jest widoczne, ciężko to przegapić, a to co poznasz w pewnym sensie jest nadzbiorem tego co można zobaczyć np. w javie czy pythonie.

Ogólnie C++ ma jeszcze 2 atuty wpływające na rozwój:

  1. C++ pomoże Ci stać się bardziej wnikliwym w czasie pisania kodu + wymusi na Tobie abyś radził sobie z coraz dziwniejszymi przypadkami. To wzmacnia samodzielność i skill to tworzenia własnych obejść.
  2. Ludzie programujący w C++ są trochę inni. Nie powiem, że rozsądnie zarządzają swoim czasem, bo tego nie robią, ale mają więcej wiedzy na temat tego jak działa komputer i rzeczy jakie idą z nim w parze. Kontakt z takimi ludźmi chociaż jest irytujący to bywa bardziej pouczający niż setka filmików na youtube.

Natomiast Pythona to polecam jak:

  1. koncentrujesz się na czymś innym niż programowanie (np. jakieś badania itp), wtedy python jest tylko marginalnym dodatkiem
    2) świadomie chcesz ścinać tzn. wiesz, że nie ma sensu przepłacać i wybierasz możliwie słaby język, w którym da się napisać system. Wtedy python redukuje Ci koszty, a różnica czasu stanowi wtedy dla Ciebie czysty zysk. Takie optymalizacje to Ty rób jak nauka zejdzie na dalszy plan. Natomiast na początku to ucz się tak, aby poszerzać horyzonty.

[0] - z czasem kupiłem też ksiązkę Adama Boducha o Delphi z ciekawości. Samo Delphi ogólnie jest do przyjęcia, Delphi upraszcza robienie okien, ale materiały jakie były wtedy dostępne utrudniały mi pojęcie obiektowości z poziomu Delphi, ale poza fajnym kreatorem tym to ciężko było mi wskazać jakieś inne dodatkowe atuty. Raczej koncentracja na tym jednym temacie bez jakiś udziwień, co w sumie też stanowi jakąś wartość dodatnią.

Miang
łapka za C++ ale Pascal jednak do nauki jest dobry
mr_jaro
python jest porąbany, ogarniam wiele języków ale python mi się zlewa, za dużo skrótowców i brak klamerek, mój mózg łapie syntax error.
P1
Bez urazy, ale jeśli zacinasz się na wcięciach to nie znasz pythona. W zasadzie to strach pomyśleć czym jest to wspomniane "ogarnianie" innych języków.
P1
Po prostu nie pisz wszystkiego w jednej linii, stosuj wcięcia, a odnajdziesz się nawet i w lispach.
mr_jaro
@pprog123: pythona miałem na studiach + kiedyś poprawiałem kod po znajomym, tyle mi wystarczy by więcej nie ruszać tego języka, w c pochodnych nie mam najmniejszych problemów, a z pythonem nie ja jeden mam problem. A czym jest ogarnianie? Programuje od 11 lat, w tym 8 zarobkowo.
P1
Ogarniacz jednak jesteś. Sorry, poniosło mnie, uznajmy, że ja zgadzam się z Tobą w całej rozciągłosci, nie było żadnej dyskusji, a ja na spokojnie odchodzę, tylko bez gwałtownych ruchów, ok? nara.
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
3

@pprog123: nie zgadzam się w temacie nauki od C++. Stawiałbym na C jeśli już, potem wedle woli można iść C++ (lub nie, i też będzie to ok): będzie tak samo blisko jak nie bliżej sprzętu, uniknie się skomplikowania i nauczenia się pisania w kiepskim C++ także.
Pascal też jest dydaktycznie całkiem OK, ale chyba obecnie trochę nie do końca ma sens "rynkowy"?

Natomiast zgoda, że Python faktycznie jest na tyle prosty, że łatwo w nim napisać działające dziadostwo, ew. jest fajnym dodatkiem do innej dziedziny - tu nie ma sporu.

edytowany 1x, ostatnio: alagner
P1
@alagner: Początek i tak wiele nie zmienia, bo droga ta sama. C jest dobre gdy kierunek jest długofalowy i gdy człowiek ceni minimalizm/prostota wyrażanie tego co niezbędne, by rozwiązać problem. Nie mniej to cięższy szlak, bo jest mniej gotowych rzeczy większość trzeba sobie samemu stworzyć i to jest dobra ścieżka dla kogoś kto zna się na tym co robi i podejmuje lepsze decyzje inaczej sporo czasu w tym utopi.
P1
C++ jest dobre by wejść na rynek. C++ rzuca kłody pod nogi, złożoność, ramy, kusi tworzeniem ram. To jest język, który okłada programistę, a ten jak głupi się cieszy i w dodatku woła o więcej. Poje*ane, ale taki programista C++ szybciej ogarnie inne technologie. Natomiast skok z C na inne języki może być cięższy, bo nie ma tej obiektówki, szablonów, ram.
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Postów:1320
2
p_agon napisał(a):

To ja moze polece klasykiem: Why Learning to Code is So Damn Hard

Jakieś konkretne strony z zadaniami?

Hyperskill
https://www.hackerrank.com/
https://leetcode.com/

Załączam swoją wersję wykresu z artykułu powyżej, moja krzywa narysowana tak orientacyjnie, kolorek niebieski

screenshot-20210814161942.png

P1
Czyli tak bardziej doliny preferujesz
ToTomki
Ja bym bardzo chętnie sobie wyskoczył w górę, po prostu z czasem coraz dalej widzę koniec tej osi X zamiast się zbliżać do niego
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:mniej niż minuta
  • Postów:8409
2
icantcode napisał(a):

Natomiast przez 1.5h próbowałem rozwiązać [takie zadanie]

To trzeba było próbować przez 3 godziny. Albo przez 3 dni. Nauka programowania wiedzie przez frustrację i tyranię złych kodów.
Przy czym jak coś ci nie wychodzi jednym sposobem, to próbujesz drugim. Albo robisz przerwę na douczenie się podstaw itp.

wygooglowałem kod i sobie go zwizualizowałem, rozumiem dlaczego tak to działa, ale nie mogłem na to wpaść..

To też często jest rozwiązanie. Jak czegoś nie rozumiesz, to patrzysz, jak inni do tego podchodzą. Pewne podstawowe techniki trzeba poznać podpatrując je u kogoś / czytając w książkach, bo jeśli nie masz wielkiej programistycznej intuicji i wiedzy, to możesz na nie nie wpaść.


edytowany 1x, ostatnio: LukeJL
IC
Przy jednym z zadań siedziałem przez kilka dni. Następnie z tej frustracji zacząłem szukać artów nt.uczenia się i wyczytałem, żeby posunąć naukę do przodu a do projektu wrócić. Może to coś pomoże. Zacząłem przesuwać naukę, ale z tymi projektami kiepsko się czuję i chciałem to skonsultować.
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:około 14 godzin
  • Postów:1320
3

Jak ktoś słyszał jak działa samochód, wsiądzie pierwszy raz do auta to szybko wykombinuje jak nim pojechać. Wie że trzeba przekręcić kluczyk, odpalić auto. Nawet jeśli nie umie używać sprzęgła, słyszał o nim i pewnie zaraz wykombinuje jak ruszyć z miejsca, choćby miał jechać na ręcznym.
Z drugiej strony są ludzie, których wiedza kończy się na przekręceniu kluczyka. Tym będzie ciężej. Są jeszcze ci, których wiedza jest jeszcze mniejsza, dla nich to wszystko będzie katorgą. Jesteśmy rdzennymi Aborygenami żyjącymi tradycyjnym życiem, próbującymi jednak zmienić to życie i pierwszy raz pojechać. Będzie ciężko, ale też jesteśmy ludźmi i jak trzeba będzie to wykombinujemy jak pojechać, a jak jednak nie będziemy wiedzieli jak to zrobić to nic złego w tym nie będzie jak spojrzymy jak ktoś inny robi to samo.

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:mniej niż minuta
  • Postów:8409
2
ToTomki napisał(a):

Z drugiej strony są ludzie, których wiedza kończy się na przekręceniu kluczyka.

Mnie niepokoi, że coraz częstsza jest postawa "po co uczyć się programowania, skoro są frameworki". Później ludzie piszą w tych frameworkach, ale ciągle mają jakieś bugi czy inne problemy wynikające z nieznajomości choćby języka programowania, w którym piszą (np. ludzie potrafią pisać w React bez znajomości podstaw JavaScriptu).

Ale to by się nadawało na osobny wątek typu "pisanie we frameworkach bez nauki programowania - hit czy kit?".


Zobacz pozostałe 2 komentarze
Silv
@ToTomki: rozumiem problem, ale sformułowałbym go inaczej. Nie uczyć się podstaw, bo debugowanie męczące, tylko uczyć się ich, żeby było prostsze (o ile rzeczywiście mogłoby być, gdy się zrezygnuje z frameworków). Zauważ przeniesienie środka ciężkości z reagowania na sytuacje na wytyczanie drogi.
LukeJL
@Silv nom, niektórzy tutaj nawet na forum piszą swoje systemy operacyjne. To się dzieje.
LukeJL
@ToTomki chodzenie na skróty jest fajne, jak człowiek chce szybko coś zrobić, żeby działało. Ale jak się dłużej czas spędza w danej technologii, to potem braki wychodzą bardzo szybko i człowiek traci masę czasu na zgadywankę (ja tak ostatnio z matematyką mam, że czuję, że za słabo znam matmę i przez to tracę dużo czasu przy robieniu czegoś związanego z Three.js / grafiką 3D, bo nie rozumiem do końca, jak to działa, więc jak mam problem, to zgaduję/kombinuję zamiast wyprowadzić coś matematycznie)
Silv
Luke, nie zgaduj, doczytuj! :) Wiedz, jak to działa. <też by chciał umieć matematykę> — PS Przynajmniej za mnie się doucz, skoro ja tego nie robię…
LukeJL
@Silv wiem, mam w planach poznać dużo matematyki w niedalekiej przyszłości.
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
2

@icantcode: Programowanie jest super. :) Najbardziej, jak już rozumiesz, jak to wszystko działa. Do tego długa droga – przynajmniej z mojej perspektywy.

Nie wiem, czy powinienem Ci coś radzić, bo ja cały czas mam w głowie, ile rzeczy jeszcze z programowania nie umiem, które powinienem umieć (co do których uważam, że powinienem).

A co robię na naszym portalu? Czytuję na mikroblogu wpisy o technologiach, których nazwy nie widziałem pewnie ani razu. W szczególności komentarze bywają pomocne, bo dają pewien kontekst – a kontekst znacznie pomaga w zrozumieniu. Czego żałuję, to tego, że u mnie "zrozumieć" to nie to samo, co "zapamiętać".

Nie robię tego "po coś", ale "ponieważ". Ponieważ dobrze jest wiedzieć, gdzie się jest. Jak powstał FORTRAN, czemu architektura x86 tak się nazywa, czy bajt to zawsze 8 bitów. Zagadnienia niepowiązane bezpośrednio, ale zaryzykuję, choć nie programuję w Pythonie: jestem pewien, że ten język silnie opiera się na doświadczeniach poprzednich języków oraz na przypadkach użycia programów w nich pisanych. Możesz też poczytać o Go (Golangu) – czemu w ogóle powstał. Moim zdaniem jego przypadek wyraźnie pokazuje pewien sposób myślenia w programowaniu.

Jeśli miałbym coś konkretnie radzić: jak już zrozumiesz, jak działa dany kod, staraj się po trochu zrozumieć tzw. "całość". Co się dzieje podczas preprocessingu, interpretacji, kompilacji, linkowania czy wykonywania (wybór tych kroków zależny od technologii). Czemu takie polecenie kompiluje, a nie inne. Skąd konsola wie, co zrobić, jak wpiszesz polecenie i naciśniesz ENTER?

I! Nie wszystko naraz.

wygooglowałem kod i sobie go zwizualizowałem

Co masz na myśli przez "zwizualizowanie" kodu?


UPDATE

Tak sobie myślę, że wyżej napisałem z perspektywy osoby, która chce umieć programować w danej technologii, a nie zagadnienia z danej domeny – czyli w zasadzie Twój przypadek (ważniejsza jest logika kodu niż język).

Mam nadzieję, że choć trochę te informacje okażą się pomocne. Myślę, że znajomość zagadnień okołoprogramistycznych, a także budowy języków programowania, pomoże trochę i w tworzeniu algorytmów.

Co może pomóc więcej? Być może rozmyślanie nad tym, jak coś działa. Dlaczego ten kod jest napisany tak, a nie inaczej. Dlaczego w ogóle ktoś go napisał? Co chce przez ten kod pokazać? Czy to kod napisany możliwie prosto, by było go łatwo zrozumieć początkującym? Czy może chciał powiedzieć, że tak się w ogóle da napisać (a nie w każdej technologii wszystko się da)? Czy może to chciał pokazać, jak elegancko można zaprojektować tzw. abstrakcje w programie – albo jeszcze coś innego mu przyświecało.

Możesz zobaczyć, co to jest domena (nie znalazłem strony na polskiej Wikipedii). To pojęcie w pewnym sensie konkretyzujące "sens" danego programu.

Jeśli coś niejasne, co napisałem, to nie wahaj się pytać – ja chętnie doprecyzuję. :)


edytowany 6x, ostatnio: Silv
IC
Skorzystałem z narzędzia http://pythontutor.com/index.html - przeglądałem jak po kolei wykonuje się program i próbowałem wprowadzać zmiany, widziałem nawet gdzie jest problem i na czym on polega, ale nie umiałem go rozwiązać. Teraz wiem, że podszedłem do zadania w zły sposób. Może musiało po prostu minąć te kilka godzin.
Silv
O, tak, po sobie zauważam, że czas pomaga. Niemyślenie o projekcie lub w ogóle o programowaniu, kilka godzin lub nawet kilka dni. Raz, wypoczynek, dwa, zmiana perspektywy (= mniej emocji), trzy, nawet nauczenie się jakiejś nowej rzeczy. Ja myślę teraz, by wrócić do projektu sprzed kilku miesięcy, i jeszcze ostrożnie myślę.
Silv
PS @icantcode Dobrze by było, byś odpowiadał na temat w postach, nie w komentarzach. :) W komentarzach u nas raczej schodzi się z tematu.
Miang
  • Rejestracja:prawie 7 lat
  • Ostatnio:2 minuty
  • Postów:1661
4

@icantcode: weź inną książkę, albo od razu kilka


dzisiaj programiści uwielbiają przepisywać kod z jednego języka do drugiego, tylko po to by z projektem nadal stać w miejscu ale na nowej technologii
Zobacz pozostały 1 komentarz
Miang
no tak, ale w programowaniu przydaje się umiejętność łączenia wiedzy z różnych źródeł, napisałeś ze rozpoczynasz studia i chcesz poznać podstawy? to co jest teraz w liceum na informatyce, pokoloruj drwala w paincie? ;)
Silv
@Miang: dobrze, że po prostu zdecydował wziąć książkę. :) (Inna sprawa, czy Python to dobry wybór – nie wiem). Umiejętność decydowania, ew. tzw. "decydowania w końcu" ("no zdecyduj w końcu"), to ważna umiejętność.
Miang
@Silv +1, znam niestety osoby po skończeniu studiów co książki do rąk nie biorą bo jedna już kiedyś przeczytali ;)
AK
@Miang: Tę do pierwszej komunii ?
Miang
@AnyKtokolwiek: eee, a tam była jakaś? ;) kjoleżanka przeczytała jedną dość cienką książkę i uważała że to cała wiedza z c# jaka jej jest potrzebna, a pracowała właśnie jako programista w c#
PL
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:104
3

U mnie kolejność nauki była następująca: LOGO, ELI – program do układania schematów algorytmicznych, ASM, C, C++, Java, C#, Python etc.

Silv
A to znam, a to pamiętam. <chyba>
IC
Ja wybrałem Pythona, bo większość osób doradzających na forach go poleca. Wkrótce rozpoczynam studia i będę się uczył C oraz Asm, z Pythonem chciałem poznać te najbardziej podstawowe struktury oraz napisać kilka pierwszych prostych programów, aby łatwiej było mi rozumieć jak zadziałają te pętle i instrukcje warunkowe np.w C.
ledi12
  • Rejestracja:ponad 5 lat
  • Ostatnio:26 dni
  • Lokalizacja:Wrocław
6

Chłopie, po co CI to programowanie. Zobacz ile tu nieszczęśliwych dusz, ciesz się, że jeszcze Cię to nie wchłonęło ! :D

A tak na poważnie to nie jesteś w żadnym razie jakimś evenementem. To sport dla cierpliwych i wytrwałych.


Robię http response status cody w martwych ciągach
K8
  • Rejestracja:ponad 10 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Małopolska
  • Postów:643
0

wg mnie na poczatku musisz miec kompilator i IDE ktore dziala :) pozniej cala reszta

4programmers.net>Forum>Edukacja>Problem z nauką programowania

mam na mysli ogolnie programowanie

edytowany 2x, ostatnio: krzychu82a
DR
Kompilator do Pythona? Ponadto jak ja zaczynałem kodzic i używałem gedit albo Vim to popełniłem śmiertelny błąd?
LukeJL
początkujący nie musi mieć kompilatora do Pythona (bo jest coś takiego jak PyPy, co jest JIT kompilatorem), wystarczy zwykły interpreter.
IC
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:3
1

Dzięki za tak liczne odpowiedzi.

Przeczytałem podlinkowany artykuł i jest faktycznie bardzo trafiony. Przynajmniej ta początkowa część, dalej nie wiem, bo brakuje mi doświadczenia. :)

Mimo wszystko chcę pozostać przy Pythonie do końca książki, właśnie dokończyłem jej pierwszą część, która uczyła podstaw, składni, prostych metod. Bardzo dziękuję za rady, focus na nadchodzący tydzień - spędzić jak najwięcej czasu z kodem, projekty z książki, jakieś proste projekty i zadania z innych źródeł, będę próbował więcej googlować i korzystać z dokumentacji, bo widziałem, że jest przejrzyście wiele rzeczy opisane, automatyzację ruszę może za tydzień.

Nie chcę przerzucać się jeszcze na inne języki programowania, bo serio, ta automatyzacja strasznie mnie ciekawi, ale chcę ją jak najlepiej zrozumieć, dlatego taki tydzień z kodowaniem dla wyrobienia może pewnych nawyków będzie okej. Chcę też nauczyć się podstaw Gita i GitHuba, aby móc trzymać sobie tam narzędzia do automatyzacji. Może coś się kiedyś przyda a spis treści wygląda zachęcająco.

Chciałbym zapytać z wyprzedzeniem. Od października rozpoczynam studia informatyczne - będę miał tam programowanie w języku C oraz Asm. Chciałbym przerobić jakąś fajną książkę do C. Chciałbym nauczyć się jak najwięcej o programowaniu. Czy możecie mi polecić jakąś książkę? Chodzi o to, że nie chcę zbyt prostej pozycji, nie chcę, żeby na 300 stron była rozpisana sama składnia. Składnię pewnie można zmieścić na kilku stronach A4, bardziej zależy mi na nauce programowania niż na nauce składni.

I jeszcze zastanawiam się co z Asm? W karcie przedmiotów jest podane, że to będzie Turbo Assembler, to jest koniec lat 80tych, początek lat 90tych. Czy to będzie miało przełożenie na nowsze Assemblery?

Edit. Widziałem np.temat na Stack Overflow no i jedni polecają Prate, inni K&R, ale te książki różnią się mocno np.objętościowo. Może ktoś z Was miał z nimi styczność i jest w stanie udzielić mi jakiejś porady?

edytowany 1x, ostatnio: icantcode
Silv
"(…) nie chcę zbyt prostej pozycji (…)" – "prostej" w sensie "jednolitej", "nieurozmaiconej"?
Miang
  • Rejestracja:prawie 7 lat
  • Ostatnio:2 minuty
  • Postów:1661
0

@icantcode: to mówisz że składnię do C zmieścisz na kilku stronach?
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
standardowo do C polecam książkę Ritchiego i Kernighana
do C++ Grębosza


dzisiaj programiści uwielbiają przepisywać kod z jednego języka do drugiego, tylko po to by z projektem nadal stać w miejscu ale na nowej technologii
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
0

Do C dołożę Modern C Jensa Gustedta.

Zobacz pozostałe 2 komentarze
Silv
No tak, ale widzisz, mogę sobie wyobrazić, że jeśli starsze książki nie miałyby jakiejkolwiek wartości, to nikt by ich nie czytał. W związku z tym mogę opis swojego problemu trochę zmienić: czy różnica w standardach wpływa na różnicę w przydatności książek? Inaczej mówiąc, po co w ogóle wspomina się o starszych książkach, skoro są nowe standardy? Czy starsze książki powinny być czytane jedynie przez osoby utrzymujące systemy legacy, czy też mimo rocznikowo starszych standardów mają wartość współcześnie? A jeśli mają, to czy jest ona większa niż nowszych książek?
AL
@Silv: K&R to podręcznik twórców języka, jemu się trudno zestarzeć, zresztą prostota C też odgrywa tu niebagatelną rolę. Nowsze standardy w C niosą trochę (no dobra, czasem więcej niż trochę ;) ) udogodnień ale nie wywracają języka do góry nogami. Większą rewolucją może być kolejna wersja standardu (23? Nie jestem pewien) gdzie potencjalnie mogą wejść lambdy, auto, typeof czy typowanie zmienić się na silniejsze. Ale pytanie ile z tego wejdzie a ile to życzeniowe myślenie.
Silv
"(…) ile z tego wejdzie a ile"… ile co? Chyba nie dokończyłeś myśli. Dzięki za punkt widzenia, rozumiem. Widzisz, tak sobie myślę, różne książki do nauki języków są polecane, stare i nowe, jeden przedstawiają coś w dobrym świetle, inne co innego. Ale czy ma znaczenie, którą książkę ostatecznie wybierze się? Czy nie wystarczy wybrać pierwszej, która wydaje się dobra i nie szukać lepszej? Skoro tak, czy nie wystarczy polecać jednej, tej aktualnie najpełniejszej, zamiast podawać wybór (czasem szeroki)?
AL
@Silv: „ Ale pytanie ile z tego wejdzie a ile to życzeniowe myślenie.” to całe zdanie z poprzedniego komentarza. Ale u siebie je widzę prawidłowo.
Silv
A, w sensie że pierwsza część zdania… OK. (To znaczy – nie umiem w gramatykę języka polskiego, więc nie wiem, jak opisać, czemu się wcześniej pomyliłem. :/)
IC
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:3
0

@Silv:

Myślałem o jakiejś książce z krótkim wprowadzeniem do języka i następnie jakichś projektach, bardziej zaawansowanych rzeczach, np.w Automate było coś o zarządzaniu pamięcią, jakiś garbage collector, tam było napisane, że w przypadku Pythona nie ma potrzeby zarządzać pamięcią a w C/C++ trzeba. Też np.zmienna była najpierw definiowana jako pudełko z jakąś wartością a później jako odniesienie do miejsca w pamięci, gdzie znajduje się wartość tej zmiennej (które można sprawdzić przy użyciu id()). No i właśnie nie chciałbym czytać znowu na kilka stron o operacjach arytmetycznych typu dodawanie, odejmowanie, bardziej interesują mnie te 'głębsze' rzeczy.

@Miang:

Miałem na myśli podstawowe struktury jak pętle, tabelki z operacjami arytmetycznymi i inne podobne, nie chcę żeby to zajmowało kilkaset stron książki, bo to może się okazać staniem w miejscu.

Miang
a jak czytałeś w szkole lektury? przerzucałeś co nudne czy każdy drobiazgowy opis uważnie studiowałeś?
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

Dla formalności dodam, że odnosisz się do mojego komentarza, który może trochę nieopatrznie napisałem zamiast postu. ;) (Co mnie może usprawiedliwiać, to to, że chciałem upewnić się, że dobrze rozumiem). Chyba rozumiem, co masz na myśli – chcesz eksplorować temat więcej w głąb niż wszerz (są takie algorytmy przeszukiwania grafu w głąb oraz wszerz; zresztą dobrze je znać).


edytowany 1x, ostatnio: Silv
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)