title: Czy przeprowadzono badania nad skutecznością Planning Pokera jako techniki szacowania?

text: Chociaż powszechnie uważa się, że planowanie pokera poprawia dokładność szacunków projektów (niewielka próba wykazała to w tym pytaniu), czy przeprowadzono jakieś zdefiniowane badania na ten temat? Dokładniej, szukam informacji nieprzypadkowych, pokazujących, że planowanie pokera byłoby ulepszeniem w stosunku do tradycyjnych technik szacowania.


title: Czy na jednym komputerze mogę uruchomić zarówno platformę .Net, jak i Java?

text: Mam .NET 2.5 zainstalowany na moim komputerze, jako początkujący korzystałem z VB.net Idąc dalej zainstalowałem również nowe pliki .dll, które pomogłyby mi w programowaniu VB.net Teraz chcę również uczyć się java , co prowadzi do programowania na Androida. Jeśli zainstaluję JDK 7.0, czy nadal będę mógł programować w VB.net? Czy zainstalowanie JDK nadpisze pliki .dll niezbędne dla platformy .NET? Czy powinienem kupić nowy komputer programistyczny, który koncentruje się na programowaniu JAVA/Android?


title: Specyfikacja wymagań dla witryny wielokanałowej

text: Firma, w której pracuję, ma proces tworzenia oprogramowania podobny do RUP, z bardzo ciężką dokumentacją. W tej chwili tworzymy wielokanałową witrynę internetową — jest ona przeznaczona do wyświetlania na komputerach stacjonarnych, tabletach i smartfonach — a każda wersja witryny ma określony przepływ wydarzeń i treści. Nie widzę w RUP artefaktu, w którym te różnice są udokumentowane. Zdaję sobie sprawę, że Uses Cases musi być niezależne od implementacji — nie możemy wymieniać żadnych terminów dotyczących konkretnych urządzeń — więc może jest coś w dyscyplinie Design, co służy temu celowi. Jeśli nie ma nic takiego w RUP, byłoby miło wiedzieć, jak inny dokument Procesu Oprogramowania wymaga dla witryn wielokanałowych.


title: Kiedy warto zacząć korzystać z następnej wersji narzędzia podczas testowania testowego?

text: W szczególności pracuję nad narzędziem, które integruje DVCS i system kompilacji, ale wyobrażam sobie wyzwanie, jakie napotka każdy, kto opracuje narzędzie „meta” (kompilator, VCS, system kompilacji, program uruchamiający testy itp.), chcą się rozwijać poprzez „dogfooding”. **Moje pytanie:** w przypadku procesu wydawniczego w stylu scrum z wykorzystaniem przepływu pracy rozgałęziania, w którym momencie mam zacząć używać nowszej wersji narzędzia w cyklu rozwojowym narzędzia? Poszukuję procesu, który zapewniłby równowagę między: * ciągłym używaniem wersji narzędzia `develop`: stwierdzam, że łamię swój własny rozwój, gdy wprowadzane są zmiany. * stale używaj wersji `master` narzędzia: wszelkie problemy, które wykryję poprzez testowanie, to problemy, które zostały już wydane.


title: Jak praktykować ATDD, jeśli projekt nie wyszedł jeszcze z TDD?

text: Pomimo tego, że jest bardzo przyjazny dla interesariuszy, ATDD miało na celu zapewnienie linii „stop”, gdy funkcja została właśnie wykonana. Pozwala to uniknąć marnowania czasu na dodawanie nieskoncentrowanego (a czasem bezużytecznego) kodu. Dlatego niektóre zespoły zaczynają od stworzenia ruchomego szkieletu aplikacji i bezpośredniego określenia w teście akceptacyjnym pierwszej wymaganej funkcji. Załóżmy, że ten pierwszy test akceptacyjny (nie reprezentuje odpowiedniego pierwszego testu akceptacyjnego, jest tylko przykładem): _**Ponieważ Michael został właśnie utworzony w aplikacji, jego status powinien pozostać nieaktywowany._** Chcę piszę moje testy akceptacyjne skupiając się bezpośrednio na logice biznesowej (przypadki użycia), nie zajmując się GUI dla reguł biznesowych. Zatem moje pytanie brzmi... jak to napisać? skoro nawet nie wiem, co to jest „użytkownik”, co to jest status itp. Czyż nie powinno być zadaniem TDD wyłonienie projektu, a zatem i tych komponentów? Ale jeśli najpierw ćwiczę TDD, aby je wydobyć, korzyść z ATDD (jako linii zatrzymania) zniknie. Wyobrażam sobie, że bardziej konsekwentnie byłoby napisać kilka testów akceptacyjnych (przed wejściem w cykl TDD), gdy projekt będzie dobrze postępował, ponieważ wszystkie główne komponenty byłyby już zaprojektowane. Podsumowując, czy zawsze powinienem pisać test akceptacji PRZED cyklem TDD?


title: Właściwości klasy tylko do odczytu

text: Kiedy zaleca się używanie właściwości „tylko do odczytu” — jeśli język mi na to pozwala? Czy właściwości _public_ tylko do odczytu mają zastąpić metody `getter` lub przynajmniej _Metody magiczne_, takie jak na przykład to, co jest dostępne jako __get() w PHP? Jaki jest pożytek z właściwości tylko do odczytu _private_?


title: Czy możliwe jest analizowanie powierzchni API zestawu bibliotek klas w celu automatycznego określenia zależności między zestawami?

text: Jestem pewien, że wszyscy byliśmy w sytuacji, w której odziedziczyliśmy kod, który był „nadmiernie publiczny”, staje się przestarzały lub wymaga refaktoryzacji. W takich sytuacjach łatwo jest poświęcić wiele dni na analizowanie powierzchni interfejsu API, aby zobaczyć, gdzie wykorzystywane są metody lub klasy; w środowisku uruchomieniowym .Net wydaje się logiczne, że mapowanie tych zależności między zestawami powinno być stosunkowo proste, ale wydaje się, że nie ma żadnych narzędzi, które już to robią? Na przykład zasugerujmy, że mamy bibliotekę klas CRM, która hermetyzuje interfejs do wszystkich danych klientów; nie jest nierozsądne, że aplikacja cytatów może na tym polegać, ale wydaje się, że nie jest trywialna identyfikacja _których bitów_. Naiwnym podejściem byłoby stwierdzenie, że interfejsy publiczne (typy itp.) są powierzchnią API, ale może się zdarzyć, że niektóre z tych interfejsów są publiczne tylko do użytku w konkretnym przypadku użycia, który może stać się nieprawidłowy. Czy możliwe jest automatyczne określenie i mapowanie zależności między zestawami dla danego zestawu zestawów?


title: Miękka aplikacja internetowa w czasie rzeczywistym

text: Tworzę aplikację korepetycyjną, w której wielu uczniów może zalogować się na tę samą sesję z korepetytorem. Moje pytanie brzmi, na przykład, jeśli wysłałem polecenie narysowania linii, czy muszę czekać, aby zobaczyć, czy wszyscy połączeni uczniowie rozpowszechnili polecenie. Teraz polega na tym, że żądania będą przetwarzane w kolejności. Ale rozważ to. Jeśli narysuję jeden punkt, przeciągnę i narysuję inny punkt, narysuje linię. Ale jeśli nie będę czekał, aby zobaczyć, czy każdy krok pomyślnie przeniesie się na ekrany wszystkich uczniów, uczeń może otrzymać instrukcję przeciągania, rysowania, rysowania. Jednak oczekiwanie na wejście każdego podłączonego użytkownika wydaje się być bardzo powolnym podejściem. Czy jest jakiś sposób na skuteczne rozwiązanie tego problemu? Czy to w ogóle problem?


title: Aplikacja giełdowa w czasie rzeczywistym

text: Jestem programistą amatorem. Chciałbym stworzyć aplikację (np. Tradestation) do analizowania danych rynkowych w czasie rzeczywistym. Proszę naucz mnie, czy następujące podejście jest poprawne, tzn. procedury, wiedza lub potrzebne oprogramowanie itp.: 1. Użyj bazy danych do odczytu kanału informacyjnego w czasie rzeczywistym od dostawcy danych: jaka powinna być właściwa baza danych do użycia? Wiem, że to powinno być poważne czasowo. Czy mogę używać SQL, Mysql lub innych? Jaka baza danych może otrzymywać strumień danych w czasie rzeczywistym? Czy muszę w tym celu skonfigurować DB? 2. Jeśli dane czasu rzeczywistego są w formie ASCII, jak można je przekonwertować na te, które mogą być odczytane przez bazę danych i moją aplikację? Czy muszę pisać kody, czy po prostu korzystać z dodatków? Jaki dodatek jest potrzebny? 3. Jak powinienem zakodować program, aby pobrać zmieniające się dane z bazy danych, aby dane na ekranie oprogramowania do analizy również mogły się zmieniać asynchronicznie? (jak RTD w Excelu) 4. Jakich aspektów programowania muszę się nauczyć, aby rozwinąć powyższe? Czy istnieją zasoby internetowe/książki, do których mogę się odwołać, aby uzyskać więcej informacji?


title: Jaka jest różnica między string.c_str() i &string[0]?

text: Jakie są różnice między `string.c_str()` a `&string[0]`? Jeśli chodzi o wydajność, przypuszczam, że `&string[0]` jest trochę szybszy niż string.c_str(), ponieważ nie wymaga wywołania funkcji. Jeśli chodzi o bezpieczeństwo i stabilność, zdrowy rozsądek podpowiada mi, że `string.c_str()` powinien mieć zaimplementowane pewne kontrole, ale nie wiem, dlatego pytam.


title: Nasza wersja Agile nie działa. Porady?

text: Pracuję w małym zespole 4 programistów. Wdrażamy wersję Agile, która wydaje się stale przysparzać nam tych samych trudności, tydzień po tygodniu, i szukam sugestii, które pomogą nam ulepszyć nasz proces. Tło: Zwykle robimy dwutygodniowe sprinty, a w każdym sprintach zwykle nie doceniamy naszej pracy i mamy kłopoty z naszym menedżerem, ponieważ jesteśmy spóźnieni. Każdy sprint zaczynamy od zadania historii, które tworzy dla nas nasz menedżer. Czasem też dorzuca zadania, a my je szacujemy. Nie używamy punktów fabularnych. Używamy oprogramowania Urban Turtle do "zarządzania naszymi sprintami", co w zasadzie jest tylko opowieściami i zadaniami oraz związanym z nimi wypalaniem. Nie planujemy wydania na koniec sprintu. Najczęstszym problemem, który się pojawia, jest to, że planujemy zadanie na początku sprintu tylko po to, by odkryć, że ma ono znacznie większy zakres, ale nadal ma wysoki priorytet, więc musimy nad nim popracować nad dodatkowymi godzinami. Drugim najczęstszym problemem jest to, że jeden z nas napotyka problem techniczny, który spowalnia spalone godziny, powodując blokadę drogową. Jedyna wskazana nam sugestia to bardziej proaktywne dostosowywanie naszych szacunków i dostarczanie aktualizacji podczas porannych postojów, abyśmy mogli dostosować się do potrzebnego dodatkowego czasu. Jednak wydaje się, że jest coś fundamentalnie nie tak ze sposobem, w jaki robimy różne rzeczy. Być może istnieje rozdźwięk między oczekiwaniami kierownika na poziomie projektu a oczekiwaniami na poziomie sprintu. Ponieważ wykonujemy te iteracje sprintu zgodnie z planem projektu, a zatem przedłużanie sprintu lub odraczanie elementów psuje plan projektu. Dlatego jako programiści jesteśmy zachęcani do wykonywania Agile poprzez rozszerzanie szacunków, gdy jest to konieczne, ale także do ukończenia sprintu na czas, co jest mylące. To nie może być rzadki problem, więc mam nadzieję, że ci mądrzejsi ode mnie mają sugestię lub dwie, w jaki sposób możemy przestać napotykać ten sam problem w każdym sprincie. To frustrujące.


title: Wymyślanie tokenów dla leksera

text: Piszę parser dla języka znaczników, który stworzyłem (piszę w Pythonie, ale to nie jest tak naprawdę istotne dla tego pytania - w rzeczywistości, jeśli wydaje się to złym pomysłem, chciałbym zasugerować lepszą ścieżkę) . Czytam o parserach tutaj: http://www.ferg.org/parsing/index.html i pracuję nad napisaniem leksera, który powinien, jeśli dobrze rozumiem, podzielić treść na tokeny. Mam problem ze zrozumieniem, jakich typów tokenów powinienem używać lub jak je tworzyć. Na przykład typy tokenów w przykładzie, do którego się połączyłem, to: * STRING * IDENTIFIER * NUMBER * WHITESPACE * COMMENT * EOF * Wiele symboli, takich jak { i ( liczą się jako ich własny typ tokena Problem polega na tym, że im więcej ogólne typy tokenów wydają mi się nieco arbitralne. Na przykład, dlaczego STRING jest swoim własnym, oddzielnym typem tokenu w porównaniu z IDENTIFIER. Ciąg może być reprezentowany jako STRING_START + (IDENTIFIER | WHITESPACE) + STRING_START. Może to również mieć związek z trudnościami mojego języka. Na przykład deklaracje zmiennych są zapisywane jako „{var-name var value}” i wdrażane za pomocą „{var-name}”. Wygląda na to, że „{”” i „”}” powinny być ich własnymi tokenów, ale są to VAR_NAME i VAR_VALUE kwalifikujące się typy tokenów, czy też oba należą do kategorii IDENTIFIER? Co więcej, VAR_VALUE może faktycznie zawierać białe znaki. Spacja po `var-name` jest używana do oznaczenia początku wartości w deklaracji .. każda inna biała spacja jest częścią wartości. Czy ta biała spacja staje się własny token? Whitespace ma tylko to znaczenie w tym kontekście. Co więcej, `{` może nie być początkiem deklaracji zmiennej... zależy to od kontekstu (znowu to słowo!). `{:` rozpoczyna deklarację nazwy, a `{` może być nawet użyty jako część jakiejś wartości. Mój język jest podobny do Pythona pod tym względem, że bloki są tworzone z wcięciami. Czytałem o tym, jak Python używa leksera do tworzenia tokenów INDENT i DEDENT (które służą mniej więcej tak, jak `{` i `}` zrobiłyby w wielu innych językach). Python twierdzi, że jest bezkontekstowy, co dla mnie oznacza, że przynajmniej lekser nie powinien dbać o to, gdzie się znajduje w strumieniu podczas tworzenia tokenów. Skąd lexer Pythona wie, że buduje token INDENT o określonej długości, nie wiedząc o poprzednich znakach (np. że poprzednia linia była nową linią, więc zacznij tworzyć spacje dla INDENT)? Pytam, bo ja też muszę to wiedzieć. Moje ostatnie pytanie jest najgłupsze: dlaczego leksyk jest w ogóle potrzebny? Wydaje mi się, że parser mógłby przejść znak po znaku i dowiedzieć się, gdzie jest i czego oczekuje. Czy lekser dodaje korzyść prostoty?


title: Gdzie powinny się znaleźć pliki dziennika testów?

text: Moja aplikacja ma dość nietrywialną, ale standardową konfigurację logów. Zawiera program do dołączania konsoli i program do dołączania plików na podstawie rozmiaru kroczącego. Kiedy uruchamiam testy, przez IDE lub maven, gdzie jest najmniej zaskakujące miejsce do zapisywania plików dziennika?


title: W jakich okolicznościach rozwój będzie postępował szybciej w przypadku wielu współtwórców niż niewielu?

text: Widziałem wywiad z Joelem Spolskym, w którym mówi, że Fog Creek Software celowo utrzymuje małe zespoły (wierzę, że w czterech-pięciu facetów). Powodem tego jest uniknięcie dużej ilości komunikacji potrzebnej między członkami zespołu, jeśli zespoły są większe. Jeśli porównać to do projektów open source, gdzie mogą być setki (lub tysiące?) współtwórców. To, czy są zespołem, jest jednak dyskusyjne. Prawdopodobnie są też przykłady czegoś pośredniego, z zespołem liczącym 20 programistów. Moje pytanie brzmi: jakie oprogramowanie najlepiej nadaje się do tworzenia przez małe zespoły, a jakie oprogramowanie jest odpowiednie dla dużych zespołów?


title: Jak awansować jako programista PHP

text: Zajmuję się PHP od 4 lat. 2 lata w szkole i 2 lata w pracy. Ale czuję, że pogrążam się w stagnacji. Oto kilka rzeczy, które obecnie wiem o PHP: * Podstawy (zmienne, struktury kontrolne, tablice, pętle, sesje, ciasteczka, manipulacja plikami) * Integracja bazy danych (MySQL) * OOP - znam tylko podstawy (tworzenie klas, dziedziczenie , obiekty, prywatne, publiczne i chronione zmienne klas) * MVC * Kilka frameworków (CodeIgniter, Laravel) * PHPUnit (Assercje) * Szablony (Smarty) * Używanie PHP z AJAX * Budowanie wtyczek Wordpress * Integracja API To prawie wszystko. Moje pytanie brzmi: co dalej? Co mam zrobić, aby podnieść swoje umiejętności jako programista PHP. Jakie rzeczy możesz polecić, abyś zrobił, aby poprawić (książki, tutoriale itp.). Jakie inne narzędzia PHP możesz polecić, które powinienem wypróbować. Z góry dziękuję!


title: Troska prawna o „pożyczony” kod

text: Firma, w której pracuje mój znajomy (nazwijmy go Ja) niedawno zaprezentowała nową twarz swojej wewnętrznej strony internetowej „sieciowej”. Ta nowa twarz do złudzenia przypomina Facebooka i rzeczywiście, badanie kodu źródłowego ujawnia, że jest on prawie identyczny: kod, nazwy klas, a nawet czcionki są takie same. Nic również nie wskazuje na to, że Facebook jest w jakikolwiek sposób zaangażowany lub świadomy. Wiem, że to nieetyczne, ale czy to nielegalne? Nie mogę znaleźć w tym nic konkretnego, co pomogłoby Mi zdecydować, co z tym zrobić. EDYCJA: Mówimy o kodzie frontonu. Wygląda na to, że w żaden sposób nie łączy się z Facebookiem.


title: "Zapomniałem hasła" - Jak sobie z tym poradzić?

text: Przeczytałem tę odpowiedź i znalazłem komentarz, który nalega, aby nie wysyłać hasła przez e-mail: > hasła nie powinny być możliwe do odzyskania przez e-mail, nienawidzę tego. Oznacza to, że > moje hasło jest gdzieś przechowywane w postaci zwykłego tekstu. należy go tylko zresetować. Pojawia się pytanie o obsługę opcji Zapomniałeś hasła? Za wszelką cenę surowe hasło musi być wyświetlane w dowolnym interfejsie użytkownika, aby użytkownik mógł je odczytać. Więc jaki byłby sposób obsługi „Zapomniałem hasła”


title: Wspólna edycja tekstu w czasie rzeczywistym (np. gdocs) — czy jest to opłacalne narzędzie do tworzenia oprogramowania?

text: „Dokumenty Google” umożliwiają wspólną edycję dokumentów w czasie rzeczywistym. Wiele przeglądarek dokumentów może jednocześnie czytać i zmieniać zawartość dokumentu, dzięki czemu aktualizacje jednego użytkownika są natychmiast stosowane i widoczne dla wszystkich innych przeglądających. * Czy istnieją IDE oprogramowania/aplikacji internetowych, które ułatwiają tego rodzaju współpracę przy pisaniu kodu? * Które procesy (np. programowanie w parach) mogą skorzystać na takim systemie, a które nie? * Czy ten model edycji zespołowej stanowi realną alternatywę dla obecnych systemów kontroli kodu źródłowego, zwykle używanych przez zespoły programistów pracujących na jednej bazie kodu? Powiązane, ale mniej ogólne


title: Co zrobić ze starymi książkami o programowaniu?

text: Mam około 1000 książek o programowaniu, ale dobry wybór dotyczy języków/frameworków, które są przestarzałe, takie jak Django 1.1, Symfony 1.3 lub HTML 4 i CSS 2. Właśnie odzyskałem je wszystkie z magazynu i sortowałem, które są dla mnie bezużyteczne. Więc zastanawiałem się. Przestarzałe książki o programowaniu nie mają żadnej wartości, jeśli chodzi o ich sprzedaż. Idealnie chciałbym je rozdać, ale nie mogę znaleźć nigdzie w Internecie, aby je rozpowszechniać. Jakieś pomysły, co z nimi zrobić?


Widziałem wiele biur z karteczkami samoprzylepnymi na białych tablicach, a nawet na ścianach. Nie używamy ich w naszej firmie, obecnie rozważam rozpoczęcie ich stosowania, ale nie wiem jak. W jaki sposób karteczki samoprzylepne są wykorzystywane przez programistów jako pomoc w zarządzaniu projektami?


title: Jakiej implementacji używasz w kontaktach z operatorami w .Net?

text: Moje pytanie jest w pewnym sensie kontynuacją tego postu na temat serii czasowych w .Net. Najlepiej byłoby rozszerzyć podstawową klasę `TimeSeries<T>` o coś takiego jak `NumericTimeSeries<T>`, gdzie chciałbyś się upewnić, że typ `T` implementuje typowe operatory liczbowe `+`, `- `, `*`, `/', ... Nie jestem pewien, jaki byłby najinteligentniejszy sposób na zrobienie tego. Moim pierwszym pomysłem jest stworzenie abstrakcyjnej klasy `Number`, przy użyciu abstrakcyjnych metod `Add(Number n1,Number n2)`, `Multiply(Number n1,Number n2)`, `Subtract(Number n1,Number n2)`, ` Podziel(Numer n1,Numer n2)` (i tak dalej). Następnie wywołałbym te metody w przeciążeniach operatorów. Mogę wtedy tworzyć konkretne klasy, takie jak `IntNumber`, `DoubleNumber`, `MatrixNumber`, `ComplexNumber` (i tak dalej). Problem polega na tym, że przy implementacji metod musiałbym zrobić okropny `przełącznik`, aby określić, jaka jest klasa każdego parametru, i nie jest to zbyt eleganckie. Czy zrobiłbyś to w ten sam sposób? Czy coś już zostało zrobione? W F# użyłbym funkcji i wbudowanych lub dopasowywania wzorców przy użyciu unii dyskryminowanych. Ale co mam zrobić w C#? **EDYTUJ** : Olivier Jacot-Descombes odpowiedział niesamowitą odpowiedzią. Chciałbym jednak określić funkcję. Liczby mogą stosować operator między nimi (możesz na przykład pomnożyć macierz przez skalar). Problem z tym polega na tym, że nie można z góry poznać rodzaju wyniku; pomnożenie wektora (transponowanego) i wektora zwraca podwójną...


title: dobry edytor c++

text: Zamierzam nauczyć nastolatków trochę kodu C++. Potrzebuję edytora, który jest prosty i ma wbudowany kompilator. Próbowaliśmy CodeBlocks, ale kiedy zainstalowaliśmy go w maszynach, tekst się odwrócił, nie jestem pewien, jaki jest tego powód. Byłbym super, gdyby rozmiar pliku edytora nie był duży. Potrzebujemy tylko prostych funkcji: **-Podświetlenie tekstu.** **-Skompiluj i uruchom.** **-Łatwy w użyciu** **-Powinien działać w systemie Windows XP.**


title: Rola Product Ownera w Scrumie

text: Uczę się metodologii Agile czyli Scrum. Mam bardzo podstawową wiedzę na temat Scrum. Proszę kierować się następującymi wskazówkami: 1. Jaka jest rola „Właściciela Produktu” w codziennym Scrumie, jeśli jest on/ona częścią tego spotkania? 2. W realnym scenariuszu „Właścicielem Produktu” jest osoba, która jest klientem. Członek zespołu może być nominowany jako „Prokurent” właściciela produktu? 3. Czy możemy powiedzieć, że „Kierownik Projektu”, który bezpośrednio wchodzi w interakcję z klientem, jest nominowany jako pełnomocnik „Właściciela produktu”? 4. Kiedy używamy terminu „Zaangażowanie Zewnętrznych Interesariuszy”, czy odnosimy się do „Właściciela Produktu”, czy też innego?


title: W jaki sposób korzystanie z klejnotu LGPL wpływa na moją licencjonowaną aplikację MIT?

text: Zajmuję się tworzeniem aplikacji ruby open source na licencji MIT. Korzystam z tej licencji, ponieważ nie chcę nakładać żadnych ograniczeń na użytkowników aplikacji. Ponadto mogę przeczytać i zrozumieć tę licencję. Niedawno zacząłem używać innego klejnotu rubinowego w moim projekcie (wymagaj "somegem"). Ten rubinowy klejnot jest objęty licencją LGPL. Czy muszę coś zmienić w moim projekcie, ponieważ używam tego innego klejnotu rubinowego na licencji LGPL? Mój projekt nie zawiera kodu źródłowego dla drugiego klejnotu i nie jest dostarczany z moim projektem. Jest po prostu wymieniony jako zależność, aby klejnoty ruby go zainstaluje, a mój projekt wywoła go z mojego kodu. Dodatkowo warto byłoby wiedzieć, czy są jakieś licencje, na które muszę „uważać”, ponieważ korzystanie z nich wpłynęłoby na licencję mojego projektu. Jest kilka innych postów na ten temat, ale sformułowanych na różne sposoby. Ponieważ uważam, że ta licencja jest trudna, mam nadzieję, że uzyskam odpowiedź skierowaną na moją sytuację. Dziękuję, Corsen


title: Projektowanie funkcji oprogramowania, które można wstrzymywać i ponownie uruchamiać

text: Rozważ następującą sytuację: Jedno urządzenie sprzętowe, dwie aplikacje (1 aplikacja C#, 1 oprogramowanie układowe). Aplikacja C# wysyła ramki do oprogramowania układowego, a oprogramowanie układowe wykonuje skrypty. * C# -> wyślij ramkę[x] * FW -> odbierz ramkę[x] * FW -> wykonaj skrypt związany z ramką[x] * FW -> przed zakończeniem wyzwalane jest zdarzenie FW wymuszające zatrzymanie ruchomych części (środki ostrożności ). Wymóg C# po podniesieniu takich zdarzeń: * Sonda FW o status, jeśli status == zatrzymany, wyślij wznowienie sławy. * Zastrzeżenie: logika C# musi zatem dostosować się do „restartu”. ### A więc taka jest moja sytuacja; ale szukam porady, jak zaprojektować klasę, która poradzi sobie z wstrzymywaniem i ponownym uruchamianiem zadań nieograniczoną liczbę razy. Podczas gdy potrafię pisać zawiłe metody, które są trudne do utrzymania poprzez łańcuch logicznych stwierdzeń, zmagam się ze znalezieniem projektu, który nadaje się do wielokrotnego użytku i jest czysty. Takie scenariusze są prawdziwe dla ~50 unikalnych zadań, więc znalezienie rozwiązania, które mogę zastosować za każdym razem, zaoszczędziłoby wiele bólu głowy. Za każdym razem, gdy skrypt jest ponownie uruchamiany lub wznawiany, użytkownik fizyczny może łatwo spowodować zatrzymanie wyzwalacza bezpieczeństwa, dlatego rozwiązanie musi być niezawodne. Chociaż jestem pewien, że rekursja byłaby pierwszym dobrym krokiem, obawiam się, że limity stosu mogą potencjalnie wprowadzać błędy. ### Wyjaśnienie: starając się uprościć sprawy, wydaje mi się, że zbyt wiele pominąłem. Przeprosiny. **Oprogramowanie układowe:** oprogramowanie działające na urządzeniu fizycznym, które kontroluje sprzęt. Nie mam kontroli nad tą bazą kodu i została ona zaprojektowana niezależnie, umożliwiając komunikację USB. **Synchronizacja:** Synchronizacja między aplikacją C# a oprogramowaniem sprzętowym jest bardzo mała lub nie ma jej wcale. Mój kod C# wyśle ramkę z bajtami, które pasują do dokumentu specyfikacji oprogramowania układowego, a jeśli ramka jest prawidłowa, oprogramowanie układowe odpowie, że odebrało ramkę i rozpocznie pracę. Po tym nie ma bezpośredniej synchronizacji. Zadanie opisane przez ramkę ma zazwyczaj dwa atrybuty: czas potrzebny na wykonanie (konieczność ręcznej obserwacji) oraz końcowy status docelowy (wraz z identyfikatorami statusu). Obecnie odpytuję oprogramowanie układowe pod kątem stanu, aż do osiągnięcia stanu docelowego lub do przekroczenia limitu czasu. **Rekurencja:** Miałem na myśli (`jeśli nie ukończono` -> `callSelfAgain()`) **Pauza:** Użytkownik zrobił coś na urządzeniu, poczekaj tutaj, aż to naprawi (może się zdarzyć w DOWOLNYM czas, w którym oprogramowanie układowe wykonuje swoje zadania). **Restart:** Użytkownik zmienił stan, teraz uruchom zadanie od początku (lub od miejsca, w którym zakończyliśmy [zależne od zadania]).


title: Rozpoczęcie programowania przez mojego młodszego brata

text: Mój młodszy brat ma 13 lat, zacząłem programować, gdy zacząłem tworzyć aplikacje na Androida w wieku 15 lat, w zeszłym roku mój brat się tym zainteresował i zawsze nalegał, żebym mógł coś zrobić sam, więc napisałem do niego kilka samouczków i zbudował sobie małą aplikację, która miała kilka przycisków, które coś robiły, myślę, że włożyłeś swojego doba i powiedziałby ci, w którym dniu się urodziłeś, zajęło mu kilka dni budowanie swojej ostatecznej aplikacji, może nawet tydzień, ucząc się wszystkiego, czego potrzebował. Od tego czasu nie zrobił już wiele więcej, ponieważ ja byłem pochłonięty pracą i takimi, w których mam własne problemy programistyczne do rozwiązania. Powiedziałem mu, że kiedy był w moim wieku (mam 17 lat), że powinien być lepszy ode mnie, był jednak trochę sceptyczny. Nie sądzę, że ma tyle logicznego rozumowania, ile myślę, że potrzebuje do rozwiązywania bardziej złożonych problemów, ale czy nie powinno to rozwijać się z czasem, tak jak miało to miejsce ze mną? Dręczył mnie przez ostatni tydzień, żeby napisać mu więcej tutoriali, ale nie miałem czasu. Miałem ze sobą tylko playlistę ściągniętą z `nowego bostonu` z youtube dla C++, to około 73 filmów. Obecnie ma około 20-30 filmów, przyszedł zadać mi kilka pytań na ten temat i to wszystko. Czy naprawdę powinienem właściwie zacząć od C++? Czy powinienem go teraz powstrzymać i ponownie uruchomić na Pythonie lub Ruby? Wiem, że C++ nie powinien być tak naprawdę językiem dla początkujących, zwłaszcza dla kogoś, kto ma tylko 13 lat, do czasu odpowiedzi na to pytanie prawdopodobnie będzie trzeba się uczyć o dziedziczeniu lub coś takiego. * * * Niektórzy ludzie mogą postrzegać to nie jako prawdziwe pytanie, ale tak jest i powinno być używane jako punkt odniesienia dla innych. Chcę wiedzieć, czy powinienem zacząć od innego języka, który jest łatwiejszy? Jaki zatem język? I czy byłoby lepiej, gdybym sam go nauczył (zrobiłbym czas) czy po prostu kontynuował go z „nowym Bostonem”? W tym pytaniu jest jeszcze kilka pytań, ale to są najważniejsze. * * * Częścią pytania, które ludzie wydają się zaniedbywać, jest to, że pytam, czy powinienem zmienić język, którego się uczy, na inny, czy też skoro jest już dość daleko w samouczkach, powinienem zostawić go z C++, a on może nauczyć się innego języki swobodnie samodzielnie?


title: Jak możesz żyć normalnie, kiedy jesteś zbyt namiętny?

text: Powiem to prosto. Jestem dość pasjonatem programowania. Jestem kawalerem i mam dużo czasu poza pracą. Nie spałem przez 5 pełnych godzin przez co najmniej miesiąc, ponieważ jestem zaangażowany w wiele projektów w pracy (większość z nich dobrowolnie) oraz niektóre projekty open-source. Wiem, że nie jestem utalentowanym programistą i pracuję w wolniejszej fazie, ale zawsze dostaję haj (tak jak biegacze), gdy widzę, jak mój kod działa i jest używany przez ludzi. Ten haj ostatnio doprowadza mnie do szaleństwa, ponieważ inne aspekty mojego życia, takie jak randki, spotkania z przyjaciółmi, treningi zajmują tylne siedzenie. Oprócz świetnej reputacji, którą cieszę się w moim miejscu pracy, nie ma nic do pokazania :-( Ledwo mogę spać, ponieważ mój umysł wciąż podskakuje pomysłami nawet podczas snu. Poza tym pragnę, aby ludzie w pracy teraz nadrabiali za moje życie osobiste i to sprawia, że zajmuję się również pracą innych. Każdego dnia zaczynam mówić sobie, żebym pracowała w ustalonych godzinach i skupiała się na innych pięknych aspektach życia, ale rzeczywiście zawodzę żałośnie. Wiem, że to wszystko brzmi jak wielkie gadanie, ale Jestem pewien, że na tym forum są ludzie, którzy przeszliby podobną fazę życia. Jak to przezwyciężyłeś? Nie chcę być nerdem bez przyjaciół. Pracuję od 6 lat po szkole i 27 lat stary mężczyzna. Jak utrzymać normalne życie, kiedy praca i pasja stały się twoją obsesją i nałogiem? **Aktualizacja:** Dziękuję za wszystkie zamieszczone wspaniałe odpowiedzi. To naprawdę pomogło mi spojrzeć na sprawy z innej perspektywy. Zdecydowanie czuję się teraz lepiej i kilka dni temu zapisałam się na siłownię, wychodzę też z pracy l w biurze, żeby nie pracować do późna w nocy :-) W każdym razie zacząłem spać przez 8 godzin i czuję się dobrze. Regularne ćwiczenia są super :-)


title: Jak mogę poprawić przepływ pracy między programistą a projektantem za pomocą Expression Blend?

text: Używamy WPF i Expression Blend 4. Staram się usprawnić nasz przepływ pracy, udzielając korepetycji jednemu z naszych projektantów, aby używał go do stylizacji i animacji. Powoli, ale pewnie odnoszę wrażenie, że Blend sam w sobie jest zbyt techniczny dla danego projektanta. Sam używam go tylko okazjonalnie (jest to świetne na przykład dla stanów wizualnych), ponieważ wiele rzeczy jest łatwiejszych do zrobienia w kodzie lub w ogóle niemożliwych w samym Blend. Wygląda na to, że programista z doświadczeniem w projektowaniu jest o wiele bardziej produktywny niż samodzielny projektant. Czy są jakieś dobre zasoby lub porady, jak mogę ulepszyć ten przepływ pracy?


title: Czy frameworki wstrzykiwania zależności stwarzają ryzyko zależności?

text: Refaktoryzowałem istniejący system, aby używał iniekcji zależności, i ta praca przebiegała sprawnie. Po pewnym czasie zauważyłem, że duża liczba wewnętrznych bibliotek stała się zależna od używanego przeze mnie frameworka DI. W rezultacie cały projekt zależy teraz od tego zewnętrznego frameworka. Widziałem ironię w oddzieleniu wszystkich zależności poprzez uzależnienie ich od wspólnej biblioteki. Moją pierwszą reakcją było stworzenie biblioteki opakowującej wokół frameworka zależności. Dlatego w razie potrzeby mógłbym wymienić ten framework. Po oszacowaniu włożonej pracy zdałem sobie sprawę, że powstałe API byłoby podobne do istniejącego frameworka, a zatem utrudniłoby jego wymianę. Więc porzuciłem ten pomysł. Obawiam się, że framework DI, którego używam, staje się przestarzały lub wymaga wymiany. Czy istnieje wzorzec programistyczny podczas pracy z DI, który zmniejsza sprzężenie między projektem a frameworkiem DI?


title: OOP i aplikacje bazodanowe, czy warto? i kiedy tego potrzebuję?

text: Od kilku lat koduję małe i średnie aplikacje, głównie aplikacje biznesowe lub aplikacje oparte na bazach danych. W każdym nowym projekcie czuję pokusę, aby zacząć od projektowania bazy danych, a następnie napisać kod, który wysyła/odbiera dane do/z bazy danych, frameworki MVC są bardzo pomocne w organizowaniu mojego kodu dla aplikacji internetowych. Ale to wszystko dla mnie. Mógłbym argumentować, że każda aplikacja jest mniej więcej taka sama, przechowuje i pobiera dane. I myślę, że posiadanie dobrego projektu bazy danych znacznie ułatwia pracę. **Więc czego jeszcze potrzebuję? I dlaczego? Jakieś przykłady?** **Staram się doskonalić swoje umiejętności i wiedzę, aby móc poradzić sobie z większymi projektami** , Uważam, że OOP, OOAD i projektowanie/architektura oprogramowania są naprawdę interesujące, ale nie wiem dlaczego miałbym potrzebuję ich w aplikacjach opartych na danych (wiem, że to ja!), znajduję wiele artykułów mówiących o wzorach projektowych, obiektach biznesowych, warstwach serwerowych, architekturze i nie tylko, ale kiedy myślę o każdej nowej aplikacji, zawsze jest tak samo, Mam dobry projekt bazy danych i jestem gotowy do pracy, jeśli klient potrzebuje więcej funkcji, modyfikuję strukturę bazy danych lub dodaję nowe tabele/widoki, dodaję nowe ekrany/strony internetowe i kończę. **Co jest złego w tym podejściu?** Na przykład poproszono mnie o zrobienie aplikacji internetowej z katalogami, myślałem o zaprojektowaniu obiektów, a następnie przekształceniu ich w strukturę bazy danych za pomocą ORM, ale uznałem, że jest to czasochłonne, Zastanawiałem się, dlaczego musiałem projektować zarówno obiekty, jak i dane, i wybrałem moje stare podejście, aby zaoszczędzić czas i wysiłek. Wiem, że to ja, wiem, że się mylę, ale myślę, że posiadanie większej liczby warstw lub warstw między GUI a bazą danych to dodatkowy wysiłek i dodatkowy czas, ** więc kiedy to ma znaczenie? Kiedy warto?** więc pytam: **Jakie jest zastosowanie OOP w tworzeniu aplikacji biznesowych/bazowych? Każdy przykład byłby doceniony ** Innymi słowy ** Kiedy muszę oddzielnie zaprojektować zarówno obiekty, jak i schemat bazy danych? i jakie są korzyści? Jakiś przykład??** dzięki


title: w systemach z wieloma najemcami jaka jest prawidłowa praktyka segregowania danych każdego najemcy od siebie?

text: Jestem deweloperem platformy Azure po raz pierwszy i przejmuję system chmury z jednym dzierżawcą i otrzymałem zadanie przekształcenia systemu w tryb wielodostępny. Jaka jest prawidłowa praktyka oddzielania danych serwera sql każdego najemcy? Jest to system zbierania i raportowania danych. Każdy dzierżawca będzie chciał tworzyć i uruchamiać własne raporty niestandardowe dotyczące danych. Zatem w przypadku wielu dzierżawców, w jaki sposób dzierżawcy nie mogą widzieć nawzajem danych?


title: Argument dziedziczenia zope.interface (dostarczony przez vs isinstance)

text: Jakie ograniczenia ma dziedziczenie interfejsu przez abstrakcyjną klasę bazową, które są adresowane przez zope.interface? W poniższej prelekcji wygłoszonej w 2010 roku przez Jeffa Rusha na temat interfejsów, o godzinie 11:50 Jeff przekonuje, że dzięki dostarczonej przez Ciebie hierarchii jesteś wolny od dziedziczenia. Dlaczego to jest ważne? Gdybym chciał użyć interfejsu i dziedziczyć zachowanie z innej klasy bazowej, Python daje mi możliwość dziedziczenia wielokrotnego. Rozumiem, że należy unikać wielokrotnego dziedziczenia, a projekt kompozycyjny należy rozważyć jako alternatywę, ale w tym przypadku nie dziedziczę zachowania z abc, ale raczej tylko interfejs, więc tak naprawdę nie dziedziczę wielokrotne w behawioralnym sens. Nie rozumiem argumentu o dziedziczeniu.. Z góry dziękuję za podzielenie się swoimi spostrzeżeniami.


title: Jak ktoś z wykształceniem biznesowym może zostać konsultantem ds. oprogramowania?

text: Jestem studentem czwartego roku inżynierii komputerowej na renomowanym uniwersytecie w Toronto i jestem ciekaw, jak niektóre z tych stanowisk konsultingowych w zakresie oprogramowania w dużych firmach (Accenture, Deloitte, IBM itp.) akceptują zarówno dyplomy biznesowe, jak i komplementarne. -Sci i inżynierowie komputerowi? W jaki sposób absolwent biznesu konsultuje się z oprogramowaniem bez doświadczenia w oprogramowaniu? Co oprócz umiejętności komunikacyjnych i innych umiejętności miękkich różni mnie od dyplomu biznesowego na tych stanowiskach? Dziękuję.


title: Blues ze znakiem dolara: JavaScript i PHP

text: Dorastałem programując C++ i Javę, gdzie wszystko było bezpieczne i piękne. Kompilatorzy upewnili się, że trzymają mnie w ryzach, jeśli kiedykolwiek zbłądziłem. Oczywiście na studiach wszyscy robili trochę Perla, ale ja się nie zaciągałem. W dzisiejszych czasach dzieciaki skupiają się na PHP na zapleczu i JavaScript na froncie. Starając się być modnym, robię to samo (dla tworzenia stron internetowych). Problem, na który ciągle się natykam, polega na tym, że przypadkowo dodaję znak dolara ($) przed zwykłymi zmiennymi w JavaScript i oczywiście nikt nic nie mówi, ponieważ jest to prawidłowa składnia często używana dla obiektów jQuery. Czy są jakieś narzędzia do debugowania lub sztuczki programistyczne, aby złapać to zamieszanie związane ze znakiem dolara? Czy często popełniasz ten sam błąd i jak sobie z nim radzisz emocjonalnie? Narzędzia programistyczne Chrome nie zawsze widzą, że jest to błąd JavaScript. Używam PhpStorma i Emacsa do programowania, ale te nie wyłapują mojej głupoty, chociaż podejrzewam, że Emacs tak, ale postanawia mi o tym nie mówić z powodu złośliwości. Jeśli uważasz, że to pytanie jest śmieszne, myślę, że masz rację. Żyjemy jednak w świecie, w którym zmienna ma przed sobą znak dolara. W takim świecie nic nie jest śmieszne.


title: Czy mogę zastosować koncepcje SOLID do całych projektów rozwiązań, a nie tylko do komponentów wewnętrznych?

text: Więc może szybka odpowiedź brzmi „Tak” absolutnie (lub przypuszczam, że nie), ale pozwól mi wyjaśnić mój kąt pytania, aby uzyskać lepiej wyprowadzoną odpowiedź. Wszyscy powszechnie używamy zasad projektowania SOLID podczas tworzenia elementów i części naszych aplikacji. Nie zmuszaj _klasy_ do robienia zbyt wielu rzeczy, nie rób zbyt dużego _interfejsu_, nie używaj abstrakcji, a nie konkrecji itp. Czy można zastosować tę mentalność na abstrakcyjnym poziomie, gdy myślisz o rozwiązaniach, usługach itp.? Główny problem: zmagam się z prośbą, aby jedna usługa zajmowała się wszystkimi rzeczami związanymi z konkretną domeną biznesową. Dodaj do tego wiele zespołów, aby wszystkie miały swoje ręce w puli tej samej aplikacji, aby dodać dowolną potrzebną funkcjonalność. Mam usługę stworzoną z myślą o wielu dobrych architekturze i zasadach projektowych i całkowicie wierzę, że wiele „dodatkowych” funkcji można by połączyć w pionie w ramach tych samych ram i rozwiązań. Po tym wszystkim jest to jeden z powodów, dla których spędzamy czas na architekturze rozwiązań, aby były luźno powiązane i pozwalały z łatwością na skalowalność. Możesz więc powiedzieć: „idź na całość, jeśli framework sobie z tym poradzi, dodaj to!” Coś mi nie pasuje i byłbym zaniepokojony molochem aplikacji/usługi, która próbuje zrobić wszystko. Próbowałem wyszukiwać hasła „aplikacje, które robią za dużo” lub „usługi, które mają zbyt wiele obowiązków”, ale niewiele się pojawiało. Kiedy zaczynam myśleć o zleceniodawcach SOLID, myślę, że posiadanie usługi, która robi _wszystko_ związane z konkretną domeną biznesową, może nie być dobrym pomysłem i może powodować problemy z utrzymaniem i deptaniem sobie nawzajem. Czy prawidłowe jest używanie podmiotów SOLID przy przeglądaniu całej funkcjonalności rozwiązania? Czy tworzenie usługi takiej jak http://www.mycompany.com/api/[everyMethodPossible] jest poprawne, czy może robię coś, co jest niepoprawne? Dziękuję!


title: Wkład domeny publicznej do projektów open source

text: Czy są jakieś pułapki w dostarczaniu kodu domeny publicznej do projektu open source? Rozumiem, że istnienie praw autorskich daje projektowi prawo do egzekwowania swojej licencji. A kod domeny publicznej z definicji nie jest chroniony prawem autorskim. Co mnie szczególnie interesuje: jeśli pracownik rządu USA pisze kod źródłowy podczas wykonywania obowiązków służbowych, a agencja federalna udostępnia go, kod ten jest zgodnie z prawem w domenie publicznej. Tak więc w szczególności zastanawiam się, czy byłyby jakieś problemy, gdyby agencja federalna/pracownik chciał wnieść wkład w projekt open source.


title: Zarządzanie pamięcią Java (myśli/lenistwo)

text: Jeśli chcę utworzyć nieskończoną listę liczb całkowitych w Javie tak: ArrayList<Integer> list = new ArrayList<Integer>(); for(int i = 0;;i++){list.add(i); } Zabrakło mi pamięci. Rozumiem, że alokujemy trochę pamięci na _i_ , _lista_ i za każdym razem, gdy dodajemy _i_ do listy, przypisujemy mu więcej pamięci. Ale używając thunk, mogę stworzyć nieskończoną listę, która nie pochłonie całej mojej pamięci: infList(final int start){ return new InfiniteList ( start, return new InfiniteList.LazyTail(){eval(){return infList( start+1);}} ); } (zaadaptowałem źródło stąd). Jak to działa? Wiem, że opóźniam ocenę wyrażeń: start+1, start+1, start+1 ... ale czy kończę z listą czegoś takiego: [start, eval(){start+1}, eval(){start+1}, eval(){start+1} ... ] Czy 'eval(){...}' odwołuje się do obiektu? Czy zajmują miejsce w pamięci? Czy w końcu zabraknie mi pamięci przy tej implementacji (próbowałem, ale alokacja pamięci nie poruszała się)? Czy zacznę używać pamięci tylko, powiedzmy, gdybym chciał wypisać liczby całkowite system.out.print, to musiałyby zostać obliczone, a część pamięci przydzielona?


title: Wykrywanie IEnumerable "maszyny stanowe"

text: Właśnie przeczytałem interesujący artykuł o nazwie Getting too cute with c# yield return. To sprawiło, że zacząłem się zastanawiać, jaki jest najlepszy sposób na wykrycie, czy IEnumerable jest rzeczywistą wyliczalną kolekcją, czy też jest to maszyna stanu wygenerowana za pomocą słowa kluczowego yield. Na przykład możesz zmodyfikować DoubleXValue (z artykułu) na coś takiego: private void DoubleXValue(IEnumerable<Point> points) { if(points is List<Point>) foreach (var point in points) point.X *= 2; w przeciwnym razie wyrzuć YouCantDoThatException(); } Pytanie 1) Czy istnieje lepszy sposób na zrobienie tego? Pytanie 2) Czy jest to coś, o co powinienem się martwić podczas tworzenia interfejsu API?


title: Rozwój iOS: Jakie są powody, dla których powinienem używać XAuth do uwierzytelniania użytkownika Twittera?

text: Widzę, że wiele osób używa XAuth w swojej aplikacji do uwierzytelniania użytkowników Twittera i zastanawiam się, w jakich sytuacjach chciałbym użyć XAuth we własnych aplikacjach. Dziękuję bardzo za twoją mądrość!


title: Tablica wskaźników w C++.

text: Nie rozumiem danych wyjściowych tego, #include <iostream> przy użyciu std przestrzeni nazw; // wskaźniki i tablice char ch1 = 'a' , ch2= 'b'; char ch3[6] = {'c', 'd', 'e', 'f', 'g' , 'h'}; znak *ptr[3]; int main () { ptr[0] = &ch1 ; ptr[2] = k3; cout << &ch1 << endl; } Wyjściem jest abcdefgh . czy &ch1 nie powinien podawać adresu ch1 ? Nie rozumiem, dlaczego wyjście powinno być abcdefgh.


title: Jitter (kompilator just-in-time) w ASP.NET

text: Wiem, że C# zostanie skompilowany do IL, a następnie do kodu maszynowego w zależności od maszyny przy użyciu kompilatora just-in-time. Moje pytanie trafi do ASP.NET. Czy to to samo? Czy wymaga 3 kroków? Najpierw twoje pliki są konwertowane lub kompilowane do MSIL, a kiedy otwierasz stronę, na przykład w przeglądarce, jest ona zamieniana na kod maszynowy za pomocą jittera?


title: Jak obsługiwać zwroty przy wprowadzaniu kuponów lub rabatów w punkcie sprzedaży?

text: Jaki jest właściwy sposób postępowania z określeniem kwoty do zwrotu klientowi w przypadku kuponów i rabatów stosowanych do paragonów? **[Scenariusz A]** Paragon zawiera elementy, z których każdy ma własną cenę. Zwrócony przedmiot zwróci kwotę wydaną na ten przedmiot. Element A 25 USD Element B 75 USD ===== Razem: 100 USD a) Zwrot elementu A: 25 USD b) Zwrot elementu B: 75 USD c) Zwrot elementu A, elementu B: 100 USD **[Scenariusz B]** Jaki jest właściwy sposób obliczania kwoty zwrócić za sztukę, gdy uwzględnimy globalną zniżkę lub kupon zastosowany do całego paragonu? 10 $ kuponu globalnego za każde wydane 100 $ PozycjaA 25 $ PozycjaB 75 $ PozycjaC 120 $ PozycjaD 15 $ ===== Suma częściowa: 220 $ Kupony: 20 $ Suma: 200 $ Zwrot przedmiotu A: $? Zwróć przedmiotB: $? Zwróć przedmiot C: $? Zwróć przedmiotB, przedmiotC, przedmiotD: $? **[Scenariusz C]** Kupony powiązane bezpośrednio z przedmiotami na paragonach ułatwiają obliczenie kwoty zwrotu za przedmiot, tak jak w scenariuszu A. Kupon 10 USD tylko na pozycję B Pozycja A 25 USD Pozycja B 75 USD -- Kupon: 10 USD Pozycja C 120 USD PozycjaD 15 USD = ==== Suma częściowa: 220 USD Kupony: 10 USD Łącznie: 210 USD Zwróć element A: 25 USD Zwróć element B: 75 USD - 10 USD = 65 USD Zwróć element C: 120 USD Zwróć element B, element C, elementD: (75 USD - 10 USD = 65 USD) + 120 USD + 15 USD = 200 USD * * Rzeczy do przemyślenia:** * Wielokrotne zwroty na paragon (np. zwrot w poniedziałek, pozycja A, zwrot we wtorek, pozycja B) * Rabaty globalne - stosowane do całego paragonu * Rabaty na produkty - stosowane tylko do określonych pozycji * Kupony, które dają rabat za minimalną wydaną kwotę - co jeśli zwracana część paragonu neguje minimalne wymagania?


title: Czy mądrze jest, aby programista wysokiego poziomu spędzał czas na studiowaniu montażu?

text: Oczywiste jest, że w naszej pracy bardzo ważna jest znajomość rzeczy niskiego poziomu. Ale w sytuacji, gdy już tworzysz komercyjne oprogramowanie na wysokim poziomie _i_ kiedy masz już wybrany kierunek, ale nie masz umiejętności montażowych, czy nie jest bardziej rozsądne skupienie się na studiowaniu rzeczy związanych z Twoim kierunkiem? A może jest jakiś powód, dla którego powinieneś poświęcić trochę czasu na naukę podstaw niskiego poziomu? Kiedy jest za późno, a kiedy nie? A jeśli _nie_ jest za późno, to jak optymalnie podejść do uczenia się (w sensie nie spędzania nadmiernej ilości czasu, aby uzyskać trochę głębi i zrozumienia)?


title: Jak najlepiej radzić sobie z błędami adresowanymi w wyższej warstwie abstrakcji i zależnymi od stanu wywnioskowanego w bieżącej warstwie?

text: Mam przypadek użycia, który można naprawić, ale logikę naprawy najlepiej wykonać na wyższym poziomie abstrakcji. Samo zgłoszenie wyjątku/błędu jest brzydkie, ponieważ trudno jest przekazać przez stos informacje potrzebne warstwie nadrzędnej, aby wiedziała, jak to naprawić. Aby wyjaśnić szczegóły, mam program, który kontroluje wiele elementów sprzętu. Warstwa „górna” jest odpowiedzialna za obliczanie, w jaki sposób zlecić każdemu sprzętowi współpracę, jak generować „ścieżki” danych na sprzęcie itp. Moja następna warstwa zawiera wątki dla każdego urządzenia z osobna. każdy wątek urządzenia generuje i buforuje stan urządzenia (pobierany z plików sprzętowych i konfiguracyjnych). Urządzenia przetwarzają żądania z aplikacji, zastanawiają się, jak zaktualizować sprzęt, aby te żądania się spełniły, a następnie zmodyfikują stan pamięci podręcznej, aby odzwierciedlić wprowadzone zmiany. Wreszcie mam wtyczki, które wysyłają fizyczne żądania do sprzętu. Zwykle działa to dobrze, żądania są sekwencyjne, aby uniknąć problemów z wyścigiem danych. Przekazujemy informacje tylko do warstw, nie mamy możliwości uzyskania asynchronicznych aktualizacji w warstwie. Jednak jest bardzo mało prawdopodobne, ale możliwe, aby ktoś mógł fizycznie zmienić sprzęt bez przechodzenia przez nasz system sterowania. Poczekamy, aż wtyczka wykryje błąd podczas próby obsługi żądania i dopiero wtedy spróbujemy zaktualizować nasz stan dla tego sprzętu, aby sprawdzić, czy zmiana spowodowała niepowodzenie (ciągłe monitorowanie jest późniejszą funkcją). Mój problem polega na tym, że gdy zmiana zostanie wykryta na jednym urządzeniu, zwykle oznacza to, że zmiana została dokonana na podłączonych urządzeniach. Kiedy to wykryję, chcę prześledzić zmianę w podłączonym urządzeniu, zaktualizować ich stan itp., aż znajdę wszystkie zmiany (nie wymaga to aktualizacji _wszystkich_ urządzeń, tylko podłączonych). Każdy wątek urządzenia jest odpowiedzialny tylko za jedno urządzenie, więc nie mogą śledzić zmiany za pośrednictwem innych urządzeń bez propagowania wyjątku w górę warstwy. Muszę jednak dokładnie wiedzieć, jakie zmiany zostały wykryte na urządzeniu, aby wiedzieć, których podłączonych urządzeń powinienem odświeżać stan. Jeśli po prostu rzucę wyjątek, ta wiedza zostanie utracona i musi zostać ponownie obliczona, co jest niewielkim, ale realnym kosztem ze względu na czas potrzebny na komunikację ze sprzętem. Kuszące jest wywołanie metody w mojej warstwie aplikacji, mówiącej „ta zmiana została wykryta, zaktualizuj wszystko, co jest z nią związane”. To jednak uświadamia kierowcom warstwę nad nimi, co nie jest dobre. Inną opcją jest po prostu propagacja błędu i pozwolenie mojej warstwie aplikacji na zauważenie błędu, a następnie powrót do tego samego urządzenia, aby zapytać, co się zmieniło i zaktualizować cały jego stan, a następnie ponownie obliczyć zmiany, które mają zostać wprowadzone, i wycofać żądanie do poziomu urządzenia. Pierwszym z nich jest oczywisty zapach kodu, drugi wydaje się oznaczać więcej kodu, nadmiarową logikę i małe kary prędkości (odzyskanie stanu ze sprzętu zajmuje trochę czasu). Czy są jakieś inne opcje?


title: Jak znaleźć dobry projekt open source, do którego mogę dołączyć?

text: Dopiero rok temu zacząłem pracować i chcę dołączyć do projektu open source z tych samych powodów, co wszyscy: pomóc stworzyć coś użytecznego i dalej rozwijać swoje umiejętności. Mój problem polega na tym, że nie wiem, jak znaleźć projekt, w którym się zmieszczę. Jak znaleźć projekt przyjazny dla początkujących? Jakich atrybutów powinienem szukać? Jakie są znaki ostrzegawcze, że projekt może _nie_ być odpowiedni? Czy istnieją jakieś narzędzia, które pomogą dopasować ludzi do projektów open source? Tutaj jest podobne pytanie, ale to pytanie dotyczy zatrudnienia i ogranicza się do PHP/Drupala.


title: Jak znaleźć dopiero rozpoczynający się projekt OpenSource i dołączyć lub znaleźć programistów dla siebie?

text: Czy jest jakieś miejsce w sieci, gdzie mogę dołączyć do zespołu, gdy dopiero rozpoczynają swój projekt? Czy jest miejsce, w którym programiści mogą tworzyć grupy do projektów? Wiem, że jest kilka /dev/forum, na których możesz mieć szczęście, aby znaleźć coś interesującego w jakimś temacie ... ale szanse są naprawdę niskie. Wiem, że można znaleźć projekty na CodePlex lub GitHub, ale będą to już rozpoczęte projekty i nie jest tak łatwo zrozumieć i dołączyć do nich… Chcę znaleźć miejsce, w którym nowe pomysły przychodzą do nowych zespołów. Czyli... może startujący projekt musi mieć już dobre zaplecze, ale nie za duże i wtedy lider projektu musi go wypromować i znaleźć deweloperów, którym pomysł się spodoba? Czasami naprawdę ciężko jest złapać takie promocje.


title: Jak (doświadczony) początkujący wskakuje do open source?

text: > **Możliwy duplikat:** > Jak znaleźć dobry projekt open source, do którego mógłbym dołączyć? Słyszałem dużo o oprogramowaniu open source i chciałbym pomóc społeczności i zdobyć doświadczenie w tworzeniu oprogramowania. Problem w tym, że jestem trochę początkujący. Mam pewne doświadczenie w Obj-C, Javie i Ruby. Jak mogę być użyteczny i jak mogę, powiedzmy, naprawić błędy? Czy mógłbyś polecić jakieś proste oprogramowanie, na które mógłbym spojrzeć i z którego mógłbym się uczyć, a następnie spróbować pomóc?


title: Jak uczeń powinien podchodzić do zajęć pozalekcyjnych związanych z programowaniem?

text: > **Możliwy duplikat:** > Jak znaleźć dobry projekt open source, do którego mógłbym dołączyć? Obecnie jestem uczniem liceum, a moją pasją jest programowanie i informatyka. Uwielbiam to i myślę, że jestem w tym całkiem dobry (przynajmniej w porównaniu z przeciętną osobą w moim wieku). Ukończyłem szereg kursów AP, zwłaszcza z matematyki, a także studiowałem informatykę AP; chociaż czytam książki o informatyce i programowaniu od dość młodego wieku. Zastanawiałem się, jaka byłaby odpowiednia droga do zajęć pozalekcyjnych związanych z programowaniem (lub informatyką). Chcę iść do porządnego college'u i wiem, że wielu z nich szuka ludzi, którzy realizują swoje zainteresowania, a ja chcę znaleźć sposób, aby pokazać, że naprawdę realizuję swoje zainteresowania. Słyszałem, że projekty open source to dobry sposób, ale jak mogę udowodnić, że faktycznie wnoszę się do projektu? A jak mam się zająć znalezieniem odpowiedniego projektu do przyłączenia się, który pozwoli mi dołączyć? Czy są jakieś alternatywy dla projektów open source?


title: Projekty Open Source dla początkujących programistów?

text: > **Możliwy duplikat:** > Jak znaleźć dobry projekt open source, do którego mógłbym dołączyć? Po wielu latach pracy jako biolog molekularny w ławce, w zeszłym roku straciłem pracę i myślę o zmianie kariery. Używam oprogramowania open source i zajmuję się administracją systemu Linux od połowy lat 90., napisałem/ulepszyłem kilka małych skryptów powłoki/Perla/PHP i czuję się bardzo komfortowo kompilując ze źródeł, ale nigdy nie przeszedłem do tworzenia nietrywialnych programów _de novo_. Chcę przejść do faktycznego uczenia się prawdziwych umiejętności programowania i wnoszenia wkładu z powrotem do społeczności, z ewentualnym celem wzięcia udziału w bioinformatyce jako karierze w przyszłości. Teraz jestem tatą w domu, więc mam trochę czasu. Zrobiłem wiele badań nad językami i na razie skupiłem się na Pythonie. Mam skonfigurowaną usługę GitHub, ale jeszcze niczego nie rozwidłem. Rozejrzałem się trochę po OpenHatch, ale nic mnie tak naprawdę nie chwyciło. Słyszałem radę, aby pracować nad tym, czego używasz/kochasz, ale ta kategoria jest tak szeroka, że mam problem ze znalezieniem czegoś, od czego mógłbym zacząć. Jakie masz sugestie na początek? Jak wybrać projekt, który przyjmie twoją (ewentualnie amatorską) pomoc? Z dość ograniczonym zestawem umiejętności, jak znaleźć prośbę, z którą możesz sobie poradzić? Jakich błędów początkujących należy unikać? Jakieś inne porady?


title: Badanie kodu źródłowego pod kątem złośliwości i luk w zabezpieczeniach

text: Jakie są techniki określania, czy określony fragment kodu źródłowego jest złośliwy lub podatny na złośliwy atak? Obecnie używam cppcheck i czekam na instalację Rational AppSource. Poza tym i zapoznaniem się z wytycznymi dotyczącymi bezpiecznego kodowania US-CERT, na co jeszcze powinienem zwrócić uwagę? To jest dla bardzo dużej bazy kodu (150K SLOC).


title: Zmiana kariery z PHP na Java

text: > **Możliwy duplikat:** > Przejście z PHP na Javę W obecnej pracy pracuję od około 4 lat. Zajmuję się PHP dwa razy dłużej. Jestem całkowicie samoukiem (z dużą pomocą Internetu i przyjaciół). Niedawno znalazłem ofertę pracy dla programisty Java i zastanawiam się, co muszę wiedzieć o Javie, aby się przygotować. Wziąłem 2 kursy w college'u na Javie, więc wyglądam trochę poza Hello World (właściwie właśnie zainstalowałem Eclipsed i napisałem go ponownie). Słyszałem, że robią też Flex, więc wszystko, co dotyczy współpracy Java i Flex, również byłoby świetne. Moim pierwszym krokiem będzie przerobienie projektu, który zbudowałem w PHP przy użyciu Javy. To jest podobne, ale odpowiedzi nie są bardzo konkretne. Przejście z PHP na Javę Dziękuję i przepraszam, jeśli powinna to być społeczność wiki.


title: Co należy wziąć pod uwagę przy wyborze języka do tworzenia aplikacji internetowych?

text: Zacznijmy od tego, że nie jest to pytanie, który język wybrać :) Rozważamy zmianę języka, ponieważ naszym ogólnym kierunkiem jest zmiana z witryn internetowych opartych na treści na aplikacje internetowe oparte na danych/działaniach. Jakie czynniki należy wziąć pod uwagę, aby z powodzeniem ocenić różne języki. Kilka czynników, o których myślałem do tej pory, wraz z przypuszczalnym poziomem ważności: * Poziom znajomości języka X w firmie [średni/wysoki] * Dostępne narzędzia [średni] * Wielkość i aktywność społeczności [średni] * Dostępność developerzy [medium] * Koszt developerów [medium] Frameworki również są ważną kwestią, jednak najpierw staram się skupić na pytaniu o wybór języka :)


title: Standaryzacja w organizacji: dobra czy zła?

text: Obecnie pracuję dla sklepu java, który przywiązuje dużą wagę do standaryzacji. Obejmuje to typowe rzeczy (style, javadocs, formatowanie itp.) Do tego, co uważam za nieco bardziej drakońskie (IDE, system operacyjny, zestawy narzędzi itp.). Często słyszy się zwroty pochodzące od starszych osób, takie jak „to pomaga, gdy wszyscy pracujemy z tymi samymi narzędziami / patrzymy na znajomy kod”. Czasami się zgadzam, a czasami czuję, że może być lepszy sposób. Czasami spotykam się ze starszymi praktykami standaryzacyjnymi organizacji, które są w bezpośrednim konflikcie z bardziej zaawansowanymi praktykami społecznościowymi (przede wszystkim przeklęte złe praktyki obsługi wyjątków). Spotykam również przypadki, w których ludzie woleliby, aby kod był napisany w sposób, który wygląda i sprawia wrażenie tego, co zostało tam napisane od lat (czasem dziesięcioleci), a nie kodu, który korzysta z lekcji branżowych, których wyciągnięto w międzyczasie. Rozumiem, że standaryzacja przynosi korzyści w zakresie kosztów i harmonogramu. Pytanie brzmi więc, jak menedżerowie ds. technologii mogą je zrealizować bez tłumienia innowacji i/lub wyłączania dołączania programistów ze studiów lub innych miejsc pracy, którzy mają powiązania z zestawami narzędzi i technikami, które nie są „standardowe”?


title: Czy istnieje coś takiego jak program nauczania dla programistów .NET?

text: Jednym z konstruktów, za którymi tęsknię w środowisku akademickim, jest program nauczania dotyczący tego, co należy omówić, aby uzyskać dyplom z informatyki. Zacząłem od sklepu .NET prawie trzy lata temu bez żadnego szkolenia .NET. Biorąc pod uwagę moje doświadczenie w tej dziedzinie i staram się być na bieżąco poprzez konferencje, blogi, podcasty itp., Czuję, że tonę w morzu nieskończonej głębi. Posiadanie pewnej struktury działa bardzo dobrze dla mnie, więc pomyślałem, że najbliższą rzeczą będzie certyfikacja. Wygląda na to, że najlepiej pasowałby Microsoft Certified Professional Developer (MCPD); jednak inni twierdzą, że certyfikaty Microsoft nie są tak naprawdę ukierunkowane na model „zdobądź książkę, przestudiuj, zdaj test” – musisz mieć rzeczywiste doświadczenie. Co zrobić, jeśli moje doświadczenie jest wadliwe lub nie wykorzystuje technik, które inni uważają za ważne? Inną atrakcyjną częścią certyfikacji jest to, że jest ona ustandaryzowana, co oznacza, że zarówno ja, jak i pracodawcy wiemy, że wykazałem się wiedzą na pewne tematy. W swojej pracy zajmuję się programowaniem w C#/WPF i chciałbym dostać w swoje ręce listę rzeczy, które każdy programista .NET/C#/WPF powinien wiedzieć. Tak, otrzymuję najczęstsze rzeczy, takie jak projektowanie zorientowane obiektowo, zdarzenia, składnia itp. Ale język (i framework) ma wiele subtelności – metody rozszerzające, wyrażenia lambda, delegaty/zdarzenia, wiązanie danych, wątki, przeciążanie operatorów , słabe vs silne wydarzenia. Wydaje się, że Microsoft nie oferuje egzaminu specyficznego dla języka lub frameworka, więc pozostawiono mi książki/blogi/wiki, aby wypełnić luki. Jestem zaangażowany w doskonalenie swojego rzemiosła poprzez naukę i doświadczenie. Jak wy, jako programiści, radzicie sobie z tą sytuacją? Z góry dziękuję!


title: Kto powinien być architektem w zwinnym projekcie?

text: Od kilku miesięcy rozwijamy agile i mam problemy ze zrozumieniem manifestu agile w interpretacji moich kolegów. Opracowywany przez nas projekt jest ramą dla przyszłych projektów i będzie wielokrotnie wykorzystywany w kolejnych latach. Kod został napisany wyłącznie w celu zaspokojenia potrzeb aktualnej historyjki użytkownika. Właściciel produktu mówi nam, co robić, ale nie jak to zrobić. Co by było moim zdaniem słuszne, bo nie jest domyślnie programistą. Projekt posunął się naprzód i w moich oczach trochę namieszał. Po rozpoznaniu zespołu, który był odpowiedzialny za 3 problemy (IoC-Container, warstwa komunikacyjna i wewnętrzne elementy projektu), spróbowałem skierować to do moich kolegów. Odpowiedzieli, że będzie to wynikiem zastosowania YAGNI, ponieważ wiadomo, że ktoś kazał im szanować, że funkcje muszą zostać podzielone na różne zespoły do dalszego użytku. Moim zdaniem nikt nie musi nam mówić, że powinniśmy przestrzegać zasady separacji obaw. Z drugiej strony wspomnieli o preferowaniu YAGNI nad SoC, ponieważ wdrożenie jest mniej pracochłonne, a zatem szybsze i tańsze. Na początku projektu często zmienialiśmy wymagania i kończyliśmy na niekończących się sesjach refaktoryzacji, ponieważ zbyt wiele trzeba było dostosować. Czy lepiej podejmować takie proste decyzje projektowe z góry, nawet nie ma takiej potrzeby w obecnej sytuacji, czy też musimy dużo zmienić w późniejszym przebiegu projektu?


title: Gdzie umieścić wspólne wspólne metody

text: Mam kilka metod, które są powszechnie stosowane wszędzie. W tej chwili plik kodu nazywa się globals, aby przedstawić fakt, że są... w rzeczywistości... globalne. Jednak mi się to nie podoba. Chcę je pogrupować w klasę i przekazać interfejs. Zrobię tylko jedną instancję, ale nie wpadnę tutaj w pułapkę singletona. Przede wszystkim, jak powinienem nazwać klasę. Chcę uniknąć nazwy globals, ponieważ obawiam się, że opiekunowie wpadliby na zły pomysł. Ponadto, jak powinienem rozważyć podzielenie takiego zestawu metod, aby zachowanie mogło się zmienić i dostosować? Zestaw metod zawiera takie rzeczy jak: * Tabele konwersji * Interakcja ze schowkiem * Zarządzanie wbudowanymi czcionkami * Popularne metody rysowania * Zapewnienie interfejsu z dostępem do często używanych zasobów


title: Mój szef postanowił dodać pole „osoba winna” do każdego zgłoszenia błędu. Jak mogę go przekonać, że to zły pomysł?

text: W jednym z ostatnich ruchów „WTF” mój szef zdecydował, że dodanie pola „Osoba do winy” do naszego szablonu śledzenia błędów zwiększy odpowiedzialność (chociaż mamy już sposób na powiązanie błędów z funkcjami/historiami). Moje argumenty, że to obniży morale, zwiększy wskazywanie palcem i nie wyjaśnia brakujących/niezrozumianych funkcji zgłoszonych jako błąd, nie zostały wysłuchane. Jakie są inne mocne argumenty przeciwko tej praktyce, które mogę wykorzystać? Czy jest jakiś tekst na ten temat, którym mogę podzielić się z zespołem i szefem? Uważam, że taka kultura jest nie do przyjęcia, ale chcę spróbować ją zmienić przed skokiem na statek. Każdy wkład jest doceniany.


title: Czy uzasadnione jest, aby zostać poproszony o odnotowanie winy za wady?

text: Obawiam się, że to pytanie wywoła ciarki po kręgosłupie i/lub instynktowną klątwę na samą myśl... Zasadniczo: **czy ktoś był kiedyś proszony o zdiagnozowanie i przypisanie indywidualnej winy do wad?** Innymi słowy: zostać poproszony o przepracowanie kodu, aby spróbować ustalić, kto był odpowiedzialny za linię/funkcję/moduł, który go w jakiś sposób wprowadził, a następnie zapisać nazwisko osoby w zgłoszeniu, aby raport mógł rozbić defekty nie tylko według wagi , komponent, kosztorys itp. - ale także przez członka zespołu. Pytam o to, ponieważ – tak jak ja – możesz po prostu spróbować wejść w mentalność menedżera, który może to zaproponować, a robiąc to, zrozumieć, dlaczego może uważać, że jest to niezwykle przydatne. Z pewnością możesz zapytać, czy ten czas lepiej byłoby spędzić na naprawie usterki?


title: Punkty Bounty za naprawę błędów?

text: Słyszałeś kiedyś o firmie przyznającej punkty bounty za poprawki błędów? Sprawianie, by członkowie zespołu pracowali jak najwięcej, ponieważ od tego będą zależeć niektóre bonusowe pieniądze? Zlecanie im podziału lub płacenie nagród innym za testowanie, aby nie „tracili” punktów, gdy dotrą do środowiska UAT? Dzisiaj po raz pierwszy usłyszałem to od kierownictwa. Dla mnie brzmi to jak dość śmieszne podejście do tworzenia oprogramowania. Wygląda na to, że członkowie zespołu będą konkurować ze sobą w sposób nieproduktywny, zasadniczo zmniejszając wydajność, którą mają teraz. jakieś pomysły? Czy kiedykolwiek widziałeś, jak coś takiego naprawdę działa? Czy to pomogło, czy zaszkodziło zespołowi? _**AKTUALIZACJA 06.04.11:_** To podejście zostało anulowane z powodu opinii całego zespołu! Cieszę się, że nie tylko ja myślałem, że to nie był świetny pomysł.


title: Czy dobrą praktyką jest analizowanie, kto wprowadził każdy błąd?

text: Kiedyś analizowałem wydajność programistów w moim zespole, patrząc na sprawy, które zamknęli. Wiele problemów to oczywiście błędy. I tu pojawia się kolejny ważny aspekt wydajności - kto wprowadził błędy. Zastanawiam się, czy stworzenie w systemie śledzenia zgłoszeń "Blamed" niestandardowego pola do zgłaszania osoby, która wygenerowała problem, jest dobrą praktyką. Z jednej strony wydaje mi się w porządku promować osobistą odpowiedzialność za jakość, a to może zmniejszyć dodatkową pracę, jaką mamy z powodu nieostrożnego programowania. Z drugiej strony jest to negatywne, czasami rzeczy są niejasne, a czasami jest powód taki jak "to trzeba było zrobić bardzo szybko ze względu na...". Co myślisz?


title: Przypisywanie winy za błędy a wręczanie nagród za poprawki

text: W zespole, dla którego kiedyś pracowałem, istniała zasada, że jeśli wprowadzisz wyciek pamięci lub inny wyciek zasobów, na twoich drzwiach będzie zawieszony „atrapa wstydu”, dopóki nie znajdziesz następnego wycieku zasobów. Chociaż było to skuteczne w wykrywaniu wycieków zasobów, czułem, że kładło większy nacisk na obwinianie innych, a nie na wspólne rozwiązywanie problemów jako zespół. Czy nierozsądnie myślę, że ta polityka przyczyniła się do obniżenia poczucia spójności zespołu? Czy też nierozsądnie myślę, że powinniśmy byli nagrodzić osoby, które znalazły i naprawiły problem?


title: Wiele długich żądań odpytywania: zły pomysł?

text: Projektuję serwer WWW, który obsługuje wiele rzeczy, takich jak czat między użytkownikami, czat między użytkownikami, zaproszenie znajomych, forum itp. Czaty muszą być czatami w czasie rzeczywistym, prośby znajomych powinny być powiadamiane w czasie rzeczywistym do użytkownika, a użytkownicy powinni być natychmiast powiadamiani o nowych tematach na forum. Używam Springa i zaimplementowałem długie odpytywanie, aby zmniejszyć opóźnienia i liczbę żądań. Teoretycznie długie odpytywanie działa dobrze z jednego powodu (na przykład czat). Problem polega na tym, że klient musi zostać powiadomiony z wielu powodów: nowa wiadomość na czacie, nowa wiadomość na forum, nowe zaproszenie do znajomych itp. Naiwnym rozwiązaniem byłoby użycie długich próśb o odpytywanie dla każdej akcji, ale prowadzi to do posiadania wszystkich klientów otwierających jednocześnie cztery lub pięć wniosków. Czy serwer z łatwością sobie z tym poradzi, czy też powinienem stworzyć system, aby każde powiadomienie było zwracane tylko przez jedno żądanie? Czy jest inne rozwiązanie?


title: Specjalne cechy każdego z tych języków, które czynią je wyjątkowymi

text: Interesował mnie C++, C#, Java, Python, Ruby i Perl. Wszystkie te języki są bardzo popularne i wierzę, że każdy ma coś, co sprawia, że ludzie je wybierają. Jaka jest ta wyjątkowa cecha każdego z tych języków, która sprawia, że ludzie je wybierają? Chcę, aby odpowiedź była w tym formularzu, np. C# ma _this_ i _this_. C# jest najlepszą opcją, jeśli chcesz zrobić _to_. Uwaga: nie pytam, który język jest najlepszy, chcę tylko poznać moc każdego z tych języków.


title: Jak wybrać styl kodu dla C++

text: Rozpoczynając naukę jednego nowego języka, musimy wybrać idealny styl kodu, taki jak typy lub pierwsza litera nazwy pliku powinna być wielka lub mała itp. Ale kiedy zacząłem uczyć się C++, nie znalazłem żadnego oficjalnego wspólnego stylu kodu, jak ja zrobiłem dla Javy. Popularnym jest Google, ale ktoś mi powiedział, że powinniśmy zachować styl naszej firmy. Ale myślę, że nikt nie będzie pracował w jednej firmie przez całe życie, więc byłoby lepiej, gdyby wybrał popularny, wspólny styl kodu, jeśli styl kodu jakiejś firmy jest brzydki. Jak wybrać styl kodu dla C++? Czy istnieje jakiś oficjalny, powszechny, popularny styl kodu, który jest powszechnie używany? Czy mogę napisać kod w C++ w stylu, którego używam w Javie? Myślę, że styl kodu Javy jest doskonały.


title: Czy kontynuuję opracowywanie alternatywnego istniejącego rozwiązania, czy tracę czas?

text: Prawie 2 lata temu potrzebowałem systemu monitorowania, który monitorowałby czasy pingowania serwerów, bazy danych i różne inne metryki, ale także rzeczy takie jak moje skrzynki e-mail (dla nieprzeczytanych wiadomości), serwery gier, serwery internetowe i wiele innych rzeczy. Nagios był jedynym systemem, którego używałem na poważnie, bardzo podobała mi się jego architektura (dodawanie czeków za pomocą pythona, basha, ruby, perl script, itp.), ale nienawidziłem wielu rzeczy, takich jak interfejs, brak przyzwoitej obsługi zdalnego sprawdzania a jedną z największych rzeczy było ponowne uruchomienie usługi po każdej zmianie konfiguracji. Szukałem _bit_ dla innych rozwiązań, ale jako programista nie spędziłem wystarczająco dużo czasu na Googlingu i stwierdziłem, że łatwo jest otworzyć moje IDE i zacząć pisać kod dla nowego rozwiązania. Po kilku godzinach miałem coś, co uważałem za obiecujące, coś działało w kilka dni, a po tygodniu lub dwóch wydałem The Upsilon Project (http://upsilon-project.co.uk). Zainwestowałem kilka wieczorów i weekendów w ciągu ostatnich 2 lat, ale mam system, który jest dla mnie idealny. Wyszło lepiej, niż mogłem się spodziewać, a przede wszystkim jestem zadowolony z funkcjonalności technicznej (porządny interfejs sieciowy, ponowne wczytywanie konfiguracji online, znacznie lepszy harmonogram). Teraz następny etap jest dość prosty, od samego początku był open source (oczywiście), więc opublikowałem go na kilku stronach, w tym na reddicie, i otrzymałem kilka interesujących opinii. * "Kolejne _rozwiązanie_ do monitorowania" * "Ugh, to Java i XML" * $X już to robi (w szczególności Sensu - http://sensuapp.org/ jest niesamowicie podobny pod względem architektury i celu) Więc chyba ostatni Chodzi o to, co najbardziej mnie denerwowało, ale nie powinno to dziwić, przypuszczam, że nie przeprowadziłem moich badań, ponieważ pisanie kodu jest przyjemniejsze! Teraz mam zadać pytanie, więc oto nadchodzi; Z tego powodu Projekt Upsilon _nie_ był dla mnie stratą czasu; * Nauczyłem się _dużo_ , głównie o procesie otwartego sourcingu projektu (wiadomości, jak trudno jest zdobyć zainteresowanie, społeczność) * Stabilne, efektywne procesy budowania są _ bardzo trudne_. * Efektywna, obszerna dokumentacja _do pisania_ jest do bani. * Negatywne opinie naprawdę bolą, ale wydaje się dobrym motywatorem do poprawy. * Mam idealny system, który działa dla mnie. Ale teraz może być stratą czasu, jeśli zainwestuję w to więcej; * Nikt nie korzysta z mojego projektu, a wiele innych rozwiązań (w szczególności Sensu) jest dalej i ma społeczność. * Wszelkie funkcje są teraz nadwyżką w stosunku do moich osobistych potrzeb. * Mój wkład w inne projekty może bardziej pomóc, zamiast rozwijać kolejne narzędzie. Moje pytanie do ciebie brzmi: **czy kontynuuję projekt Upsilon?**


title: Najlepsze praktyki dotyczące korzystania z sesji HTTP (Java)

text: Moje pytanie nie dotyczy tego, jak korzystać z sesji HTTP ani jak wartości są używane w sesji. Pytanie jest bardziej zorientowane na podejście. W mojej obecnej aplikacji jest kilka wartości przechowywanych w sesji i od czasu do czasu wymagamy tych wartości, oto kilka wartości, które pobieramy z sesji 1. Sklep 2. Język 3. Klient 4. kilka innych, z których mogę pobrać te wartości sesja taka jak request.getSession().getAttribute( "name" ) Potrzebuję tych wartości nie bezpośrednio w moim kontrolerze, ale w innej warstwie (powiedzmy Fasada), więc mam 2 opcje 1. Przekaż każdą wymaganą wartość do metody Facade przez `request. getSession().getAttribute( "nazwa" )`. 2. Utwórz metodę w każdej klasie elewacji, np. Metoda w prywatnym obiekcie Fasada getSessionValue(final String key) { ServletRequestAttributes reqAttr = (ServletRequestAttributes) RequestContextHolder .currentRequestAttributes(); return reqAttr.getRequest().getAttribute(klucz); } Chociaż oba działają w moim przypadku, ale z jednym wyjątkiem, muszę mieć tę metodę w każdej klasie fasady lub muszę pobrać każdy obiekt w kontrolerze. Czy jest jakiś inny sposób lub podejście, które może być bardziej czyste lub moje obecne podejście jest w porządku?


title: Jaki jest przykład niemożliwego obliczeniowo problemu biznesowego?

text: Mam współpracownika, który nie chce zaakceptować faktu, że maszyny Turinga (a także maszyny Von Neumana) nie mogą rozwiązać swojego własnego problemu z zatrzymaniem, stwierdzając: > Możesz zrobić wszystko, mając wystarczająco dużo czasu i pieniędzy. Nie lubi też problemów teoretycznych, twierdząc, że: > W naszej dziedzinie nigdy nie spotkamy się z takimi pytaniami. Jesteśmy aplikacjami > programistami, a nie naukowcami teoretycznymi. Czy istnieje dobry przykład problemu biznesowego, który jest niemożliwy pod względem obliczeniowym, który mógłbym wykorzystać, aby przekonać go o tym?


title: Pytanie dotyczące LinkedList w Javie

text: Kiedy czytałem książkę dla SCJP, natknąłem się na następujący akapit. > LinkedList jest uporządkowany według pozycji indeksu, tak jak ArrayList, z tą różnicą, że elementy > są ze sobą podwójnie połączone. To połączenie daje ci nowe > metody (poza tym, co otrzymujesz z interfejsu List) do dodawania i > usuwania od początku lub końca, co czyni go łatwym wyborem do > implementacji stosu lub kolejki. Pamiętaj, że LinkedList może iterować > wolniej niż ArrayList, ale jest to dobry wybór, gdy potrzebujesz szybkiego > wstawiania i usuwania. Co sprawia, że LinkedList iteruje wolniej niż ArrayList ?


title: Czy framework aplikacji internetowych wymaga systemu wtyczek na poziomie aplikacji?

text: Czy używanie frameworka aplikacji internetowych, Spring, CakePHP, Django itp. oznacza, że nie potrzebuję systemu wtyczek dla mojej głównej aplikacji, ponieważ nie muszę budować zasadniczo frameworka na frameworku? Czy framework służy jako punkty wejścia dla mojej aplikacji, więc mogę używać takich rzeczy jak Dependency Injection do lepszego testowania? Czy framework zapewnia środowisko, w którym mogę to zrobić dla tego, czego potrzebuję w mojej aplikacji, czy aplikacja musi zbudować dodatkowy system wtyczek? EDYCJA: Czy to jest lepsze dla Stackoverflow?


title: Jakie są alternatywy dla pliku resx?

text: Tworzę aplikację dla systemu Windows i chcę przechowywać cały tekst etykiet, przycisków radiowych, przycisków, pól wyboru i nagłówków kolumn siatek w jednym miejscu. Próbowałem użyć pliku klasy, pliku xml, tabeli bazy danych i pliku zasobów. Odkryłem, że plik klasy to najlepszy sposób na przechowywanie wszystkich tych tekstów, ale chcę wiedzieć, czy istnieje jakiś alternatywny sposób? Jeśli używam pliku klasy, będę musiał ponownie skompilować projekt, jeśli zmieni się jakikolwiek tekst. Czy plik zasobów będzie działał poprawnie w przypadku dużych ilości danych? A co ze słownikiem lub przechowywaniem danych w zmiennych?


title: Typy zapytań w sposób ko- lub kontrawariantny

text: Zamieściłem tutaj prośbę o funkcję c#; jednak nie przykuwam tam dużej uwagi. Dlatego proszę Cię tutaj, co o tym myślisz. * * * Słowa kluczowe `in` i `out` w deklaracjach typu ogólnego są przydatne; jednak ze względu na ich charakter ich zastosowanie jest ograniczone do niewielkiej liczby typów. Sugeruję tutaj, aby móc używać ich w deklaracjach zmiennych, pól, parametrów i ewentualnie właściwości w celu ograniczenia zestawu możliwych operacji na dowolnym typie generycznym w sposób dynamiczny i tymczasowy. To znacznie zwiększyłoby liczbę przypadków, w których można zastosować współ- i kontrawariancję. Przykłady // Można przekazać listę bardziej pochodnego typu public void ReadList(IList<out MyType> list) { MyType item = list[0]; // OK lista[0] = nowy MyType(); // NIEDOZWOLONE ze względu na słowo kluczowe "out"! list.Add(nowy MyType()); // NIEDOZWOLONE ze względu na słowo kluczowe "out"! } // Listę mniej pochodnego typu można przekazać public void WriteList(List<w MyType> list) { MyType item = list[0]; // NIEDOZWOLONE ze względu na słowo kluczowe "in"! list[0] = nowy MyType(); // OK lista.Dodaj(nowy MyType()); // OK } \-- **UPDATE** Zrobione te deklaracje class LessDerived { } class MyType : LessDerived { } class MoreDerived : MyType { } Możesz użyć metod pokazanych powyżej w ten sposób var listOfLessDerived = new List<LessDerived>() ; var listOfMyType = new List<MyType >(); var listOfMoreDerived = new List<MoreDerived>(); ReadList(listOfMyType); ReadList(listOfMoreDerived); WriteList(listOfMyType); WriteList(listOfLessDerived);


title: Jak mogę podejść do stworzenia wydajnego algorytmu maksymalizacji wartości z tymi określonymi ograniczeniami?

text: Mam problem z wymyśleniem podejścia, które nie jest n^2 dla tego problemu. Oto wymyślona, uproszczona wersja, którą wymyśliłem: Załóżmy, że jesteś firmą, która potrzebuje 4 pracowników, aby rozpocząć działalność w nowym mieście, menedżera, dwóch sprzedawców i przedstawiciela obsługi klienta, i magicznie wiesz, jak duży wpływ każdy kandydat będzie miał i ile będzie potrzebował do podjęcia pracy. Twoja tabela potencjalnych pracowników wygląda mniej więcej tak: Imię Stanowisko Wynagrodzenie Wpływ Adam Smith Menedżer 60 000 11 Allison Brown Sprzedawca 40 000 9 Brad Stewart Menedżer 55 000 9 ...itd (tysiące rekordów) Jakie podejście algorytmiczne można zastosować, aby znaleźć maksymalny „wpływ” ", jednocześnie obsadzając wszystkie stanowiska i pozostając przy, powiedzmy, 200-tysięcznym budżecie? Dziękuję!


title: Przyznanie członkom zespołu większej władzy decyzyjnej doprowadziło do bardzo długich kłótni, blokując postęp, ponieważ nie ma nikogo, kto ma ostatnie słowo

text: Obecnie używamy Scrum z tym wyjątkiem, że nasi Scrum Masterzy czasami pełnią rolę kierowników projektów, a nie facylitatorów procesu Scrum. Około połowy czasu członkowie zespołu wykonują zadania samodzielnie, ale w połowie przypadków Scrum Master przydziela zadania członkom zespołu. Chciałbym, abyśmy w pełni przyjęli zespoły samoorganizujące się. Jednak gdy próbowaliśmy dać członkom zespołu większą moc decyzyjną, doprowadziło to do bardzo długich kłótni między członkami zespołu, a ponieważ nikt nie miałby ostatniego głosu, argumenty te blokowały postęp. Czy uważasz, że istnieje sposób na zminimalizowanie kłótni z samoorganizującymi się zespołami Scrumowymi?


title: Zbieranie informacji o adresie IP i stacji roboczej; czy należy do klasy państwowej?

text: Piszę narzędzie _enterprisey_, które zbiera informacje o wyjątkach i zapisuje w dzienniku zdarzeń systemu Windows, wysyła e-mail itp. Ta klasa narzędziowa będzie używana przez wszystkie aplikacje w korporacji: web, BizTalk, Windows Services itp. Obecnie ta klasa : * przechowuje stan nadany mu przez właściwości publiczne * wywołuje metody .NET Framework w celu zebrania informacji o szczegółach środowiska uruchomieniowego. Dołączone są wywołania do różnych właściwości i metod z `System.Environment`, `Reflection` details, itp. Ta implementacja ma tę zaletę, że wszystkie te wywołujące nie muszą wykonywać tych samych wywołań samodzielnie. Oznacza to mniej kodu do zapomnienia, zepsucia itp. i nazwę maszyny, na której działa)?** Wydaje mi się, że ma to być klasa, która powinna przechowywać stan, a nie wiedzieć, jak wywołać .NET Framework, aby znaleźć informacje. var myEx = nowy problem z aplikacją{MachineName="Riker"}; //Pobierze "Riker 10.0.0.1" z właściwości MachineLongDesc Console.WriteLine("pełne szczegóły maszyny: " + myEx.MachineLongDesc); public class AppProblem { public string MachineName{get;set;} public string MachineLongDesc{ get{ if(string.IsNullOrEmpty(this.MachineName) { this.MachineName = Environment.MachineName; } return this.MachineName + " " + GetCurrentIP() ; } } private string GetCurrentIP() { return System.Net.Dns.GetHostEntry(this.MachineName) .AddressList.First().ToString(); } } Ten kod został napisany ręcznie z pamięci i przedstawiony dla uproszczenia, próbując aby zilustrować koncepcję.


title: Testowanie interakcji z dużą bazą danych CRM

text: W naszej firmie mamy dwa duże systemy, w zasadzie są to scoring i CRM. Oba mają duże bazy danych SQL Server działające na serwerach Windows w intranecie. Te dwie bazy danych są zarządzane przez inny dział, z którym mamy bezpośredni kontakt. Żaden z tych systemów nie ma żadnych zewnętrznych interfejsów API, z wyjątkiem niektórych procedur przechowywanych (zwanych dalej „SP”), których używamy do wprowadzania wszystkich danych z naszych (zespołu web-dev) dwóch aplikacji, które są publiczną witryną internetową i witryną internetową CRM. **Istnieją problemy**, które sprawiają, że tego rodzaju integracja jest koszmarem: 1. Nie ma odpowiednich kopii baz danych do testowania. Istnieją sporadyczne kopie, które mogą, ale nie muszą być aktualne i synchronizowane ręcznie, co czyni je praktycznie bezużytecznymi w „sytuacjach ASAP” (przez cały czas). 2. Wszelkiego rodzaju modyfikacje w kodzie procedur składowanych dokonywane są bezpośrednio na produkcyjnych bazach danych (!!!), co oczywiście sprawia nam wiele problemów. 3. Kod procedur składowanych nie jest udokumentowany, słabo skomentowany i przeważnie nie jest dobrze napisany. Powiem tylko, że ostatnie dwa dni spędziłem na "odszyfrowywaniu" dwóch SP, z których jeden ma długość ~2400 SLOC i ma wiele magicznych liczb i zmiennych, takich jak `@str1`. **Aby uczynić to łatwiejszym i bezpieczniejszym** : 1. Stworzyliśmy rodzaj "serwera API", który jest w zasadzie serwerem SOAP, który wykonuje zapytania do SP i zwraca wszystkie zapytania, które zwracają wraz z kilkoma ładnymi komunikatami o stanie. Pomaga nam to oddzielić nasze aplikacje od chaosu, ale ledwo upraszcza nasze zadanie, jeśli chodzi o pisanie i testowanie nowych funkcji. 2. Przechowujemy niektóre identyfikatory i inne stałe z tych baz danych w naszych bazach danych, aby zapobiec używaniu magicznych liczb w naszym kodzie, gdy tylko jest to możliwe, ale nadal musimy zbierać i wypełniać wszystkie dane ręcznie za pomocą sqlcmd (co jest bardzo niewygodne z powodu systemu Windows „cmd” do obsługi kopiowania, wklejania i wyświetlania tekstu). Chciałbym mieć jakiś poprawny proces testowania interakcji z tymi bazami, ale to, co mamy dzisiaj, to tylko kolejna kopia bazy danych CRM, którą musimy jakoś zsynchronizować ręcznie. **Moje pytania** : 1. W jaki sposób możemy sprawić, by wszystkie zmiany wprowadzone na produkcyjnych bazach danych automatycznie rozprzestrzeniły się na kopie testowe? Przychodzi mi do głowy coś takiego jak `.bat`-script, ale może są lepsze narzędzia. Wątpię (ze względu na wcześniejsze doświadczenia), że możemy poprosić inny dział o wykonanie jakiejś replikacji, więc proszę o coś, co sami możemy zrobić i przekonać inny dział do wykorzystania. 2. Jak możemy łatwo zsynchronizować niektóre dane bez kopiowania wszystkich danych? Na przykład potrzebujemy aktualnej kopii wszystkich słowników/taksonomii, ale nie danych o klientach (co jest dużą ilością danych i ich skopiowanie zajmie dużo czasu). Znowu myślę o jakimś skrypcie, ale może jest coś z kilkoma polami wyboru do zaznaczenia. 3. Jakie jest najlepsze podejście do testowania interakcji za pośrednictwem naszego „serwera API”? To znaczy, załóżmy, że wysłałem żądanie przez SOAP z fałszywymi danymi i nie wystąpiły żadne błędy - jak mogę się upewnić, że dane są w tej zewnętrznej bazie danych i są spójne? To coś w rodzaju czarno-szarej skrzynki i nie wiem, jak sobie z tym poradzić.


title: Google przegląda mikroformaty, mikrodane, RDFa, ojej!

text:
Zajmuję się tworzeniem strony internetowej zawierającej sekcję recenzji. Chcę dołączyć mikroformat Google do informacji o recenzji, aby szczegóły recenzji pojawiały się we fragmencie Google, takim jak: ![Review snippet](http://i.stack.imgur.com/Q8RIa.png) Jednak zgodnie z Na tej stronie Google obsługuje trzy różne formaty danych opinii: „mikroformat”, „mikrodane” i RDFa. Wszystkie wydają się jednak robić dokładnie to samo i nie mam pojęcia, który wybrać... RDFa wygląda ładnie - w tym sensie, że dane są dość oddzielone od rzeczywistej zawartości (co ułatwia mi życie). Z wyjątkiem tego, że opiera się na przestrzeniach nazw XML, które nie będą dobrze współpracować z HTML5 (strona nie jest jeszcze HTML5, ale wyobrażam sobie, że w końcu zostanie przeniesiona). Wydaje się, że „mikroformat hReview” używa specjalnych klas CSS do oznaczania różnych sekcji recenzji, co wydaje mi się złą mieszanką obaw… Więc skłaniam się ku formatowi „mikrodanych”, który wygląda tak: jest bliższy sposobowi wykonywania rzeczy w HTML5 (tj. bez specjalnych przestrzeni nazw). Przykładem tego może być (ze strony, którą zalinkowałem powyżej):

 L'Amourita Pizza Sprawdzone przez Ulysses Grant w dniu <time itemprop="dtreviewed" datetime="2009-01-06">6 stycznia</time>. Pyszna, smaczna pizza w Eastlake! L'Amourita serwuje tradycyjną pizzę w stylu neapolitańskim z pieca opalanego drewnem, podawaną na Twój stół szybko i bez zamieszania. Idealny lokal z pizzą w sąsiedztwie. Ocena: 4,5

 Ale jak powiedziałem, wszystkie formaty są w zasadzie takie same, tylko trochę inne. .. który powinienem wybrać?


title: Oświadczenia o prawach autorskich w kodzie źródłowym

text: Odkąd zacząłem programować, widziałem nagłówek na górze większości plików z kodem wskazujący na jakiś rodzaj praw autorskich: np. /* Copyright (c) 1998 Innotech */ lub /* Copyright (c) 1998-2008 Innotech */ Koncepcyjnie wpadam na ten pomysł... w zależności od twoich życzeń/potrzeb _z grubsza_ tłumaczy się gdzieś pomiędzy: > Hej, sprawdź! Ja to zrobiłem! Jestem niesamowity! > Nie kopiuj/rozpowszechniaj tego! Nasi prawnicy przyjdą po ciebie, jeśli to zrobisz! Z jednej strony uważam, że całość jest nieco zabawna, ponieważ często jest to plik, którego nikt poza wewnętrznymi programistami nigdy nie zobaczy, ale **_przypuszczając_** ta linijka może kiedyś "coś znaczyć" jestem ciekawa o części daty. 1. Czy pojedyncza data oznacza, że autor rości sobie prawa autorskie do pliku od tej daty do wieczności? 2. Jeśli używany jest zakres dat i nie jest on aktualizowany, czy twórca unieważnił swoje prawa autorskie poza zakresem dat? 3. Bez jakiegoś dodatkowego aktu prawnego - czy nagłówek praw autorskich zapewnia jakąkolwiek prawdziwą moc prawną? czy wszyscy po prostu się oszukujemy.


title: Zapytania o produkty komercyjne dotyczące korzystania z bibliotek freeware

text: Zastanawiam się nad stworzeniem jakiegoś produktu komercyjnego (sprzedaż za pieniądze, tylko binaria, bez kodów źródłowych). Czytałem o licencjonowaniu open source, ale po prostu nie mogłem zrozumieć, czy to, co chcę osiągnąć, jest możliwe. Potrzebuję kilku braci, żeby mnie przeprowadzili. Jak wspomniałem, nie mogę się doczekać stworzenia prostego produktu komercyjnego, być może będę chciał użyć json do komunikacji. Widziałem sporo pochlebnych komentarzy dla Jacksona JSON. Czy jest prawnie wskazane, abym korzystał z jego biblioteki, ale nie rozpowszechniał własnego kodu źródłowego? Czy jest jakiś inny warunek, którego muszę przestrzegać, zanim będę mógł sprzedawać swój produkt bez rozpowszechniania własnego kodu źródłowego? W ogóle nie będę modyfikował biblioteki Jacksona, tylko wywołam jej metodę. Zdecydowanie nie mam zamiaru płacić za uzyskanie oddzielnej licencji, która pozwoliłaby mi nie rozpowszechniać mojego kodu źródłowego. Jeśli nie jest to możliwe, jakakolwiek inna biblioteka json, na którą mogę zajrzeć? ps:Mam nadzieję, że nie będzie odpowiedzi kierujących mnie do przeczytania na licencji, tak jak czytałem, ale nie rozumiem porady legalnie.


title: Jak wyglądałby akordowy system płatności za tworzenie oprogramowania?

text: W tworzeniu oprogramowania programista otrzymuje zwykle wynagrodzenie roczne (stałe wynagrodzenie) lub godzinowe. W większości wydaje się, że to działa. Jednak widziałem branże, w których profesjonaliści są opłacani za zadanie. Na przykład w rolnictwie pracownikowi płaci się za buszel. W sprzedaży pracownik najczęściej płaci prowizję. Czy można zapłacić deweloperowi za dostarczony przedmiot? Jak moglibyśmy obliczyć, czym byłby pojedynczy „element” oprogramowania? Czy zachęciłoby to do bardziej efektywnego rozwoju? Czy byłoby to bardziej/mniej sprawiedliwe wobec dewelopera czy pracodawcy? Czy byłoby to podobne/inne niż „środowisko pracy tylko dla wyników”?


title: Jak upewnić się, że zmienna składowa została zainicjowana przed wywołaniem metody klasy?

text: Istnieje klasa ze sparametryzowanym konstruktorem, który inicjuje zmienną składową. Wszystkie publiczne metody klasy następnie używają tej zmiennej składowej, aby coś zrobić. Chcę mieć pewność, że obiekt wywołujący zawsze tworzy obiekt przy użyciu sparametryzowanego konstruktora (istnieje również setter dla tej zmiennej składowej), a następnie wywołuje metody tego obiektu. Zasadniczo wywołujący nie powinien wywołać żadnej metody bez ustawienia wartości zmiennej składowej (albo za pomocą sparametryzowanego konstruktora, albo settera). Oto haczyk — istnieje tylko jedna metoda, która sama generuje wartość do zainicjowania w zmiennej składowej (i zwraca ją) — i aby wywołać tę funkcję, potrzebny byłby domyślny konstruktor. Obecnie wywołujący może po prostu utworzyć obiekt za pomocą domyślnego konstruktora, a następnie wywołać metodę tego obiektu — chcę uniknąć sprawdzania, czy zmienna składowa jest ustawiona w każdej z 20 nieparzystych metod klasy (i rzucać wyjątek, jeśli nie jest) - z wyjątkiem jednej metody, o której mowa powyżej. Chociaż rozwiązanie runtime jest akceptowalne (lepsze niż to, o którym wspomniałem powyżej); preferowane jest rozwiązanie w czasie kompilacji, aby żaden programista nie mógł popełnić tego błędu i tracić godzin na debugowanie go! Aktualizacja: Oto wrażenia artysty dotyczące bieżącej implementacji w kodzie: class MyClass { private: string m_strProperty; void InternalNonStaticMethod(int iSomeParam); public: MojaKlasa(string strValue) { m_strProperty = strValue; } MojaKlasa() {} void setProperty(string strValue) { m_strProperty = strValue; } string MethodOddManOut() { /* Wykonaj kilka obliczeń, aby wygenerować wartość dla właściwości */ string strGeneratedValue(""); Metoda wewnętrzna niestatyczna(4); /* ... */ return strGeneratedValue; // Wartość musi zostać zwrócona, a ta metoda nie może po prostu zaktualizować elementu z powodu problemów projektowych, które wykraczają poza zakres tego pytania } void MethodLikeEveryoneElse() { /* Wykonaj obliczenia na podstawie właściwości */ string strTemp = m_strProperty + "ROZSZERZYĆ"; /* Jeśli strProperty jest puste/śmieci, to zakończy się niepowodzeniem. Próba uniknięcia poniższego fragmentu przy 20 innych podobnych metodach: if (!strProperty.empty()) { strTemp = m_strProperty + "EXTEND"; } else { wyrzuć wyjątek } */ } void MethodLikeEveryoneElse2() { /* Podobny do powyższej metody */ } } Wywołujący byłby funkcją w innej klasie używającej jej w następujący sposób: void MethodThatUsesThis() { MyClass objA; m_strHandle = objA.MethodOddManOut(); // Zapisz uchwyt jako element tego obiektu /* Kilka innych wierszy kodu */ objA.setProperty(strHandle); objA.MethodLikeEveryoneElse(); } void AnotherMethodThatUsesThisLater(string strHandle) { MojaKlasa objA(strHandle); // Uchwyt otrzymany przez powyższą metodę został przekazany do tej metody, ponieważ znajdują się one w różnych klasach objA.MethodLikeEveryoneElse2(); } Ten fragment kodu z pewnością wzbudzi mnóstwo oskarżeń dotyczących straszliwego projektu, który jest wdrażany - ale moją jedyną obroną jest to, że jest to kod przestarzały (ha! Widzieliście, że to nadchodzi) i mam prawo tylko zmienić cokolwiek w klasie A (jest to bardziej moduł API i biblioteka), ale osoba wywołująca nie znajduje się w mojej jurysdykcji.


title: Jak balansujesz między „zrób to dobrze” a „zrób to jak najszybciej” w codziennej pracy?

text: Od czasu do czasu zastanawiam się nad tym pytaniem. Chcę robić rzeczy we właściwy sposób: pisać czysty, zrozumiały i poprawny kod, który jest łatwy w utrzymaniu. Jednak to, co w końcu robię, to pisanie łatki po łacie; tylko dlatego, że nie ma czasu, klienci czekają, błąd powinien zostać naprawiony z dnia na dzień, firma traci pieniądze na tym problemie, menedżer mocno naciska itp. itd. Doskonale wiem, że na dłuższą metę marnuję więcej czas na tych łatach, ale ponieważ ten czas obejmuje miesiące pracy, nikogo to nie obchodzi. Poza tym, jak mawiał jeden z moich menedżerów: „nie wiemy, czy będzie to długa perspektywa, jeśli nie naprawimy tego teraz”. Jestem pewien, że nie jestem jedynym uwięzionym w tych niekończących się cyklach wyboru realnego/idealnego. Więc jak wy, moi koledzy programiści, radzicie sobie z tym? AKTUALIZACJA: Dziękuję wszystkim za tę interesującą dyskusję. To smutne, że tak wiele osób musi codziennie wybierać między ilością a jakością swojego kodu. Mimo to, zaskakująco wielu, ludzie sądzą, że można wygrać tę bitwę, więc ja też wchodzę w okopy.


title: Czy kunszt się opłaca?

text: > **Możliwe duplikaty:** > Prototypowanie a czysty kod na wczesnych etapach > Szczerze mówiąc, czy wolisz kodowanie kowbojskie? Po pracy w wielu firmach zaczynam zdawać sobie sprawę, że moje zaangażowanie w pisanie wysokiej jakości, dobrze przetestowanego oprogramowania, niekoniecznie prowadzi do awansu zawodowego, zwłaszcza gdy menedżerowie z nietechnicznym wykształceniem nie widzą korzyści płynących z utrzymania kodu, i wolą deweloperów, którzy mają pozory wysokiej produktywności, a jednocześnie gromadzą góry długu technicznego. To powiedziawszy, mam tendencję do trzymania się dobrze napisanego kodu, ponieważ uważam, że jest to wewnętrznie satysfakcjonujące – to uczucie, które pojawia się, gdy wiesz, że dobrze wykonałeś pracę, nawet jeśli wiesz, że nie zostaniesz za to uznany. Po części mogę wypełnić lukę w produktywności, stosując różne technologie i podejścia, jednocześnie pisząc czysty kod - rozwiązania obejmują języki dynamiczne, programowanie wielojęzyczne i konwencję nad konfiguracją. Pozostaje jednak dylemat – czy rzemiosło się opłaca?


title: Dobry projekt: Ile hackyness jest dopuszczalne?

text: > **Możliwe duplikaty:** > Prototypowanie a czysty kod na wczesnych etapach Przede mną staje trudna decyzja. Mam problem w mojej bazie kodu (jest w C++), który mógłbym rozwiązać na dwa sposoby: * A) Dodaj jedną linię kodu * B) Przepisz ~7500 linii kodu, dodając około 1000 dla dodatkowej klasy centrali komunikacyjnej Teraz, w tym momencie każda rozsądna osoba prawdopodobnie powiedziałaby mi, żebym wybrał A, **ale** : Rozwiązanie A byłoby **hacky**. W moim przypadku mam na myśli to, że: * Wymagałoby to dodania sprzężenia między dwiema klasami, które normalnie nie powinny się o sobie znać i nie powinny wchodzić w interakcje z wyjątkiem zewnętrznej klasy menedżera * Mniejsza elastyczność * Spowoduje, że przyszłe klasy w ta sama liga, żeby mieć ten sam problem, tym samym tworząc więcej hacky, jeśli rozwiązanie nie zostanie zmienione **przepraszam za brak konkretnych informacji, ale wyjaśnienie mojej sytuacji prawdopodobnie zajęłoby 1,5 strony A4 papieru - i decyzja jest naprawdę ogólne.** Więc, jak myślisz: * Czy powinienem wybrać rozwiązanie A czy B? * Jak bardzo zwariowane są rzeczy w projekcie, w którym czysty i logiczny kod odgrywa wielką rolę? * Czy istnieją jakieś ogólne wytyczne dotyczące unikania zjawiska „hacky code”?


title: Czy czasami rozsądne jest pójście na łatwiznę i oczekiwanie na przepisanie oprogramowania za kilka lat?

text: Pracuję dla organizacji z jednym deweloperem (ja) i jednym DBA. Kiedy zaczynałem, poprzedni programista tworzył aplikacje, które miały złe praktyki architektoniczne i po kilku latach dodawanie funkcji, naprawianie błędów, jak to zwykle bywa, stawało się coraz bardziej czasochłonne. Wszedłem i zacząłem od nowa pisać kilka aplikacji. Teraz, gdy jestem jedynym programistą, sporo czasu zajmuje mi trzymanie się TDD, robienie dobrego UX, dobrych zasad architektonicznych, tworzenie wspólnych bibliotek dla logiki biznesowej, jak to jest używane przez wiele aplikacji itp. Zastanawiam się, czy w takim środowisku bardziej realne byłoby pójście na skróty i wypuszczenie aplikacji internetowych (nie jestem pewien co do aplikacji desktopowych) z zamiarem przepisywania ich co 2-3 lata. Mam na myśli cięcie rogów w sprawach takich jak testy jednostkowe i architektura. Spodziewałbym się, że takie aplikacje będą trudne do utrzymania w dłuższej perspektywie i byłoby to w porządku, ponieważ po prostu przepisaliśmy od zera i kopiowaliśmy i wklejaliśmy każdą logikę biznesową, którą potrzebowaliśmy do kontynuowania - o ile wymagania, dokumentacji, a modelowanie danych jest solidne. Czy ktoś widzi w tym jakieś pułapki? Myślę, że na dłuższą metę nie byłoby to dobre dla mojej kariery, ale z perspektywy organizacyjnej myślę, że ma to sens. Płace są dość niskie, ponieważ są ograniczone budżetem (praca rządowa) i myślę, że deweloper nie wytrzymałby dłużej niż 2 lata. Naprawdę byłbym wdzięczny za wszelkie spostrzeżenia.


title: Po co pisać czysty, zrefaktoryzowany kod?

text: To pytanie zadaję sobie od dawna. Myśl o wyrzuceniu go do ciebie. Z mojego doświadczenia w pracy nad kilkoma projektami opartymi na Javie widziałem mnóstwo kodów, które nazywamy „brudnymi”. Niekonwencjonalne nazewnictwo klas/metod/pól, zły sposób obsługi wyjątków, niepotrzebnie ciężkie pętle i rekursja itp. Ale kod daje zamierzone rezultaty. Chociaż nie znoszę widzieć brudnego kodu, czyszczenie go zajmuje trochę czasu i w końcu pojawia się pytanie „czy to jest warte? Daje pożądane rezultaty, więc jaki jest sens czyszczenia?” Czy w projektach zespołowych powinien być ktoś specjalnie do refaktoryzacji i sprawdzania czystego kodu? A może zdarzają się sytuacje, w których „brudne” kody nie przynoszą zamierzonych rezultatów lub powodują niezadowolenie klientów? Zachęcamy do komentowania i odpowiadania. I powiedz mi, czy czegoś tu brakuje. EDIT: **Podkreślam - to, co rozumiem przez DLACZEGO nie jest technicznymi przyczynami, pytam o motyw.** Wszyscy wiemy, dlaczego powinniśmy pisać czysty kod z technicznego punktu widzenia. Ale wyobraź sobie, że na studiach, jeśli piszę zły kod, dostaję złe oceny (patrz komentarz @TofuBeer). Co zatem motywuje Ciebie i Twój zespół do pisania czystego kodu w Twoim środowisku przemysłowym? I co zniechęca Ciebie i Twój zespół do pisania złego kodu. Tak łatwo jest napisać metodę w klasie, aby uzyskać potrzebne informacje bez rozglądania się i sprawdzania, czy istnieje podobna metoda! wynik - 5000 + wierszy kodu z kilkoma metodami wykonującymi prawie podobne zadania. :-( Możesz dodawać komentarze, jeśli widziałeś lub pracowałeś z tym samym kodem.


title: Deweloper uważa, że nie musi postępować zgodnie ze standardowym procesem rozwoju

text: Jak radzisz sobie ze starszym programistą, który nie uważa, że stosuje się do nich standardowy firmowy sposób tworzenia oprogramowania? Na przykład: 1. Poprosi innych programistów o wykonanie pracy przez e-mail, zamiast przypisywać im błędy. 2. Zachowa kopie dokumentacji i kodu we własnym obszarze lokalnym, zamiast trzymać je we wspólnym obszarze pod kontrolą źródła. (i nadpisz inne zmiany swoimi) UWAGA: Zostało to już zgłoszone osobom odpowiedzialnym za kontrolę jakości.


title: Czy programowanie kowbojskie to podejście seniorów?

text: > **Możliwy duplikat:** > Szczerze mówiąc, wolisz kodowanie kowbojskie? Przez programowanie kowbojskie rozumiem programistę, który po prostu wpisuje kod bardzo szybko, bez półformalnego procesu. Mam programistę, który szybko koduje, odrzucając kontrolę wersji, dokumentację, wzorce, testy i metodologie. Rozmawialiśmy o tym, a ona mówi mi, że wszystkie podejścia, takie jak zwinne, są zbyt akademickie i całkowicie je lekceważą. Bardzo niechętnie wierzę, że jest to konsensus wśród starszych programistów. Kiedyś przynosiłem próbki znanych facetów, takich jak Kent Beck i Alan Kay, ale ona mówi mi, że to tylko autorzy próbujący sprzedawać książki lub profesorowie bez prawdziwego doświadczenia. Tak, na początku jest szybki, ale czas zaoszczędzony dzięki podejściu kowboja jest opłacany na debugowaniu. Nie zamierzam zmieniać jej zdania, ale jeśli to są złe praktyki, to nie chcę ich przyjmować. Widzisz, jako młodszy poziom trudno jest odfiltrować dobre i złe praktyki, ponieważ twoja wiedza opiera się głównie na książkach lub na osobach z większym doświadczeniem niż ty, a oni również mogą się mylić. Więc dla starszych programistów, czy jest to powszechne podejście w twojej lidze?