Spis treści:
Po co tracić cenny czas na czytanie tego artykułu?
Dla kogo i o czym jest ten artykuł?
Gdzie szukać odpowiedzi? [Delphi].
Ogólne szukanie informacji.
„Kilka” słów o zadawaniu pytań na forach dyskusyjnych.
Google
Microsoft Platform SDK
Help (na przykładzie Delphi 6 Personal)
Po co tracić cenny czas na czytanie tego artykułu?
Dlatego, że z pewnością, jeśli jesteś początkującym, dowiesz się jak rzadziej odwiedzać forum dzięki własnoręcznemu znajdowaniu odpowiedzi i rozwiązań na ewentualne pytania i zaistniałe problemy podczas tworzenia programów. A to pomoże Ci ten cenny czas zaoszczędzić. Poza tym przyda Ci się też wiedza, jak pisać na forach w odpowiedni sposób.
Dla kogo i o czym jest ten artykuł?
Artykuł jest głównie przeznaczony dla początkujących, dopiero rozpoczynających swoją przygodę w świecie kodu, ale nie zdziwiłbym się gdyby jacyś już-nie-zieloni znaleźli tu coś dla siebie. Mamy tutaj zamiar opisać parę sprawdzonych sposobów na wyszukiwanie odpowiedzi i rozwiązań na zaistniałe pytania i problemy podczas programowania w Delphi oraz C++ (jeśli kodzisz w czymś innym to mimo wszystko na pewno znajdziesz tu jakieś cenne wskazówki), a także w jaki sposób najlepiej (naszym zdaniem) pisać tematy na forach (ten rozdział dotyczy już wszystkich języków). Wszystko dlatego, że daje się zauważyć, iż początkujący nie wiedzą gdzie/jak szukać informacji co kieruje ich prosto na forum, gdzie zostają częstokroć wyśmiani, tym bardziej, że zadają pytania w nieodpowiedni sposób. To tyle wstępu, przejdźmy do sedna sprawy, dodam jeszcze tylko, że chociaż minimalna znajomość języka angielskiego to podstawa, bez niej daleko nie zajdziemy, na pewno przydadzą się słowniki języka angielskiego (gdyby ktoś miał problem):
http://www.ling.pl/
http://portalwiedzy.onet.pl/tlumacz.html
Gdzie szukać odpowiedzi? [Delphi].
Wiele osób nie zdaje sobie sprawy z potęg, jakimi są dwa helpy dołączone do Delphi (ja mam Delphi 7., w poprzednich pewnie jest podobnie, nie wiem jak w kolejnych):
Delphi Help – znajdziemy tu opisy całego języka Object Pascal, wszystkie klasy, ich metody, dane o komponentach i wiele, wiele innych, niekiedy z przykładowymi kodami źródłowymi (!).
Windows SDK – tutaj zawarte zostały wszelkie funkcje, jakie udostępnia programistom system Windows, a także komunikaty systemowe, typy itp.
Oba helpy znajdziemy w menu Delphi o nazwie Help.
Niestety, w Windows SDK wszystkie kody źródłowe podane są w języku C++, ale nie jest to dużą przeszkodą, bo często wcale nie potrzeba nam przykładowego kodu, tylko opisów funkcji, parametrów lub po prostu dowiedzieć się, czy dana funkcja istnieje. Jeżeli jednak będzie trzeba zadziałać z kodem z przykładu – nie ma wyjścia, trzeba chociaż trochę poznać język C++.
Jak korzystać z obu helpów? Otwieramy, przechodzimy na indeks, wpisujemy co trzeba i wybieramy z listy dane pole i dostajemy o nim informacje (możemy też wyszukiwać w helpie informacje poprzez zakładkę Znajdź). Skąd wiedzieć, w którym Helpie szukać odpowiedzi? Cóż, możemy próbować w obu, jednak jeżeli potrzebujesz informacji o języku Delphi, komponentach, klasach i ich metodach oraz funkcjach operujących na typach tegoż języka – szukaj w Delphi Help, natomiast gdy potrzebne Ci są informacje o typach i komunikatach systemu Windows bądź funkcje jakie on udostępnia – zajrzyj do Windows SDK.
Często istnieje potrzeba ustawienia parametrów jakichś obiektów lub ich odczytanie. Otwórzcie Windows SDK i wpiszcie na zakładce Index słowo Set – ukazane zostaną pozycje rozpoczynające się od „Set” – dziesiątki różnorakich funkcji odpowiedzialnych za ustawianie różnych parametrów – (podobnie byłoby gdybyśmy wpisali Get, tylko że wtedy pojawiłyby się funkcje, które zwracają jakieś informacje). Warto przejrzeć te funkcje, możliwe, że znajdziecie coś przydatnego.
Przykłady:
Załóżmy, że chcemy ustawić kursor myszki w wybranym na ekranie miejscu. Co możemy zrobić w tej sytuacji? Udać się na forum? Zapytać znajomego? Możemy, tylko po co? Otwieramy nasz magiczny Windows SDK i wpisujemy słowo Set, a następnie próbujemy wpisać Mouse (powstaje nam ciąg SetMouse). Jednak takowej pozycji nie ma. Zastanówmy, się – wpiszmy zamiast Mouse – Cursor. Po wpisaniu ciągu znaków SetCursor z wielu pozycji zaznaczona zostaje SetCursor, a pod nią widzimy – SetCursorPos. Wyświetlamy informacje o tej drugiej funkcji, tak! To to, czego szukamy. Dowiadujemy się z opisu, że funkcja ta przyjmuje dwa parametry – współrzędna X oraz Y punktu, do którego chcemy przesunąć kursor. Kłopot rozwiązany, zajęło nam to parę sekund.
Sprawdź, czy jest funkcja, która zwraca położenia kursora.
Przy okazji dowiedzieliśmy się, że istnieje funkcja SetCursor – sprawdź, co ma za zadanie robić.
Tworzymy edytor tekstu i mamy zamiar wyświetlać na TStatusBar położenia karetki – tylko skąd mamy wiedzieć, jaka jest jej pozycja? Otwieramy Windows SDK, wpisujemy SetCaret i już ukazuje się nam funkcja SetCaretBlinkTime, a pod nią – SetCarePos – sprawdzamy opis tej drugiej funkcji, tak – tego nam trzeba 🙂 i po problemie.
„Kilka” słów o zadawaniu pytań na forach dyskusyjnych.
Poprawne pisanie na forach dyskusyjnych to klucz do szybkiego uzyskania odpowiedzi. Możemy Was zapewnić, że tak wyglądające tematy:
Temat: PomocY!!!!!!!!!!!!
sluchajcie mam taki problem ze nie wiem jak to zrobic chcialem uzyc tlist i jak chcialem cos dodac to byl blad!!! pomozcie bo mam jutro zaliczenie!!!!
albo:
– od razu polecą do kosza wysłane tam przez moderatorów z misją zapełniania resztek wolnego miejsca,
– zostaną zignorowane przez potencjalnych forumowiczów, którzy mogliby udzielić odpowiedzi,
– poddane zostaną ostrej krytyce.
Nie ma się co dziwić – sami spójrzcie, co przekazuje taki post? Jaka jest jego treść, co się z niego dowiadujemy? Zapewne wiele osób odpowiedziałoby, że „autor jest kompletnym noobem”. Co zrobić, aby nie być tak odebranym? Warto przeczytać zawsze regulamin forum, bo z niego można dowiedzieć się na przykład, że należy stosować przedrostki dotyczące języka czy kolorowanie składni kodów źródłowych. Zebrałem tutaj najważniejsze zagadnienia na temat pisania na forum.
1. Temat. Powinien on w jak najlepszy sposób opisywać Twój problem, dobrze byłoby także (a na niektórych forach jest to wymagane, np. u nas na unitcie) aby tematy opatrzone były przedrostkami dotyczącymi języka, jakiego tyczy się pytanie bądź bibliotek graficznych itp., spójrzcie na przykłady nieodpowiednich tematów:
Pomozcie!!!!!!!!!!!!
problem
pomoc z delphi
(Tak przy okazji, takie tematy usuwam od razu…)
A teraz spójrzcie też na te tematy:
[Delphi] błąd podczas instalowania komponentu Omega
[C++] konwersja AnsiString na String
[OpenGL][C++] wadliwie działający kod generowania terenu
Bez porównania, prawda? Dzięki tak sformułowanym tematom użytkownicy od razu będą mieli pojęcie, o czym jest dany temat.
2. Treść. Piszcie zwięźle, krótki i na temat, nie ma sensu się rozgadywać na temat swojego programu, lepiej zrobić to, gdy już będzie w pełni sprawny. Pisząc na forum – skupcie się na przekazaniu wszystkich informacji na temat problemu i z nim związanych.
Przeglądając rożne fora programistyczne można zauważyć, ze często odpowiadający na pytanie odsyłają do google. Jak się okazuje, nie bez powodu. Google zawiera ogromna bazę linków, zawierających odpowiedzi na bardzo wiele problemów, z którymi zetkniemy się programując. Na przykładach pokaże i opisze jak formułować zapytania aby szybko osiągnąć cel i nie marnować czasu swojego i innych. Jak mówi słynne łacińskie przysłowie: In googlii non est, ergo non est. 😉
Przykład – „Jak zamienić zmienną single na zmienną string?”
Rozwiązanie – odpowiedź prosta, myślimy jakie słowa są nam potrzebne: single, string, wiadomo, przyimek ‘to’ i nasze IDE czyli Delphi (podobny problem może pojawiać się w innych językach – my używamy Delphi). Składamy z tego wyrażenie: ‘single to string delphi’. W wynikach na pierwszym miejscu mamy rozwiązanie problemu.
Przykład – http://forum.unit1.pl/Delphi-TextOut-bez-tla-t1396.html
Rozwiązanie – Problemem jest narysowanie przezroczystego tekstu po przez funkcje TextOut na komponencie TImage Uruchamiamy mózg lub słownik pol-ang i tłumaczymy słówka: potrzebujemy przezroczysty – transparent, nazwa funkcji (obowiązkowo) – TextOut i IDE – Delphi. Składamy zdanie: transaprent TextOut Delphi. Pierwszy link w wynikach – rozwiązanie problemu. Taki temat nie ma racji bytu na forum.
Przykład – http://forum.unit1.pl/delphi-wstawic-stringa-pomoiedzy-stringa–t1032.html
Rozwiązanie – problem: wstawienie stringa do innego stringa. Co wpisać w google? Tłumaczymy: wstawić – insert, do tego nazwa zmiennej – string i IDE (delphi). Zapytanie: ‘insert string delphi’. Co dostaliśmy? Pierwszy wynik – dokładna odpowiedź na nasz problem :-). Ten problem można rozwiązać tez patrząc w helpie Delphi
Przykład – http://forum.unit1.pl/Delphi-Wywietlenie-obroconej-elipsy-t1368.html
Rozwiązanie – problem, narysowanie obróconej elipsy w Delphi. Ten problem rozbijemy na dwa mniejsze problemy. Narysowanie elipsy i narysowanie obróconej elipsy. Obrócona elipsa to nic innego jak normalna elipsa obrócona o dany kat (:D), ale z programistycznego punktu widzenia to nie jest takie proste ;). Jeżeli wiemy już jak narysować elipsę (a wiemy :)), to kolejnym celem jest obrót tejże elipsy. Uruchamiamy google i myślimy nad zapytaniem (ja użyłem takiego) ‘rotate angle image delphi’. Pierwsza strona usłana jest linkami, które zawierają albo gotowe odpowiedzi, albo komponenty które umożliwiają obrót obrazka (możemy podejrzeć ich źródło jeżeli zostało dołączona). Najważniejsze wg mnie (i wynikające z mojego doświadczenia) jest to, żeby umieścić słowa kluczowe naszego problemu w zapytaniu – a zapytanie nie musi jak widzicie być zbudowane jak normalne zdanie – czyli zamiast ‘How to convert single to string in Delphi?’ piszemy ‘single to string delphi’ :)). Takim sposobem kieruje się od dawna i dostaje to czego chce ;). Problem rozwiązany.
Przykład – http://forum.unit1.pl/CBCB-EditBox-Text-do-fstream-t1356.html
Rozwiązanie – problemem jest skonwertowanie zmiennej string do AnsiString w BCB. Określamy słowa kluczowe: string, AnsiString i przyimek ‘to’ oznaczający w tym wypadku konwersje oraz IDE – BCB. Z tych słow. konstruujemy zapytanie ‘string to AnsiString bcb’. Rozwiązanie mamy na pierwszej stronie (http://www.codeguru.com/forum/showthread.php?threadid=375155). Więcej czasu zajęło pisanie posta niz. szukanie na google.
Przykład – http://forum.unit1.pl/C-cin-ciag-znakow-t1247.html
Rozwiązanie – problemem jest brak odpowiedniego typu danych, który przechowałby ciągi znaków w c++. Jeżeli pisaliśmy już w innym języku (np. Pascalu) to wiemy, ze tam był typ string. Na podstawie tej wiedzy, możemy pomyśleć, ze jeżeli Pascal obsługiwał ciągi znaków, to c++ tez musi takie cos mięć zaimplementowane. Wpisujemy ‘string c++’ i dostajemy odpowiedz. Jeżeli c++ to nasz pierwszy język, to sprawa ma się trochę inaczej, bo nie mamy żadnej podstawowej wiedzy i obeznania. Skutkuje to tym ze nie wiemy kompletnie co wpisać do wyszukiwarki. Wiadomo – od czegoś trzeba zacząć, wiec łapiemy się najprostszego śladu, który może nas doprowadzić do odpowiedzi. Mianowicie, zagooglujemy za wszystkimi typami danych jakie nam udostępnia c++. Wpisujemy ‘c++ data types’. I co otrzymujemy? Z linku na pierwszej (http://www.cplusplus.com/doc/tutorial/variables.html) stronie dowiadujemy się, ze istnieje typ danych string i nawet mamy opisane ładnie jego użycie. Problem rozwiązany.
Jak widać skuteczność szukania na google sprowadza się do używania słow. kluczowych w zapytaniu, samej precyzji zapytań jak i zwykłego doświadczenia. Jedno co mogę wam jeszcze powiedzieć to to, ze nie należy się zniechęcać nieudanymi poszukiwaniami, mi zdarzały się przypadki kiedy rozwiązanie znajdywałem po 4 dniach. Warto tez przeglądać googlegroups i inne grupy dyskusyjne oraz fora (jak tam zadawać pytanie dowiecie się w dalszej części artykułu). Potrzebna jest tez iskra myśli w głowie, ale tego my was nie nauczymy, to powinniście wyssać z mlekiem bobra ;).
Microsoft Platform SDK (PSDK)
Na początku wyjasnię co oznacza skrót SDK. Jak mówi wikipedia.pl SDK to „zestaw narzędzi dla programistów niezbędny w tworzeniu aplikacji korzystających z danej biblioteki (np. DirectX SDK), pod dany system (np. Microsoft Platform SDK)”
Na SDK najczęściej składają się:
– dokumentacja
– pliki nagłówkowe dla danego języka programowania
– przykładowe kody źródłowe
– skompilowane biblioteki(w wypadku SDK dla biblioteki)
– kod źródłowy biblioteki(w zależności od licencji i typu SDK)
Platform SDK to podstawa każdego programisty Windowsa. Zawiera opis wszystkich funkcji, interfejsów, kontrolek itd., które udostępnia nam Windows. Pobrać je można pod adresem: http://www.microsoft.com/downloads/details.aspx?FamilyId=484269E2-3B89-47E3-8EB7-1F2BE6D7123A&displaylang=en . W komplecie dostajemy również wszystkie potrzebne headery oraz liby potrzebne do interfejsów i funkcji. To SDK zawiera mnóstwo przykładów, które pokrywają praktycznie każda sferę Windowsa. PSDK wygląda tak:
[brak obrazu]
Po lewej znajduje się zawartość podzielona na działy (takie jak siec, bezpieczeństwo, grafika i multimedia), poddziały, poddziały poddziałów itd. ;), tak ze znalezienie interesującego nas tematu jest łatwe, szybkie i przyjemne. To na pierwszej zakładce. Na drugiej zakładce znajduje się alfabetyczny index sdk. Łatwo w nim znaleźć opis interesującej nas funkcji, jeżeli np. zapomnielismy jakie parametry przyjmuje lub co zwraca w przypadku niepowodzenia. Na dole przy opisie niektórych funkcji znajduje się blok ‘Example Code’, zawierający przykładowy kod prezentujący użycie funkcji. Niżej znajdziemy blok ‘Requirements’ czyli blok przedstawiający wymagania funkcji (headery, liby, wersja systemu itd.). Przydatna rzeczą może również okazać się index referentce dla danego tematu. Index referencje to spis wszystkich funkcji, typów wyliczeniowych, funkcji itd. dla danego zagadnienia. Wygląda to mniej więcej tak:
[brak obrazu]
Tu akurat przedstawione jest index referentce dla Windows Sockets 2, ale taki opis znajduje się w większości działów PSDK. Microsoft robi bardzo dobre helpy, tak i ten jest bardzo dobry. Każda funkcja zawiera dokładny opis każdego parametru, wartości jakie może przyjmować, wynik funkcji oraz to, kiedy ona zwraca błąd, dlatego nikt nie powinien mięć większego problemu z rozszyfrowaniem takiej treści ;). W praktyce wygląda to tak:
[brak obrazu]
Ponadto, w katalogu psdk_root\Samples znajduje się przykładowe programy demonstrujące np. użycie GDI, sieci, operacje na plikach itd.;) W razie watpliwości możemy zajrzeć do źródła programu i zobaczyć jak wygląda to w praktyce, co pomaga nieraz w zrozumieniu tego jak działa np. jakąś funkcja.
Jak widać PSDK to kolejne źródło wiedzy, na którym możemy podpierać się podczas programowania. Warto się z nim bliżej zapoznać, żeby zaoszczędzić czas swój jak i innych, bo czasami jedno spojrzenie na funkcje może rozwiązać problem, z którym ktoś poszedłby na forum i czekał na odpowiedz kilkanaście godzin. Umiejętność samodzielnego szukania jest bardzo przydatna w życiu, a w szczególności w życiu programisty i nikt chyba temu nie zaprzeczy ;). Poznając jedno SDK uczymy się tak na prawdę wyszukiwania informacji, a jest to umiejętność uniwersalna i po pewnym czasie niezależnie czy to będzie Platform, DX, Java itp. SDK znalezienie interesującej nas informacji będzie sprawiało coraz mniej problemów.
Help (na przykładzie Delphi 6 Personal)
Help to chyba pierwsza rzecz podczas poszukiwań rozwiązania problemu. Jest zawsze pod ręka, dołączony do IDE. Help D6 jest podzielony na rozdziały, a najważniejszym moim zdaniem jest rozdział ‘Object Pascal Referentce’. Jest to po prostu spis wszystkiego co udostępnia nam Object Pascal: spis funkcji, unitów, wszystkie typy danych itd. Jeżeli chcemy dowiedzieć się czegoś np. o stringach, to wchodzimy Object Pascal Referencje -> Data types, variables, and contants -> String types. Naszym oczom ukazuje się skarbnica wiedze na temat stringow i wszystkiego co z nimi jest związane. Odpowiednio do innego problemu wybierzemy inny podrozdział, należy odpowiednio go określić na podstawie problemu (problem ze stringami to problem z typem danych).
Podczas przeglądania treści pomocy, warto zwrócić uwagę na link ‘See also’ na górze w niektórych tematach. Klikając w niego dostajemy spis wszystkich spokrewnionych z naszym problemem zagadnień. Oczywiście język angielski przy takich helpach jest niezbędny. Programista musi(!) umieć j. ang. na poziomie czytania dokumentacji. Językiem urzędowym programistów niestety nie jest język polski ;].
Interesującym działem pomocy Delphi jest tez Visual Component Library Referentce. Jest to kolejny spis, tym razem spis funkcji, obiektów itd. które udostępnia biblioteka VCL. Warto zapoznać się z jego podrozdziałami, bo informacje w nich zawarte są przydatne w programowaniu. Oczywiście do helpa często się nie zagłada, bo wiedze czerpie się z książek, tutoriali w Internecie, kodów źródłowych itd.
Autorzy: Iskar i krajew4 :]