title: Jakie są przykłady „wartness”, które sprawiają, że język programowania jest bardziej użyteczny?

text: Od przyjętej odpowiedzi do „Dlaczego Lisp jest przydatny?”: > 5\. Wojowniczość. W prawdziwym świecie panuje bałagan. Pragmatyczne kodowanie sprowadza się do > albo używania, albo wymyślania nieuporządkowanych konstrukcji. Common Lisp ma na tyle wartiness > że może załatwić sprawy. Ta myśl też przyszła mi do głowy. Obecnie pracuję nad aplikacją, której backend wybrałem napisać w Haskell, a frontend jest w PHP. Z mojego doświadczenia wynika, że radzenie sobie z niechlujnym kodem w PHP jest _znacznie_ łatwiejsze niż radzenie sobie z niechlujnym kodem w Haskell. Jednak jest to mój własny kod, a mój kod PHP prawdopodobnie nie jest taki zły. Prostym przykładem "wartiness" jest operator PHP `==` (równość). Wiesz, typ równości, gdzie `'' == 0` jest prawdziwy. Ponieważ obawiam się `==`, często wybieram zamiast tego operator PHP `===` (ścisła równość): $is_admin = ($gid === 24 || $gid === 25); Powyższe użycie okazało się jednak błędne. Wartość `$gid` pochodzi z bazy danych i nadal jest ciągiem. Tym razem ugryzł mnie operator ścisłej równości i zaoszczędziłbym sobie kilka minut, mówiąc po prostu: $is_admin = ($gid == 24 || $gid == 25); Rozważ inną interesującą tożsamość: php> var_dump('0012345' == '12345'); bool(prawda) Co do cholery?! `==` na dwóch ciągach nie jest nawet porównaniem ciągów! Zastanów się jednak, czy użytkownik otrzymuje dowód tożsamości z napisem „0012345”, ale identyfikator bazy danych to po prostu „12345”. Użytkownicy mogą mieć problemy z zalogowaniem się do Twojej aplikacji, jeśli wybierzesz opcję `===`. Jasne, otrzymasz raport o błędzie i będziesz mógł poprawić swoją aplikację, zamiast polegać na tej niejasnej funkcji. Ale zajmie to więcej czasu. Wolałbym spędzić ten czas na zewnątrz. To naprawdę miły dzień. Dla kontrastu, oto przykład wartiness, który jest _nie_ pomocny w większości przypadków: js> parseInt(031); 25 Jakie są bardziej konkretne przykłady, w których „brodawstwo” pomaga Ci załatwić sprawy? Proszę wyjaśnić dlaczego; nie tylko wymieniaj funkcje, których nie ma Haskell. Inaczej mówiąc: o jakich cechach języka brodawkowatego należy być świadomym i jak możemy ich użyć, aby zaoszczędzić czas?


title: Kiedy (a kiedy nie) korzystać z Wordpressa?

text: Dla uproszczenia, moje pytanie koncentruje się konkretnie na Wordpressie, zamiast skupiać się na wszystkich systemach zarządzania treścią, w tym Joomla, Drupal, Concrete5 lub you-name-it. Wordpress staje się coraz bardziej popularny. Możesz rozszerzyć jego zestaw funkcji o powszechnie dostępne wtyczki lub po prostu zaprojektować własne wtyczki, jeśli znasz się trochę na programowaniu. Pojawia się coraz więcej „dużych” (czytaj dobrze znanych, znanych lub wiarygodnych) stron internetowych, które są budowane przy użyciu Wordpressa. Aby zobaczyć kilka przykładów, spójrz na ten link. Abraham Maslow powiedział kiedyś: „To kuszące, jeśli jedynym narzędziem, jakie masz, jest młotek, traktować wszystko jak gwóźdź”. Widzę tę tendencję w społeczności programistów Wordpress i chociaż cenię ich wiedzę i porady na temat tego, co można zrobić za pomocą Wordpress, obawiam się, że pytanie o „kiedy używać Wordpressa” spotka się tylko z pustką. spojrzenie, które mówi „czy jest czas, w którym nie używałbyś Wordpressa?” Fakt ten jest bardzo widoczny, gdy wyszukujesz w google "kiedy używać wordpress". Sytuacja nieco się poprawia, jeśli wyszukujesz „kiedy nie używać wordpress”. Więc moje pytanie brzmi: w tym roku 2011, jakie kryteria powinny najlepiej pomóc programiście stron internetowych w określeniu, czy użyć Wordpressa w danym projekcie? **Edit1:** Po kilku dalszych poszukiwaniach znalazłem ten doskonały post na ten temat: http://wordpress.stackexchange.com/questions/10594/kiedy-nie-polecamy-klienta-użyj-wordpress


title: Mieszanie jQuery z JavaScript

text: Właśnie zadałem to pytanie na SO o pewnych błędach, których doświadczam w jQuery i IE8, i ktoś skomentował, że był zbulwersowany, że zmieszam JavaScript z jQuery (od tego czasu z jakiegoś powodu usunął swój komentarz). Ta osoba miała wysoką reputację w stosunku do mojej (3000+), więc nie chcę ignorować jego krytyki. Nadal jestem stosunkowo nowy w tworzeniu stron internetowych i głównie pracuję sam, więc nie zdawałem sobie sprawy, że może to stanowić problem. Dlaczego należy unikać ich mieszania?


title: svn - kiedy zobaczę konflikty?

text: Właśnie zaczynam nową pozycję i używam **svn** zamiast **git** (mój ulubiony). W przypadku **svn** jeśli wystąpią jakiekolwiek konflikty, czy zobaczę je po aktualizacji svn lub po (próbie) zatwierdzenia svn? Innymi słowy, czy **aktualizacja svn** połączy zdalne zmiany z moją bieżącą (niezatwierdzoną) kopią roboczą? Chcę mieć pewność, że nie zepsuje się przed moim pierwszym **zatwierdzeniem svn**, jeśli coś nie jest dobre, ponieważ jestem nowy w tym systemie! :) Oczywiście zrobiłem też ręczną kopię mojego nowego kodu na wypadek problemów :) fyi, jestem na Ubuntu 11.10


title: Jak mogę się upewnić, że metoda jest wywoływana tylko raz podczas korzystania z interfejsu API?

text: Ogólnie rzecz biorąc, jeśli używam interfejsu API, którego metody mają skutki uboczne, które chcę wystąpić tylko raz, w jaki sposób mogę zagwarantować, że moja własna aplikacja wywoła je tylko raz, nawet jeśli wystąpi błąd, zanim będzie mogła zarejestrować odpowiedź? Na przykład, jeśli raz w miesiącu wywołuję interfejs API przetwarzania płatności w ramach usługi subskrypcji, w jaki sposób mogę się upewnić, że nie naliczę podwójnego rachunku, jeśli utworzę nową transakcję, a w aplikacji wystąpi błąd krytyczny, zanim otrzymam odpowiedź od że? Wydaje się, że rozwiązaniem byłaby współpraca z API: t = Transaction.new(user, price, etc); if(t.persistToLocalDatabase()){ t.beginRemoteProcessing(); } Czy istnieje sposób na rozwiązanie tego problemu w przypadku, gdy nie mam kontroli nad API i zaczyna ono przetwarzanie w momencie tworzenia transakcji?


title: Czy to dobry projekt w C++?

text: Czy dobrym pomysłem jest zastąpienie funkcji pobierających i ustawiających jedną funkcją zwracającą referencję? Na przykład zamiast tego, class Person { std::string name; public: std::string GetName() { return this->name; } void UstawNazwa(std::string& toSet) { this->name = toSet; } }; Czy to dobry pomysł, class Person { std::string name; public: std::string& Name() { return this->name; } }; ... ... Osoba s; p.Nazwisko() = "Jan"; // Pisać. std::string local = p.Name(); // Czytać. Czy drugi kod ma jakiś problem? Ale w C# metody zwracają obiekt przez odwołanie. Na przykład class Person { string name; public Person(string _name) { this.name = _name; } ciąg publiczny GetName() { return this.name; } public void SetName(string _name) { this.name = _name; } }; klasa Firma { Osoba kierownik; firma publiczna() { this.manager = new Person("Pan K"); } // Obiekt Person jest zwracany przez odwołanie. // Jest to odpowiednik "Osoba& GetManager()" w C++. public Person GetManager() { return this.manager; } }; ... ... Firma comp = nowa Firma(); // Odpowiednik, // Osoba& p = comp.GetManager(); Osoba p = comp.GetManager(); // p jest referencją do comp.manager p.SetName("Pan L"); // Ta instrukcja zmienia comp.manager.name Console.WriteLine(comp.GetManager().GetName()); // Wyświetla "Pan L" W powyższym kodzie, `comp.manager.name` nie zmieniłoby się, gdyby metoda `GetManager()` zwróciła `Person` według wartości. Tak więc ten kod nie jest zależny od optymalizacji wartości zwracanej. Czy ten kod nie jest pogwałceniem enkapsulacji?


title: Jak sprawdzić swoją wiedzę?

text: Jestem w ostatniej klasie liceum planującego studia na kierunku informatyka na studiach. Programuję od kilku lat. Jednak nie mam pojęcia, jak wypadam na tle profesjonalistów. W jaki sposób mógłbym zmierzyć swoje umiejętności w określonych językach? Obecnie używam Java, C#, Ruby i C.


title: Tworzenie połączeń z bazą danych - Czy to raz, czy dla każdego zapytania?

text: W tej chwili tworzę połączenie z bazą danych, kiedy moja strona internetowa jest po raz pierwszy ładowana. Następnie przetwarzam stronę i uruchamiam wszelkie zapytania dotyczące tego połączenia. Czy jest to najlepszy sposób, czy powinienem tworzyć połączenie z bazą danych za każdym razem, gdy uruchamiam zapytanie? p.s Bardziej sensowne jest dla mnie utworzenie 1 połączenia i korzystanie z niego, ale nie wiem, czy może to spowodować jakiekolwiek inne problemy. Używam C# (ASP.NET) z MSSQL.


title: Utrzymywanie połączenia z bazą danych

text: Załóżmy, że tworzysz aplikację komputerową, która intensywnie korzysta z bazy danych, czy powinieneś mieć jeden uchwyt do bazy danych, do którego odwołuje się cała aplikacja? Lub należy otworzyć połączenie, gdy potrzebujesz danych, pobrać dane, a następnie zamknąć połączenie, gdy dane nie są potrzebne.


title: Docenienie praktykantów zasad SOLID

text: Doświadczeni programiści zazwyczaj doceniają zasady SOLID (lub inne) - dlaczego je mamy, w jaki sposób pomagają, sposoby ich przestrzegania itp. Może to być wynikiem pisania słabego kodu w przeszłości, a następnie pisania dobrego kodu (gdzie dobre jest przestrzeganie zasad SOLID) i widziałem ogromną różnicę, jaką to robi, lub w inny sposób miał czas i doświadczenie, aby zobaczyć ich wartość. **Jak możemy zacząć doceniać te rzeczy wśród programistów praktykantów?** Obecnie mam w pracy grupę programistów praktykantów prosto z college'u (Wielka Brytania, 18+), bez CS lub prawdziwego doświadczenia w programowaniu . Firma ma dla nich przyzwoity program szkoleniowy, ale wydaje mi się, że brakuje w nim wprowadzenia do pisania wysokiej jakości kodu, który w końcu chcielibyśmy, aby tworzyli. Moje obecne podejście do nauczania ich o tych rzeczach polega na zaznaczaniu tego w przeglądach kodu, kiedy to widzę. Na przykład, gdy widzę klasę (lub funkcję), która ma więcej niż jedną odpowiedzialność, staram się wyjaśnić zasadę pojedynczej odpowiedzialności (dlaczego ją mamy, jak to pomaga), pokazać im, gdzie jest wiele odpowiedzialności w ich kodzie połóż się, a następnie porozmawiaj z nimi o tym, jak mogą to oddzielić. Jednak takie podejście nie wydaje się trzymać. Nadal widzę wiele wystąpień dokładnie tego samego, co oznaczyłem w przeglądzie kodu. **Czy istnieją lepsze sposoby wyjaśniania i doceniania zasad SOLID? A może jest to po prostu coś, co przychodzi z czasem i doświadczeniem?**


title: Rozdzielacz ruchu na jednym serwerze dla ponad 50 krps

text: Buduję „splitter” dla ruchu sieciowego: serwer sieciowy, który otrzyma żądanie HTTP, przekaże je do dwóch serwerów zaplecza, wybierze najlepszą odpowiedź (dla której musi przeanalizować je wszystkie) i zwróci go do pierwotnego żądającego . (Dla wyjaśnienia: nie jest to serwer proxy z kilkoma backendami; każde żądanie jest przekazywane do wszystkich backendów, a następnie zwracana jest tylko jedna odpowiedź.) Będzie musiał obsłużyć co najmniej 50 tysięcy żądań na sekundę (lub 50+ krps) na jeden serwer. Razem z kolegą zbudowaliśmy kilka wersji rozdzielacza. Oto wyniki: * Node.js (biblioteka `http`): osiąga 6,9 tys. żądań na sekundę (6,9 krps). * Go (biblioteka `net/http`): do 12 krps. * Erlang (biblioteki `misultin` i `lhttpc`): do 7,3 krps. * Clojure (zestaw http): 13 krps. Żaden z nich nie jest nawet zbliżony do wymagań. Według m.in. pojedyncze zapytanie Web Framework Benchmarks firmy TechEmpower, które może być mniej więcej równoważne z rozdzielaczem, jest miejsce na ulepszenia. Najważniejsze pytanie brzmi, co powinniśmy spróbować dalej? **Szczegóły techniczne:** serwer powinien obsługiwać co najmniej 50 krps na pojedynczym serwerze, na standardowym sprzęcie. Żądania są wiadomościami POST z treściami zakodowanymi w formacie JSON o wielkości około 1–3 KB, a odpowiedzi mają podobny rozmiar. Każde żądanie nie musi być analizowane, ale można je przekazać bez zmian; w odpowiedzi należy przeanalizować co najmniej jedno określone pole JSON. Każde żądanie ma bardzo ścisły limit czasu, który wynosi od 80 do 450 ms, w zależności od adresu URL; jeśli jakiś backend trwa dłużej, serwer powinien o tym zapomnieć i wykorzystać pozostały backend. Jeśli na czas nie zostaną odebrane żadne prawidłowe odpowiedzi, serwer odpowie komunikatem 204 No content. **Szczegóły testowania:** Dla uproszczenia załóżmy, że wszystkie żądania pochodzą z serwera HAProxy znajdującego się przed nim, więc odpowiedni jest tester obciążenia Apache `ab` lub `wrk`. Będzie działał na Amazon EC2, więc powinien efektywnie wykorzystywać wiele rdzeni. Dla odniesienia powiedzmy, że jest to instancja c3.2xlarge. Oba serwery zaplecza powinny znajdować się na innej maszynie niż rozdzielacz (ewentualnie na dwóch oddzielnych serwerach, jeśli to konieczne), a tester obciążenia powinien znajdować się również na innej maszynie. Ważne jest, aby upewnić się, że ani tester obciążenia, ani backendy nie są tutaj wąskimi gardłami, co jest tak proste, jak bezpośrednie testowanie obciążenia jednego z backendów i sprawdzenie, czy daje znacznie lepsze wyniki niż splitter. Wyniki testu `wrk` serwerów zwracających stały ciąg: * Node.js (biblioteka `http`): 43 krps. * Przejdź (biblioteka `net/http`): 73 krps. * Erlang (biblioteki `misultin` i `lhttpc`): 59 krps. * Clojure (`http-kit`): Nie mam numeru, ale > 20 krps. Kilka dni temu zadałem pytanie o usługę podobną do splittera w Go, a odpowiedź tam pozwoliła mi osiągnąć 6 krps. Dalsze optymalizacje zwiększyły tę liczbę do około 12 tys., chociaż nie jestem pewien, czy wyniki utrzymają się w ogólnym przypadku. Na przykład: zwracałem stałą odpowiedź i nie analizowałem odpowiedzi JSON. Nie jestem do końca pewien, czy nasze wyniki są rozsądne, czy też powinniśmy uzyskiwać znacznie lepsze wyniki z wypróbowanymi przez nas frameworkami. Według Web Framework Benchmarks, C++ (ze stronami serwera C++ opartymi na CPoll) i Java (wiele frameworków) są królami gry, jeśli chodzi o rps; ale biorąc pod uwagę wysiłek wymagany do skonfigurowania, zbudowania i przetestowania usług w każdym nowym frameworku, chcemy mieć pewność, że nie wpadniemy tutaj w ślepe zaułki. Powyższy benchmark nie jest tak naprawdę odpowiednikiem naszego problemu; i trudno jest uzyskać liczby rps dla tego rodzaju ruchu proxy. Powinienem wyjaśnić, że _powinno_ być możliwe osiągnięcie celu, ponieważ HAProxy może przekazywać 33 krps z jednym rdzeniem; przy użyciu 8 rdzeni w instancji c3.2xlarge i przy czymkolwiek, co choć trochę przypomina liniowość, powinno być możliwe osiągnięcie 50 krps przy wykonywaniu dwóch przesunięć do przodu przy każdym żądaniu. Pisanie wielordzeniowego serwera WWW w C nie jest jednak w naszych planach, z wyjątkiem ostatniej opcji. To pytanie zostało zinterpretowane jako zbyt szerokie na StackOverflow i tutaj przez chętnych redaktorów. Więc przeformułuję jasne, proste pytanie: Czy zbudowałeś coś podobnego lub przeczytałeś o czymś podobnym, ze szczytowymi wartościami wydajności? (Na przykład serwer proxy dla ruchu HTTP, nawet jeśli przesyłałby każde żądanie tylko do jednego zaplecza.) Proszę szczegółowo opisać, w jakim języku, z jaką biblioteką lub strukturą i ile żądań na sekundę otrzymano z jednego serwera.


title: ASP.NET MVC tworzy wersję roboczą bez utrwalania w bazie danych

text: Mam wymóg, aby umożliwić użytkownikom sugerowanie aktualizacji swoich profili w witrynie, w której pracuję. Będą mogli wyświetlić szczegóły swojego profilu, a następnie kliknąć przycisk „edytuj”, co w zasadzie sporządzi kopię wszystkich swoich danych zawartych w kilku powiązanych tabelach DB. Następnie mogą dodawać lub usuwać elementy i aktualizować różne pola tekstowe przed zapisaniem wersji roboczej. Po zapisaniu administrator musiałby zatwierdzić tę zmianę, zanim nowe dane zostaną faktycznie opublikowane w działającej witrynie. Obecnie mam identyczny zestaw tabel dla danych na żywo i wersji roboczych (i historii, ale to nie jest ważne). Moja trudność polega na tym, że klient nie chce, aby rzeczywisty wpis wersji roboczej został utworzony w strukturze bazy danych wersji roboczych, dopóki użytkownik nie kliknie „zapisz”. Użytkownik mógłby wykonywać operacje CRUD na wszystkich danych, w tym przesyłać nowe obrazy, ale nie wolno mi dotykać bazy danych, chyba że jest gotowy do zatwierdzenia tych aktualizacji. Moim wielkim problemem jest to, że nie mam pojęcia, jak zacząć tworzyć coś, co wydaje się klientowi bardzo proste, mimo że jest to dość trudne technicznie. Nie wydaje mi się również, aby klient zrozumiał, że naciśnięcie przycisku „Anuluj” obok przycisku zapisywania usunęłoby wpis wraz ze wszystkimi powiązanymi danymi z bazy danych, co moim skromnym zdaniem sprawia, że problem jest dyskusyjny. Pytanie jest więc takie: czy jest sposób na sformułowanie mojego sprzeciwu w taki sposób, aby klient zrozumiał, do czego zmierzam. A jeśli to się nie uda, jaki byłby dobry sposób na stworzenie takiego obiektu przechowywanego w sesji?


title: Słowa kluczowe do definiowania konstrukcji w językach programowania

text: Projektuję język koncepcyjnie podobny do Go. Na przykład w Go słowo kluczowe `func` służy do definiowania funkcji: func abs (a int) uint { ... } To samo do definiowania typów. Myślałem jednak o gramatyce, która nie uwzględnia tych słów kluczowych. Na przykład: abs (a int => uint) { ... } Lub dla struktur: Drzewo {size int; wiek int} Co jest nie tak z taką składnią? Czy są jakieś potencjalne problemy, które można napotkać? Na przykład pomyślałem, że gdyby istniała konstrukcja, która używałaby tej samej gramatyki co struktura, taka jak interfejs, byłaby niejasna (czy to jest struktura czy interfejs)?


title: Tworzenie kompilatora w .net

text: Przeczytałem o budowaniu kompilatora kilka pojęć. Należy rozumieć, że 1. Potrzebujesz leksera, który dzieli instrukcje programu na tokeny. 2. Musisz sprawdzić i zidentyfikować tokeny na znane typy. 3. Musisz stworzyć gramatykę i sprawdzić, czy twoje tokeny mieszczą się między definicją gramatyki. 4. Musisz stworzyć drzewo składni AST. Utknąłem na kroku parsera i AST, próbuję stworzyć prosty kompilator języka. Jak mogę utworzyć parser i AST dla prostych instrukcji, takich jak var a = 10 * 20; ...itp.


title: Ciągłe zamieszanie dotyczące iwarów i właściwości w celu C

text: Po prawie 8 miesiącach programowania na ios, znowu jestem zdezorientowany co do właściwego podejścia. Może nie jest to język, ale jakaś zasada OOP, co do której jestem zdezorientowany. Nie wiem... Próbowałem C# kilka lat temu. Były pola (zmienne prywatne, dane prywatne w obiekcie), były pobierające i ustawiające (metody, które ujawniały coś światu) oraz właściwości, które były tą rzeczą eksponowaną. Podobała mi się elegancja rozwiązania, np. mogłaby istnieć klasa, która miałaby właściwość o nazwie `DailyRevenue`...float...ale nie było zmiennej prywatnej `dailyRevenue`, było tylko pole - an tablica przychodów z pojedynczej transakcji... a getter dla właściwości `DailyRevenue` obliczył przychody w przejrzysty sposób. Gdyby w jakiś sposób zmieniły się wewnętrzne obliczanie dziennych przychodów, nie wpłynęłoby to na kogoś, kto w jakikolwiek sposób konsumował moją własność `DailyRevenue`, ponieważ byłby chroniony przed implementacją gettera. Zrozumiałem, że czasami istnieje, a czasami nie ma relacji 1:1 między polami a właściwościami. W zależności od wymagań. Moim zdaniem wydawało się to w porządku. A te właściwości są TYM sposobem na dostęp do danych w obiekcie. Znam różnicę między słowem kluczowym prywatnym, chronionym i publicznym. Przejdźmy teraz do celu C. Na jakim czynniku powinienem oprzeć swoją decyzję o uczynieniu czegoś tylko ivarem lub uczynieniem tego jako własnością? Czy model mentalny jest taki sam, jak opisałem powyżej? Wiem, że ivary są domyślnie "chronione", a nie "prywatne" jak w C#.. Ale myślę, że to jest ok, nic wielkiego na moim obecnym poziomie zrozumienia całego rozwoju iOS. Chodzi o to, że ivary nie są dostępne z zewnątrz (biorąc pod uwagę, że nie upubliczniam ich… ale nie zrobię tego). Rzeczą, która zaciemnia moje jasne zrozumienie, jest to, że mogę mieć `IBOutlets` od ivarów. **Dlaczego widzę wewnętrzne dane obiektu w interfejsie użytkownika?** * _Dlaczego jest ok?_ * Z drugiej strony, jeśli zrobię `IBOutlet` z właściwości i nie zrobię go tylko do odczytu, każdy może to zmienić . **Czy to też jest ok?** Powiedzmy, że mam obiekt `ParseManager`. Ten obiekt używałby wbudowanej klasy frameworku `Foundation` o nazwie `NSXMLParser`. Oczywiście mój `ParseManager` będzie wykorzystywał możliwości tego `NSXMLParser`, ale wykona również dodatkową pracę. Teraz moje pytanie brzmi: **kto powinien zainicjować ten obiekt `NSXMLParser` iw jaki sposób** powinienem zrobić odwołanie do niego z obiektu `ParseManager`, gdy zachodzi potrzeba parsowania czegoś. **A) `ParseManager`** - **1)** w domyślnej metodzie init (możliwe tutaj ivar - lub - ivar+ppty) - **2)** z lazyloading w getter (wymagany tutaj ppty) **B) Jakiś inny obiekt** \- który przekaże referencję do obiektu `NSXMLParser` do obiektu `ParseManager`. - **1)** w jakimś niestandardowym inicjatorze (`initWithParser:(NSXMLPArser *)parser`) podczas tworzenia obiektu `ParseManager`.. A1 - problem polega na tym, że tworzymy parser i marnujemy pamięć, gdy nie jest jeszcze potrzebna . Możemy być jednak pewni, że wszystkie metody będące częścią obiektu `ParserManager` mogą bezpiecznie używać ivar, ponieważ istnieje. A2 - problem polega na tym, że `NSXMLParser` jest wystawiony na działanie świata zewnętrznego, chociaż może być tylko do odczytu. Czy chcielibyśmy, aby parser został ujawniony w jakimś scenariuszu? B1 - może to być przydatne, gdy chcielibyśmy użyć więcej typów parserów.. Nie wiem... Rozumiem, że wymagania architektoniczne i język to nie to samo. Ale wyraźnie te dwa są ze sobą powiązane. Jak wyjść z tego bałaganu? Proszę o wyrozumiałość, nie byłem w stanie wymyślić ani jednego ostatecznego pytania. Po drugie, lepiej nie straszyć mnie jakąś super zaawansowaną nowomową, która mówi o zwariowanych elementach wewnętrznych (co robi kompilator) i przypadkach brzegowych.


title: Jakie są najlepsze praktyki przy częstym przełączaniu się między projektami/powracaniu do projektów?

text: Charakter mojej pracy polega na tym, że co kilka tygodni muszę przełączać się między projektami. Uważam, że jedną z największych przeszkód w mojej produktywności jest czas potrzebny do odzyskania wszystkich istotnych fragmentów kodu „z powrotem w mojej głowie” po tym, jak nie widziałem go przez pewien czas. Dzieje się to w mniejszym i większym stopniu w przypadku krótszych przerw / dłuższych przerw. Oczywiście pomaga w tym dobry projekt, dokumentacja, komentowanie i fizyczna struktura (nie wspominając o jak najrzadszym przełączaniu się między projektami). Ale zastanawiam się, czy są jakieś praktyki/narzędzia, których może mi brakować. Jakie są twoje konkretne praktyki dotyczące poprawy tego?


title: Powiadom klienta o zmianach w bazie danych w java

text: Szukałem odpowiedzi na to pytanie, ale nie udało mi się znaleźć rozwiązania. Pracuję w rozproszonym systemie klient-serwer, który używa protokołu TCP. Funkcją programu jest przesyłanie pieniędzy z serwera, ale także między klientami, coś w rodzaju MobilePay. Gdy jeden klient chce przelać pieniądze innemu klientowi, ten klient będzie musiał zaakceptować przelew, zanim się powiedzie (jedno z wymagań systemowych). Tak więc mój problem polega na tym, że chciałbym, aby klient był powiadamiany (najlepiej przez okno dialogowe wiadomości), gdy przelew jest gotowy do przyjęcia. Wszystkie wpłaty/przelewy przechowywane są w tabeli SQL. Chciałbym, aby klient był powiadamiany o oczekującej płatności/przelewie na jego nazwisko, czyli o dodaniu nowego wiersza (z nazwą klienta jako odbiorcą) w tabeli przelewów, zamiast klienta aby aktywnie sprawdzać, czy są jakieś oczekujące płatności (tak jak jest teraz) Czy ktoś może mi pomóc, jak obejść ten problem Z góry dziękuję Pozdrawiam


title: Czy to zła praktyka podczas rozmów kwalifikacyjnych, gdy kandydaci napiszą implementację listy połączonej?

text: Czytając tę stronę i SO, widziałem wiele historii pytań i odpowiedzi na rozmowę kwalifikacyjną, mówiących, że kandydat musiał wdrożyć listę z linkami od zera. Zwykle jest to ćwiczenie typu „gimme” dla kandydatów na stanowiska programistyczne, takie jak pisanie FizzBuzz. Chodzi o to, że jeśli kandydat nie może tego zrobić, nie może programować i powinien zostać odrzucony niemal natychmiast. Jednak nie mogę pomóc, ale myślę, że może to być kiepska praktyka z następujących powodów: * Nowoczesne języki wyższego poziomu, takie jak C# i Python, natywnie intensywnie używają list; napisanie własnego obiektu listy połączonej byłoby wymagane tylko w nietypowych okolicznościach, a nawet wtedy prawdopodobnie byłoby nierozważne. * Języki niższego poziomu, takie jak C++, mają standardowe biblioteki z kontenerami i obiektami iteratorów/list. * W świetle pierwszych dwóch punktów programiści mogą przez lata nie myśleć nawet o samodzielnej implementacji listy (połączonej, podwójnie połączonej itp.). Niektórzy mogą nawet nie widzieć takich rzeczy od czasów studiów. * Moc obliczeniowa również nie jest czynnikiem, który był rok temu, więc wydajność za pomocą wskaźników nie jest już problemem, który był kiedyś (ogólnie). * Proste wyszukiwanie w sieci czegoś takiego jak „przykład listy linków” przyniosłoby wiele przykładów kodu, które można po prostu zapamiętać i wypluć, nie wskazując tak naprawdę prawdziwych kompetencji kandydata. Powinienem powiedzieć, że używanie połączonej listy prowadzącej do **otwartych** pytań/dyskusji dotyczących rozwiązywania problemów/umiejętności krytycznego myślenia kandydatów jest najprawdopodobniej naprawdę dobrą praktyką podczas rozmów kwalifikacyjnych. Każdy sposób, w jaki osoba przeprowadzająca rozmowę kwalifikacyjną może naprawdę zobaczyć, jaki jest kandydat i jak uważa, że jest to bardzo korzystne. Myślę, że to binarne podejście „brak kodu listy połączonej, brak pracy” dla programistów pracujących na pulpicie lub aplikacji internetowej jest nieco przestarzałe. Może to być również bardzo szkodliwe; kandydat, który nie pamięta, jak prawidłowo pracować z szefem listy, może być znakomitym koderem i współpracownikiem i zagubić się w tej mieszaninie. Myśli? **EDYTUJ** : Istnieje wiele (dobrych) komentarzy sugerujących, że to, czy jest to dobre, czy złe pytanie, zależy od kontekstu pracy. Zdecydowanie się zgadzam, więc pozwól, że przeformułuję to pytanie: Implementacja połączonej listy jest częstym pytaniem podczas rozmowy kwalifikacyjnej w przypadku wielu zadań związanych z kodowaniem, podobnie jak pytania takie jak FizzBuzz lub pisanie funkcji rekurencyjnej do obliczania silni. Czy to pytanie ma wystarczającą użyteczność, aby być powszechnie używane do oceny kandydatów do programowania na całym świecie? A może powinno być uważane za złe pytanie, z wyjątkiem pozycji „Starszy programista, zespół wbudowanych list linkowanych”?


title: Jak się zabrać poruszyć temat złych praktyk programistycznych z kolegą

text: > **Możliwy duplikat:** > Jak mam zwrócić się do współpracownika o jakość jego kodu? Mój kolega programista tworzy wiele bloków kodu, które trochę się martwię, nie ułatwiając czytania i potencjalnych problemów w przyszłości. Próbowałem dawać małe wskazówki po drodze, nie mówiąc otwarcie, co myślę, ale jego technika wydaje się nigdy nie zmieniać. Normalnie bym się nie martwił, jednak nigdy nie zidentyfikowaliśmy żadnych konkretnych standardów programowania na początku naszego projektu i teraz naprawdę zaczyna to trochę na mnie wpływać, ponieważ muszę przejrzeć jego kod i spróbować go debugować. Taki jest mały fragment kodu, składający się tylko z niewielkiej części kodu. foreach(DistributionRecord rekord w _manager.Distributions) { foreach (Engine.Model.DistributionModel.LossFromAtmosphericConditionsEnum NLossAt w Enum.GetValues(typeof(Engine.Model.DistributionModel.LossFromAtture(NL.NLos)StrucContainAt. record.NlossAt[NLossAt].ContainsKey(DistributionModel.LossFromAtmosphericConditionsEnum.Atvolat)) _indirect[GetIndirectSourceEnumFromEnterpriseType(record)] += record.NlossAt[NLossAt][DistributionFrom.Atmos.Factor]; foreach (Engine.Model.DistributionModel.LossOffEnum lossOff w Enum.GetValues(typeof(Engine.Model.DistributionModel.LossOffEnum))) if (enterprise.NlossOff.ContainsKey(lossOff)) if (enterprise.NlossOff[lossOff].Containel .LossTypesEnum.lossleach)) _indirect[GetIndirectSourceEnumFromEnterpriseType(record)] += record.NlossOff[lossOff][DistributionModel.LossTypesEnum.lossleach][NutrientEnum.N].Value * _manager.Os.EmissionFactor2 } Rozmawiałem z szefem i bez rażącego mówienia wyjaśniłem moje obawy itp. Nie wiem, co jeszcze mogę zrobić. Nie jestem pewien, czy jest to odpowiednie dla tego forum, ale wszelkie porady byłyby mile widziane w zasadzie, jak mogę poradzić sobie z tym z moim kolegą. A może po prostu jestem nierealistyczny i muszę zmierzyć się z prawdziwym światem, ponieważ tak po prostu niektórzy ludzie piszą kod i jest w porządku?


title: Jak recenzować kod bez obrażania innych programistów

text: Pracuję w zespole, który często wykonuje przeglądy kodu. Ale wydaje się to bardziej formalnością niż cokolwiek. Nikt tak naprawdę nie wskazuje problemów w kodzie z obawy, że nie urazi innych programistów. Kilka razy, kiedy próbowałem prosić o zmiany, spotkałem się z postawą bardzo defensywną i niechętną. To oczywiście nie jest dobre. Nie tylko spędzamy czas na przeglądzie kodu, ale otrzymujemy z niego dosłownie zerową wartość. Czy jest to problem, który powinni rozwiązać poszczególni programiści, czy też istnieją techniki sugerowania zmian bez deptania innym ludziom?


title: Uruchamianie procesu przeglądu kodu, gdzie wcześniej go nie było?

text: Jakieś wskazówki dla grupy, która chce rozpocząć przegląd kodu? Obecnie nie mamy prawdziwych procesów inżynierii oprogramowania. Pracuję jako inżynier oprogramowania od 7 lat i nigdy nie widziałem żadnych rzeczywistych procesów realizowanych w różnych miejscach, w których pracowałem, chociaż wiele książek opowiada się za wszelkiego rodzaju metodologiami inżynierskimi. Kierownictwo popiera ideę umożliwienia nowych procesów, choć istnieje pewien opór ze strony starszego inżyniera, który ma ponad 20-letnie doświadczenie w inżynierii oprogramowania. Jesteśmy grupą dwóch programistów, bez menedżera inżynierii oprogramowania. Raportujemy bezpośrednio do dyrektora zarządzającego Spółki. Ale pracujemy nad wieloma projektami oprogramowania. Prawdziwym powodem, dla którego musimy zacząć przeprowadzać przeglądy kodu, są wymagania PA-DSS. Dlatego naciskam na nas, abyśmy robili przeglądy kodu wszędzie - nie tylko w oprogramowaniu do obsługi płatności.


title: Jak mogę taktownie sugerować ulepszenia źle zaprojektowanego kodu innych osób podczas sprawdzania?

text: Jestem wielkim zwolennikiem czystego kodu i rzemiosła kodu, chociaż obecnie pracuję w pracy, w której nie jest to uważane za najwyższy priorytet. Czasami znajduję się w sytuacji, w której kod peera jest _podziurawiony_ niechlujnym projektem i bardzo małą troską o przyszłą konserwację, chociaż jest funkcjonalny i zawiera niewiele błędów. Jak radzisz sobie z sugerowaniem ulepszeń w przeglądzie kodu, gdy uważasz, że jest tak wiele rzeczy do zmiany, a zbliża się termin? Pamiętaj, że sugerowanie ulepszeń _po_ terminie może oznaczać, że ich priorytety zostaną całkowicie usunięte, gdy pojawią się nowe funkcje i poprawki błędów.


title: Jak sprawić, by ludzie akceptowali przegląd kodu?

text: Wszyscy programiści mają swój styl programowania. Ale niektóre style są, powiedzmy… nie mówmy. Więc masz przegląd kodu, aby spróbować narzucić pewne zasady dobrego projektowania i dobrych technik programowania. Ale większość programistów nie lubi przeglądu kodu. Nie lubią, jak inni ludzie krytykują ich pracę. _Kogo oni myślą, że mają uważać się za lepszych ode mnie i mówić mi, że to zły projekt, można to zrobić w inny sposób. To działa, prawda? W czym problem?_ To jest coś, co mogą powiedzieć (lub pomyśleć, ale nie powiedzieć, co jest równie złe, jeśli nie gorsze). Jak więc sprawić, by ludzie akceptowali przegląd kodu bez wszczynania wojny? Jak możesz ich przekonać, że to dobra rzecz; to tylko poprawi ich umiejętności programistyczne i uniknie później wiele pracy, aby naprawić i naprawić milion razy coś, co hej... "to działa"? Ludzie powiedzą Ci, jak wykonać przegląd kodu (programowanie równorzędne, inspekcje formalne itp.), na co zwrócić uwagę w przeglądzie kodu, przeprowadzono badania, aby pokazać liczbę defektów, które można wykryć, zanim oprogramowanie trafi do produkcji itp. Ale jak czy przekonujecie programistów do zaakceptowania przeglądu kodu?


title: Naprawianie błędu podczas pracy nad inną częścią bazy kodu

text: Zdarzyło mi się to przynajmniej raz. Pracuję nad jakąś częścią bazy kodu i znajduję mały błąd w innej części, który powstrzymuje mnie przed ukończeniem tego, co obecnie próbuję zrobić. Naprawienie błędu może być tak proste, jak zmiana pojedynczej instrukcji. Co robisz w takiej sytuacji? 1. Napraw błąd i zatwierdź go razem z obecną pracą 2. Zapisz swoją obecną pracę w innym miejscu, napraw błąd w osobnym commicie, a następnie kontynuuj pracę [1] 3. Kontynuuj to, co masz zrobić, zatwierdź kod (nawet jeśli ~~zepsuje kompilację~~ zawiedzie niektóre testy), to napraw błąd (i ~~budowa~~ spraw, aby testy zaszły) w osobnym commicie [1] W praktyce oznaczałoby to: sklonuj oryginalne repozytorium gdzie indziej, napraw błąd, zatwierdź/wypchnij zmiany, przeciągnij zatwierdzenie do repozytorium, nad którym pracujesz, połącz zmiany i kontynuuj pracę. **Edytuj:** zmieniłem numer trzy, aby odzwierciedlić to, co naprawdę miałem na myśli.


title: Jak radzić sobie z kimś, kto nie lubi idei recenzji kodu?

text: Oczywiście, jeśli kierownictwo kupuje spędzanie czasu na przeglądach kodu, to każdy musi to zrobić. Ale zawsze są tacy faceci (lub dziewczęta), którzy opierają się każdą cząstką swojej istoty. Jak skutecznie radzisz sobie z tym scenariuszem, gdy zajmujesz się nim jako recenzent?


title: Co zrobić, jeśli członek zespołu dostarczy kod złej jakości?

text: Pracuję jako swoista mieszanka Scrum Mastera i lidera zespołu. W moim zespole mam problem, że jeden z członków dostarcza złej jakości. Kod, który tworzy, jest trudny do zrozumienia, trudny do utrzymania przez kogokolwiek innego niż sam facet. Rozwiązania są bardziej „hackiem” (jeśli nie frajerem) niż pracą koncepcyjną lub dopracowaną. A co najgorsze: on tego nie widzi. Uważa, że jest całkiem niezłym programistą, kiedy wszyscy inni członkowie zespołu ciągle narzekają na jego kod - kiedy go nie ma (co nie jest takie trudne, ponieważ facet przez większość czasu pracuje zdalnie). Wszyscy unikają mówienia mu, co myślą o jego pracy, ponieważ nie chcą go obrazić ani demotywować. Co powinienem zrobić? * Spróbuj powiedzieć mu, co myślą inni podczas spotkania 1 na 1? Ale nie uważam za słuszne powiedzenie „inni narzekają”, gdy innych nie ma i nie podają przykładów. * Zorganizuj spotkanie zespołu i zachęć innych członków, aby powiedzieli, co myślą? Ale to wydaje mi się trybunałem. (A wszystko przeciwko jednemu nie jest sprawiedliwe.) * Coś jeszcze?


title: Jak zintegrować przeglądy kodu z zespołem?

text: Pracuję w zespole, który wciąż się rozwija. Jednak nie ma recenzji kodu i widzę to jako problem na co dzień. Są ludzie o naprawdę ograniczonych umiejętnościach, którzy wprowadzają kod do naszego repozytorium, którego moim zdaniem nie powinno się tego robić. Nie jestem liderem zespołu ani nie jestem na stanowisku kierowniczym. Zaproponowałem już przeglądy kodu około 6 miesięcy temu i nie otrzymałem żadnych opinii. Nie było też żadnych recenzji kodu. Wiem, że przeglądy kodu przydałyby się każdemu, w tym bardziej doświadczonym. Czy ktoś miał jakieś doświadczenie w integrowaniu recenzji kodu w zespole? Co zaproponowałeś i jak to zrobiłeś?


title: Jak robić uporządkowane recenzje kodu

text: Musimy dokonać przeglądu kodu przed zameldowaniem. Używamy Visual Studio i TFS. Wbudowana funkcja przeglądu kodu jest dla mnie trochę dziwna. Jeśli „odrzucę” zameldowanie i skomentuję, co wymaga pracy, recenzja znika. Kiedy programista wprowadza zmiany, prosi o nową recenzję, a ja zaczynam od nowa. Załóżmy teraz, że w tym ewidencjonowaniu jest 10 plików. Może 7 z nich było pierwotnie w porządku. Teraz muszę je ponownie przejrzeć, ponieważ robimy zupełnie nową recenzję. LUB mogę śledzić siebie, co zrobiłem. Mogę również porównać TYLKO kod z wersją oryginalną, a nie z recenzji odrzucenia. Więc moje pytania to: 1. czym się zajmujecie? 2. Jakie masz doświadczenia z przeglądami kodów przed odprawą?


title: Jak wygląda przegląd kodu?

text: Piszę dokument dotyczący procesu przeglądu kodu dla naszego zespołu; nigdy nie mieliśmy formalnego procesu, chociaż przeprowadzamy przegląd kodu. Znalazłem wiele artykułów mówiących o tym, jak ważny jest przegląd kodu, ale mam w szczególności jedno pytanie, na które nie znalazłem odpowiedzi w Internecie... czy programista jest częścią przeglądu kodu? Innymi słowy, czy przegląd kodu powinien obejmować dwie osoby siedzące razem, analizujące, co jest w kodzie, czy też powinna to być jedna osoba przeglądająca kod innej osoby? Najczęściej nasze projekty są wykonywane przez zespół 2 osób, więc zanim zostaną wysłane do QA, czy te 2 osoby powinny po prostu usiąść razem i przejrzeć cały projekt, łącznie z tym, co każdy z nich napisał? A może oboje powinni po prostu spojrzeć na swój kod? Widzę zalety każdego z nich. Na koniec, co się dzieje z problemami wykrytymi podczas przeglądu kodu? Czy są odnotowywane, a następnie odsyłane do programisty? A może recenzent powinien je zanotować, a następnie po prostu je naprawić? A może jest to w porządku, aby dokonać zmiany i nawet nie powiedzieć programiście, co dokładnie znalazłeś?


title: Jaka opinia jest lub nie jest odpowiednia do przeglądu kodu?

text: Jestem zainteresowany kilkoma wskazówkami dotyczącymi tego, jakie informacje zwrotne są odpowiednie do przeglądu kodu, a jakie nie. Mój zespół ma bardzo nieustrukturyzowany proces recenzji i staram się zasugerować kilka sposobów na jego ulepszenie. Nie jestem ekspertem, więc mam nadzieję, że usłyszę od was ekspertów! 1. Czy komentarze do przeglądu kodu powinny ograniczać się do rzeczywistych problemów z kodem? 2. Czy krytyka dotycząca innych LOC w pliku jest słuszna, nawet jeśli te wiersze nie są modyfikowane? czyli krytyka wcześniej istniejącego kodu? 3. A co z propozycjami różnych sposobów rozwiązania tego samego problemu? Czy powinienem sugerować nowy sposób tylko wtedy, gdy można udowodnić, że jest lepszy? Jak narysować granicę między wnoszonymi pomysłami, ale nie brzmiącymi jak wszystkowiedzące? 4. W sprawach, które są czysto różnicą zdań, kto powinien mieć „ostateczne słowo”? Autor, osoba, która najlepiej zna bazę kodu, osoba z najwyższym tytułem czy ktoś inny? 5. Jakieś inne rady, aby upewnić się, że przeglądy kodu spełnią swoje zadanie bez niepotrzebnego blokowania postępów dewelopera? Proszę, jeśli możesz, uzasadnij wraz z ewentualnymi odpowiedziami. Pomoże to młodemu programiście naprawdę zrozumieć najlepszy sposób podejścia do przeglądu kodu.


title: Naprawianie błędów w kodzie innych narodów

text: Pracuję z innym programistą i zawsze mamy problemy z refaktoryzacją lub wzajemną zmianą kodu. Ostatnio musiałem naprawić błąd, ale przesunąłem zmiany, zanim go powiadomiłem. Był tym bardzo zdenerwowany. Czy powinienem był z nim o tym porozmawiać przed naciskiem? Przy okazji jest to projekt hobby. Jaki jest najlepszy sposób na zmianę kodu innych ludzi, gdy nie mamy kierownika projektu lub standardu kodowania?


title: Jak sprawić, by weryfikacja kodu nie była sposobem na *przesunięcie* odpowiedzialności?

text: Czasami wydaje mi się, że ludzie proszą o przeglądy kodu tylko po to, by móc powiedzieć „Xyz przejrzał mój kod!”(1), gdy coś się zepsuło. Pytanie, czy tak jest w ogóle? (A może to tylko moja wyobraźnia) Jeśli tak, jak sobie z tym poradzić? (1): Co on/on naprawdę miał na myśli: To wina Xyz czy coś w tym stylu.


title: Pozyskiwanie koderów do przeglądu kodu

text: Prowadzę projekt, w którym płacę programistom za wkład w mój projekt semi open source. Mój problem polega na tym, że łatwo jest zatrudnić programistów, ale bardzo trudno jest nakłonić kogokolwiek do recenzowania kodu. Wielokrotnie próbowałem nakłonić starszych programistów do przejrzenia kodu młodszych programistów. Próbowałem zapłacić im więcej, nadać im wyższy status itp. Ale wydaje się, że po prostu chcą kodować zamiast przeglądać kod. Teraz rozważam zmuszenie wszystkich programistów, którzy chcą kodować, do recenzowania kodu, ale mam wrażenie, że to zły pomysł. Moje pytanie brzmi zatem, jak mogę zmotywować zdolnych ludzi do przejrzenia kodeksu innych? Jak to się robi w udanych projektach open source, takich jak Linux, PostgreSQL, LibreOffice itp.


title: Jaki jest najskuteczniejszy sposób wykonywania przeglądów kodu?

text: Nigdy nie znalazłem idealnego sposobu na przeglądanie kodu, a mimo to często moi klienci tego wymagają. Każdy klient robi to inaczej i nigdy nie czułam się usatysfakcjonowana w żadnym z nich. Jaki był dla Ciebie najskuteczniejszy sposób przeprowadzania przeglądów kodu? Na przykład: * Czy jedna osoba jest uważana za strażnika jakości i sprawdza kod, czy też zespół jest właścicielem standardu? * Czy przeglądasz kod jako ćwiczenie zespołowe przy użyciu projektora? * Czy odbywa się to osobiście, e-mailem lub za pomocą narzędzia? * Czy unikasz recenzji i używasz takich rzeczy, jak programowanie w parach i wspólna własność kodu, aby zapewnić jakość kodu?


title: Jak poradzić sobie z członkiem zespołu, który duplikuje kod?

text: Jeden z członków naszego zespołu duplikuje kod. Powielanie kodu powoduje zamieszanie wśród członków mojego zespołu czytających jego kod, powoduje błędy, gdy zduplikowany segment jest naprawiany w jednym miejscu, a nie w innych, i powiększa jego bazę kodu. Rozmawiałem z nim, żeby nie powielać kodu. Ale pokazuje wymówki, że opóźni termin realizacji naszych projektów, jeśli dokona refaktoryzacji wszystkich miejsc, w których wykonał duplikację kodu. Jak lepiej sobie z nim poradzę?


title: Jak należy przeprowadzać przeglądy kodu?

text: Moje poprzednie pytanie dotyczy tego, jak przyspieszyć przeglądy kodu wśród programistów. W tym miejscu interesuje mnie, jak powinna przebiegać sesja code review, aby zarówno recenzent, jak i recenzowany czuli się z tym komfortowo. Zrobiłem już kilka recenzji kodu i doświadczenie było bardzo nieprzyjemne. Mój poprzedni kierownik przychodził do nas – na zasadzie ad hoc – i kazał nam wyjaśnić mu nasz kod. Ponieważ nie był zbyt zaznajomiony z bazą kodu, za każdym razem, gdy prosił mnie o wyjaśnienie mojego kodu, spędzałem mnóstwo czasu na wyjaśnianiu najbardziej podstawowej struktury mojego kodu. W rezultacie każda recenzja trwałaby o wiele za długo, a proces wyczerpywał nas oboje. Kiedy skończyłem wyjaśniać moją pracę, kontynuował poruszanie problemów z nią. Większość poruszonych przez niego problemów miała charakter kosmetyczny (np. nie używaj „regionu” dla tego bloku kodu, zmień nazwę zmiennej z „xxx” na „yyy”, mimo że ta późniejsza ma jeszcze mniej sensu itd.) . Po wypróbowaniu tego procesu przez kilka rund stwierdziliśmy, że sesja przeglądowa nie przyniosła żadnych korzyści dla żadnego z nas i zatrzymaliśmy się. Jak byś zrobił, aby każdy przegląd kodu był naturalnym, przyjemnym, stymulującym myślenie, naprawiającym błędy i wzajemnie się uczącym doświadczeniem? Ponadto, jak często przeprowadzasz przeglądy kodu — zaraz po zaewidencjonowaniu kodu? Czy co tydzień przeznaczasz na to określony czas? Jakie są wytyczne, których przestrzegasz podczas przeglądu kodu? Na koniec motywacja: Czego chcę, aby mój zespół wyszedł z przeglądu kodu? Odpowiedź: Chcę, aby członkowie mojego zespołu mogli nawzajem wykonywać swoją pracę. To główna motywacja. Druga motywacja: chcę, aby cały kod był łatwy do odczytania/modyfikowania/rozszerzania, aby można było łatwo dodawać nowe funkcje.


title: Jak radzisz sobie z odkrywaniem złego i fałszywego kodu w swoim zespole?

text: Każdego roku w styczniu realizujemy w naszym systemie duże zadanie. Podczas gdy wydajność podczas zadania była powyżej średniej, kontynuacja konserwacji ma obecnie wiele problemów z zadaniami działającymi zbyt długo i poza ich harmonogramem. Dlatego mam za zadanie zoptymalizować te prace konserwacyjne i w ten sposób robię najdokładniejszy przegląd kodu, jaki kiedykolwiek widział system. Ponieważ jestem dobry w analizie kodu, naprawiam również wiele błędów. Oznacza to, że widzę mnóstwo złego lub całkowicie błędnego kodu i implementacji. Moje pytanie brzmi: jak mogę sobie z tym poradzić w obecności moich współpracowników? Nienawidzę tego, gdy wywołuję błąd (co, jak sądzę, zdarza się czasem każdemu), a ktoś inny go naprawia, nie mówiąc mi o tym. Bo wtedy nie mogę uczyć się na swoim błędzie. Z drugiej strony nie chcę być facetem w zespole, który ciągle narzeka na to, jak wszyscy inni muszą wykonywać swoją pracę. Jestem też trochę nieufny wobec własnej pychy. Nie chcę znaleźć się w sytuacji, w której zaczynam patrzeć z góry na współpracowników tylko dlatego, że mój tendencyjny umysł uważa, że mój kod jest lepszy. Obecnie nie sprawdzam, kto spowodował błąd, po prostu go naprawiam. Nie jestem pewien, czy to najlepsza droga. Jestem programistą na poziomie Junior, a angielski nie jest moim językiem ojczystym. Wszelkie porady (i poprawki gramatyczne) są bardzo cenione. Zespół działa zgodnie ze strukturą Rational Unified Process.


title: Jak mam sobie radzić z powolnym i nieoddanym współpracownikiem w zespole?

text: Pracuję nad nowym projektem. Projekt działa w następujący sposób: użytkownik końcowy może uzyskać dostęp do aplikacji internetowej za pomocą łącza i może dodać wiele systemów do swojej sieci i zarządzać szczegółami poszczególnych systemów. Moja część obejmuje frontend i serwer WWW, co jest robione w Pythonie. Mój python faktycznie komunikuje się z innym projektem, który jest w całości wykonany w c & c++. Projekt c/c++ to główna aplikacja, która pełni wszystkie funkcje. Mój python wysyła do niego żądanie użytkownika i wyświetla odpowiedź z niego do użytkownika. Bardzo dobrze znam swoją pracę i wkrótce ją skończę. Ponieważ nie ma w tym wiele pracy. A ja jestem osobą, która uwielbia pracować. Większość czasu spędzam w biurze i wracam do domu tylko wtedy, gdy czuję się śpiąca. Aplikacja c/c++ jest zarządzana przez innego kolegi, który ma ponad 5 lat doświadczenia i może robić rzeczy znacznie szybciej niż ja, ale nigdy tego nie robi. Może nie lubi tego robić. Jego aplikacja często się zawiesza, gdy mój python się z nią komunikuje lub zwraca nieprawidłowe wartości. Jest pełen błędów. Ponieważ moja aplikacja od tego zależy, trudno mi ją zbudować. Zamiast naprawiać błędy, prosi mnie o spowolnienie pracy. Prosi mnie, abym powiedział kierownikowi, że moja praca wymaga dużo czasu. Prosi mnie, żebym oszukał kierownika, a nawet zmusza mnie do powolnej pracy, tak jak on. Podczas spotkania projektowego, gdy kierownik pyta go o błędy, odpowiada, że naprawił wszystko i działa bez zarzutu. Ponieważ jest moim kolegą, nie mogłem nic powiedzieć kierownikowi. Oczywiście muszę mieć dobre relacje z kolegami bardziej niż z moim przełożonym, ponieważ przez większość czasu będziemy przebywać z kolegami, a nie z przełożonym. Nie jestem w stanie powiedzieć menedżerowi niczego na ten temat, ponieważ jeśli menedżer zapyta go, dlaczego, może pomyśleć, że złożyłem skargę na niego do menedżera. I wciąż kłamie na spotkaniu. A ponieważ powoli naprawia błąd, spowalnia to nawet moją pracę. Teraz pomyślałem o pracy nad frontendową częścią mojej aplikacji i dokończeniu jej tak, aby w międzyczasie mógł ustabilizować swój projekt. Teraz prosi mnie, abym powiedział kierownikowi, że moja frontendowa część wymaga dużo pracy i może potrzebować coraz więcej czasu, po prostu po to, aby mógł przeciągnąć projekt w dół. Smutną rzeczą jest to, że nasz aktualny menedżer wyjechał do USA, więc mamy tymczasowego menedżera, a ten gość nie wie zbyt wiele o projekcie, więc c,c++ po prostu go oszukuje. Czy ktoś może mi zasugerować, jak sobie z tym poradzić? Chciałem wkrótce dokończyć projekt. Jak mogę zmusić go do pracy, nawet utrzymując z nim dobre relacje? ### Odpowiedzi na komentarze: > Jeśli naprawdę celowo wprowadza firmę w błąd, należy zgłosić go do > kierownictwa. Jestem nowy w tej firmie, a drugi facet jest tam od wielu lat. I dopiero zacząłem poznawać moich kolegów. Jeśli bezpośrednio pójdę i poskarżę się na niego, nie sądzę, żebym mógł nawiązać dobre relacje z innymi kolegami. Nawet on ma moc zwodzenia ich. Nie mówię, że jest złym facetem, może wykonać pracę, ale nie robi tego. > Czy Twoja firma nie posiada żadnego systemu śledzenia błędów? Tutaj nie ma rzeczywistego systemu śledzenia błędów. Firma stara się jak najszybciej zakończyć projekt i przekazuje go do kontroli jakości. A następnie naprawia błędy zgłoszone przez QA. > Dlatego firmy powinny dawać pracownikom akcje/opcje lub jakiś rodzaj własności. W ten sposób możesz dosłownie powiedzieć facetowi „Kosztujesz mnie > wzrost pieniężny… nie chcesz też zarabiać?”. Firma ma opcje na akcje, które dała mi 2500 akcji, w większości on też miałby trochę więcej. > Starość zasługuje na pewną korzyść z wątpliwości. Naprawdę musisz najpierw z nim > porozmawiać i spróbować zrozumieć problem. Może być poza swoją głębią, ty > możesz mu pomóc, łatwo mogą istnieć zmienne, których nie jesteś świadomy. > Może być teraz ciężko, ale możesz łatwo pogorszyć sytuację, > skacząc z broni. Nawet to robię, najpierw jego aplikacja nie obsługiwała wielu żądań na raz, używał kolejki do obsługi żądań, które do niego wysyłałem. Zasugerowałem mu nawet kilka moich pomysłów na ten temat. Powiedział, że ma już te pomysły i będzie je realizował. Jego wyjaśnienia brzmiały: „Wszystko wymaga pewnego czasu, a jest to projekt, który może potrwać dwa lata, a my jesteśmy proszeni o ukończenie go w dwa miesiące”. Miałem trudności z kodowaniem przez pierwsze tygodnie z powodu tego błędu. Ale teraz to naprawił. Ale używa on jednej kolejki dla żądań użytkownika, co teraz spowalnia aplikację, ponieważ przetwarza jedno żądanie na raz. > Co robi QA przez cały czas? Dlaczego nie zgłaszają/nie potwierdzają > statusu projektu(ów)? Menadżer to osoba, która decyduje, kiedy przekazać kontrolę jakości. Na razie nie udzielił jeszcze kontroli jakości. Powiedział, że powinniśmy dać to do końca tego miesiąca.


title: liczby zespolone w programowaniu?

text: Czy w programowaniu używa się liczb zespolonych? Jeśli są, jakie jest ich znaczenie? Jakie IDE i języki ich używają? A czy warto byłoby nauczyć się ich implementacji do pracy programistycznej (jeśli tak, to proszę podać jaką)? Pracowałem w Eclipse i właśnie studiowałem znaczenie liczb zespolonych w matematyce i zastanawiałem się, czy jest to skorelowane.


title: Czy istnieje nazwa zapachu kodu CSS, który można zobaczyć w nazwach klas, takich jak „float” lub „white”?

text: Zauważyłem trochę kodu w naszych projektach używających nazw klas CSS takich jak `red`, `black` czy `float`. Chcę przekazać ludziom informacje, aby wiedzieli, jak ich unikać. Czy istnieje wspólna nazwa tego zapachu kodu, abym mógł się do niego odnieść?


title: Odbiornik transmisji lub usługi

text: Tworzę aplikację "Budzik" na Androida. Dowiedziałem się, że możemy zaimplementować metodę `OnReciever()` i napisać te rzeczy, które alarm ma wykonać po wyzwoleniu intencji. Ale teraz natknąłem się na "Usługi" Androida, które (mogą być) przydatne w aplikacji. Który z nich powinienem preferować, pamiętając o prostocie korzystania z jednego z nich.


title: gcc -S wydaje się nieco zniekształcony z bitami przesuwania i AND

text: Przykład: int c = 4; int p = 5; if (p & (1 << c)) printf("ok\n"); else printf("nop\n"); gcc -S: movl -4(%rbp), %eax /* eax przechowuje zmienną c */ movl -8(%rbp), %edx /* i edx przechowuje p */ movl %eax, %ecx /* tmp (ecx) = c */ sarl %cl, %edx /* edx(p) >>= c */ movl %edx, %eax /* eax = p przesunięty w prawo o c */ andl $1, %eax /* eax (p przesunięte w prawo o c) &= 1 */ testl %eax, %eax /* test jeśli p jest 0 */ ... skoki i takie tam ... Jak widać, GCC z jakiegoś powodu przekonwertowało mój kod do: p >>= c; p &= 1 if (p != 0) ... else ... Coś podejrzanego tu się dzieje lub czegoś mi brakuje... W pewnym sensie operacja została wykonana od tyłu, chociaż umieściłem nawiasy wokół `1 << c ` więc powinien był to zrobić osobno ORAZ z `p` poprawny? Czy ktoś może wyjaśnić, dlaczego GCC to zrobił? Czy jest to jakiś rodzaj optymalizacji (nie miałem włączonej optymalizacji, kiedy to kompilowałem, więc wątpię) Czy jest to sposób, w jaki należy to zrobić w asemblerze?


title: Czy GPL jest niebezpieczna dla organizacji pod względem ujawnienia jej własności intelektualnej?

text: Powszechna Licencja Publiczna GNU to „Licencja Wirusowa”. Jeśli organizacja używa Linuksa i MySQL, które są objęte tą licencją, czy jest to niebezpieczne dla organizacji pod względem ujawnienia jej własności intelektualnej? Ponieważ ta licencja będzie wymagać, aby oprogramowanie, które jest połączone z programem GPL lub które zawiera program GPL, było również udostępniane w formie źródłowej na tej samej licencji, gdy jest „dystrybuowane”.


title: Ile możesz opowiedzieć o swoim doświadczeniu zawodowym podczas rozmowy kwalifikacyjnej

text: Ostatnio widziałem tutaj komentarz, że oznaki złego zatrudnienia są wtedy, gdy mówi „Pracowałem z tym i tamtym”, ale potem nie wyjaśnia tego, gdy jest pytany. A pytanie brzmi: dlaczego? Scenariusz hipotetyczny: Powiedzmy, że pracujesz dla firmy X, która opracowuje rakiety do lotów kosmicznych, a następnie idziesz na rozmowę kwalifikacyjną na stanowisko Z w firmie Y. Ankieter widzi Twoje CV, zadaje pytanie – Jakich technologii używałeś? Odpowiadasz, och, użyłem biblioteki doładowania do sterowania systemami nawigacji rakietowej. Pracodawca uzna, że jesteś kiepskim pracownikiem i nie oferuje Ci pracy. Następnie wraca do domu, odwołuje się do Twojej poprzedniej firmy X, znajduje udokumentowany błąd w bibliotece doładowania i sprowadza rakietę w dół. BUM! Z jednego punktu widzenia nie powiedziałeś nic interesującego, z innego punktu widzenia biblioteki, wzorce i algorytmy mogą przejść bardzo długą drogę w kierunku umożliwienia złośliwym ludziom odwrócenia się od produktu konkurencji. Czy masz prawo mówić o poprzednich produktach, nawet w abstrakcyjny sposób. I czy osoba przeprowadzająca wywiad ma w ogóle prawo zapytać Cię o rzeczy, które zakodowałeś dla jakiegoś podmiotu komercyjnego?


title: Które języki używają „sparowanych” plików nagłówka/implementacji?

text: C jest wszechobecny, a C++ prawie tak samo, ale jestem ciekawy, które inne języki stosują podobny model plików nagłówkowych. W szczególności, w jakich innych językach edytowanie par lub grup plików „nagłówkowych” i „wdrożeniowych” jest idiomatyczne? (Grupa jak w wielu nagłówkach z jednym odpowiadającym plikiem implementacyjnym lub pojedynczym nagłówkiem z wieloma plikami implementacyjnymi, jak widać również w C.) Na przykład para "blah.h" i "blah.c". Pliki nagłówkowe C są powiązane z preprocesorem C, ale nie na tym się skupiam. Na przykład PHP ma różne mechanizmy dołączania, ale nie masz pary/grupy "blah-header.php" plus "blah-notheader.php". Niektóre języki generują plik ze źródeł w odwzorowaniu jeden-do-jednego, na przykład Java, ale nie o tym też mówię. Interesują mnie przypadki, w których programista _bezpośrednio edytuje_ oba/wszystkie pliki w parze/grupie. Być może ujmując to inaczej: które języki mają plik deklaracji ("nagłówek") i plik definicji ("implementacja"), takie, że osoba zwykle edytuje oba pliki jednocześnie?


title: Przykład umowy z klientem

text: Swoją firmę założyłem w Wielkiej Brytanii. Kiedyś pracował jako freelancer, więc kwestie prawne nie przyprawiały mnie o ból głowy. Teraz chciałbym zobaczyć przykład dokumentu, który firma podpisałaby z klientem, rozpoczynając dla niego budowę strony internetowej. Powinna zawierać wycenę projektu, omówienie projektu, uzgodnione rzeczy, terminy itp. Czy ktoś jest tak uprzejmy udostępnić taki dokument?


title: Wyjątek rejestrowania w aplikacji wielowarstwowej

text: Tworzę wielowarstwową aplikację dla przedsiębiorstw przy użyciu Spring. Mam różne warstwy: Kontroler, Biznes i Dostawca. W ramach aplikacji zbudowałem niestandardowy mini-framework do obsługi błędów, który jest oparty na pojedynczym wyjątku RuntimeException, który ma kod błędu do rozróżniania różnego rodzaju błędów. Kody błędów to wyliczenia implementujące ten interfejs: public interface ErrorCode { public int getNumber(); public String getDeveloperMessage(); public String getHelpURL(); public logiczna isSystemError(); } Czyli na przykład mam: public enum SystemErrorCode implementuje ErrorCode{ E_UNKNOWN_ERROR(10000, "Nieznany błąd wewnętrzny", prawda), E_MISSING_ARGUMENT(10001, "Brakujący argument", prawda), E_INVALID_ARGUMENT(10002, "Nieprawidłowy argument", prawda), E_CONTEXT_NO_TENANT(10003, "Brak najemcy w kontekście", prawda), E_CONTEXT_TENANT_CHANGE(10004, "Próba zmiany najemcy", prawda), E_CONTEXT_ALREADY_INITIALIZED(10005, "Lokator już zainicjowany", prawda), E_NOT_IMPLEMENTED(10005, "Funkcja nie zaimplementowana", true), ... } Sama klasa wyjątków wygląda następująco (gettery, konstruktory i metody narzędziowe zostały usunięte dla zwięzłości): public class EngineRuntimeException extends RuntimeException { private static final long serialVersionUID = 1L; prywatny końcowy String incydentReportId; prywatny końcowy kod błędu; private final Map<String, Object> extraInfo; ... public static EngineRuntimeException wrap(Wyjątek, który można zgłaszać, ErrorCode errorCode) { if(wyjątek wystąpienie EngineRuntimeException) { EngineRuntimeException se = (EngineRuntimeException)wyjątek; if(errorCode != null && errorCode != se.getCode()) { return new EngineRuntimeException(Exception.getMessage(), wyjątek, errorCode); } return se; } else { return new EngineRuntimeException(Exception.getMessage(), wyjątek, kod błędu); } } public static EngineRuntimeException wrap(możliwy do rzucenia wyjątek) { return wrap(wyjątek, SystemErrorCode.E_UNKNOWN_ERROR); } Używając metody narzędziowej wrap, mogę łatwo hermetyzować wyjątki w różnych warstwach bez utraty oryginalnego stosu i bez jego zanieczyszczenia przez ponowne zgłaszanie lub inkapsulację wyjątku więcej niż jeden raz. try { if(a == null) { throw new EngineRuntimeException(SystemErrorCode.E_UNKNOWN_ERROR, "blah, blah, blah"); } // Jakiś inny kod, który może zgłaszać wyjątki (zaznaczone lub niesprawdzone), // te wyjątki zostaną umieszczone w wyjątku EngineRuntimeException, // jeśli nie są jeszcze tego typu. } catch (wyjątek ex) { throw EngineRuntimeException.wrap(ex); } Podsumowując, każda warstwa ma granicę bezpieczeństwa try-catch, która opakowuje wyjątki w wyjątek EngineRuntimeException, po prostu ponownie zgłaszając to, co już jest wyjątkiem EngineRuntimeException. Pytanie brzmi: gdzie mam zarejestrować wyjątek? Chcę zarejestrować wyjątek tylko raz, więc myślałem o tym, jak zrobić logowanie wewnątrz konstruktora samej klasy EngineRuntimeException. Czy to zły pomysł? Czy lepiej jest robić logowanie tylko w blokach przechwytywania granic warstw? Poza tym nie chcę po prostu logować się za pomocą log4j, ale chcę skorzystać z usługi (@Service) wstrzykiwanej przez springa, aby móc zdecydować się na coś więcej niż logowanie do systemu plików. Jak to zrobić, skoro nie mogę sprawić, by wiosna wstrzyknęła coś w klasie, którą utworzyłem za pomocą instrukcji „nowy”.


title: Profesjonalne programowanie na iOS, Android i web - wgląd

text: To naprawdę nie jest pytanie, jak rozwijać wszystkie trzy, znam różne sposoby na różne platformy i tak dalej. Ale bardziej chcę wiedzieć z punktu widzenia programisty, jak trudno jest zasadniczo tworzyć aplikacje na iOS, Androida i aplikacje internetowe? Obecnie pracuję jako programista mobilny/web developer. Stworzyłem już swoją pierwszą aplikację na iPhone'a/iPada, a teraz muszę napisać aplikację na Androida, ponieważ wersja internetowa, którą wypróbowałem, po prostu nie działała tak dobrze, jak była potrzebna, a internetowe bazy danych po prostu nie wydawały się skuteczne. Ale nie jestem pewien, czy można być dobrym w rozwijaniu wszystkich 3 pod względem zapamiętywania wszystkich API itp. Nie powiedziałbym, że mam problem z językami programowania, jak używać API dla różnych platform. Poza tym wszystkie inne języki, na które patrzę w wolnym czasie, po prostu czuję, że się chudnę. Czy jedna osoba może tworzyć aplikacje na iOS, Androida i web? Czy powinienem pomyśleć o zredukowaniu go do iOS i aplikacji internetowych? Wszystko rozwijam sam, więc nie mam z kim dyskutować, jakie są najlepsze rozwiązania na wszystko i po prostu staram się ćwiczyć na bieżąco. Więc jacyś programiści międzyplatformowi? Czy firmy mają różne zespoły dla różnych platform? Każdy wgląd po prostu pomógłby mi się pozbierać. Mam nadzieję, że to pytanie ma sens.


title: Przykłady algorytmów ogólnego przeznaczenia, które skorzystały na działaniu na GPU?

text: Szukam przykładów algorytmów ogólnego przeznaczenia (czyli niezwiązanych z grafiką), które okazały się działać o rząd wielkości szybciej na GPU niż na CPU. Użyję tych przykładów, aby twórczo pomyśleć o innych algorytmach, które mógłbym zaimplementować na GPU.


title: Jakieś rady od programistów samouków na temat konkurowania z bardziej konwencjonalnymi typami?

text: Jako programista samouk konkurujący w branży zdominowanej przez kierunki CS, często czuję się onieśmielony. Mam licencjat ze sztuk wyzwolonych, ale odkryłem, że wielu „wyszkolonych” programistów ma tendencję do patrzenia w dół i zakładania, że mam ogromne luki w zrozumieniu podstaw. Zwykle nie mówię nikomu, chyba że muszę, że nauczyłem się w ten sposób, aby uniknąć napiętnowania. Czy lepiej byłoby zaakceptować to, czego się nauczyłem, czy też rozsądniej byłoby kontynuować dostarczanie, nie będąc zbyt otwartymi na temat mojego pochodzenia? Edycja: Myślę, że nie wspomniałem o tym, ale faktycznie uczestniczyłem w wielu zajęciach z CS, ale nigdy nie miałem czasu, aby uzyskać właściwą pracę z dołączonymi losowymi wymaganiami. Mam wszystkie podstawowe rzeczy, takie jak struktury danych i algorytmy itp. Odkryłem, że sam nauczyłem się więcej, jednak przede wszystkim interesowało mnie to, jak to podejście jest postrzegane przez pracodawców i co tam. Dzięki za wszystkie świetne rady!


title: Liczne nieoczekiwane przeszkody rujnujące plany projektów

text: Pracuję jako programista i zmagam się z tym problemem od prawie trzynastu lat. Wydaje się, że nie ma żadnego wyjścia z następującego problemu. Zdarza się to również przy małych projektach. Na przykład planuję napisać rozszerzenie dla Microsoft Visual Studio. Pobieram materiały do nauki, dostaję książkę na ten temat i przeznaczam czas na naukę i rozwój. Jednak podczas tworzenia pojawia się wiele pozornie błahych problemów, na przykład: * Dlaczego skrypt odmawia usunięcia pliku? * Dlaczego program Visual Studio nie rejestruje rozszerzenia? * (po dwóch dniach) OK, rejestruje, ale teraz się zepsuło. Jak to naprawić? rozwiązanie każdej z tych „małych” przeszkód zajmuje zwykle 1-5 dni, a projekt ostatecznie pochłania kilka razy więcej roboczogodzin niż planowano. Może dzieje się tak tylko dlatego, że pracuję na platformie Microsoft, a wiele z ich frameworków i architektur jest nieco zagmatwanych i źle udokumentowanych. Chciałbym, aby większość problemów była rozwiązywana poprzez znalezienie odpowiedzi w książce lub oficjalnej dokumentacji (MSDN), ale jedyna odpowiedź, jaką zwykle znajduję, znajduje się na jakimś dziwnym forum lub osobistym blogu, wygooglowanym po desperackim poszukiwaniu jakichkolwiek istotnych informacji na ten temat. Czy masz te same zmagania? Czy masz techniki, jak zapobiegać tym problemom? Myślałem po prostu o przemnożeniu przewidywanego czasu na dany projekt przez jakiś współczynnik, ale to nie pomaga. Niektóre projekty są robione szybko, a niektóre zajmują miesiące, a czynnikiem przewodnim są tutaj te małe „usterki”, których rozwiązanie zajmuje programistom całe tygodnie. Muszę przyznać, że wiele z tych przeszkód demoralizuje mnie i odbiera mi koncentrację i radość z pracy (kto lubi wracać do pracy, gdy zamiast pracować twórczo musi rozwiązać jakiś głupi problem z rejestrem lub dziwny błąd frameworka?) projekt w końcu skończony, mam ochotę umierać od tysiąca cięć.


title: Kiedy są usprawiedliwione gettery i setery?

text: Gettery i setery są często krytykowane jako nieodpowiednie OO. Z drugiej strony większość kodu OO, który widziałem, ma rozbudowane gettery i settery. Kiedy gettery i setery są usprawiedliwione? Czy starasz się ich unikać? Czy w ogóle są nadużywane? Jeśli twój ulubiony język ma właściwości (mój ma), to takie rzeczy są również uważane za pobierające i ustawiające dla tego pytania. Są tym samym z perspektywy metodologii OO. Mają po prostu ładniejszą składnię. Źródła krytyki Getter/Setter (niektóre zaczerpnięte z komentarzy, aby były lepiej widoczne): * http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html * http://typicalprogrammer .com/?p=23 * http://c2.com/cgi/wiki?AccessorsAreEvil * http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm * http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and Krótko mówiąc: Gettery i Settery pozwalają manipulować wewnętrznym stanem obiektów spoza obiektu. To narusza hermetyzację. Tylko sam obiekt powinien dbać o swój stan wewnętrzny. I przykład proceduralna wersja kodu. struct Lodówka { int ser; } void go_shopping(lodówka) { lodówka.ser += 5; } Wersja kodu mutatora: class Lodówka { int cheese; void set_cheese(int_ser) { ser = _ser; } int get_cheese() { zwróć ser; } } void go_shopping(lodówka lodówka) { lodówka.set_cheese(lodówka.get_cheese() + 5); } Gettery i settery znacznie bardziej skomplikowały kod, nie zapewniając odpowiedniej enkapsulacji. Ponieważ stan wewnętrzny jest dostępny dla innych obiektów, nie zyskujemy zbyt wiele dodając te gettery i settery. Pytanie zostało wcześniej omówione na Stack Overflow: * http://stackoverflow.com/questions/565095/java-are-getters-and-setters-evil * http://stackoverflow.com/questions/996179


title: Dlaczego dostęp publiczny i prywatny uważa się za dobrą praktykę?

text: > **Możliwy duplikat:** > Kiedy metody pobierające i ustawiające są uzasadnione Dlaczego właśnie publiczne i prywatne akcesory są takie jak: private string foo; public string Foo { get { return foo; } ustaw { foo = wartość; } } uważane za lepsze niż tylko publiczne, takie jak: public string Foo; Wynik końcowy wydaje się być taki sam.


title: Jak zaprojektować dostęp do elementu członkowskiego dla klasy typu Article?

text: Robię projekt końcowy w klasie C++ pisząc _very_ prosty klient/serwer typu usenet. Wyobrażam sobie, że ponieważ jest on podobny do usenetu, będę miał klasę `NewsGroup` i `Article`, teraz pracuję nad moją klasą `Article`. Nie mogę się jednak zdecydować na dobry projekt (ta klasa nie dotyczy wzorców projektowych i nie brałem żadnych). Oto co mam: class Article { public: const std::string author; std::tytuł ciągu; std::ciąg tekst; identyfikator const uint32_t; system_clock::time_point znacznik czasu; Article(const std::string auth&, const std::string tit&, const std::string txt&, const system_clock::time_point&); prywatne: Artykuł(const Article&); void operator=(const Article&); statyczny uint32_t id_pool; }; Moją motywacją jest to: `autor` nigdy nie powinien się zmieniać -> `stały` `tytuł` może się zmienić, jeśli jest edytowany -> `niestały` `tekst` może się zmienić, jeśli jest edytowany -> `niestały` `id` nigdy nie powinien się zmieniać -> `const` `timestamp` może się zmienić, ale prawdopodobnie nie powinno, nie jestem jeszcze pewien, co z tym zrobić. `id_pool` to miejsce, z którego otrzymuję identyfikatory. Jedną ze specyfikacji jest to, że identyfikatory nigdy nie powinny być ponownie używane, więc po prostu zwiększam `id_pool` w konstruktorze Article. Pochodzę z Javy ze wszystkimi getterami i seterami, których tak naprawdę nie lubię, a potem trochę Pythona z "Wszystkim publicznym" i właściwościami, które lubię, trochę się tutaj pogubiłem. To znaczy, mógłbym uczynić członków prywatnymi i mieć pobierających i ustawiających (nie przychodzi mi do głowy żadna naturalna „metoda czasownikowa”, którą artykuł może „zrobić”), ale wydaje mi się, że niewiele bym zyskała. Byłbym wdzięczny za kilka wskazówek dotyczących dobrego projektu w tym przypadku.


title: Czy dobrą praktyką programistyczną jest nieużywanie funkcji pobierających i ustawiających w trywialnych częściach kodu?

text: > **Możliwy duplikat:** > Kiedy gettery i settery są uzasadnione Czy dobrą praktyką programistyczną jest nieużywanie getterów i seterów w trywialnych częściach kodu?


title: Jaka jest korzyść z używania metod pobierających i ustawiających we właściwościach w C#?

text: > **Possible Duplicate:** > Kiedy gettery i settery są uzasadnione Dlaczego używamy metody get and set w C#? I dlaczego używamy własności metody publicznej i prywatnej? Na przykład: public class Date { private int month = 7; public int Miesiąc { dostać { miesiąc zwrotu; } set { if ((wartość > 0) && (wartość < 13)) { miesiąc = wartość; } } } }


title: Czy metody Get-Set są naruszeniem enkapsulacji?

text: > **Możliwe duplikaty:** > Kiedy metody pobierające i ustawiające są uzasadnione W zorientowanym obiektowo frameworku uważa się, że musi istnieć ścisła enkapsulacja. Dlatego zmienne wewnętrzne _nie należy udostępniać_ aplikacjom zewnętrznym. Ale w wielu bazach kodu widzimy _tony_ metod get/set, które zasadniczo otwierają formalne okno w celu modyfikacji wewnętrznych zmiennych, które pierwotnie miały być surowo zabronione. Czy nie jest to wyraźne pogwałcenie enkapsulacji? Jak szeroko postrzegana jest taka praktyka i co z tym zrobić? EDYCJA: Widziałem dyskusje, w których są dwie skrajne opinie: z jednej strony ludzie wierzą, że ponieważ interfejs get/set jest używany do modyfikowania dowolnego parametru, kwalifikuje się to, aby nie naruszać enkapsulacji. Z drugiej strony są ludzie, którzy uważają, że to narusza. Oto mój punkt. Weźmy przypadek serwera UDP, z metodami - get_URL(), set_URL(). Właściwość URL (do nasłuchiwania) jest dość parametrem, który aplikacja musi być dostarczona i zmodyfikowana. Jednak w tym samym przypadku, jeśli właściwość taka jak get_byte_buffer_length() i set_byte_buffer_length() wyraźnie wskazuje na wartości, które są całkiem wewnętrzne. Czy nie będzie to sugerować, że _nie_ narusza enkapsulacji? W rzeczywistości nawet metoda get_byte_buffer_length(), która w przeciwnym razie nie modyfikuje obiektu, nadal nie ma sensu enkapsulacji, ponieważ z pewnością istnieje aplikacja, która _wie_, że mam wewnętrzny bufor! Jutro, jeśli bufor wewnętrzny zostanie zastąpiony czymś w rodzaju *listy_pakietów*, metoda przestanie działać. Czy istnieje uniwersalna metoda tak/nie w celu uzyskania zestawu? Czy jest jakaś silna wskazówka, która mówi programistom (szczególnie młodszym) _kiedy_ narusza enkapsulację, a kiedy nie?


title: Jak ważna jest hermetyzacja?

text: Jako student programowania dowiedziałem się, że enkapsulacja jest jedną z najważniejszych zasad programowania obiektowego. Jednak kieruję się tą zasadą tylko wtedy, gdy czuję, że odpowiada to mojemu celowi. Czasami pozostawiam wewnętrzne zmienne klas jako publiczne, jeśli mają być bezpośrednio odczytywane w pewnym momencie, i używam takich rzeczy jak settery i gettery tylko wtedy, gdy istnieją rzeczywiste obliczenia (i przypisania innych zmiennych) zaangażowane w przypisanie/ocenę zmiennej (powiedzmy , `getDegrees()` klasy `Angle`, która przechowuje tylko radiany wewnętrznie). Jeśli stwierdzę, że jakaś procedura wykonywana z klasą wymaga wielu modyfikacji zmiennych wewnętrznych i można ją łatwo pogrupować w jedną operację, umieszczę ją w funkcji klasy, zamiast wywoływać wiele mniejszych funkcji przez zewnętrzny kod. Jednak nie zawsze będę _wymuszać_ to w interfejsie, ustawiając zmienione zmienne jako prywatne. Czy robiąc to naruszam jakieś zasady? Jeśli tak, to jak bardzo? Kod, który to robi, zwykle nie jest skierowany na zewnątrz, ponieważ zwracam dużą uwagę na sposób przetwarzania danych wejściowych spoza programu.


title: jaki styl dostępu członków jest preferowany?

text: celem użycia klas oop jest enkapsulacja członków z `przestrzeni kosmicznej`. Zawsze czytam, że dostęp do członków powinien odbywać się metodami. na przykład: szablon<nazwatypu T> klasa foo_1 { T stan_; public: // poniżej }; najczęstszym robieniem tego przez mojego profesora była metoda „pobierz i ustaw”. // wariant 1 T const& getState() { return state_; } void setState(T const& v) { state_ = v; } lub tak: // wariant 2 // moim zdaniem łatwiej czytać T const& state() { return state_; } void state(T const& v) { state_ = v; } zakładamy, że `stan_` jest zmienną, która jest okresowo sprawdzana i nie ma potrzeby upewniania się, że wartość (stan) jest spójna. Czy jest jakaś wada dostępu do państwa przez odniesienie? na przykład: // wariant 3 // zrób to przez odwołanie T& stan() { return state_; } lub nawet bezpośrednio, jeśli zadeklaruję zmienną jako public. template<typename T> class foo { public: // wariant 4 stan T; }; W wariancie 4 mogłem nawet zapewnić spójność za pomocą c++11 atomic. Więc moje pytanie brzmi, który z nich powinienem preferować? Czy istnieje jakiś standard kodowania, który odrzuciłby jeden z tych wzorców? po jakiś kod zobacz tutaj


title: Nowy język programowania i BCL dla chmury

text: Załóżmy, że musisz zaimplementować nowy język programowania i BCL zaprojektowany specjalnie do pracy w chmurze (nie będzie nigdy używany na komputerach klienckich). Powinien być zoptymalizowany pod kątem przetwarzania w chmurze; łatwy do nauczenia, szybki, wydajny, wydajny, nowoczesny. Jak by to wyglądało? Jakie byłyby główne różnice w stosunku do C#, Java, Ruby, Python, JavaScript? Czym różniłaby się BCL (biblioteka klas bazowych) od, powiedzmy, tej w .NET Framework 4.0? .. W ten sam sposób, w jaki Silverlight BCL został zbudowany do użytku w przeglądarce / na wielu platformach, całkowicie nowy BCL powinien być zbudowany dla chmury, nie sądzisz? .. Jak wspomniał Jörg W Mittag, język programowania stworzony wyłącznie dla chmury może mieć swoje zalety nad tradycyjnymi językami programowania. Na przykład ten język może ewoluować bez uszkadzania istniejących aplikacji, powiedzmy, że zmieniasz nazwę metody / zmieniasz jej sygnaturę / lub przenosisz ją do innej przestrzeni nazw, wszystkie aplikacje w chmurze zostaną automatycznie zaktualizowane, aby odzwierciedlić tę zmianę. .. Teoretycznie C# 5.0 mógłby stać się takim językiem z jego kompilatorem jako funkcją usługi. Ale to nadal nie wyeliminuje potrzeby dedykowanego BCL dla chmury.


title: Rejestracja: Hash e-maila i weryfikacja tylko jednego konta na e-mail

text: Używam funkcji rejestracji, która za każdym razem haszuje e-mail w PBKDF2 z losową i unikalną solą. Hash e-mail i jego sól są zapisywane w DB. Nie ma z tym problemu. Problem polega na tym, że teraz chcę się upewnić, że użytkownicy tworzą tylko jedno konto na e-mail. Oczywiście, aby sprawdzić, czy muszę sprawdzić moją bazę danych i tu zaczyna się problem. Albo tracę bezpieczeństwo, albo czas. Ponieważ jak widzę, mam 2 możliwości: 1 - zmieniam metodę haszowania i używam zwykłej soli do wszystkich e-maili. Co sprawia, że tracę trochę bezpieczeństwa. Lub 2 - haszuję e-mail ze wszystkimi solami z DB i sprawdzam, czy nie ma dopasowań. Domyślam się, że będzie to strasznie powolne. Więc moje pytanie brzmi: * Co powinienem zrobić? Zoptymalizować bezpieczeństwo czy „czas”? * Może hashowanie e-maili z unikalnymi i losowymi solami w PBKDF2 to za dużo? Jeśli tak, jakiej metody mieszania powinienem użyć? * Czy jest jakieś inne rozwiązanie? PS: Nie opublikowałem żadnego kodu, ponieważ myślę, że jest to raczej dyskusja teoretyczna, ale jeśli potrzebny jest kod, daj mi znać, dodam go.


title: Która licencja open-source jest odpowiednia dla mojego projektu?

text: Próbuję wybrać odpowiednią licencję dla projektu, który chciałbym wydać jako open-source jeszcze w tym roku, ale nie jestem pewien, jaka byłaby najbardziej odpowiednia licencja. Początkowo myślałem o licencji GPLv2, ale nie sądzę, żeby o to mi chodziło. Pracuję nad tym projektem od ponad roku (z przerwami) dla mojej firmy. Pomyślałem, że byłoby wspaniale oddać coś społeczności i chciałbym wydać projekt jako open-source, ale chcę zachować pełną opiekę nad projektem. Moja firma będzie dostarczać treści zarówno bezpłatne, komercyjne, jak i społecznościowe (być może za pomocą GitHub). Oto, czego szukam: * Oryginalne źródło może być rozpowszechniane i rozpowszechniane (dosłownie) zarówno komercyjnie, jak i niekomercyjnie, o ile zachowane są oryginalne informacje o prawach autorskich, link do strony internetowej i licencja. * Nie można zmienić licencji oryginalnego źródła. * Oryginalne źródło może być modyfikowane i rozpowszechniane (komercyjnie i niekomercyjnie) dla określonej aplikacji, ale nie może być rozpowszechniane bez pisemnej zgody oryginalnego autora (mnie). Na przykład deweloper może zmienić źródło dla swojego klienta, ale nie może redystrybuować tej zmiany. Deweloper może jednak zdecydować się na przesłanie swoich modyfikacji do integracji z oryginalnym źródłem. * Motywy i rozszerzenia muszą być objęte licencją typu open source. Każdy programista musi mieć możliwość modyfikowania, rozpowszechniania i redystrybucji wszystkich motywów i rozszerzeń (komercyjnie i niekomercyjnie), jeśli zdecyduje się to zrobić. Zdaję sobie sprawę, że jest mało prawdopodobne, aby istniała licencja, która obejmowałaby wszystkie te punkty, ale coś w tym stylu byłoby fantastyczne. Włożyłem w ten projekt dużo ciężkiej pracy i chociaż z radością się nim dzielę, nie chcę stracić go na rzecz dużej firmy, która ma mnóstwo pieniędzy, żeby się na niego rozlać.


title: Jakie są zalecane zasoby do poznawania modelu Actor systemów współbieżnych?

text: Model współbieżności Aktora wyraźnie zyskuje na popularności. Czy jest dobra książka, która przedstawia schematy i pułapki modelu? Myślę o czymś, co omówiłoby na przykład problemy spójności i poprawności w kontekście setek czy tysięcy niezależnych Aktorów. Byłoby w porządku, gdyby wiązało się to z konkretnym językiem (wyobrażam sobie, że Erlang, ponieważ wydaje się to powszechnie uważane za sprawdzoną implementację Aktorów), ale mam nadzieję na coś więcej niż rozdział lub dwa wprowadzające. Właściwie najbardziej interesują mnie Aktorzy, ponieważ są zaimplementowani w Scali, jeśli są dostępne takie zasoby.


title: Prawidłowa nauka C++ (nie C z klasami)

text: Typowym powodem, dla którego ludzie bash C++ słyszę, jest to, że tak naprawdę nie znają C++, po prostu znają "C z klasami", co najwyraźniej jest inne. Dopiero zaczynam się uczyć C++, jednak chcę faktycznie nauczyć się C++, a nie po prostu "C z klasami". Jak mogę się upewnić, że prawidłowo nauczę się C++? Kilka przykładów byłoby wspaniałych.


title: Jak mogę się upewnić, że piszę C++ tak, jak powinno być napisane?

text: > **Możliwe duplikowanie:** > Jak mogę nauczyć się pisać idiomatyczny C++? Poza oczywistymi odpowiedziami „użyj g++ zamiast gcc i cout zamiast printf”, w jaki sposób mogę się upewnić, że mój projekt zabawki uczy mnie właściwych paradygmatów i wzorców C++? Backstory: Nigdy nie napisałem linijki C++ poza Hello World i wybrałem prosty (choć nieco skomplikowany) przykładowy projekt, który pomoże mi nauczyć się języka. Zdecydowałem, że celem, na którym chcę zakończyć, jest koder CLI Huffmana. Nie musi konkurować z nowoczesnymi kompresorami pod względem szybkości czy wydajności, po prostu wydawało się, że jest to projekt, który pomógłby mi dotknąć wielu aspektów języka naraz. Więc zanim zagłębię się w ten projekt, o jakich rzeczach powinienem pamiętać? Wiele z tego, co zamierzam robić, to badania online i obawiam się, że wiele samouczków to C-in-C++. Szukam odpowiedzi takich jak: „jeśli używasz malloc, prawdopodobnie robisz coś złego” lub „prawdopodobnie powinieneś używać `boost` lub czegoś podobnego”. Szukam również sugestii typu „gdybym to pisał, użyłbym szablonu wokół x”.


title: Znajdź wzór w łańcuchu

text: Jak podejść do następującego pytania: Mamy dwa ciągi: normalny ciąg alfanumeryczny i ciąg wzorców. ciąg wzorca może składać się ze znaków alfanumerycznych plus znak "?" i "*" Chcemy sprawdzić, czy pierwszy ciąg pasuje do wzorca, gdzie ? oznacza, że każdy znak (alfanumeryczny) jest dozwolony na tej pozycji, podczas gdy * pozwala mieć sekwencję znaków alfanumerycznych.


title: Czy muszę zwracać błąd: null w odpowiedzi JSON?

text: Projektując RESTful API, który używa JSON do odpowiadania na żądania, zwykle zwracam taki obiekt, gdy wystąpi błąd: { "error": "Coś się stało", "error_code": "XXX" } Czy muszę mieć `"error": ""` lub `"error": null` w moim obiekcie, gdy nie ma błędu?


title: Walidacja historii użytkowników: Ile zmian to za dużo?

text: Podczas gdy sedno opracowywania wymagań i kryteriów akceptacji w idealnym przypadku miałoby miejsce podczas spotkania planistycznego w celu stworzenia lepszego oszacowania, Scrum zachęca do ciągłej interakcji z właścicielem produktu przez cały sprint w celu walidacji i udoskonalania historyjek użytkownika. * Jakie kryteria są używane do oceny, czy na historyjkę użytkownika w trakcie sprintu narzucono zbyt wiele zmian? * Kiedy należy zmienić wymagania historyjki użytkownika? * Kiedy należy anulować historyjkę użytkownika / sprint w celu ponownej oceny i ponownego oszacowania danej historyjki użytkownika?


title: Czy aplikacje jednostronicowe (cienkie architektury klienta o grubości serwera) zabiją języki po stronie serwera, takie jak Java, C++?

text: Aplikacje jednostronicowe ograniczają serwer do interfejsu API REST. Jeśli SPA są nowoczesnym i lepszym sposobem tworzenia aplikacji internetowych, to czy pewnego dnia JavaScript rządził światem, a języki po stronie serwera, takie jak Java, C++ itp., nie byłyby wybitnymi umiejętnościami, których szukają firmy? A może nadal istnieją części ogromnych i znanych aplikacji internetowych, takich jak youtube, amazon.com, których po prostu nie można przenieść na JavaScript po stronie klienta i nadal będą zależeć od języków po stronie serwera.


title: Sesje w aplikacjach chmurowych są niebezpieczne?

text: Mamy aplikację django hostowaną na heroku. Miałem taką sytuację: 1. Użytkownik wpisał e-mail w formularzu na stronie1. Jeśli e-mail istniał w bazie, został przekierowany na stronę logowania, w przeciwnym razie do strony rejestracji. 2. Na stronie rejestracji formularz został wypełniony tym samym adresem e-mail wpisanym na stronie 1 za pomocą request.session, który został wcześniej wypełniony. **Powiedziano mi, że to niebezpieczne, ponieważ korzystanie z sesji nie jest zalecane w aplikacjach w chmurze. Czy to pojęcie jest poprawne zarówno ogólnie, jak i w powyższym scenariuszu?**


title: Zapisane role kierownika ds. rozwoju oprogramowania

text: Wszyscy wiemy, czym zajmuje się kierownik ds. rozwoju oprogramowania, ale obawiam się, że wiemy to tylko _niewyraźnie_. Wydaje nam się, że wiemy, co robi, ale dokładne wymienienie zakresu zadań jest trochę trudne. Jakie są według Ciebie role menedżera rozwoju oprogramowania?


title: Czy z modułami w stylu AMD w JavaScript są jakieś korzyści dla przestrzeni nazw?

text: Pochodząc z C++ i widząc wielu programistów Javy robiących to samo, wprowadziliśmy przestrzenie nazw do JavaScript. Zobacz bibliotekę zamknięć Google jako przykład, w której mają główną przestrzeń nazw `goog`, a pod nią wiele innych przestrzeni nazw, takich jak goog.async, goog.graphics Ale teraz, po nauczeniu się stylu AMD wymagającego modułów, wydaje się, że przestrzenie nazw są trochę bezcelowe w JavaScript. Nie tylko bez sensu, ale wręcz przeciwnie. Co to jest AMD? Jest to sposób definiowania i włączania modułów, który usuwa wszystkie bezpośrednie zależności. Skutecznie robisz to // jakaś/moduł.js define([ 'nazwa/potrzebny/moduł', 'nazwa/jakiego/potrzebnego/modułu', ], function( RefToNeededModule, RefToSomeInneNeededModule) { ...kod. .. zwróć obiekt lub funkcję }); Ten format pozwala kodowi wsparcia AMD wiedzieć, że ten moduł wymaga załadowania `name/of/needed/module.js` i `name/of/someother/needed/module.js`. Kod AMD może załadować wszystkie moduły, a następnie, zakładając brak zależności cyklicznych, wywołać funkcję `define` na każdym module we właściwej kolejności, zapisać obiekt/funkcję zwracaną przez moduł podczas jego wywoływania, a następnie wywoływać inne moduły ' `definiuj` funkcję z odniesieniami do tych modułów. Wydaje się, że eliminuje to potrzebę przestrzeni nazw. W swoim własnym kodzie możesz wywołać odwołanie do dowolnego innego modułu, co tylko chcesz. Na przykład, jeśli masz 2 biblioteki stringów, nawet jeśli definiują one podobne funkcje, o ile są zgodne z wzorcem AMD, możesz z łatwością używać obu w tym samym module. Nie ma potrzeby tworzenia przestrzeni nazw, aby to rozwiązać. Oznacza to również, że nie ma zakodowanych zależności. Na przykład w zamknięciu Google każdy moduł może bezpośrednio odwoływać się do innego modułu za pomocą czegoś takiego jak `var value = goog.math.someMathFunc(otherValue)` i jeśli masz pecha, zadziała magicznie, gdzie tak jak w stylu AMD musiałbyś wyraźnie dołączyć biblioteka math, w przeciwnym razie moduł nie miałby do niej odniesienia, ponieważ AMD nie ma globalnych. Poza tym wstrzykiwanie zależności do testowania staje się łatwe. Żaden kod w module AMD nie odwołuje się do przestrzeni nazw, więc nie ma zakodowanych na sztywno ścieżek przestrzeni nazw, można łatwo kpić z klas w czasie testowania. Czy jest jakiś inny punkt w przestrzeniach nazw, czy jest to coś, co programiści C++ / Java wnoszą do JavaScript, co prawdopodobnie tak naprawdę nie pasuje?


title: Co mogę zrobić z wieloma współpracownikami, którzy nieustannie kwestionują moją wiedzę?

text: W mojej obecnej pracy mam współpracowników, którzy wciąż zadają mi pytania na rozmowę kwalifikacyjną, mimo że pracuję tam od 6 miesięcy. Myślałem, że to się skończy po tym, jak zostanę zatrudniony, ale potem to trwało i trwało. Przerażające jest to, że to właśnie ci, którzy są kiepskimi programistami (menedżer i kilku innych facetów), robią to najwięcej. Jak mam sobie poradzić z tą sytuacją? PS Z pewnością widziałem to na innych stanowiskach w przeszłości, ale zwykle jest tylko jeden palant z chipem na swoim, kto to robi. Tutaj jest wielu ludzi.


title: Czy potrzebuję odpowiednika, aby MAMP działał jako serwer Ruby?

text: Dopiero zaczynam się uczyć Rubiego i chcę zrobić coś, co wymaga DB, ale nie jestem pewien, czy MAMP zadziała, czy potrzebuję czegoś innego?


title: Czy właściwe jest tworzenie User Story w celu usunięcia małych fragmentów istniejącej funkcjonalności?

text: W przypadku obszaru aplikacji, który został opracowany, przyszło żądanie usunięcia elementu z menu. Wiem, że to drobnostka, ale jak traktujesz to w Scrumie? Jestem przyzwyczajony do używania historii użytkownika do dodawania funkcjonalności, a nie do jej usuwania. Więc moje pytanie brzmi, czy powinienem stworzyć do tego historyjkę użytkownika, w jakiś sposób sformułowaną w celu usunięcia przycisku? A może jest lepszy sposób lub poradzenie sobie z tym? Dzięki, Paul.


title: Czy w Haskell jest bezpieczne zapisywanie struktury danych do pliku za pomocą "pokazu" i odzyskiwanie go za pomocą "odczytu"?

text: Powiedzmy, że mam następujące typy: type EndsTup = (Int,Int) -- (indeks zależny od początku lub końca, Frequency) type FreqTup = (Char, [EndsTup], [EndsTup]) -- (Character, Freqs from start, Freqs from end) wpisz FreqData = [FreqTup] -- 1 wpis na liście dla każdej litery, której używam do przechowywania danych dotyczących częstotliwości pozycji znaku w słowie. Jeśli chcę następnie zapisać to do pliku, czy jest to bezpieczne (jak gwarantuje to, że nie zostanie uszkodzony, jeśli jest napisane bez błędów), przekonwertować strukturę na ciąg znaków za pomocą show, a następnie odczytać go za pomocą czegoś takiego: readData <- readFile filePath let reconstructed = read readData :: FreqData Pytam tylko dlatego, że wydaje się to "zbyt łatwe". Czy tak się to zwykle robi?


title: Jak uzyskać przystępny cenowo programowalny zestaw na papierze elektronicznym lub podobny?

text: Jestem naprawdę zainteresowany zabawą z technologią papieru elektronicznego, ale tak naprawdę nie chcę programować żadnego komercyjnego urządzenia (kindle lub cokolwiek innego). Mam kilka pomysłów i chcę zacząć. Jak uzyskać ekran papieru elektronicznego, chip i jak rozpocząć jego programowanie (język, interfejs)


title: Gdzie powinniśmy umieścić walidację dla modelu domeny

text: Nadal szukam najlepszych praktyk w zakresie walidacji modelu domeny. Czy dobrze jest umieścić walidację w konstruktorze modelu domeny? mój przykład walidacji modelu domeny w następujący sposób: public class Order { private readonly List<OrderLine> _lineItems; publiczny Klient wirtualny Klient { get; zestaw prywatny; } public virtual DateTime DataZamówienia { get; zestaw prywatny; } public wirtualny dziesiętny OrderTotal { get; zestaw prywatny; } Zamówienie publiczne (Klient klient) { if (klient == null) wyrzuć nowy ArgumentException("Nazwa klienta musi być zdefiniowana"); Klient = Klient; DataZamówienia = DataCzas.Teraz; _lineItems = nowa lista<LineItem>(); } public void AddOderLine //.... public IEnumerable<OrderLine> AddOderLine { get {return _lineItems;} } } public class OrderLine { public virtual Order Order { get; ustawić; } publiczny produkt wirtualny Produkt { get; ustawić; } public virtual int Ilość { get; ustawić; } public wirtualny dziesiętny CenaJednostkowa { get; ustawić; } public OrderLine(Zamówienie, int ilość, Produkt produkt) { if (order == null) throw new ArgumentException("Nazwa zamówienia musi być zdefiniowana"); if (ilość <= 0) wyrzuć nowy ArgumentException("Ilość musi być większa od zera"); if (product == null) throw new ArgumentException("Nazwa produktu musi być zdefiniowana"); Zamówienie = zamówienie; Ilość = ilość; Produkt = produkt; } } Dziękuję za wszystkie sugestie.


title: Prawne zastosowania kodeksu metamorficznego

text: Po pierwsze, chciałbym stwierdzić, że rozumiem już aplikacje 'vx' dla kodu metamorficznego. Nie jestem tutaj, aby zadać pytanie związane z którymkolwiek z tych tematów, ponieważ byłoby to niewłaściwe w tym kontekście. Chciałbym wiedzieć, czy ktoś kiedykolwiek używał kodu „metamorficznego” w praktyce, do celów innych niż wymienione wcześniej, a jeśli tak, to jakie było uzasadnienie użycia tej koncepcji. Zasadniczo staram się odkryć cel tej koncepcji, jeśli w ogóle, inny niż obejście skanerów antywirusowych i tym podobnych.


title: Czy programiści w zespole mają kiedykolwiek „osobistą” kontrolę wersji?

text: Zakładam, że po pewnym czasie wielu programistów pozna/pokocha konkretny system VCS. Co się stanie, jeśli znajdziesz się w zespole używającym niekompatybilnego systemu – czy uczysz się nowego systemu i dostosowujesz swój przepływ pracy do zespołu, czy też zachowujesz stary system i starasz się, aby obaj pracowali razem? Uderza mnie, że jest to albo bardzo powszechna strategia, albo poważne faux pas. Jestem nowy w tworzeniu oprogramowania, więc to pytanie jest dla mnie jak na razie czysto hipotetyczne. Chociaż moje przeczucie mówi mi, że zdecentralizowana struktura i przyjazny dla gałęzi charakter git/Mercurial przemówiłby do mnie bardziej niż bardzo scentralizowany Vault, którego używa moja grupa, nie wiem wystarczająco dużo o pracy z ogólną kontrolą wersji, aby wolą każdy system na inny, więc będę się trzymał tego, co zespół prowadzi w dającej się przewidzieć przyszłości. Ale skłania mnie to do zastanowienia się, jak często programiści, którzy uczą się nowego systemu VCS, wprowadzają coś w rodzaju „hybrydy” obu systemów – używają swojego preferowanego systemu lokalnie do zarządzania tym, nad czym pracują, i tak naprawdę używają tylko system dla całego zespołu do zatwierdzenia/aktualizacji. To oczywiście prowadzi do kolejnych pytań – czy istnieje ustalony wzorzec pracy z dwoma systemami jednocześnie? Jak radzisz sobie z faktem, że Twoje lokalne repozytorium nie ma dostępu do pełnej historii projektu? Itp...


title: która jest najlepszą technologią do tworzenia UI dla aplikacji Desktop w java

text: Chcę stworzyć aplikację desktopową przy użyciu języka Java. Chcę wiedzieć, jakie są najlepsze technologie do tworzenia interfejsu użytkownika (swing, swt itp.)?


title: Optymalizacja pobierania wiadomości

text: Mam skrobak do zgarniania wiadomości z różnych źródeł w wp7. Moje obecne podejście do tego jest następujące: * ładowanie informacji z gazet z pliku xml. * przejdź do określonych sekcji i pobierz adresy URL wiadomości. * przejdź do każdego adresu URL i pobierz nagłówek, obraz, wydawcę. * wyświetlacz przy użyciu architektury MVVM telefonu z systemem Windows. Cała sprawa odbywa się asynchronicznie... czyli po pobraniu adresu URL z sekcji gazety jest on dodawany do kolejki i rozpoczyna się drugi etap polegający na pobieraniu nagłówka, obrazu itp. i zaraz po jego pobraniu nawet dla jednego artykułu jest wyświetlany. Później, gdy pobieranych jest więcej artykułów, są one dodawane do listy. Do pobierania używam SmartThreadPool (http://www.codeproject.com/Articles/7933/Smart-Thread-Pool) dla telefonu z systemem Windows. Mój problem polega na tym, że… nawet pobranie około 80 pozycji (w sumie) z 9 publikacji zajmuje ponad minutę. Jak mogę przyspieszyć procedurę? Uwaga: mam podejście dwuetapowe, ponieważ wiele razy obrazy nie są dostępne z nagłówkami i znajdują się tylko w artykule.


title: Czy na rozmowę kwalifikacyjną powinienem wybrać C czy C++?

text: Znam trochę zarówno C, jak i C++. Zakładam, że wiele osób, które znają C++, zna również C. Zastanawiam się, jaki język powinienem wybrać do kodowania podczas rozmowy kwalifikacyjnej. C, ponieważ szybciej jest zrobić działający program w C, ponieważ nie musisz się martwić o to, jakie obiekty powinien mieć Twój system itp., jak w C++ (chociaż wielu doświadczonych programistów C++ może zakodować swoje rozwiązanie w C++ tylko w tyle samo czasu)? Lub C++, ponieważ wtedy nie przejmujesz się zbytnio przekazywaniem parametru przez parametr i możesz po prostu przekazać obiekt itp. i możesz wykorzystać istniejącą bibliotekę ciągów itp.?


title: Czy frameworki są potrzebne w PHP?

text: Czy frameworki są naprawdę potrzebne w PHP? Jakie są zalety i wady korzystania z jednego?


title: Co zrobić, gdy nowy zespół prowadzi projekt z problemami z utrzymaniem?

text: Właśnie zostałem odpowiedzialny za projekt kodu z problemami z utrzymaniem. Co mogę zrobić, aby projekt stał się stabilny? Znalazłem się w miejscu, w którym pracujemy z bardzo dużym wielowarstwowym systemem .NET, w którym brakuje wielu ważnych rzeczy, takich jak testy jednostkowe, IOC, MEF, zbyt wiele klas statycznych, czyste zestawy danych itp. tylko 24 lata, ale jestem tu od prawie trzech lat (ta aplikacja jest rozwijana od 5) i głównie z powodu ograniczeń czasowych po prostu dodaliśmy więcej gówna, aby pasowało do drugiego gówna. Po wykonaniu kilku projektów w wolnym czasie zacząłem rozumieć, jak ważne są wszystkie te pojęcia. Również ze względu na zmianę pracowników czuję się teraz kierownikiem zespołu w tym projekcie i naprawdę chcę wymyślić kilka sprytnych sposobów na ulepszenie tej aplikacji. Sposoby wyjaśniania wartości kierownictwu. Mam pomysły na to, co chciałbym zrobić, ale wszystkie wydają się tak przytłaczające, bez większego zysku. Wszelkie historie o tym, jak ludzie sobie z tym poradzili lub poradziliby sobie z tym, byłyby bardzo interesującą lekturą. Dziękuję.


title: Początkujący programista .NET rozpaczliwie szukający porady

text: Staję się trochę zdesperowany. Mam 23 lata i od trzech miesięcy pracuję jako programista dla brytyjskiej firmy, która rozwija system zarządzania rozrywką. Przed tą pracą nigdy nie byłem programistą i po prostu wykonałem kilka mniejszych projektów uniwersyteckich i jeden projekt ASP.NET, którego nie ukończyłem. Programowałem w C#, ale teraz przeniosłem się na VB.NET, ponieważ większość projektów w tej firmie jest oparta na VB. Wiem, że moja wiedza jest bardzo ograniczona, jeśli chodzi o projektowanie oprogramowania, rozwój, bazy danych i wszystko inne. Odpowiedzialność tutaj jest dość duża dla nowicjusza, jestem jedynym programistą, który rozwija cały pakiet (7 programów, wszystkie aplikacje desktopowe) i kiedy jestem coraz lepszy w naprawianiu błędów i dodawaniu zadań, muszę dodać cały komponent do dwóch ich systemów i teraz czuję, że jestem beznadziejny (zrobiliśmy nowe wydanie podczas mojej pracy w ciągu tych trzech miesięcy). Myślę, że mam słabość w wiązaniu danych, co powoduje powolny postęp w dodawaniu tego komponentu! Chociaż uwielbiam kodować i wcale bym się tym nie zmęczył (kiedy idę do domu też mam swoje domowe kodowanie dla zabawy), przyszło mi do głowy, że może nie jestem wystarczająco inteligentny do tej pracy. Czy doświadczeni programiści mogą mi pomóc w tej kwestii i doradzić, jak stawać się coraz lepszym? Co zrobiliście w swoim pierwszym rozwoju kariery? Jakie były problemy?


title: Jak sprawić, by ludzie początkujący w programowaniu przestali zadawać mi pytania i rozpraszać mnie?

text: Jestem teraz w liceum i jako jedyna w klasie mam doświadczenie w programowaniu. Z tego powodu ludzie ciągle mnie rozpraszają, gdy piszę kod, prosząc mnie o rozwiązanie problemu. Zwykle odpowiadam: „Nie wiem, nigdy tego nie używam”, ale nie chcę okłamywać ludzi. Innym problemem jest to, że stałem się z tego tak znany, że nawet uczniowie z innych klas zadają mi pytania. Uważam to za cholernie irytujące. Po trzecie, jeśli rozwiążę za nich problem, niczego się z tego nie nauczą. Jak powstrzymać ludzi przed życzliwym zadawaniem mi pytań związanych z programowaniem?


title: Jaki jest najlepszy pomysł na umieszczenie dostępnego systemu operacyjnego (linux) i aplikacji internetowej na kliencie?

text: Po roku programowania internetowego systemu zarządzania biznesem, mój pomysł został podzielony na dwa różne sposoby robienia tego, co robię... Postaram się wyjaśnić w następujących wierszach: **Najpierw opiszę moje środowisko:** * Serwer WWW: _apache, ngynx_ * Język programowania: _PHP, Shell Script, Java Script, SQL_ * Baza danych: _Mysql_ * System operacyjny: _Linux, UNIX (wszystkie dystrybucje) (jeśli ręcznie skonfigurowany działa w systemie Windows)_ * Serwer uwierzytelniania: _FreeRadius_ ** Pierwsza sytuacja** Mam swoją aplikację działającą w tym środowisku, które właśnie opisałem wcześniej, ponieważ moja aplikacja jest aplikacją SaaS, potem mam własny serwer, aby to wszystko uruchomić, a klienci płacą za korzystanie z niej jako z usługi dostępnej przez przeglądarkę internetową. **Druga sytuacja** Tak samo jak poprzednio, ale z jedną dużą różnicą, wszystko (środowisko) jest zainstalowane w kliencie, następnie muszę zaszyfrować wszystkie moje kody (w tym PHP i skrypty powłoki). Myślę, że ta sytuacja jest najtrudniejsza, ale chciałbym ją poznać z różnych punktów widzenia.


title: Przykłady projektów innych niż open source na Bitbucket lub Github

text: Potrzebujesz przykładów, aby pokazać kierownictwu, że są one używane do kontroli źródeł i skutecznego tworzenia kopii zapasowych projektów. Będą się martwić, że ich kod źródłowy znajduje się poza witryną. Jeśli istnieją dobre przykłady, myślę, że może to pomóc w przekonaniu ich do rozważenia tego jako opcji.


title: Aktualizacja PHP Riak w miejscu

text: Z tego, co widzę, kiedy używam Riaka do aktualizacji obiektu, najpierw muszę załadować obiekt do PHP, następnie go edytować, a następnie zapisać obiekt z powrotem w bazie danych Riak. Zastanawiałem się, czy istnieje sposób na zaktualizowanie wiaderka bez wcześniejszego wciągania go do PHP. W ten sposób zaoszczędziłoby to na sieci I/O i opóźnieniu wciągnięcia go do skryptu PHP. Czy obiekty można edytować bezpośrednio po stronie Riak? Edycja: Czy istnieje możliwość wypchnięcia danych na koniec obiektu raik, więc jeśli mam obiekt, który jest tablicą numeryczną, czy mogę popchnąć, aby dodać temat, o którym wiem, że go nie ma lub nie ma żadnych aktualizacji