title: Krok między nauką programowania a faktycznym programowaniem małego projektu (C#)

text: Jestem studentem projektowania gier, świadomym częstych rad, że powinienem być dobry również w czymś innym (programowanie/sztuka), więc jestem przydatny, gdy projektant nie jest wymagany, a także po to, aby być bardziej użytecznym - ogólnie jako chęć zwiększenia mojej zdolności do zatrudnienia, wartości w projektach grupowych i umożliwienia mi realizacji projektów indywidualnych (co wymagałoby Projektowania I programowania ORAZ Sztuki, a wszystko to z tego, co potrafię wyprodukować). W związku z tym chciałbym ukończyć kilka drobnych projektów C#. W szczególności chciałbym napisać prosty klon Ponga w ten weekend, zanim semestr rozpocznie się ponownie w poniedziałek. Problem polega na tym, że za każdym razem, gdy próbuję napisać program, o ile nie podąża on ślepo za instrukcjami (co jest po prostu papugowaniem), nie jestem w stanie ustanowić przepływu pracy, który popycha mnie do przodu. Jeśli mam pomysł lub mechanika, który chcę udokumentować, mam kilka szablonów, do których się odwołuję i które wypełniam. Gdybym chciał wyprodukować zasób artystyczny, rozważyłbym, czym jest zasób (samochód, osoba), styl graficzny (sztuka pikselowa lub rysunek lub 3d), ograniczenia techniczne (rozdzielczość/formaty plików). W przypadku przepływu pracy programistycznej mam wrażenie, że mam swój pseudokod tego, co chcę zrobić, przechodzę przez każdy element i sprawdzam odniesienie do skryptu, aby zobaczyć, jak robię każdy krok i dalej je rozkładam zgodnie z wymaganiami. Jednak mam, powiedzmy, "Narysuj wiosło_1, przesuń wiosło 1 w górę/w dół w stosunku do danych wejściowych,..." i nie mogę zrobić postępu. Dostałem moduły w różnych językach w ciągu ostatnich dwóch lat (które zdałem wszystkie - ponieważ dotyczy to tylko instrukcji papugowania), jednak nie mogę wybrać czegoś do zrobienia, jak to zrobić, a następnie to zrobić. Jak zrobić ten przeskok między luźną znajomością programowania a znajomością podstaw struktury i słownictwa w kierunku faktycznego napisania czegoś (brak kopiowania/wklejania kodu z googlowania - po zrobieniu tego dziesiątki razy jestem tylko sfrustrowany i zły i odchodzisz od programowania na miesiące, aż znowu się pojawi)?


title: Jak się doskonalić i rozwijać jako programista?

text: > **Możliwy duplikat:** > Jak poprawić swoje umiejętności kodowania? Jestem 4-letnim doświadczonym programistą, a JAVA jest moją mocną stroną. Znam podstawy programowania webowego, C++ android, blackberry. Zastanawiałem się, jak powinienem się poprawić. Czy nauka nowych języków pomaga, czy nauka projektowania i nauka zostania architektem? Jak planujecie się na przyszłość? Czy można uczyć się języka co roku? czy być w kontakcie z nowymi technologiami? Jak możecie poprawić się jako główny programista?


title: Gdzie iść stąd, jak poprawić / dowiedzieć się więcej

text: > **Możliwy duplikat:** > Kończę dyplom z informatyki, ale nie czuję, że umiem > jak programować Skończyłem około 4 lata temu podwójna licencjat z Software Eng/Comp Sci. Pierwszą pracę w startupie dostałem na ostatnim roku, byłem z nimi przez 2,5 roku, potem założyłem własną firmę. Jak dotąd wszystko idzie świetnie, wielu klientów i stałej pracy itp., ale wychodząc z uniwersytetu i rozpoczynając działalność, nigdy nie miałem żadnej formy ani starszego inżyniera oprogramowania, który kierował moją pracą lub sugerował ulepszenia itp. Jaki jest najlepszy sposób na mnie poprawić i dowiedzieć się więcej? Książki? Egzaminy MS? Inny? Programuję w C#, ASP.NET/MVC. **Aktualizacja** Problem nie jest tak naprawdę związany z wydawaniem produktów, wydałem kilka, które działają i są zadowoleni z klientów. Bardziej chodzi o jakość kodu, najlepsze praktyki, skąd mam wiedzieć, że coś, co mam, jest poprawne, może to działać, ale mogą istnieć sposoby na zakodowanie tego znacznie wydajniej lub przez przestrzeganie pewnego rodzaju standardowych cheerów za wszelkie odpowiedzi! Matt


title: Jak stworzyć własny język programowania i kompilator do niego?

text: Jestem dogłębny w programowaniu i natknąłem się na języki takie jak BASIC, FORTRAN, COBOL, LISP, LOGO, Java, C++, C, MATLAB, Mathematica, Python, Ruby, Perl, JavaScript, Assembly i tak dalej. Nie rozumiem, jak ludzie tworzą języki programowania i opracowują dla nich kompilatory. Nie mogłem też zrozumieć, jak ludzie tworzą systemy operacyjne, takie jak Windows, Mac, UNIX, DOS i tak dalej. Inną rzeczą, która jest dla mnie tajemnicza, jest to, jak ludzie tworzą biblioteki, takie jak OpenGL, OpenCL, OpenCV, Cocoa, MFC i tak dalej. Ostatnią rzeczą, której nie jestem w stanie zrozumieć, jest to, jak naukowcy opracowują język asemblera i asembler dla mikroprocesora. Naprawdę chciałbym się tego wszystkiego nauczyć, a mam 15 lat. Zawsze chciałem być informatykiem kimś takim jak Babbage, Turing, Shannon lub Dennis Ritchie. * * * Przeczytałem już książkę koncepcyjną Aho's Compiler Design i Tanenbaum's OS i wszystkie one omawiają tylko koncepcje i kod na wysokim poziomie. Nie wchodzą w szczegóły i niuanse oraz jak opracować kompilator lub system operacyjny. Chcę konkretnego zrozumienia, abym mógł je stworzyć samodzielnie, a nie tylko zrozumienia, czym jest wątek, semafor, proces lub parsowanie. Zapytałem o to wszystko mojego brata. Jest studentem SB w EECS na MIT i nie ma pojęcia, jak właściwie tworzyć te wszystkie rzeczy w prawdziwym świecie. Wszystko, co wie, to po prostu zrozumienie koncepcji kompilatora i systemu operacyjnego, takich jak te, o których wspomnieliście (np. Wątek, synchronizacja, współbieżność, zarządzanie pamięcią, analiza leksykalna, generowanie kodu pośredniego i tak dalej)


title: Chcę stworzyć nowy język

text: > **Możliwe duplikowanie:** > Jak stworzyć własny język programowania i kompilator do niego Chcę stworzyć nowy język ogólnego przeznaczenia, który będzie kompilował do JavaScript i chciałbym móc go w tym samym napisać JavaScript. Nie wdałbym się zbytnio w szczegóły, ale jak mogę to zrobić? Obecnie zawodowo koduję m.in. w JS, Javie, Groovy, PL/SQL, PHP, więc jestem objęty historią po stronie użytkownika języka, ale nie mam wiedzy teoretycznej ani praktycznej od strony tworzenia języka. Przeglądałem Internet przez ostatni tydzień i zauważyłem zupę akronimów i / lub nazw takich jak RR, LALR, BNF, AST itp., więc myślę, że potrzebuję dwóch rzeczy: * Dobrej(y) książki o teorii * Pracujących projektów lub eksperymentów które mogę wykorzystać do szybkiego rozpoczęcia nauki (coś darmowego jak ten narcyz) EDIT: Nie, to pytanie nie obejmuje DOKŁADNIE TEJ SAMEJ treści i nie dotyczy tego samego tematu, nawet gorzej, chociaż istnieją dwie dobre odpowiedzi, nie nie odpowiadam, jak praktycznie mogę WYKORZYSTAĆ JS DO BUDOWANIA NARZĘDZI (TRANSPILER JS), KTÓRYCH POTRZEBUJĘ DO NOWEGO JĘZYKA. Jakieś pomysły?


title: Czy tworzenie obiektu powinno pośrednio czy jawnie tworzyć plik?

text: Tworzę obiekt, którego jedynym celem jest odczytanie pliku w jednym formacie i utworzenie innego w innym formacie. Czy najlepiej jest utworzyć plik wyjściowy niejawnie podczas inicjowania obiektu, czy też mieć metodę publiczną, która daje użytkownikowi wybór, kiedy ten plik zostanie utworzony?


title: Odwróć jak uczyć programowania?

text: Myślałem o odpowiedziach na mój wątek dotyczący programowania programu jak pisarz...? i większość ludzi zgodziła się, że powinieneś mieć jakąś strukturę i budować z tego miejsca, zamiast po prostu pisać. Nowi programiści mają jednak tendencję do pisania, znajdowania błędów, dodawania kodu i powtarzania, dopóki to nie zadziała. Cytując Richarda Pattisa: > „Podczas debugowania nowicjusze wprowadzają kod korygujący; eksperci usuwają wadliwy > kod.” Wszystko w porządku, ale problem polega na tym, że ludzie **powtarzają swoje błędy**. Po wystarczającym popełnieniu błędu, w końcu uczą się go unikać. Aby dać praktyczny przykład, rozważmy „ostrzeżenie: kontrola osiąga koniec funkcji niepustej”. Większość nowych programistów zobaczy to, wygoogluje, zorientuje się, co jest nie tak, doda `return 0;` i gotowe. Nie obchodzi ich błąd; chcą tylko rozwiązania Co jeśli odwrócimy tę koncepcję? Dlaczego najpierw nie nauczyć ich, jak narobić bałaganu? Możliwym przypisaniem może być: > Rozważ ostrzeżenie „kontrola osiąga koniec funkcji nieunieważnionej” Co powoduje > pojawienie się tego ostrzeżenia? Podaj kod, aby zademonstrować wszystkie sposoby wyświetlania tego ostrzeżenia >. Oceń następujące przykłady kodu i wyjaśnij, dlaczego pojawia się ostrzeżenie >. W ten sposób programista dowiaduje się, że wszystkie niepuste funkcje muszą coś zwrócić. Musieliby napisać kod, aby utworzyć ten błąd (debugowanie/testowanie) i ocenić istniejący kod, aby znaleźć błąd (przegląd kodu). Nie mówię, że uczymy tego _przed_ podstawami, ponieważ powinieneś zrozumieć iterację/rekurencję, pętle, przypisanie, równość itp. przed napisaniem znaczącego kodu. Mówię, że zamiast rozwiązywać błędy, które popełniają nowicjusze, dlaczego nie skoncentrować tej wiedzy na początku. Co myślicie o tym pomyśle? Jakie są wady tego podejścia i czy można je wdrożyć w dowolnym miejscu?


title: php sprawia, że dolar jest opcjonalny

text: Czy istnieje jakiś powód, dla którego język PHP nie mógł zostać zaktualizowany w przyszłej wersji, aby prefiks $ w nazwach zmiennych był opcjonalny? Powody, które mogłyby złamać istniejący kod? Myślę, że nadal będzie to wymagane do interpolacji ciągów, na przykład "Hello $name", ale w większości przypadków byłoby to opcjonalne. Na przykład $name = 'Bob'; echo "Witaj $imie"; nadal byłby ważny, ale tak samo byłoby name = 'Bob'; echo "Witaj $imie";


title: Czy dobrą praktyką jest tworzenie ClassCollection innej klasy?

text: Powiedzmy, że mam klasę `Samochód`: public class Car { public string Engine { get; ustawić; } public string Seat { get; ustawić; } public string Opony { get; ustawić; } } Powiedzmy, że robimy system o parkingu, zamierzam używać dużo klasy `Car`, więc tworzymy klasę `CarCollection`, która może mieć kilka dodatkowych metod, takich jak `FindCarByModel` : public class CarCollection { public List<Car> Cars { get; ustawić; } public Car FindCarByModel(string model) { // kod tutaj return new Car(); } } Jeśli tworzę klasę `ParkingLot`, jaka jest najlepsza praktyka? **Opcja #1:** public class ParkingLot { public List<Car> Cars { get; ustawić; } //niektóre inne właściwości } **Opcja #2:** public class ParkingLot { public CarCollection Cars { get; ustawić; } //niektóre inne właściwości } Czy tworzenie zbioru `ClassCollection` innej `Class` jest w ogóle dobrą praktyką?


title: Jak uwzględnić iterację naprawiania błędów?

text: Scrum wdrożyliśmy z powodzeniem przez ostatnie 5 miesięcy. Mimo to dzielą nas 3 tygodnie od PROD i _nigdy_ nie przeprowadzamy żadnego kompleksowego testu integracyjnego. AUĆ! Potrzebuję pomocy. Bez zajmowania się przyczynami tego (w TYM punkcie), musimy teraz zaplanować obecną iterację, która składa się z drobnych ulepszeń i WIELU wciąż nieznanych poprawek błędów. Jak wytłumaczysz ten scenariusz? Jak planujesz swoją iterację, aby naprawić błędy, które jeszcze nie zostały znalezione?


title: Jakie technologie stworzyć interfejs sieciowy dla instrumentu naukowego?

text: Pracuję nad oprogramowaniem do oprzyrządowania naukowego. W instrumencie znajduje się wbudowany komputer z systemem Windows 7, który steruje różnymi komponentami urządzenia; kamery, silniki, termometry itp. Napisałem podstawowy interfejs w WPF/C# i używam zdalnego pulpitu do testowania aplikacji. (Powodem jest bezpieczeństwo, instrument będzie używany w obszarach o wysokim napromieniowaniu). Czego chcę: Serwer działa na wbudowanym komputerze PC. Użytkownik wchodzi na stronę internetową pod adresem 192.168.x.x (przydałby się dostęp do Internetu, ale nie jest konieczny) i klika „zbierz dane”, a serwer ładuje odpowiednie pliki C# .dll, pozyskuje dane i przesyła je do użytkownika. Szybkość/skalowalność nie stanowi większego problemu, ponieważ akwizycja danych może zająć od kilku minut do kilku dni. O czym jestem zdezorientowany: Jak mogę przejść do wykonywania mojego istniejącego kodu C# z aplikacji sieci Web? tj. jakiej technologii .NET powinienem użyć?


title: Jaka jest dokładna definicja paradygmatu programowania?

text: Wikipedia definiuje **paradygmat programowania** w ten sposób: > podstawowy styl programowania komputerowego, który znajduje odzwierciedlenie w opisowym tekście tagu paradygmaty na tej stronie. Uważam to za rozczarowującą definicję. Każdy, kto zna słowa „programowanie” i „paradygmat”, może sobie z tym poradzić, nie wiedząc o tym nic więcej. Istnieje wiele stylów programowania komputerowego na wielu poziomach abstrakcji; w ramach dowolnego paradygmatu programowania możliwe są różne style. Na przykład, Bob Martin mówi w _Czysty kod_ (13): > Potraktuj tę książkę jako opis _Szkoły Czystości Mentora Obiektów > Kod_. Techniki i nauki w nich zawarte są sposobem, w jaki _ćwiczymy_ > _naszą_ sztukę. Jesteśmy gotowi twierdzić, że jeśli będziesz postępować zgodnie z tymi naukami, będziesz > cieszyć się korzyściami, którymi się cieszyliśmy, i nauczysz się pisać > kod, który jest czysty i profesjonalny. Ale nie popełniaj błędu myśląc >, że w jakiś sposób mamy rację w jakimkolwiek absolutnym sensie. Tak więc Bob Martin nie twierdzi, że ma _poprawny_ styl programowania obiektowego, nawet jeśli on, jeśli ktokolwiek, może mieć do tego pewne roszczenia. Ale nawet w jego szkole programowania możemy mieć różne style formatowania kodu (K&R itp.). Istnieje wiele stylów programowania na wielu poziomach. Jak więc możemy rygorystycznie zdefiniować _paradygmat programowania_, aby odróżnić go od innych kategorii stylów programowania? _Podstawowe_ jest nieco pomocne, ale nie konkretne. Jak możemy zdefiniować to wyrażenie w sposób, który będzie komunikował więcej niż oddzielne znaczenia każdego z tych dwóch słów – innymi słowy, jak zdefiniować je w sposób, który zapewni dodatkowe znaczenie dla kogoś, kto mówi po angielsku, ale nie jest t znasz różne paradygmaty?


title: Jak uczeń CS negocjuje podczas/po rozmowie kwalifikacyjnej?

text: W porządku, przeszedłem do drugiego etapu procesu rozmowy kwalifikacyjnej. W tym momencie pracuję przy założeniu, że mogę otrzymać ofertę pracy -- lecenie tyłka do Redmond byłoby sporym wydatkiem, gdyby przynajmniej nie brali mnie za coś (*skrzyżuje palce*). Tak więc, jeśli ktoś oferuje stanowisko, jak powinien negocjować student CS? Słyszałem kilka strategii dotyczących radzenia sobie z firmami zajmującymi się oprogramowaniem, gdy rozważa się zatrudnienie, ale większość z nich uważa, że programista ma silną pozycję. Podczas takich egzaminów ma duże doświadczenie zawodowe, a nawet może mieć zbyt wysokie kwalifikacje w stosunku do tego, czego szuka pracodawca. (s)jest częścią małego rynku pracy wykwalifikowanych programistów, ponieważ 99% aplikacji, które otrzymują firmy, pochodzi od tych, którzy mają żałośnie niskie kwalifikacje. Jestem w zupełnie innej sytuacji. Myślę, że porównuję się korzystnie z większością moich kolegów ze studiów, a jestem programistą od prawie 10 lat, ale często nadal czuję się zielony w porównaniu z większością moich współpracowników. Jestem w sytuacji, w której pracodawca posiada większość żetonów; wyświadczyliby mi niezłą przysługę, zatrudniając mnie. Myślę, że ten scenariusz znacznie różni się od celów większości porad, które widziałem. Przede wszystkim nie chcę być takim kutasem w negocjacjach, że to niweczy moje szanse na faktyczne działanie na pozycji, nawet jeśli oznacza to wcale nie negocjowanie. Jak podejść do takiego scenariusza? * * * PS Jeśli to jest nie na temat, nie wahaj się go zamknąć - myślę, że to granica i uważam, że lepiej zapytać i być zamkniętym niż nie pytać wcale ;)


title: Jaka jest różnica między „programistą” a „programistą”?

text: > **Możliwy duplikat:** > Jakie są kluczowe różnice między inżynierami oprogramowania a programistami? > Jaka jest różnica między inżynierem oprogramowania a programistą? Jaka jest różnica w tej terminologii? Czy jeden jest uważany za bardziej profesjonalny od drugiego? ### Powiązane pytania * Gdy ktoś pyta Cię, co robisz, co mówisz (np. programista, programista, małpa kodu)? * Jaka jest różnica między inżynierem oprogramowania a programistą? * Jakie są kluczowe różnice między inżynierami oprogramowania a programistami?


Jakie są kluczowe różnice między inżynierami oprogramowania a programistami?


title: Jak wspiąć się w hierarchii od programisty (kodera) do pełnoprawnego inżyniera oprogramowania?

text: > **Możliwy duplikat:** > Jaka jest różnica między inżynierem oprogramowania a programistą? > Jak przejść od programisty do kierownika projektu Pisanie kodu przez całe życie nie jest zbyt praktyczne pod względem rozwoju, czy może? Słyszałem specjalistów z branży, którzy skupiają się na metodologii UML i System Analysis & Design, aby nowi i doświadczeni programiści mogli się dalej rozwijać i zostać inżynierem oprogramowania. Umiejętności komunikacyjne odgrywają również istotną rolę w zarządzaniu zespołami i projektami. Szukam tutaj dobrych rad poza nauką UML i SAD.


title: Jak przejść od programisty do kierownika projektu

text: W swojej pracy jestem obecnie programistą, ale w ciągu najbliższych kilku tygodni przejmę kontrolę nad własnym projektem. Zastanawiałem się, czy ktokolwiek inny tutaj był w takiej samej sytuacji, a jeśli tak, jakie rady możesz mi zaoferować, aby pomóc mi lepiej prowadzić mój projekt. Mile widziane doświadczenie w kontaktach z wykonawcami. Trochę więcej informacji: * Projekt będzie miał 3 osoby, w tym ja, z dodatkowymi osobami, które przyjdą, gdy będą potrzebować testów. * Projekt był programowany głównie przez 2 osoby * Chciałbym wnieść swój wkład w programowanie, bo lubię to robić i myślę, że mogę coś dodać do programu, ale boję się jak zareagują wykonawcy. Nie chcę wywoływać złych uczuć, które mogą zaszkodzić projektowi. EDYCJA: Zapomniałem wspomnieć, że będę musiał odbierać komunikację z klientami, aby upewnić się, że ich potrzeby są spełnione. Wszelkie porady dotyczące rozmów z klientami na zimno byłyby bardzo mile widziane. EDYCJA 2: To nie jest nowy projekt, wybieram go w okolicach wersji 6. Przepraszam, że wcześniej tego nie wyjaśniłem.


title: Jaka jest rzeczywista różnica między programistami komputerowymi a inżynierami oprogramowania? Czy ten opis jest dokładny?

text: Według Bureau of Labor Statistics jest to różnica: > Programiści komputerowi piszą programy. Po tym, jak inżynierowie oprogramowania komputerowego i analitycy systemów zaprojektują programy, programista przekształca je w logiczną serię instrukcji, które komputer może wykonać. Przewidują, że zatrudnienie inżynierów oprogramowania wzrośnie o 34%, ale spadnie w przypadku programistów. Czy rzeczywiście istnieje taka rzeczywista różnica między tymi dwoma miejscami pracy? Jak zdobyć pracę do projektowania programów (do wdrożenia przez innych)?


title: Inżynier oprogramowania i informatycy

text: Jeśli ukończyłeś kierunek informatyka lub informatyka i masz pracę, która obejmuje programowanie, np. tworzenie stron internetowych i systemów, czy możesz nazywać się inżynierem oprogramowania?


title: Dlaczego inżynieria oprogramowania = programowanie?

text: Mieszkam w Ameryce Południowej, a tutaj tłumaczenie "Inżynieria oprogramowania" to wiedza z przedmiotów SWEBOK (Software Engineering Body of Knowledge), takich jak: Wymagania, Metody rozwoju (Wodospad, Spirala, SCRUM itp.), Testy , Jakość, Konserwacja itp. **Dlaczego materiały w języku angielskim, takie jak zajęcia, artykuły, a nawet pytania dotyczące stackoverflow dotyczące inżynierii oprogramowania, dotyczą tylko (zasadniczo) programowania?** Przykład: http://stackoverflow.com/questions/131571/ Recommended-books-for-software-engineering Większość polecanych książek w powyższych odpowiedziach dotyczy głównie programowania, a „Biblie” inżynierii oprogramowania zawierające pozycje SWEBOK napisane przez Pressmana i Summerville są prawie niezauważone. Właściwie większość elementów SWEBOK nie skupia się w kodzie programowania. Pytanie drugorzędne: Jaka jest angielska nazwa zawodu/przedmiotu, który naprawdę musi znać wszystkie przedmioty SWEBOK? (nie tylko „dobre programowanie”).


title: Jak mam się opisać w CV? Jako programista? Inżynier oprogramowania? Starszy programista?

text: Wiem, że często o to pytano, ale chciałbym wiedzieć, jak się prezentować w swoim CV i przyszłym pracownikom. Mam 24 lata i zaczynałem jako programista C#/ASP.NET po ukończeniu Uniwersytetu w 2010 roku (studia na kierunku Informatyka). Od tego czasu pracowałem dla stosunkowo małego domu programistycznego (około 8 pracowników), a od początku 2012 roku byłem zasadniczo najstarszym programistą .NET (pozostali w firmie mają większe doświadczenie, ale tylko w drastycznie różnych/przestarzałych językach i dopiero uczą się .NET). Zajmuję się tam projektowaniem i tworzeniem aplikacji. Zwykle nie piszę specyfikacji, ale specyfikacje są zasadniczo wymaganiami klientów - wszystkie szczegóły techniczne, w tym projekt bazy danych i aplikacji, zależą ode mnie. Posiadam również 3 certyfikaty MCTS i pracuję w kierunku MCPD. Ponieważ zasadniczo mam tylko około 3 lata doświadczenia, nie jestem pewien, jak się zaprezentować - wyraźnie nie jestem tym, co większość stanowiłoby „senior”! Czy zaklasyfikowałbyś mnie jako programistę, czy coś więcej?


title: Informatyka i branża IT

text: Mam dyplom z informatyki i jestem zatrudniony jako inżynier oprogramowania. Rekruterzy na LinkedIn regularnie zwracają się do mnie z propozycjami „programisty”, „programisty” lub ogólnych „oprogramowania i/lub branży komputerowej”. Co jakiś czas jednak podchodzi do mnie rekruter z ofertą „stanowiska IT”. Rozumiem, że w absolutnie ogólnym sensie wszystko i wszystko pomiędzy słowami kluczowymi _komputer_ i _oprogramowanie_ będzie w pewnym momencie obejmować IT, ale jeśli chodzi o bardziej szczegółowe dyskusje, szczególnie oferty na rozmowę kwalifikacyjną na „stanowisko IT”, często uważam, że to być trochę dziwnym. Często wydaje mi się, że proponowano mi rozmowę kwalifikacyjną na stanowisko DBA, administratora systemu lub kierownika działu IT, stanowiska, które są dla mnie równie obce jak medycyna. Aby uniknąć subiektywizmu, uprościmy moje pytanie. Czy _inżynier oprogramowania_ , _koder_ , _programista_ lub _programista_ , zajmuje stanowisko IT? Branża IT (tworzenie aplikacji, nauka, multimedia/gry)?


title: Czy to, co robię, czyni mnie inżynierem oprogramowania?

text: > **Możliwy duplikat:** > Jakie są kluczowe różnice między inżynierami oprogramowania a programistami? Od 8 lat jestem właścicielem firmy programistycznej. Po latach działania zorientowałem się, że cały czas to, co robię, jest pracą inżyniera oprogramowania. Mam w głowie kilka pytań, które chciałbym wam zadać. Wiem, że odpowiedzi będą subiektywne. Czy jako inżynier oprogramowania naprawdę musisz być doświadczonym programistą? Czy to prawda, że inżynierowie oprogramowania nie kodują, tylko tworzą diagramy, specyfikacje funkcjonalne. i inne powiązane dokumenty? Zauważyłem też, że nie ma żadnych standardów SE ani egzaminów zarządczych do zdania i jest to naprawdę dynamiczna i sytuacyjna praca. Więc w zasadzie mogę po prostu ogłosić się inżynierem oprogramowania w oparciu o doświadczenie i produkt?


title: Czy istnieją implementacje deterministycznych wyrażeń regularnych?

text: Samo pytanie jest już w tytule, więc tutaj podam tylko dodatkowe szczegóły. Wyrażenie regularne nazywam „deterministycznym”, jeśli po przekształceniu wyrażenia regularnego w niedeterministyczny automat skończony w oczywisty sposób wynik jest już deterministycznym automatem skończonym, bez przeprowadzenia jawnej procedury usuwania niedeterminizmu. Na przykład: * **Deterministyczny:** `ab(cb)*` * **Niedeterministyczny:** `a(bc)*b` Nigdy nie używam niedeterministycznych wyrażeń regularnych. W szczególności oznacza to, że dopasowanie moich wyrażeń regularnych nigdy nie wymaga cofania się. Chcę implementacji wyrażeń regularnych, która jest jawnie zaprojektowana do obsługi deterministycznych wyrażeń regularnych i wykorzystuje je w celu dopasowania strumieni znaków, które muszą być odczytywane sekwencyjnie, na przykład `std::istream`s w C++. Preferowane przeze mnie języki to Haskell, Standard ML, Rust i C++11, chociaż jestem otwarty na sugestie dotyczące języków statycznych.


title: Jak długo powinno trwać spotkanie dotyczące planowania sprintu?

text: Z Twojego doświadczenia wynika, jak długo powinno trwać spotkanie planistyczne (SCRUM)? 8 godzin? A może powinien być krótszy (zwięzły) i dalsze dyskusje powinny być zaplanowane w ramach sprintu (10 dni sprintu)?


title: Czy wysoka reputacja w Stack Overflow pomoże w zdobyciu dobrej pracy?

text: W poście Joel Spolsky wspomniał, że 5-cyfrowa reputacja przepełnienia stosu może pomóc ci zdobyć pracę płacącą 100 000 $ +. Ile z tego jest prawdziwe? Czy ktoś chciałby podzielić się swoim sukcesem w uzyskaniu dobrze płatnej pracy dzięki swojej reputacji na stronach Stack Exchange? Czytałem gdzieś, że osoba dostała ofertę rozmowy kwalifikacyjnej od Google, ponieważ rekruter uznał, że jego reputacja w Stack Overflow jest imponująca. Ktoś jeszcze z podobnymi historiami?


title: Czy posiadanie wysokiej „reputacji” na StackOverflow pomaga Ci w zdobyciu pracy? Co robią inne witryny społecznościowe?

text: > **Możliwy duplikat:** > Czy wysoka reputacja w Stack Overflow pomoże znaleźć dobrą pracę? Po prostu ciekaw, jakich stron internetowych Web2.0 używają pracodawcy (jeśli w ogóle) do wstępnego sprawdzania potencjalnych pracowników? Czy któryś pracodawca faktycznie odnosi się do „reputacji” użytkownika w Internecie, aby znaleźć pracę?


title: Czy wysoka reputacja na programistach pomoże w zdobyciu dobrej pracy?

text: > **Możliwy duplikat:** > Czy wysoka reputacja w Stack Overflow pomoże znaleźć dobrą pracę? Odnosząc się do tego pytania, czy uważasz, że posiadanie wysokiej reputacji na tej stronie pomoże w znalezieniu dobrej pracy? Oprócz niemądrych i humorystycznych pytań, na programistach możemy znaleźć wiele wysokiej jakości pytań teoretycznych. Myślę, że _if_ Stack Overflow ostatecznie ewoluuje w „ściśle związany z programowaniem” (co zwykle jest „ściśle związane z kodowaniem_”), pytania dotyczące programistów będą znacznie ciekawsze i bardziej znaczące („Stack Overflow” = „Mam to specyficzne kodowanie /problem z implementacją"; "Programiści" = "Najlepsze praktyki, kształtowanie zespołu, paradygmaty, teoria CS"). Czy wysoka reputacja na tej stronie może pomóc (lub przynajmniej być dobrym punktem odniesienia)? A potem mniej niż Stack Overflow?


title: Czego chciałbyś nauczyć się na uniwersytecie przed przejściem do przemysłu?

text: Czy jest coś, czego chciałbyś się nauczyć, jako część kursu lub czegoś, na studiach, teraz, gdy pracujesz w przemyśle od jakiegoś czasu? Może coś takiego jak „Chciałbym, żeby był kurs szacowania czasu” albo „Szkoda, że nie nauczyłem się pracować w dużych projektach” i tak dalej.


title: Jak bezpiecznie zaimplementować role w aplikacji Windows Form?

text: Co uważa się za najlepszą praktykę w zakresie wdrażania zabezpieczeń opartych na rolach aplikacji jako niezależny dostawca oprogramowania? Innymi słowy, zezwalaj użytkownikom tylko na dostęp do niektórych funkcji w aplikacji na podstawie ról, do których należą. Obecnie do przechowywania tego używamy tylko tabeli w naszej bazie danych, ale sugeruje się, że dla maksymalnej zgodności z HIPAA nie jest to wystarczająco bezpieczne. Moją pierwszą myślą było po prostu użycie grup Active Directory, ponieważ wydawałoby się, że są do tego przeznaczone, jednak po prostu nie wydaje się praktyczne poleganie na działach IT naszych klientów w celu tworzenia grup i przypisywania do nich użytkowników do grup, które są specyficzne tylko dla naszej aplikacji. To nie może być najlepsza praktyka dla niezależnych dostawców oprogramowania ... W tym momencie wydaje mi się, że prawdopodobnie najlepszym rozwiązaniem może być użycie trybu aplikacji Active Directory (ADAM) (Active Directory Lightweight Directory Services) i prawdopodobnie AzMan ( Menedżer autoryzacji systemu Windows)? Ponownie, dotyczy to aplikacji Windows Forms, a nie aplikacji sieci Web lub rozwiązania „w domu”. Jeśli ma to znaczenie, jesteśmy również w trakcie przenoszenia naszego domowego uwierzytelniania, aby zamiast tego używać Active Directory do uwierzytelniania. Warto również zauważyć, że musi to być bezpieczne (zgodne z HIPAA). Wszystkie informacje, jakie mogę znaleźć na ten temat, wydają się być przeznaczone do tworzenia aplikacji do użytku domowego lub aplikacji internetowych, a żadne z tych podejść nie wydaje się odpowiednie dla aplikacji winform. (Używamy .net do rozwoju.) pomocy! :)


Dlaczego Mono na Androida kosztuje, jeśli projekt mono jest opensource i dlatego wszystko na nim oparte musi być opensource?


title: Sprzedaj produkt zawierający zakupione oprogramowanie GPL

text: Niedawno kupiłem produkt (szablon strony internetowej na licencji GNU GPL 2.0). Mój produkt, który jest oprogramowaniem internetowym, napisanym w PHP, używa tego szablonu jako swojego wyglądu. Pytanie brzmi: Jak mogę sprzedawać oprogramowanie, które zawiera niektóre części szablonu komercyjnej witryny GNU GPL 2.0? Czy muszę płacić licencję na szablon strony internetowej za każdym razem, gdy sprzedam swój? Dziękuję.


title: Jakie są warunki, aby doświadczony programista przeszedł od pracy jako freelancer do posiadania małej firmy programistycznej?

text: Jestem programistą od 8 lat. Pracowałem przy około 20 projektach, niektóre mniejsze, niektóre większe. Wiem, jak sobie pomóc, korzystając z google magic, msdn, youtube, samouczków, poradników itp. Bawię się pomysłem, aby zdobyć mojego przyjaciela (który jest programistą od 5 lat) i zacząć moja własna firma programistyczna. Jak myślisz, jakie są warunki wstępne, aby z freelancera stać się właścicielem mojej własnej małej firmy zatrudniającej 2-3 pracowników?


title: tworzenie aplikacji internetowych z wykorzystaniem platformy .NET - kluczowe cechy w szkoleniu?

text: Pracuję dla jakiejś polskiej firmy i zamierzamy szkolić programistów w tworzeniu aplikacji webowych z wykorzystaniem .NET i proszę o opinię, co należy umieścić w tego rodzaju kursie. z góry dzięki :) PS: Potrzebuję tylko niewielkiej pomocy w badaniach, a przede wszystkim jakiejś dyskusji o tym, co jest potrzebne, a co byłoby bezużyteczną stratą czasu w zależności od twojego doświadczenia


title: Czy przy tworzeniu strony internetowej musisz płacić 100 USD miesięcznie za serwer?

text: Czy potrzebujesz wirtualnego lub dedykowanego serwera do prostego kodowania? Czy byłbyś w stanie zbudować stronę internetową od zera na PC i wziąć serwer tylko jeden dzień przed uruchomieniem wersji beta?


title: Czy jest jakaś praktyczna sztuczka, aby zapamiętać różnicę między big-endian a little-endian?

text: Nie pracuję na co dzień z problemami big-endian i little-endian i dlatego bardzo trudno jest mi zapamiętać, który z nich jest jaki. Niedawno dostałem wywiad z pytaniem o różnicę między nimi; odkąd nie pamiętałem, postanowiłem „zgadnąć” (w końcu 50% szansy), ale nie udało mi się. Czy jest więc jakaś powszechnie znana praktyczna sztuczka, aby przypomnieć sobie, jaka jest różnica między big endian a little endian?


title: Sprawdzanie dozwolonych znaków lub sprawdzanie niedozwolonych znaków

text: Zawsze sprawdzałem poprawność moich danych wejściowych użytkownika na podstawie listy prawidłowych/dozwolonych znaków, a nie listy nieprawidłowych/niedozwolonych znaków (lub po prostu braku walidacji). To tylko nawyk, który nabrałem, prawdopodobnie na tej stronie i nigdy tak naprawdę tego nie kwestionowałem, aż do teraz. Ma to sens, jeśli chcesz, powiedzmy, zweryfikować numer telefonu lub sprawdzić numer kierunkowy, jednak ostatnio zdałem sobie sprawę, że sprawdzam również dane wejściowe, takie jak pola tekstowe, komentarze użytkownika itp., dla których dane wejściowe nie mają solidna składnia. Główną zaletą zawsze wydawało się, że: **Weryfikacja dozwolonych znaków zmniejsza ryzyko przeoczenia potencjalnie złośliwej postaci, ale zwiększa ryzyko, że nie zezwolisz na użycie postaci, której użytkownik może chcieć użyć. To pierwsze jest ważniejsze.** Ale pod warunkiem, że prawidłowo zapobiegam wstrzykiwaniu SQL (przy użyciu przygotowanych instrukcji), a także unikam danych wyjściowych, czy jest jakaś potrzeba tej dodatkowej bariery ochrony? Wydaje mi się, że zezwalam na praktycznie każdy znak na klawiaturze, a zapominam o niektórych typowych znakach. Czy istnieje przyjęta praktyka w takiej sytuacji? A może brakuje mi czegoś oczywistego? Dziękuję.


title: Jaka jest różnica między językiem Scala a językiem cejlońskim Red Hata?

text: Język Ceylon firmy Red Hat ma kilka interesujących ulepszeń w stosunku do Javy: * Ogólna wizja: ucz się na błędach Javy, zachowaj dobre, pozbądź się złych * Nacisk na czytelność i łatwość uczenia się/użytkowania * Statyczne pisanie (znajdź błędy w czasie kompilacji, a nie w czasie wykonywania) * Brak „specjalnych” typów, wszystko jest obiektem * Parametry nazwane i opcjonalne (C# 4.0) * Typy dopuszczające wartość null (C# 2.0) * Nie ma potrzeby jawnego pobierania/ustawiania, dopóki nie będziesz na nie gotowy (C# 3.0) * Wpisz wnioskowanie za pomocą słowa kluczowego „local” (C# 3.0 „var”) * Sekwencje (tablice) i towarzysząca im słodycz syntaktyczna (C# 3.0) * Prosta implementacja funkcji wyższego rzędu Nie znam Scali, ale słyszałem, że oferuje pewne podobne zalety w porównaniu z Javą. Jak pod tym względem Scala porównałaby się do Cejlonu?


title: Znajdź możliwe odmiany jednego przedmiotu z wielu koszyków.

text: Mam trzy kosze z piłeczkami i każdy z nich ma 10 piłek, które mają następujące numery: > Koszyk 1: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 > > Koszyk 2: 11, 12 , 13, 14, 15, 16, 17, 18, 19, 20 > > Koszyk 3: 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 Jakie byłyby możliwe odmiany, gdybym wybrać jedną piłkę z każdego kosza? Myślę, że nazywa się to prawdopodobieństwem w matematyce, ale nie jestem pewien. Jak napisałbyś ten kod w C# (lub innym języku programowania), aby uzyskać poprawne wyniki? Edycja: Na podstawie komentarza @Kilian Foth, oto rozwiązanie w C#: class Program { static void Main(string[] args) { IEnumerable<string> basket1 = new List<string> { "1", "2", " 3", "4", "5", "6", "7", "8", "9", "10" }; IEnumerable<string> basket2 = new List<string> { "11", "12", "13", "14", "15", "16", "17", "18", "19", "20 " }; IEnumerable<string> basket3 = new List<string> { "21", "22", "23", "24", "25", "26", "27", "28", "29", "30 " }; foreach (zmienna element1 w koszyku1) foreach (zmienna element2 w koszyku2) foreach (zmienna element3 w koszyku3) { Console.WriteLine("{0}, {1}, {2}", element1, element2, element3); } Konsola.ReadLine(); } }


title: Jaka może być moja ścieżka? Networking, programowanie czy coś innego?

text: Przede wszystkim chciałbym przedstawić swój krótki opis: byłem studentem lotnictwa, ale nie poszedłem tą ścieżką, ponieważ straciłem zainteresowanie. Teraz jestem informatykiem studentka i obecnie zaprzestała nauki z powodu zamieszania. Nie wiem, którą ścieżkę wybrać: czy może to być programowanie czy networking? Ktoś mi powiedział, że na networkingu pieniądze są łatwe, praca jest łatwa. Inni mówili mi, że programowanie jest dla mnie najbardziej odpowiednie, ponieważ jestem bardzo uzdolniony i doskonały w figurach. Chcę wybrać networking, ale nie mogę znaleźć swojej pasji do tego, mój rozum podpowiada mi, ale serce nie... a na programowaniu nie wiem, który język mam wybrać lub czy mi się podoba lub nie. Dobry mentor, nawet jeśli tylko online, byłby dla mnie bardzo dużym plusem, ale nie sądzę, żeby było wielu, którzy mogliby poświęcić swój czas na uczenie nikogo… ale jestem bardzo chętny do nauki. Moją prawdziwą pasją jest granie! Chcę pracować w branży gier, chcę być człowiekiem stojącym za tymi grami! Od urodzenia jestem maniakiem graczy. Ale nie wiem, jak dostać się do tej branży. Nie wiem co robić. Nie wiem, która ścieżka by mi pasowała. Przepraszam, jeśli niektórzy z was uważają to za bezsensowne pytanie, ale proszę o wyrozumiałość, to może być przełom w moim życiu.


title: Wykorzystanie osprzętu w testach jednostkowych

text: Próbuję zrozumieć użycie osprzętu w kontekście modeli testów jednostkowych w systemie sieci web MVC. Problem, który próbuję zrozumieć, polega na tym, że dane urządzeń nie dają prawdziwej reprezentacji danych akceptowanych przez system. Prostym przykładem jest powiedzmy, że mam model użytkownika z walidacją poczty e-mail. Urządzenia ominą walidację, więc testy mogą testować nieprawidłowe dane. **Edycja:** Chcę osiągnąć, czy nie byłoby bardziej sensowne tworzenie danych testowych za pomocą logiki biznesowej aplikacji? Tak więc w przypadku wiadomości e-mail, jeśli programista przypadkowo utworzy urządzenie z wiadomością e-mail, która nie przejdzie walidacji, może to spowodować fałszywe negatywy w testach (np. wysyłanie wiadomości e-mail w testach zakończy się niepowodzeniem, ponieważ urządzenie ma nieprawidłowe dane). Przykład e-maila prawdopodobnie nie jest najlepszy, ale mam nadzieję, że to ma więcej sensu, do czego staram się dotrzeć?


title: Co powstrzymuje ludzi przed kopiowaniem i wklejaniem kodów z otwartym kodem źródłowym do ich własnych projektów i wydawaniem tylko skompilowanych plików binarnych?

text: Cześć Jestem nowicjuszem w programowaniu i zawsze zastanawiałem się, jaki byłby sens dodawania kodów o otwartym kodzie źródłowym, jeśli nie ma sposobu, aby zapewnić, że wszyscy, którzy używają tego kodu, będą przestrzegać licencji (a może są?).


title: Czy nadawanie dwóm bardzo różnym plikom o tym samym ogólnym przeznaczeniu tej samej nazwy jest złą praktyką?

text: Czy złą praktyką jest nadawanie dwóm bardzo różnym plikom o tym samym ogólnym przeznaczeniu tej samej nazwy, dzieląc je na różne katalogi? <script src="client_scripts/app/player_stats/generator.js"></script> <script src="client_scripts/app/coach_settings/generator.js"></script> Chcę, aby nazwy moich plików były krótkie , a oba pliki mają ten sam ogólny cel, ale nie są identyczne. Nie jestem pewien, czy byłoby to uważane za złą praktykę w profesjonalnym środowisku programistycznym. **Chciałbym wiedzieć, jaka jest najlepsza praktyka w tej sytuacji.** Alternatywnie, kosztem krótkiej nazwy, mógłbym użyć: <script src="client_scripts/app/player_stats/player_stats_generator.js"> </script> <script src="client_scripts/app/coach_settings/coach_settings_generator.js"></script>


title: zrozumienie jądra Linux

text: Chcę nauczyć się jądra linuksa, myślę, że trochę trudno jest zrozumieć całość, jak wielu z was wspomniało w innych pytaniach, w każdym razie naprawdę interesuje mnie część zarządzania procesami. Najpierw chcę zrobić coś naprawdę małego i mam nadzieję, że jeden z was może mi w tym pomóc, czyli uruchomić komputer, wydrukować tekst i wyłączyć komputer. Czy istnieje kod (program ładowania początkowego) wystarczająco mały, aby to zrobić, gdzie mogę po prostu skopiować go na płytę CD i uruchomić komputer i coś wydrukować, a następnie zamknąć? Dziękuję,


title: Potencjalnie uzasadniony przypadek użycia dla const_cast lub złego projektu?

text: Projektuję strukturę danych w C++ i chcę udostępnić użytkownikowi interfejs w celu przechodzenia przez strukturę w pewnej kolejności. Zamiast tworzyć kilka różnych typów enumeratorów, chcę zachować prostotę i zapewnić jeden enumerator, zachowując przy tym stałą poprawność. Mój projekt można podsumować w następujący sposób: class DataStructureNode; // Podstawowy blok konstrukcyjny struktury class DataStructureEnumerator { public: friend class DataStructure; DataStructureEnumerator GetNext() { ... } DataStructureEnumerator GetPrevious() { ... } private: const DataStructureNode* m_Node; ...}; class DataStructure { public: DataStructureEnumerator GetEnumerator() { ... } DataStructureNode* GetNodeFromEnumerator(const DataStructureEnumerator& e) { // Załóżmy, że ta funkcja zapewnia również przynależność węzła do tej struktury return const_cast<DataStructureEnumerator&>(e).m_).m_). // <--- Ooo! const_cast! } const DataStructureNode* GetNodeFromEnumerator(const DataStructureEnumerator& e) const { // Załóżmy, że ta funkcja zapewnia również przynależność węzła do tej struktury return e.m_Node; } }; Ten projekt ma tę zaletę, że istnieje tylko jeden typ modułu wyliczającego, który obsługuje zarówno struktury mutowalne, jak i niezmienne. Oczywiście alternatywnym (i konwencjonalnym) projektem w C++ jest posiadanie dwóch (lub więcej) klas wyliczających, takich jak `DataStructureEnumerator` i `DataStructureConstEnumerator`. Konwencjonalny projekt zawiera dodatkowy rozrost kodu, więcej szablonów i brzydszy interfejs (moim zdaniem!), ale jest to normą w społecznościach C++. Interesuje mnie opinia społeczności na temat tego projektu. Czy są jakieś potencjalne pułapki, których brakuje mi w moim projekcie?


title: Programowanie dynamiczne w pakowaniu Bin

text: **Problem:** Biorąc pod uwagę listę L obiektów o możliwych rozmiarach z zestawu S={1,2,4,8} i nieograniczoną ilość pojemników o rozmiarach 16 każdy i musimy użyć minimalnej możliwej liczby pojemników, aby spakować wszystko obiekty L. Poszukuję również optymalnego (lub prawie optymalnego) rozwiązania za pomocą programowania dynamicznego lub w inny sposób w następujących scenariuszach, gdy 1. L nie jest podane w trybie offline, zamiast tego jesteśmy proszeni o dopasowanie obiektów jeden po drugim bez znajomości przyszłych żądań ( Opakowanie wektorowe w trybie 1-D online). 2. rozmiary mogą być od SXS, a pojemniki mają pojemność (16,16) każdy. (2-D opakowanie wektorowe). **Założenie:** Optymalne opakowanie oznacza najlepsze możliwe opakowanie ze wszystkich możliwych opakowań, tj. opakowanie z minimalną liczbą użytych pojemników. W rzeczywistości uogólnione pakowanie do pojemników wektorowych jest NP-twarde, ale myślę, że ze względu na standardowe rozmiary ze skończonego zbioru mogą istnieć bardziej wydajne i lepsze rozwiązania. **Moje podejście:** Najwyraźniej 1-D offline można upakować w <=optymalne+1 dzięki sprytnemu parowaniu obiektów . Ale utknąłem na pozostałych 2 aspektach, o które pytaliśmy powyżej. Znam algorytmy First Fit, Best Fit, First Fit Decreasing, ale szukam konkretnego rozwiązania tego problemu.


title: Automatyzacja wdrażania bazy danych za pomocą CMS

text: Mój zespół opracowuje strony internetowe Umbraco i chce usprawnić automatyzację wdrażania naszych baz danych. Obecnie mamy zautomatyzowane kompilacje i wdrożenia naszego kodu źródłowego przy użyciu Kiln i Team City, ale nie możemy ustalić, jak obsłużyć wdrożenie bazy danych. Wyzwaniem jest zastosowanie zmian dokonanych w środowisku programistycznym, przy jednoczesnym zachowaniu nowej zawartości bazy danych, która została dodana w środowisku live za pośrednictwem CMS. Obecnie nasze zmiany są wdrażane ręcznie za pomocą kuriera, ale naszym celem jest przekształcenie tego w „wdrożenie jednym kliknięciem”, co jest tym, czego pragniemy, aby uruchomić nasze automatyczne testy i łatwość wdrożenia. Jak możemy to zautomatyzować bez usuwania nowych treści dodanych w CMS?


title: Czy możesz być Agile bez wykonywania TDD (programowanie sterowane testami)?

text: Czy można poprawnie nazwać siebie (lub swój zespół) „Agile”, jeśli nie wykonujesz TDD (Test-Driven Development)?


title: Podejście do pakowania kształtów 2D przy jednoczesnej minimalizacji całkowitej powierzchni otaczającej

text: Nie jestem pewien, co do moich tagów na to pytanie, ale w skrócie .... Muszę rozwiązać problem pakowania części przemysłowych do skrzynek, jednocześnie minimalizując całkowitą powierzchnię zawierającą. Te części to silniki, pompy lub elementy wykonane na zamówienie i mają dość nietypowe kształty. Dla niektórych można założyć, że część === prostopadłościan, ale niektóre nie są tak proste, tzn. przyjmują kształt bardziej zbliżony do kształtu młotka lub litery T. W tym przypadku (zakładając kształt 2D) naprzemienny kierunek góry i dołu, można upakować więcej obiektów w tej samej przestrzeni, niż gdyby wszystkie wierzchołki były w tym samym kierunku. Poniżej surowy przykład z częściami w kształcie litery „T”: ***** xxxxx ***** x ***** *** ooo * x vs * x vs * x vs * x o * x * xxxxx * x * x o xxxxx xxx W tej chwili rozwiązujemy problem w następujący sposób: 1. używając oprogramowania CAD, stwórz rzeczywiste modele tego, jak rzeczy mieszczą się w skrzyniach 2. oszacuj rzeczywiste wymiary skrzynek i zapisz je w pliku Excel (1) jest szalona ilość pracy i w rezultacie mamy tylko ograniczoną liczbę możliwych wpisów w (2), pliku Excel. Dobrą rzeczą jest to, że programowanie tego jest stosunkowo łatwe. Biorąc pod uwagę kombinację produktów, które mają trafić do skrzynek, wykonujemy wyszukiwanie, a jeśli wpis istnieje w Excelu (lub bazie danych), wydobywamy go. Jeśli nie, mówimy „przepraszam, brak danych!”. Niekoniecznie chcę iść z pełną mocą na wymyślenie jakiegoś szalonego algorytmu, który z opisem geometrycznym części może wyrównać, obrócić i znaleźć najlepsze pakowanie części do skrzyni, biorąc pod uwagę jej kształt, ale może tak... **Pytanie* * Cóż, oto moje pytanie: zakładając, że mogę reprezentować moje części jako 2D (do ustalenia w jaki sposób) i że niektóre części wyglądają jak litera T, a niektóre wyglądają jak prostokąty, którego algorytmu mogę użyć, aby uzyskać dobry oszacować wymiary otaczającego obszaru, zapewniając jednocześnie, że części są zapakowane na możliwie jak najmniejszej powierzchni, aby zminimalizować koszty pakowania/wysyłki? Czy istnieją algorytmy aproksymacyjne? Widząc, jak to może się skomplikować, czy istnieje biblioteka, z której mógłbym skorzystać? **Moja myśl / Podejście** Moim naiwnym podejściem byłoby zdefiniowanie sposobu opisania położenia części i umieszczenie pierwszej części, obliczenie całkowitej powierzchni otaczającej i wymiarów. Następnie umieść drugą część w orientacji 0 stopni, powtórz, umieść ją w orientacji 180 stopni, powtórz (w moim przypadku nie sądzę, aby obrót o 90 stopni miał sens z powodu dużej długości części). Kontynuuj przy użyciu brutalnej siły „sczepiając” inne części do otaczającego obszaru, aż wszystkie części zostaną przetworzone. Być może będę musiał trochę przesunąć niektóre części (patrz trzeci przykład obrazkowy powyżej z literami T). To dodaje warstwę złożoności 2D zamiast 1D. Nie wiem, jak do tego podejść. Jednym z pomysłów, jaki mam, są algorytmy genetyczne, ale myślę, że zajmą one zbyt dużo mocy obliczeniowej i czasu. Będę musiał zwracać uwagę na kolizje kształtów, a także na dodanie dodatkowej przestrzeni wypełniającej, ponieważ mówimy o rzeczywistych częściach z nieregularnościami, a nie idealnych wyimaginowanych blokach. Obawiam się, że może to dość szybko stać się geometrycznym bałaganem i wolę zachować prostotę, jeśli mogę. Ale co, jeśli najlepszym (praktycznym) rozwiązaniem jest pakowanie rzeczy do różnych skrzynek, a nie tylko do jednego? To może być trochę trudniejsze. W grę wchodzi również element ludzki, tj. podobne części mogą trafić do tego samego pudełka, a zatem są ograniczeniem, które należy wziąć pod uwagę. Niektóre części, które nie są takie same, są czasami grupowane razem do wysyłki i mogą być uważane za wspólny element zgrupowany. Czasami klienci chcą, aby rzeczy zostały wysłane po swojemu, co dodaje element ludzki do ograniczeń. więc będzie musiało nastąpić dostosowanie.


title: Jak programiści radzą sobie z kilkoma wersjami tego samego programu?

text: Na przykład wiele aplikacji ma wersję darmową i wersję pro. Czy programiści, po wydaniu nowej aktualizacji, usuwają wiersze kodu, które nie powinny być dostępne w darmowej wersji? Co do Visual Studio. Albo dema. A właściwie wiele rzeczy.


title: Tworzenie aplikacji z dostępem do Internetu jako kiosku w systemie Windows 7

text: Kończę tworzenie aplikacji desktopowej Java, która komunikuje się z zewnętrznym serwerem WWW, a teraz muszę poważnie rozważyć wdrożenie. Ta aplikacja będzie działać na dużej stacji roboczej typu all-in-one z dużym ekranem dotykowym z systemem Windows 7. Będzie ona zlokalizowana w obszarze publicznym i dlatego musi być ZABLOKOWANA w stylu Hanibal Lecter. Na początku projektu nikt tak naprawdę nie przejmował się tym faktem, zakładając, że możemy kupić jakieś magiczne oprogramowanie dla Windows 7, które automatycznie zajmie się tym wszystkim, jednak teraz stwierdzam, że wygląda to na DUŻO bardziej skomplikowane niż mój menedżer kiedykolwiek myśl. Muszę: \- Zablokować standardowe skróty klawiszowe (ALT+TAB, ALT+CTRL+DEL, itp...) * Uniemożliwić użytkownikowi otwieranie JAKICHKOLWIEK programów innych niż aplikacja kiosku i jej pliki wykonywalne * Uniemożliwić użytkownikowi od zamknięcia aplikacji * Uruchom aplikację kiosku przy starcie (można to zrobić bez oprogramowania kiosku) * Automatyczne logowanie do systemu Windows po ponownym uruchomieniu (aktualizacje systemu Windows, awaria zasilania, bachor naciskając przycisk zasilania itp.) * Hasło administratora sekwencja ucieczki do rutynowej konserwacji przez specjalistów ds. pomocy technicznej. Ku mojemu przerażeniu, naprawdę trudno mi znaleźć oprogramowanie, które zawiera cały pakiet i znajduję wiele konkurencyjnych informacji na temat najlepszego sposobu na zrobienie tego. Niekoniecznie szukam wolnego lub otwartego oprogramowania i jestem gotów zapłacić za oprogramowanie, które może mi w tym pomóc. Czy ktoś z was pisał kiedyś oprogramowanie kiosku, a jeśli tak, jakie podejście zastosowaliście, aby to zrobić?


title: Przerób starą aplikację formularzy internetowych w asp.net mvc

text: Odziedziczyłem obsługę kodu złożonej witryny internetowej dla klienta, który stale domaga się jej ulepszeń. Opracowanie tej aplikacji zajęło lata i mam coraz większe trudności z jej ulepszaniem. Jest zorganizowany, ale jednocześnie kod .net jest zmieszany z ajaxem, javascripts i oldschoolowym html'em, który zajmuje mi kilka dni, aby dowiedzieć się, jak działają niektóre strony. Po pierwsze, nie jestem nowy w asp.net, ale nie znam nowych rzeczy MVC, ale z tego, co przeczytałem, wydaje się, że jest to krok w lepszym kierunku. Obecny kod jest w jednej dużej bibliotece dll. Kod aplikacji jest podzielony na wiele folderów reprezentujących różne działy, a każdy dział ma swoje własne strony do obsługi ogólnych spraw, takich jak zarządzanie pracownikami, raporty, budżet, a także własne informacje. Na przykład, mimo że każdy dział używa innej strony internetowej do obsługi informacji o pracownikach, potrzebują różnych pól, więc łatwiej było tworzyć różne strony niż używać jednej strony, która dostosowuje się do każdego działu. Ale to naprawdę koszmar do utrzymania w tej chwili i chciałbym stworzyć równoległy projekt, w którym mógłbym rozpocząć nowy projekt, stworzyć lepszą strukturę i od tego momentu rozpocząć migrację starego kodu do nowego środowiska i refaktoryzację go na bieżąco. Chodzi o to, aby przenieść starą aplikację na nową witrynę internetową o podobnym wyglądzie, zachowując obie działające, dopóki wszystko nie zostanie uruchomione w nowej witrynie. Może to zabrzmieć szaleńczo, ale tak naprawdę jest używane przez setki ludzi każdego dnia i wkurza mnie, że muszę modyfikować gówniany kod, aby działał. Jak byś podszedł do tego problemu? Dzięki [edytuj] Jeśli znalazłeś ten link Rzeczy, których nigdy nie powinieneś robić w innym poście, bardzo na temat mojego pytania.


title: Jak zaprojektować kreatora do generowania wymagań i dokumentacji?

text: Obecnie pracuję w branży, w której wymagana jest obszerna dokumentacja, ale aplikacje, które piszę, są w zasadzie obcinaczem ciasteczek na wysokim poziomie. To, co chciałbym zrobić, to zbudować aplikację, która zada szereg pytań dotyczących reguł biznesowych i wymagań marketingowych, aby wygenerować specyfikację wymagań. Na przykład może istnieć zestaw pytań z pytaniem „Czy użytkownik musi podać swój wiek?” oraz pytanie uzupełniające „Jaki jest minimalny wiek?” Jeśli dane wejściowe to „tak” i „18”, to aplikacja wygeneruje wymagania, które wyglądają mniej więcej tak: „Formularz rejestracyjny powinien zawierać selektor wieku” „Formularz rejestracyjny zwróci błąd, jeśli wybrany wiek jest mniejszy niż 18 lat „Później chciałbym rozszerzyć to o dodatkowe rzeczy, takie jak generowanie przypadków testowych, a nawet kodu, ale idea jest taka sama: generowanie danych wyjściowych na podstawie reguł określonych przez udzielenie odpowiedzi na zestaw pytań. Czy są jakieś wzorce, które mógłbym zbadać, aby lepiej zaprojektować architekturę takiej aplikacji? Czy jest to coś, co powinienem modelować jako maszynę skończoną?


title: O czym należy pamiętać, przygotowując się do przekazania projektu?

text: Obecnie jestem jedynym programistą/architektem dość dużej aplikacji internetowej (stos ASP.NET MVC, około 150 tys.+ linii kodu), a koniec rozwoju jest na horyzoncie. W związku z tym zaczynam myśleć o tym, co należy zrobić, aby przekazać projekt i chcę się upewnić, że robię słuszną rzecz dla każdego, kto będzie musiał zarządzać projektem w przyszłości. O czym należy pamiętać, przygotowując się do przekazania projektu innemu programiście lub zespołowi programistów zajmujących się utrzymaniem?


title: Gdzie mogę znaleźć lepiej zaprojektowaną dokumentację nginx?

text: Właściwie mam tutaj pod-pytanie: „Czy oficjalna dokumentacja Nginx jest otwarta?” Nginx to dobre oprogramowanie, ale znalazłem jego oficjalną dokumentację (http://nginx.org/en/docs/ naprawdę trudną do odczytania z powodu braku projektu. Zwłaszcza porównaj z dokumentacją na tej stronie (readthedocs.org). Więc ja postanowiłem stopniowo przenieść go na readthedocs.org, jeśli jest opensource.I jestem tak zdezorientowany, że jako drugie największe oprogramowanie serwera WWW na świecie, czy nikt inny jak ja nie czuje, że jego dokumentacja jest trudna do odczytania? jest ich wiele i po prostu ich nie znam.Jeśli znasz inną witrynę, która ma lepiej zaprojektowaną dokumentację nginx, powiedz mi, abym nie musiał wykonywać zadania odbudowy.


title: Jakie jest wymagane tło, aby zastosować uczenie maszynowe w finansach?

text: Interesuje mnie uczenie maszynowe w relacjach z giełdą (przewidywanie przyszłych wartości akcji itp.). Jakich tematów musiałbym się nauczyć - np. do jakiej gałęzi AI zajrzeć itp.? a jakich bibliotek/narzędzi potrzebuję?


title: Unikaj złośliwego kodu podczas dynamicznego ładowania klas za pomocą ClassLoader

text: ## Tło Jedną z zalet odsprzężonych komponentów w systemach jest to, że można rozszerzyć system bez konieczności dotykania istniejącego kodu. Czasami nie trzeba nawet rekompilować starego kodu, ponieważ można dynamicznie ładować klasy z dysku w następujący sposób: clazz = Demo.class.getClassLoader().loadClass("full.package.name.to.SomeClass"); Pozwala to na swego rodzaju architekturę wtyczek (daj lub bierz). ## Pytanie Jak zapobiec uruchomieniu złośliwego kodu podczas dynamicznego ładowania klasy z dysku za pomocą `ClassLoader` ?


title: Styl programowania: powtarzające się sprawdzanie błędów

text: Hej, mam pytanie dotyczące stylu programowania, ponieważ w moim obecnym kodzie używam większej funkcji, która wywołuje kilka mniejszych funkcji i wszystkie te muszą być sprawdzone pod kątem błędów. A więc coś takiego: void bigFunction() { /* niektóre obliczenia */ if(smallFunction1() == -1) { free(mem1); wolny(mem2); fclose(plik); odłącz(nazwa pliku); powrót -1; } if(smallFunction2() == -1) { free(mem1); wolny(mem2); fclose(plik); odłącz(nazwa pliku); powrót -1; } if(smallFunction3() == -1) { free(mem1); wolny(mem2); fclose(plik); odłącz(nazwa pliku); powrót -1; } /* więcej obliczeń i takie tam w largeFunction */ } Myślę, że wyraźnie widać mój problem: kod po awarii jednej z tych funkcji jest zawsze taki sam, a mam ochotę powtarzać ten koder raz za razem, aby mój kod był bardziej i bardziej bardziej nieczytelne. Jak poradzić sobie z tym problemem? Przyszło mi do głowy goto, ale na moich kursach programowania na uniwersytecie powiedziano mi, żeby nigdy nie używać goto (chociaż zapomniałem, dlaczego...)


title: Problemy projektowe od początkującego Java

text: Tydzień temu zadałem pytanie; Pierwszy duży projekt, jak zacząć. Twórz menu, zapisuj na twardym dysku itp. Próbowałem zrobić wszystko bez tworzenia GUI za pomocą Swinga, ale zdałem sobie sprawę, że dla każdego widoku, który chciałem zaprezentować użytkownikowi, musiałem stworzyć nową klasę. W tej chwili mam 3 klasy menu (mainMenu, computerCategoryMenu,laptopCategoryMenu) Zatrzymałem się, ponieważ musiałbym stworzyć kolejne 6 klas menu, a następnie kolejne 6, jeśli użytkownik się zarejestrował i kolejne 6 dla administratora strony. Dla mnie to nie wygląda dobrze. Poza tym wszystko wygląda dla mnie zbyt statycznie. Nie wiem jak zmusić administratora do dodania lub usunięcia produktów. Czy powinienem przechowywać wszystkie moje produkty w hashmapie, a następnie wyświetlać je w różnych menu? Czy uważasz, że tworzenie GUI za pomocą Swinga znacznie ułatwi sprawę?


title: Układanie płytek Rozwiązania problemów dla różnych rozmiarów „Domino”

text: Mam ciekawy problem z kafelkowaniem, mam duży kwadratowy obraz (rozmiar 128k, czyli 131072 kwadraty) o wymiarach 256x512... Chcę wypełnić ten obraz pewnymi rodzajami ziarna (płytka 1x1, pasek 1x2, pasek 2x1 i kwadrat 2x2) i nie mają nakładania się, otworów ani przedłużenia poza granicę obrazu. Biorąc pod uwagę pewne prawdopodobieństwo dla każdego z tych rodzajów ziaren, dla każdego z nich generowana jest lista liczb, które należy umieścić. Oczywiście metoda iteracyjna/brute force nie działa tutaj dobrze, jeśli po prostu losowo umieszczamy elementy, zamiast tego wymagany jest określony algorytm. 1) wszystkie kwadratowe ziarna 2x2 są losowo umieszczane aż do wyczerpania. 2) Ziarna 1x2 i 2x1 są losowo umieszczane na przemian aż do wyczerpania 3) Pozostałe płytki 1x1 są umieszczane, aby wypełnić wszystkie dziury. Okazuje się, że ten algorytm działa całkiem dobrze w niektórych przypadkach i nie ma problemu z wypełnieniem całego obrazu, jednak jak można się domyślić, zwiększenie prawdopodobieństwa (a tym samym liczby) ziaren 1x2 i 2x1 w końcu powoduje zatrzymanie umieszczania (ponieważ są zbyt wiele otworów utworzonych przez paski i nie wszystkie z nich można umieścić). Moje podejście do tego rozwiązania było następujące: 1) Utwórz mini-obrazek o wymiarach 8x8 lub 16x16. 2) Wypełnij ten obraz losowo i postępując zgodnie z algorytmem określonym powyżej, aby pożądane prawdopodobieństwo całego obrazu zostało zrealizowane w miniobrazie. 3) Utwórz N tych mini-obrazów, a następnie losowo umieść je kolejno na dużym obrazie. Niestety, to uproszczenie ma pewne wady. 1) biorąc pod uwagę mały rozmiar miniobrazów, ustalenie dokładnego prawdopodobieństwa dla całego obrazu nie jest możliwe. Przykład, jeśli chcę p(2x1)=P(1x2)=0,4, mini obraz może dać tylko 0,41 jako prawdopodobieństwo zamknięcia. 2) Mini-obrazy tworzą pseudo-granicę, w której nie występują żadne nakładanie się, co nie jest tak naprawdę opisem modelu, do którego są używane. 3) Jest tylko ustalona liczba mini-obrazów, więc nie jestem pewien, jak bardzo jest to losowe. Naprawdę chcę tylko przeprowadzić burzę mózgów na temat możliwych rozwiązań tego problemu. Moją główną troską jest tak naprawdę ustalenie bliższych prawdopodobieństw, teraz można by zasugerować, abym po prostu zwiększył rozmiar mini-obrazu. Cóż, mam i okazuje się, że w niektórych przypadkach (p(1x2)=p(2x1)=0,5) miniobrazu 16x16 nie da się rozwiązać nawet iteracyjnie.. Więc jest całkiem oczywiste, jak trudno jest to rozwiązać losowo na wszystko większe niż 8x8.. Chciałbym więc usłyszeć kilka pomysłów. Dziękuję


title: Niezdefiniowane zachowanie w Javie

text: Czytałem to pytanie na SO, które omawia niektóre typowe niezdefiniowane zachowanie w C ++ i zastanawiałem się: czy Java również ma niezdefiniowane zachowanie? Jeśli tak jest, to jakie są najczęstsze przyczyny niezdefiniowanego zachowania w Javie? Jeśli nie, to które cechy Javy sprawiają, że jest ona wolna od takich zachowań i dlaczego najnowsze wersje C i C++ nie zostały zaimplementowane z tymi właściwościami?


title: HP openview servicedesk: szukasz informacji o API ?

text: Dobry dzień ludzie. Jestem bardzo zdezorientowany w tej sytuacji. Potrzebuję zaimplementować system, który będzie oparty o HP open view service desk 4.5 api. Ale ten system osiągnął koniec okresu wsparcia. Na oficjalnej stronie brak informacji **Szukam informacji o tym API (artykuły, próbki itp.)**. Teraz mam tylko web-api.jar i javadoc. Metody w javadoc są źle udokumentowane. Jeśli masz jakieś informacje, podziel się nimi ze mną. Dziękuję. **Drugie pytanie: istnieją metody do zrozumienia api (z ogromną ilością metod), jeśli nie jest to udokumentowane lub informacje nie są dostępne?** PS: Jeśli to pytanie nie należy tutaj, usunę je.


title: Czy Apple i Microsoft mogą zezwolić na GPLv3 na swoich zablokowanych urządzeniach?

text: Wygląda na to, że zarówno Apple, jak i Microsoft zabraniają oprogramowania na licencji GPLv3 w sklepach z aplikacjami dla swoich zablokowanych urządzeń (tj. iOS, Windows Phone i część systemu Windows Metro). Słyszałem różne wyjaśnienia tego. Jednak: czy w ogóle byliby w stanie zezwolić na tę licencję w swoich sklepach z aplikacjami, gdyby chcieli, czy też klauzula anty-tivoization GPL już tego zabrania?


title: Badania dotyczące rozbicia różnych kosztów związanych z projektem oprogramowania

text: Poszukuję linków i porad dotyczących wykonanych badań dotyczących podziału kosztów związanych z tworzeniem oprogramowania. W szczególności przyglądam się, jaki procent wysiłku jest włożony w testowanie w porównaniu z programowaniem i jak to się zmieniało wraz z wielkością zespołu, czasem trwania projektu i podobnymi czynnikami.


title: W jaki praktyczny sposób dobrze jest pamiętać model pamięci/wskaźników?

text: Zmienna odnosi się do wartości. Zmienna jest również przechowywana pod adresem pamięci. Ludzie mówią, że dobrze jest mieć na uwadze ten model pamięci. Czy to prawda? Jaki jest przykładowy kod, który pokazuje, że jest to korzystne w praktyce? Nie musisz używać programowania, możesz użyć analogii ze świata rzeczywistego, jeśli chcesz. edytuj: ciągle usuwają pomocną odpowiedź, którą podsumowałem tutaj - nie mam pojęcia dlaczego


title: Czy możliwe jest refaktoryzacja dziedziczenia do kompozycji, gdy metody wirtualne są wywoływane wewnątrz klasy bazowej?

text: Załóżmy, że mam klasę o nazwie Country i dwie podklasy o nazwie AI i Player. Klasa Country ma kilka wirtualnych metod, które pozwalają na zachowanie specyficzne dla gracza lub AI. Chcę umożliwić graczowi zmianę krajów podczas gry. W tym celu refaktoruję stosunek dziedziczenia do składu. Wtedy będę mógł w dowolnym momencie zamienić wewnętrzną instancję kraju gracza na inną. Ale to powoduje pewien problem: gdy obiekt _external_ próbuje wywołać jedną z tych wirtualnych metod na odtwarzaczu, jest on poprawnie delegowany do metody Country po wykonaniu odpowiedniego przetwarzania. Ale kiedy metoda _internal_ Country wywołuje jedną z metod wirtualnych, kod w wersji Player lub AI nie ma już szansy na uruchomienie. Więc teraz muszę zaktualizować każdą z tych metod, aby upewnić się, że obie wersje są wywoływane, co samo w sobie nie jest trywialnym zadaniem (nieskończone pętle, ktokolwiek?). Wydaje się to o wiele trudniejsze, niż powinno być. Robiłem już podobne refaktoryzacje i nigdy nie spotkałem się z tym problemem. Czemu? Czy brakuje mi jakiejś oślepiająco oczywistej obserwacji? * * * **Edytuj** dla konkretnego przykładu teraz, gdy mam ponownie dostęp do kodu: class Country { public: virtual void AddMoney(float money) { _vMoney += money; } void TakeLoan() { float pożyczka = ...; Dodaj Pieniądze (pożyczka); // <-- nie przekierowuje przez AI lub implementację odtwarzacza } } class AI // : public Country { private: Country *pCountry; public: virtual void AddMoney(float x) { pCountry->AddMoney(x); // dawniej Country::AddMoney(x) AllocateMoney(x); } }


title: Czego mogę się spodziewać po przejściu z uczelni do prawdziwej pracy programistycznej?

text: Niedługo wejdę na ostatni rok na uniwersytecie i wreszcie się zaczęło, że za nieco ponad rok zrobię co w mojej mocy, aby znaleźć pracę. Jednak wciąż nie mam pojęcia, jakiego poziomu biegłości oczekuje się od absolwentów próbujących zaistnieć w branży programistycznej. Czytałem, że wyeliminują nie-programistów kilkoma pytaniami w stylu fizzbuzz, ale potem, z jakimi ludźmi mam się zmierzyć? A jakie umiejętności warto studiować, aby wyprzedzić konkurencję? Obecnie próbuję oswoić się z dziedziczeniem/polimorfizmem, obecnie tylko z własnym kodem, kolejnym zadaniem, które sobie postawiłem, jest nabranie pewności w rozszerzaniu istniejącego kodu. Uczyłem się PHP, Javascript(+JQuery), ActionScript (i prawdopodobnie kilku innych, o których nie mogę myśleć z góry) jako hobby, Javy na uniwersytecie, a obecnie przepycham się przez C# (próbując zabij dwa duże ptaki jednym kamieniem). Czy ten panikujący licencjat zmierza we właściwym kierunku? D=


title: Jak mogę zaufać aplikacji poza witryną?

text: Muszę zaimplementować coś podobnego do serwera licencji. Będzie to musiało być zainstalowane poza siedzibą klienta i musi komunikować się z innymi aplikacjami w lokalizacji klienta (aplikacjami, które korzystają z licencji) oraz aplikacją działającą w naszym centrum hostingowym (do raportowania i uzyskiwania informacji licencyjnych). Moje pytanie brzmi, jak to ustawić w sposób, w który mogę ufać: 1. Serwer licencji jest tak naprawdę naszą aplikacją, a nie czymś, co tylko ją symuluje; oraz 2. Nie ma „człowieka w środku” (tj. proxy lub czegoś, co zmienia ruch). Pierwszą rzeczą, o której pomyślałem, było użycie z certyfikatami klienckimi i to rozwiązałoby co najmniej 2. Jednak martwię się, że ktoś po prostu dekompiluje (jest to zbudowany w .NET) serwer licencji, zmienia logikę i rekompiluje to. Byłoby to trudne do wykrycia z obu łączących się aplikacji. Nie musi to być całkowicie bezpieczne, ponieważ mamy ograniczoną liczbę klientów, z którymi utrzymujemy relacje oparte na zaufaniu. Jednak chcę, aby było to trudniejsze niż prosta dekompilacja/rekompilacja serwera licencji. Przede wszystkim chcę chronić się przed pracownikiem lub siostrzeńcem szefa, który stara się być sprytny.


title: Dobre rozwiązanie do serializacji do komunikacji między programami Pythona I Haskella?

text: Znalazłem to: http://msgpack.org/ Ale.. nigdy go nie używałem, więc nie wiem, czy jest dużo dobry. Czy ktoś ma propozycje? Podstawowe wymagania: * serializuj jak najwięcej struktur danych używanych zwykle w obu językach, jak to możliwe, nie ma problemu z zagnieżdżaniem * jak najbardziej niezawodne/bez błędów * wysoka wydajność jest fajna, ale nie krytyczna * tak prosta w użyciu, jak to możliwe, ale nie prostsze


title: Czy ekspert domeny powinien tworzyć diagramy klas?

text: **Ekspert domeny** w naszym zespole używa diagramów klas UML do modelowania **modelu domeny**. W rezultacie diagramy klas są bardziej **modelami technicznymi niż modelami dziedzinowymi** (służą one programistom pewnego rodzaju specyfikacji technicznych, ponieważ nie muszą tworzyć żadnej koncepcji, po prostu muszą zaimplementować model) . W końcu ekspert domeny wykonuje pracę architekta/eksperta technicznego, prawda? Czy to normalne, że ekspert domeny (nie programista lub profil techniczny) robi diagramy klas? Jeśli nie, jakiego rodzaju modelowania powinien używać?


title: Mam poprzedni wynalazek (oprogramowanie / framework), który planuję wykorzystać w nowej pracy. Co stanie się z moimi prawami autorskimi, jeśli poprawię je w trakcie pracy?

text: Wypełniłem ten standardowy formularz, w którym wymieniasz swoje poprzednie wynalazki przed rozpoczęciem nowej pracy, aby pracodawca był prawnie świadomy, że masz do nich prawa autorskie. Ale jeśli chcę użyć tego wynalazku (kodu oprogramowania / frameworka) w mojej nowej pracy, czy mieliby do niego jakiekolwiek roszczenia dotyczące praw autorskich, jeśli na przykład zmienię / poprawię coś w swoim kodzie podczas pracy dla nich? Słyszałem coś w rodzaju współwłasności. Coś w stylu: byłbyś właścicielem tego, co zostało zrobione wcześniej, a pracodawca byłby właścicielem wszelkich ulepszeń, które zrobiłeś w trakcie zatrudnienia. Ten rodzaj jest do bani i odbiera wszelkie bodźce, które musiałbyś zrobić, aby ulepszyć swój produkt, ponieważ _raz ulepszony, poprawa zniknęła_. :( Czy ktoś przeżył już tę sytuację i mógłby podzielić się pomysłami, abym mógł chronić swój kod?


title: Wybór licencji open source dla wbudowanej biblioteki systemowej

text: Piszę kilka bibliotek, które chcę wydać jako projekty open source, ale chcę znaleźć licencję, która oznacza, że otrzymam kredyt, gdy zostanie użyta w projekcie. Nie przejmuję się niczym innym, jeśli ludzie chcą z tego skorzystać, to w porządku. Więc jaka licencja jest najbardziej odpowiednia? Jedynym czynnikiem dla mnie jest to, że otrzymuję uznanie za wyprodukowanie biblioteki, jeśli kiedykolwiek zostanie użyta.


title: Repozytorium złożone z wtyczkami dla aplikacji wielodostępnej

text: Pracuję nad aplikacją, która ma elastyczną konfigurację pamięci. Na przykład: public class Repo1:IRepository { public void DoSomething(int tenantId, string someKey) { ... } } To repozytorium można łączyć w repozytoriach Aggreagate lub Composite. Istnieją również konektory do zewnętrznych aplikacji: public class Connector1:IConnector { public void DoSomething(string someKey) { ... } } Łączniki nie są świadome najemcy, w którym pracują, ponieważ każdy najemca ma skonfigurowaną unikalną kombinację konektorów. Obecnie opakowuję konektory w specjalną implementację repozytorium: public class ConnectorRepo:IRepository { public void DoSomething(int tenantId, string someKey) { var tenantConnectors = ConnectorProvider.GetConnectors(tenantId); foreach(var łącznik w tenantConnectors) { łącznik.DoSomething(someKey); } } } Zasadniczo łącznik i repozytorium mają wspólne sygnatury metod, z wyjątkiem tego, że metody repo mają parametr tenantId. Zastanawiam się nad zawarciem umów z repozytoriami z i bez tenantId i zawijaniem repozytoriów bez obsługi wielu dzierżawców (ex łączników) z fasadami świadomymi najemców, ale taka abstrakcja na wysokim poziomie wydaje mi się delikatna. Byłbym bardzo wdzięczny za wszelkie pomysły i sugestie.


title: Czy informacje MSDN / Azure Active Directory są dostępne w różnych formatach?

text: Chciałbym przeczytać dokumentację Azure Active Directory na moim kindle (lub podobnym urządzeniu), ale nie chcę używać "Print to Kindle" dla każdej strony. Czy dokumentacja firmy Microsoft dotycząca tej technologii jest dostępna w innych formatach? (.chm, PDF itp.). Jeśli dostępny jest alternatywny format, mogę go dostosować do swoich potrzeb. http://msdn.microsoft.com/en-us/library/jj673460.aspx


title: Zrozumienie wstrzykiwania zależności

text: Czytam o wstrzykiwaniu zależności (DI). Dla mnie jest to bardzo skomplikowane, ponieważ czytałem, że odnosi się również do odwrócenia kontroli (IoC) i tak czułem, że czeka mnie podróż. To jest moje rozumienie: Zamiast tworzyć model w klasie, która również go konsumuje, przekazujesz (wstrzykujesz) model (już wypełniony interesującymi właściwościami) tam, gdzie jest potrzebny (do nowej klasy, która może przyjąć go jako parametr w konstruktora). Dla mnie jest to tylko kłótnia. Chyba nie zrozumiałem o co chodzi? Może przy większych projektach staje się to bardziej oczywiste? Moje zrozumienie jest inne niż DI (przy użyciu pseudokodu): public void Start() { MyClass class = new MyClass(); } ... public MojaKlasa() { this.MyInterface = new MójInterfejs(); } A DI byłoby publiczne void Start() { MyInterface myInterface = new MyInterface(); Klasa MojaKlasa = new MojaKlasa(myInterface); } ... public MojaKlasa(MójInterfejs mójInterfejs) { this.MyInterface = mójInterfejs; } Czy ktoś mógłby rzucić trochę światła, bo jestem pewien, że jestem tutaj w zamieszaniu.


title: Jak stworzyć dojrzały projekt SW przed samą implementacją? A jak radzę sobie ze zmianami?

text: Robię projekt na mojej uczelni, gdzie po raz pierwszy w życiu muszę stworzyć architekturę/projekt systemu i będę szefem grupy 4 studentów, którzy są na początku kursu. Zasadniczo będę w stanie zrobić wszystko: mam prawie całkowitą samodzielność w wyborze, co dokładnie ma robić oprogramowanie (cele, funkcje itp.), niż muszę je projektować. Ponieważ jest to projekt uniwersytecki, mam dużo czasu na przemyślenie koncepcji oprogramowania i zaprojektowanie go. Mam w planach stworzenie szkicu pomysłu i dopracowanie go z profesorem. Kiedy już mamy konkretny pomysł, chcę rozpocząć sam projekt SW. I tu nasuwają się moje pytania: wiem, że stworzenie projektu uwzględniającego wszystko i nie zmieniającego się w trakcie rozwoju jest niemożliwe, dlatego jestem pewien, że projekt zostanie zmieniony po rozpoczęciu wdrożenia. Chcę jednak przedstawić projekt dojrzały, oparty na logicznych decyzjach i dobrych praktykach, ale oczywiście nie będę w stanie rozwinąć SW, aby zidentyfikować pułapki, w które wpadam (to będzie zadanie ucznia). Jakich sztuczek używasz, aby stworzyć dojrzały projekt i uniknąć pułapek przed rozpoczęciem wdrażania? Jak podchodzisz i „przeglądasz” propozycję oprogramowania, aby znaleźć niespójności lub punkty wymagające wyjaśnienia? Jak to zrobić, aby wprowadzić zmiany do swojego projektu, nie psując go? (Wiele moich projektów zaczyna się bardzo ładnie, ale na końcu są zrujnowane przez zmiany).


title: Czy Java nadal jest królem kompatybilności międzyplatformowej? Czy odpowiedź wciąż się waha?

text: Zasadniczo moja firma chce stworzyć aplikację, która będzie mogła być rozpowszechniana w systemach Linux, Mac OS X i Windows. Mamy nadzieję na rozwiązanie wieloplatformowe. Mam doświadczenie w pracy z Java Swing lata temu i myślałem, że to rozsądne, ale nie świetne. Z pewnością jednak działał na wszystkich platformach. Czy Java i Swing to nadal koniec, w którym cały kod jest uruchamiany wszędzie, czy też istnieją inne opcje dla aplikacji komputerowych?


title: Tworzenie diagramów wiadomości na magistrali usług

text: Szukam sposobu, aby w przejrzysty sposób zobrazować, jak wiele aplikacji komunikuje się za pośrednictwem magistrali usług. Najlepsze, co do tej pory wymyśliłem, to diagram sekwencji, ale naprawdę mi się to nie podoba. Diagramy sekwencji koniecznie wiążą się z jakimś rodzajem sekwencji, a to naprawdę nie jest to, czego chcę. Co więcej, ponieważ każda usługa komunikuje się z usługą Service Bus, a diagramy sekwencji umieszczają każdą usługę w osobnej kolumnie, wraz ze wzrostem liczby usług otrzymujesz wiele nakładających się strzałek. Na przykład, podane 4 usługi `FOO`, `BAR`, `BAZ` i `QUX`: * `FOO` publikuje wiadomości typu _publish_ i _regen_. * `BAR` publikuje wiadomości typu _requeue_. * `BAZ` subskrybuje wiadomości typu _publish_ , _regen_ i _requeue_ i publikuje wiadomości typu _transmit_. * `QUX` subskrybuje wiadomości typu _transmit_. * Każda usługa może opublikować dowolny typ wiadomości w dowolnym momencie (nie ma dorozumianej sekwencji). Jakiego diagramu powinienem użyć, aby jasno i jednoznacznie przedstawić te informacje? Oto najlepsze, jakie do tej pory wymyśliłem: ![Schemat sekwencji](http://i.stack.imgur.com/Dhhqg.png)


title: materiały szkoleniowe do certyfikacji Mysql?

text: Przygotowuję się do certyfikacji MySQL, obecnie oficjalnie zatytułowanej: Oracle Certified Professional, MySQL 5.0 Developer Certification Po przejrzeniu forum MySQL wygląda na to, że większość osób poleca tę książkę: http://www.amazon.com/MySQL-5-0- Certification-Study-Guide/dp/0672328127/ref=sr_1_1?ie=UTF8&qid=1299972594&sr=8-1 Które, o ile się dowiedziałem, było oficjalnym źródłem przygotowania w czasie, gdy MySQL był kontrolowany przez MySQL AB i Sun. Teraz jednak – Oracle oficjalnie nie poleca tej książki. Aby być precyzyjnym, nie wiem, co polecają. Mogłem znaleźć tylko ten „pakiet wartości”: http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=532 Czy ktoś, kto uzyskał certyfikat MySQL, może potwierdzić, że używał tej książki ? Ponadto, jeśli są dostępne inne materiały do nauki w umiarkowanych cenach - daj mi znać. **Aktualizacja** Zdałem drugi poniedziałek 28 marca. Muszę przyznać, że drugi egzamin był bardziej skomplikowany. Mam więc teraz dwa egzaminy i czekam na pakiet od Oracle. Przygotowanie do obu egzaminów zajęło mi łącznie około 2,5 tygodnia. Z 0,5 tygodnia za pierwszy i 2 tygodnie za drugi. Także - do każdego, kto chce ją wziąć: przeczytaj dokładnie książkę i przejrzyj wszystkie pytania na płycie CD dołączonej do tej książki! To ogromnie pomaga. Pytania na egzaminie są bardzo podobne do tych na płycie CD.


title: Wskaźnik, za pomocą którego programiści będą odpowiedzialni

text: Zadałem pytanie o linie kodu na godzinę i dostałem nowe. Więc moje dojrzałe pytanie uzupełniające brzmi: jeśli nie wiersze kodu, to jaka jest dobra metryka, za pomocą której można mierzyć (godzinę/dzień/jednostkę czasu) skuteczność zdalnych programistów?


title: Jak zarządzasz zespołem programistów?

text: Czytam książkę „Cracking the Sales Management Code”, która mówi, że sprzedawcy mogą być mniej lub bardziej zarządzani („miara”), mierząc, czy stale poprawiają swoje cele sprzedażowe, takie jak zdolność do zdobywania nowych sprzedaż, zamkniętą długość cyklu sprzedaży, stosunek wygranych transakcji do utraconych transakcji, osiągnięcie limitu sprzedaży i tak dalej. I zastanawiam się, czy można w ten sposób zarządzać (lub mierzyć) programistami? Teraz jestem w pełni świadomy, że zarządzanie ludźmi według liczb to bardzo trudne zadanie; jest bardzo możliwe, że menedżerowie ustawią złą metrykę, a tym samym prowadzą do złego zarządzania programistami. Ale nadal zastanawiam się, czy jest jakaś książka/literatura eksplorująca ten problem? **Uwaga: Kiedy mówię, że chcę „mierzyć” moich programistów, nie mam na myśli tego, że chcę używać liczb do karania ich lub „oceniać” ich. Mój cel jest prosty, chcę mieć liczby (znaczące liczby), aby móc pomóc im poprawić umiejętności tworzenia oprogramowania (w jakimkolwiek sensie).**


title: Przegląd roczny: jakie twarde dane powinien przynieść programista?

text: Wiele firm przeprowadza coroczne przeglądy i/lub oceny wyników swoich pracowników. Słyszałem, że generalnie dobrym pomysłem jest zebranie pewnych twardych danych do analizy i wniesienia do przeglądu. Im lepsze dane, tym większe szanse na wsparcie promocji lub awansu. Przez twarde dane rozumiem _namacalne liczby_ \-- coś, co można _zmierzyć_ i/lub _wyliczyć_. Oczywiście dane, do których programista miałby dostęp. Coś _nieuchwytnego_ byłoby jak piękny kod napisany przez programistę. Myślę, że byłoby to bardzo trudne do zmierzenia, a kierownictwo wyższego szczebla nie dbałoby o to. Moje pytanie brzmi: dla programisty, **jaki rodzaj twardych danych powinien zostać przeanalizowany i przedstawiony w celu podkreślenia dobrej pracy, która została wykonana?** Przykład, który otrzymałem w przeszłości: wygenerowane zgłoszenia pomocy technicznej przez każdy projekt, w który był zaangażowany deweloper. Czy liczby są niskie? Czy stawka miesięczna spada? Itp.


title: Jak sprawdzić, czy twoi programiści nie radzą sobie z pracą?

text: Jestem liderem zespołu z 5+ programistami. Mam programistę (nazwijmy go **A** ), który jest dobrym programistą, który pisze dobry, czysty, łatwy do zrozumienia kod. Jednak jest nieco trudny do opanowania i czasami zastanawiam się, czy naprawdę nie radzi sobie dobrze, czy nie. 1. Nasza firma wymaga, aby programiści wskazywali postęp prac w używanym przez nas bug trackerze, nie tyle po to, aby monitorować programistów, ale aby informować o postępach interesariuszy. Chodzi o to, że **A** aktualizuje postęp zadania dopiero po jego zakończeniu (może 3 tygodnie po pierwszym przepracowaniu), a to sprawia, że wszyscy zastanawiają się, co dzieje się w środku tygodnia rozwoju. Nie zmieniłby swojego nawyku pomimo wielokrotnego sondowania. (W porządku, programiści nienawidzą papierkowej roboty, ja też) 2. W ostatnich 2-3 miesiącach dość często na urlopie z powodu różnych wydarzeń-- albo jest chory, albo musi uczestniczyć w wielu osobistych wydarzeniach itp. (Jest OK , złe rzeczy dzieją się w ciągu, to tylko zbieg okoliczności) 3. Definiujemy sprinty lub mapy drogowe na każdy miesiąc. A na początku sprintu omówimy ilość pracy, jaką każdy z programistów musi wykonać w sprincie, a **programiści ustalają ilość czasu, której potrzebują na każde zadanie**. Zazwyczaj nie będzie w stanie ich wszystkich ukończyć. (W porządku, programiści regularnie nie dotrzymują terminów nie z ich winy). 4. Mieszkam w Singapurze. Nie jestem pewien, czy to ma znaczenie. Tak, Azjaci są znani z powściągliwości, ale czy to ma znaczenie? Jeśli zdarzy się tylko jedno lub dwa z powyższych zdarzeń, nie odczuję, że **A** jest słaba, ale wszystkie zachodzą razem. Więc mam _uczucie_, że **A** jest słaba i może -- nie daj Boże --- obija się. To tylko uczucie oparte na moim wieloletnim doświadczeniu jako programisty. Ale mogę się mylić. Bardzo trudno jest zmierzyć pracę programisty, biorąc pod uwagę, że nie wszystkie dwa zadania są takie same i brakuje standardowego celu pomiaru zaangażowania programisty w Twoją firmę. Nie da się powiedzieć, czy programista wykonuje swoją pracę, czy się obija. Wszystko, co możesz zrobić, to im zaufać – tak, zaufanie i dawanie im autonomii to najlepszy sposób pracy dla programistów, wiem o tym, _więc nie zaczynaj wykładu o tym, dlaczego musisz ufać swoim programistom, dziękuję wszystkim dużo_ \-- ale jeśli nadużywają twojego zaufania, czy możesz wiedzieć? ## Wynik: Prowadzę z nim bezpośrednią rozmowę na temat mojego postrzegania jego występu. Był oburzony, kiedy zasugerowałem, że mam wrażenie, że nie gra na swoim najlepszym poziomie. Czuł, że to było całkowicie niesprawiedliwe uczucie. Wtedy odpowiedziałem, że to było moje odczucie i nie wiedziałem, czy moje odczucie było słuszne, czy nie. Nie chciał nic z tego i natychmiast zakończył dyskusję. Przed wyjazdem powiedział bardzo chłodnym tonem, że „spróbowałby dać więcej firmie”. Byłem zaskoczony jego reakcją. Jestem pewien, że w jakiś sposób go obraziłem. Nie jestem jednak pewien, czy to słuszne, żebym była z nim tak szczera. * * * **Moje pytanie brzmi: Jak możesz stwierdzić, czy twoi programiści nie działają? Na pewno są doświadczeni liderzy zespołów, którzy wiedzą o tym lepiej ode mnie?** * * * ## Dodatkowe uwagi: 1. Nienawidzę mikrozarządzania. Tak więc wszystko, co mamy do naszego procesu tworzenia oprogramowania, to Sprint (gdzie zadania są priorytetyzowane i przydzielane, a na koniec miesiąca przegląd ilości wykonanej pracy). Deweloperzy musieliby aktualizować zadania w miarę ich codziennego wykonywania. 2. Nie ma spotkania standup ani nic w tym rodzaju. Głównie dlatego, że mamy swobodę pracy w domu i wszyscy tę wolność cenią. 3. Wprawdzie to ja ustalam termin, ale programiści dostarczą oszacowanie dla każdego zadania, a ja zdecyduję - na podstawie oszacowania - zadania, które wchodzą w skład konkretnego sprintu. Jeśli nie mogą ukończyć zadań na koniec sprintu, popchnę ich do następnego. Czyli teoretycznie można po prostu wykonać tylko 1 lub 2 zadania podczas całego sprintu, a następnie przesunąć pozostałe 99 zadań do następnego sprintu i nadal będzie dobrze, o ile to uzasadnia – w formie codziennych aktualizacji postępów pracy


title: Jaki jest przykład dobrego celu SMART dla programisty?

text: Kontynuując to pytanie, zastanawiałem się, czy ludzie mogliby zasugerować kilka próbek tego, co można uznać za „dobry” cel w cyklicznym przeglądzie okresowym dla programisty? Zdefiniujmy SMART z najpopularniejszych definicji we wpisie Wikipedii: * Konkretny * Mierzalny * Osiągalny * Odpowiedni * Ograniczony czasowo


title: Jak mierzyć produktywność zespołu w zwinnym środowisku projektowym?

text: Czy istnieją inne techniki niż prędkość? Jakie są plusy i minusy korzystania z tych z twojego doświadczenia?


title: Jak mierzyć produktywność zespołu?

text: Wyższa kadra kierownicza w naszej firmie wyznaczyła cel, aby nasz zespół ds. oprogramowania był „15% bardziej produktywny” w ciągu następnego roku. Pomiar produktywności w środowisku programistycznym jest bardzo subiektywny, ale nadal musimy opracować zestaw wskaźników. Jakie dane możemy przechwycić, aby mierzyć produktywność naszego zespołu?


title: KPI dla programistów

text: Czy znasz jakieś kluczowe wskaźniki wydajności dla programistów? Co należy mierzyć i monitorować?


title: Jak zmierzyć wkład w projekt?

text: Czy ktoś kiedykolwiek natknął się na ten problem? Kiedy masz zespół programistów pracujących nad projektem, jak możesz zmierzyć ich wkład w ten projekt? Czy jest na to „formalny” sposób? Liczba zatwierdzeń? Liczba poprawek błędów? Linie zaangażowane? A może na zasadzie biletu? Próbuję wymyślić przepływ pracy, w którym grupa programistów może bezproblemowo pracować, wymieniając zadania i pod koniec miesiąca, otrzymując zapłatę za ich składki (lub zasługi, jeśli chcesz). Mam nadzieję, że to pytanie nie jest tutaj całkowicie nie na miejscu, jeśli tak, możesz je zamknąć.


title: Jak mierzyć wydajność programistów?

text: W wielu firmach istnieje formalna procedura sprawdzania pracy pracowników. Na przykład sprzedawca może zostać, na początku roku sprzeda milion jednostek. Kiedy rok później przychodzi do przeglądu, mówi, że sprzedała dwa miliony sztuk. W ten sposób jej menedżer postanawia ją awansować. Ale co powinien powiedzieć programista? Naprawię milion błędów, napiszę sto testów jednostkowych? Nie wyobrażam sobie wielu rzeczy, które można tu zmierzyć, zwłaszcza jeśli nie masz planu na rok i jeśli pracujesz nad konserwacją. Jakie rodzaje solidnych wskaźników wydajności sprawdzają się w przypadku programistów? A może pomiary wydajności w ogóle nie mają zastosowania dla programistów?


title: Jak długo mam czekać na automatyczne zapisanie danych wprowadzonych przez użytkownika?

text: Mam tabelę, w której Użytkownik może edytować dane, po prostu wybierając pole, a następnie edytując jego wartość. Chcę uruchomić funkcję aktualizacji, aby automatycznie zapisać dane w bazie danych MySQL. Myślę jednak, że nieefektywne byłoby uruchamianie tej funkcji przy dosłownie każdej zmianie, np. po każdym naciśnięciu klawisza. Jak długo mam czekać na zapisanie danych wejściowych?


title: Czy programiści powinni akceptować nadgodziny/pracę w weekend/odmowę wypłaty premii?

text: Zakładam, że w takiej sytuacji jest wielu programistów: * jesteś zatrudnionym architektem/inżynierem oprogramowania * jesteś dobry w swojej pracy * Twoja firma potrzebuje więcej dobrych programistów, niż może znaleźć * istnieje wiele opcji, aby znaleźć nową pracę lub zdobądź samozatrudnienie * praca nie jest twoim priorytetem (lubisz rodzinę/wolny czas) Czy nie jesteśmy głupi, kiedy nadal akceptujemy nadgodziny/pracę w weekendy/odmowy wypłaty premii? Myślę, że pracodawcy będą musieli ustąpić, jeśli zażądamy lepszych warunków pracy. Jak myślisz, co by się stało, gdybyśmy wszyscy domagali się lepszych warunków pracy?


title: Korzystanie z poziomu modułu zadeklarowanego jako globalne „singletony” w pythonie

text: Ok, wiem, że używanie singletonów jest generalnie złą praktyką, ale jeśli to zrobię (dla połączenia db, logowania i in.), czy mogę przejść (ze względu na czysty projekt) ze zmienną zdefiniowaną przez moduł, która jest inicjowana podczas uruchomienie. np.: if __name__ == '__main__': datasources.database.db = DB(dbpath) gdzie db jest zadeklarowana tutaj, na najwyższym poziomie modułu: db = None class DB(object): def __init__(self, path ): ....Jaki może być rozsądny kompromis między przekazywaniem db dla każdego obiektu, który używa go w "prawdziwy sposób OO" a posiadaniem globalnego?


title: Tablety z uruchomionymi środowiskami IDE

text: Jestem nowy na rynku tabletów, ale staram się dowiedzieć więcej. Czy na obecnych tabletach można uruchomić oprogramowanie programistyczne, takie jak Visual Studio? Rozumiem, że musieliby wymyślić jakąś uproszczoną wersję, ale mogę sobie wyobrazić, że programiści są podekscytowani taką możliwością. Czy coś takiego już istnieje, czy są pogłoski, że będzie dostępne w najbliższej przyszłości?


title: Kwestionowanie jednego z argumentów za wstrzykiwaniem zależności: dlaczego tworzenie grafu obiektów jest trudne?

text: Struktury wstrzykiwania zależności, takie jak Google Guice, dają następującą motywację do ich użycia (źródło): > Aby skonstruować obiekt, najpierw budujesz jego zależności. Ale aby zbudować każdą > zależność, potrzebujesz jej zależności i tak dalej. Więc kiedy budujesz obiekt >, naprawdę musisz zbudować graf obiektów. > > Ręczne tworzenie wykresów obiektów jest pracochłonne (...) i utrudnia testowanie. Ale nie kupuję tego argumentu: nawet bez wstrzykiwania zależności mogę pisać klasy, które są zarówno łatwe do utworzenia, jak i wygodne do testowania. Np. przykład ze strony motywacyjnej Guice można przepisać w następujący sposób: class BillingService { private final CreditCardProcessor processor; prywatny końcowy TransactionLog transactionLog; // konstruktor do testów, przyjmujący wszystkich współpracowników jako parametry BillingService(CreditCardProcessor processor, TransactionLog transactionLog) { this.processor = processor; this.transactionLog = TransactionLog; } // konstruktor dla produkcji, wywołując (produktywne) konstruktory współpracowników public BillingService() { this(new PaypalCreditCardProcessor(), new DatabaseTransactionLog()); } public Receipt chargeOrder(PizzaOrder order, CreditCard creditCard) { ... } } Mogą więc istnieć inne argumenty za wstrzykiwaniem zależności ( **które są poza zakresem tego pytania**!), ale łatwe tworzenie testowalnych wykresów obiektów jest nie jeden z nich, prawda?


title: Jaki jest największy, najbardziej imponujący wyczyn programistyczny, jakiego kiedykolwiek byłeś świadkiem?

text: Wszyscy znają stare powiedzenie, że najlepsi programiści mogą być o rząd wielkości lepsi od przeciętnych. Osobiście widziałem dobry kod i programistów, ale nigdy coś tak absurdalnego. Więc pytanie brzmi: co jest najbardziej imponującym osiągnięciem programowania, jakiego kiedykolwiek byłeś świadkiem lub o którym słyszałeś? Imponowanie możesz zdefiniować poprzez: 1. Zakres wykonywanego zadania _np. John samodzielnie opracował ramy dla swojej firmy, co jest porównywalne z zakresem pracy pozostałych 200 zatrudnionych razem wziętych._ 2. Szybkość _np. Stu zaprogramował cały system operacyjny aplikacji wielozadaniowej w czasie rzeczywistym na weekend, w tym własny kompilator C i narzędzia wiersza poleceń powłoki_ 3. Złożoność _np. Jane przeprojektowała całą naszą aplikację 10 milionów LOC do pracy w klastrze serwerów. I zrobiła to po południu._ 4. Jakość _np. Kod Charlesa miał wskaźnik defektów na LOC 100 razy mniejszy niż średnia firmy. Co więcej, jego kod był przejrzysty i zrozumiały dla wszystkich. Oczywiście, im więcej tych cech jest połączonych i im bardziej ekstremalna każda z nich, tym bardziej imponujący jest wyczyn. Więc daj mi to. Jaki jest najbardziej absurdalny wyczyn, jaki możesz opowiedzieć? Podaj jak najwięcej szczegółów i staraj się unikać miejskich legend lub przesady. Publikuj tylko to, za co możesz ręczyć. Dodatkowe pytania: 1. Czy zadanie herkulesowe było jednym z zadań, czy też osoba regularnie zadziwiała ludzi? 2. Jak wytłumaczysz tak imponującą wydajność? 3. W jaki sposób programista został doceniony za tak niesamowitą pracę?


title: Ćwiczenia z programowania/testy?

text: Moja sytuacja: jestem w zespole programistycznym iw tym roku chcemy wyeliminować słabe ogniwo, organizując konkurs na najlepszego kodera z naszej grupy kandydatów. Nacisk kładziony jest na konkursy podobne do IEEExtreme. Co zrobiłem: Próbowałem już od 2 tygodni, aby uzyskać stronę ćwiczeniową lub testową, taką jak UVa lub codechef. Plan po tym, jak go znajdę: Wyślij im (kandydatom) listę bezpośrednich linków do problemów (uczyniąc z nich „listę problemów konkursowych”) poproś ich, aby przesłali mi e-mailem kod poprawnych odpowiedzi w momencie, gdy sędzia stwierdzi, że rozwiązali problem i zaakceptuj najszybszego do zespołu.Zagadnienia: Ćwiczyliśmy już na UVa (również na wyzwaniach programistycznych), więc nasz były kolega z drużyny (który będzie w grupie kandydatów) ma już przewagę, jeśli go użyjemy. odpowiada publicznie, a ponieważ pokazuje najnowsze, bardzo trudno będzie zweryfikować, czy odpowiedź została skopiowana.I znalazłem inne strony, takie jak SPOJ, ale mają przynajmniej pewne problemy z codechefem, przez co dziedziczą problem Codechef Więc jakie są alternatywy? Jakakolwiek strona, która może działać? Każde miejsce, w którym można zdobyć wszystkie rzeczy, aby zorganizować konkurs Mooshak lub podobny (jak w materiałach, aby uzyskać problemy, instrukcje dotyczące samego serwera są łatwe do google)?Jakiś inny pomysł?


title: Jaki jest najlepszy styl programowania, aby rozpocząć naukę programowania POP lub OOP?

text: Jeśli ktoś musi zacząć naukę programowania, od czego powinien zacząć? Czy powinien zacząć pisać programy zorientowane na procedury, czy przeskoczyć do OOP?


Pytanie: Dlaczego Java/C# nie może zaimplementować RAII? Wyjaśnienie: zdaję sobie sprawę, że odśmiecacz nie jest deterministyczny. Tak więc przy obecnych funkcjach języka nie jest możliwe automatyczne wywołanie metody Dispose() obiektu przy wyjściu z zakresu. Ale czy można by dodać taką deterministyczną cechę? Rozumiem: uważam, że implementacja RAII musi spełniać dwa wymagania: 1\. Okres istnienia zasobu musi być powiązany z zakresem. 2\. Domniemany. Zwolnienie zasobu musi nastąpić bez wyraźnej instrukcji programisty. Analogicznie do garbage collectora zwalniającego pamięć bez wyraźnej instrukcji. „Niejawność” musi wystąpić tylko w miejscu użycia klasy. Twórca biblioteki klas musi oczywiście jawnie zaimplementować destruktor lub metodę Dispose(). Java/C# spełnia punkt 1. W C# zasób implementujący IDisposable może być powiązany z zakresem „using”: void test() { using(Resource r = new Resource()) { r.foo(); }//zasób zwolniony przy wyjściu z zakresu } Nie spełnia to punktu 2. Programista musi jawnie powiązać obiekt ze specjalnym zakresem "używającym". Programiści mogą (i zapominają) o wyraźnym powiązaniu zasobu z zakresem, tworząc wyciek. W rzeczywistości bloki "using" są konwertowane przez kompilator na kod try-finally-dispose(). Ma taką samą jawną naturę wzorca try-finally-dispose(). Bez niejawnego zwolnienia zaczep do zakresu jest cukrem składniowym. void test() { //Programista zapomniał (lub nie był świadomy potrzeby) jawnego //powiązania zasobu z zakresem. Zasób r = nowy Zasób(); r.foo(); }//wyciekło zasobów!!! Myślę, że warto stworzyć funkcję językową w Java/C# pozwalającą na specjalne obiekty, które są podpinane do stosu za pomocą inteligentnego wskaźnika. Ta funkcja pozwoliłaby Ci oznaczyć klasę jako związaną z zakresem, tak aby zawsze była tworzona z zaczepem do stosu. Mogą istnieć opcje dla różnych typów inteligentnych wskaźników. class Resource - ScopeBound { /* szczegóły klasy */ void Dispose() { //wolny zasób } } void test() { //class Zasób został oznaczony jako ScopeBound, więc powiązanie ze stosem jest niejawne. Zasób r = nowy Zasób(); //r to inteligentny wskaźnik r.foo(); }//zasób zwolniony przy wyjściu z zakresu. Myślę, że niejawność jest tego „warta”. Tak jak niejawność zbierania śmieci jest tego „warta”. Jawne używanie bloków odświeża oczy, ale nie oferuje żadnej semantycznej przewagi nad try-finally-dispose(). Czy implementacja takiej funkcji w językach Java/C# jest niepraktyczna? Czy można to wprowadzić bez łamania starego kodu?


title: Separacja obaw/zasada pojedynczej odpowiedzialności

text: Właśnie czytałem zasady SOLID i właśnie z tym mam duże trudności podczas projektowania oprogramowania. Jestem stosunkowo nowy (4 miesiące zawodowo) w kodowaniu. Chodzi o to, aby po prostu zawrzeć klasy w te, które wykonują jedno zadanie. Na przykład, co zrobić, jeśli masz klasę, która tworzy i wypełnia Treeview i konfiguruje go zgodnie ze specyfikacją. Następnie chcesz, aby dane były pobierane z bazy danych, gdy użytkownik kliknie węzły. Czy powiedziałbyś, że to dwie odrębne kwestie? 1. Wypełnij i skonfiguruj widok drzewa 2. Uzyskać dane z bazy danych? Również w tej samej aplikacji. Masz widok datagridview, który jest również wypełniony danymi dynamicznymi. Czy zatem umieściłbyś to pobieranie danych w tej samej klasie, co pobieranie danych widoku drzewa, czy też byłaby to kolejna całkowicie oddzielna klasa? Dziękuję.


title: Modyfikowanie aplikacji open source

text: Jaki jest ogólny przepływ pracy, gdy chcę dodać funkcję do aplikacji typu open source, której pierwotnie nie napisałem? Jak poznać kod? Jak znaleźć miejsce, które należy zmienić lub dodać? Jak właściwie dokonać zmiany, nie psując niczego innego? Jak sprawdzić, czy wszystko nadal działa? Jakie są ogólne wytyczne dotyczące takiego projektu?


title: Wyodrębnianie modeli do zewnętrznej zależności

text: Około 9 miesięcy temu zadałem pytanie dotyczące tworzenia warstwy usług dla mojej aplikacji. Niestety w następnym czasie nie osiągnięto w tym zakresie postępu, przede wszystkim ze względu na ograniczenia czasowe. W związku z tym ponownie oceniam ten pomysł i mam inny, który może być prowizorycznym rozwiązaniem z szybszym czasem rozwoju. Pracuję z dużą monolityczną aplikacją, która tak naprawdę składa się z dwóch różnych aplikacji (z wyjątkiem tego, że udostępniają i muszą udostępniać dane). To mi nie pasuje i chciałbym spróbować podzielić je na oddzielne jednostki z różnych powodów. Na przykład zestaw testów jest ogromny (a zatem bardzo powolny), a zmiana czegoś w jednej „podaplikacji” nie powinna w żaden sposób wpływać na drugą. Skalowalność to kolejna kwestia, ponieważ jedna „podaplikacja” otrzymuje znacznie większy ruch niż druga. Kiedy podchodziłem do tego pomysłu w zeszłym roku, myślałem o wydzieleniu wszystkich danych do osobnej warstwy, do której podaplikacje mogłyby przeszukiwać, ale jak wspomniano, wydaje się to być większym zobowiązaniem, niż mógłbym w tej chwili sprzedać. Zamiast tego myślę teraz o wyodrębnieniu modeli (lub przynajmniej modeli udostępnionych) do klejnotu (lub, jak przypuszczam, silnika Rails), który jest wymagany przez każdą podaplikację. Plusem byłoby to, że każda podaplikacja mogłaby być rozwijana niezależnie, niezależnie testowana i skalowana niezależnie. Poza tym, gdy już znajdzie się na miejscu, łatwiej będzie wyrwać zewnętrznego „dostawcę modeli” i zastąpić go odpowiednim SOA (ponieważ w tym czasie wszystko będzie już przynajmniej podzielone), niż zrobić skok prosto z monolitycznej aplikacji. Wady, o których myślę, skupiają się na łatwości użytkowania. Nowy kod wymagałby dotykania wielu repozytoriów, a utrzymanie kontekstu mentalnego może być trudne. Podobnie moi programiści, którzy są mniej doświadczeni w projektowaniu, mogą mieć problem ze znalezieniem potrzebnego kodu lub utrzymaniem separacji w nienaruszonym stanie. Oczywiście można je złagodzić za pomocą odpowiednich narzędzi i przeglądu kodu, a te same wady prawdopodobnie dotyczą SOA. Czy ktokolwiek może zaważyć, jeśli uważa, że to dobry lub zły pomysł? Czy warto podjąć wysiłek na rzecz tego, co jest wyraźnie „pośrednim” krokiem, zamiast próbować znaleźć czas, aby zrobić to „właściwie” (gdykolwiek to będzie). Czy są jakieś inne wady (lub zalety), których nie rozważam?


title: Narzędzie, które zamienia tabelę prawdy w najmniejszy możliwy blok if / else

text: Czy jest jakaś aplikacja lub narzędzie, które przyjmie tabelę prawdy i zamieni ją w skompaktowany blok if? Na przykład, powiedzmy, że mam tę tabelę prawdy, gdzie A i B są warunkami, a x, y i z są możliwymi akcjami: A B | x y z ------------- 0 0 | 0 0 1 0 1 | 0 0 1 1 0 | 0 1 0 1 1 | 1 0 0 Ta aplikacja może wytworzyć blok if: if(A) { if(B) { do(x) } else { do(y) } } else { do(z) } To jest prosty przykład, ale często mają kilka warunków, które połączone na różne sposoby powinny dawać różne wyniki i trudno jest znaleźć najbardziej zwarty i elegancki sposób przedstawienia ich logiki w bloku if.