Co muszę wiedzieć o serwerach w roli programistycznej? [Zamknięte]

12

Wiem, że może to zabrzmieć trochę niejasno, więc postaram się wyjaśnić trochę dalej ...

Po wielu latach pracy na własny rachunek jako programista poszukuję roli programisty komercyjnego. Moje jedyne doświadczenie z serwerami i hostingiem to przesyłanie przez FTP i trochę zabawy z CPanel / WHM. Rola, którą zamierzam, to role programistyczne PHP, MySQL, HTML, CSS, ale w ostatnich wywiadach zadawano mi pytania dotyczące konfigurowania rzeczy na serwerze, że nie miałem pojęcia, co się mówi ... co nie było idealne!

Nie wiedząc więcej niż ja, trudno wyjaśnić, czego dokładnie chcę się nauczyć, ale w zasadzie to tylko elementy serwera, które powinienem znać jako programista stron internetowych? Jeśli jesteś programistą internetowym, czy zajmujesz się serwerem poza przesyłaniem plików, a jeśli tak, to co? Czy rzeczy takie jak Subversion (SVN) i systemy kontroli wersji są często konfigurowane przez zespół programistów, czy o tym mówili?

Jan
źródło
3
Myślę, że ten jest bardziej szczegółowy na temat serwerów :)
Michael Durrant
2
Nie chcę ci tego robić, ale jeśli nie możesz skonfigurować serwera WWW, nie jesteś bardzo cennym programistą i nie jest to coś, czego można szybko nauczyć się w książce. Zamiast robić pół dupy, ucząc się komponentów serwera z książki. Lepiej udoskonal swoje umiejętności PHP i aplikuj jako programista PHP.
Reactgular,
@MathewFoscarini, ponieważ nie jestem w tym dobry, powinienem tego unikać i doskonalić tylko to, co wiem? Czy ta rada nie spowodowałaby zatrzymania świata? not a very valuable web developerto jest to, co staram się przezwyciężyć, więc cieszę się, że mogę się o tym właściwie uczyć, po prostu nie wiem, jak najlepiej przejść się do tej nauki i na jakich obszarach skupić się najpierw.
John
@ john Pytałeś w kontekście bycia zatrudnionym jako programista stron internetowych. Coś, do czego nie masz kwalifikacji. Jeśli to właśnie chcesz zatrudnić, to idź za tym, ale nie oczekuj krótkoterminowego rozwiązania odpowiedzi na pytania w wywiadzie. Spodziewałbym się, że pracodawca próbuje wyeliminować kandydatów, którzy nie mają praktycznego doświadczenia zawodowego w pracy na serwerach. Mam wrażenie, że po twoim pytaniu próbujesz znaleźć pracę, której nie możesz zrobić jako wolny strzelec. Możesz spróbować znaleźć klienta gotowego zapłacić, ucząc się tych umiejętności obsługi serwera.
Reactgular,

Odpowiedzi:

10

Jest to duży zestaw pytań, ale podejrzewam, że wiele osób musi się z nimi zmierzyć, zwłaszcza gdy zaczynają robić postępy w karierze, która zaczęła się od koncentracji.

Wspominasz, że wybierasz się do roli obejmującej programowanie w PHP i MySQL. Są to rzeczy, które należy wykonać na serwerze. Umiejętność dokonywania trafnych osądów technicznych jako programista wymaga zrozumienia, jak te rzeczy działają na serwerze i jak współdziałają z interfejsem WWW. Tak więc, musisz wyraźnie zrozumieć serwer.

Zamiast próbować dowiedzieć się dokładnie, czego możesz potrzebować na temat serwera, zaleciłbym nurkowanie i budowanie czegoś, w tym samodzielne instalowanie całego oprogramowania po stronie serwera. Świetnym sposobem na zmoczenie stóp jest zainstalowanie Linuksa na komputerze. Możesz użyć czegoś takiego jak VirtualBox, aby pozwolić mu działać razem z bieżącym systemem operacyjnym. Zainstaluj MySQL, zainstaluj i skonfiguruj serwer dla PHP i postaraj się, aby wszystko działało razem. Wspaniałą rzeczą jest, że w dzisiejszych czasach średnio dobrze wyposażony laptop może to wszystko uruchomić i być „serwerem”.Na początku może to być trudne, szczególnie jeśli nie masz doświadczenia w korzystaniu z Linuksa i wiersza poleceń. Jako programista powinieneś przynajmniej wiedzieć wystarczająco dużo, aby móc przejść przez to ćwiczenie, a to pozwoli ci szybko dowiedzieć się, jak pogłębić swoją wiedzę.

Istnieją trzy obszary, w których prawdopodobnie będziesz musiał przyspieszyć:

  1. Podstawy systemu operacyjnego Linux. Może zacznij od łatwej do zainstalowania dystrybucji, takiej jak Ubuntu.
  2. Konfigurowanie serwera WWW i PHP. Instalacja Apache to dobre miejsce na rozpoczęcie. Istnieją inne alternatywy, ale tutaj zaczyna się większość ludzi.
  3. Nauka podstaw instalowania i uruchamiania MySQL. Przynajmniej jako programista prawdopodobnie będziesz musiał napisać DDL, aby utworzyć tabele i inne struktury w bazie danych, a na pewno będziesz musiał mieć możliwość zapytania do bazy danych na serwerze, aby eksplorować dane i upewnić się, aplikacja wypluwa dopasowania znajdujące się w bazie danych.

Jeśli chcesz skorzystać z Ubuntu, możesz postępować zgodnie z podstawowymi instrukcjami tutaj, aby rozpocząć pracę. Uwaga: przed rozpoczęciem instalacji i grania z serwerami WWW / komponentami bazy danych trzeba będzie sporo rozwinąć podstawy Linuksa.

Jeśli chodzi o sposób, w jaki programiści muszą wchodzić w interakcje z serwerem, poza przesyłaniem plików, myślę, że jest to bardzo różne w zależności od organizacji.

  1. Programiści często zajmują się administrowaniem przynajmniej środowiskiem programistycznym. Czasami to programiści konfigurują system kontroli wersji (na przykład SVN) i proces wdrażania (przenoszenie kodu między środowiskami).
  2. Do tego stopnia, że ​​przynajmniej programiści będą musieli użyć systemu kontroli wersji działającego na serwerze.
  3. Będziesz także musiał robić rzeczy, takie jak przeglądanie dzienników na serwerze, aby zobaczyć, jakie komunikaty są generowane, aby pomóc w diagnozowaniu i rozwiązywaniu problemów.
  4. Konieczna może być współpraca z zespołem ds. Infrastruktury w celu określenia takich rzeczy, jak konfiguracja sieci lub konfiguracja pamięci masowej serwera. Często problemy z aplikacją są kombinacją konfiguracji i kodu.

Chodzi o to, że nie ma jednej odpowiedzi na pytanie, w jaki sposób będziesz musiał dotknąć serwera, ale w trakcie swojej kariery z pewnością wykroczy on poza przesyłanie plików za pośrednictwem FTP. Rozpoczęcie nauki od podstaw teraz pomoże.

DemetriKots
źródło
Świetna odpowiedź, dzięki! Więc kiedy konfiguruję „Mampa” do pracy lokalnej, czy to tak samo, ale bez dostępu do świata zewnętrznego? Zainstalowałem kilka systemów operacyjnych Linux i znam trochę wiersza poleceń, ale nic, co łatwo zapamiętam. Moja wiedza na temat serwerów nie istnieje, ale zawsze myślę o nich jako o dostępie tylko z linii poleceń, a nie jak o przyjaznym dla użytkownika systemie operacyjnym, czy tak jest?
John
2
Najlepiej jest czuć się komfortowo za pomocą wiersza poleceń. Większość „prawdziwych” serwerów sieciowych, z którymi będziesz mieć do czynienia, będą zdalnymi komputerami i nie będą miały zainstalowanego GUI.
GrandmasterB
2
Jak napisał @GrandmasterB, przydatne jest zapoznanie się z wierszem poleceń. Moim zdaniem Linux jest dobrą platformą do nauki, ponieważ zmusza cię do „zbliżenia się do metalu” w nauce tego, co robi system operacyjny poza tym, co widzisz na ekranie. Spójrz na plik httpd.conf, zrozum, co faktycznie robi serwer WWW i jak integruje się z nim moduł PHP. Zapoznaj się z podstawową wiedzą na temat platformy, dzięki czemu będziesz lepszym programistą.
DemetriKots
Kilka lat temu przełączyłem się z systemu Linux na serwery Windows i nigdy nie oglądałem się za siebie. Linux jest świetny i wydajny, ale musisz korzystać z narzędzi, które najlepiej pasują do wymagań pracy.
Reactgular,
2

Moja pierwsza rada: nie ograniczaj się wyłącznie do jednej roli. Wspaniale jest być specjalistą i mieć głęboką wiedzę na temat określonego zestawu umiejętności (na przykład PHP). Jednak równie ważne jest posiadanie szerokiej wiedzy, która obejmuje całą resztę domeny.

Z mojego doświadczenia wynika, że ​​większość zespołów nie chce zatrudnić kogoś, kto ma wiedzę, aby przepisać podstawową funkcjonalność PHP, ale raczej kogoś, kto poradzi sobie z każdym problemem, który zostanie im zgłoszony (chociaż posiadanie takiego poziomu wiedzy z pewnością nie zaszkodzi). Lub przynajmniej ktoś, kto może pomóc rozwiązać wszelkie problemy napotkane przez zespół. Wyobraź sobie na przykład sytuację, w której aplikacja przestaje działać i dotyczy to klientów. Możesz albo podnieść ręce i powiedzieć „Nie mam pojęcia, co robić ...”, albo SSH na serwer, rozpocząć skanowanie dzienników, zauważyć, że przestrzeń dyskowa określonego systemu plików jest pełna i przystąpić do jej wyczyszczenia. To niewielki przykład, ale myślę, że sprawa jest jasna. Dzięki tej podstawowej wiedzy, jako programista, możesz napisać skrypt, który monitoruje ten konkretny system plików i czyści go, gdy osiągnie określony próg. Stałeś się teraz o wiele bardziej wartościowy dla swojego menedżera.

Kolejną rzeczą, której nauczyłem się podczas mojej kariery, jest to, że wszystko idzie szybko i jeśli nie nadążasz, zostaniesz w tyle. Im więcej wiesz o całym środowisku (w tym o aspektach biznesowych), tym lepiej. Nie oznacza to, że musisz być ekspertem we wszystkim, co robisz, ale przynajmniej posiadaj wiedzę, aby nie być oznaczonym jako nieświadomy. Im bardziej jesteś zaznajomiony, tym lepiej się dostosowujesz, a tym bardziej cenny jest Twój atut dla Twojej firmy.

Aby dokładnie odpowiedzieć na pytania ...

  • Jakie elementy serwera powinienem znać jako programista?

Zapoznaj się z całym stosem aplikacji. Dowiedz się, jakiego serwera, bazy danych, mechanizmów buforowania itp. Używasz. I które wersje też. Posiadaj wystarczającą wiedzę, że możesz odtworzyć środowisko na własnym serwerze. Co samo w sobie jest niezwykle ważne. Powinieneś dążyć do tego, aby mniej więcej mieć takie same środowiska w fazie projektowania i produkcji, ponieważ zmniejsza to niespodzianki ( http://12factor.net/dev-prod-parity ).

  • Jako programista, jakie masz kontakty z serwerem?

To naprawdę zależy od zespołu. W moim szczególnym przypadku programiści odgrywają ogromną rolę w przygotowaniu środowiska. Jesteśmy najbardziej zaznajomieni z wewnętrznym działaniem aplikacji i dlatego jesteśmy w stanie najlepiej określić, jakie technologie serwerowe są w stanie ją uruchomić. Wyobrażam sobie, że nie wszystkie zespoły mają takie praktyczne podejście, ale posiadanie wystarczającej wiedzy, aby móc zaangażować się w dyskusje, jest wielką zaletą. W szczególności, jeśli chodzi o kontrolę wersji, to jako programista masz duży wpływ na to, która technologia zostanie wybrana (Git, Subversion, Mercurial itp.), I dlatego powinieneś starać się zaangażować w proces decyzyjny.

I co teraz?

Co do mojej sugestii, jak najlepiej podejść do nauki tego wszystkiego? Poruszaj stopami . Nie martw się, że spróbujesz przeczytać wszystko, co możesz na ten temat, większość z nich prawdopodobnie po prostu wycieknie z twojego mózgu, zanim skończysz. Zamiast tego zacznij opracowywać coś od podstaw. Zacznij od Vagrant ; pozwoli ci łatwo stworzyć maszynę wirtualną i zarządzać nią, którą możesz wykorzystać jako nowy plac zabaw. Następnie zainstaluj serwer WWW i bazę danych i zacznij tworzyć. Jeśli masz pomysł na aplikację, idealna, wybierz ją ... jeśli nie, znajdź samouczek lub spróbuj odtworzyć istniejącą aplikację. Chodzi o to, aby zapoznać się z całym procesem. Jako programista PHP koniecznie sprawdź PHP: The Right Way... naprawdę zawiera wiele doskonałych informacji. A co najważniejsze, nie stresuj się. Wyobrażam sobie, że podążałeś ścieżką programisty, ponieważ jest to coś, co sprawia ci przyjemność i jest pasjonatem ... nie trać tego z oczu!

JC Yamokoski
źródło
1

Koncentrując się na Co musisz wiedzieć o serwerach, aby być programistą WWW? ...

Właściwie zaskakująco mało. Twoje główne obszary wiedzy powinny obejmować programowanie, HTML, php itp.

Musisz wiedzieć, jak uruchamiać rzeczy lokalnie, a kiedy to robisz, używasz swojego urządzenia jako „serwera”. Więc podczas uruchamiania lokalnego używasz przeglądarki internetowej, aby przeglądać strony, tak jak w przypadku każdej strony internetowej ... z wyjątkiem twojej http://localhostlubhttp://127.0.0.1

Jeśli chodzi o konfigurację cgi, http itp. Nie oczekuję, że musisz to wiedzieć. Zawsze możesz przeczytać dowolną ogólną książkę na temat konfigurowania serwera WWW dla systemu operacyjnego, w którym pracujesz, i to wystarczyłoby, aby poznać ogólne warunki.

Dla większego obrazu zalecam wejście do Linuksa i nauczenie się, jak konfigurować i konfigurować maszyny, takie jak serwery WWW. Ale tylko jeśli naprawdę interesujesz się tym. Nie tylko po to, by zaimponować w wywiadach.

Na koniec zalecam rozważenie podczas wywiadów notatek na temat obszarów, o których nie wiesz wystarczająco dużo. Pomogłoby to, gdyby twoje pytanie było bardziej szczegółowe na temat tego, które warunki itp. Nie znasz.

Michael Durrant
źródło
Dzięki. I tak chciałbym się uczyć, jeśli czas na to pozwala. Czy pomoże mi książka typu „linux for dummies”. Będę wkrótce gospodarzem, czy hosting w chmurze Amazon AWS jest czymś, co przyniesie mi trochę pracy, czy też jest zupełnie inny?
Jan
1
Nie użyłbym książki o manekinach. Wiele z nich może nie mieć znaczenia. Spróbowałbym przejrzeć coś takiego jak administrowanie serwerami WWW, np. Cengagebrain.com/shop/en/US/storefront/…
Michael Durrant
tak, uruchom Linuksa jako maszynę deweloperską i skonfiguruj na nim serwer WWW. Przyzwyczaj się do zabawy i konfigurowania. W ten sposób nauczysz się wystarczająco. Tak właściwie uczysz się w pracy. Połowa rzeczy jest pod kontrolą sysadminów, co może być na początek dobre, ale w miarę postępu będziesz wolał, abyś sam otrzymał więcej konrtoli konfiguracji.
wobbily_col
0

Musisz wiedzieć poniżej, aby ukończyć cykl tworzenia stron internetowych.

1) IDE (Netbeans i Eclipse itp.)

2) Dowolny język programowania do kodowania. (PHP, Java, itp.)

3) Frontowa technologia do projektowania stron (HTML, CSS itp.)

4) Kopia zapasowa bazy danych do przechowywania i pobierania danych. (MySQL itp.)

3) System kontroli wersji do sprawdzania i pobierania repozytorium kodu.

4) narzędzie do kompilacji kodu z plikami zależnymi. (Ant, Maven)

6) Serwer WWW do wdrożenia i uruchomienia kodu.

7) Musisz znać podstawowy proces wdrażania na serwerach, aby uruchomić i przetestować komponent web i ejb. (Tomcat, serwer Web-Logic)

Ratnesh Dubey
źródło
0

Oprócz odpowiedzi DemetriKots dodam również spojrzenie na rozwiązania do automatycznego wdrażania i ciągłej integracji. Wstępne skonfigurowanie serwera to tylko jeden krok, a wdrożenie przez FTP jest bolesne i podatne na błędy, bez odpowiedniego rozwiązania dla wycofywania złych wdrożeń.

  • Hudson - serwer ciągłej integracji
  • Phing - automatyczne narzędzie do budowania, specjalnie dla PHP, oparte na Ant
  • Ant - automatyczne narzędzie do budowania
  • Capistrano - twórz skrypty wdrażania, aby zautomatyzować i ułatwić wdrażanie aplikacji internetowej.
Kikimac
źródło