title: BA Informatyka vs BS Inf Tech?

text: Czy rekruter wolałby mieć licencjat z Comp Science na bardziej prestiżowym uniwersytecie, czy licencjat z Inf Tech na przeciętnym uniwersytecie? Czy miałoby to znaczenie dla kogoś już działającego w branży z dużym doświadczeniem? Jedyną różnicą w BA i BS jest zasadniczo matematyka. BS jest nastawiony na tych, którzy wybierają się na studia magisterskie, chociaż nie jest wykluczone, że udają się na studia magisterskie z licencjatem, wiele z nich wymaga więcej matematyki. Tylko dla tych, którzy są ciekawi, stopień technologii informacyjnej jest zwykle bardziej nastawiony na rzeczywiste problemy, niż informatyka i jej jakość będą się znacznie różnić. Niektóre programy inf tech są tak dogłębne, jak stopień ABET CS, technologia informacyjna Drexel wygląda na niezwykle silną. Management Information Systems jest zazwyczaj dostarczany przez szkołę biznesu i jest bardziej tradycyjnym stopniem biznesowym. Nie jestem pewien, jak dobrze rekruterzy/g.p są zorientowani w rzeczywistych różnicach we wszystkich tych programach. Niektóre programy spoza ABET BS Comp Science mogą wymagać tylko 1 lub 2 rachunku różniczkowego w porównaniu z certyfikowanymi programami ABET.


title: Czy naprawianie błędów popełnianych przez inne osoby to dobre podejście?

text: Załóżmy sytuację, w której czteroosobowy zespół programistów buduje aplikację. W fazie testowania błędy są zgłaszane przez użytkowników. Kto powinien je naprawić? Osoba, która popełniła błędny kod, czy ktokolwiek wolny? Jakie jest preferowane podejście w zwinnym rozwoju (scrum)?


title: Wybór odpowiedniego programisty wśród klasy studentów

text: Jestem studentem CS, ale w zeszłym roku dostałem pracę programisty i bardzo mi się to podoba. Obecnie jesteśmy 3 programistami w dziale rozwoju firmy i musimy pracować z prawie wszystkim, o co poproszono. Zajmujemy się wieloma różnymi językami i uczymy się ich w razie potrzeby do szybkich prac itp. Chcemy zatrudnić czwartego programistę i zostałem poproszony o zasugerowanie kilku uczniów z mojej klasy, młodszych o rok, ponieważ oblałem zajęcia. Tak naprawdę nie znam żadnego z tych facetów poza kolegami z drużyny, których nie sugerowałbym. Tak naprawdę nie chcemy przeprowadzać z nimi wszystkich wywiadów, więc pomyślałem, że możemy zrobić małe wyzwanie, które pomoże nam wybrać, z kim przeprowadzić wywiad. Potrzebujemy kogoś, kto rozumie biznes, nawet jeśli jest w nim nowy, i lubi uczyć się nowych rzeczy i kodować. Masz pomysł na wyzwanie programistyczne lub coś w rodzaju listu z informacją, dlaczego powinniśmy je podjąć? TL; DR: Potrzebujemy nowego programisty licencjackiego, chcemy, aby najlepsi przyszli do nas bez przeprowadzania wywiadów z nimi wszystkimi. Jakieś wyzwanie lub test, który mógłbyś zaproponować?


title: System śledzenia problemów według funkcji/metody

text: Często uważam, że wygodniej byłoby, gdyby w ramach systemu śledzenia problemów każdy problem był przypisany do określonej funkcji/metody. Następnie możemy łatwo wypisać wszystkie kwestie związane z daną funkcją/metodą. Wiele kwestii można jednoznacznie przypisać określonej funkcji/metodzie. Czasami możemy chcieć spojrzeć na sprawy posortowane według czasu opublikowania/edycji lub według ważności, a innym razem chcemy przejrzeć tylko kwestie związane z określoną funkcją/metodą. Oczywiście system można zaprojektować tak, aby móc wyświetlać je również w sposób mieszany. Są też kwestie, które nie należą do konkretnej funkcji/metody, ale można je pogrupować w jakąś ogólną grupę. 1. Czy istnieje taki system śledzenia problemów? 2. Czy jest jakiś problem z takim systemem. Jeśli tak, jakie są problemy?


title: Jakie są opcje prostych wywołań Ajax dla aplikacji internetowej Java?

text: Mam bardzo prostą potrzebę i nie wiem, jakie są dostępne opcje. Upraszczając, użytkownicy widzą stronę taką jak ten serwer przez serwer aplikacji Java: > [-] czerwony > [x] zielony > [-] niebieski > [-] żółty > > Wybrany kolor to zielony A potem chcę, aby użytkownik mieć możliwość wybrania koloru żółtego i zmiany części strony zawierającej odpowiedni tekst na: > [-] czerwony > [-] zielony > [-] niebieski > [x] żółty > > Wybrany kolor jest żółty Zasadniczo ja chcesz czegoś bardziej przyjaznego dla użytkownika niż zwykłe używanie HTTP GET przez cały czas. Powinno istnieć wiele opcji, z których użytkownik może wybierać, a to wpłynie na tekst (w formacie HTML) wyświetlany na stronie. I chcę, aby użytkownik jak najszybciej zobaczył swoją zmianę, bez konieczności pełnego przeładowania strony i bez przekierowania na inną stronę. Powinna istnieć podróż w obie strony klient/serwer (informacje do wyświetlenia w zależności od wybranych opcji nie są dostępne po stronie klienta, więc nie mogę tego wszystkiego zrobić w JavaScript w przeglądarce). Chciałbym używać żądań Ajax, ale nie wiem, w którą stronę iść: * jQuery * GWT * coś innego Jakie są moje opcje i jakie byłyby zalety i wady różnych podejść? PS: Jestem bardzo zaznajomiony z Javą (SCP od zeszłego wieku i zasadniczo jestem programistą Javy przez ostatnie 12 lat), ale w ogóle nie jestem zaznajomiony z JavaScript (chociaż zhakowałem kilka wywołań Ajaxy lata temu, tak zanim istniały wielkie biblioteki).


title: Jakie są dobre pytania techniczne, które należy zadać, aby określić umiejętności analityczne programisty?

text: Jestem rekruterem nietechnicznym i chcę zadać kilka pytań wstępnych do rozmowy kwalifikacyjnej, z których jednym jest określenie umiejętności analitycznych osoby. Wkrótce rozpoczniemy proces rekrutacji programistów i opracowujemy najlepsze pytania. Przeczytałem tutaj sporo postów, które sugerowały, jak przeprowadzać wywiady z programistami, ale nie natknąłem się na pytanie, jakie pytanie techniczne zadać, które nietechniczni rekruterzy mogą łatwo zrozumieć, czy odpowiedź jest dobra czy zła.


title: Czy JSF jest naprawdę gotowy do dostarczania wysokowydajnych aplikacji internetowych?

text: Słyszałem wiele dobrego o JSF, ale z tego, co wiem, ludzie mieli w przeszłości wiele poważnych skarg na tę technologię, nie zdając sobie sprawy, jak bardzo sytuacja się poprawiła. Rozważamy JSF jako prawdopodobną technologię dla projektu sieci społecznościowej. Ale nie znamy wyników JSF ani nie mogliśmy znaleźć żadnej istniejącej witryny o wysokiej wydajności, która korzystała z JSF. Ludzie narzekają na problemy ze skalowalnością wydajności. Nadal nie jesteśmy pewni, czy robimy dobrze, wybierając jsf, dlatego chcielibyśmy usłyszeć od Ciebie o tym wszystko i wziąć pod uwagę Twoje uwagi. Czy możliwe jest skonfigurowanie JSF tak, aby spełniało wysokie wymagania dotyczące wydajności serwisu społecznościowego? Także do jakiego stopnia możliwe jest przetrwanie przy obecnych problemach JSF. Jakie dokładnie są jego problemy? * * * **Nie martwię się** złożonością programowania z JSF, na co zwykle narzekają inni, ponieważ zgodnie z moim osobistym doświadczeniem uważam, że to wcale nie jest prawda, ale bardziej martwię się o to, jakie problemy z wydajnością i skalowalnością. I proszę, nie nadużywaj go tylko w starych problemach powiązanych z poprzednimi wersjami. Po prostu dbam o obecny stan, bez względu na to, jaka była jego przeszłość.


title: Czy można po prostu dodać jedną lub dwie strony PHP, aby dodać jakąś funkcjonalność do witryny Drupal?

text: Naprawdę nie znam Drupala. Mogę grzebać w interfejsie administratora i nawigować po katalogach i znajdować pliki, które również są potrzebne. To, czego _naprawdę_ nie jestem zaznajomiony, to dodawanie modułów lub rozszerzanie modułów. Witryna obecnie przyjmuje zamówienie i konfiguruje płatności cykliczne za pośrednictwem Ubercart i używa Authorize.net jako bramy. W tej chwili, gdy płatność się nie powiedzie, do administratora wysyłany jest pojedynczy e-mail. Chcielibyśmy go rozszerzyć o wysłanie e-maila do użytkownika i umożliwienie mu zmiany informacji o płatnościach za pośrednictwem innej strony w witrynie. Authorize ma usługę o nazwie Silent Post URL, która po prostu publikuje kopię w formacie XML do dowolnego adresu URL, który jej podasz. Chcielibyśmy zaakceptować ten XML, zdeserializować go, przeanalizować dane, wysłać powiadomienie do użytkownika i dać mu stronę do aktualizacji informacji. Więc chyba będą to dwie strony PHP. Jeden dla wywołania interfejsu API XML z Authorize.net, a drugi dla strony, na której użytkownicy mogą aktualizować informacje o płatnościach. Czy mogę po prostu stworzyć dwie proste strony, z których każda obsługuje swoje własne zadania, czy też powinienem sprawdzić, jak prawidłowo rozszerzać moduł? Jeśli właściwe jest dla mnie pisanie stron bez konieczności podłączania ich do modułu, jaki byłby najlepszy sposób na skonfigurowanie tego, co należy zrobić? (Największe doświadczenie, jakie miałem z rozszerzaniem strony PHP, to włamywanie się do czyjegoś źle skonstruowanego, niestandardowego frameworka, więc jeśli ktoś ma dobre zasoby, być może na temat najlepszych praktyk PHP, którymi mógłby się podzielić przez PW lub komentarz, Byłbym wdzięczny) (Ponadto nadal rozumiem wymianę stosów, więc jeśli to nie jest właściwe, daj mi znać. Usunę to.)


title: Jak rygorystyczne są standardowe umowy dotyczące własności intelektualnej pracodawcy dotyczące kodowania poza pracą?

text: Prowadzę negocjacje o stanowisko w dużej korporacji i czytam ich warunki zatrudnienia. W swojej sekcji IP/prawa autorskie stwierdzają, że wszystko, co robię poza pracą, które jest „podobne” do tego, co wykonuję w pracy, jest również ich. Rozumiem, że ochrona ich jest celowo bardzo niejasna, ale jestem też trochę zdenerwowana, że można to nadużyć. Sposób, w jaki to czytam, wszystko, co tworzę poza pracą, również można by twierdzić, ponieważ podpadałoby to pod „programowanie”. Czy to stosunkowo standardowe? Czy mogę negocjować bardziej szczegółowe warunki (zapytałem, czy mogę uzyskać wyjaśnienia)? Czy powinienem się martwić, że mogą to nadużyć? Po prostu nie chcę zostać złapany w sytuacji, w której wpadnie na (potencjalnie) świetny pomysł poza pracą, a oni spadną w dół i roszczą sobie do niego pretensje. **EDYTUJ:** Aby trochę pomóc, oto części, o których mowa: _"W przypadku uznania, że jakakolwiek 'praca' nie jest pracą do wynajęcia, niniejszym ceduję i nieodwołalnie zgadzam się na przeniesienie wszelkich praw, tytułów, i zainteresowanie taką „pracą” dla „firmy”” _ Gdzie praca jest kodem, produktami dostarczalnymi, projektami, patentami itp. Następna sekcja mówi: _ „jeśli w ocenie „firmy”, jakakolwiek taka „praca” ' nie odnosi się do działań biznesowych lub prac badawczo-rozwojowych, w które w okresie mojego zatrudnienia 'firma' jest faktycznie zaangażowana lub można oczekiwać, że zostanie zaangażowana, niniejsza Umowa nie zobowiązuje mnie do cesji takich pozycji. „_ który zasadniczo mówi, że mogę zachować prawa do oprogramowania, którego dla nich nie tworzę, według ich uznania. Zasadniczo chcę sprawdzić, czy jest to dość standardowa umowa i czy jest to coś, co można wykorzystać do ugryzienia mnie w ogon w przyszłości.


title: Jak oceniłbyś profil programisty na Github?

text: Wiele osób ze społeczności open source twierdzi, że podczas zatrudniania zdecydowanie bierze pod uwagę profil kandydata na Github. Jestem aktywny na Github, z kilkoma własnymi projektami i kilkoma wkładami do innych. Ale patrząc na swój profil, jakbym był pracodawcą, widzę dużo szumu: projekty, które sklonowałem, ale nigdy nie wniosłem wkładu itp. Projekty i łatki, z których jestem dumny, nie wyróżniają się. Jeśli oceniasz profile ludzi na Github, jak to robisz? A jako programista powinienem zrobić coś inaczej - na przykład usunąć sklonowane repozytoria, nad którymi nie pracuję?


title: Jaka jest różnica między Windows 8, WinRT i Windows RT?

text: Właśnie przeczytałem, że będą dostępne dwie wersje Windows: **Windows RT** i **Windows 8**. Czy ktoś mógłby opisać, jakie są różnice między **Windows RT** a **Windows 8**? A jak te różnice mogą wpłynąć na programistów tworzących aplikacje dla jednego lub drugiego? Co to jest **WinRT**?


title: Jak programowanie wpływa na zdolności przestrzenne?

text: ## Tło Im dłużej pracuję nad projektem, tym mniej jest on jasny. To tak, jakbym nie mógł już w głowie rozdzielać różnych klas/obiektów. Wszystko zaczyna się mieszać i niezwykle trudno jest to wszystko ponownie rozebrać. Zaczynam umieszczać funkcje w klasach, do których tak naprawdę nie pasują i popełniam głupie błędy, takie jak pisanie kodu, który później okazał się w 100% przestarzały; rzeczy nie dają się już wyraźnie odwzorować w mojej głowie. Dopiero, gdy cofnę się o kilka godzin (a czasem dni!), mogę rzeczywiście zobaczyć, co się dzieje, i być produktywnym. Zwykle staram się z tym walczyć, jestem tak pasjonatem kodowania, że nie wiedziałbym, co jeszcze mógłbym robić. W tym momencie rzeczy mogą stać się naprawdę dziwne, tak się rozkręcam, że tracę kontakt z rzeczywistością (do pewnego stopnia), że różne działania, takie jak nalewanie szklanki wody, nie mają już miejsca na świadomym poziomie. Dzieje się to na autopilocie, podczas którego prawie całą moją świadomą koncentrację (czy to w ogóle coś?) poświęcam na rozwiązywanie granicznych, bezsensownych problemów (próba odseparowania elementów kodu). To jest jak przegrana bitwa. Więc jakiś czas temu zrobiłem test IQ (Skala Inteligencji Dorosłych Wechslera, jak sądzę) i okazało się, że moje zdolności przestrzenne są dość niskie. Nadal mam przyzwoity **całkowity** wynik, nieco powyżej średniej, więc nie będę musiał grzebać kijem na życie, ale trochę się martwię, że jest to taka przeszkoda podczas pisania/inżynierii programów komputerowych że nigdy nie będę w stanie zrobić tego poważnie ani zawodowo. ## Pytanie Bardzo mnie interesuje, co myślą o tym inni ludzie... **Czy niskie uzdolnienia przestrzenne mogą być przyczyną wyżej opisanych problemów?** **W jaki sposób uzdolnienie przestrzenne wpływa na programowanie?** Może ja powinien wyglądać bardziej w stylu ADD lub czegoś podobnego, ponieważ zdiagnozowano u mnie ADD w wieku 17 lat (5 lat temu), ale lek, który otrzymałem, nie wydawał się mieć na mnie większego wpływu, więc nigdy nie wziąłem tego wszystkiego tak poważne. O ile wiem, ludzie rodzą się z niskimi/średnimi/wysokimi zdolnościami przestrzennymi, więc myślę, że ciekawie jest dowiedzieć się, czy ci, którzy mają więcej szczęścia, są lepszymi programistami z urodzenia.


title: Jak przenieść pliki na produkcję?

text: Jesteśmy grupą, która rozpoczęła pracę nad dość dużym serwisem z istniejącym kodem. Posiadamy serwer testowy i produkcyjny. Naszą ideą jest posiadanie repozytorium testowego z wieloma programistami mającymi dostęp w trybie push; i błogosławione repozytorium, do którego tylko nieliczni mogą pchać. Błogosławione repozytorium ma być zawsze stabilne i reprezentować najnowszą wersję produkcyjną. Jak zautomatyzować proces przenoszenia plików do produkcji? Czy źle jest mieć pliki produkcyjne pod kontrolą wersji? W ten sposób pchanie do błogosławionego repozytorium oznaczałoby wdrożenie. Ale co się dzieje, gdy pojawiają się konflikty scalania? Czy serwer produkcyjny zepsuje się, dopóki nie zostanie rozwiązany?


title: Czy istnieją jakieś ograniczenia dotyczące używania WinRT zamiast .Net?

text: Z mojego zrozumienia, tworzenie aplikacji działającej na wielu architekturach wymaga wirtualizacji, a wirtualizacja zmniejsza wydajność, ponieważ tworzy warstwę abstrakcji. Czy w systemie Windows 8 obsługującym architekturę Intel i ARM powinniśmy spodziewać się niższej wydajności z aplikacją WinRT w porównaniu z aplikacją .Net działającą na urządzeniu Intel? Czy WinRT będzie obsługiwać łączność z bazą danych i dostęp do usługi Active Directory?


title: Nie znaleziono strony: 404 — najlepsza treść do umieszczenia na tej stronie

text: Czy dasz mi znać, jaki rodzaj treści powinienem umieścić na stronie błędu, np. „Nie znaleziono strony 404”? **Przykład:** „Niestety podczas przetwarzania żądania strony wystąpił błąd”. "Nie znaleziono strony! Sprawdź adres URL" "Przepraszamy, wystąpił błąd! Spróbuj ponownie." „Przepraszamy, nie mogliśmy znaleźć żądanej strony”. Treść powinna być z perspektywy użytkownika docelowego. Oznacza, że docelowy użytkownik powinien łatwo zrozumieć, co się dzieje i co powinien zrobić?


title: Wydanie projektu open source bez wstydu

text: Od dłuższego czasu pracuję sam nad dość dużym projektem open source i zbliża się on do punktu, w którym chciałbym go wydać. Jestem jednak samoukiem i tak naprawdę nie znam nikogo, kto mógłby odpowiednio zrecenzować mój projekt. Kilka lat temu na forum, na którym go wypuściłem, wypuściłem mały fragment kodu, który w dużym stopniu został rozerwany (w sensie krytycznym). Mimo że kod działał, krytyka była dokładna, ale brutalna. To skłoniło mnie do poszukiwania najlepszych praktyk na wszystko i w końcu czuję, że uczyniło mnie znacznie lepszym programistą. Przejrzałem wszystko w moim projekcie tak wiele razy, starając się uczynić go idealnym, że straciłem rachubę. Wierzę w mój projekt i myślę, że ma on potencjał, aby pomóc wielu ludziom i czuję, że zrobiłem z nim kilka fajnych rzeczy w interesujący sposób. Mimo to, ponieważ jestem samoukiem, nie mogę przestać się zastanawiać, jakie luki istnieją w mojej samokształceniu. Sposób, w jaki mój kod został ostatnio rozerwany, nie jest czymś, co chciałbym powtarzać. Myślę, że moje dwie największe obawy związane z wydaniem mojego projektu, w który włożyłem niezliczone godziny, są absolutnie zawstydzone, ponieważ przegapiłem kilka oczywistych rzeczy z powodu mojego samokształcenia lub, co gorsza, wypuszczania go przy dźwiękach świerszczy. Czy jest ktoś, kto był w podobnej sytuacji? Nie boję się konstruktywnej krytyki, o ile jest konstruktywna, a nie tylko tyradę o tym, jak schrzaniłem. Wiem, że na StackExchange znajduje się strona z przeglądem kodu, ale nie jest ona tak naprawdę skonfigurowana dla dużych projektów i nie czułem, że społeczność jest wystarczająco duża, aby uzyskać dobre opinie, gdybym miał publikować fragmenty mojego projektu (ja próbował z jednym plikiem). Co mogę zrobić, aby mój projekt mógł przynajmniej w pewnym stopniu odnieść sukces, nie popadając w zakłopotanie lub zniechęcenie w trakcie procesu?


title: Szczegółowe informacje dotyczące licencjonowania oprogramowania

text: Spędziłem dużo czasu badając różne (główne) licencje na oprogramowanie i ostatecznie zdecydowałem się na użycie **Licencji MIT** dla moich projektów open source oraz **Licencji referencyjnej Microsoft (MS-RSL)** dla moich autorskie projekty. Nie wiedząc zbyt wiele o prawie IP, mam trzy proste pytania, na które nie udało mi się znaleźć odpowiedzi: * Na górze każdego pliku źródłowego, który chcę chronić, muszę umieścić kopię odpowiedniej licencji (MIT /MS-RSL), tak? * Jeśli tak, to czy w tym zawiadomieniu o licencji muszę potwierdzić, że korzystam z licencji MIT lub MS-RSL? A może wystarczy skopiować i wkleić licencje bez zmian? Innymi słowy, czy muszę powiedzieć: „POWIADOMIENIE O LICENCJI NA OPROGRAMOWANIE — MIT LICENSE” czy mogę po prostu napisać „POWIADOMIENIE O LICENCJI NA OPROGRAMOWANIE”? * Czy jest „w porządku” (prawnie egzekwowalne), aby po prostu umieścić link do adresu URL (gdzie znajduje się umowa EULA) zamiast wklejać tę samą licencję oprogramowania w kółko, na górze każdego pliku źródłowego? Byłoby miło mieć po prostu to: // SOFTWARE LICENSE NOTICE // To oprogramowanie i powiązane pliki są objęte licencją. Odwiedź: // http://www.example.com/my-license/latest //, aby uzyskać szczegółowe informacje. W ten sposób, `http://www.example.com/moja-licencja/latest` zawsze może zawierać najnowszą licencję, przez którą chcę, aby pliki źródłowe były chronione. Więc jeśli przejdę z MIT na, powiedzmy, APL, żadne zmiany/wdrażanie kodu nie są konieczne. Czy to jest legalne? Z góry dziękuję!


title: Wdrożenie w fazie rozwoju dla projektów Agile

text: Chciałbym poznać stanowisko Agile w następującej sytuacji: * Umowny, płatny kamień milowy stanowi, że działająca wersja musi być zainstalowana i uruchamiana w lokalizacji klienta; * Rozwój wciąż trwa, nie wszystkie historie użytkowników i problemy zostały rozwiązane; * Wymagane będzie późniejsze wdrożenie. Zrozumiałem, że właściciel produktu będzie przeglądał oprogramowanie w swoim środowisku programistycznym do momentu zakończenia ostatecznej kontroli jakości, a następnie (a nie wcześniej) zostanie wdrożone w końcowym środowisku produkcyjnym.


title: Schemat DB biletu/Loterii

text: Pracuję nad projektem, który, gdy wszystko się sprowadza, jest zasadniczo loterią. Skręt polega na tym, że ze względu na sposób, w jaki ustawiliśmy wartość biletu, użytkownik może rzucać ponad 10 000 biletów. Zasadniczo użytkownik może zdecydować się na rzucenie określonej liczby losów na daną loterię. Pod koniec okresu losowo wybierany jest zwycięski los. Prawdopodobieństwo wygranej przez użytkownika jest proporcjonalne do liczby losów, które odda. Mój problem polega na tym, że ze względu na ilość biletów, przechowywanie każdego biletu osobno w bazie danych nie wchodzi w rachubę, ale w pewien sposób każdy bilet musi być rozliczany, ponieważ wpłynie to na szanse. Moją opcją awaryjną jest przechowywanie „partii” biletów na użytkownika, zakładając, że rzadko użytkownik rzuca pojedynczy bilet na raz. Jakie byłoby najlepsze i najbardziej wydajne rozwiązanie do przechowywania dużej ilości biletów w bazie danych?


title: MVVM - Scenariusze interakcji Master Detail - Implementacja, gdy MasterVm ma częściowe dane, a Detail musi ściągać całą encję

text: Pracuję głównie z aplikacjami .Net WPF MVVM. Użyłem kilku frameworków, MVVM Light, Prism, itp. i udało mi się rozbić implementację CRUD MVVM na trzy scenariusze. **Scenariusz 1:** Usługa sieciowa zwraca stronicowaną kolekcję małych obiektów bez właściwości nawigacyjnych. Przechodzę przez nie, owijając je za pomocą DetailVM, z powodu innej potrzebnej logiki, i umieszczam ją w ListCollectionView. Implementacja IEditableObject mojego DetailVM, teraz każda operacja Crud, którą chcę wykonać, może być wykonana za pośrednictwem ListCollectionView i mogę zachować moją ListView w interfejsie użytkownika w synchronizacji z bieżącą operacją CRUD. Oznacza to, że jeśli użytkownik doda element, zostanie on natychmiast dodany do ListCollectionView i odzwierciedlony w interfejsie użytkownika, a jeśli anulują edycję, zostanie usunięty. Jeśli zapiszą dodany element, pozostanie on na liście i utrwalony na serwerze. Wszystko to można zrobić za pomocą dwóch prostych modeli widoków i niektórych szablonów danych dzięki IEditableObject i ListCollectionView. **2 i 3: Są bardziej złożone, ponieważ początkowe wywołanie usługi sieciowej zwraca listę referencji dto zawierającą kilka prostych właściwości, takich jak Name & Id.** **Scenariusz 2:** W wywołaniu MasterViewModel do serwis internetowy i ładowanie szybkich modeli. Po wybraniu elementu wykonywane jest drugie wywołanie usługi sieciowej w celu pobrania rzeczywistego obiektu i jego wykresu obiektów. Jest on następnie mapowany i przesyłany (pub/sub) do oddzielnego modelu widoku szczegółów. **Scenariusz 3:** W MasterViewModel ma właściwość DetailViewModel. Łączy to ze sobą modele widoku, co wydaje się w porządku, ponieważ tak naprawdę nie mogą pracować bez siebie. Zarządzanie listą staje się łatwiejsze, ponieważ wszystko jest w tym samym miejscu, bez przesyłania komunikatów... Nadal trudno jest osiągnąć tak proste za pomocą ListCollectionView, ale mogę to zrobić bez przesyłania wiadomości między modelami widoków. \----- Podsumowanie ------ Scenariusz 1 = Łatwy do wdrożenia, działa dobrze, wymaga minimalnej ilości kodu. Scenariusz 2 i 3 = Trudniejszy do wdrożenia, staje się nieco mniej jasny, gdzie powinny być wszystkie operacje CRUD. Synchronizowanie elementów na liście referencyjnej jest trudniejsze. Aktualizuję informacje na liście dopiero po pomyślnym zakończeniu edycji i zapisaniu z powrotem w serwisie internetowym. Obecnie wszystkie moje operacje crud trzymam w jednym modelu widoku. Stworzyłem bazowy model widoku dla stronicowanych danych, który dziedziczę do bazowego modelu widoku CRUD i dodaję polecenia Dodaj, Edytuj, Usuń i Anuluj. Jak dotąd działa to dobrze.


title: Najlepszy sposób na sprawdzenie, czy kolekcja zawiera lub nie zawiera elementu o określonej pożądanej jakości

text: Wydaje się, że bardzo często trzeba stwierdzić, czy jakaś lista lub zestaw zawiera przynajmniej jeden obiekt spełniający dany warunek, jednak moje wcześniejsze poszukiwania i czytanie nigdy nie znalazły zadowalającej najlepszej praktyki lub wzorca projektowego, o którym można by mówić. W sytuacjach, o których myślę, samo użycie „zawiera” nie jest wystarczające, ponieważ test, który chcemy wykonać, nie jest ściśle oparty na metodzie równości danej klasy. Kilka rzeczy, które widziałem: // for-each with break private boolean doFoosHaveGoodQuality(List<Foo> Candidate) { boolean foundIt = false; for (Foo item: kandydaci) { if (<< item przechodzi jakiś test >>) { fountIt = true; przerwanie; } } return foundIt; } // while-do z licznikiem indeksu private boolean doFoosHaveGoodQuality(List<Foo> Candidate) { boolean foundIt = false; int indeks = 0; while(!fountIt && index < kandydaci.size() - 1) { Foo item = kandydaci.get(index++); if (<< item przechodzi pewien test >>) { fountIt = true; } } return foundIt; } Oba te zadania wykonują zadanie i kończą pracę, gdy tylko zostanie osiągnięty sukces, prawdopodobnie oszczędzając trochę czasu, jeśli mamy szczęście, że żądany element znajduje się na początku listy. Jednak oba wymagają zapętlenia całej listy w celu uzyskania fałszywego wyniku. Inną techniką, którą widziałem w pewnych okolicznościach, jest to, że w tym samym czasie generowana jest oryginalna `List<Foo>` (tj. pobierana z bazy danych), aby następnie jednocześnie wygenerować `Map<FooKey, Foo>`. W tej technice `FooKey` jest dodatkową (często wewnętrzną) klasą zawierającą tylko te atrybuty `Foo`, które tworzą „pożądaną jakość” i zastępują oparte na niej metody równości i kodu skrótu. Kiedy musisz określić, czy istnieje pożądany Foo, tworzysz instancję `nowego FooKey()` z dokładnie taką, jaką chcesz, a następnie wywołujesz `hasKey()` na mapie. Dodatkowy wysiłek z przodu, ale szybki i łatwy w chwili, gdy go potrzebujesz. Nie mogę tego dotknąć. Każdy pomysł działa, ale każdy wydaje się trochę dziwaczny i nieefektywny.


title: Jak mogę zrekompensować sobie uczęszczanie do JavaSchool?

text: We wcześniejszym pytaniu poprosiłem o poradę zawodową dla nowych inżynierów oprogramowania, którzy dobrze sobie radzili przed i w trakcie studiów. Ale co z ludźmi, którzy z jakiegoś powodu nie mieli szczęścia, aby przejść do MIT lub Yale? Co by było, gdybyś poszedł do tego, co Joel Spolsky nazywa JavaSchool? Co mogą/powinni zrobić absolwenci JavaSchool, aby rozwinąć swoje umiejętności i nadrobić to, czego brakowało im na studiach? (A może Joel się mylił, że te szkoły są niekorzystne?)


title: Właściwe nazewnictwo właściwości do reprezentowania ciągu zaczynającego się od liczby

text: Patrząc na niektóre metadane kamery we `Właściwościach plików` systemu Windows, są tam (wraz z kilkoma innymi) dwie `Właściwości` o nazwach _Ogniskowa_ i _Ogniskowa 35 mm_. Tworzę oprogramowanie, które będzie korzystać z tych dwóch właściwości. Do tej pory stworzyłem „Właściwość” o nazwie „FocalLength” dla pierwszej, ale nie mogę znaleźć właściwej nazwy dla drugiej. Myślałem o `_35MmFocalLength` lub `ThirtyFiveMmFocalLength`, ale myślę, że może być lepsza sugestia. Jakieś pomysły?


title: Czy repozytoria powinny zwracać IQueryable?

text: Widziałem wiele projektów, które mają repozytoria zwracające instancje `IQueryable`. Pozwala to na wykonanie dodatkowych filtrów i sortowania na `IQueryable` przez inny kod, co przekłada się na inny generowany kod SQL. Jestem ciekawa skąd wziął się ten wzór i czy to dobry pomysł. Moją największą obawą jest to, że `IQueryable` to obietnica trafienia do bazy danych jakiś czas później, kiedy zostanie wyliczona. Oznacza to, że błąd zostanie wyrzucony poza repozytorium. Może to oznaczać, że wyjątek Entity Framework jest zgłaszany w innej warstwie aplikacji. W przeszłości napotkałem również problemy z wieloma aktywnymi zestawami wyników (MARS) (szczególnie podczas korzystania z transakcji) i takie podejście wydaje się prowadzić do tego, że zdarza się to częściej. Zawsze wywoływałem „AsEnumerable” lub „ToArray” na końcu każdego z moich wyrażeń LINQ, aby upewnić się, że baza danych zostanie trafiona przed opuszczeniem kodu repozytorium. Zastanawiam się, czy zwracanie `IQueryable` może być przydatne jako blok konstrukcyjny dla warstwy danych. Widziałem dość ekstrawagancki kod z jednym repozytorium wywołującym inne repozytorium, aby zbudować jeszcze większy `IQueryable`.


title: Czy nasz zespół powinien konsekwentnie zamawiać metody/właściwości klas JavaScript? Jeśli tak to jak?

text: Wraz z powiększaniem się naszego zespołu zauważyłem, że różni programiści układają swoje metody klas w różnej kolejności. Na przykład: var Foo = Backbone.Model.extend({ someVar: {}, initialize: function() {...}, fetch: function() {...}, handleFetchRepsonse: function() {...} , getFoo: function() {...}, render: function() {...}, renderFoo: function() {...}, }); vs. var Foo = Backbone.Model.extend({ fetch: function() {...}, getFoo: function() {...}, handleFetchResponse: function() {...}, inicjalizacja: function() {...}, render: function() {...}, renderFoo: function() {...}, someVar: {}, }); Wygląda na to, że byłoby wygodniej, gdyby wszyscy używali mniej więcej tych samych kryteriów przy zamawianiu swoich metod (jeśli nie z innego powodu niż ułatwienie znajdowania rzeczy). Zastanawiam się jednak, czy: A) jest to w ogóle możliwe/realistyczne (czy po prostu zaakceptować fakt, że każdy będzie miał inną kolejność)? B) jeśli tak, to jaki to powinien być porządek (jedyna naprawdę spójna kolejność, o której mogę pomyśleć, jest alfabetyczna, ale wydaje się, że nie jest idealna)?


title: Drzewo B w porównaniu z drzewem R - Czy to nie jest tylko kilka połączonych list połączonych ze sobą?

text: Jestem dość dobrze zaznajomiony z drzewem B, głównie dlatego, że muszę utrzymywać bazy danych dobrze zasilane energią elektryczną, klimatyzacją i miejscem na dysku twardym. Kojarzę się z podwójną (podwójnie [tj., ey]?) listą powiązaną. Dzisiaj jeden z programistów wspomniał podczas lunchu o drzewie R. Wskoczyłem na Wikipedię i zacząłem czytać. Brzmiało to okropnie jak wyższe drzewo B. Niestety, brak głębokiego zaplecza matematycznego sprawia, że trudno jest zrozumieć, o czym mówią niektórzy moi współpracownicy. Miałem nadzieję, że ktoś mógłby wyjaśnić kilka różnic między drzewem B a drzewem R. Prawdopodobnie i tak w końcu spytam chłopaków, ale nie ma gwarancji, że odpowiedzą na moje pytanie. Jest bardziej niż prawdopodobne, że zaczną gadać o Bóg wie o czym. . .


title: Propozycje użytkowników C++

text: Uważam, że mam kilka dobrych sugestii, jak ulepszyć język C++. Z kim mam się skontaktować, aby to omówić? Czy mam szansę zostać wysłuchanym, zwłaszcza jeśli nie jestem uznanym ekspertem?


title: Ujawnianie zdarzenia Disposing

text: Implementuję klasę .NET, która implementuje IDisposable. Po usunięciu stan obiektu jest nieprawidłowy i oczywiście nikt nie powinien mieć do niego dostępu. Istnieją sytuacje, w których dwa zasadniczo niezależne systemy mają dostęp do tej samej instancji tej klasy. Jeden zasadniczo „posiada” obiekt, ale drugi jest odpowiedzialny za interakcję z obiektem w sposób trwały. Jeśli „właściciel” zdecyduje się pozbyć obiektu, wywołując na nim Dispose, inny system musi o tym wiedzieć, ponieważ w przeciwnym razie może próbować wchodzić w interakcję z nieprawidłowym obiektem. Nie zawsze jest wygodne, aby właściciel poinformował inny system o zaprzestaniu korzystania z obiektu, ponieważ sam właściciel może nie wiedzieć o tym innym systemie. Mam klasę implementującą właściwość IsDisposed, ale zdarzają się sytuacje, w których sondowanie byłoby niepraktyczne i byłoby lepiej, aby „nie-właściciel” zamiast tego otrzymał powiadomienie, że obiekt został usunięty. W tym celu pomyślałem, że dobrym rozwiązaniem byłoby zaimplementowanie zdarzenia Disposing w klasie, ale prowadzi to do kilku pytań projektowych: * Czy instancja uznana za _już została usunięta_ w momencie wywoływania zdarzenia? (Domyślam się, że powinien być uważany za żywy do czasu zakończenia obsługi.) * Jak obiekt powinien reagować na dalszą manipulację zachodzącą wewnątrz obsługi zdarzeń? (Domyślam się, że zareaguje w zwykły sposób dla żywego obiektu, ponieważ jest on wciąż żywy.) * Co się stanie, jeśli sam program obsługi wywoła Dispose na obiekcie? (Możemy albo jawnie zignorować wywołania ponownego wejścia, albo po prostu założyć, że dobrze zachowane programy obsługi nie zrobią tego.) * Czy zdarzenie Disposed nadal powinno być wywoływane w przypadku finalizacji obiektu bez wyraźnego usunięcia? (Nie przychodzi mi do głowy przypadek, w którym takie wydarzenie byłoby rzeczywiście potrzebne, a na pewno może powodować problemy.) Zastanawiam się, czy istnieje jakaś ugruntowana mądrość na temat tego, jak ten wzór powinien być ogólnie zaprojektowany , lub jakiekolwiek przykłady, o których powinienem wiedzieć, gdzie mogą wystąpić problemy.


title: Najlepszy sposób na sprawdzenie konkretnych typów

text: Zwykle robię to: if (Zwierzę to Pies) { Doc d = (Pies)Zwierzę; // d. itd.. } else if (Zwierzę to Kot) { Kot c = (Kot)Zwierzę; // c. .... } Czy to dobry sposób, czy są lepsze sposoby na zaimplementowanie powyższego kodu (wydajność, ...)? Czy powinno tak być?: Pies d = Zwierzę jak pies; if (d != null;) { // d. itd.. } else if (Zwierzę to Kot) { Kot c = (Kot)Zwierzę; // c. .... } A może tak?: Pies d = Zwierzę jak Pies; Kot c; if (d != null;) { // d. itd.. } else if ((c = Zwierzę jak Kot) != null) { // c. .... } A może coś innego?


title: Wykonywać operacje w skrypcie wejściowym lub tworzyć klasę, która tylko tworzy instancje i wywołuje metody?

text: Tworzę aplikację **perl**, która wykonuje następujące operacje: 1. Kopiowanie kilku plików (class **fileFetcher** ) 2. Parsowanie każdego pliku (class **fileParser** ) 3. Przechowywanie danych z każdego pliku w bazie danych (klasa **dbHelper** ) Czy teraz powinienem w moim **main.pl** (punkt wejścia do skryptu) skonstruować instancję **każdego z tych** i wywołać odpowiednie metody? czy lepiej jest mieć osobną klasę "Application", która wykonuje wszystkie instancje i wywołania metod, a główny skrypt powinien mieć wywołanie typu `Application.run(args)`? Klasa istniałaby tylko po to, by tworzyć instancje i wywoływać metody na rzeczach, i nie wydaje się poprawna.


title: Dwóch wnioskodawców, dwie różne odpowiedzi, jaka byłaby prawidłowa?

text: Podczas rozmowy kwalifikacyjnej na stanowisko programisty C++ w ACME, dwóch kandydatów prosi o stworzenie **programu, który prosi użytkownika o wpisanie dwóch liczb całkowitych, a następnie wypisuje ich sumę.** *Pierwszy programista rozwiązuje zadanie w 10 wierszy kodu. * Drugi programista kończy z 10 000 linii kodu. * * * Dzieje się tak dlatego, że #2 nie od razu wykonał zadanie, ale zaczął tworzyć ogromny zestaw infrastruktury do jego rozwiązania. Przede wszystkim stworzył klasę bazową `CObject`, następnie przeszedł do klasy interfejsu `IInput`, wyprowadził klasę `CInputSTD`, stworzył bibliotekę opakowującą funkcjonalność STL do konwersji łańcuchów na liczby i odwrotnie. I nadal szedł, tworząc system dyspozytora zdarzeń do niższego sprzęgania każdego z modułów i dodając około 20 makr do swojego kodu. Ale to wciąż nie wystarczyło, więc kontynuował i skonstruował bazę `COutputFormatter`, `CArithmeticOperation`, `CAddable` wywodzącą się z `CObject` i wreszcie `CAdditionManager`. Aby wszystko połączyć, dodał klasy `CModuleManager`, `CProgram`, `CProgramCalculator` i `CProgramAdder`. Po tym pozostało do napisania tylko około 5 klas pomocniczych i 500-wierszowy nagłówek API. Cały jego kod był dobrze udokumentowany, z przestrzenią nazw i kompatybilny z wieloma platformami. * * * Teraz moje poważne pytania: * Jaki jest najlepszy sposób na wyjaśnienie, co dokładnie zrobił Programista #2? * Co jest w tym złego w porównaniu z rozwiązaniem Programmer #1? * Skąd wiesz, że spędzasz zbyt dużo czasu na abstrahowaniu zamiast pisać rzeczywistą funkcjonalność? * Który programista, w prawdziwej firmie, z nieco bardziej zdrowym na umyśle rozwiązaniem Programmer #2 (mniej klas, linii), ma większe szanse na zdobycie pracy? (biorąc pod uwagę, że są one równe we wszystkich innych aspektach)


title: Jak stworzyć proces tworzenia oprogramowania dla projektu?

text: Jak już pisałem w innych pytaniach, projekt, nad którym teraz pracuję, nie posiada procesu programistycznego. Oznacza to brak dokumentacji (w tym wymagań lub specyfikacji w wersji papierowej), brak kontroli źródeł, brak bazy danych błędów, błędy są „naprawiane” (miejmy nadzieję) i jednocześnie dodawany jest nowy kod, a także żadnych formalnych testerów – nie udalibyśmy się na test Joela tak źle, to nawet nie jest śmieszne. Wczoraj mój kierownik poprosił mnie o napisanie dokumentu o tym, jak zacząć naprawiać te niedociągnięcia. Zauważ, że jestem tylko stażystą, tu od 6 miesięcy. Wyjeżdżam w okolicach Święta Dziękczynienia w listopadzie, żeby wrócić do szkoły. Myślę jednak, że być może uda mi się skierować ten projekt we właściwym kierunku, ale nie jestem pewien, od czego zacząć. Obecnie korzystam z CiteSeer i Wikipedii, aby spróbować znaleźć artykuły opisujące procesy oprogramowania i ich implementację, ale wszelkie porady, osobiste doświadczenia lub linki do blogów, artykułów, artykułów wiki lub czegokolwiek innego byłyby bardzo mile widziane.


title: Teoria o mieszaniu się komunikacji oprogramowania z innym oprogramowaniem powodującym apokalipsę?

text: Pamiętam bardzo, bardzo dawno temu (przed rokiem 2000), czytając artykuł jakiegoś „eksperta”, który wysunął teorię, że oprogramowanie komunikujące się przez Internet, zwłaszcza gry wideo, mogą zostać pomieszane z komunikacją wojskową, co oznacza, że użytkownik może nieumyślnie zmobilizować B52 bombowiec nuklearny jednym kliknięciem myszy na grę wideo. Ta teoria brzmi wystarczająco śmiesznie, ponieważ jest bardzo mało prawdopodobne, aby pakiety danych z różnych programów trafiające do różnych hostów na różnych portach mogły się pomylić. Dodatkowo odbiorca miałby trudności z interpretacją danych, które mogą być zrozumiałe tylko przez aplikację, którą miał czytać. Jednak mam dygresję, czy ktoś wie o tej teorii i czy miała nazwę i czy coś takiego wydarzyło się w oprogramowaniu. Przepraszamy, jeśli wydaje się to być pytaniem dotyczącym sieci, ale ponieważ ostatecznie dotyczy danych aplikacji, czułem, że będzie pasować do tej witryny Stack. Dzięki Wszelkie inne informacje byłyby mile widziane na podobnych teoriach lub pomysłach.


title: Ograniczenia Wywoływanie bibliotek DLL w różnych technologiach?

text: Chcę wywołać bibliotekę DLL w moim języku programowania „wybór”. Dokumentacja wokół tego wyraźnie stwierdza, że musi to być 32-bitowa biblioteka DLL napisana w C, C++ lub Delphi. _Ale chciałem wywołać bibliotekę DLL napisaną w C#._ Dalej wspomina się, że domyślnym trybem wywoływania jest **cdecl**. Więc moje pytanie brzmi: dlaczego miałoby tak być? Czy jest jakiś sposób, aby _myśleć_, że C# DLL został napisany w C, C++ lub Delphi?


title: Szybkie i dobre: (Wymaganie -> Walidacja -> Projekt) do samodzielnego użytku?

text: Jak od niechcenia wykonać wymaganą inżynierię oprogramowania i projektowanie? Jestem niedoświadczonym programistą i borykam się z następującym problemem: 1. Moja firma jest start-upem i nie ma poprawek w systemach inżynierii oprogramowania. 2. Przydzielono mi zadania o niezbyt jasnych i sprzecznych wymaganiach. 3. Nie muszę oficjalnie przestrzegać żadnych projektów ani weryfikować wymagań. Problem: 1. Koduję cały dzień iw końcu utknąłem tam, gdzie wymagania są sprzeczne i muszę zacząć od nowa. 2. Nie mogę spędzać dużo czasu na prawidłowym SRS lub SDD. Jak powinienem: 1. **Wypisać wymagania dla siebie. (Nie jest to dokument urzędowy)** 2. **Jak zweryfikować i walidować wymagania?** 3. **Jak je zwizualizować?** 4. **Jak je zaprojektować przy minimalnym wysiłku? (Jako to będzie tylko ze mną)** Nie chcę tracić czasu na kodowanie czegoś, co się zawali zgodnie z konfliktem wymagań czy coś! Nie chcę iść na kompromis z jakością, ale nie chcę pisać wszystkiego od nowa na jakiejś zmianie, której się nie spodziewałem. Wyobrażam sobie tworzenie diagramu dla mojego procesu myślowego, który pokaże mi konflikt w samym diagramie, a następnie poprawiam diagram - decyduję o moim projekcie i strukturze kodu pod kątem interfejsów lub czegoś takiego. A potem w końcu zacznij realizować mój projekt. Wyczuwam brak systematycznego podejścia, ale nie wiem, jak postępować! Aktualizacja: > Proszę zasugerować mi kilka narzędzi, które mogą zadać mi pytania i pomóc mi > zebrać ważne informacje. > > Jak mogę otrzymać diagram, o którym mówiłem, do weryfikacji wymagań?


title: Przydatne umiejętności z kierunku informatyka

text: Zrobiłem dyplom z fizyki, a później zająłem się programowaniem. Mam za pasem dwuipółletnie doświadczenie i lubię myśleć, że piszę dobry kod. Obawiam się jednak, że brak dyplomu z compsci pozostawił dziury w mojej wiedzy. Chciałbym je teraz uzupełnić, ponieważ wiem, że chcę programować do końca mojej kariery. Jakich umiejętności/technik nauczyłeś się na poziomie Compsci, których nie nauczyłbyś się z programowania w miejscu pracy?


title: Gdzie mogę znaleźć legalny dokument „pozwolenie na pracę na otwartym kodzie źródłowym”?

text: Jedną z rzeczy, które naprawdę lubię w mojej obecnej pracy, jest to, że my, programiści, jesteśmy zachęcani do wnoszenia wkładów open source. Jednak ta zachęta zawsze była werbalna. Czytałem kilka przerażających historii o programistach, których praca z otwartym kodem źródłowym została legalnie zażądana przez ich pracodawcę. Czułbym się bardziej komfortowo, gdybyśmy mieli coś na piśmie od mojego pracodawcy, że składki są dozwolone i nie są własnością firmy. Rozumiejąc, że nie jesteś prawnikiem, czy ktoś wie, gdzie znaleźć taki dokument?


title: Czy posiadanie połączonego hostingu na jednej platformie jest lepsze niż posiadanie oddzielnego hostingu?

text: Ostatnio myślałem o zamianie niektórych pomysłów na aplikacje z kilkoma podobnie myślącymi przyjaciółmi. Nasza aplikacja będzie miała moduł, w którym użytkownicy muszą dołączyć komunikator. Wymagania dotyczące wiadomości błyskawicznych są teraz dość podstawowe: * Wysyłaj/odbieraj wiadomości (bez MIME). * Zobacz status użytkownika dostępny / offline. * Stan wysłanych/dostarczonych wiadomości. Najpierw pomyśleliśmy, że GAE (Google App Engine) będzie dobrym wyborem z tym, co zapewnia bezpłatny limit i możemy zacząć od tego. Ale po przeprowadzeniu badań i badań oraz burzy mózgów przez jakiś czas, zdałem sobie sprawę z następujących rzeczy (jest to zgodne z moim rozumieniem): * Implementacja XMPP w GAE nie może utrzymać sesji, aby mieć status dostępny/offline. Ta logika musi zostać wdrożona po naszej stronie. * Implementacja XMPP w GAE nie może utrzymywać statusu wysłanych/dostarczonych wiadomości. Ta logika musi zostać wdrożona po naszej stronie. Utrzymywanie takich statusów na własną rękę będzie zużywać więcej wywołań API i nasza aplikacja może wkrótce zostać zdławiona. A jako użytkownik nie chciałbym, aby moje wiadomości były opóźnione. Więc po dalszych badaniach, przeszedłem do Openfire dla back-endu, ale Openfire nie rozwiązałby całkowicie naszych potrzeb mobilnych. I po dalszych badaniach dowiedziałem się o ejabberd. Istnieje duża przewaga ejabberd nad Openfire, ale najważniejsza jest to, że główni gracze IM, tacy jak WhatsApp i nimbuzz, używają ejabberd. Jestem pewien, że musieli go zmodyfikować, aby pasował do potrzeb. Ponieważ nie próbujemy rozwiązać problemu z komunikatorami internetowymi, głównym celem naszej aplikacji jest coś innego. Wymaga to komunikacji z zapleczem, co oznacza, że musimy gdzieś wdrożyć nasze usługi sieciowe. Ponieważ GAE wspomina, że „Gniazda nie są obsługiwane w GAE”, nie możemy uruchomić tam naszej usługi ejabberd. Musi znajdować się w dostawcy IaaS (infrastruktura jako usługa), takim jak EC2. Oczywiście Google ma swoje, ale AWS oferuje niższą cenę. Oto kilka niejasności i problemów, które próbujemy rozwiązać: 1. Aby zmniejszyć komplikacje, chcemy, aby IM i WS używały tej samej bazy danych użytkowników. Użytkownikom zostanie przydzielone losowe hasło podczas rejestracji. Uwierzytelnianie z serwerem IM powinno odbywać się transparentnie, bez zauważania tego przez użytkownika (jest to spowodowane tym, że nasza aplikacja korzysta z usług zewnętrznych dostawców, takich jak dostawcy Oauth do rejestracji/logowania użytkowników). Czy jest jakaś inna alternatywa? 2. Biorąc pod uwagę, że chcemy skalowalności w przyszłości i jestem pewien, że przejście z GAE na AWS(Amazon Web Services) nie byłoby takie proste (jeśli tego chcemy). Czy lepiej mieć WS i IM działające na tej samej platformie? A dlaczego jest lepiej? Czy istnieją lepsze alternatywy?


title: Czy HTML 5 jest wystarczająco dobry, aby programiści mogli przejść z Flasha?

text: Po prostu ciekawe, ponieważ wielu programistów używa Flasha do robienia wielu rzeczy, których HTML 4 (popraw mnie, jeśli się mylę) lub poniżej nie może lub miał trudności z wykonaniem, na przykład zaokrąglone rogi (Canvass) i to Video Thing i wiele innych . Właściwie nie poznałem całego HTML5, więc równie dobrze mogę nauczyć się tego od Ciebie. Dziękuję.


title: Jak technolog oprogramowania może najlepiej funkcjonować w firmie inżynierskiej?

text: Jestem absolwentem college'u społeczności Software Technologist. Ukończyłem studia z wyróżnieniem i poświęcam dużo czasu na studiowanie zagadnień informatycznych. Niedawno zostałem zatrudniony w firmie inżynieryjnej. Bardzo interesuje mnie obszar działania firmy. Zajmuje się wieloma elementami poziomu i uważam to za bardzo satysfakcjonujące. Jestem jedynym Technologiem Oprogramowania i pracuję bezpośrednio z kilkoma Inżynierami, którzy tworzą oprogramowanie. Firma jest bardzo zhierarchizowana i Inżynierowie mają duże prywatne biurka, a Technolodzy pracują w oddzielnym, mniejszym pomieszczeniu i ściśle współpracują. Jestem jedynym Technologiem Oprogramowania w grupie. To trochę dziwne, że siedzę obok technologów/techników w dziedzinach innych niż oprogramowanie, ale jestem zadowolony z mojej pracy, a Inżynierowie często przychodzą, aby zapewnić pracę lub zapewnić tło przy kolejnym dużym projekcie. Czuję się z tym dobrze, rozumiem i szanuję strukturę firmy. Jednak firma dokonała pewnej reorganizacji w budynku i wiele osób się zmienia. Ludzie pracują tam, gdzie jest miejsce. Zostałem tymczasowo przeniesiony do pokoju z innymi programistami, z których wszyscy są inżynierami. Dzisiaj do naszego biura wpadł inżynier (nie będący oprogramowaniem) i oświadczył, że szef firmy chodził po okolicy i pytał wszystkich, gdzie siedzą. W miarę rozwoju historii szef firmy zapytał jednego z członków, gdzie siedzi, a następnie wyśmiał go. Inżynier zaczął mówić „on [członek, z którego się wyśmiano] mówi, że ma większe doświadczenie, ale my jesteśmy inżynierami, a nie zwykłymi ludźmi”. (Cyt. tak dokładnie, jak to możliwe) Nadal przechwalał się nieco więcej. To zostało powiedziane na moich oczach i moich rówieśników. Doskonale pamiętam śmiech jednego Inżyniera, co do pozostałych nie jestem pewien. Mój szef też był w pokoju. Poczułam się bardzo zdegradowana i żałuję, że nic nie powiedziałam. Jak byś przyjął tę sytuację? Bardzo lubię swoją pracę. Jako technolog oprogramowania czuję się niezwykle szczęśliwy, że pracuję w środowisku inżynierskim. Czuję się zdradzony przez moich kolegów programistów i mojego szefa. Powiem przede wszystkim, że rozumiem, że jestem młodszym pracownikiem i otrzymam rolę wsparcia, która obejmuje stanowiska, na które starsi programiści nie chcą lub nie mają czasu. Czuję się z tym bardzo komfortowo i postrzegam to jako wspaniałe doświadczenie edukacyjne. Martwię się jednak, że jeśli pozostanę w tej firmie wystarczająco długo, w końcu zatrudnią innego inżyniera, który automatycznie mnie przebije. Jeśli inżynierowie naprawdę czują, że jestem „zwykłym człowiekiem”, nie chcę tam pracować. Zdaję sobie sprawę, że są oni profesjonalnymi inżynierami i włożyli dużo czasu w swoje studia, i mam za to duży szacunek. Mam kilka pytań: 1. Co powinienem zrobić z ogólnym brakiem szacunku i jak sobie z tym poradzić? 2. Jak się czujesz, wiedząc, że twoje doświadczenie będzie niewiele znaczyło dla firmy w odniesieniu do świeżo upieczonego inżyniera? (Nie jest to pilne zmartwienie, ale długoterminowe zmartwienie. Jestem bardzo zainteresowany kontynuowaniem dodatkowych kursów i edukacji, ale wątpię, czy będę w stanie poświęcić czas na podniesienie poziomu studiów.) 3. Jakie powinny być moje długoterminowe cele? (Naprawdę lubię programowanie na niskim poziomie i pracę w oprzyrządowaniu i elektronice.) Dla wyjaśnienia, inżynier ma dyplom inżyniera zawodowego na certyfikowanym uniwersytecie. Nie jestem pewien co do innych krajów, ale w Kanadzie musisz być z certyfikowanego uniwersytetu, aby uzyskać dyplom inżyniera. Stopień inżyniera waha się od cywilnego, mechanicznego, elektrycznego oprogramowania itp. Osoby te mają BEng (Bachelor of Engineering) w przeciwieństwie do BA (Bachelor of Arts) lub BSci (Bachelor of Science). Technolog jest absolwentem Community College, który jest 3-letnim programem dyplomowym.


title: Czy można ocenić, jak przewidywalne będzie zachowanie programu?

text: Jeśli tak, to jak i jaką wartość miałaby ta ocena w zrozumieniu kodu? Na przykład domyślam się, że programy używające algorytmów genetycznych lub neutralnych byłyby mniej przewidywalne niż programy obliczające sumę pi.


title: Co sądzisz o kropkach/kropkach w komentarzach do kodu?

text: Widziałem to pytanie w SO Tavern, więc zamieszczam pytanie tutaj. Pomyślałem, że to interesujące pytanie. (Oczywiście nie należy do SO, ale myślę, że tutaj jest OK.) Czy dodajesz kropki (lub, jak napisał OP, "kropki") w komentarzach do kodu? Aby było to istotne, _dlaczego_?


title: Jaki jest właściwy sposób szkolenia świeższego?

text: Jestem studentem pierwszego roku zatrudnionym w firmie informatycznej w Indiach. Wielu moich znajomych również pracowało w różnych firmach. Niektóre z nich zostały przeszkolone online, niektóre w klasie, a jeszcze inne (w tym ja) są szkolone „w pracy”, co pozostawia mnie dość zdezorientowanym, co do tego, jaką metodę powinny stosować firmy, aby świeższe było „ na czasie”? Jakie zalety mają wszystkie te metody nad sobą? Byłbym zachwycony wiadomością od ludzi z branży. PS Proszę (jeśli chcesz) napisz, czy pracujesz w firmie informatycznej i napisz jeśli to możliwe. Pomoże mi sformułować opinię. Nic złego w tej prośbie, obiecuję!


title: Czy to wysokie sprzężenie?

text: # Pytanie * * * Obecnie pracuję nad zadaniem do szkoły. Zadanie polega na stworzeniu programu logicznego/kalkulatora, w którym nauczysz się pracować z różnymi strukturami danych (takimi jak stosy). Wygenerowaliśmy ciągi matematyczne typu infix, takie jak „1 + 2 * 3 - 4”, a następnie zamieniliśmy je na ciągi matematyczne typu postfix, takie jak „1 2 + 3 * 4 -”. W mojej książce autor tworzy specjalną klasę do konwersji notacji infiksowej na postfix. Planowałem użyć tego, ale gdy miałem go wdrożyć, zastanawiałem się, czy poniższe jest to, co nazwałbyś „wysokim sprzężeniem”. Czytałem coś na ten temat (nic, co jest nauczane w książce ani nic innego) i zastanawiałem się nad aspektem (ponieważ wciąż muszę to pojąć). # Problem * * * Stworzyłem klasę PuzzleGenerator, która generuje infiksową notację łamigłówki (lub ciąg matematyczny, jakkolwiek chcesz to nazwać) podczas tworzenia instancji. Miałem zamiar stworzyć metodę getAnswer(), w której utworzyłbym instancję klasy InToPost (klasa z książki), aby przekonwertować wrostek na notację postfox, a następnie obliczyć odpowiedź. Ale robiąc to pomyślałem: "Czy użycie klasy InToPost wewnątrz tej metody jest formą wysokiego sprzężenia i czy lepiej byłoby umieścić to w innej metodzie?" (np. metoda "convertPostfixToInfix", wewnątrz klasy PuzzleGenerator) Z góry dziękuję.


title: Interfejsy w stylu Go/Obj-C z możliwością rozszerzenia skompilowanych obiektów po pierwszym wydaniu

text: Mam model koncepcyjny systemu obiektowego, który polega na łączeniu interfejsów/protokołów Go/Obj-C z możliwością dodawania wirtualnych metod z dowolnej jednostki, nie tylko tej, która definiuje klasę. Ideą tego jest umożliwienie otwartych klas Ruby-ish, dzięki czemu można przyjąć minimalistyczne podejście do tworzenia bibliotek i dołączyć małe elementy funkcjonalności, które są faktycznie potrzebne całemu programowi. Implementacja obejmuje tablicę metod oznaczonych jako wirtualne w tablicy RTTI, do której funkcje systemu mogą być dodawane podczas inicjalizacji modułu. Po rzutowaniu typu obiektu na interfejs, wyszukiwanie w stylu Go jest wykonywane w celu utworzenia vtable dla tego konkretnego mapowania i przekazania go, dzięki czemu można uzyskać porównywalną wydajność do C/C++. W tym przypadku można dodać /później/ metody, które nie były wcześniej znane, a te nowe metody pozwalają na zaspokojenie nowszych interfejsów; chociaż podoba mi się ten pomysł, ponieważ wydaje się, że byłby bardzo elastyczny (pomijając potencjał kodu spaghetti, który może się zdarzyć w przypadku niemal każdego używanego modelu). Owijając wywołania systemowe dla wiązania metod w zestaw czystych wywołań zgodnych z C, można by również zintegrować kod z bibliotekami współdzielonymi i zachować przyzwoitą wydajność (Go nie wykonuje współdzielonego łączenia, a Objective-C robi dynamiczne wyszukiwanie przy każdym wywołaniu). O ile ta rozszerzalność w stylu Dylana byłaby fajna mieć dostęp, nie mogę do końca doprowadzić się do przypadku użycia, który uzasadniałby narzut inny niż „może to sprawić, że niektóre rodzaje kodu będą bardziej rozszerzalne w przyszłych scenariuszach”.


title: Zapoznanie się z Zend Framework w tydzień

text: Znasz się na ZF? Jak byś się z nim zapoznał w ciągu jednego tygodnia? Jaki byłby twój sugerowany harmonogram?


title: Jaka jest różnica między atrybutami na poziomie klasy, stałymi klas i metodami singleton?

text: Co za różnica, biorąc pod uwagę, że wszystkie istnieją „raz na klasę”. Kiedy należy używać jednego nad drugim, tj. w jakim celu? Używam Rubiego.


title: Przenoszenie dziesiątek istniejących samodzielnych witryn sprzedaży detalicznej do jednej centralnej bazy danych o asortymencie: co powinienem wiedzieć, wchodząc?

text: Będzie to pierwszy projekt na taką skalę, jaki podjąłem i pierwszy raz, kiedy w ogóle prowadzę stronę internetową (a tym bardziej dziesiątki) korzystając z bazy danych off-site. W szczególności chciałbym wiedzieć: 1. Jakie optymalizacje powinienem przeczytać, aby przebiegać tak płynnie, jak to możliwe? 2. wszelkie pułapki/gotchas mądrzejsi, bardziej doświadczeni ludzie są świadomi, że powinienem szukać, oraz 3. jakie środki kontroli uszkodzeń i zapobiegawcze powinienem podjąć w przypadku koszmarnego scenariusza głównego serwera (hosting bazy danych) posiadającego awaria, zgrzytanie ponad 100 stron internetowych do zatrzymania (ponieważ nie mają dostępu do danych produktów).


title: clone() tylko częściowo wykonalne; jak zareagować?

text: Załóżmy, że mamy hierarchię klas, której klasa bazowa `B` wymaga zdefiniowania metody `clone()` w jej pochodnych. Chociaż działa to doskonale w przypadku większości z nich, istnieje ta jedna pochodna `X`, która zawiera **opcjonalne** odniesienie do zasobu/obiektu, do którego można się odwołać tylko z jednego wystąpienia `X`. Podczas gdy resztę `X` można bez problemu sklonować, to odwołanie musiałoby być ustawione na null/nil/nullptr. Jaki jest właściwy sposób radzenia sobie z tą sytuacją? * `X::clone()` może rzucić `UncloneableException`. Choć byłoby to poprawne, nie jest satysfakcjonujące. * Ustaw referencję na null/nil/nullptr i nie zostawiaj o tym żadnej informacji. Użytkownik `X` musi wiedzieć o „szczególnych cechach” `X'a. * Wymagaj pochodnych `B` do zdefiniowania `B::nearestClone()`: użytkownik `B` musi być świadomy, że zwracana wartość może nie być klonem 1:1. * Coś innego?


title: Wdrażanie agentów sterowanych stanem w ramach podejścia Entity-Component-System

text: Agent sterowany stanem to agent, który wykonuje akcję na podstawie swojego bieżącego stanu. Logika może być zaimplementowana za pomocą D-FSM, który zmienia stan w zależności od „postrzegania” i „bodźców” Agenta oraz wykonuje działania przy wchodzeniu, przebywaniu i wychodzeniu ze stanu. Próbuję zaimplementować ten typ projektu w architekturze Entity-Component-System (ECS). Moją pierwszą myślą było zaimplementowanie komponentu „FSM” zawierającego current_state i rulebook, Systemu, który aktualizuje komponent FSM current_state w zależności od jego zbioru reguł oraz Systemu, który implementuje działania Entity (i odpowiednio modyfikuje jego komponenty) w zależności od stan komponentu FSM. Nie jestem pewien, czy jest to poprawna implementacja ECS i czy może czysto reprezentować enter_state/exit_state -> wykonywać zachowanie akcji. Jak zatem wdrożyć SDA w architekturze ECS?


title: Potrzebujesz uporządkować słowa w oparciu o ich składniki, w jakikolwiek inny sposób niż brutalna siła?

text: Nie jestem pewien, czy ten proces ma nazwę. Mam kilka słów (około 9000). Są po japońsku, ale postaram się to wyjaśnić za pomocą angielskich słów. Chcę kategoryzować słowa według składników (w języku angielskim, litery). A B C akt bar zagraj To powinno stworzyć: A: zagraj B: takt C: zagraj Teraz „a” pojawia się we wszystkich trzech słowach, ale chcę się upewnić, że każda kategoria (litera) zawiera przynajmniej słowo. Teraz sensowne byłoby usunięcie słowa po jego użyciu, ale jest kilka przypadków, w których dwie litery tworzą jedno słowo i to jest jedyne słowo każdej litery — więc chciałbym to jakoś wyjaśnić. Czy istnieje podejście do rozwiązania tego poza brutalną siłą? Może programowanie dynamiczne? Nawet nazwa tego procesu (jeśli istnieje) byłaby świetna.


title: Integracja strony mobilnej z aplikacją mobilną

text: Staram się przebudować witrynę mobilną, aby móc zintegrować ją z aplikacją mobilną rozwijaną przez inny dział, ale nadal działać w sieci. Aplikacja posiada własne menu, więc nie trzeba opuszczać menu na stronie mobilnej. Rozważaliśmy po prostu usunięcie menu, nagłówków i stopek z witryny oraz udostępnienie linków do stron innym działom, aby mogli dodać je do menu aplikacji. To oczywiście pozostawia naszą stronę internetową bez menu. Rozważałem utworzenie nowej strony głównej, która ma podobne menu do aplikacji, i ładowanie stron w ramkach lub za pomocą jquery .load() lub ASP zawiera... Ramki dałyby mi taką funkcjonalność, jakiej potrzebuję jest najbardziej podobny do aplikacji otwierającej strony w przeglądarce za pomocą swojego natywnego menu, ale ramki są takie... 1990-te. Jakie jest najlepsze rozwiązanie wykorzystujące nowoczesne standardy?


title: Jakie sytuacje są odpowiednie dla współdziałania C# do C?

text: Biorąc pod uwagę, że C# ma słowo kluczowe `unsafe`, czy są sytuacje, w których współpraca z bibliotekami C nadal byłaby korzystna? Widziałem potrzebę bardzo szybkiego przetwarzania liczb, manipulacji graficznych lub operacji na macierzach przy użyciu istniejących wcześniej bibliotek C. Ale czy istnieje przypadek użycia do pisania bibliotek DLL greenfield w, powiedzmy, C99 i współdziałania z nimi z C#? Wyobrażam sobie, że mogą wystąpić skrajne przypadki, w których zejście do C (w tym sensie, że jest bliżej metalu) byłoby jedynym sposobem na uzyskanie wymaganych charakterystyk wydajności.


title: Używając json jako bazy danych z EF, jak mogę połączyć EF i plik json podczas inicjowania DbContext?

text: Do osobistego projektu testowego rozważam stworzenie SPA z wykorzystaniem następujących technologii: ASP.NET MVC + EF + WebAPI + AngularJS. Projekt wykorzysta niewielką ilość danych, więc pomyślałem, że mogę użyć tylko pliku .json jako magazynu. Ale nie jestem pewien, jak postępować z łączem między EF a plikiem json podczas inicjowania DbContext. Znalazłem pytanie dotyczące stackoverflow: http://stackoverflow.com/questions/13899342/can-we-use-json-as-a-database Znam podstawy edycji plików i przechowywania danych w środku. To, co próbowałem, to pobrać dane z pliku json w metodzie initilizer i utworzyć obiekty jeden po drugim. Jest to bardziej wątpliwe, jak to działa, jeśli zapiszę/zaktualizuję obiekt w dbcontext, czy muszę przejrzeć wszystkie elementy i dodać/zaktualizować go ręcznie? Czy lepiej przepisać cały plik? Zgodnie z tym http://stackoverflow.com/questions/7895335/append-data-to-a-json-file-with-php nie jest dobrą praktyką używanie json/XML do manipulowania danymi. Czy ktoś ma doświadczenie z czymś podobnym? Czy to naprawdę zły pomysł i powinienem użyć innego rodzaju przechowywania danych?


title: Dlaczego nazywają program „mogrify” w Imagemagick?

text: Nie jestem native speakerem języka angielskiego. Czy w tej nazwie jest jakaś sztuczka? Co to oznacza lub sugeruje? PS. Nie wiem, czy to właściwa strona SE, aby zadać to pytanie, ale jeśli nie, czy możesz mnie wskazać?


title: Odzyskiwanie tego buzza?

text: Już od jakiegoś czasu pracuję nad rozwojem dla dobrej firmy, odkąd ukończyłem studia, naprawdę lubię to i świetnie się bawię w biurze i cieszę się wszystkim, co robię. Ale ostatnio straciłem ten stary szum, nie mogę się zmusić do kodowania poza pracą, jakiś czas temu mógłbym być poza pracą i wpaść na fajny pomysł, odejść i rozwinąć ten pomysł, ale czuję, że ten szum zniknął , nadal kocham rozwój i technologię, ale po prostu nie mogę znaleźć energii, aby to robić, gdy nie jestem w pracy. Czy ktoś jeszcze przeszedł przez taką fazę jak ta? Co zrobiłeś, aby to zwalczyć i odzyskać tę energię i brzęczenie? Może potrzebuję nowej technologii lub wakacji!


title: Co zrobić jako programista, gdy przez lata ich zespołowi brakowało innowacji produktowych, nie stosował metodologii zarządzania projektami i utrzymywał złe praktyki programistyczne?

text: Interesuje mnie, jak poradzić sobie z obecnym procesem tworzenia oprogramowania, który nie był zmieniany od lat i ostatecznie doprowadzi do niepowodzenia produktu i zespołu. Tak, prawdopodobnie łatwiejszym sposobem rozwiązania tego problemu jest zmiana pracy, ale przy tej gospodarce łatwiej powiedzieć niż zrobić. Jeśli jednak masz konkretne przykłady i widziałeś lub byłeś wiele razy w tej samej sytuacji i uważasz, że najlepszym rozwiązaniem tych problemów jest odejście z firmy, prosimy o poparcie swojej odpowiedzi. Chodzi o to, że to pytanie naprawdę ma odpowiedź, zwłaszcza jeśli wielu ekspertów w tej dziedzinie wskazuje, że najlepszą trasą jest trasa A. Wiem, że wielu programistów było lub jest w podobnych sytuacjach. Jest to jeden z głównych powodów, dla których firmy przechodzą z pozycji numer 1 na swoim rynku na ostatnie, a nawet poza nim. Mam nadzieję, że odpowiedzi w tym poście pomogą innym programistom w obliczu podobnych przeszkód. W małym lub dużym zespole programistycznym zwykle dzieje się tak: * Niektórzy programiści wydają się nie przejmować i decydują się płynąć z prądem i wolą pozostawić kod z dużą ilością kodu, który pachnie tak, jak jest i procesem rozwoju, * Inni się męczą bez zmian, rezygnacja i przeprowadzka do innej firmy, * inni boją się rozmawiać i wolą milczeć, * czasami bardzo niewielu programistów lub tylko jeden próbuje mówić o ulepszeniu produktu i mówi zespołowi, jak ważne jest postępuj zgodnie z najlepszymi praktykami kodowania i korzyściami płynącymi z tego dla klientów, użytkowników i zespołu. Tego typu programiści zazwyczaj decydują się na pozostanie w zespole z powodów takich jak: firma oferuje korzyści, które oferuje niewiele firm programistycznych, produkt ma duży potencjał itp. Produkt w naszym zespole to tylko ułamek tego, do czego firma dostaje swoje przychody z tego, że ma parasol produktów (ta firma nie jest firmą zajmującą się oprogramowaniem/sprzętem; w związku z tym, przynajmniej na razie, nie ma ciągłych sporów patentowych, co powoduje niestabilność miejsc pracy). To, czego do tej pory nauczyłem się w ciągu tych lat z doświadczeń innych programistów i mojego doświadczenia, to to, że naprawdę poznać zespół programistów, potrzeba czasu, nie dni ani tygodni, ale kilku miesięcy. W trakcie rozmowy kwalifikacyjnej, jeśli zespół chce Cię zatrudnić lub Cię potrzebuje; sprawiają, że wszystko brzmi świetnie i mogą powiedzieć Ci to, co chcesz usłyszeć. Jednak rzeczywistość jest inna, gdy zaczynasz pracę w tym zespole i zaczynasz kopać w kodzie i przechodzić do pełnego procesu SDLC. To wtedy, jako programista, zaczynasz dostrzegać realia pracy, w którą się znalazłeś. Ta rzeczywistość sprawia, że trudno jest chcieć przenieść się z jednej firmy do drugiej, ponieważ trudno jest stwierdzić, czy firma, do której się przenosisz, będzie lepsza, czy gorsza. Tak, możesz przeczytać recenzje Glassdoor itp., ale ile z tych recenzji online jest prawdziwych, a nie od HR? Jaki byłby najlepszy sposób na rozwiązanie problemów przedstawionych poniżej, biorąc pod uwagę, że menedżer od początku zawsze opierał się zmianom, a poprzedni deweloperzy robili to samo od lat? * Brak produktu Innowacyjność od lat: Produkt ma duży potencjał i przynosi firmie dobre przychody, ale produkt wygląda tak, jakby był zrobiony 20 lat temu. Niektórzy użytkownicy skarżyli się, że produkt nie jest przyjazny dla użytkownika ani intuicyjny, a inni wspomnieli, że są przyzwyczajeni do aplikacji takich jak Gmail i są sfrustrowani podczas korzystania z produktu, ponieważ nie mają podobnych funkcji. Głównym problemem jest to, że kiedy jako programista próbujesz wprowadzić zmiany w produkcie i zaczynasz przesuwać główne elementy produktu o kilka pikseli dalej (aby był bardziej przyjazny dla użytkownika lub intuicyjny), menedżer wpada w panikę i mówi ci umieścić go z powrotem tam, gdzie był. Jeśli spróbujesz dodać funkcję, która poprawi produktywność użytkowników, menedżer poprosi Cię o jej usunięcie, ponieważ „użytkownicy są przyzwyczajeni do wykonywania procesu w taki sposób, w jaki jest itp.”. Myślę, że masz rację opór przed zmianą, doskonalenie i innowacyjność (menedżer nie jest otwarty na zmiany, nawet jeśli jako programista dostarczasz mocne argumenty za korzyściami). Firma ma kilku konkurentów w branży (produkty kilku z nich są znacznie bardziej konkurencyjne), ale jakoś firma od lat utrzymuje obecnych klientów. * Brak koordynacji zarządzania projektami: W rezultacie niektóre projekty są dostarczane z opóźnieniem, z błędami, a niektórzy klienci narzekają (klienci również zgłaszają błędy), lub budżet jest wykorzystywany zbyt szybko przed dostarczeniem projektu itp. Podałem im kilka wskazówek dotyczących koordynacji projektów, a pomysły są obecnie regularnie wykorzystywane do śledzenia postępów projektów i zadań do wykonania. * Złe praktyki tworzenia oprogramowania: zapach kodu jest widoczny w większości, jeśli nie we wszystkich plikach, brak dokumentacji, nadmiarowość kodu, warstwy front-end i back-end zmieszane w tym samym pliku, przestarzałe narzędzia programistyczne, brak prawdziwego środowiska testowego ani narzędzi testowych (po prostu skopiuj i wklej pliki ze środowiska deweloperskiego do produkcyjnego, a następnie ręcznie przetestuj, czy wszystko wygląda dobrze i jest wydane). Większość narzędzi programistycznych, których używam do programowania i testowania, nie jest znana zespołowi, ponieważ zespół używa tylko 2 IDE do tworzenia kodu, a kontrola źródła jest dostępna tylko dla środowiska programistycznego. Inni programiści próbowali używać najnowszych frameworków, aby poprawić bieżące problemy, ale menedżerowi się to nie podoba, ponieważ „co jeśli odejdziesz, to kto będzie opiekować się tym kodem?, zostawmy to tak, jak jest”. Niektórzy z tych programistów już odszedł i przeniósł się do innych firm. Podsumowując, jestem pewien, że podobne sytuacje zdarzają się wielu programistom w innych firmach, ale ze względu na inne okoliczności programista może preferować pozostanie w zespole niż przejście do innej firmy z powodów takich jak (wygoda pracy, elastyczność pracy, korzyści dla firmy lub tylko dlatego, że nie nadeszła lepsza okazja). Nie ma idealnej firmy, o której wiem, ale jak byś jako programista zachowywał się i podchodził do wszystkich tych kwestii, aby utrzymać pozytywne rzeczy i ostatecznie promować zmiany w celu ulepszenia produktu i ulepszenia procesu tworzenia oprogramowania (czy masz wiele lat doświadczenia programistycznego czy tylko kilka)? **Wiem, że ten post jest długi, ale wolałem podać dodatkowe szczegóły, aby zwiększyć szanse na uzyskanie bardziej przydatnych opinii.** _**Bardzo dziękuję za wszystkie uwagi i czas_**


title: Dokumentowanie raportów dla użytkowników końcowych

text: Mam aplikację, która ma kilkanaście raportów, które dostarczają sumy i podsumowania danych w bazie danych na podstawie zakresów dat podanych jako parametry. Aplikacja zbliża się do końca testów użytkowników. Użytkownicy końcowi twierdzą, że liczby w sumach nie zgadzają się z oczekiwaniami wynikającymi z wprowadzonych danych testowych. Wygląda na to, że programiści i użytkownicy inaczej interpretują dane. Jak mogę udokumentować raporty w taki sposób, aby użytkownicy mogli zobaczyć, które rekordy są liczone, sumowane itp., aby uzyskać sumy, bez przytłaczania ich szczegółami technicznymi? Do tej pory próbowałem pisać zapytania użyte w raportach w pseudokodzie, ale wydaje się to zbyt techniczne i obawiam się, że otrzymam to samo „Raport nie zawiera poprawnych danych”. .


title: Kiedy używać wbudowanego języka skryptowego?

text: Czytałem już jakiś post o **dlaczego** używać wbudowanego języka skryptowego, ale chcę zapytać **kiedy** go używać. Zaimplementowałem framework wiążący Objective-C / Javascript, który pozwala mi pisać Javascript, aby używać dowolnych klas i metod Objective-C. Uważam, że jest to bardzo przydatne do celów debugowania, ponieważ mogę sprawdzać / modyfikować wewnętrzny stan mojej aplikacji w czasie wykonywania. Ale odkryłem również, że nadal wolę pisać kod ObjC zamiast kodu JS podczas budowania aplikacji z kilku powodów: * Uzupełnianie kodu. Jeśli chcę wywołać jakąś metodę `UIKit` z JS, często muszę sprawdzić dokument pod kątem jego nazwy, aby po prostu wpisać kilka pierwszych liter i pozwolić Xcode dokończyć go dla mnie w ObjC. * Wszystkie zalety statycznego języka pisanego. ObjC jest językiem z typami statycznymi i dynamicznymi, więc kompilator może wykonywać dla mnie wiele sprawdzania typów, jeśli to możliwe. * Wydajność? * Wiązanie C do JS nie jest jeszcze gotowe (jest to wymagane do przeanalizowania nagłówka i wygenerowania kodu w celu ujawnienia funkcji C, wyliczenia, struktury itp.) * Bardziej naturalne pisanie ObjC podczas pracy z metodami ObjC. (np. w kodzie pisania JS, takim jak `view.setEdit_animated(true, true)` porównaj do ObjC `[view setEdit:YES Animation:YES]` Ale czuję, że powinienem napisać więcej kodu JS, aby móc korzystać z języka skryptowego (np. zastąpić metody poprawkami błędów w czasie wykonywania) Nie jestem pewien, która część mojej aplikacji powinna być napisana w JS, a która powinna być napisana w ObjC.Jakaś rada?Również każdy wzorzec projektowy może być użyty dla osadzonego języka skryptowego?


title: Czy całkowicie niemożliwe jest całkowite oddzielenie bez jakichkolwiek przecieków w projekcie?

text: Przez ostatni tydzień próbowałem napisać projekt proof-of-concept z wykorzystaniem wstrzykiwania zależności, warstwy usług, wzorca jednostki pracy + repozytorium. Chcę zaprojektować coś, co może być łatwo wykorzystane przez dowolny typ aplikacji - czy to aplikację desktopową Windows, aplikację CLI, aplikację ASP.NET MVC, a nawet aplikację iOS działającą w trybie Mono. Proszę pamiętać, że jest to tylko dowód koncepcji. Do tej pory napisałem * A Unit of Work + Unit of Work Factory dla NHibernate i Entity Framework (2 frameworki OR/M dla .NET) * (Generic) repozytorium. Istnieje jedno repozytorium na implementację OR/M, przyjmując odpowiednią jednostkę Unit of Work Factory jako parametr konstruktora. Potrzebuje tego, aby pobrać bieżącą jednostkę pracy (ponieważ implementacja zawiera elementy niezbędne do funkcjonowania każdej struktury OR/M) Udało się to: * Mogę zamienić implementacje repozytorium i fabrykę jednostek pracy z NHibernate i Entity Framework, i to po prostu zadziała. To dobrze, z wyjątkiem tego, że nie zaimplementowałem jeszcze prawdziwej aplikacji, tylko testy jednostkowe. Oto problemy/wyzwania, przed którymi stoję: * ~~Każdy typ aplikacji (Desktop, CLI, ASP.NET MVC, iOS, Android, cokolwiek) nie definiuje jednostki pracy w ten sam sposób. Aplikacja komputerowa (AFAIK) powinna mieć jednostkę pracy na ekran - aplikacja internetowa powinna mieć jednostkę pracy na żądanie itp. Nie wiem, jak udostępniłbym pojedynczą jednostkę pracy wszystkim repozytoriom/usługom ( patrz poniżej), który tego potrzebuje.~~ \- Michael ma rację. * Chcę, aby cała moja logika znajdowała się w warstwie usług. Warstwa usług decyduje, kiedy jednostka pracy powinna zostać zatwierdzona. Chodzi o to, aby każdy, kto dzwoni do serwisu, wiedział, co mu przekazać i czego się w rezultacie spodziewać. Jeśli coś pójdzie nie tak, usługa rejestruje to. Gdybym musiał to zrobić na podstawie aplikacji, DRY zostałoby naruszone (prawda?). Wygląda na to, że gdybym miał zaimplementować ten całkowicie odseparowany projekt, ilość kodu, który musiałbym ponownie wykorzystać, nie byłaby taka, jak ilość kodu, którą musiałbym napisać, aby zaimplementować go w każdym typie aplikacji, co by, w końcu najprawdopodobniej wycieknie mój kontener IoC do aplikacji. Czy jestem całkowicie szalony, że nawet próbowałem tego? EDYCJA: Rzeczywisty problem, z którym się borykam, polega na zapewnieniu mojej warstwie usług i repozytoriom tej samej instancji jednostki pracy, bez względu na rodzaj używanej aplikacji.


title: Zwiększenie wydajności algorytmu

text: Mam pytanie o efektywność algorytmu: Masz listę punktów x,y Teraz chcę uzyskać wszystkie punkty oddalone do 5 jednostek od punktu odniesienia x,y Jak to najłatwiej obliczyć skuteczny sposób? Po prostu przechodzę przez każdy punkt i obliczam odległość, a jeśli ta odległość jest mniejsza niż 5, dodaję to do odpowiedzi. Jeśli wiesz, jak nazywa się ten algorytm - byłbym szczęśliwy, jeśli to też opublikujesz.


title: Kursy z zakresu zarządzania projektami

text: Mój pracodawca niedawno przeczytał dwanaście kroków do lepszego kodowania i chce, żebym napisał protokół, w jaki sposób powinniśmy radzić sobie z błędami i nowymi funkcjami. Jesteśmy małą firmą z zaledwie trzema programistami i używamy OnTime firmy axosoft do administrowania naszą pracą. Poszukuję kursu, na którym uczone są najlepsze praktyki w zakresie śledzenia błędów, rejestrowania pracy i planowania projektów. Jedyne, co udało mi się znaleźć, to sześciogodzinny kurs wprowadzający firmy axosoft. Czy to będzie miało wystarczającą głębokość? Proszę o rekomendacje!


title: Przekonaj programistę do korzystania z IDE

text: W firmie jest programista, nazwijmy go John (obecnie na okresie próbnym) w firmie (dość mała firma ok. 10 osób, 3 programistów, jeden z nich pracuje od dawna w tej firmie zna procesy biznesowe i można go uznać za kierownika zespołu), który nie chciał w ogóle używać żadnego IDE (używa jakiegoś edytora tekstu). Aplikacja, nad którą pracuje ten zespół, to średniej wielkości aplikacja Java ze stosem technologii Spring Hibernate i refaktoryzacją/dodawaniem nowych funkcji w celu uruchomienia nowej wersji tej aplikacji w niedalekiej przyszłości. Wydajność Johna pracującego bez IDE na tej aplikacji jest niższa niż pożądana, założenie lidera zespołu (nazwijmy go Billem) jest takie, że John nie używa IDE. Bill próbuje przekonać Johna do korzystania z IDE, ale pomysł ten spotyka się z dużym oporem, a głównym powodem jest "Chcę mieć całkowitą kontrolę nad tym, co robię, więc muszę pisać cały kod sam". Jak Bill może przekonać Johna, by spróbował użyć IDE? (biorąc pod uwagę fakt, że Bill już chronił Johna przed kilkoma skargami właściciela firmy na wydajność Johna) Zaktualizowano: Bill decyduje się spróbować przekonać Johna jeszcze raz, jeśli ta próba się nie powiedzie, nie będzie próbował zmusić Johna do korzystania z IDE i raczej sprawdź, czy funkcje obiecane przez Johna są dostarczane na czas, czy nie. Dzięki za wiele miłych odpowiedzi (wciąż nie mogę się zdecydować, która z nich jest najlepsza).


title: Ponad milion programistów COBOL na świecie?

text: Wydaje mi się, że słyszałem w poprzednim podcaście StackOverflow, że COBOL był używany jako język programowania sygnalizacji świetlnej (lub coś w tym rodzaju), więc mnie to zainteresowało. Przeszukałem szybko Google i znalazłem ten mały artykuł: > Dzisiaj Cobol jest wszędzie, ale w dużej mierze jest niespotykany przez miliony ludzi, którzy > korzystają z niego codziennie podczas korzystania z bankomatu, zatrzymywania się na światłach lub > kupowania produktu przez Internet. > > Statystyki dotyczące Cobolu świadczą o jego ogromnym wpływie na świat biznesu: > Istnieje ponad 220 miliardów linii Cobolu, co odpowiada > około 80 procentom aktywnie używanego kodu na świecie. **Na świecie jest ponad > milion programistów Cobol.** Każdego dnia odbywa się 200 razy więcej transakcji > Cobol niż w wyszukiwarkach Google. Naprawdę nie ufałem źródłu, widząc, jak jest na jakimś losowym forum PHPBB. Więc jak dokładne są te liczby? Czy naprawdę istnieje **220 miliardów** linii języka COBOL? Zakładam, że kilka osób/firm nadal używa języka COBOL, _ale ile?_


title: Jak obsługiwać wiele licencji w swoim kodzie

text: Załóżmy więc, że tworzę skrypt / małą aplikację, która ma mnóstwo własnego kodu i tylko niewielka jego część składa się z narzędzia od kogoś innego (powiedzmy prostą operację, taką jak wysyłanie plików do kosza lub wysyłanie powiadomienie), który korzysta z licencji, np. MIT. Teraz chcę, aby mój skrypt/aplikacja była public domain (lub licencjonowana przez MIT, weźmy dwa przykłady). 1. Jak odróżnić to w moim kodzie? Jak dokładnie wyjaśnić „ta część kodu jest obciążona tą licencją, a ta druga część jest moją licencją”? 2. Każda kopia, którą rozpowszechniam, musi zawierać licencję? Wydaje się to naprawdę idiotyczne/kłopotliwe, ponieważ musi przekazywać głupi plik tekstowy. 3. Czy muszę dołączyć oba pliki (ich i mój)? Numer 3 to moja największa wątpliwość, jak rzetelnie i wyraźnie wskazać każdą część kodu na konkretną licencję? Nie będę się o tym rozwodził, ale szczerze mówiąc, jest to dla mnie najbardziej stresująca część programowania, czy nie możemy po prostu z radością dzielić się kodem wśród rówieśników? W powyższych przykładach żadna z tych aplikacji nie jest „misja krytyczna”, ale są to ładne dodatki i nieuwzględnienie ich z powodu zamieszania/ograniczeń, jakie powoduje, jest prawdziwym wstydem.


title: Jak załadować pliki tekstowe do plików mapowanych w pamięci

text: Mam wiele dużych plików tekstowych, którymi muszę manipulować w bardzo wydajny sposób. Postanowiłem przyjrzeć się użyciu plików mapowanych na pamięć w C# (.NET 4). Jednak nie mogę znaleźć żadnych przykładów ani wskazówek dotyczących odczytu/zapisu w pliku mapowanym w pamięci, który poniżej jest powiązany z plikiem tekstowym. Czy ktoś może rzucić na to trochę światła i ewentualnie podać kilka przykładów? Jeśli to pomoże, będę czytać tekst całymi liniami, a następnie zmienić linię i zastąpić ją treścią, która może być krótsza lub dłuższa niż oryginał. Po wykonaniu wszystkich manipulacji chcę zapisać go z powrotem na dysku jako plik tekstowy.


title: Dlaczego OCaml nie jest bardziej popularny?

text: Zawsze słyszałem, że C jest preferowanym językiem dla systemów wbudowanych lub czegokolwiek, co musi działać z maksymalną szybkością. Nigdy nie rozwinąłem sentymentu do C, głównie dlatego, że nie lubię arytmetyki wskaźników, a język jest ledwie o szczebel ponad asemblerem. Z drugiej strony, języki ML są funkcjonalnymi językami zbierającymi śmieci, a OCaml ma nawet model obiektowy, ale mają reputację tak szybkich, jak języki C. Języki ML mają abstrakcję, o którą każdy mógłby poprosić, aby pisać na wysokim poziomie, zwięzłe kodu, ale zachowuje szybkość niezbędną do pisania wysokowydajnych aplikacji. OCaml w szczególności może być używany wszędzie tam, gdzie tradycyjnie używa się C, na przykład w urządzeniach wbudowanych, sterownikach graficznych, systemach operacyjnych itp. Zgodnie z wszelkimi prawami, OCaml powinien już przejąć świat, ale mało kto słyszał o tym języku jeszcze sam Użyj tego. To subiektywne pytanie, ale dlaczego inne języki OCaml i ML pozostały tak niejasne, podczas gdy C i inne języki stały się popularne?


title: Tworzenie projektu open source w imieniu mojej organizacji

text: Pracuję nad narzędziem, które zostało opracowane do użytku w mojej organizacji. Niedawno zarząd zdecydował się na udostępnienie tego oprogramowania. Będzie to pierwszy wkład mojej firmy i mojego autorstwa o otwartym kodzie źródłowym. Jak mogę stworzyć projekt open source, który również pokaże, że pochodzi z tej organizacji? Czy wystarczy nazwać go orgName_toolName, czy jest jakaś inna praktyka, którą się stosuje? Planuję udostępnić to na Github.


title: gdzie korzystać z usług internetowych

text: Odkrywam usługi sieciowe do wdrożenia w mojej witrynie ASP.Net. Odwiedziłem wiele witryn o Dlaczego warto korzystać z usług internetowych i przeczytałem wiele artykułów i dowiedziałem się, że usługi internetowe są dobre, gdy masz coś, co jest często używane bez ładowania strony. Chcę poznać inne przykładowe scenariusze, w których używane są usługi sieci Web. Niezależnie od tego, czy mogę używać usług internetowych do wysyłania formularza zamówienia do bazy danych, czy tylko do automatycznego uzupełniania pól tekstowych, takich jak google itp. **Uwaga:** Wiem, że usługi internetowe mogą być używane z aplikacji mobilnych, internetowych lub stacjonarnych. Ale moje pytanie brzmi: **_Kiedy używać usługi sieciowej w aplikacji ASP.Net?_** Niektóre artykuły, które przeczytałem do tej pory * Codeplex * Jak utworzyć usługę sieciową za pomocą Visual Studio.net * w3school


title: Jak wygląda konfiguracja aplikacji webowej node.js na prawdziwym serwerze produkcyjnym?

text: Będąc nowym w magicznym świecie node js, zastanawiam się, jak wygląda konfiguracja aplikacji internetowej na prawdziwym serwerze produkcyjnym? Jak na razie wszystkie tutoriale, stwórz plik js, który jest uruchamiany z konsoli... i to wszystko. Ktoś stworzył aplikację internetową z prawdziwego świata, która używa węzła js na zapleczu? Czy możesz opisać, jak to jest skonfigurowane i jak niezawodna jest ta infrastruktura? Pochodzę ze świata asp.net i php, które wymagają ciężkich serwerów internetowych... i nie mogę mieć jasnego pojęcia o rzeczach związanych z węzłami.


title: Co zrobić, gdy wyczerpałeś wszystkie możliwości naprawienia błędu?

text: Jestem Młodszym Programistą (do tej pory 4 miesiące doświadczenia zawodowego) pracującym nad Wieloplatformową Aplikacją Mobilną (1 osobowy zespół - więc to tylko ja). Mam błąd w tym programie/aplikacji, który jest dość duży (30 różnych plików nagłówkowych, każdy z własnym plikiem cpp). Próbowałem dokładnie wyśledzić, co się dzieje z błędem, a także go naprawić (nawet próbowałem użyć kilku hacków, aby po prostu zadziałał), ale około tuzina lub więcej rozwiązań (mam pomysły na to, co powoduje problem ) Nic nie skłoniło mnie do wyśledzenia dokładnie tego, czym jest błąd, lub do naprawienia błędu. **Czy masz jakieś rady dla młodszego programisty w zakresie ogólnych technik (przebiegnij, wydrukuj cały mój kod na papierze i przejrzyj go długopisem, itp.), których mógłbym użyć, aby pomóc mi z tym błędem?** Aby dać trochę więcej kontekstu dla mojego błędu; obejmuje międzyplatformowy interfejs API Mosync, kiedy wykonuję określoną sekwencję działań, bieżący ekran nie jest przerysowywany (i wydaje się, że poprzednio wyświetlany ekran nadal odbiera zdarzenia naciśnięcia wskaźnika/klawiszy, a nie bieżący ekran. Konkretna sekwencja: \- Wyświetlany ekran menu - kliknij „Pokaż przycisk poprzednich zamówień” \- Wyświetlany ekran poprzednich zamówień - kliknij „Załaduj plik”, a następnie kliknij przycisk menu i otwórz ekran dostawy \- Wyświetlany ekran dostawy - kliknij przycisk menu i otwórz ekran zakupu \ - Wyświetlony ekran zakupu - Błąd tutaj, dane wejściowe do tego ekranu nie są wyświetlane/nie reagują, ListViews nie przewija się, przyciski nie reagują na kliknięcia, komórki ListView nie reagują na kliknięcia 100% wykonując te same kroki za każdym razem, chociaż nadal bardzo trudno jest ustalić, w jaki sposób zdarzenia wskaźnika są przesyłane i na jaki ekran, ponieważ jest to część interfejsu API, do którego nie mogę dotrzeć (lub nie wiem, jak to zrobić). Chciałabym też, aby moja praca przyjrzała się innym oczom i zwróciła uwagę na błąd, ale jak powiedziałem, jestem zespołem składającym się z 1 osób, kieruje mną mój szef, jest właścicielem firmy i ma pomysły na aplikację, ale nie nie znam też C++ ani żadnych nowych języków (cobal? Myślę, że to wszystko). Jakieś porady, jak zdobyć drugą parę oczu bez naruszania/popisywania się intelektualnym kodem/własnością firmy? ...i żadne odejście z tego płatnego stażu nie wchodzi w grę, umowa mówi, że jeśli wyjadę przed 6 mn-ty 12-miesięcznego kontraktu, być może będę musiał zapłacić 30% mojej rocznej pensji


title: Konwertowanie DFA na NFA

text: Mam zadanie przekonwertowania opisów różnych języków na NFA i DFA. Po ukończeniu studiów z CompSci B.S. lat temu i nie poruszam tematu aż do mojego MS. program, łamię sobie głowę nad jednym z pytań. Mogę łatwo skonstruować DFA, ale odpowiedzią musi być NFA, który nie jest jednocześnie DFA. _Nie szukam odpowiedzi na moją pracę domową_. Potrzebuję tylko wskazówek, jak to skonstruować. Pytanie zasadniczo stwierdza, że „jeśli ciąg zawiera wzorzec A, musi również zawierać wzorzec B”, gdzie kolejność tych dwóch jest nieistotna. Dopuszczalne jest również λ. Mój DFA ma dwie gałęzie. Gałąź 1 szuka wzorca A, a następnie nie akceptuje, dopóki nie napotka wzorca B. Gałąź 2 szuka wzorca B, a następnie akceptuje wszystko. Nie jestem pewien, jak dodać niedeterministyczne zachowanie do tego DFA, aby spełnić wymagania zadania. Googlowanie wywołuje debaty na temat kompromisów między złożonością a pamięcią między dwoma podejściami, a także twierdzenia dowodzące, że jest to możliwe. Ale bez przykładów, i tak się najlepiej uczę.


title: Czego można użyć zamiast przypadków użycia do zebrania wymagań?

text: Jestem programistą aktualnie pracującym w rundach spotkań wraz z licencjatami i kierownikami w celu zebrania/opisania modułów i funkcjonalności naszego systemu zarządzania sprawami; po kilku spotkaniach zauważyłem, że użycie „przypadków użycia” byłoby bardzo dobrym rozwiązaniem do udokumentowania wielu rzeczy i funkcji omawianych i/lub proponowanych dla nowego systemu. Kiedy zasugerowałem, że musimy stworzyć „przypadki użycia”, abyśmy nie zapomnieli o tym, co powiedzieliśmy/wnioskowaliśmy, a także aby programiści wiedzieli, co powinni kodować, wspomniany główny specjalista nie lubi „przypadków użycia”. Co można wykorzystać do zbierania/dokumentowania wymagań, gdy ludzie, którzy mają pisać wymagania użytkownika, mówią, że nie lubią „przypadków użycia” lub gdy zdajesz sobie sprawę, że nie chcą pisać „przypadków użycia”, aby opisać, co system powinien zrobić ? Próbuję dowiedzieć się, czy istnieje bliskie lub skuteczne zastąpienie używania „przypadków użycia” do dokumentowania funkcjonalności/scenariuszy systemu.


title: Jaka jest różnica między zasadą a najlepszą praktyką?

text: Niedawno przeczytałem http://simpleprogrammer.com/2013/02/17/principles-are-timeless-best-practices-are-fads/ i to do mnie trafiło. Uważam, że bardziej doświadczeni programiści/architekci sprzeciwiają się obecnym najlepszym praktykom, a ich usprawiedliwieniem jest to, że niektóre najlepsze praktyki nie działają w ich problematycznej domenie. Na przykład właśnie zacząłem pracować w nowej firmie jako programista, a mój architekt zapisuje swoje zapytania nhibernate w warstwie interfejsu użytkownika zamiast pisać je w osobnej warstwie. Część mnie krzyczy, wiedząc o tym, ponieważ jest to sprzeczne ze wszystkim, co czytałem w Internecie przez ostatnie 5 lat, ale jestem wystarczająco chętny, aby spróbować tego podejścia i zważyć zalety i wady. Kto wie, może ma rację. Uważam go za bardzo komponentowego programistę. Co odróżnia zasadę od najlepszej praktyki (jeśli w ogóle)? Jak możesz odróżnić te dwa i jak określić, kiedy należy je zignorować?


title: Łańcuch jest niezmienny, więc dlaczego nie wszystkie są stałymi?

text: Typ „string” jest niezmienny. Możemy użyć słowa kluczowego `const` z `strings` w języku wysokiego poziomu, takim jak .NET. Moje rozumienie „const” oznacza stałe (pozostaje takie samo, nie możemy zmienić wartości). Czy „napisy” nie zawsze są „stałe” (IMO termin „stały” nie powinien mieć zastosowania w tym samym kontekście, jeśli typ musi być odtwarzany za każdym razem, gdy oznacza to czas życia wartości, był stały)? W językach wysokiego poziomu, a konkretnie .NET (chociaż byłbym również zainteresowany Javą), czy jest to spowodowane ogólnym zarządzaniem pamięcią / śledzeniem obiektów, czy jest inny powód?


title: Zwinne zaległości produktowe

text: Rozpoczynamy projekt Agile, a właściciel produktu zaczął dodawać historyjki użytkowników do backlogu produktu (głównie epiki na tym etapie). Kto byłby odpowiedzialny za rozbicie eposów na mniejsze historyjki użytkowników — czy pozostawiono to właścicielowi produktu, czy też oczekujesz zaangażowania reszty zespołu (pamiętając, że nie będą oni mieli żadnej wiedzy na temat wymagań lub problematycznej domeny )?


title: WCF Keep Alive: czy wyłączyć keepAliveEnabled

text: Mam usługę sieci web WCF hostowaną w środowisku o zrównoważonym obciążeniu. Nie potrzebuję żadnych funkcji związanych z sesją WCF w usłudze. **PYTANIE** Jakie są scenariusze, w których wydajność będzie najlepsza, jeśli 1. keepAliveEnabled = false 2. keepAliveEnabled = true **Reference** From Load Balancing > Domyślnie BasicHttpBinding wysyła w wiadomościach nagłówek HTTP połączenia z Wartość Keep-Alive, która umożliwia klientom nawiązywanie trwałych > połączeń z usługami, które ich wspierają. Ta konfiguracja oferuje > zwiększoną przepustowość, ponieważ wcześniej nawiązane połączenia można ponownie wykorzystać > do wysyłania kolejnych komunikatów do tego samego serwera. Jednak ponowne użycie > połączenia może spowodować silne powiązanie klientów z konkretnym serwerem w > farmie równoważenia obciążenia, co zmniejsza skuteczność > równoważenia obciążenia okrężnego. Jeśli to zachowanie jest niepożądane, HTTP Keep-Alive można wyłączyć > na serwerze przy użyciu właściwości KeepAliveEnabled z CustomBinding lub > powiązaniem zdefiniowanym przez użytkownika.


title: Czy jest w porządku, aby metoda zwracała różne typy na podstawie parametru?

text: Szukam odniesienia do czystych stylów kodowania, które mogę przekazać członkowi zespołu. W szczególności reguła, że metoda nie powinna zmieniać zwracanego typu na podstawie parametru wejściowego. Jeśli potrzebujesz innego wyniku, użyj innej metody. Przykład: $invoice_items = getInvoiceItems(); $łącznie = pobierzInvoiceItems(PRAWDA); Dla mnie jest to zły styl kodowania (i nie mówię nawet o parametrze, którego znaczenia nie można określić na podstawie kodu wywołującego). Powyższy przykład powinien wyglądać tak: $total = totalInvoiceItems(); ... gdzie `totalInvoiceItems()` może wywołać `getInvoiceItems()`, aby uzyskać elementy, których potrzebuje do zsumowania. Gdzie znajdę odniesienie do tego (i ewentualnie innych ważnych zasad stylu kodowania)?


title: Kierownictwo musi zatrudnić nowego programistę?

text: Pracuję tu od około 3 miesięcy, a ta firma istnieje od 2003 roku. Jestem jedynym pełnoetatowym programistą i nie wiem, co się stało z facetem w niepełnym wymiarze godzin, który pracował przed moim zatrudniony, nie widziałem go od miesiąca po rozpoczęciu pracy, poza kilkoma e-mailami. W zasadzie to sprawia, że jestem jedynym programistą, który stara się zbalansować dodawanie nowych funkcji do naszego głównego produktu (usługa serwisu subskrypcyjnego), rozwijanie wersji produktu na Androida, rozwiązywanie problemów z klientami, pracę nad migracją klientów ze starej wersji do nowej ( i bóle głowy, które z tego wynikną), naprawianie problemów z usługą rejestracji po stronie dostawcy usług internetowych i pomoc w zakresie wsparcia technicznego po stronie dostawcy usług internetowych. Nie wspominając o gruntownym przeglądzie, jestem całkiem pewien, że baza danych potrzebuje, co będzie oznaczać co najmniej kilka miesięcy pracy. Moi szefowie zatrudnili stażystę, aby pomógł mi z wersją Androida, ale jeden szef losowo pojechał do Anglii do grudnia, zabierając ze sobą stażystę. Jakieś wskazówki, których mogę użyć, aby przekonać kierownictwo do zatrudnienia kogoś innego? Nawet jeśli jest to tylko drugi pełnoetatowy facet wsparcia, który pomoże w rozmowach telefonicznych?


title: Dlaczego firma Apple zdecydowała się zaprojektować swój język programowania z nazwami metod czasu przyszłego i przeszłego?

text: Istnieje wiele takich metod w iOS/Objective C: - viewDidLoad - viewWillAppear: - applicationDidFinishLaunching Właśnie rozmawiałem z kilkoma kolegami na temat tego wyboru projektu i dlaczego zdecydowali się być tak gadatliwi, a nie bardziej "standardowe" sposoby propagacji zdarzeń np.: - onViewLoad - onViewAboutToAppear - onApplicationFinishLaunching Nie miałem na to odpowiedzi i sprowadziłem ją do osobistych preferencji zespołu projektującego język. Zastanawiam się jednak, czy jest w tym coś więcej – czy jest to preferowana opcja. Albo czy zespół chciał po prostu odróżnić się od innych języków, czy od normy. Jeśli ktoś ma jakiś wgląd, byłoby to bardzo interesujące. Dziękuję


title: Zainicjuj tablicę w zamortyzowanym stałym czasie -- jak nazywa się ta sztuczka?

text: Istnieje taka struktura danych, która handluje wydajnością dostępu do tablicy z potrzebą iteracji podczas jej czyszczenia. Przy każdym wpisie trzymasz licznik generacji, a także globalny licznik generacji. Operacja „wyczyść” zwiększa licznik generacji. Przy każdym dostępie porównujesz lokalne i globalne liczniki generacji; jeśli się różnią, wartość jest traktowana jako „czysta”. Pojawiło się to ostatnio w tej odpowiedzi na Stack Overflow, ale nie pamiętam, czy ta sztuczka ma oficjalną nazwę. Czy to? Jednym z przypadków użycia jest algorytm Dijkstry, jeśli tylko niewielki podzbiór węzłów ma zostać złagodzony i jeśli trzeba to robić wielokrotnie.


title: Czym właściwie jest strumień bajtów?

text: Czy ktoś może mi wyjaśnić, co faktycznie zawiera strumień bajtów? Czy zawiera bajty (dane szesnastkowe) czy dane binarne lub tylko litery angielskie? Jestem również zdezorientowany terminem „surowe dane”. Jeśli ktoś poprosiłby mnie o „odwrócenie 4-bajtowych danych”, to co mam założyć, że dane są kodem szesnastkowym czy binarnym?


title: Gorące tematy w informatyce i certyfikacjach

text: Zbliżam się do końca mojej edukacji i przygotowując się do wejścia do pracy, pomyślałem, że dobrze byłoby studiować kilka gorących tematów z dziedziny CS. Słyszałem o takich rzeczach jak Neutralność Sieci i Interakcja Komputerowa i innych, ale nigdy tak naprawdę, aż do teraz, nie poświęciłem dużo czasu na dogłębne studiowanie tego rodzaju rzeczy. Miałem nadzieję, że zdobędę trochę informacji, aby móc skupić się na rzeczach, które są bardziej przydatne/praktyczne w terenie. Na marginesie, jakie byłyby dobre certyfikaty do zdobycia, które naprawdę otworzyłyby możliwości pracy. Tylko trochę tła, jeśli jest to ważne: mam doświadczenie zawodowe jako webmaster i obecnie chciałbym zająć się programowaniem wbudowanym lub programowaniem sieciowym.


title: Projekty open source, które płaci deweloperom?

text: Czy są jakieś projekty Java open source, które płaci deweloperom? Natknąłem się na to z książki : Programowanie wywiadów Exposed. Strona #25 > Czy preferowane są projekty typu open source? > > Zdecydowana większość zadań programistycznych zwykle dotyczyła > projektów własnościowych, > o zamkniętym kodzie źródłowym, które niektórzy programiści uważają za niedopuszczalne. Nastąpiła niewielka zmiana na korzyść bardziej otwartego tworzenia oprogramowania, co daje więcej możliwości dla ludzi takich jak Ty do udziału w projektach o otwartym kodzie > źródła i **nadal otrzymywać wynagrodzenie za ten udział**.


title: Czy jest jakiś powód, aby używać varchar zamiast kolumn tekstowych w bazie danych?

text: Czy `varchar` jest tylko pozostałością przed pojawieniem się `text`, czy są przypadki, w których _chcesz_ użyć `varchar`? (Lub `char`, jeśli o to chodzi...) (Używam Postgres i MySQL (MyISAM) codziennie, więc to właśnie mnie najbardziej interesuje, ale odpowiedzi dla innych baz danych są oczywiście mile widziane. ^_-)


title: Krytykowanie swojego byłego pracodawcy podczas rozmowy kwalifikacyjnej

text: Jestem bardzo młodym programistą, świeżo po studiach i w mojej pierwszej pracy programistycznej. Jestem dość niezadowolony z mojej obecnej firmy - standardy inżynierii oprogramowania tutaj są dość tandetne - baza kodu jest pełna nieskomentowanego, nieudokumentowanego kodu źródłowego, z takimi whopperami jak metody 664 wierszy (z około 40 wierszami zakomentowanego kodu) w naszej produkcji kod. Wspomniałem o tym szefowi i nie obchodzi go to, a szczerze w tym momencie ja też nie - szukam nowej pracy. Kiedy przeprowadzam następną rozmowę kwalifikacyjną, ile powinienem wspomnieć o tym potencjalnemu pracodawcy? Że moja dawna (obecna?) firma ma tandetne standardy inżynieryjne, kodowane przez ludzi, którzy pozornie dostali zamówienia wysyłkowe na dyplomy CS (cóż, byłbym nieco bardziej dyplomatyczny w tej sprawie). Nie sądzę, że utrzymywanie kodu z ponad 10 000 linii bez komentarzy lub dokumentacji jest dobrym sposobem na rozpoczęcie kariery i wyrobienie dobrych nawyków. Pytanie brzmi, jak mam to powiedzieć przyszłym przyszłym pracodawcom? EDYCJA: Powinienem wspomnieć, że mam inne, całkowicie niewinne powody, o których mogę wspomnieć, dlaczego odszedłem / szukam nowej pracy, ale nie wiem, ile z tandetnej inżynierii powinienem wspomnieć.


title: Proces oczekiwania i zatwierdzenia

text: Powiedzmy, że mam tabelę DB z 8 kolumnami, jedna to unikalna autoinkrementacja używana jako ID. Mam więc stronę, która pobiera informacje dla każdego wiersza na podstawie identyfikatora ciągu zapytania. Chcę dać moim użytkownikom możliwość proponowania zmian. Trochę jak konfiguracja wiki. Pomyślałem więc, że powinienem po prostu mieć kolejną zduplikowaną tabelę lub może całkowicie bazę danych (bez kolumny z automatycznym przyrostem i być może z kolumną z edycją daty), która przechowuje wszystkie proponowane zmiany w kolejce, a następnie, kiedy je zatwierdzę, skrypt może przenieść wiersz od proponowanego DB do rzeczywistego DB. Czy to brzmi dobrze, czy jest na to lepszy proces?


title: Rozwiązywanie konfliktów między programistami

text: Czasami, może podczas przeglądu kodu lub spotkania projektowego, kłótnie mogą się nagrzać i łatwo jest nieumyślnie kogoś obrazić. Te rzeczy mogą z kolei stworzyć napiętą atmosferę w miejscu pracy lub w zespole, co prędzej czy później zaszkodzi współpracy między kolegami. Moje pytanie brzmi: jakie są dobre metody rozwiązywania tych napięć? Co możesz zrobić – na poziomie osobistym – aby pomóc tym problemom?


title: Jak wyjść poza przykłady kodu bez projektu?

text: Obecnie uczę się Scali i znajduję mentalny blog o tym, jak przejść do stopnia, w którym mogę codziennie używać Scali poza normalnymi przykładami. Po prostu nie mam na myśli konkretnego projektu, co mogę zrobić. Nie jest to tak naprawdę specyficzne dla Scali, tylko ogólnie, jak można osiągnąć biegłość w języku poprzez samouczenie się bez robienia / posiadania projektu w dłoni?


title: Dlaczego programista powinien zaprojektować algorytm przed rozpoczęciem pisania kodu?

text: Czy odpowiedni algorytm rzeczywiście pomaga poprawić jakość i ostatecznie wydajność programu? Czy nadal możemy stworzyć program dobrej jakości bez algorytmu? Czy odpowiedni algorytm jest MUSI we współczesnym programowaniu?