title: Czy konieczne jest stworzenie bazy danych z jak najmniejszą liczbą tabel?

text: Czy powinniśmy stworzyć strukturę bazy danych z minimalną liczbą tabel? Czy powinien być zaprojektowany w taki sposób, aby wszystko pozostało w jednym miejscu, czy można mieć więcej stołów? Czy w jakikolwiek sposób wpłynie to na coś? Zadaję to pytanie, ponieważ mój przyjaciel zmodyfikował strukturę bazy danych w mediaWiki. W końcu zamiast 20 stołów używał tylko 8 i zajęło mu to 8 miesięcy (to było jego zadanie na studiach). **EDYTUJ** Konkluduję tak: wielkość tabel NIE ma znaczenia, dopóki sprawa nie jest wyjątkowa; w takim przypadku denormalizacja może pomóc. Dziękuję wszystkim za odpowiedzi.


title: Jak zamodelować GUI przyszłej aplikacji na iPhone'a?

text: Załóżmy, że pracujesz nad zaprojektowaniem najlepszej na świecie aplikacji na iPhone'a. Jak zdecydować, który interfejs użytkownika byłby bardziej efektywny, bardziej intuicyjny itp.? Jak przyjmujesz pomysł i decydujesz, jak go wizualnie przedstawić? Czy używasz jakichś programów (na Macu) do modelowania czegoś takiego?


title: Jak zaprojektowano i zaimplementowano interfejs konfiguracji routera?

text: To dość prosta koncepcja, a każdy sprzedawca wydaje się mieć własną „stronę internetową” dla swojej konfiguracji. Chciałbym dowiedzieć się kilku rzeczy. W moim routerze linksys, jeśli przejdę do 192.168.1.1, poprosi o proste logowanie, a następnie stronę stanu. Tutaj porty/hasła i wszystko, co można całkowicie zmienić. Ciekawe jest to, jak działa aktualizator oprogramowania. Możesz kliknąć upload, wrzucić nowe oprogramowanie i prawdopodobnie flashuje urządzenie. Jakie technologie / frameworki byłyby idealne do stworzenia własnej niestandardowej strony routera? Widziałem niestandardowy (Pomidor).


title: Pytanie dotyczące licencji publicznej firmy Microsoft

text: Przedmówmy to stwierdzeniem, że rozumiem, że wszelkie porady, jakie mogę otrzymać, nie powinny być traktowane jako w 100% poprawne, po prostu szukam tego, co ludzie rozumieją, czym jest ta licencja. Szukałem biblioteki, która pozwoliłaby na obsługę zarchiwizowanych plików skompresowanych (takich jak pliki zip) i jak dotąd najlepszą, jaką znalazłem, jest DotNetZip. Jedyne obawy, jakie mam, to fakt, że nie znam Publicznej Licencji Microsoft. Chociaż planuję uwolnić część mojego projektu (platformę aplikacji webowych) swobodnie (w stylu MIT/BSD), jest kilka rzeczy. Jednym z nich jest to, że nie planuję wydawania kodu źródłowego, tylko skompilowany projekt. Inna sprawa, że nie planuję wypuszczać wszystkiego swobodnie, tylko część aplikacji. To jest powód, dla którego trzymam się z daleka od kodu (L)GPL. Czy jest to dozwolone podczas korzystania z bibliotek innych firm, które są objęte licencją Microsoft Public License? **EDYTUJ** Część dotyczącą licencji Microsoft, która mnie dotyczy, to sekcja 3 (D), która mówi (pełna licencja tutaj): > Jeśli rozpowszechniasz jakąkolwiek część oprogramowania w postaci kodu źródłowego, możesz to zrobić > tylko na podstawie tego licencji, dołączając pełną kopię tej licencji > do swojej dystrybucji. Jeśli rozpowszechniasz jakąkolwiek część oprogramowania w postaci > skompilowanej lub kodu wynikowego, możesz to robić tylko na podstawie licencji, która jest > zgodna z niniejszą licencją. Nie wiem, co to znaczy „oprogramowanie”. Moje założenie byłoby takie, że „oprogramowanie” odnosi się tylko do biblioteki objętej licencją (jest to DotNetZip), a to nie rozciąga się na mój kod, który zawiera bibliotekę DotNetZip. Jeśli tak jest, to wszystko jest w porządku, ponieważ nie mam problemów z utrzymaniem licencji na DotNetZip, gdy wydam ten projekt w skompilowanej formie, mając mój kod na własnej licencji. Jeśli „oprogramowanie” zawiera również mój kod, który zawiera bibliotekę DotNetZip, byłby to problem (ponieważ zasadniczo działałoby to jak GPL z sensem copyleft).


title: Czy ciągłe dostarczanie może działać w środowisku dużego przedsiębiorstwa z wieloma połączonymi systemami?

text: Wiele mówi się ostatnio o ciągłej dostawie. Brzmi to atrakcyjnie, ale jest sprzeczne z konwencją mądrości wielkich korporacji. * Jez Humble - Ciągła dostawa * Prezentacja Thoughtworks - Ciągła prezentacja - Część 1 * Prezentacja Thoughtworks - Ciągła dostawa - Część 2 Zakładając, że: * Masz wiele zdalnych systemów podłączonych przez ESB * Masz ugruntowany system z kilkuletnim kodowaniem zastosowane do niej zmiany * To jest strona internetowa, która umożliwia transakcje finansowe * Istnieje wiele systemów zaplecza odpowiedzialnych za przetwarzanie różnych typów transakcji * Obecnie wersje produkcyjne zakładają inwestycję wielu 10 000 USD w ręczny test regresji Czy Continuous Delivery można wdrożyć w takim środowisku ? (tj. czy podstawą ciągłego dostarczania jest założenie, że inwestujesz dużą kwotę w automatyczne testy regresji, które są koordynowane między systemami?) (Z pewnością automatyczne testy jednostkowe mogą udowodnić, że system nie jest niepoprawny, ale nie mogą udowodnić, że jest poprawny).


title: Nauka podstaw programowania graficznego

text: Po zapoznaniu się z podstawami obliczania prostych gier do rzucania kostkami i aplikacji kalendarza, chcę zbadać prostą grafikę - rysowanie i poruszanie się po obiektach geometrycznych jest w porządku na początek, ewentualnie dodając oczywiście grafikę pikselową. Wziąłem udział w kursie wprowadzającym w Javie, ale wolę to zrobić w C++, Pythonie lub ich kombinacji (tego właśnie będziemy w końcu używać w szkole). Chcę również poznać zasady, które się za tym kryją, a nie tylko ślepo stosować niezrozumiałą składnię, aby uszczęśliwić kompilator. Niektóre posty zdają się sugerować, że SFML to dobry wybór, więc pomyślałem, że dostanę książkę o tym i przepracowam, ale wydaje się, że dostępna jest tylko JEDNA książka o SFML i ta w ogóle nie została zrecenzowana. Nie mam nastroju na hazard za 30 dolarów, więc czuję się trochę zagubiony! Jak mam podejść do nauki podstawowego programowania graficznego?


title: Co to znaczy, że format wymiany JSON ma licencję?

text: Niedawna fala komentarzy dotyczących problemu z JSHint zaalarmowała mnie, że format wymiany danych JSON ma licencję. Treść tej licencji można dyskutować w innym miejscu. Nie jestem pewien, co to znaczy, że JSON (lub jakikolwiek inny format wymiany danych) ma licencję. Jeśli biblioteka po prostu wykorzystuje i analizuje JSON, czy musi zawierać tę licencję? Rozumiem, że korzystanie z biblioteki zawierającej tę licencję wymagałoby uwzględnienia jej przez użytkownika. Mówię o pisaniu biblioteki od podstaw. Co jeśli muszę używać JSON, ponieważ usługa strony trzeciej komunikuje się tylko przez JSON. Jeśli serializuję i deserializuję dane zgodnie z RFC, czy nadal muszę odwoływać się do licencji?


title: Czy istnieje tytuł dla kogoś, kto jest zarówno programistą, jak i analitykiem biznesowym?

text: Zwykle widzę dwa tytuły pracy w branży IT. Moje rozumienie ich najczęściej akceptowanego użycia (uproszczone): * **Analityk biznesowy:** Główną rolą jest pozyskiwanie potrzeb użytkowników * **Programista** Główną rolą jest zaprojektowanie, zbudowanie i przetestowanie oprogramowania odpowiadającego na potrzeby Zastanawiam się: " _Jak powinniśmy nazywać kogoś, kto ma pełnić obie powyższe role?_ " Czy to powszechny tytuł zawodowy? I czy próba znalezienia ludzi o tak szerokim zakresie umiejętności jest realistyczna, trudna? **EDYTUJ:** Szczególnie interesuje mnie wskazanie głównych programistów, którzy w końcu nauczyli się i mogą stosować techniki analizy biznesowej.


title: Śledzenie historii pracy w repozytorium git

text: **Poprzednie pytania pokrewne:** * Bazy kodu dla wersji komputerowych i mobilnych tej samej aplikacji * Sprawdzone metody rozgałęziania i tagowania w Git **Pytanie:** Podzieliłem moje repozytorium na trzy katalogi (swing, android i common) jako zaproponowany przez @KarlBielefeldt w odpowiedzi na moje poprzednie pytanie. Teraz skaczę tam i z powrotem między rozwijaniem mojego portu Androida a ulepszaniem/dodawaniem funkcji do mojej oryginalnej aplikacji Swing. Wszystkie moje zmiany są liniowe (szybkie przewijanie do przodu) i tylko moje komunikaty o zatwierdzeniu dają wskazówki wskazujące, czy pracuję w aplikacji Swing, czy w aplikacji na Androida. Czy istnieje lepszy sposób na śledzenie przepływu pracy w moim repozytorium git?


title: Pytanie dotyczące książki „Naucz się programowania” autorstwa Chrisa Pine

text: Nie wiem, gdzie to opublikować, więc przepraszam, jeśli to niewłaściwe miejsce. Kupiłem na iPadzie książkę „Naucz się programowania” Chrisa Pine'a. Będę podróżował przez około dwa dni, więc chcę przeczytać tę książkę i oczywiście nauczyć się programować, ale nie będę miał dostępu do komputera, więc czy warto przeczytać tę książkę podczas podróżny? Przejrzałem go i mam kilka ćwiczeń, więc zastanawiałem się, co powinienem zrobić. Dziękuję


title: Reprezentowanie hierarchii rodzic/dziecko w relacyjnej bazie danych

text: Pracuję nad aplikacją, która łączy się z inną aplikacją (Quickbooks) przy użyciu interfejsu API przez wysyłanie/odbieranie żądań/odpowiedzi XML. Mogę pracować z danymi w odpowiedzi XML i załadować je do datatable w c#, więc to nie jest problem. To, co chcę zrobić, to zapisać dane z pliku XML Quickbooks do relacyjnej bazy danych, takiej jak SQL Server, aby móc udostępnić je aplikacji internetowej lub innym aplikacjom. Problem, jaki mam, polega na tym, że dla obiektu Accounts istnieje wiele jednostek podrzędnych (do 5) dla danego rodzica. Na przykład: * Rodzic: Dochody * Dziecko: Darowizny na cele charytatywne * Pod-pod-dziecko: Schronisko dla bezdomnych * Pod-pod-pod-dziecko: Seattle Mission * Pod-pod-pod-dziecko: Jedzenie Ten przykład jest nieco ekstremalny, ponieważ konkretny plik I Pracuję tylko na trzech poziomach, ale Quickbooks pozwala na maksymalnie pięć (dlatego staram się wymyślić rozwiązanie, które dobrze by się skalowało). Kiedy tworzę tabelę danych w C# z danych w pliku XML, mam dwie kolumny: ParentID, ChildID. Wyglądałoby to tak: ParentID ChildID Saldo konta -------- ------- ------- -------- 001 002 Przychody 45670 002 003 Darowizny na cele charytatywne 1500 003 004 Homeless Shelter 800 004 005 Seattle Mission 400 005 NULL Food 200 W tym przykładzie jestem w stanie określić wszystkie identyfikatory dziecka rodzica, a następnie spojrzeć na ParentID z tym ChildID i sprawdzić, czy to dziecko ma jakieś dzieci itp. Mam metodę, która wykonuje dość dobrą robotę podczas analizowania tego i na razie działa dobrze, ale czy to naprawdę najlepszy sposób na przechowywanie go w bazie danych, jeśli chcę na stałe przechowywać dane w relacyjnej bazie danych ? Wydaje się, że powinno być bardziej eleganckie rozwiązanie, ale nie jestem pewien, co by to było.


title: Jak duży musi być mój projekt, abym mógł go przetestować?

text: Zakładam, że mój projekt jest na tyle oddzielony, aby umożliwić testowanie jednostkowe. Ale jak duży, pod względem klas i funkcji, musi być mój projekt, aby testowanie jednostkowe było opłacalne? Wszyscy popełniamy błędy i nikt nie jest doskonały, ale uważam się za porządnego programistę, który radzi sobie z błędami w małych projektach z przechodzeniem. A może testowanie jednostkowe jest trudną koniecznością bez względu na wielkość twojego projektu?


title: Czy darowizny są niekomercyjne?

text: Używam całkiem sporo „niekomercyjnych” aplikacji podczas pracy nad projektami oprogramowania. Dla wyjaśnienia mam na myśli tworzenie **aplikacji** tutaj, na przykład smartgit, **nie biblioteki** lub cokolwiek, co zostanie wysłane. Czy jest legalne udostępnianie przycisku darowizny dla projektów wykonanych przy użyciu niekomercyjnych niektórych aplikacji? Wiem, wiem, "skonsultuj się z prawnikiem". Oto prawdziwy świat: jestem 16-letnim programistą-hobbystą, który nie ma ani czasu, ani pieniędzy, żeby się z nim skonsultować - szybkie pytanie w Internecie byłoby prawdopodobnie lepszym pomysłem.


title: Czy istnieje standard branżowy dotyczący strukturyzowania kodu i komentarzy?

text: Pracowałem z wieloma profesjonalnymi zespołami i wygląda na to, że struktura kodu klasy waha się od wysoce zorganizowanej do całkowicie zagraconej. Niedawno wykonałem projekt ze stanem Kalifornia, który wymagał użycia określonych regionów w moim kodzie VB, wraz z wbudowanymi komentarzami XML dla auto-dokumentów. Był bardzo ustrukturyzowany, ale w wielu klasach było więcej komentowania niż kodu. Jestem tylko ciekawy, czy istnieje branżowy standard struktury kodu i komentowania. **EDYTUJ** Może bardziej odpowiednim pytaniem byłoby, jakie dobre praktyki należy zastosować w celu zapewnienia czytelności i utrzymania i dlaczego? Chcę wcześnie wyrobić dobre nawyki kodowania.


title: Google Summer of Code Experience

text: Byłem w tym roku studentem Google Summer of Code i pomyślnie ukończyłem swój projekt. To było niesamowite doświadczenie edukacyjne. Zastanawiasz się tylko, z punktu widzenia branży – jak wygląda i jak dobrze wygląda doświadczenie Summer of Code? To znaczy, jeśli miałbyś mnie zatrudnić, czy to by coś dla ciebie znaczyło? Pytam tylko o to, ponieważ robię SoC != staż. Jako student SoC byłem niezależnym wykonawcą dla Google. Jasne, postęp był prawidłowy, ale jestem zainteresowany przyjrzeniem się temu z doświadczenia, które tutaj macie. Wolisz mnie? Przepraszam, że nie ujawniłem mojego imienia; Mam nadzieję, że rozumiesz.


title: Korzystanie z frameworka internetowego jako python GUI

text: Jeśli zbudowałem jakiś użyteczny fragment kodu Pythona, aby np. zeskrobać stronę internetową lub obliczyć coś dużego, w pewnym momencie mogę chcieć dodać GUI do mojego projektu. Do tego mogłem użyć Tk, Qt, Pygame lub dowolnego frameworka graficznego/GUI Pythona. Teraz chcę również, aby to narzędzie było używane przez klientów bez potrzeby instalacji Pythona. Oczywiście mógłbym użyć czegoś takiego jak py2Exe lub py2Dmg. Ale czy nie byłoby fajniej użyć do tego frameworka internetowego opartego na Pythonie? Coś jak Django lub Pyramid. Jakie byłyby wady takiego postępowania? Czy mogę po prostu użyć frameworka do wykonania mojego kodu na serwerze i zwrócić tylko wynik? A może będzie to trudne, gdy będzie wielu użytkowników?


title: Czy kiedykolwiek wykonałeś projekt przy użyciu języków, które nie są głównym wyborem dla konkretnej niszy projektu? Czemu?

text: Myślałem o swoich akademickich doświadczeniach z Smalltalk (no, Squeak) jakiś czas temu i czy chciałbym go użyć do czegoś, i skłoniło mnie to do myślenia: jasne, jest tak dobry i sprawny jak każdy popularny język, a ma trochę ładne pomysły, ale są pewne języki, które są już dobrze zakorzenione w pewnych niszach programowania (C to programowanie systemów, Java to przenośność itd.) oraz Smalltalk i spółka. nie wydają się mieć żadnych oczywistych cech odróżniających, które czyniłyby z nich właściwy wybór w pewnych okolicznościach, a przynajmniej nie tak dalece, jak mogę powiedzieć, a kiedy dodasz do tego fakt, że trudniej jest znaleźć programistów, którzy to znają, dodaje wszelkiego rodzaju inne problemy dla samej organizacji. Więc jeśli kiedykolwiek pracowałeś nad projektem, w którym język spoza głównego nurtu (jak Smalltalk) był używany zamiast bardziej głównego nurtu, jaki był tego powód? Aby wyjaśnić: chciałbym skupić się na językach imperatywnych.


title: skąd wziąć widoki CodeIgniter

text: Właśnie zacząłem używać CodeIgnitera. Zastanawiam się, czy ktoś wie, skąd mogę pobrać gotowe widoki. Na przykład teraz szukam interfejsu administratora. Sam mógłbym napisać kod, ale czuję się leniwy ;) Czy jest miejsce, w którym można uzyskać gotowe szablony, takie jak dla większości CMS-ów? Dziękuję!


title: Czy sklep może uzyskać 12 punktów w teście Joela, a jednocześnie być kimś innym niż Agile (lub Lean)?

text: Zainspirowane tym pytaniem – czy sklep Agile może naprawdę uzyskać 12 punktów w teście Joela: Czy możesz podać wyjaśnienia lub przykłady, w których organizacja zajmująca się tworzeniem oprogramowania spełnia **technicznie** wszystkie 12 punktów testu Joela, ale nie spełnia wymagań zasady agile czy lean?


title: Dlaczego niektóre klasy lub metody nie są „parametrem obowiązkowym” w java

text: Tytuł pytania może być trochę mylący, ale nie miałem lepszego sposobu, aby to ująć. W Javie możesz mieć to: JLabel HoHoHo = new JLabel(); ... HoHoHo.setText("Ho Ho Ho"); A to: JLabel HoHoHo = new JLabel("Ho Ho Ho"); W obu przypadkach daje etykietę z napisem „Ho Ho Ho”. **Pytanie** Jak to możliwe? Chodzi mi o to, czy istnieją klasy JLabel, jedna z parametrem `String`, a druga bez?


title: Kreator licencji oprogramowania

text: Czy istnieje system pytań „kreator” licencji, który zadaje pytania dotyczące sposobu korzystania z oprogramowania, a następnie umożliwia porównanie go z jednym lub kilkoma typami licencji. Tło: Zadając pytanie, które wymaga, aby oprogramowanie do rozpoznawania obrazów typu open source miało licencję na komercyjną dystrybucję wewnętrzną bez udostępniania kodu źródłowego, nawet wewnętrznego dla wszystkich, którzy mają binarne... Zdałem sobie sprawę, że aktualna odpowiedź dotycząca licencji GPLV2 jest prawdopodobna oznacza, że źle pasuje. Chciałbym wyjaśnić pytanie, dodając listę licencji, o których wiadomo, że pasują, i tych, które nie pasują, ale nie mam nawet pojęcia, jak to zrobić, poza zapytaniem jeśli istnieje czarodziej, który pomoże to zrobić.


title: Kiedy skrypty wewnątrz HTML nie są uważane za złą praktykę?

text: Jestem nowy w tworzeniu stron internetowych. Studiując framework Play i JSP, zauważyłem, że obie dają opcję umieszczenia skryptu (w scriptlecie jsp) wewnątrz HTML, ale w obu czytanych książkach obie twierdzą, że to zła praktyka i nie podają wyjaśnienia kiedy powinienem używać skryptów, tylko nie pisz do. Moje pytanie brzmi, jeśli oba frameworki udostępniają taką opcję, kiedy można używać skryptów wewnątrz HTML? Uwaga, mówię o skryptach po stronie serwera do tworzenia dynamicznego HTML (tj. scriptlet JSP).


title: Dlaczego zespół LMAX wykorzystał Javę i zaprojektował architekturę, aby za wszelką cenę uniknąć GC?

text: Dlaczego zespół w LMAX zaprojektował LMAX Disruptor w Javie, ale wszystkie ich projekty wskazują na minimalizację użycia GC? Jeśli ktoś nie chce mieć uruchomionego GC, to po co używać języka zbierającego śmieci? Ich optymalizacje, poziom wiedzy o sprzęcie i myśl, którą wkładają, są po prostu niesamowite, ale dlaczego Java? Nie jestem przeciwko Javie ani nic, ale dlaczego język GC? Dlaczego nie użyć czegoś takiego jak D lub innego języka bez GC, ale pozwala na wydajny kod? Czy to, że zespół najlepiej zna Javę, czy Java ma jakąś wyjątkową zaletę, której nie widzę? Powiedzmy, że opracowują go za pomocą D z ręcznym zarządzaniem pamięcią, jaka byłaby różnica? Musieliby myśleć o niskim poziomie (którym już są), ale mogą wycisnąć najlepszą wydajność z systemu, ponieważ jest on natywny.


title: OOP i relacyjne bazy danych

text: Widzę dużo rozmów w świecie OOP o zasadach i prawach, takich jak **Open/Close** i **Loose Coupling** , rozumiem, jak bardzo są one cenione, jednak wydaje mi się, że natknąłem się na problem z zastosowaniem tych zasad i praw, kiedy zacznę włączać relacyjne bazy danych. Na przykład, jeśli mam aplikację, którą jesteśmy w stanie dobrze rozdzielić na wiele komponentów (projekt **Otwórz/Zamknij**) i pozwól im współpracować ze sobą w razie potrzeby, zaczynam napotykać problemy podczas próby wymusić **integralność referencyjną**. Jeśli wymuszę relacyjną konfigurację i wymuszenie integralności za pomocą kluczy obcych itd., tabele stają się od siebie zależne, stopniowo logika aplikacji OOP zaczyna się rozpadać i stać się jednym dużym systemem. Mogę oczywiście usunąć wszystkie odniesienia do tabel, ale wtedy ryzykuję, że dane będą zbędne i zacznę powtarzać kod/dane, co jest wtedy sprzeczne z zasadą Don't Repeat Yourself. Czy spotkałeś się wcześniej z takimi problemami? Jeśli tak, jak sobie z tym poradziłeś? Być może istnieje sposób, aby osiągnąć zarówno integralność referencyjną, jak i komponenty otwarte/zamknięte OOP. Dziękuję


title: Jakie są nietechniczne powody, które sprawiają, że pisanie narzędzi do mapowania obiektowo-relacyjnego (ORM) jest tak trudne?

text: Wiem, że techniczne pułapki pisania ORM są obecnie dość dobrze znane, ale jakie są niektóre czynniki nietechniczne (np. Zakres), które utrudniają napisanie dobrego ORM? EDYCJA: Przeczytałem już techniczne powody, dla których tak trudno jest pisać ORM z tego postu na Stackoverflow: http://stackoverflow.com/questions/404083/is-orm-still-the-vietnam-of-computer-science


title: Jakie umiejętności tworzenia gier są wspólne w innych obszarach tworzenia oprogramowania?

text: Jestem twórcą gier, który pracował w branży gier, a potem… został zwolniony. Od tego czasu życie jest stresujące! W tym czasie spotkałem wielu innych twórców, którzy również zostali zwolnieni bez względu na to, ile lat byli w grze. Tam, gdzie mieszkam, nie ma zbyt wielu możliwości tworzenia gier. Nie przychodzi mi do głowy domena/miejsce, w którym mógłbym wykorzystać swoje umiejętności tworzenia gier. Wiem, że grafika/symulacja/wizualizacja jest ogromna, ale nie potrafię jasno myśleć i nie mam pojęcia, gdzie się udać. W jakich domenach/firmach mogę wykorzystać swoje umiejętności? Jakie umiejętności są wspólne dla tworzenia gier i innych obszarów tworzenia oprogramowania?


Jak radzisz sobie z projektowaniem w Scrumie? Czy nadal masz dobrze napisane dokumenty projektowe dla każdej iteracji scrum? Czy po prostu robisz notatki projektowe zawierające diagramy UML? A może masz po prostu dobrze skomentowany kod? Każda iteracja może wymagać zmiany projektu, więc chciałem tylko wiedzieć, jak ludzie to przechwytują, aby nowi programiści mogli łatwo zrozumieć domenę i jak najszybciej wejść na pokład.


title: Czego powinienem oczekiwać od mojej pierwszej pracy programistycznej?

text: Właśnie zostałem zatrudniony do mojej pierwszej pracy programistycznej! Mam 25 lat i od 6 lat używam języka Java akademicko. Teraz, gdy zostałem zatrudniony, obawiam się, że moje umiejętności nie będą takie, jakich oczekuje pracodawca. Obawiam się, że zostanę przydzielony do projektu i będę musiał zadawać wiele pytań, które moi współpracownicy będą uważać za amatorów. Czy to racjonalny strach? Jakie były twoje pierwsze doświadczenia w pracy programistycznej? Czego powinienem się spodziewać? Jaką radę mógłbyś mi dać? Dziękuję.


title: Tworzenie diagramów systemowych dla małej aplikacji

text: Uczę się projektowania systemów (samodzielnie) i wciąż nie rozumiem kilku rzeczy. Załóżmy, że istnieje prosta aplikacja z interfejsem i bazą danych do przechowywania danych. Czy na schemacie architektury systemu będą tylko dwie części (UI i DB) czy też powinienem dołączyć na przykład jakieś moduły UI do obliczeń? A co z urządzeniami sprzętowymi, z których korzysta system? Podam dokładniejszy przykład: mam aplikację, z której korzystają dwa rodzaje użytkowników (jeden ma ograniczony dostęp). Ta aplikacja korzysta z bazy danych, a jej moduły współpracują z zewnętrznym urządzeniem sprzętowym. Nie jestem pewien, jak zacząć od schematu systemu.


title: Dobrze zaprojektowane / wysokiej jakości oprogramowanie open source

text: Biorę zajęcia z projektowania oprogramowania, gdzie powinienem wybrać oprogramowanie typu open source do analizy z punktu widzenia projektowania oprogramowania. To musi być duży projekt: nie mniej niż 100 000 linijek kodu. Naprawdę chciałbym wybrać oprogramowanie, które jest bardzo dobrze zaprojektowane i zaprojektowane, aby mieć dobry wgląd w dobry projekt oprogramowania. Przez dobry projekt rozumiem takie rzeczy, jak sensowne klasy i architektura, dobre wykorzystanie wzorców (projektowych), dobre wykorzystanie abstrakcji, dobra organizacja komponentów, wysoka spójność i niskie sprzężenie między komponentami itp. Czy masz jakieś oprogramowanie, które mi zasugeruje ? Pamiętaj, że oprogramowanie musi mieć tylko dobry projekt, projekt nie musi być dokumentowany! :) Nie musi to być aplikacja dla użytkownika końcowego... Może to być także biblioteka, narzędzie itp...


title: Model danych - dziedziczenie

text: Właśnie rozpocząłem pracę nad projektem, w którym staram się zaimplementować logikę backendu, która obejmuje stworzenie modelu danych dla danego problemu. Oto problem, na który natknąłem się i jestem ciekaw, jakie podejście byłoby bardziej odpowiednie do jego rozwiązania. **Model:** W systemie są różni użytkownicy o różnych prawach i strukturach, ale dziedziczenie między nimi jest bardzo proste. Istnieje podstawowy `użytkownik`, który może przeglądać i przeglądać niektóre dane, komentarze psot itp. Następnie jest `członek`, który może zrobić wszystko, co `użytkownik` może + coś więcej i współdzieli podstawowe struktury danych + `członek` ma swoje własne. I jest „producent”, który znowu jest tylko przedłużeniem „członka”. Każdy `użytkownik` może (ale nie musi) być `członkiem`, a każdy `członek` może (ale nie musi) być `producentem`. 1) Mój obecny pomysł: Stwórz tabelę `user` oraz tabele `member` i `producer`, które odwołują się do siebie za pomocą identyfikatora użytkownika. Pomiędzy tymi tabelami byłaby relacja 0 do 1: USER { id nazwa użytkownika e-mail itp. } MEMBER { userid niektóre_atrybuty_członka } PRODUCER { userid niektóre_atrybuty_producenta } Zaletą jest to, że zaoszczędziłoby mi to wielu wartości NULL w jednej tabeli i to wydaje mi się w jakiś sposób naturalny. Wadą jest to, że za każdym razem, gdy chciałbym uzyskać dane od `producenta`, musiałbym odpytywać trzy różne tabele. 2) Inną możliwością jest zaimplementowanie tego jako jednej tabeli z atrybutami `isMember` i `isProducer`. Ale znowu, spowoduje to powstanie wielu wartości NULL, ponieważ większość użytkowników nie będzie `producentami`. Myślę, że nie jest to typowe dla wielu relacji 0 do 1 w jednym modelu... Co sugerujesz? Mam nadzieję, że to nie jest tutaj nie na temat, po prostu próbuję to zrobić dobrze, więc nie będę musiał ponownie wdrażać go kilkanaście razy w przyszłości. Dzięki za wszelkie wskazówki!


title: Miejsce projektowania interfejsu użytkownika podczas szacowania i opracowywania historyjek użytkownika

text: Nasza firma stara się przestrzegać metodologii Agile, jeśli chodzi o szacowanie i ustalanie priorytetów wszelkich nowych prac rozwojowych. Czytanie, które zrobiłem, sprawia, że ta koncepcja wydaje się świetna, więc staramy się dać jej dobry dowód na to, aby działała dla nas, a tym samym pomóc w zapewnieniu lepszego rozwiązania na koniec dnia dla naszego klienta. Problemem, który ostatnio miałem, jest pozycja projektowania UI podczas estymacji historyjek użytkownika. Rozpoczęliśmy nowy projekt, omawiając to, co było wymagane z funkcjonalnego punktu widzenia, i spisując zestaw historyjek użytkownika do weryfikacji przez użytkownika. Nasz licencjat poprosił nas o oszacowanie tych historii. Poszedłem, poczekaj. Wiele z tych historii może się różnić w zależności od złożoności projektu interfejsu użytkownika. Jednak licencjat nie był jeszcze gotowy do omówienia interfejsu użytkownika, ponieważ potrzebowała szacunków, aby mogła zaplanować sprinty i uzyskać kosztorys projektu. Więc moje główne pytanie brzmi: > Gdzie projekt interfejsu użytkownika pasuje do procesu między pisaniem historyjek użytkownika a > szacowaniem. A może powinien w ogóle pasować i po prostu być częścią rozwoju > pracy? Pytanie drugorzędne > W jaki sposób agile pasuje do ofert stałych cen dla nowej pracy (na podstawie twoich > szacunków dla całego zestawu historyjek użytkownika) i jak w takim razie upewniasz się, że > dostarczasz to, co powiedziałeś, jeśli historyjki użytkownika są sprzeczne z wyceną biorąc pod uwagę > tzn. historia jest większa niż myślałeś, więc rozwiewa Moje obawy dotyczące naszego procesu: 1. Nie mogę wystarczająco dokładnie oszacować na tym etapie procesu, ponieważ brakuje niektórych elementów, np. UI. To nowy projekt dla nowego klienta, więc zmierzamy na niepewne wody. 2. Niektóre cechy są zbyt nieznane, aby je oszacować (Czy muszę po prostu zagłębić się głębiej w męt, aby oczyścić wody i usunąć niewiadome?) Potrzeby BA (wyrażone mi) 1. Chce mieć szacunki, aby mogli określić ile sprintów zajmie ten projekt. 2. Chce otrzymać szacunki, aby mogli określić zakres i koszt projektu, aby mogli przekazać je klientowi jako wycenę.


title: Jak zazwyczaj zostajesz głównym inżynierem oprogramowania w firmie?

text: Miałem wrażenie, że zaczynasz pracę programisty, robisz dobrą robotę, wykazujesz chęć, zostajesz wysłany na kilka stażów przez pracodawcę i pniesz się w górę, aż dostaniesz odpowiedzialność za cały projekt. Ale mój przyjaciel powiedział mi, że do tej pracy trzeba mieć przynajmniej stopień magistra. Czy to prawda? Jak ludzie zazwyczaj dostają się do tej roli? PS zauważyłem, że powiedziałem „zazwyczaj”. Chcę usłyszeć ogólną sprawę, a nie prywatną sprawę dotyczącą kogoś, kogo znasz.


title: Co zrobić, gdy masz problem, którego nie możesz szybko rozwiązać?

text: Jestem początkującym uczącym się Javy i po przeczytaniu dokumentacji próbuję rozwiązać niektóre problemy na codingbat.com. Niektóre udało mi się rozwiązać dość szybko w ciągu kilku sekund, ale niektóre nie do końca. Same problemy są łatwe (np. http://codingbat.com/prob/p126212), ale czasami trudno mi znaleźć rozwiązania. Po części dlatego, że myślę o najlepszym możliwym rozwiązaniu i automatycznie odrzucam te, które mogą działać, ale nie są tak eleganckie, a po części dlatego, że nie mogę znaleźć odpowiedniego algorytmu. Wynika to albo z mojego braku doświadczenia (używałem PHP do tworzenia stron internetowych przez około 2 miesiące, więc nie jestem całkowicie początkującym - nawet pracowałem z jednym frameworkiem do budowy strony internetowej) lub z powodu mojej niezdolności do wymyślenia dobrego algorytmu. Zwykle nie patrzę na rozwiązania. Czasami utknąłem nawet na 1 1/5 godziny przy prostych problemach i niektóre z nich w końcu rozwiązuję, ale niektóre nie mogę, więc w końcu szukam rozwiązania. Czy to normalne/dobre/złe koncentrowanie się tak długo, jeśli znajdę problem, którego nie mogę rozwiązać? Mogę przesadzać, ale czy to powinno być dla mnie takie trudne? Czy jest coś takiego jak niemożność wymyślenia algorytmów nawet przy dużej nauce i czytaniu? Z góry dziękuję wszystkim.


title: Testowanie jednostkowe w różnych środowiskach

text: Jak wykonać testy jednostkowe dla wielu środowisk, które zachowują się inaczej? Oto mój problem. Mam klasę PHP, dla której chciałbym tworzyć testy jednostkowe. Klasa udostępnia skróty do manipulowania folderami. W systemie Linux możesz ustawić uprawnienia do folderu bez problemu, w systemie Windows nie możesz w ogóle. Wiedząc o tym, jaka jest najlepsza praktyka tworzenia testu jednostkowego dla tej klasy? Zestaw testów można uruchomić w systemie Windows lub Linux, ale jeśli przetestujesz ustawienia folderu w systemie Windows, test zakończy się niepowodzeniem. Czy po prostu żyjesz z nieudanym testem, uzależniasz go od systemu operacyjnego, całkowicie go pomijasz, czy coś innego?


title: Jak utrzymać relację z użytkownikiem, gdy użytkownik przestaje obserwować innego użytkownika?

text: Mam tabelę relacji użytkowników, która przechowuje, kto podąża za kim, struktura tabeli jest następująca -id -follower -po gdy ktoś obserwuje innego użytkownika, dodaję rekord z identyfikatorem użytkownika obserwującego i identyfikatorem użytkownika, którego obserwuje, teraz mój pytanie=> Gdy użytkownik chce przestać obserwować tego użytkownika, zdecydowałem, że zamiast usuwać rekord, mogę dodać kolejną kolumnę `break` na końcu tej tabeli, którą ustawię na `true`, gdy użytkownik będzie chciał przestać obserwować, w ten sposób Mogę zachować spójność w zapisach, to znaczy nie będzie żadnych przerw jak 1,2,4,7,8,9,15 jeśli usunę rekordy. Jeśli nie usunę rekordu, mogę go użyć, jeśli ten użytkownik będzie chciał ponownie śledzić tego użytkownika w przyszłości, mogę ustawić kolumnę podziału tego rekordu na `false` i relacja będzie ponownie istnieć.. co myślicie, że powinienem użyć to podejście czy powinienem usunąć rekord? Powiedz mi, czy podejście jest dobre, czy mogą być jakieś problemy z nim związane, a także powiedz mi, czy jest jakiś lepszy sposób. Dziękuję


title: Jaki będzie dobry skrypt Pythona (lub Twój ulubiony język tutaj) do testowania wydajności i możliwości systemu?

text: Załóżmy, że jesteś w sklepie komputerowym i patrzysz na 10 laptopów, chcesz naprawdę porównać możliwości systemu. Jaki będzie skuteczny skrypt „Twój ulubiony język tu idzie”, który pozwoli Ci to zrobić? Na przykład, kiedy idę do sklepu, zwykle otwieram macbooka i terminal zawodowy i piszę równanie w pytonie, iteruję je około miliona razy i mierzę czas. Lubię porównywać różnicę w czasie. Jaki byłby idealny i prosty skrypt, który skutecznie porównuje systemy?


title: Ucząc się nowego języka i frameworka, czy powinienem przyspieszyć projekt, czy najpierw zagłębić się w podstawy języka?

text: Mam duże doświadczenie w J2EE, pracowałem z Grails i dobrze znam się na kilku językach (Perl, PHP, Smalltalk). Postanowiłem wypróbować nowy projekt przy użyciu Ruby on Rails. Dla tych, którzy zdecydowali się na migrację do nowego stosu technologicznego, jak przeprowadzić to przejście? Czy najpierw poznasz szczegóły Ruby (zrobiłem kilka samouczków i czuję, że mam wystarczająco dobrą znajomość języka, aby zacząć wykonywać podstawową pracę) czy też robisz pełny samouczek Ruby on Rails, i poszerzyć swoją wiedzę stamtąd. Skłaniam się ku temu drugiemu podejściu, ponieważ czuję, że mogę zagłębić się w szczegóły języka, gdy się z nimi spotykam. Dla tych, którzy pracują w Ruby on Rails, jak się nauczyłeś i jakie zasoby polecasz?


title: Kanały dystrybucji i programy, w których kłopoczę się dostarczaniem czegokolwiek innego niż RSS 2

text: Tworzę CMS i mam dużo starszego kodu z innych aplikacji. Zastanawiam się, czy powinienem zawracać sobie głowę udostępnianiem innych formatów syndykacji oprócz rss 2? Jestem skłonny odmówić, ale zastanawiałem się, jakie są opinie innych ludzi.


title: Czy nie-programista może z powodzeniem prowadzić firmę programistyczną?

text: W 2006 roku niejaki Joel Spolsky skomentował: > Oglądanie nie-programistów próbujących prowadzić firmy programistyczne jest jak oglądanie > kogoś, kto nie umie surfować, próbując surfować. Ogólnie rzecz biorąc, artykuł jest świetną lekturą (zdecydowanie poświęć trochę czasu, aby go przeczytać). Z ciekawości **chciałabym posłuchać doświadczeń ludzi tutaj**, którzy widzieli, jak programiści przyjęli płaszcz i wykonali świetną (lub bzdury) pracę, i to samo dla nie-programistów, którzy znaleźli się jako programiści (gorzej niż koty pasterskie, które słyszałem). Krótko mówiąc, jaki jest zbieżność opinii w tej sprawie?


title: Korzyści z używania konstruktora XML w porównaniu z językiem szablonów, takim jak ERB?

text: Robię dużo pracy z XML, nasze starsze generatory XML używają języka szablonów ruby ERB do tworzenia plików XML. Eksperymentowałem z Nokogiri i modelem konstruktora tworzenia XML, ale wydaje mi się, że jestem w stanie osiągnąć wszystko, co chcę, używając obu metod. Więc co powinienem wziąć pod uwagę przy wyborze jednej wspólnej metody w przyszłości? Jakie są korzyści z używania metody konstruktora do konstruowania XML w porównaniu z językiem szablonowym? Jedną, o której mogę pomyśleć, jest metoda konstruktora (nokogiri) udostępniająca metody znacznie więcej niż tworzenie pliku, takie jak wyszukiwanie i zmiana kolejności itp. Więc jeśli użyję metody konstruktora, mogę mieć wspólne narzędzie do robienia wszystkich związanych z xml zadania.


title: Zasada pojedynczej odpowiedzialności Zasada VS KISS

text: Załóżmy modelowanie modelu „Użytkownika” w kontekście sieci społecznościowej. Pojęcie użytkownika składa się z dwóch pojęć: * Elementy uwierzytelniania, takie jak nazwa użytkownika/hasło/e-mail itp. * Dodatkowe informacje o danych czasami nazywane „profilem użytkownika”, takie jak imię, urodziny, zdjęcia itp. Na pierwszy rzut oka analiza ta obejmuje rozdzielenie zadań /obowiązki jeśli chcemy zachować SRP. Jednak zazwyczaj w przypadku sieci społecznościowych **nazwaużytkownika może być postrzegana jako czysta informacja należąca do profilu użytkownika, a nie czysty element uwierzytelniania.** Zatem według mnie istnieją trzy sposoby modelowania Koncepcja „użytkownika”. Po pierwsze, całość w jednej klasie: `Użytkownik` (nazwa użytkownika, hasło, e-mail, imię, urodziny, zdjęcie itp.) Po drugie, relacja jeden do jednego między `Użytkownikiem` i `Profilem użytkownika`: `Użytkownik`( nazwa użytkownika, hasło, e-mail) `Profil użytkownika` (imię, urodziny, zdjęcie itp.) Po trzecie, jeden do jednego, ale z nadmiarowością wspólnych pól (koncentracja na uwierzytelnianiu jako widocznej informacji o użytkowniku na stronie internetowej ): `Użytkownik`(nazwa użytkownika, hasło, e-mail) `Profil użytkownika`(nazwa użytkownika, imię, urodziny, zdjęcie itp.) Po co powtarzać tutaj? Oczywiście ze względu na spójność, a jednocześnie, aby uniknąć złączeń w przypadku relacyjnej bazy danych, gdy chce się pobrać dane profilu każdego Zastosowania. Jaka jest dobra praktyka modelowania tych obu koncepcji? **Gdzie mam umieścić pole`userName`?** **Dylemat to: utrzymanie KISS (Keep it simple fool!) czy SRP ;)**


title: Czy byłoby w porządku, gdybym zdecydował się napisać wszystkie moje Ruby tak, jakby to był Haskell?

text: Biorąc pod uwagę, że Ruby ma wbudowane dobre możliwości operacji na listach - zmniejszanie, mapowanie, wybieranie, zbieranie itp. Ma Procs, Blocks i Lambdas i ma niezłą obsługę iteracji (rodzina `each`), czy byłaby to zła decyzja projektowa, gdyby Próbuję napisać wszystkie moje rzeczy w Ruby w najbardziej czysto funkcjonalny sposób? Zwłaszcza w przypadku kodu, który ma niewiele operacji we/wy lub nie ma ich wcale (a tym samym mniej oczywiste skutki uboczne)? Uczę się Haskella (nazywanego „prawdziwym” językiem hakera) i jestem zakochany w jego sposobie robienia rzeczy – kocham Rubiego, ale myślę, że może być jeszcze fajniej, gdy wpłynie do niego więcej ducha Haskella (cóż, Ruby nie pożycza / nie uczy się od niego wiele?) Konstruktywne wskazówki są mile widziane...


title: Określ język programowania używany w projekcie na podstawie kodu źródłowego

text: Czy istnieje prosty sposób na określenie, które języki programowania zostały użyte w projekcie, zakładając, że masz dostęp do kodu źródłowego? Programuję od dłuższego czasu, więc potrafię rozpoznać większość głównych języków programowania po składni lub rozszerzeniu pliku, ale zdałem sobie sprawę, że nie mogę odpowiedzieć na to dość proste pytanie (problem, który często zadaję sobie, gdy mam do czynienia z nieznanym open source bazy kodów). Rozumiem, że możesz zbadać każde rozszerzenie pliku i Google je, aby określić, czy należy ono do określonego języka programowania. Wydaje się to jednak nudne (badanie każdego rozszerzenia pliku dla dużego projektu) i domyślam się, że może być lepszy sposób.


title: Czym JVM i WORA Javy różnią się od innych języków wysokiego poziomu?

text: W świecie Javy często mówimy o JVM, a kiedy Java była nowa, miała rzekomo zabójczą funkcję „Napisz raz, uruchom wszędzie”. Sądząc po sposobie, w jaki ludzie mówią i piszą, wygląda to inaczej niż na przykład w Pythonie. Jednak nie wiedziałem, że napisany przeze mnie kod Pythona będzie działał inaczej na innej maszynie. (Chociaż nie napisałem tak dużo Pythona.) Więc czego mi brakuje? Czym różni się JVM od interpretera Pythona? Czy jest jakiś sposób, że Pythonowi brakuje niezależności platformy Java? A może to tylko różnica kulturowa?


title: Korzystanie z funkcji php, słowa zastrzeżone jako lokalne identyfikatory

text: Myślę o niektórych funkcjach tablicowych. „klucz”, „każdy”, „poz”, „zakres”. Są one często bardzo przydatne jako lokalne identyfikatory! Widziałem również kod, który (nad)używa $return, $list, $array, $string. Jakie są na ten temat poglądy innych programistów PHP? Tylko lokalne identyfikatory! Nie użyłbym ich jako członków lub nazw metod klasy, a nawet mniej zmiennych globalnych.


title: Gdybyś miał więcej swobody i elastyczności, co byś zmienił w swojej umowie o pracę?

text: Na przykład prawa własności/autorstwa kodu, warunki zakazu konkurencji, urlopy/święta, godziny pracy, wypowiedzenia ze strony którejkolwiek ze stron itp.


title: Pozwolenie na ponowne wykorzystanie przykładowego kodu iOS w komercyjnej aplikacji?

text: Czy mamy pozwolenie na ponowne wykorzystanie przykładowego kodu iOS ze strony programisty Apple w komercyjnej aplikacji? Czy możemy go używać z modyfikacjami? Nie jestem pewien, jak interpretować wszystkie prawnicze na źródle. Oczywiście na końcu jest „Wszelkie prawa zastrzeżone…”, ale jest też > „Apple udziela Ci osobistej, niewyłącznej licencji, w ramach praw autorskich Apple do tego oryginalnego oprogramowania Apple (Oprogramowania Apple”), do użytku, > powielania, modyfikowania > i redystrybucji Oprogramowania Apple, z modyfikacjami lub bez >, w formie źródłowej i/lub binarnej; pod warunkiem, że jeśli > rozpowszechniasz Oprogramowanie Apple w całości i bez modyfikacji, > musisz zachować niniejsze powiadomienie oraz następujący tekst i zastrzeżenia we wszystkich > takich redystrybucjach Oprogramowania Apple”.


title: Informujesz o szczegółach wyniku metody?

text: Mam taki kod (pseudokod) foreach(Pole w polach) { if(boxFilter.PassesFilter(box)) { // zrób coś przydatnego } else { Log.Log(format("Pole %s zostało odrzucone", pole. BoxId)) } } Ale teraz myślę, że chciałbym, aby komunikat dziennika zawierał więcej informacji, takich jak "Pole 1 odrzucone, ponieważ jest zbyt wysokie" lub "Pole 549 odrzucone: 25" wysokość przekracza maksymalną wysokość 24". Jaki jest najlepszy idiom, aby umieścić te informacje w dzienniku? Czy muszę tworzyć obiekt `FilterResult`, który jest zwracany przez metodę `PassesFilter`? Albo chyba mógłbym też wyrzucić wyjątek, złapać go i zalogować? Albo coś innego? Tak się składa, że używam C++. **Aktualizacja** Oprócz logowania chciałbym również przedstawić użytkownikowi wiadomość w interfejsie użytkownika.


title: Jaki jest właściwy sposób odróżnienia słów kluczowych od identyfikatorów?

text: Zdaję sobie sprawę, że większość współczesnych języków używa słów zastrzeżonych, aby zapobiec używaniu takich rzeczy jak słowa kluczowe jako identyfikatorów. Pomijając słowa zastrzeżone, załóżmy język, w którym słowa kluczowe mogą być używane jako identyfikatory. (Na przykład w Rubim słowo kluczowe może być użyte jako nazwa metody). Jak poradziłbyś sobie z tą niejednoznacznością podczas kompilacji? Faza leksyki nie wydaje się być dobrym dopasowaniem, ponieważ musiałaby wziąć pod uwagę otaczające ją tokeny. Faza parsowania również nie wydaje się być dobrym dopasowaniem, ponieważ najlepiej byłoby, gdyby parser działał z tokenami, które są _jednoznaczne_. Gdybym miał go zaprojektować sam, przypuszczam, że kazałbym lekserowi uzyskać niejednoznaczny token, a następnie mieć inny poziom, który uwzględnia niejednoznaczny token w kontekście otaczających go tokenów (np. czy niejednoznaczny token następuje po słowie kluczowym `def` ?W takim razie musi to być identyfikator.) Następnie przekazałbym parserowi jednoznaczne tokeny. **W językach, w których słowa kluczowe mogą być używane jako identyfikatory, jaki jest standardowy sposób ich rozróżniania przez kompilator?**


title: Błędy, których można uniknąć dzięki standardom kodowania

text: Szukam statystyk (lub szacunków), które wspierają twierdzenie, że standardy kodowania pomagają zredukować błędy. Przydałyby się twarde liczby, chociaż nie szukałem zbyt wiele. Przyglądałem się nawet śledzeniu błędów w różnych projektach open-source, ale nie udało mi się znaleźć tego, czego potrzebuję. Czy ktoś wie, gdzie mogę to znaleźć? A może ktoś z was przyczynia się do jakichkolwiek projektów open-source, które zawierały błędy, których można było uniknąć dzięki lepszym standardom kodowania?


title: Eclipse uruchamia mój program Java 6 razy szybciej... Czy mogę osiągnąć taką wydajność bez jej używania?

text: Napisałem program w javie, który generuje wszystkie powtarzalne permutacje na podstawie znaków i podanej długości. Kiedy wykonuję mój kod w Eclipse, generuje plik z 1 000 000 permutacji w zaledwie 15 sekund. Jednak jeśli uruchomię program na tej samej maszynie w wierszu poleceń, używając „permutacji java” Generowanie tych samych permutacji 1M zajmuje 1 minutę i 35 sekund. Dlaczego? A czy mimo wszystko mogę uzyskać tego typu wydajność bez użycia eclipse? Edycja: Dodano wyniki Java VisualVM www.craftboom.co.uk/jvm.png — Użycie procesora jest wyższe podczas pracy w trybie Eclipse. Zarówno użycie procesora, jak i pamięci wydaje się czasami spadać do 0 w powłoce o_O EDIT2: Okazuje się, że jest to problem z drukowaniem na ekranie. Nie wspomniałem o tym w moim oryginalnym poście, ale program wypisuje każdą permutację na konsoli.. Skomentował to i zapisał do pliku.. teraz działa równie szybko zarówno w powłoce, jak i zaćmieniu. :-) Dzięki wszystkim za odpowiedzi.


title: Jak poradzić sobie z problemem zmodyfikowanych zaszyfrowanych plików

text: Mam prostą aplikację do szyfrowania/odszyfrowywania, którą testuję, aby dowiedzieć się więcej o bezpieczeństwie. Odkryłem, że jeśli użytkownik zmodyfikuje zaszyfrowany plik, odszyfrowanie nie powiedzie się, ponieważ algorytm mieszający nie generuje z powrotem oryginalnej zawartości. Jakie są typowe praktyki, które radzą sobie z problemem zaszyfrowanych plików zmodyfikowanych przez użytkowników celowo lub nieumyślnie? Jedyne, o czym przychodzi mi do głowy, to sprawdzanie znaczników czasu, ale nie jestem pewien, na ile jest to przydatne. Jeśli chodzi o moje ostatnie oświadczenie, myślę, że nie jestem pewien, czy istnieje sposób na oszukanie systemu operacyjnego, aby nowy znacznik czasu został przywrócony do dokładnego starego znacznika czasu, chociaż zawartość została zmodyfikowana.


Czytałem, że definicja NP-zupełności brzmi: To są najtrudniejsze problemy w NP. Taki problem jest NP-trudny iw NP Skąd wiemy, czy problem jest najtrudniejszy w NP, a trudniejszego problemu nie ma. Rozumiem, że załóżmy, że w jakiś magiczny sposób wiemy, że problem L jest najtrudniejszy w NP, a potem możemy znaleźć najtrudniejsze problemy H, jeśli zredukujemy H do L i na odwrót. Ale moje pytanie brzmi, jak to wszystko się zaczyna? Skąd znamy 1 najtrudniejszy problem na początek? Ponadto, aby móc powiedzieć, że coś jest najtrudniejsze (lub jakakolwiek skrajność), musimy znać wszystkie możliwe problemy w NP, a następnie spierać się o najtrudniejsze. Skąd znamy wszystkie możliwe problemy NP? Czy tu przydaje się maszyna Turinga i używając reprezentacji ciągu wyjściowego w postaci 1 i 0 na taśmie wyjściowej, możemy teoretycznie mówić o wszystkich możliwych problemach NP. Rozumiem, że być może nie udało mi się dobrze sformułować pytania – z powodu zamieszania. Dziękuję,


title: Dlaczego nie publikować kodu źródłowego w artykułach, które wspominają o oprogramowaniu niestandardowym?

text: Czy istnieje powód, dla którego kod źródłowy oprogramowania wspomnianego w pracach naukowych nie został opublikowany? Rozumiem, że prace badawcze dotyczą bardziej ogólnej idei osiągnięcia czegoś niż szczegółów implementacji, ale nie rozumiem, dlaczego nie udostępniają kodu. Na przykład ten artykuł kończy się następującymi słowami: > Wyniki > > System rysowania linii ludzkich jest zaimplementowany w ramach Qt w C++ > przy użyciu OpenGL i działa na stacji roboczej z dwurdzeniowym procesorem Intel 2,00 GHz > bez dodatkowego wsparcia sprzętowego. Możemy interaktywnie rysować linie > podczas gdy system syntetyzuje nową ścieżkę i teksturę. Czy celowo zamykają kod źródłowy z powodu zarabiania na nim, czy też z powodu praw autorskich ?


title: Korzyści z zespołu bez lidera w Scrum

text: Zwolennicy Scrum zakładają, że zespół bez wyznaczonego lidera zespołu (jak to ma miejsce w Scrumie) jest bardziej efektywny niż zespół z wyznaczonym liderem (jak w tradycyjnej hierarchii). Chociaż rozumiem ten punkt widzenia, nie jestem do końca pewien, czy tak jest. W zespołach Scrum zawsze pojawiają się liderzy. Odkurzacze elektryczne zostają napełnione. Jeśli więc organizacja już rozpoznaje pewne osoby jako utalentowanych liderów, dlaczego nie przydzielić im w pierwszej kolejności oficjalnej roli przywódczej?


title: Czy istnieje wzorzec subskrybowania uruchamianych zdarzeń/wiadomości w określonych odstępach czasu?

text: Nie jestem pewien, czy jest to powszechny scenariusz, czy nie, ale mam potrzebę w następujących kwestiach: Mam obiekt (nazwę go węzłem) i ten obiekt ma metody X, Y i Z. Chcę mieć możliwość powiadamiania subskrybentów, jeśli metody są wywoływane w określonej kolejności i w określonym czasie (idealny byłby przedział czasu). Na przykład: 1. Node.X() zostanie wywołany 2. Node.Z() zostanie wywołany 5 do 7 milisekund później 3. Node.X() zostanie wywołany 1 do 2 milisekund później 4. Node.Y() zostanie wywołany 2 milisekundy po tym. 5. Na koniec wywoływane jest zdarzenie wywołujące subskrybenta do tej sekwencji. Teraz w tym przykładzie po prostu używam metod bez parametrów, ale w prawdziwym życiu musiałbym bardziej szczegółowo określić zawartość parametrów (szukałbym konkretnych komunikatów). Dla odniesienia używam C# .net 4. Czy istnieją jakieś frameworki/wzorce/biblioteki, które są zbudowane do tego celu?


title: Jak zwalczasz zmęczenie programowaniem?

text: Nie zmęczenie, jak w „Potrzebuję snu”, ale zmęczenie, jak w „Po prostu nie mogę się już przejmować”, które zwykle pojawia się, gdy napotykasz przeszkody w jakimkolwiek projekcie, nad którym pracujesz, zazwyczaj im bliżej terminów. Może to być w projektach pracy lub projektach osobistych, ale jest to coś, o co ostatnio coraz częściej trafiam. Wpadnę na pomysł, zabiorę się do pracy, będę miał kilka naprawdę dobrych dni i zrobię postępy, a potem tylko kilka drobiazgów mnie potknie, nie mogę sprawić, by coś działało tak, jak chcesz, natrafiłem na ograniczenia w ramach, mam problemy, do których nie mogę znaleźć dokumentacji itp., a to staje się zbyt frustrujące. A może jestem w tym sam?


title: Brain picking podczas rozmowy kwalifikacyjnej

text: Niedawno odbyłem rozmowę o pracę w dużej firmie z Doliny Krzemowej na stanowisko starszego programisty/R&D. Miałem kilka technicznych ekranów telefonicznych, całodzienną rozmowę kwalifikacyjną na miejscu i bardziej techniczne ekrany telefoniczne na inne stanowisko później. Rozmowy kwalifikacyjne przebiegły bardzo dobrze, mam doktorat i doświadczenie w pracy w obszarze, o który się ubiegałam, ale nie dostałam żadnej oferty. Na razie w porządku. To było ciekawe doświadczenie, jestem zatrudniony, absolutnie żadnych urazów. Niektórzy z ankieterów zadawali bardzo szczegółowe pytania do tego stopnia, że byli podejrzliwi w stosunku do nowych technologii, nad którymi pracuję. Technologie te są wciąż w fazie rozwoju i nie weszły jeszcze na rynek. Wiem, że pracuje nad tym kilka dużych firm zajmujących się sprzętem/oprogramowaniem. Miałem już wiele wywiadów i bazując na moim wcześniejszym doświadczeniu z przeprowadzaniem wywiadów oraz wrażeniach, jakie pozostawili po sobie niektórzy ankieterzy, wiem, że teraz cała ta firma chciała ode mnie wydobyć kilka pomysłów na temat tego, co robiłem w tej dziedzinie. Pamiętaj, mam na myśli stanowisko R&D, a nie standardowe rzeczy programistyczne. Czy ktoś spotkał się do tej pory z taką sytuacją? A jak sobie z tym poradziłeś? Nie tyle przejmuję się „kradzieżą” pomysłów, ale bardziej oszukiwaniem się, by stawić się na rozmowę kwalifikacyjną, kiedy i tak nie ma zamiaru zatrudniać. Rozważam odrzucenie w przyszłości wywiadów technicznych i zamiast tego zaproponowanie okresu próbnego, w którym firma może z łatwością przemyśleć swoją decyzję o zatrudnieniu.


title: Ile czasu w tygodniu spędzasz na programowaniu pozalekcyjnym?

text: Tło: W dzień jestem osobą typu Microsoft DBA/IT, aw nocy programistą iOS i Mac. Mam jedną aplikację w App Store, a drugą w przygotowaniu. Staram się spędzać jak najwięcej czasu pracując nad moimi dwiema aplikacjami, ale z nową córką i innymi (niekomputerowymi) hobby, trudno mi spędzać więcej niż kilka godzin tygodniowo na programowaniu. Zastanawiam się, jak to wygląda w porównaniu z innymi programistami. Widzę wiele aplikacji napisanych przez pojedynczych programistów, których głównym zadaniem nie jest programowanie na iOS. Czy spędzają 4 godziny w nocy pracując nad swoimi projektami, czy po prostu odłączają się na rok lub dwa przed wydaniem czegokolwiek?


Co jest ważniejsze: pisać szybko programy czy pisać szybkie programy? Według: http://math.stackexchange.com/questions/17478/how-quickly-with-beer-tool lepiej jest pisać szybkie programy, ale chciałem zadać to pytanie tutaj, aby uzyskać ogólny sens tego, co ty myślisz na ten temat. Oczywiście biorę za pewnik, że wszystkie programy muszą być poprawne itd. itd.


title: Jak stworzyć skalowalne i wolne od efektów ubocznych testy integracyjne?

text: W moim obecnym projekcie ciężko mi wymyślić dobre rozwiązanie do tworzenia skalowalnych testów integracyjnych, które nie mają skutków ubocznych. Małe wyjaśnienie dotyczące własności wolnej od skutków ubocznych: dotyczy głównie bazy danych; po zakończeniu testów w bazie danych nie powinno być żadnych zmian (stan powinien być zachowany). Może skalowalność i zachowanie stanu nie idą w parze, ale naprawdę chcę naciskać na lepsze rozwiązanie. Oto typowy test integracyjny (testy te dotykają warstwy bazy danych): public class OrderTests { List<Order> ordersToDelete = new ArrayList<Order>(); public testOrderCreation() { Order order = new Order(); asertTrue(zamówienie.zapisz(); orderToDelete.add(order); } public testOrderComparison() { Order order = new Order(); Order order2 = nowy Order(); attachFalse(order.isEqual(order2); orderToDelete.add(order); orderToDelete.add(order2); } // Więcej testów public teardown() { for(Order order : ordersToDelete) order.delete(); } } Jako jeden można sobie wyobrazić, to podejście daje testy, które są bardzo powolne.A po zastosowaniu do wszystkich testów integracyjnych, testowanie tylko niewielkiej części systemu zajmuje około 5 sekund.Wyobrażam sobie, że ta liczba rośnie, gdy zasięg jest zwiększany. **Jakie byłoby inne podejście do pisania takich testów?** Jedną z alternatyw, o której mogę pomyśleć, jest posiadanie rodzaju zmiennych globalnych (w ramach klasy) i wszystkie metody testowe współdzielą tę zmienną. W rezultacie tylko kilka zleceń jest tworzonych i usuwanych ;co skutkuje szybszymi testami.Myślę jednak, że wprowadza to większy problem;testy nie są już izolowane i coraz trudniej jest je zrozumieć i przeanalizować.Może być tak, że testy integracyjne nie są ma być uruchamiany tak często, jak testy jednostkowe; dlatego niska wydajność może być dla nich akceptowalna. W każdym razie byłoby wspaniale wiedzieć, czy ktoś wymyślił alternatywy dla poprawy skalowalności.


title: Pośrednie: czytelność a wydajność

text: (Widzę, że jest wiele podobnych pytań, ale odpowiedzi nie są tym, co mnie interesuje.) To, co mnie dręczy, to niebezpośredniość. Jeśli coś piszę, zwykle umieszczam w liniach jak najwięcej rzeczy. Mógłbym być mniej rygorystyczny w języku skompilowanym, mając nadzieję, że kompilator wykona za mnie całe inline. Wciąż dodawanie warstw niebezpośrednich wydaje mi się, że „dodam trochę więcej obciążenia dla użytkownika w czasie wykonywania, abym mógł mieć tutaj ładniejszy kod” – coś, co można rozwiązać za pomocą komentarza lub innego projektu (co właściwie bym wolę, ale zajęłoby to trochę więcej czasu). Widząc małą funkcję, która jest używana tylko raz, muszę walczyć z chęcią jej wbudowania. Mnogość klas jednorazowych sprawia, że chcę stworzyć inne (i zazwyczaj całkowicie zorientowane na procedurę) rozwiązanie. Jak źle to jest? Ile warstw pośrednich jest właściwie w porządku?


title: Korzystanie z parametru typu (lub nie)

text: Efektywna Java zapewnia 2 sposoby implementacji „swap”: // Dwie możliwe deklaracje dla metody zamiany public static <E> void swap(List<E> list, int i, int j); public statyczna nieważna zamiana (List<?> lista, int i, int j); Następnie pan Bloch mówi: > Która z tych dwóch deklaracji jest lepsza i dlaczego? W publicznym API drugi jest lepszy, ponieważ jest prostszy. Przekazujesz listę — dowolną listę — a metoda > zamienia indeksowane elementy. Nie ma parametru typu, o który trzeba się martwić. Z reguły, jeśli parametr typu pojawia się tylko raz w deklaracji metody >, zastąp go symbolem wieloznacznym. Wydaje się, że zamiast metody `swap` i `swapHelper` można użyć `swapNoWildCard`. Pan Bloch wyjaśnia uzasadnienie użycia drugiego podpisu powyżej. public static <E> void swapNoWildcard(List<E> list, int i, int j) { E e = list.set(j, list.get(i)); lista.zestaw(i, e); } public static void swap(List<?> lista, int i, int j) { swapHelper(list, i, j); } private static <E> void swapHelper(List<E> lista, int i, int j) { E e = list.set(j, list.get(i)); lista.zestaw(i, e); } Jednak czy jest to dyskusyjne, biorąc pod uwagę fakt, że `swapNoWildCard` to prawie połowa # linii kodu w porównaniu z implementacją pozostałych dwóch metod? Dlaczego pominięcie parametru type jest tak przydatne?


title: Pisanie testów dla dwóch metod o wspólnej funkcjonalności

text: Piszę kilka testów dla modułu NodeJS, ale to pytanie może dotyczyć dowolnego języka/platformy. Mam następującą sytuację: // w moduleA.js exports.foo = function (var1, var2) { // zrób coś z var1 i var2 tutaj baz(var1, var2); }; exports.bar = function (var1, var2) { // tutaj zrób coś zupełnie innego niż var1 i var2 baz(var1, var2); }; function baz(var1, var2) { // zrób coś z var1 i var2 jeszcze raz, że zarówno foo, jak i bar potrzebują moduleB.doSomething(var1, var2); } Tak więc zarówno `foo` jak i `bar` są publicznymi metodami `moduleA`. Mają pewną specyficzną funkcjonalność (robią różne rzeczy niż `var1` i `var2`), ale także pewną wspólną funkcjonalność (aby zachować rzeczy w stanie suchym przeniosłem to do prywatnej metody `baz`), a następnie oboje wywołują publiczna metoda na `moduleB`. Odciąłem `moduleB`, więc wiem dokładnie, co się dzieje po wywołaniu `foo` i `bar`. Piszę testy dla specyficznych funkcjonalności `foo` i `bar`, ale nie jestem w 100% pewien jak podejść do testowania wspólnych funkcjonalności w `baz`. Wydaje mi się, że mam trzy możliwości: * napisać identyczne testy dla `foo` i `bar`, które sprawdzają rzeczy w `baz` * napisać pojedynczy test dla `foo` i nie pisać tego samego testu dla ` bar` ponieważ wiedz, że `baz` działa * eksponuj `baz` jako kolejną publiczną metodę dla modułu i przetestuj ją oddzielnie. Skłaniam się ku pierwszej opcji, ale czuję, że czegoś mi brakuje.


title: Jak działają hybrydowe aplikacje VB6/.Net w świecie rzeczywistym?

text: Utrzymuję aplikację VB6 i studiujemy, jak przeprowadzić migrację do .Net. Rozważamy stopniowe wprowadzanie nowych funkcji w widocznych klasach .Net COM i powolną migrację istniejących funkcji. Znalazłem kilka pouczających przykładów „Hello World”, jak to zrobić i działa dobrze z naszą aplikacją. Ale jak wygląda rzeczywiste zachowanie tych hybrydowych aplikacji? Czy są stabilne, możliwe do utrzymania? Szczególną cechą naszego programu jest to, że więcej użytkowników na tym samym komputerze będzie z niego korzystać, przełączając konta użytkowników. EDYCJA: Aplikacja VB6 odczytuje dane z połączenia USB i zapisuje je w bazie danych Access. Użytkownik może wywołać różne widoki danych. Dane są buforowane w urządzeniu sprzętowym, więc przerwy w ich odczycie nie są krytyczne.


title: Jaki jest obecny stan języka programowania Google Dart?

text: Dart jest dostępny od wieków (w Internecie), ale sądząc po Trendach Google , nie jest zbytnio rozreklamowany, a fakt, że działa tylko w Chrome, też nie pomaga. Niemniej jednak Chrome codziennie zdobywa udział w rynku, co pozwala lepiej widzieć Dart. Jaki jest teraz ogólny obraz? W jakim stanie jest język? Czy ludzie wysoko to cenią? Udział w rynku? Prezentacja aplikacji internetowej? Niektóre implementacje funkcji, które sprawiają, że mówisz „Muszę z tego skorzystać”?


title: Jak poprawić i rozpocząć interakcję z klientem

text: Jak pozbyć się wahania w interakcji z klientem? Jako Devloper chcę rozwijać swoją karierę, ale wymaga to lepszej interakcji z klientem, ale ponieważ nie prowadziłem żadnej większej interakcji z klientem, a chcę prowadzić dużą interakcję z klientem, jak mogę postępować w ten sposób?


title: Dlaczego operatory zdefiniowane przez użytkownika nie są bardziej powszechne?

text: Jedną z cech, której brakuje mi w językach funkcjonalnych, jest pomysł, że operatory to tylko funkcje, więc dodanie operatora niestandardowego jest często tak proste, jak dodanie funkcji. Wiele języków proceduralnych dopuszcza przeciążenia operatorów, więc w pewnym sensie operatory są nadal funkcjami (jest to bardzo prawdziwe w D, gdzie operator jest przekazywany jako ciąg w parametrze szablonu). Wydaje się, że tam, gdzie dozwolone jest przeciążanie operatorów, często trywialne jest dodanie dodatkowych, niestandardowych operatorów. Znalazłem ten wpis na blogu, który twierdzi, że operatory niestandardowe nie działają dobrze z notacją infiksową ze względu na zasady pierwszeństwa, ale autor podaje kilka rozwiązań tego problemu. Rozejrzałem się i nie mogłem znaleźć żadnych języków proceduralnych, które obsługują operatory niestandardowe w tym języku. Istnieją hacki (takie jak makra w C++), ale to nie to samo, co obsługa języków. **Ponieważ ta funkcja jest dość prosta do zaimplementowania, dlaczego nie jest bardziej powszechna?** Rozumiem, że może to prowadzić do brzydkiego kodu, ale to nie powstrzymało projektantów języków w przeszłości przed dodawaniem przydatnych funkcji, które można łatwo nadużywane (makra, operator trójargumentowy, niebezpieczne wskaźniki). Rzeczywiste przypadki użycia: * Implementuj brakujące operatory (np. Lua nie ma operatorów bitowych) * Naśladuj D `~` (konkatenacja tablicy) * DSL * Użyj `|` jako cukierka składni w stylu Uniksa (używając współprogramów/generatorów) I' Interesują mnie również języki, które **dopuszczają** operatory niestandardowe, ale bardziej interesuje mnie **dlaczego** ta opcja została wykluczona. Myślałem o rozwidleniu języka skryptowego, aby dodać operatory zdefiniowane przez użytkownika, ale powstrzymałem się, gdy zdałem sobie sprawę, że nigdzie go nie widziałem, więc prawdopodobnie istnieje dobry powód, dla którego projektanci języków mądrzejsi ode mnie nie pozwolili na to.


title: Czy projektowanie oprogramowania jest ważne dla programistów?

text: Studiuję inżynierię oprogramowania, właśnie ukończyłem kurs wymagań i idę po więcej. Nie wiem, jak ważne jest projektowanie oprogramowania (w świecie rzeczywistym i rzeczywistych projektach) w późniejszych fazach SDLC. Jak czytam w Internecie, wiele zespołów programistycznych lubi mniej dokumentacji lub projektowania, a więcej kodowania. To sprawia, że mój główny jest bezwartościowy (w prawdziwym świecie). Jestem bardzo dobry w programowaniu i lubię to, ale to nie jest moja główna rzecz. Chciałbym usłyszeć od ludzi o ich doświadczeniach z tym tematem, o rzeczywistej roli inżyniera oprogramowania w rzeczywistych projektach io tym, jak zwykle przebiegają projekty?


title: Jak stworzyć środowisko, w którym naprawianie testów jest priorytetem?

text: Jestem inżynierem oprogramowania w średniej wielkości firmie. Mamy dość solidną platformę testową działającą na TeamCity. Wykonuje testy jednostkowe przy każdym zameldowaniu i codzienny test jednostkowy / przebieg BVT. Problem w tym, że mamy mnóstwo nieudanych testów jednostkowych. Dość często wspominam o bezsensowności testów jednostkowych, jeśli ciągle psują się i nie są konserwowane. Brak możliwości sprawdzenia, czy zmiana spowodowała regresję, usuwa większość wartości platformy testów jednostkowych. Chciałbym zasiać ziarno, które wytworzy kulturę dobrych nawyków - naprawianie testów, gdy się zepsują, postrzeganie ich jako wartościowych, nadawanie priorytetu naprawianiu testów wraz z innymi pracami. Próbowałem przekupstwa (wypieków!), po prostu pytałem i rozmawiałem z kierownikami zespołów. Wszyscy mówią, że to dobry pomysł, ale wydaje mi się, że tylko ja coś z tym robię. Jaki jest najlepszy sposób na rozpoczęcie zachęcania innych do naprawiania testów i ustalania priorytetów naprawiania testów w ich sprintach? Jeśli istnieje mniej subiektywny sposób, aby to zadać, chętnie przyjmę wszelkie wskazówki.


title: Jak zabrać się za szkolenie IPorównywalne do zespołu?

text: Ja (jestem tylko programistą) mam za zadanie przeszkolenie mojego zespołu w zakresie techniki lub technologii. Skupiłem się na interfejsach systemowych, IComparable i IEquatable, aby być konkretnym. Jak się zajmuje nauczanie (nawet jeśli jest to 1 godzina), czym jest IPorównywalny i gdzie możemy go użyć, dając im przykład. Nie jestem jednak do końca pewien, czy dzięki temu mój zespół zrozumiałby i zaczął korzystać z IComparable. W moim projekcie mam jednak klasę Rabat i są przypadki, w których muszę połączyć dwie listy Rabatów. To byłby naprawdę dobry przykład, w którym IEquatable byłby pomocny podczas łączenia, prawda? Miałem następujący szablon do szkolenia. * Wprowadzenie: Dlaczego potrzebny jest IComparable? (I nie mogłem uzyskać odpowiedzi, której mógłbym użyć do nauczania). * Struktura IComparable (Ponownie, o czym jeszcze mogę mówić poza metodą CompareTo). * Przykładowy kod * Gdzie możemy go użyć w naszym projekcie * Pytania.


title: Dlaczego Python jest wolniejszy niż Java, ale szybszy niż PHP

text: Wiele razy widziałem różne benchmarki, które pokazują, jak wiele języków radzi sobie z danym zadaniem. Testy te zawsze pokazują, że Python jest wolniejszy niż Java i szybszy niż PHP. I zastanawiam się, dlaczego tak jest. * Java, Python i PHP działają na maszynie wirtualnej * Wszystkie trzy języki konwertują swoje programy na własne kody bajtowe, które działają **na** systemie operacyjnym – więc żaden nie działa natywnie * Zarówno Java, jak i Python mogą być „spełnione” (`.pyc` dla Pythona), ale moduł `__main__` dla Pythona nie jest skompilowany Python i PHP są wpisywane dynamicznie, a Java statycznie — czy to jest powód, dla którego Java jest szybsza, a jeśli tak, wyjaśnij, jak to wpływa na szybkość. I nawet jeśli argument dynamic-vs-static jest poprawny, nie wyjaśnia to, dlaczego PHP jest wolniejsze niż Python - ponieważ oba są językami dynamicznymi. Możesz zobaczyć kilka benchmarków tutaj i tutaj oraz tutaj


title: Dlaczego dziedziczenie i polimorfizm są tak szeroko stosowane?

text: Im więcej dowiaduję się o różnych paradygmatach programowania, takich jak programowanie funkcjonalne, tym bardziej zaczynam kwestionować mądrość koncepcji OOP, takich jak dziedziczenie i polimorfizm. Po raz pierwszy dowiedziałem się o dziedziczeniu i polimorfizmie w szkole iw tamtym czasie polimorfizm wydawał się wspaniałym sposobem na napisanie kodu generycznego, który pozwalał na łatwą rozszerzalność. Ale w obliczu kaczki typowania (zarówno dynamicznego, jak i statycznego) oraz funkcji funkcjonalnych, takich jak funkcje wyższego rzędu, zacząłem patrzeć na dziedziczenie i polimorfizm jako narzucanie niepotrzebnego ograniczenia opartego na delikatnym zestawie relacji między obiektami. Ogólną ideą polimorfizmu jest to, że piszesz funkcję raz, a później możesz dodać nową funkcjonalność do swojego programu bez zmiany oryginalnej funkcji - wystarczy stworzyć kolejną klasę pochodną, która implementuje niezbędne metody. Ale jest to o wiele prostsze do osiągnięcia poprzez pisanie kaczką, niezależnie od tego, czy jest to w dynamicznym języku, takim jak Python, czy w języku statycznym, takim jak C++. Jako przykład rozważmy poniższą funkcję Pythona, po której następuje jej statyczny odpowiednik w C++: def foo(obj): obj.doSomething() template <klasa Obj> void foo(Obj& obj) { obj.doSomething(); } Odpowiednik OOP byłby podobny do następującego kodu Javy: public void foo(DoSomethingable obj) { obj.doSomething(); } Główną różnicą jest oczywiście to, że wersja Java wymaga utworzenia interfejsu lub hierarchii dziedziczenia, zanim będzie działać. Wersja Java wymaga więc więcej pracy i jest mniej elastyczna. Ponadto uważam, że większość rzeczywistych hierarchii dziedziczenia jest nieco niestabilna. Wszyscy widzieliśmy wymyślone przykłady kształtów i zwierząt, ale w prawdziwym świecie, gdy zmieniają się wymagania biznesowe i dodawane są nowe funkcje, trudno jest wykonać jakąkolwiek pracę, zanim trzeba będzie naprawdę rozciągnąć relację „jest-a” między podklasy lub przemodeluj/zrefaktoruj swoją hierarchię, aby uwzględnić dalsze klasy bazowe lub interfejsy w celu dostosowania do nowych wymagań. Dzięki pisaniu kaczką nie musisz się martwić o modelowanie czegokolwiek — po prostu martwisz się o _funkcjonalność_, której potrzebujesz. Jednak dziedziczenie i polimorfizm są tak popularne, że wątpię, czy byłoby przesadą nazwanie ich dominującą strategią rozszerzalności i ponownego wykorzystania kodu. Dlaczego więc dziedziczenie i polimorfizm są tak szalenie skuteczne? Czy przeoczam kilka poważnych zalet dziedziczenia/polimorfizmu w porównaniu z typowaniem kaczek?


title: W jaki sposób korzystanie z aparatu reguł wpływa na projekt, implementację i wydajność aplikacji?

text: Interesuje mnie zdolność silników reguł do: * uruchamiania i iteracji logiki biznesowej * zmuszania "użytkowników biznesowych" do faktycznej modyfikacji tych reguł, a nie programistów * ogólnego rozumienia reguł biznesowych mieć wpływ na jakość aplikacji? Czy korzystanie z mechanizmu reguł zmienia się w przypadku wdrożenia w konfiguracji z 1 komputerem w porównaniu z architekturą w porównaniu z wielowarstwową rozproszoną architekturą opartą na chmurze wykorzystującą tysiące maszyn? Jak byłoby inaczej?


title: Jak sprawić, by programiści przestali pisać kod podatny na wstrzyknięcie SQL?

text: Czasami jesteś zajęty i delegujesz małe zadania młodszym programistom. Ale jeśli nie przywiązujesz wystarczającej uwagi, znajdziesz się z takim rodzajem kodu w produkcji: class DivtoggleController extends Zend_Controller_Action { public function closeAction() { /* ... kod usunięty dla zwięzłości ... */ $req = $ this->getRequest(); $formData = $req->getPost(); $d = $formData['div']; $i = $formData['id']; $dm = nowy Model_DivtoggleManager(); $rs = $dm->setDivToggleById($d, $i); } } class Model_DivtoggleManager extends Zend_Db_Table { public function setDivToggleById($div, $id) { $result = $this->getAdapter()->query( "update div_toggle set" . $div . "=1 gdzie id=" . $ ID             ); } } Tak więc, biorąc pod uwagę, że dla zwięzłości usunąłem logikę uwierzytelniania/zarządzania sesją, kto może mi powiedzieć, jaki może być problem z tą próbką?


title: Jak utrzymać kierownictwo poza naszym procesem rozwoju?

text: Jestem inżynierem oprogramowania w zespole programistycznym. Ostatnie 3 lata pracowaliśmy dla klienta wewnętrznego nad nowym produktem. Teraz ten produkt jest gotowy, będziemy pracować nad głównymi nowymi funkcjami istniejących produktów. W przypadku konkretnej funkcji, kierownictwo produktu zgadło, że jej opracowanie zajmuje 150 godzin. Razem z naszym kierownikiem projektu stworzyliśmy bardzo szczegółowy plan i doszliśmy do wysiłku 300 godzin. Wczoraj rozmawialiśmy o tym i uważają, że przeceniliśmy rzeczy. W naszych planach oszacowaliśmy godziny na pisanie testów jednostkowych, ich ideą jest zrzucenie ich, aby zaoszczędzić czas. Decyzja nie została jeszcze podjęta iw razie potrzeby będę bronić tego planowania i testów jednostkowych. Ale to, co mi się tutaj naprawdę nie podoba, to to, że kierownictwo ingeruje w nasz proces rozwoju. Jak mam je wykluczyć z naszego procesu rozwoju? A jakich argumentów mógłbym użyć, aby utrzymać testy jednostkowe na miejscu (oprócz jakości i długoterminowej oszczędności czasu)? Na marginesie, nasza firma ma 3 zespoły inżynierskie, a zespół, w którym jestem, dostarcza swoje oprogramowanie na czas (daj lub weź 10% marży). Podczas gdy inne zespoły zawsze dostarczają późno, głównie z powodu niedoszacowania w planowaniu. Planują tylko kodowanie, a nie zarządzanie, testowanie i obsługę wokół niego.


title: Dlaczego niestandardowe opcje pobierania plików PDF są preferowane zamiast ctrl+p?

text: Dlaczego ja, jako programista, muszę mieć tyle kłopotów z rozwijaniem opcji pobierania plików PDF dla moich klientów, skoro wszyscy na świecie mogą po prostu nacisnąć Ctrl+P i życie jest dobre? Obecny numer, nad którym pracuję, dotyczy wykresów Google, więc nie twierdzę, że oferowanie pobierania plików PDF jest ogólnie stosunkowo trudne. Wręcz przeciwnie, poszczególne przypadki przysparzają więcej kłopotów, niż wydają się warte. Zobacz też: `@media print {}` Aktualizacja: Dzięki niewielkim badaniom udało mi się znaleźć doskonale działające rozwiązanie. „Wystarczy nacisnąć Ctrl+P” brzmi teraz jak absurdalna rzecz do powiedzenia. Dziękuję wszystkim za twój wkład. Jeśli chcesz wiedzieć, co zdecydowałem się zrobić, zdałem sobie sprawę, że wykresy Google są wyświetlane jako znaczniki SVG i myślę, że powinienem być w stanie użyć TCPDF do renderowania ich w dokumencie PDF.


title: Formalizacja błędów programistów

text: Każdy z nas popełnia błędy prowadzące do błędów. Kiedyś chciałem zacząć rejestrować moje błędy do przyszłej analizy, prawdopodobnie podając tytuł projektu, przybliżony czas spędzony i co najważniejsze, rodzaj błędu. Na przykład, kiedy skopiowałem i wkleiłem fragment o „x” i zamieniłem każde wystąpienie „x” na „y” i zapomniałem zastąpić maleńki kawałek, to przechodzi do „błędu kopiowania i wklejania”. Przydatność tego podejścia zależy od tego, czy w ogóle mogę sformalizować swoje błędy i prawdopodobnie zminimalizować liczbę typów do wyboru. W przeciwnym razie zacząłbym odkładać, ignorować i tak dalej, aby ten system był bezużyteczny. Czy istnieją badania w tym obszarze, prawdopodobnie znany minimalny zestaw błędów? Może ktoś z Was próbował już coś takiego zaimplementować i odniósł sukces/nie powiodło się?


title: Nienawidzę jednego z naszych standardów kodowania i doprowadza mnie do szaleństwa, jak go przetwarzać?

text: **Zastrzeżenie**: Nie tak przesadzone, jak sugeruje tytuł, ale nadal czuję się niekomfortowo. Mam zamiar wyrazić szczerze, więc weź to z przymrużeniem oka. Po prostu udawaj, że mówię o _tym_ standardzie kodowania, z którym nie lubisz pracować. **Edytuj** : To, że mi się nie podoba, nie oznacza, że go nie używam ani nie egzekwuję. * * * Postanowiłem zadać to pytanie w duchu, jak wyjść z normy, której nie lubisz, a nie po to, by uzyskać pomoc, jak lepiej argumentować, jak można to zmienić (chociaż wszelkie uwagi dotyczące tej ostatniej części są mile widziane) . Poza tym pracuję w dużej firmie i taka zmiana czegoś, co żyje tak długo i ma tak małe znaczenie, jest mało prawdopodobne. Standardem jest otwierający nawias klamrowy na dedykowanej linii: somefunction() { //... } Zamiast ***wyraźnie lepszy*** (zwróć uwagę na żartobliwy/sfrustrowany ton): somefunction() { //... } Moje osobiste argumenty przeciwko standardowi: * **Nadużywa kod** : dodatkowe niepotrzebne linie * **Trudniej wpisać** : chociaż prawdopodobnie to tylko ja zmagam się ze standardem, znam jedną dodatkową naciśnięcie klawisza nie jest takie złe. * **Niełatwe do odczytania** : Zaczynam czytać deklarację funkcji, instrukcję if lub jakąkolwiek inną instrukcję nakładania zakresów i nie muszę już szukać nawiasu otwierającego. Zagnieżdżone bloki z tym standardem z jakiegoś powodu mnie denerwują. * **Używane przez ludzi, którzy wywodzą się ze środowiska Microsoft IDE** : Myślę, że za standardem powinien być jakiś argument (lub więcej), a nie tylko przyjęcie go przez paradygmat. Ich argumenty (i mój sposób wewnętrznie im ripostuje): * **Łatwiejszy do odczytania, ponieważ od razu widać, gdzie bloki zaczynają się i kończą** : Nie rozumiem tego, jaki jest pożytek z bloku, jeśli nie wiesz co jest własnością, więc musisz czytać od tyłu. * **Użyłem go w Microsoft IDE i podobało mi się** : Uhh... ok? * **To jest w standardzie** : _*skradanie się*_ Czy jestem jedyną osobą, która zmaga się z upartym stanowiskiem wobec określonego standardu? Jak się z tym pogodziłeś? powinno być (tylko dla zabawy)?


title: Czy wszystkie metody publiczne w klasie abstrakcyjnej powinny być oznaczone jako wirtualne?

text: Niedawno musiałem zaktualizować abstrakcyjną klasę bazową na jakimś OSS, którego używałem, aby była bardziej testowalna, czyniąc je wirtualnymi (nie mogłem użyć interfejsu, ponieważ łączył dwa). To skłoniło mnie do myślenia, czy powinienem oznaczyć wszystkie metody, których potrzebowałem, jako wirtualne, czy też powinienem oznaczyć każdą publiczną metodę/właściwość jako wirtualną. Generalnie zgadzam się z Royem Osherove, że każda metoda powinna być wirtualna, ale natknąłem się na ten artykuł, który sprawił, że zacząłem się zastanawiać, czy jest to konieczne, czy nie. Ograniczę to jednak do klas abstrakcyjnych dla uproszczenia (jestem pewien, czy wszystkie konkretne metody publiczne powinny być wirtualne, jest szczególnie dyskusyjne). Widzę, gdzie możesz chcieć zezwolić podklasie na użycie metody, ale nie chcesz, aby przesłaniała implementację. Jednak dopóki ufasz, że zasada substytucji Liskova będzie przestrzegana, to dlaczego miałbyś nie pozwolić na jej obejście? Oznaczając ją jako abstrakcyjną, i tak wymuszasz pewne nadpisanie, więc wydaje mi się, że wszystkie metody publiczne wewnątrz klasy abstrakcyjnej rzeczywiście powinny być oznaczone jako wirtualne. Chciałem jednak zapytać, czy jest coś, o czym nie myślę. Czy wszystkie metody publiczne w klasie abstrakcyjnej powinny być wirtualne?


title: Jak zwiększyć wydajność Niezmiennej Kolejki w Javie?

text: Rozwijałem niezmienną kolejkę w javie, ale wersja, którą opracowałem, jest podobno powolna i zasugerowano mi utworzenie szybszej wersji tego samego i nie mam pojęcia, jak to zrobić. import java.util.ArrayList; import java.util.Lista; import java.util.NoSuchElementException; public class ImmutableQueueImpl<E> implementuje ImmutableQueue<E> { private List<E> kolejki; public ImmutableQueueImpl() { kolejka=new ArrayList<E>(); } public ImmutableQueueImpl(List<E> kolejka) { this.queue=queue; } public ImmutableQueue<E> enqueue(E e) { if(e==null) wyrzuć nowy IllegalArgumentException(); List<E> klon = new ArrayList<E>(kolejka); klon.dodaj(e); zwróć nowe ImmutableQueueImpl<E>(klon); } public ImmutableQueue<E> dequeue() { if(queue.isEmpty()) { throw new NoSuchElementException(); } List<E> clone = new ArrayList<E>(kolejka); klon.usuń(0); zwróć nowe ImmutableQueueImpl<E>(klon); } public E peek() { if(queue.isEmpty()) throw new NoSuchElementException(); powróć kolejka.get(0); } public int size() { return queue.size(); } } Proszę sugerować wszelkie ulepszenia w implementacji lub użytych bibliotekach. Cały czas usuwamy elementy z niezmiennych list, a dekolejkowanie jest tego szczególnym przypadkiem. Chodzi o to, że rezultatem nie jest tak naprawdę element, ale kolejna niezmienna lista bez niego. Celem tego projektu jest bezpieczeństwo mutacji io wiele lepsze w ustawieniach równoległych niż mutowalne struktury danych.


title: Klucze dla całego przedsiębiorstwa

text: Od dłuższego czasu pracuję nad ODS oraz Hurtownią Danych. Oba integrują szeroką gamę źródeł danych z aplikacji piecowych. Jednym z zastosowań ODS jest dostarczanie danych do innych aplikacji rur piecowych. Wyobraź sobie, że jedna aplikacja utrzymuje bazę danych personelu, a inna zarządza śledzeniem sprzedaży. Czasami aplikacja Sales może wymagać listy personelu, z którego ktoś może wybrać, powiedzmy, aby przypisać danemu pracownikowi sprzedaż/prowizję. Aplikacja Sales może wysyłać zapytania do ODS, aby uzyskać listę personelu. Dzięki temu aplikacja Personel może zmienić strukturę danych, a ODS modyfikuje proces ETL, aby dostosować się do tej zmiany. W związku z tym zmiana nie będzie miała wpływu na wszystkie inne aplikacje zużywające te dane. Aplikacja Sales będzie musiała zapisać PersonnelID w tym rekordzie sprzedaży/prowizji we własnej bazie danych. Jednak przy następnym odświeżeniu ODS, jeśli korzysta z techniki pełnego obciążenia, klucz się zmieni. Ponieważ PersonnelID przechowywany w bazie danych Sales jest oddzielną bazą danych, nie ma prostego sposobu kaskadowania tej zmiany. Stwarza to wyzwanie, w którym wszelkie zmiany dokonywane w ODS muszą być wprowadzane bardzo ostrożnie, a nawet mogą ograniczać niektóre projekty, ponieważ aplikacje zewnętrzne są uzależnione od tych kluczy, aby nigdy się nie zmieniły. Zwykle unikałbym ujawniania kluczy użytkownikom, ale w tym przypadku wydaje się konieczne zezwolenie zewnętrznym aplikacjom na odwoływanie się do jednostek obejmujących całe przedsiębiorstwo we własnych aplikacjach. To samo dotyczy tabel przeglądowych dostępnych w ODS, w których tabela przeglądowa zawiera klucze i tekst. Po pełnym załadowaniu ODS mogę zapewnić, że klucze spełniają referencyjną integralność w bazie danych, ale nie w przypadku zewnętrznych baz danych wykorzystujących te klucze. Ponieważ niektóre części ODS są obecnie zakodowane jako pełne obciążenie, co spowodowałoby ponowne generowanie kluczy, musiałbym przekodować ten ETL tak, aby był przyrostowy, aby zewnętrzne bazy danych mogły odwoływać się do tych kluczy bez obawy o ich zmianę. Jakie techniki są używane, gdy masz źródło danych obejmujące całe przedsiębiorstwo, a inne aplikacje wykorzystują te dane i muszą przechowywać klucze obce odwołujące się do jednostek w tych danych? Jak rozdzielić odniesienia do kluczy obcych tak bardzo, jak to możliwe, bez komplikowania dostępu do tych danych? Obecnie korzystam z funkcji o wartościach tabelarycznych, aby zapewnić dostęp do danych. Wybrałem to podejście, ponieważ umożliwia ono parametry, łączenie i rozprzęganie dostępu do tabel bazowych, które mogą się później zmienić.


title: W Ruby zmień globalny blok bezpiecznego wątku

text: W Rubim mam przypadek użycia dla kilku typowych opcji konfiguracyjnych, m.in. NOOP, ŚLAD, CICHA. W tej chwili używam lokalnych varów zamiast globalnych i rozprowadzam je po całym miejscu i jest to uciążliwe. Z przyjemnością używam do nich globalnych, gdybym mógł uruchomić blok, w którym globalne można tymczasowo zmienić, a następnie cofnąć. np. global_configure(:TRACE=>true) do ... end Ale jak mogę zabezpieczyć ten blok kodu wątku, aby inne wątki nie mogły zmienić w nim wartości globalnych?


title: Wyodrębnianie danych z plików dziennika

text: Będę wyodrębniać pewne bity z plików dziennika za pomocą wyrażeń regularnych, aby odfiltrować bity danych. Początkowo zamierzałem to zrobić w Pythonie. Później zacząłem myśleć o najszybszym sposobie wykonania tego zadania. To doprowadziło mnie do programowania równoległego. Pamiętam, że słyszałem gdzieś, że Python nie może być naprawdę równoległy. Jestem jak dotąd doświadczonym programistą. Bawiłem się trochę Javą i rozważałem programowanie równoległe w Javie do wykonania tego zadania. Zastanawiałem się, jaki byłby najszybszy sposób wykonania tego zadania?


title: Co to jest „porada” wiosennego AOP?

text: Jak mówi pytanie. Co to jest „rada”? Co ważniejsze, co to w ogóle oznacza (semantyka)? Jaka jest etymologia „porady” w kontekście wiosny?


title: Warstwa aplikacji VS prezentacji w DDD

text: Mam problem z wytyczeniem wyraźnej granicy między warstwą prezentacji i aplikacji w projektowaniu opartym na domenie. Gdzie powinny się znaleźć kontrolery, widoki, układy, JavaScript i pliki CSS? Czy znajduje się w warstwie aplikacji czy prezentacji? A jeśli idą wszystkie razem w tej samej warstwie, co zawiera drugą? Czy jest pusty?


title: Najlepsze rozwiązanie do uruchomienia piaskownicy Linuksa na moim komputerze z systemem Windows?

text: Chciałbym opracować niektóre node.js na moim komputerze z systemem Windows przy użyciu wirtualnego serwera linux, który działa jako program i do którego mam dostęp przez ssh. Chciałbym, aby ta wirtualna instancja linuksa również miała dostęp do sieci. Czy jest dostępne jakieś rozwiązanie? Najlepiej darmowe.


title: Dzielenie 1 dużego obiektu na 2 ściśle powiązane - dobry, zły?

text: Mam złożony obiekt (nazwij go BusinessLogic), który udostępnia interfejs RPC użytkownikom częściowo zaufanym. Funkcje w interfejsie RPC muszą zdecydować, którą procedurę wywołać, sprawdzić autoryzację dla tej funkcji, wykonać pewne sprawdzenie argumentów, a następnie wywołać funkcje prywatne w celu wykonania wymaganej funkcjonalności, a następnie zwrócić wyniki do wywołującego. Postanowiłem to zaimplementować, umieszczając funkcje RPC w oddzielnym obiekcie bezstanowym (nazwijmy go AppInterface), aby nieco oddzielić obawy, tak aby BusinessLogic po prostu przenosił własne dane, a AppInterface decydował, które metody w BusinessLogic wywoływać w celu zaimplementowania funkcji odsłania. W większości działa to bardzo dobrze. Jednak wydaje mi się to trochę nie tak. Obiekt BusinessLogic zyskał dzięki temu, że nie trzeba się martwić o autoryzację, sprawdzanie argumentów itp., co jest dobre. Ale ponieważ AppInterface implementuje całą swoją funkcjonalność w zakresie BusinessLogic, może być po prostu cienkim opakowaniem dla niektórych procedur (co sprawia, że kwestionuję jego konieczność) i jest złożonym opakowaniem dla innych procedur (co sprawia, że zastanawiam się, czy ta złożoność powinna być z powrotem do BusinessLogic, biorąc pod uwagę, że BusinessLogic posiada wszystkie informacje potrzebne do wykonania zadania). Oznacza to również, że AppInterface potrzebuje dostępu do metod w BusinessLogic, które w innym przypadku byłyby prywatne, ponieważ nikt inny ich nie używa; pomyśl o funkcjach przyjaciela w C++. Wreszcie oznacza to, że nie mogę skutecznie testować jednostek AppInterface bez użycia pełnego obiektu BusinessLogic, ponieważ jest to jedyny praktyczny sposób uzyskania prawidłowych danych wyjściowych. Cieszę się, że zostawiam system taki, jaki jest, ponieważ działa, ale jestem ciekaw, czy są oczywiste ulepszenia, które mogę wprowadzić do takiego systemu. (Za to, co jest warte, używam Pythona 2.7, w stylu głównie obiektowym.)


title: Czy zmiana rozmiaru obrazów w CSS nadal jest złym pomysłem?

text: Zawsze uważano, że używanie atrybutów szerokości/wysokości na obrazach, które nie są tym, czym jest oryginalny obraz, jest złym pomysłem. Może to oznaczać piksalowane obrazy lub pobierane pliki o rozmiarach większych niż nessary. Ale czy to nadal jest problem? Nie sugerowałbym powiększania zdjęć, ale zmniejszanie nie powinno być problemem, pod warunkiem, że nie różni się zbytnio od oryginału i trzymania się skali. Na przykład mam zdjęcie o wymiarach 600x400 i przyklejam do niego szerokość 400px. Większość nowoczesnych przeglądarek zmniejsza obraz i wygląda na to, że renderowanie jest nadal przyzwoite. Więc co wszyscy sądzą na ten temat?


title: Lepsza nazwa dla existByUserNameAndPassword()

text: Zastanawiam się, czy istnieje lepsza nazwa funkcji DB API o nazwie `existsByUserNameAndPassword()`, która zwraca wartość logiczną. Istnieje więcej funkcji nazwanych tak: `existsByOldId()`... Brzmi to trochę niedoskonale... Czy istnieje lepszy pomysł na nazywanie funkcji "istniejących"? Chcę jakoś zachować to „istnieje”. Aby użyć tej funkcji w bardzo zrozumiałym kontekście, takim jak: if ($DB->existsByUserNameAndPassword($name, $password)) { // ... }


title: Testowanie jednostek nieprawidłowych wejść; ArgumentException a niestandardowy wyjątek

text: W testowanym kodzie jednostkowym często sprawdzam argumenty dowolnej metody przed rozpoczęciem właściwej "pracy" metody: public void DoSomething(string test) { if (string.IsNullEmptyOrWhiteSpace(test)) { throw new ArgumentException(" Test nie może być pusty”, „test”); } } W moim odpowiednim teście dla tej metody wykonam następujące czynności: [Test] [ExpectedException(typeof(ArgumentException), Message = "Nazwa parametru: test", MatchType = MatchType.Contains)] public void TestNullInput() { var classToTest = new ClassToTest(); classToTest.DoCos(null); } Myślę, że jest to dość zły sposób na wykonanie testu, ponieważ opiera się on na konkretnym nazwanym parametrze (który niekoniecznie musi być prawdziwy po jakiejkolwiek refaktoryzacji), a także na formacie komunikatu ArgumentException. Inną opcją może być utworzenie w tym celu niestandardowego wyjątku, jakiejś formy „TestWasNullOrEmptyException”, ale wydaje się to również dość niezręczne, ponieważ w całym rozwiązaniu będzie wiele różnych wyjątków, z których każdy służy tylko do wskazania braku/nieważności parametru . Zastanawiam się, czy ktoś inny miał do czynienia z tym problemem i czy po prostu przechodzę do moich testów walidacji danych wejściowych w niewłaściwy sposób, istnieje bardziej eleganckie rozwiązanie. EDYCJA: To jest kod C# i używam NUnit/Rhino Mocks.


title: Przykłady zbierania wymagań i przypadków użycia

text: Dużo słyszałem o zbieraniu wymagań i przypadkach użycia w teorii, ale w praktyce często zdarza się, że zadajemy sobie pytanie "czy powinniśmy to uwzględnić? czy to powinien być przypadek użycia? w jakim języku powinniśmy napisać to szczególne wymaganie" i tak dalej . Pytania te wynikają głównie z braku praktyki, a ponieważ nie możemy wybierać projektów do „nauczenia się w praktyce”, trochę trudno jest przyzwyczaić się do tego rodzaju myślenia, którego potrzebujemy w procesie zbierania wymagań dla nowej aplikacji. W takim razie, czy jest jakieś miejsce, w którym mogę znaleźć rzeczywiste przykłady zbierania wymagań i zastosowania przypadków użycia? Znalazłem kilka książek, ale skupiają się one głównie na zespołach i pracuję sam, więc jest to trochę zagmatwane.


title: jakie są zasady projektowania warstw po stronie serwera aplikacji internetowych i najlepsze praktyki, które lubisz stosować?

text: Aplikacja internetowa jest często zaprojektowana do tworzenia warstw. Zazwyczaj byłaby to warstwa repozytorium (Dao), warstwa usługi i warstwa kontroli (obsługa sieci). Warstwa Control korzysta z warstwy Service, która z kolei korzysta z warstwy Repository. Często zobaczysz warstwę Control używającą bezpośrednio warstwy Repository. Dość rozpowszechnione są również Usługi korzystające z innych Usług. Dość często wszystkie Usługi dziedziczą z bazowej klasy usług, która będzie zawierać wszystkie odniesienia do wszystkich komponentów Repozytorium. Tak więc moje pytanie brzmi tak naprawdę, jak i dlaczego projektujesz swoją aplikację serwerową (w kategoriach warstw) i jakie zasady do nich stosujesz? Jakie są ogólnie przyjęte uzasadnienia dla tych warstw i tych zasad? Jakie widzisz zasady, które należy uznać za „złą praktykę”? Jakie zasady uważasz za niezbędne? Czy próbowałeś czegoś nowego w tej dziedzinie, co zadziałało?


title: Dokumentacja często pomija określenie, którego smaku wyrażeń regularnych użyć, więc czy istnieje domyślny smak, z którym wszyscy powinniśmy być zaznajomieni?

text: Często spotykam się z dokumentacją, która mówi "użyj wyrażenia regularnego tutaj". Muszę poświęcić trochę czasu na szukanie _jakiego formatu wyrażeń regularnych_ oczekują. O ile wiem, istnieje wiele rodzajów wyrażeń regularnych. Ale w moim ostatnim miejscu pracy poczułem się głupio, gdy zasugerowałem dodanie tekstu do naszej Dokumentacji Użytkownika, aby określić _typ_ wyrażenia regularnego, które ma zostać użyte. Kiedy ktoś mówi "wyrażenie regularne", jakiej składni oczekuje większość ludzi i gdzie jest to udokumentowane? Aktualizacja: Zostałem poproszony o wyróżnienie kilku przykładów - ale bez szacunku dla tych wspaniałych projektów: * Strona eregi docs nie jest szczególnie pomocna w wyjaśnianiu oczekiwanej składni. * Nie mogę też łatwo rozpracować oczekiwanej tutaj składni, jeśli po prostu wyląduję na stronie z wyszukiwania. * Brak wyraźnej wzmianki o wzorcu wyrażenia regularnego oczekiwanego przez metodę `PatternExpectation()` na stronie SimpleTest. * itd. itd. * tutaj jest wysoko oceniana odpowiedź SO, która wydaje się zakładać, że istnieje tylko jeden rodzaj wyrażeń regularnych.


title: Obiektowe struktury danych w aplikacjach opartych na bazach danych

text: Rozpocząłem pracę w firmie, która prowadzi małą/średnią komercyjną stronę internetową. Witryna jest napisana w c# asp.net i używa SQL Server jako bazy danych. Struktura kodu jest w tej chwili bardzo nieuporządkowana (na przykład plik `Utility.cs` ~5000 wierszy), więc chcę iść w kierunku lepszego projektowania po stronie asp.net aplikacji. Próbuję wymyślić właściwy sposób na zrobienie tego. Moim podstawowym planem jest stworzenie klasy dla każdego logicznie odrębnego elementu w aplikacji (głównie mapowanie 1-1 do tabel bazy danych, ale czasami N-1 lub 1-N). Następnie planuję mieć kilka statycznych metod fabrycznych do tworzenia instancji tych klas przez zapytanie bazy danych. Deweloper powinien mieć możliwość manipulowania wynikowym obiektem, a następnie użyć metody `UpdateDatabase()` do zapisania zmian w bazie danych. Na przykład, oto jak działałby obiekt `Email`: public class Email { Guid userId; identyfikator e-mail przewodnika; String emailValueInitial = null; Sting emailValueNew = null; prywatny e-mail(); public static Email RetrieveEmail(Guid UserId, Guid EmailId) { // .. zapytanie return new Email(UserId,EmailId,emailValueInitial); } public String EmailValue { get { if (emailValueNew == null) return emailValueInitial; w przeciwnym razie zwróć emailValueNew; } ustaw { emailValueNew = wartość; } } public bool Update() { // .. uaktualnij bazę danych wartością emailValueNew lub nic nie rób jeśli nie została // zmieniona } } Uwagi: * Mogę aktualizować bazę danych po każdej zmianie pola, ale to oczywiście nieskuteczny. * Nie wiem, co zrobić w przypadku, gdy programista chce wstawić wartość `null` do bazy danych - przypuszczam, że potrzebuję różnych koncepcji dla 'null jako zmienna jeszcze nie używana' vs 'null jako wartość bazy danych null' . Powyższe jest prostym przypadkiem. Potrzebuję też jakiegoś sposobu poznania relacji wiele-jeden w tabelach. Na przykład użytkownik może działać tak: public class User { Guid userId; publiczne e-maile e-maile = nowe e-maile (identyfikator użytkownika); Użytkownik prywatny(); // itd.. public RetrieveUser(); publiczne UtwórzUżytkownika(); aktualizacja publiczna(); } public class Emails { Lista<Email> emails = new Lista<Email>(); identyfikator użytkownika przewodnika; publiczne wiadomości e-mail (identyfikator użytkownika Guid); // itd.. public bool CreateEmail(); // wygodnie jest tworzyć/usuwać stąd public bool DeleteEmail(); // ponieważ mogę wymusić powiedzmy minimum 1 email na użytkownika } * * * Powyższe są moimi pierwszymi przemyśleniami jak rozwiązać ten problem, ale nigdy wcześniej czegoś takiego nie robiłem i nie wiem z jakimi problemami Mogę się natknąć. Chcę stworzyć system, który będzie skalowalny i łatwy do opracowania w miarę zatrudniania większej liczby programistów, więc naprawdę ważne jest, aby początkowy projekt był poprawny. Jakiego rodzaju projektu powinienem użyć w języku obiektowym, aby najlepiej reprezentować i łączyć z bazą danych? Jakie są ważne rzeczy do rozważenia? Czy istnieje literatura na ten temat lub ważne biblioteki/konstrukcje, które zaniedbałem?


title: Jak wyglądają dobrze napisane, czytelne testy?

text: Wykonując testy jednostkowe po raz pierwszy na dużą skalę, piszę wiele powtarzalnych testów jednostkowych dla mojej logiki biznesowej. Jasne, aby stworzyć kompletne zestawy testów, muszę przetestować wszystkie możliwości, ale czytelność wydaje się zagrożona robiąc to, co robię - jak pokazano w poniższym pseudokodzie. **Jak wyglądałby dobrze napisany, czytelny zestaw testowy?** opisz "UserEntity" -> to "prawidłowa nazwa weryfikuje" ... to "nieprawidłowa nazwa nie sprawdza się" ... to "poprawna lista obserwujących waliduje" . .


Jaka jest różnica między strumieniem a kolejką? Oba mają koncepcję uporządkowanego zestawu elementów, ale mają zwykle różne implementacje i różne słownictwo „wstaw”/„wyodrębnij” (strumienie) i „umieszczaj w kolejce”/„usuń kolejkę” (kolejka). Czy są one wymienne? Czy proponują różne koncepcje lub wzorce? Jeśli tak, jakie są różnice?