title: Warunki dla różnych rodzajów zabudowy

text: Próbuję znaleźć właściwą terminologię dla różnych rodzajów tworzenia oprogramowania Obecnie jedynym znanym mi terminem programistycznym jest "tworzenie stron internetowych", ale zajmowałem się również tworzeniem aplikacji w języku Java i C# dla aplikacji desktopowych. Oczywiście nie jest to tworzenie stron internetowych, ale chciałbym móc je pogrupować pod jednym, powszechnie znanym i akceptowanym w branży terminem. Czy określeniem aplikacji na komputery stacjonarne byłoby „programowanie na komputery stacjonarne”?


title: Jak hermetyzować parametry metody w Javie?

text: Zapytanie HTTP można sparametryzować listą par, np. „nazwa=wartość”, którą można ogólnie zawrzeć jako „Map<String, String>”, ponieważ zapytanie HTTP GET to pary ciągów. Mogę potrzebować czegoś do dowolnej kombinacji przedmiotów i prymitywów. Metodę varargs, na przykład `update(String s1...)`, można ogólnie zapisać jako `update(Map<String, String>)`, gdzie kluczem jest nazwa, a wartością dane. Dlatego zastanawiam się, czy nie byłoby dobrze użyć definicji jako `Map<K, V>` zamiast pisać niestandardowy obiekt w tym przypadku zawijając określone 3 parametry do klasy w ich określonych typach, które nie mogą być ponownie użyte, podczas gdy `Map<K, V>` może służyć do enkapsulacji dowolnych 2-krotek, gdy musimy napisać parę taką jak `Integer i` lub `int i` lub `int i=0`. Ale myślę, że będzie to działać tylko dla klas, a nie dla typów pierwotnych, więc typy podstawowe muszą być opakowane w swoich obiektach, więc muszę również umieścić w ramce `int` do `Integer`, aby to działało również z typami pierwotnymi. Czy istnieje lepszy sposób niż `Map<K, V>` na hermetyzację parametrów metody, gdy musimy wybrać listę o nieznanej długości i nieznanych typach, gdzie typy mogą być prymitywami lub obiektami? Czy zamiast szczegółowo określać typy i ich wartości w metodzie, mogę użyć `Map<K, V>` zamiast listy nazwanych par, takich jak `String s, int i, Object o...`


title: Projektowanie programu fenotropowego

text: Niedawno natknąłem się na pomysł przedstawiony przez Jarona Laniera, zwany „programowaniem fenotropowym”. Pomysł polega na użyciu interfejsów „powierzchniowych” zamiast interfejsów jednopunktowych w programach komputerowych wykorzystujących statystyki do wykrywania drobnych błędów, które zwykle powodują katastrofalne awarie „klasycznego” programu. Dwuwierszowy opis jest tutaj: > Według Jarona, „rzeczywista różnica między obecną ideą > oprogramowania, którą jest przestrzeganie protokołu, a ideą, którą omawia, > rozpoznawaniem wzorców, ma związek z rodzajami błędy, które tworzymy” oraz > jeśli „nie znajdziemy innego sposobu myślenia i tworzenia oprogramowania, > nie będziemy pisać programów większych niż około 10 milionów linii kodu > bez względu na szybkość naszych procesorów”. Nieco dłuższe wyjaśnienie znajduje się tutaj. A jeszcze dłuższe wyjaśnienie jest tutaj. Tak więc pytanie, patrząc poza oczywiste skojarzenia z panem robotów, które ludzie zwykle dostrzegają, jak właściwie zaprojektować i napisać „program fenotropowy”?


title: Jaki model tworzenia oprogramowania sprawdził się najlepiej w przypadku zespołów programistycznych w dużym stopniu uzależnionych od zespołów sprzętowych?

text: Istnieje wiele konkurencyjnych najlepszych praktyk dotyczących tworzenia oprogramowania. Z tego, co odkryłem, wiele zespołów skorzystało w niektórych przypadkach z praktyk **Agile**. Jednak w niektórych innych przypadkach korzystanie z **Ujednoliconego procesu** jest stosowane przez duże firmy, takie jak IBM. Wspólne motywy, które uważam, wydawały się dobrze sprawdzać się w zespołach zajmujących się głównie tworzeniem oprogramowania. Chciałbym wiedzieć, co najlepiej sprawdziło się w przypadku osób, które pracowały w sklepach, w których po drugiej stronie znajduje się zespół produkujący sprzęt, na którym działa Twoje oprogramowanie. Na przykład jeden zespół składa skrzynię z kilkoma niestandardowymi urządzeniami; podczas gdy musisz opracować oprogramowanie, które będzie działać na tych skrzyniach. Nie mogę znaleźć modelu rozwoju (agile, spirala...), który najlepiej sprawdzi się w tym przypadku. Każda mądrość w tym obszarze zostanie doceniona.


title: Czy nadużywanie niestandardowych taglib może zakłócić outsourcing projektantów html?

text: Wczoraj rozmawialiśmy z przyjacielem o nadużywaniu niestandardowych taglibów. Tworzymy taglib do wszystkiego. Tworzymy taglib w celu owijania elementów UI jQuery (zakładki, przycisk itp.) oraz innych elementów wtyczek. Często łączymy je razem w jeden komponent. Używamy taglibs w miejscu, w którym prawie nie mamy czystego kodu html w tagu body. Nasze pytanie brzmi: **czy to zdrowy nawyk?** Wyobraźmy sobie dwie sytuacje: 1) Zatrudniamy projektanta html i mamy miesięczny koszt, żeby się tego wszystkiego nauczył. 2) Chcemy zlecić tworzenie html na zewnątrz, ale żadna firma nie namówiłaby naszej biblioteki taglib do nauki LUB stałaby się droższa. Uwielbiamy taglibs, ponieważ jest to piękny skrót do programowania w javascript, ponieważ piszemy go tylko raz. Jakie byłyby najlepsze praktyki w tym sensie i co byś zaproponował? Szukamy przyszłościowego rozwiązania (lub argumentu, który zgadza się z naszym).


title: Które części Code Complete nie przetrwały próby czasu?

text: Patrzyłem na Code Complete na półce, myśląc: „Poza Miesiącem Mitycznego Człowieka, to może być jedna z niewielu książek o inżynierii oprogramowania na rynku masowym, które wytrzymają próbę czasu”. Z tego powodu myślę o wskoczeniu do tego ponownie. Jestem ciekawa - czy ktoś jeszcze ostatnio spojrzał na to po raz drugi? Widziałeś coś, co bardzo się mylił? To nie jest atak, ani prośba o recenzję książki – bardziej interesuje mnie, które pomysły zmieniły się na przestrzeni lat. I proszę - bez komentarza na temat: "Demarco/Spewak/Zachman przetrwał próbę czasu..." Jestem szczególnie zainteresowany Code Complete ze względu na rozległość terenu, który obejmuje, i wpływ, jaki miał w terenie.


title: Gdzie mogę znaleźć proste, ale dobrze napisane programy do nauki?

text: Kilka razy próbowałem zajrzeć do kodu źródłowego różnych rzeczy z github lub innych witryn, w javascript, C#, PHP itp. Jednak nigdy nie jestem w stanie zrozumieć programów jako całości. Potrafię poskładać, co robi konkretny fragment kodu, ale szybko tracę kontekst tego, na co patrzę i jak to pasuje. Chcę być w stanie poprawić, ale wszystko, czego próbowałem się uczyć, tak do tej pory był zbyt duży. Gdzie mogę znaleźć dobrze napisany, ale niezbyt skomplikowany kod źródłowy do obejrzenia? edit: Przepraszam, żeby być bardziej szczegółowym, mam nadzieję na javascript/php/C#.


title: Testowanie wielowątkowych warunków wyścigowych

text: Czytanie komentarzy do tej odpowiedzi, a konkretnie: > To, że nie możesz napisać testu, nie oznacza, że nie jest zepsuty. Niezdefiniowane > zachowanie, które zwykle działa zgodnie z oczekiwaniami (C i C++ są pełne > tego), wyścigi, potencjalna zmiana kolejności z powodu słabego modelu pamięci... – > **_CodesInChaos** 7 godzin temu_ > @CodesInChaos jeśli tak nie można odtworzyć, to kod napisany jako „napraw” również nie może > zostać przetestowany. A wprowadzenie nieprzetestowanego kodu do życia jest moim > zdaniem gorszym przestępstwem – **_RhysW** 5 godzin temu_ … zastanawiam się, czy są jakieś dobre ogólne sposoby na konsekwentne wywoływanie bardzo rzadko występujących w produkcji problemów spowodowanych warunkami rasowymi w przypadek testowy.


title: Ustal/dotrzymuj terminów, gdy stale pracuję z nieznanymi platformami i frameworkami

text: Pracuję dla organizacji zajmującej się rozwojem produktu, która zajmuje się reklamą online. Zlecenia, które otrzymuję, są prawie zawsze na platformach lub narzędziach, nad którymi nigdy wcześniej nie pracowałem. Na początku był to android. Potem node.js, potem windows phone, potem pakiety Debiana, potem python, hadoop, ganglia, inżynieria wsteczna, geo PostgreSQL i lista jest długa. Cieszę się, że mogę się tak wiele nauczyć podczas pracy. Problemem, na który ciągle natrafiam, jest dotrzymywanie terminów. Często nie jest jasne, co należy zrobić, aby wykonać określone zadanie. Musiałbym skonfigurować odpowiedni pakiet SDK, napotkać początkowe problemy, przeczytać online, przejrzeć dokumentację, poszukać online dla każdego elementu pracy na tej platformie. Czasami dostaję terminy, czasami je ustalam. Bardzo trudno mi często dotrzymywać terminów. Szybciej robi się coś za drugim razem, ale nigdy nie pracuję nad jakimś językiem lub frameworkiem dłużej niż tydzień lub dwa. A to jest bardzo stresujące i bolesne. Dostaję całą krytykę i publiczne zawstydzanie związane z niedotrzymaniem terminów. Podejrzewam, że to nie może być normalne. Nie można dostarczyć 7 aplikacji dla systemu Windows na telefon, które nie wiedzą nic o c# w ciągu tygodnia. Ale udało mi się to zrobić dzień po terminie. Wiele razy mam tylko wyszukiwarkę Google, która mnie prowadzi. Często brakuje dokumentacji dotyczącej dostosowywanego przeze mnie narzędzia. Czasami utknę w czymś, czasami godzinami, a nawet dniami. To odbija się na moim zdrowiu i nie jestem już w stanie spalić oleju o północy przy każdym zadaniu. Powoduje to wiele udręki psychicznej i depresji. Czy w tej sytuacji mam rację, myśląc, że podany przeze mnie termin jest strzałem w ciemno? Czy to normalne? Czy każdy element Twojej pracy wymaga za każdym razem uczenia się czegoś zupełnie nowego? Nie jestem pewien, czy mogę powiedzieć, że jestem słabym wykonawcą, ponieważ nie jestem w stanie dotrzymać terminów zadań związanych z narzędziem, o którym nic nie wiem. Jak sobie z tym poradzić?


title: Skąd jest generowany klucz DES?

text: Idąc na wykład o DES, dostałem większość z wyjątkiem SKĄD POCHODZI KLUCZ DES? Czy władza daje ci klucz, czy co? Prosty język proszę


title: Przetwarzanie szablonów w stylu brzytwy

text: Chcę zbudować aparat szablonów (ITT nie inny aparat szablonów...) na podstawie Razor. Zajmuję się tym od dłuższego czasu, nigdzie się nie dostaję i szczerze mówiąc, jestem na swoim limicie. Próbowałem toczyć swoją własną, próbowałem generować za pomocą ANTLR i myślę, że po prostu potrzebuję kogoś, kto mi powie, czy muszę ugryźć kulę i zrobić to w trudny sposób. Szczerze mówiąc, starałem się to zrobić tak prosto, jak to tylko możliwe. „@” oznacza początek specjalnego oświadczenia. Instrukcja może być: * identyfikatorem zmiennej * identyfikatorem wywołania funkcji. Rodzice muszą być zrównoważeni i radzić sobie ze sznurkami. * początek jednej z konstrukcji logicznych Javy (if, for, while/do) * jednowierszowa instrukcja, która daje wartość wyjściową @( ) * wielowierszowy blok instrukcji @{ } Część, która mnie zabija: wszystko wewnątrz {} jest traktowany jako kod CHYBA ŻE: * jest poprzedzony znakiem @:. Linia jest traktowana jako tekst * znaleziono znacznik html. Wszystko od tego momentu jest traktowane jako tekst Więc teraz mamy problemy, ponieważ token „<” ma teraz kontekst. Może to być LT lub początek tagu HTML. Nie pomaga również to, że znacznik może mieć również atrybuty, a każdy atrybut może również zawierać w sobie specjalne instrukcje. Następnie muszę również zrównoważyć nawiasy i cytaty. Istnieje również dodatkowa złożoność braku kończących strażników (w przeciwieństwie do php, który ma tagi). Wydaje się niemożliwe, aby przeanalizować je jako naprzemienne tokeny CODE - RAW - CODE - RAW, więc efektem końcowym jest po prostu połączenie fragmentów tokenów w klasę Java i pozwolenie kompilatorowi Java na obsługę składni. Mam właśnie zamiar podwoić i ponownie zaimplementować gramatykę Javy i przeanalizować wszystko. Coś, do czego nie mam ochoty... :( W każdym razie daj mi znać, czy jest jakiś prostszy sposób na podejście do tego lub jak byś spróbował wykonać to ćwiczenie. Pozdrawiam, Daryl


title: Czy są jakieś ankiety na temat tego, w jakim stopniu programiści lubią lub nienawidzą scrum?

text: Tło: Podczas konferencji analityk wskazał w tweecie, że programiści nienawidzą scrum. Ja i inna osoba odpowiedzieliśmy, że tak nie jest i zaczęliśmy omawiać różne scenariusze, dlaczego programiści nie lubią scrum. Jeden ze scenariuszy, w których leniwi programiści nie są w stanie ukryć się w projekcie scrum. Zespół nieustannie wzywa ich do wniesienia wkładu. Ta dyskusja zaowocowała wpisem na blogu i filmem http://elsewhat.com/2010/05/20/lazy-developers-hate-agile-and%C2%A0scrum/ Otrzymałem trzy komentarze, na które próbowałem odpowiedzieć w neutralny sposób, ale komentarze wskazują, że są ludzie, którzy nie znoszą scrum (i zawsze jestem na 100% pewien, że nie są leniwymi programistami). **Pytanie** **Czy kiedykolwiek przeprowadzono ankietę wśród programistów na temat stopnia, w jakim programiści lubią lub nienawidzą scrum?**


title: Projekt aplikacji czatu na iOS, wysyłanie/przekazywanie wiadomości do użytkownika końcowego

text: Mam pytanie projektowe. Powiedzmy, że masz za zadanie zbudować aplikację do czatu, specjalnie dla iOS (aplikacja czatu iOS). Dla uproszczenia powiedzmy, że możesz rozmawiać tylko z jedną osobą naraz (brak funkcji czatu grupowego). Jak zatem można osiągnąć wysłanie wiadomości bezpośrednio do użytkownika końcowego z telefonu A na telefon B? Oczywiście istnieje warstwa usług internetowych z niektórymi wywołaniami API. Jednym z dostępnych wywołań API będzie `startChat()`. Po rozpoczęciu czatu, kiedy wysyłasz wiadomość, wykonujesz kolejne wywołanie asynchroniczne, nazwijmy je `sendMessage()` i przekażmy ciąg znaków wraz z wiadomością. Gdy trafi do warstwy usług internetowych, wiadomość zostaje zapisana w bazie danych. Tu właśnie utknąłem. Po wysłaniu wiadomości do warstwy usług internetowych, w jaki sposób możemy następnie wysłać/przekazać wiadomość do użytkownika końcowego? Czy serwer WWW powinien wysłać wiadomość do użytkownika końcowego i powiadomić go, czy każdy klient powinien okresowo wywoływać metodę `receiveMessage()`, a jeśli strona serwera ma dla nich jakieś informacje, może następnie odpowiedzieć tymi informacjami? Wreszcie, jak możemy poradzić sobie z przypadkiem, w którym użytkownik, do którego próbujesz wysłać wiadomość, jest offline? Jak możemy upewnić się, że użytkownik końcowy otrzyma pakiet, gdy wróci do obszaru z sygnałem?


title: Kiedy potrzebna jest warstwa Case Case?

text: W swoim poście na blogu The Clean Architecture Uncle Bob sugeruje architekturę 4-warstwową. Rozumiem separację między regułami biznesowymi, interfejsami i infrastrukturą, ale zastanawiam się, czy/kiedy konieczne jest posiadanie oddzielnych warstw dla obiektów domeny i przypadków użycia. Jaką wartość dodaną przyniesie w porównaniu z przypadkami użycia jako „usługami domenowymi” w warstwie domeny? Jedyną przydatną informacją o warstwie przypadków użycia, jaką znalazłem w sieci, jest artykuł Martina Fowlera, który wydaje się przeczyć wujkowi Bobowi co do jego konieczności: > W pewnym momencie mogę napotkać problemy, a potem zrobię a Use Case > Controller - ale tylko wtedy. A nawet kiedy to robię, rzadko uważam, aby > Use Case Controllers zajmowały osobną warstwę w architekturze systemu. Edycja: Natknąłem się na wideo przedstawiające przemówienie Uncle Bob's Architecture: The Lost Years, w którym szczegółowo wyjaśnia tę architekturę. Bardzo informujące.


title: Dlaczego nie ma klienta Git dla Androida?

text: Ponieważ istnieje czysta implementacja podstawowych funkcji Git w języku Java o nazwie JGit, która ma również kilku wymagających użytkowników (Gerrit), nie mogę przestać się zastanawiać: dlaczego ktoś jeszcze nie zaimplementował podstawowego klienta Git dla Androida? Czy ktoś zna jakiś powód, który by to uniemożliwił (poza czasem)?


title: Czy powinniśmy przyjąć zwinną metodologię podczas przepisywania istniejącej aplikacji od podstaw?

text: Pracuję dla małej firmy produktowej. Za chwilę przepiszemy nasz istniejący produkt od podstaw. Planujemy zaadaptować metodykę Agile do naszego rozwoju. Teraz moje pytanie brzmi, ponieważ mamy wszystkie wymagania jeszcze przed rozpoczęciem projektu (ponieważ przepisujemy istniejący produkt), czy warto zanurzyć się w świecie Agile? Czy zwinne nie jest bardziej przydatne, gdy nie masz wszystkich wymagań z góry i otrzymujesz je etapami? Po drugie, powiedzmy, że jeśli przejdziemy do Agile, jaka jest najlepsza praktyka projektowania bazy danych? Powiedzmy, że w naszej pierwszej iteracji po prostu tworzymy system logowania (użytkownik może się zalogować, wylogować itp.). Czy wystarczy stworzyć tabelę Users, nie martwiąc się o inne tabele? A inne stoły ewoluowałyby wraz z rozwojem naszego produktu?


title: Jak znaleźć wykwalifikowanego projektanta stron internetowych w mojej okolicy?

text: Właśnie wysłałem e-maile do pięciu lokalnych firm zajmujących się projektowaniem stron internetowych w mojej okolicy z prośbą o przeniesienie rysunków do HTML/CSS/jQuery. Żaden z tych, którzy zaakceptowali umowę, nie wydaje mi się odpowiedni. Inni odrzucili ofertę, ponieważ chcieli „zapewnić kompleksowe rozwiązanie” lub „zarezerwowali do czerwca”. Lokalne firmy nie wydawały mi się odpowiednie, ponieważ mój proces recenzji jest następujący: wejdź na ich stronę internetową, zrób podgląd źródła. Zobaczę naprawdę dziwne rzeczy (skontaktuj się z nami formularze, które nigdzie się nie udają), naprawdę stare rzeczy (mm_menu.js) i portfele, które nie istnieją (nie ma ich na stronie, nigdzie nie linkują lub w inny sposób). Firma wolałaby zatrudniać pracowników tak lokalnie, jak to tylko możliwe, a nie zlecać do innego kraju. **Odpowiedzi, których szukam** * Procesy, których używasz, szukając kogoś * Jak kwalifikujesz jego predyspozycje do projektu * Cokolwiek, o czym myślisz, że robię źle lub też powinienem robić. **Odpowiedzi, których nie szukam:** 1. "Witam proszę o kontakt robimy wszystko za 10 dol." 2. Mój kumpel jest w tym świetny, zadzwoń do niego. 3. example.com jest do tego najlepsza.


title: Czy mootools jest alternatywą dla jquery + backbone / spine / sprouteCore?

text: Byłem pełnoetatowym programistą java, teraz pracuję również z JavaScriptem i Androidem. Kilka lat temu, kiedy zacząłem uczyć się JavaScript, pierwszą biblioteką, którą wypróbowałem, była jQuery. Ale to utrudniło mi życie i po pewnym czasie zacząłem pisać dość dużą aplikację JavaScript. Nie łączyło się to dla mnie przy użyciu jQuery. Miałem ogromną bazę kodu bez większej struktury. Bloki metod aktualizujące bloki HTML za pomocą selektorów. Potem wypróbowałem MooTools i oczywiście jako programista Java bardzo mi się spodobał. Udało mi się też pisać zarządzalne aplikacje internetowe, które mają ogromną bazę kodu. Zgodnie z moim rozumieniem MooTools nie jest uważany za preferowany sposób pisania JavaScript, ponieważ naśladuje konwencjonalne OO w stosunku do domyślnego języka OO opartego na prototypach. Więc teraz, aby naprawdę zrozumieć JavaScript i chęć chodzenia ze światem, postanowiłem spróbować innych podejść, więc ponownie wróciłem do jQuery i zdałem sobie sprawę, że tylko jQuery nie wystarczy. Zacząłem więc przyglądać się obecnie popularnym frameworkom, takim jak backbone, spine, ember.js, sprouteCore. Co dziwne, odkryłem, że te frameworki naśladują konwencjonalne OO, takie jak MooTools, tylko poprzez posiadanie konstruktorów i tworzenie obiektu klasy oraz ponowne użycie tego obiektu klasy do tworzenia obiektów instancji. Więc * Czy czegoś mi brakuje? * Czy MooTools naprawdę się myli? * Projekt MooTools jest bardzo żywy i wypuszcza nowe wersje/funkcje, ale nie widzę wielu ludzi rozmawiających o tym w Internecie, nie ma też porównań z kręgosłupem/kręgosłupem itp.


title: Przygotowanie do rozmowy kwalifikacyjnej nieco wykracza poza moje umiejętności

text: Posiadam 4 letnie doświadczenie w tworzeniu stron internetowych, czyli: PHP, javascript, Mysql, HTML, CSS, zwykłe. Wkrótce mam rozmowę kwalifikacyjną na stanowisko obejmujące c#, wpf i inne języki programowania desktopowego. Jest to stanowisko juniora, które postrzegam jako: ktoś chętny do nauki, junior bez wiedzy i szybko uczący się. Mam bardzo ograniczone doświadczenie w c# i wpf, ale brak znajomości niektórych innych wymagań. W początkowej rundzie wywiadów, które przeprowadzono za pomocą wideo, więc nie twarzą w twarz, byłam szczera, powiedziałam im, że chcę się uczyć, ale mam ograniczone i nie mam doświadczenia w tym, co oferują, ale mam umiejętności, które można przenosić. Zaskakująco dla mnie zaoferowali rozmowę twarzą w twarz, biorąc pod uwagę, jak szczery byłem, że nie spełniłem wielu pożądanych wymagań. Co skłoniłoby ich do zaoferowania mi wywiadu twarzą w twarz? Jak mam podejść do tego wywiadu bez powtarzania i błagania, będąc szczerym, ale pewnym siebie?


title: Czy w przypadku małych projektów wymagane jest środowisko programistyczne?

text: Wygrałem ofertę na Elance i otrzymałem prośbę o naprawienie niektórych problemów z CSS i HTML w witrynie WordPress. Jak wprowadzać zmiany w dokumencie bez pracy w aktywnej witrynie? Czy tworzysz środowisko programistyczne dla każdej pracy, którą otrzymujesz? Byłoby to czasochłonne w przypadku pracy, która bardzo mało płaci. Zaoferowano mi dostęp do wp-admin i cpanel, ale wszelkie zmiany natychmiast wpłyną na działającą witrynę. Jaka jest najlepsza praktyka zmiany i aktualizacji witryn dla klientów? Pomocne są wszelkie porady dotyczące programowania w witrynie, na której nie masz pełnej instalacji.


title: Rekrutacja programistów – wyjście poza kod

text: Rekrutuję programistów. Pierwszym krokiem jest przeprowadzenie testu, aby wyciąć „otwarcie”, ale czy podejmę decyzję tylko na podstawie tego, że kandydaci na krótkiej liście są najlepsi na świecie w kodowaniu? Na co powinienem zwrócić uwagę, aby zagwarantować, że osoby, które ostatecznie zatrudniam, są nie tylko najlepszymi programistami, ale także najlepiej pasują do mojej firmy. Co dokładnie powinny mierzyć testy?


title: Powody techniczne, aby preferować kodowanie logiki biznesowej do obsługi Unicode (jeśli nie jest to wymagane)

text: Mam starszą aplikację, w której interfejs użytkownika i logika biznesowa są już dość dobrze oddzielone. Pojawia się propozycja, aby je jeszcze bardziej rozdzielić, zamieniając rdzeń aplikacji w „usługę” (bez UI) i napisać w jej ramach coś w rodzaju „serwera UI” do którego będą różne UI (potencjalnie w różnych językach i dla różnych różnych urządzenia i operatorzy) mogą łączyć się, aby uzyskać/ustawić dane w celu obsługi aplikacji za pośrednictwem tych interfejsów użytkownika. Na pozór wydaje się to stanowić dobre rozdzielenie między logiką biznesową, która obecnie jest całkowicie nieświadoma możliwości Unicode, a interfejsem użytkownika, który będzie musiał bardzo dobrze zapoznać się z Unicode, aby obsługiwać wiele języków w interfejsie użytkownika ( s). Teraz ta aplikacja zasadniczo monitoruje proces produkcyjny i ma bardzo mały (jeśli w ogóle) ruch bezpośrednio z interfejsu użytkownika do bazy danych za pośrednictwem warstwy biznesowej. Uderza mnie, że „językiem naturalnym” tego procesu może być chemia lub matematyka, więc wewnętrznie powinienem trzymać się języka, który najlepiej to opisuje, o ile mogę przetłumaczyć z tego języka na wszystko, czego wymaga interfejs użytkownika (co Uważam, że powinno być to możliwe). To prowadzi mnie do preferowania (prostoty i znajomości oraz najmniejszej ścieżki pracy) zachowania staromodnych 8-bitowych znaków nad przejściem do Unicode. Czy istnieją jakieś techniczne powody, aby odrzucić utrzymywanie logiki biznesowej w aplikacji, która nie zna Unicode w ten sposób? I nawet jeśli „językiem naturalnym” systemu byłby „angielski-bez-zbyt wielu-stringów-lub-dat” zamiast chemii, czy to miałoby znaczenie?


title: Jak powszechne jest prototypowanie jako pierwszy etap rozwoju?

text: W ciągu ostatnich kilku semestrów brałem udział w kursach projektowania oprogramowania i chociaż widzę korzyści w wielu formalizmach, czuję, że nie mówi mi to nic o samym programie: * Nie możesz powiedzieć, jak program będzie działał na podstawie specyfikacji Przypadku Użycia, mimo że omawia, co program może zrobić. * Z dokumentu wymagań nie można nic powiedzieć o wrażeniach użytkownika, mimo że może on zawierać wymagania dotyczące jakości. * Diagramy sekwencji są dobrym opisem tego, jak oprogramowanie działa jako stos wywołań, ale są bardzo ograniczone i dają bardzo częściowy obraz całego systemu. * Diagramy klas świetnie nadają się do opisywania, jak zbudowany jest system, ale są całkowicie bezużyteczne, jeśli chodzi o pomoc w ustaleniu, jakie oprogramowanie musi być. Gdzie w całym tym formalizmie jest sedno: jak program wygląda, działa i jakie daje doświadczenie? Czy nie jest bardziej sensowne projektowanie na tej podstawie? Czy nie lepiej wymyślić, jak program powinien działać za pomocą prototypu i dążyć do jego rzeczywistego wdrożenia? Wiem, że prawdopodobnie cierpię z powodu uczenia się inżynierii przez teoretyków, ale muszę zapytać, czy robią to w branży? Jak ludzie dowiadują się, czym właściwie jest program, a nie do czego powinien być dostosowany? Czy ludzie dużo prototypują, czy też używają głównie formalnych narzędzi, takich jak UML, a ja po prostu jeszcze nie nauczyłem się ich używać?


title: Czy jest sposób na napisanie tej fałdy ładniej w Haskell?

text: Mam następującą małą funkcję, która używa foldr do znalezienia największej drugiej liczby krotki 2-: listMax :: [(Int,Int)] -> Int listMax = snd . foldr (\(_,freq1) (_,freq2) -> (0,max freq1 freq2)) (0,0) Moje pytanie dotyczy ciała lambdy: (0,max freq1 freq2) Musiałem to zrobić w krotkę z fikcyjną głową, tak aby pasowała do własnych danych wejściowych do złożenia. Dla mnie jednak wygląda to brzydko i utrudnia czytanie. Czy jest to standardowy sposób radzenia sobie z tą sytuacją, czy istnieje jakiś idiomatyczny sposób obejścia tego?


title: Czy uzasadnione jest proszenie współpracowników o korzystanie z określonej przeglądarki w witrynie intranetowej?

text: Dla moich współpracowników opracowałem intranetowy (sieć lokalną) projekt internetowy `ASP.NET`. W procesie rozwoju używałem `Chrome` i `Firefox` i niewiele testowałem z `Internet Explorer`em. Strona działa dobrze z `Firefox` i `Chrome`, az `IE` miała poważne błędy. **Czy uzasadnione jest proszenie użytkowników o używanie `Chrome` lub `Firefox`?** Wszyscy są współpracownikami (około 15 użytkowników). Nie chcę tracić czasu na naprawianie błędów dla `IE`, niektóre mogą być związane z rzeczami, których sam nie mogę naprawić (rzeczy `jQuery`), gdybym chciał być kompatybilny ze wszystkimi przeglądarkami, musiałbym zrobić gruntowne przeprojektowanie,


title: Kiedy powinienem dbać o wydajność?

text: Przez najdłuższy czas w miejscach takich jak kanał IRC Javy, SO i innych mówiono mi coś w stylu „Martwisz się o wygląd kodu i jego czytelność/zrozumiałość teraz, a później o wydajność, jeśli będzie to absolutnie konieczne”. Tak więc przez najdłuższy czas tak naprawdę nie byłem OCD w kwestii wydajności moich małych aplikacji komputerowych lub internetowych, po prostu usuwając oczywiście nieefektywne. Większość odpowiedzi to „A co ze skalowalnością?”. To słuszny punkt, ale jeśli moja aplikacja została stworzona do analizowania, powiedzmy, plików o długości 10 000 wierszy, czy powinienem zrobić bałagan dla małego odsetka ludzi, którzy zamierzają włożyć plik o długości 1 000 000 wierszy? Moje główne pytanie brzmi: kiedy powinienem zamienić proste, ale nieco nieefektywne sposoby wykonywania zadań na wielkie, gigantyczne, skomplikowane bestie, które robią rzeczy niezwykle szybko, ale niszczą wszelkie możliwe sposoby aktualizacji i czynią kod nadmiernie trudnym i podatnym na przepisywanie przez następnego programistę?


title: Zmiana sygnatury metody implementacji klas w PHP

text: Czy jest jakiś przyzwoity sposób na obejście braku Generic w PHP, które umożliwiają inspekcję kodu statycznego w celu wykrycia spójności typów? Mam klasę abstrakcyjną, którą chcę podklasy, a także wymusić, aby jedna z metod zmieniła się z przyjmowania parametru jednego typu na przyjmowanie parametru, który jest podklasą tego parametru. klasa abstrakcyjna AbstractProcessor { funkcja abstrakcyjna processItem(Item $item); } class WoodProcessor extends AbstractProcessor { function processItem(WoodItem $item){} } Nie jest to dozwolone w PHP, ponieważ zmienia sygnaturę metod, co jest niedozwolone. Z generykami w stylu Java możesz zrobić coś takiego: abstract class AbstractProcessor<T> { abstract function processItem(T $item); } class WoodProcessor extends AbstractProcessor<WoodItem> { function processItem(WoodItem $item); } Ale oczywiście PHP ich nie obsługuje. Google dla tego problemu, ludzie sugerują użycie instanceof do sprawdzania błędów w czasie wykonywania, np. class WoodProcessor extends AbstractProcessor { function processItem(Item $item){ if (!($item instanceof WoodItem)) { throw new \InvalidArgumentException("element klasy ".get_class($item)." nie jest WoodItem"); } } } Ale to działa tylko w czasie wykonywania, nie pozwala na sprawdzenie kodu pod kątem błędów za pomocą analizy statycznej - więc czy jest jakiś sensowny sposób obsługi tego w PHP? Bardziej kompletnym przykładem problemu jest: class StoneItem extends Item{} class WoodItem extends Item{} class WoodProcessedItem extends ProcessedItem { function __construct(WoodItem $woodItem){} } class StoneProcessedItem extends ProcessedItem{ function __construct(StoneItem $stoneItem){} } abstract class AbstractProcessor { /** * @return ProcessedItem */ funkcja abstrakcyjna processItem(Item $item); function processAndBoxItem(Box $box, Item $item) { $processedItem = $this->processItem($item); $box->insertItem($item); } //Wiele innych funkcji, które mogą wywołać processItem } class WoodProcessor extends AbstractProcessor { function processItem(Item $item) { return new ProcessedWoodItem($item); //Wystąpił błąd inspekcji } } class StoneProcessor extends AbstractProcessor { function processItem(Item $item) { return new ProcessedStoneItem($item);//Wystąpił błąd inspekcji } } Ponieważ przekazuję tylko `Item` do `new ProcessedWoodItem($item)` i oczekuje jako parametru WoodItem, inspekcja kodu sugeruje, że wystąpił błąd.


title: Czy jestem wolny, czy to normalne?

text: Obecnie jestem w liceum i odkryłem programowanie 3 lata temu, ale nadal nie jestem „dobry” i czasami trudno mi to zrozumieć, szczególnie jeśli chodzi o struktury danych, bajty itp. Ponadto, kiedy programuję, najbardziej marnuję mojego czasu nie tworzenie, ale wyszukiwanie błędów składniowych, przecinków i wszystkich tych rzeczy. Jestem bardzo powolny. Chciałbym być ekspertem w programowaniu, ale czuję, że jestem zbyt „głupi”, aby rzucić te trudności. Jednocześnie pasjonuje mnie technologia, komputery i kodowanie... Więc czy to normalne, że jestem powolny, ponieważ jestem nawet 3 lata po odkryciu rozwoju, czy po prostu nie jestem do tego stworzony? Czy ktoś doświadczył tych samych uczuć? Czy byłoby lepiej z college'em?


title: Jak pracować nad moimi osobistymi pomysłami w weekend?

text: Pracuję na pełny etat 5 dni w tygodniu, przeważnie od 10 do 14 godzin dziennie. Pod koniec dnia jestem bardzo zmęczona i chcę tylko wziąć prysznic, posiedzieć i iść spać. Mam wiele pomysłów, które chcę wdrożyć i być może kiedyś sprzedam za pośrednictwem internetowego biznesu oprogramowania. Mam wolne weekendy. Jednak kiedy przyjeżdżam do weekendu, nie wyobrażam sobie nawet, jak włączam komputer. Ale naprawdę chcę urzeczywistniać moje pomysły i nie mogę teraz rzucić pracy, aby poświęcić się tylko swoim pomysłom. Co mówisz? Czy uważasz, że jakaś metoda jest pomocna? Używasz jakiejś techniki? Dziękuję


title: Występowanie ról programisty „zaplecza” w projektach ASP.NET (MVC)?

text: Po pierwsze, chyba że ktoś ma lepsze definicje, zdefiniujmy „backend” i „frontend” zgodnie z ich użyciem tutaj: Czy często rozdziela się back-end i front-end na dwie pozycje w projektach webowych?. Jak często zdarza się, że programiści są przypisani wyłącznie do ról zaplecza lub frontonu w zespole? Jaki jest zakres ich obowiązków?


title: Więcej czasu spędzamy na wdrażaniu testów funkcjonalnych niż na wdrażaniu samego systemu, czy to normalne?

text: Zasadniczo mamy trzy główne projekty, dwa z nich to usługi sieciowe, a drugi to aplikacja internetowa. Chociaż jestem zadowolony z objęcia jak najwięcej naszych usług internetowych testami funkcjonalnymi (wszystkie trzy projekty mają swoje odpowiednie testy jednostkowe), testy funkcjonalne aplikacji internetowych zabierają dużo czasu programistom, aby zostały zaimplementowane (i przez dużo mam na myśli dwa razy, a czasem więcej, czas potrzebny na wdrożenie testowanej funkcjonalności wraz z testami jednostkowymi . Zgadzam się z testowaniem wszystkich funkcjonalności usług sieciowych, ponieważ trudno jest je ręcznie przetestować, a ponadto testy te przebiegają szybko i nie wymagają zbyt wiele do wdrożenia. Więc jaka jest wartość spędzania więcej czasu na pisaniu testów funkcjonalnych, niż na pisaniu kodu systemowego, testach jednostkowych i naprawianiu biletów QA? Czy to normalne? czy nie powinniśmy pisać testów funkcjonalnych tylko dla krytycznej funkcjonalności i pozwolić QA na wykonywanie testów regresji nad brakiem krytycznej funkcjonalności? Uwaga: nie tworzymy oprogramowania medycznego ani oprogramowania NASA ani niczego tak krytycznego. Note2: przepraszam za zły angielski!


title: Licencja Apache i patenty

text: Próbuję zrozumieć, jak licencja Apache wpływa na patenty. W odniesieniu do strony internetowej Apache http://www.apache.org/licenses/LICENSE-2.0 sekcja 3, czy mam rację, jeśli chodzi o pierwszą część, która mówi, że licencjobiorca może zrobić prawie wszystko z patentem? Czy w drugiej części mówi się, że jeśli licencjodawca zdecyduje się pozwać kogoś, kto narusza jego patent, straci wszystkie patenty, czy też mówi o licencjobiorcy? Nie jestem prawnikiem i to wszystko jest bardzo mylące =(


title: Powody usunięcia typów funkcji w Javie 8

text: Próbowałem zrozumieć, dlaczego grupa JDK 8 Lambda Expert Group (EG) zdecydowała się nie włączać nowego typu funkcji do języka programowania Java. Przeglądając listę mailingową znalazłem wątek z dyskusją na temat usuwania typów funkcji. Wiele stwierdzeń jest dla mnie niejednoznacznych, być może z powodu braku kontekstu, aw niektórych przypadkach z powodu mojej ograniczonej wiedzy na temat implementacji systemów typów. Jest jednak kilka pytań, które, jak sądzę, mogę bezpiecznie sformułować na tej stronie, aby lepiej zrozumieć, co mają na myśli. Wiem, że mógłbym zadać pytania na liście mailingowej, ale wątek jest stary i wszystkie decyzje są już podjęte, więc są szanse, że zostanę zignorowany, przede wszystkim widząc, że ci faceci już się opóźniają ze swoimi planami. W swojej odpowiedzi na poparcie usuwania typów funkcji i popieranie używania typów SAM, Brian Goetz mówi: > Brak reifikacji. Był długi wątek o tym, jak przydatne byłoby reifikowanie typów funkcji >. Bez reifikacji typy funkcji są > skrępowane. Nie mogłem znaleźć wątku, o którym wspomina. Teraz rozumiem, że wprowadzenie strukturalnego typu funkcji może sugerować pewne komplikacje w Javie, głównie nominalnym systemie typów, czego nie mogę zrozumieć, to jak sparametryzowane typy SAM różnią się pod względem reifikacji. Czy oboje nie podlegają tym samym problemom reifikacyjnym? Czy ktoś rozumie, czym typy funkcji różnią się od sparametryzowanych typów SAM pod względem reifikacji? W innym komentarzu Goetz mówi: > Istnieją dwa podstawowe podejścia do typowania: nominalne i strukturalne. Tożsamość > nominału opiera się na jego nazwie; tożsamość typu strukturalnego > opiera się na tym, z czego się on składa (np. „krotka int, int” lub > „funkcja od int do float”). Większość języków wybiera głównie nominalny lub głównie > strukturalny; nie ma wielu języków, które z powodzeniem łączą typowanie nominalne i strukturalne, z wyjątkiem „na krawędzi”. Java jest prawie w całości > nominalna (z kilkoma wyjątkami: tablice są typem strukturalnym, ale na dole > zawsze znajduje się nominalny typ elementu; generyczne mają również mieszankę > nominalnego i strukturalnego, co w rzeczywistości jest częścią źródło wielu skarg > ludzi na generyki. Wszczepienie strukturalnego systemu typów > (typów funkcyjnych) do nominalnego systemu typów Javy oznacza nową złożoność i > przypadki brzegowe. Czy korzyści z typów funkcji są tego warte? Ci z Państwa z doświadczeniem we wdrażaniu systemów typu. Czy znasz jakieś przykłady tych zawiłości lub skrajnych przypadków, o których tutaj wspomina? Szczerze mówiąc, te zarzuty mylą mnie, gdy uważam, że język programowania, taki jak Scala, który jest całkowicie oparty na JVM, obsługuje typy strukturalne, takie jak funkcje i krotki, nawet z problemami z reifikacją podstawowej platformy. Nie zrozum mnie źle, nie mówię, że typ funkcji powinien być lepszy niż typy SAM. Chcę tylko zrozumieć, dlaczego podjęli tę decyzję.


title: Używanie typu danych xml do przechowywania „koszyka na zakupy”

text: Do mojego końcowego projektu w szkole musimy stworzyć sklep internetowy. Ten sklep powinien mieć koszyk, w którym można umieszczać przedmioty bez względu na to, czy jesteś zalogowany, czy nie. Jeśli się wylogujesz, koszyk nie powinien być pusty i powinien być nadal widoczny. Więc moje pytanie brzmi, czy byłoby sensowne przechowywanie koszyka jako xml w bazie danych (serwer msql)? Potencjalnie istnieje (stosunkowo) uczciwa ilość danych, które powinny być przechowywane, czy jest możliwe, że może to przynieść jakiekolwiek korzyści w zakresie wydajności, czy też jestem daleko od podstawy?


title: Szara strefa MSC: jak radzić sobie z sytuacją „zbyt niedoświadczonych w inżynierii/zbyt niedoświadczonych do prowadzenia badań”?

text: W zeszłym roku uzyskałem tytuł magistra CS. Na początku studiów magisterskich bardzo chciałem kontynuować badania i zrobić doktorat. Jednak w miarę upływu miesięcy zacząłem odczuwać potrzebę pisania oprogramowania, którego ludzie, no cóż, _właściwie używali_. Błąd programowania znowu mnie ugryzł. Postanowiłem więc, że zanim zdecyduję się na doktorat, spędzę trochę czasu w „prawdziwym świecie”, pracując jako programista. Niestety, większość firm w Brazylii to firmy „usługowe”, które wydają się utknąć w latach 80., jeśli chodzi o rozwój oprogramowania. Muszę codziennie odpierać natrętnych menedżerów, mniej niż kompetentnych współpracowników i skandaliczne wymagania dotyczące oprogramowania (dlaczego wszyscy wydają się potrzebować 50 000 licencji Oracle i gigantycznego Websphere AS do swoich aplikacji CRUD?) kocham tworzenie oprogramowania, sytuacja zaczyna dotykać nerwów. I pamiętajcie, mam szczęście, że dostałem pracę w miejscu, które nie jest zwykłym warsztatem oprogramowania. Jasne, są tu lepsze miejsca, albo zawsze mógłbym spróbować szczęścia za granicą, ale potem trafiłem na przysłowiowy mur: > Przepraszam, jesteś zbyt niedoświadczony jako programista i zbyt słabo wykwalifikowany jako > naukowiec. słyszałem to i wariacje wiele razy. Rekruterzy na stanowiska badawcze szukają zagorzałych, zapracowanych w publikacjach, rockstar doktorów, podczas gdy rekruterzy na stanowiska rozwojowe szukają zagorzałych, doświadczonych programistów rockstar. Dla większości mój tytuł magistra wydaje się być drobnym guzem w moim CV (i dla niektórych jawną stratą czasu). Ubieganie się o stanowiska za granicą jest jeszcze trudniejsze, ponieważ pracodawca musiałby radzić sobie z kłopotami związanymi z procesem VISA, co, jak rozumiem, czasami jest zbyt trudne. Teraz czuję, że znalazłem się w ślepym zaułku. Jestem przekonany, że rozwój (a nie badania) to moja sprawa, więc czy powinienem po prostu odrzucić tytuł magistra (lub zagrać go jako „kartę atutową”) i odegrać rolę „wielkiej ryby na małym stawie”, podczas gdy zdobędę trochę doświadczenia i przyczynić się do niektórych projektów open-source jako plus? Czy istnieje lepszy sposób na poradzenie sobie z tym?


title: Jak ważne jest zrozumienie kodu stojącego za sortami?

text: Po pierwsze, jeśli to jest w złym miejscu, przepraszam. Nie byłem zbyt pewien, na której ze stron Stack Exchange o to zapytać. Studiuję programowanie na uniwersytecie, na rocznym kursie konwersji. Moim głównym językiem programowania jest Java. Właśnie skończyliśmy studiować wyszukiwania i rodzaje. Koncentrując się w szczególności na tym ostatnim, ciężko mi było przepracować zawiłość kodu. Niektóre, na przykład rodzaj wkładania, były dość oczywiste. Inne, takie jak sortowanie przez scalanie, okazały się niezwykle trudne do zrozumienia. Całkowicie rozumiem _jak_ one działają, po prostu nie chciałbym _wdrażać_ własnych. Powiedziano mi, że większość programistów nie tworzy własnych sortowań/wyszukiwania, ponieważ metody wbudowane w Javie są bardziej niezawodne i generalnie szybsze. Jednak znajomość tego rodzaju jest uważana za dobrą praktykę. Kiedy patrzę na sortowanie takie jak sortowanie przez scalanie lub sortowanie binarne, myślę sobie, że nigdy nie wymyśliłbym takich rozwiązań. Są zbyt zawiłe i skomplikowane. To prowadzi mnie do mojego pytania. Czy większość programistów używa takich, jak ludzie używają prostych formuł matematycznych, np. obszar trójkąta lub koła, gdzie nakładasz go niemal hipnotyzująco? Czy jako programista włożyłbyś prawdziwy wysiłek w tworzenie nowych lub bardziej wydajnych rodzajów? Lub, gdybyś wiedział, że potrzebny jest rodzaj, czy po prostu wiedziałbyś, który jest lepszy dzięki notacji bigOh, a następnie po prostu skopiuj i wklej to samo, bez zastanawiania się nad kodem, który się za tym kryje? Uwaga: jeśli to pytanie nie pasuje do pytań i odpowiedzi (zajrzałem do FAQ i myślę, że tak), proszę poinformuj mnie, gdzie mógłbym opublikować. Dziękuję Ci.


title: dostrzeganie cykli grafu - proste wyjaśnienie

text: czy ktoś mógłby mi pomóc zrozumieć, jak znaleźć cykle na wykresach w kategoriach laika? Czytałem inne pytania, takie jak To, a także niektóre strony wikipedii, ale wydają się one dość szybko schodzić do matematycznego żargonu. Mam model grafu w javie, modelujące węzły oraz krawędzie „wejście” i „wyjście” - a model zna węzły połączone tylko w jednym kierunku, to pozwala mi znaleźć węzły liści jako punkt wyjścia, mój plan był aby wrócić do wykresu z każdego z tych węzłów liści, dla każdego „spaceru”, zachowując listę wszystkich innych węzłów, które znalazłem na mojej trasie. Jeśli w dowolnym momencie zobaczę coś już na liście, będę wiedział, że znalazłem cykl na wykresie. To jednak wydaje się nieco uproszczone. Jestem pewien, że to rozwiązany problem, po prostu byłoby miło, gdyby można go było wyjaśnić w prosty sposób. -as


title: Czy taki język programowania istnieje?

text: Zastanawiam się nad stworzeniem własnego, ulubionego języka programowania i zastanawiam się, czy podobny język już istnieje. Podstawową ideą jest to, że sam język byłby dynamicznie typowany z silnymi możliwościami metaprogramowania (pomyśl o Ruby). Ale zamiast uruchamiać go bezpośrednio, byłby interpretowany/rozszerzany na inny język, który byłby statycznie wpisany, ze statyczną strukturą danych i minimalną dynamiczną wysyłką (pomyśl C). To byłoby następnie skompilowane do kodu maszynowego. Rozbudowa może nastąpić przed uruchomieniem programu lub podczas jego wdrażania, a wszystkie niezbędne biblioteki będą jego częścią, a nie każda biblioteka osobno. Zanim zacznę nad tym pracować, chciałbym wiedzieć, czy coś takiego już istnieje. Mogę więc albo się zainspirować, albo porzucić, bo byłaby to bezużyteczna praca.


title: Jak szczegółowy powinien być interfejs, jeśli chodzi o szczegóły jego implementacji?

text: Być może powinienem był wybrać lepszy tytuł, ale i tak... Zasadniczo, co zrobić z dwiema lub więcej implementacjami, które mają ten sam interfejs publiczny, ale są przeznaczone do nieco innych celów i mają nieco inne zachowanie? Na przykład załóżmy, że klasa proxy używa tego samego interfejsu publicznego co klasa oryginalna, ale z istotnymi zmianami w jej zachowaniu. interface MójTest { getSomething() : MySomething; } interface MyTestImmutable (rozszerza MyTest ?) { // ten sam interfejs, ale w tym przypadku następująca metoda // ma zwrócić klon przechowywanej instancji MySomething getSomething() : MySomething; }      Dziękuję


title: Obliczenia astronomiczne i kosmologiczne?

text: Zastanawiam się, czy jest jakiś kurs na uniwersytecie lub gdziekolwiek indziej, lub prawdopodobnie firma, która ma wydział informatyki związanej z astronomią i kosmologią (wiem, że NASA będzie go potrzebować). Chciałbym wiedzieć, jak duże jest zapotrzebowanie lub popularność tej dziedziny programowania. Gdzie jeszcze będzie używane to pole?


title: Jak uniknąć bycia „twardzielem”?

text: Kiedy coś mnie pasjonuje (szczególnie programowanie), wydaje mi się to naprawdę łatwe, tak jak facet, o którym mówił Peter G. w Radzeniu sobie z „programistycznym frajerem”. Więc jakich technik używasz, aby 1) Zidentyfikować, kiedy naprawdę jesteś frajerem? 2) Przekazać coś „ważnego” bez wydawania sobie wrażenia ważnego? Konkretne przykłady pomocy, takie jak Podczas krytykowania zapytaj „czy zastanawiałeś się, co się stanie, gdy XXX się zmieni” zamiast „nigdy nie bierz zależności od szczegółów implementacji” Podczas udzielania porad „pokazywanie z kodem jest lepsze niż mówienie” lub użyj referencji.


title: Jakie zabezpieczenia są domyślnie używane w WSHttpBinding (po stronie usługi) lub kliencie testowym WCF (po stronie klienta)?

text: Niedawno przeniosłem usługę z BasicHttpBinding do WSHttpBinding (tj. mydło 1.1 -> mydło 1.2). W WCF użycie WSHttpBinding() powoduje rozpoczęcie korzystania z niektórych domyślnych ustawień zabezpieczeń. Zakładam, że te same domyślne ustawienia zabezpieczeń są również używane przez klienta testowego WCF, ponieważ klient i serwer mogą kontynuować rozmowę po przełączeniu na „zabezpieczone” WSHttpBinding. W skrzypku potwierdziłem tę konfigurację zabezpieczeń, ponieważ mogę być świadkiem bardziej złożonych uścisków zabezpieczeń z wcześniej nieudolnie prostej odpowiedzi na żądanie, tj. **Before:** (BasicHttpBinding) 1. [HttpRequest ] (Soap Request In Clear) [ HttpResponse] (Soap Response In Clear) **Po:** (WSHttpBinding) 1. [HttpRequest ] RequestSecurityToken [HttpResponse] RequestSecurityTokenResponse 2. [HttpRequest ] RequestSecurityToken [HttpResponse] RequestSecurityTokenResponse 3. [HttpRequest [HttpResponse] RequestSecurityTokenResponse] HttpRequest ] EncryptedData [HttpResponse] EncryptedData 5. [HttpRequest ] EncryptedData **(rzeczywiste żądanie na poziomie aplikacji)** [HttpResponse] EncryptedData **(rzeczywista odpowiedź na poziomie aplikacji)** Więc mogę bezpiecznie założyć, że zastosowano zabezpieczenia. Przejdźmy teraz do pytań: **Pytanie 1: Jakie są ustawienia zabezpieczeń?** Nigdy nie powiedziałem WCF o żadnym dostawcy członkostwa. W rzeczywistości nie mam żadnej tabeli (SQL lub XML) z nazwami użytkowników <-> hasłami. Więc jaki rodzaj uwierzytelniania ma miejsce? Chociaż klient testowy WCF może uwierzytelniać się jak powyżej, SoapUI nie odbiera tych wartości domyślnych Microsoft .NET i ma problemy. SoapUI próbuje nawiązać komunikację w postaci zwykłego tekstu, a następnie serwer odpowiada nieprawidłowym błędem tokena zabezpieczającego. **Pytanie 2: Jaki jest najczęściej stosowany model bezpieczeństwa dla SOAP 1.2?** Czy to za pomocą certyfikatów, haseł do nazw użytkowników, skrótów, czy **_** ? Jak te poświadczenia są przechowywane (SQL/XML?) i konfigurowane po stronie serwera WCF?


title: Wzmocnienie kodu z prawdopodobnie bezużyteczną obsługą wyjątków

text: Czy dobrą praktyką jest zaimplementowanie bezużytecznej obsługi wyjątków na wypadek, gdyby inna część kodu nie została poprawnie zakodowana? ## Podstawowy przykład Prosty, więc nie stracę wszystkich :). Załóżmy, że piszę aplikację, która będzie wyświetlać informacje o osobie (nazwisko, adres itp.) oraz dane pobierane z bazy danych. Powiedzmy, że to ja koduję część interfejsu użytkownika, a ktoś inny pisze kod zapytania bazy danych. Teraz wyobraź sobie, że specyfikacja Twojej aplikacji mówi, że jeśli informacje o osobie są niekompletne (powiedzmy, że brakuje nazwiska w bazie danych), osoba kodująca zapytanie powinna sobie z tym poradzić, zwracając „NA” dla brakującego pola. Co zrobić, jeśli zapytanie jest źle zakodowane i nie obsługuje tego przypadku? Co się stanie, jeśli facet, który napisał zapytanie, obsłuży niekompletny wynik i kiedy spróbujesz wyświetlić informacje, wszystko się zawiesza, ponieważ twój kod nie jest przygotowany do wyświetlania pustych rzeczy? Ten przykład jest bardzo prosty. Wierzę, że większość z was powie „to nie twój problem, nie jesteś odpowiedzialny za tę awarię”. Ale to nadal twoja część kodu się zawiesza. ## Kolejny przykład Załóżmy, że to ja piszę zapytanie. Specyfikacje nie mówią tego samego, co powyżej, ale osoba pisząca zapytanie „wstaw” powinna upewnić się, że wszystkie pola są kompletne podczas dodawania osoby do bazy danych, aby uniknąć wstawiania niekompletnych informacji. Czy powinienem chronić moje zapytanie „wybierz”, aby upewnić się, że przekazuję użytkownikowi kompletne informacje? ## Pytania Co, jeśli specyfikacje nie mówią wyraźnie „ten facet jest odpowiedzialny za zajęcie się tą sytuacją”? Co się stanie, jeśli trzecia osoba zaimplementuje inne zapytanie (podobne do pierwszego, ale w innej bazie danych) i użyje twojego kodu UI do wyświetlenia go, ale nie obsłuży tego przypadku w swoim kodzie? **Czy powinienem zrobić wszystko, co jest konieczne, aby zapobiec możliwej awarii, nawet jeśli to nie ja mam zajmować się tym złym przypadkiem?** Nie szukam odpowiedzi w stylu „(a) to on jest odpowiedzialny za awarię ", ponieważ nie rozwiązuję tutaj konfliktu, chciałbym wiedzieć, czy powinienem chronić swój kod przed sytuacjami, za które nie odpowiadam? Tutaj wystarczyłoby proste „jeśli puste, zrób coś”. Ogólnie rzecz biorąc, to pytanie dotyczy nadmiarowej obsługi wyjątków. Pytam, bo kiedy sam pracuję nad projektem, mogę 2-3 razy zakodować podobną obsługę wyjątków w kolejnych funkcjach, "na wszelki wypadek" zrobiłem coś nie tak i przepuściłem zły przypadek.


title: Jakie są zalety korzystania z konstruktorów zapytań SQL?

text: Czy są jakieś korzyści z używania konstruktora zapytań zamiast używania surowego SQL? Np. $q->select('*') ->from('posts') ->innerJoin('terms', 'post_id') ->where(...) vs: SELECT * FROM posts GDZIE ... widzę że wiele frameworków używa tego rodzaju warstw abstrakcji, ale nie rozumiem korzyści.


title: Dobre praktyki w pisaniu notatek wydawniczych

text: Przy dostawie każdej wersji oprogramowania musimy napisać notatkę o wydaniu. Na przykład, oto niektóre z terminów, które dodaję, kiedy piszę informację o wydaniu: * Data wydania * Rozwiązany błąd Czy to wystarczy, czy jest coś jeszcze?


title: Jak mogę wykonać automatyczne testy GUI?

text: Jak mogę automatycznie sprawdzić, co jest widoczne, a co nie? A przynajmniej, jak mogę zorganizować niektóre częściowo automatyczne testy? IDE: Eclipse (może użyć również IntelliJ Idea, jeśli to konieczne) Narzędzie testowe: Junit (znowu, może użyć czegoś innego, jeśli jest to zalecane, ale lepiej, jeśli jest bezpłatne) System operacyjny: Android Developer's OS: Linux (może się zmienić dla MAC lub Windows (niechętnie )) Język: Java Cała praca odbywa się w urządzeniu zewnętrznym. Brak emulatora. Aplikacja jest opakowaniem użytkownika dla oprogramowania wbudowanego odtwarzacza TV, nazywanym działaniem zewnętrznym. Tak więc 70% kodu dotyczy GUI. (Pozostałe 30% rozmawia z serwerami i przekazuje informacje do GUI) Zanim sam zaprogramowałem funkcję testowania, nie używając żadnych narzędzi. Teraz mam pod ręką narzędzie. Ale nie wyobrażam sobie, jak mógłbym przetestować interfejs użytkownika, z narzędziem lub bez niego. (Ściśle mówiąc, z połączeniami internetowymi też mam problemy, ale zostawię je prawdopodobnie na inne pytanie.) Odpowiedź nie musi być zbyt zależna od platformy, zasady i pomysły też pomogą. Oczywiście dobrze jest sprawdzić, czy jakiś element jest w innym i sprawdzać czy nie. Przydałyby się do tego pewne sprawdzenia regresji. Ale powinienem też mieć pewność, że wspomniany element nie jest przecinany przez inne elementy i mruga, jak zamówiłem przez animację. Porady tutaj: Czy istnieje narzędzie do testowania interfejsu użytkownika Java? nie pomoże - są tylko narzędzia, nie zasady, a żadne z narzędzi nie może pomóc w mojej sytuacji.


title: Czy można sprawdzić tożsamość aplikacji po stronie klienta od strony serwera?

text: Załóżmy, że istnieje usługa sieciowa, która jest widoczna publicznie, ale musi tylko odpowiadać na określoną aplikację kliencką. Czy istnieje mechanizm sprawdzania tożsamości aplikacji po stronie klienta, aby uniemożliwić niedozwolonym aplikacjom dostęp do usługi? Na przykład mam usługę sieciową, która jest wywoływana przez moją aplikację na iOS. Chcę uniemożliwić innym dzwonienie do mojej usługi internetowej. Biorąc pod uwagę fakt, że inni mogą zdekompilować moją aplikację kliencką i stworzyć inną, która działa tak samo jak moja, myślę, że jedynym sposobem uniknięcia niepożądanego dostępu do usługi jest sprawdzenie tożsamości aplikacji na serwerze, aby upewnić się, że żądanie pochodzi z mojej własnej aplikacji . Czy jest na to solidny i bezpieczny sposób?


title: Konwencja nazewnictwa dla funkcji wyższego rzędu?

text: Czy istnieje konwencja nazewnictwa dla funkcji wyższego rzędu? To znaczy funkcje, które zwracają inne funkcje. Przykład w JavaScript: function onlyDivisibleBy(div) { // <-- funkcja wyższego rzędu return function (n) { return n % div === 0; } } var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.filter(tylkoDivisibleBy(3)); // [0, 3, 6, 9] arr.filter(onlyDivisibleBy(5)); // [0, 5] Zwykle pisałem to jak powyżej: to znaczy optymalizuję pod kątem czytelności w punkcie wywołania (ostatnie wiersze przeczytałbym powyżej jako "filtruj tablicę, aby uzyskać elementy podzielne tylko przez 5") , jednak w definicji z dala od kontekstu, w którym jest używana, nie jest łatwo zrozumieć, co ta funkcja robi ze swojej nazwy.


title: Najlepszy proces rozwoju i utrzymania produktu przez mały zespół?

text: Będę zarządzał projektami dla bardzo małego (2-5) starszego zespołu programistów. Opracowują aplikację internetową opartą na subskrypcji. Jest w użyciu od wielu lat, więc w tym momencie prace obejmują: 1. Opracowywanie nowych funkcji i aktualizacje istniejących funkcji 2. Opracowywanie własnych narzędzi i raportów 3. Naprawianie błędów 4. Badanie problemów z obsługą klienta Czasami określane są wydania produkcyjne przez zobowiązania klientów, czasami przez przewagę konkurencyjną, ale w większości nie są krytyczne czasowo. Chciałbym mieć regularne wersje produkcyjne, aby produkt był świeży – mniej więcej raz na 2 miesiące. Ponieważ zespół jest tak mały, sami programiści będą musieli być zaangażowani w projektowanie, testowanie, wdrażanie i konserwację. Ponieważ nie mamy dedykowanego zespołu konserwacyjnego, uważam, że głównym wyzwaniem jest zakłócenie rozwoju i planowania przez naprawianie błędów i problemy z obsługą klienta. Mogą nas rozpraszać podczas opracowywania nowych funkcji i zakłócać harmonogram wydań. Moją pierwszą myślą jest wykonanie następujących czynności: 1. Zatrudnienie młodszego programisty, który będzie buforował starszych programistów przed zadaniami konserwacyjnymi. Pomiędzy zadaniami konserwacyjnymi osoba ta może asystować starszym programistom. 2. Zastosuj podejście w stylu scrum, w którym mamy serię sprintów prowadzących do wydania produkcyjnego. Umożliwi nam to utrzymanie interesariuszy na bieżąco i pozwoli nam na refleksję i ulepszanie naszego procesu z każdym sprintem. 3. Krótko po wydaniu, kiedy pojawia się większość błędów, zespół może skupić się na projektowaniu następnej wersji, licząc, że każdy z nich prawdopodobnie zostanie wciągnięty w naprawianie błędów. Chciałbym usłyszeć twoje przemyślenia i wyciągnięte wnioski.


title: Wielowątkowy projekt aplikacji

text: Obecnie planuję usługę Windows. Będzie to aplikacja wielowątkowa, która będzie stale sprawdzać rekordy bazy danych i je przetwarzać. Moją pierwszą myślą było ustawienie maksymalnej liczby dostępnych wątków i utworzenie nowego wątku dla każdego procesu. To działa dobrze, ale ponieważ tworzę nowy wątek dla każdego nowego procesu, obawiam się, że jego obciążenie pomnoży się, jeśli będzie dużo rekordów do przetworzenia. Moje pytanie brzmi, czy to dobry projekt, czy poleciłbyś jakieś inne rozwiązania? Oto, co aplikacja zrobi w zasadzie: 1. Sprawdź dostępną liczbę wątków 2. Jeśli są dostępne wątki, sprawdź bazę danych pod kątem rekordów do przetworzenia. 3. Jeśli istnieją rekordy do przetworzenia wybierz 100 najlepszych 4. Utwórz nowy proces 5. Zadzwoń do serwisu WWW dla każdego rekordu i zaktualizuj rekord zgodnie z wynikiem połączenia z serwisem WWW (To połączenie + aktualizacja zwykle zajmuje około 500 ms więc proces być na żywo przez około 50 sekund) 6. Przejdź do kroku 1 Obecnie robię to: timer1.Tick += Tick(); private void Tick() { //przeprowadź logowanie tekstu //przeprowadź aktualizację TextBox } int MaxThreads = 10 while(true) { if(ThreadCount < MaxThreads) { new Thread(() => Process()).Start() ; Liczba Wątków++; } else { Wątek.Uśpienie(10000); } } private void Process() { //call ws //aktualizacja rekordów ThreadCount--; }


title: Jak opublikować projekt w domenie publicznej?

text: Obecnie pracuję nad projektem, który ma zademonstrować, jak można tworzyć widżety za pomocą Context Framework. Opublikuję również kod źródłowy. W tym przypadku chcę dać użytkownikom jak najwięcej swobody, aby mogli swobodnie kopiować i wklejać, modyfikować, a także ponownie licencjonować kod, którego używają ponownie. Jak więc o tym wspomnieć w projekcie? Czy niektóre gotowe licencje itp. są do tego odpowiednie?


title: Radzenie sobie z wieloma strumieniami wymagań biznesowych bez zmniejszania wielkości zespołu

text: Firma ma pięć dyskretnych strumieni wymagań biznesowych, które należy zaimplementować w oprogramowaniu. Istnieje zespół dziesięciu programistów. „Naiwnym” rozwiązaniem organizacyjnym jest podzielenie zespołu na pięć „dwóch zespołów” (jeden na strumień wymagań). Ale czuję, że to narusza integralność zespołu (utrudnia pracę zespołową, powoduje efekty silosu, utrudnia komunikację itp.). Czy ktoś ma jakiś wgląd w to, jak najlepiej zorganizować taki zespół programistów, aby sprostać wielu strumieniom wymagań? Czy możliwe jest posiadanie mniejszej liczby zespołów programistycznych niż strumieni wymagań?


title: Opis struktury zmieniającej treść strony internetowej

text: Zbudowałem klejnot Ruby, który pozwala programiście (lub komukolwiek) zmienić słownictwo na swojej stronie Rails. Gdy tryb edycji jest włączony, każdy tekst na stronie będzie miał ikonę edycji. Użytkownik może kliknąć tę ikonę edycji i natychmiast zmienić odpowiedni tekst. Działa z tekstem, atrybutami dowolnego elementu, wybranym elementem i ciągiem w JavaScript. Teraz nie wiem, jak to zwięźle opisać. W tej chwili opis brzmi: „WhowishWord ułatwia proces zmiany treści strony internetowej”. Myślę, że opis jest zły i niejasny. Może jest jakieś zwykłe słowo kluczowe dla tego rodzaju zadania (zmiana sformułowania), którego nie znam. Czy ktoś mógłby mi pomóc, proszę?


title: Jaka witryna musi być uważana za aplikację internetową?

text: Zajrzałem do Chrome Store i zacząłem myśleć o napisaniu tam kilku fajnych rzeczy do opublikowania, ponieważ mam zainstalowaną maszynę z Chromium i widzę rynek WebApp o wiele lepiej niż ten specyficzny dla platformy. Ale czego naprawdę potrzebuje strona i jak powinna być zaprojektowana, aby można ją było uznać za WebApp?


title: Czy istnieje wzorzec anty dla historycznie uprawianego oprogramowania?

text: Czy istnieje wzorzec anty, który opisuje historycznie rozwinięty system oprogramowania, w którym wielu programistów po prostu dodało nowe funkcje do systemu, ale nikt tak naprawdę nie obserwował ogólnej architektury ani nie przeprowadzano refaktoryzacji? Myślę, że dzieje się tak, gdy kierownictwo/klient stale prosi o nową funkcję i nikt nigdy niczego nie refaktoryzuje, ale tylko dodaje to, co inni programiści zrobili wcześniej. Powodem może być również to, że programista jest po prostu przytłoczony systemem oprogramowania i tak naprawdę nie rozumie, jak obecnie działa, a następnie po prostu dodaje/skleja swój kod na samym końcu (zamiast refaktoryzacji kodu i jego zmiany). coraz trudniej jest utrzymać system. (Zastanawiam się, czy są zdjęcia tego rodzaju anty-wzorów, aby było to bardziej zrozumiałe dla osób nie programujących - jak samochód, który został zbudowany przez dodawanie coraz większej liczby funkcji bez myślenia o ogólnym projekcie. Jakby ktoś miał potrzebę holowania przyczepy jadąc do tyłu, a potem inżynier po prostu przyspawał hak holowniczy do przodu samochodu. Praca wykonana. Ale teraz maska już się nie otwiera.)


title: Czy istnieje licencja na oprogramowanie „wyłącznie do użytku osobistego” i przeciwko jakimkolwiek pracom pochodnym?

text: Chcę wydać moduł npm (NodeJS), który będzie zależnością programistyczną dla rozszerzeń zbudowanych dla mojego produktu (będzie używany w testach). Nie chcę, aby ten moduł był używany w jakichkolwiek wydanych pracach pochodnych (komercyjnych lub darmowych, otwartych lub zamkniętych). Czy istnieje odpowiednia licencja, z której mogę korzystać?


title: Języki programowania, które poprawiają ogólne umiejętności programowania?

text: Jakich języków sugerowałbyś programistom, aby się uczył, nie dlatego, że będą oni dużo używać tego języka (ale mogą mieć), ale dlatego, że poprawi to ogólną umiejętność programowania i pozwoli myśleć w inny (i być może lepiej) ) droga?


title: Zaczynając jako programista, jakie są możliwe kroki kariery?

text: Chciałabym wiedzieć, jakiego rodzaju **pracy/roli** można się spodziewać na swojej ścieżce kariery, rozpoczynając jako programista. Chcę również wiedzieć, **ile lat** będziesz musiał pozostać w tej samej roli, dopóki nie przejdziesz na wyższy poziom. Ścieżka kariery jest oczywiście oparta na tym, jak dobrze wykonujesz swoją pracę, firmę itp., ale załóż normalną osobę, która równoważy życie i rodzinę z karierą. Kilka przykładów ról, na których kieruję: programista, starszy programista, architekt, kierownik projektu itp.


title: Używanie SVN razem z WAMP

text: Chciałbym uruchomić serwer SVN na moim lokalnym komputerze wraz z WAMP. Wszystkie pliki binarne serwera SVN zawierają Apache. Podczas gdy ja nie potrzebuję Apache'a, ponieważ już używam WAMP. Daj mi znać, jeśli są dostępne instalacje zawierające tylko serwer SVN. Jeśli nie ma żadnych dostępnych, czy mam kontynuować z tym, co jest dostępne? I jak miałabym to zrobić, nie łamiąc niczego. PS: Próbowałem CollabNet i VisualSVNServer. Oba zawierają Apache.


title: Problemy prawne z NDA, której nie chcę podpisywać

text: Otrzymałem od mojego obecnego pracodawcę do podpisania umowę o zachowaniu poufności (NDA), której nie chcę podpisywać. Jest niesamowicie otwarty i czuję, że powinien to być warunek mojej wstępnej umowy o pracę, którą podpisałem trzy tygodnie temu. Dokument zawiera bardzo wiele definicji w formie „w tym między innymi” oraz „bezpośrednio lub pośrednio”. Ponadto stwierdza, że: * Zgadzam się, że każde naruszenie umowy wyrządzi firmie nieodwracalną szkodę (zgadzam się, że naruszenie może spowodować szkodę dla firmy, ale niekoniecznie nieodwracalną szkodę). * Jeśli dokument zostanie zmieniony w przyszłości i odmówię podpisania poprawki, to naruszyłbym jej warunki. * Wszystko, co rozwijam będąc w firmie, jest jej własnością (pomijając to, czy to, co rozwijam w wolnym czasie, w odróżnieniu od mojej pracy, jest moją własnością). * Po zakończeniu mojego zatrudnienia w firmie będę musiał kontynuować swoje obowiązki w firmie, aby pomóc w doskonaleniu jej oprogramowania, że przez rok po zatrudnieniu nie będę mógł wykonywać żadnych obowiązków bezpośrednio lub pośrednio związanych z moimi obowiązkami w firmie się kończy (czy przez rok nie pozwolono by mi na inżynierię oprogramowania?). * Jeśli firma zdecyduje się ścigać mnie za naruszenie umowy, zgadzam się nie bronić, a wszystkie warunki zawarte w dokumencie zostaną przeniesione na każdą firmę, która kupi tę, w której pracuję, bez mojej zgody. Krótko mówiąc, legalnie mieliby mnie na całe życie i mogliby mnie całkowicie zniszczyć z dowolnego powodu, który uznaliby za stosowny. Czy są jakieś argumenty prawne, którymi mógłbym się bronić przed podpisaniem umowy? Na przykład fakt, że umowa o zachowaniu poufności nie była częścią mojej pierwotnej umowy o pracę lub że dokument jest celowo abstrakcyjny i niejasny, aby umożliwić im wypełnianie pustych miejsc w dowolny sposób? Firma przechowuje cały swój kod źródłowy na stronie, która wykorzystuje publicznie dostępny SCM i w dużym stopniu wykorzystuje oprogramowanie open source – szanse, że kiedykolwiek zetknąłem się z informacjami, które zgodnie z prawem mogłyby zostać uznane za „tajemnicę handlową” lub „poufne”. informacji” jest bardzo szczupła, więc po co miałbym podpisywać NDA? Nie wierzę, że wielu pracowników poświęciło czas na zrozumienie umowy NDA przed jej podpisaniem, a wiem na pewno, że kilku z nich tego nie zrobiło. Czy warunki tej umowy są powszechne wśród społeczności inżynierów oprogramowania?


title: Pisanie w C dla wydajności?

text: Wiem, że dość często słyszałem, że C zazwyczaj ma przewagę wydajnościową nad C++. Tak naprawdę nie myślałem o niczym innym, dopóki nie zdałem sobie sprawy, że MSVC nawet nie obsługuje najnowszego standardu C, ale najnowszy obsługuje go C99 (o ile wiem). Planowałem napisać bibliotekę z kodem do renderowania w OpenGL, aby móc go ponownie wykorzystać. Planowałem napisać bibliotekę w C, ponieważ każdy wzrost wydajności jest mile widziany, jeśli chodzi o grafikę. Ale czy naprawdę warto? Kod używający biblioteki prawdopodobnie zostałby napisany w C++ i ogólnie wolę kodować w C++. Jeśli jednak spowodowałoby to nawet niewielką różnicę w wydajności, prawdopodobnie wybrałbym C. Można również zauważyć, że ta biblioteka byłaby czymś, co stworzyłbym do pracy w systemie Windows/OS X/Linux i prawdopodobnie skompilowałbym wszystko natywnie (MSVC dla Windows, Clang lub GCC dla OS X i GCC dla Linuksa... lub ewentualnie kompilatory Intela do wszystkiego). Rozejrzałem się i znalazłem kilka benchmarków itp., ale wszystko, co widziałem, dotyczyło raczej GCC niż MSVC i Clang. Również benchmarki nie wspominają o standardach używanych języków. Ktoś ma jakieś przemyślenia na ten temat?


title: Pętla jawna czy niejawna?

text: Dlaczego lub kiedy preferowane jest „jasne”, gdy rozwiązania niejawne są często bardziej czytelne i mniej kodu? Mówi „jawne jest lepsze niż niejawne”, gdy na przykład pętla niejawna jest lepsza niż pętla jawna, prawda? for every in all: every.updated = True Powyższe wydaje mi się ukryte i lepsze niż jawny licznik, ponieważ licznik to kolejna rzecz, która może się nie udać i dlaczego nie pozostawić kompilatorowi lub innemu środowisku zamiast wymagać jawnej zmiennej licznika: for(int i=0, i<a.length, i++) ... A są języki, w których wszystkie zapętlenia są "ukryte" - co to znaczy i kiedy jest preferowane? I nie ustawianie jawnie wartości na `null` lub `None` lub podobnie wydaje mi się lepsze i chcę przepisać kod, gdy „rozwiązuję” wymaganie, jawnie ustawiając `return null` lub `String name = null`, ponieważ myślę wyraźne określenie, co powinno być null, a None powinno mieć bardziej przejrzyste rozwiązanie, takie jak używanie zmiennej tylko wtedy, gdy jest to potrzebne, a jeśli napiszę gdzieś return null, prawdopodobnie robię to źle. Kiedy pisałem Javę, zauważyłem, że piszę `return null` i deklaruję wartości jako null w niektórych miejscach i nie podobało mi się to i mogłem to przepisać, mimo że przypadek, w którym umieściłem `return null` został osiągnięty tylko w przypadku błędu . Zapytałem guru w pracy, czy kiedykolwiek powinniśmy zadeklarować zmienną jako null, czy wartości domyślne nie są dużo lepsze? Chętnie poznam twoje przemyślenia na ten temat. Przykładem, w którym _jest_ lepiej być jednoznacznym, o którym mogę pomyśleć, jest zadeklarowanie listy i jawne zadeklarowanie, jaki typ znajduje się na liście, jest lepsze niż tylko lista obiektów, np. lepiej jest zadeklarować `ArrayList<ArrayList>` zamiast po prostu ArrayList, jeśli wiemy, że jest to lista list.


title: Jak postępować krok po kroku

text: To już trzeci raz, kiedy musiałem napisać oprogramowanie do sterowania modemem komórkowym. Dla tych, którzy nie są zaznajomieni z procesem, masz sekwencję kroków, które musisz wykonać. Każdy krok zajmuje określoną ilość czasu i jest kilka odpowiedzi, które powinieneś otrzymać w tym czasie. Istnieją również odpowiedzi, które możesz otrzymać w dowolnym momencie, niezależnie od etapu, na którym się znajdujesz. Na podstawie odpowiedzi musisz przejść do kolejnego etapu procesu. Jeśli upłynie czas, musisz przejść do innego etapu. W niektórych przypadkach kroki są podejmowane wielokrotnie przed przejściem do kolejnego etapu. Muszą to być funkcje nieblokujące, które mogę uruchomić jako zadanie na jednowątkowej maszynie. Więc główny program wywoływałby to `modemTask()` kilkaset razy na sekundę, sprawdza, czy musi coś zrobić, a następnie wykonuje funkcję, jeśli jest potrzebna, i kończy działanie. W przeszłości pisałem to jako prostą maszynę stanów opartą na `przełączniku`, z wyliczonymi etapami, podobnie jak poniżej: switch(stage){ case Power: powerOn(); // Włącz modem nextstage = ResetCmd; // Idź wykonaj reset próbyLeft = 5; // Wyślij polecenie resetowania do pięciu razy break; sprawa ResetCmd; modem.write("ATZ\n"); // ATZ - resetowanie prób w lewo--; // Użyj jednej z naszych prób nextstage = ResetReply; // Następnie czekaj na odpowiedź (powinno być OK) timeout = millis() + 5000; // Poczekaj do 5 sekund na każdą przerwę w próbie; sprawa ResetOdpowiedz; if(receivedResponse() == OK) // Sukces { nextStage = NetworkAttachCmd; // Dołącz do sieci komórkowej } elseif(receivedResponse() == BŁĄD || timeout < millis()) { // Jeśli pojawi się błąd lub przekroczysz limit czasu, spróbuj ponownie, jeśli to możliwe, włącz, jeśli nie możemy if(attemptsLeft > 0) { nextStage = ResetCmd; } else { nextStage = Moc; }           }            przerwanie; case NetworkAttachCmd: ... } stage = nextstage; // Przypisz etap pośrednio do celów debugowania - dobrze wiedzieć, skąd w tym momencie przyszliśmy Trudno śledzić cały przepływ systemu, wstawienie dodatkowego kroku wymaga zmian w krokach przed i po, a wydaje się, że powinien być łatwiejszy sposób. Największa, którą musiałem zaprojektować, miała mniej niż 60 etapów, więc nie jest nie do opanowania, ale nie mogę oprzeć się wrażeniu, że istnieje lepsza strategia lub wzór dla tego typu pracy. Chociaż używam kilku `#define` dla większości limitów czasu i prób, byłoby trochę ładniej, gdyby nie było to wbudowane w maszynę stanów. Być może można by stworzyć jakąś strukturę, która utrzymałaby każdy stan, ale ponieważ odpowiedzi są różne, wydaje się to równie skomplikowane. Większość kroków będzie miała proste „OK”, ale niektóre zawierają status i dane, na których należy działać, a etap zmieni się w zależności od dokładnej odpowiedzi.


title: Dlaczego testowanie widoków MVC jest mile widziane?

text: Obecnie kładę podwaliny pod aplikację ASP.Net MVC i szukam rodzaju testów jednostkowych, które powinienem przygotować do napisania. Widziałem w wielu miejscach ludzi, którzy zasadniczo mówili „nie zawracaj sobie głowy testowaniem swoich poglądów, nie ma logiki i jest to trywialne i zostanie objęte testem integracyjnym”. Nie rozumiem, jak stało się to przyjętą mądrością. Testy integracyjne służą zupełnie innym celom niż testy jednostkowe. Jeśli coś złamię, nie chcę wiedzieć pół godziny później, kiedy zepsują się moje testy integracyjne, chcę wiedzieć od razu. **Przykładowy scenariusz :** Załóżmy, że mamy do czynienia ze standardową aplikacją CRUD z encją Klient. Klient posiada imię i nazwisko oraz adres. Na każdym poziomie testowania chcę sprawdzić, czy logika pobierania klienta prawidłowo pobiera zarówno nazwę, jak i adres. Aby przetestować repozytorium, piszę test integracji, który trafi do bazy danych. Aby przetestować reguły biznesowe, wykuwam repozytorium, podaję odpowiednie dane reguł biznesowych i weryfikuję, czy moje oczekiwane wyniki są zwracane. **Co chcę zrobić :** Aby przetestować interfejs użytkownika, wyśmiewam reguły biznesowe, konfiguruję oczekiwaną instancję klienta, renderuję widok i sprawdzam, czy widok zawiera odpowiednie wartości dla określonej przeze mnie instancji . **Co utknąłem :** Aby przetestować repozytorium, piszę test integracyjny, ustawiam odpowiedni login, tworzę wymagane dane w bazie danych, otwieram przeglądarkę, nawiguję do klienta i weryfikuję wynik strona zawiera odpowiednie wartości dla określonej przeze mnie instancji. Zdaję sobie sprawę, że dwa scenariusze omówione powyżej nakładają się na siebie, ale kluczową różnicą jest czas i wysiłek wymagany do skonfigurowania i wykonania testów. Jeśli ja (lub inny programista) usunie pole adresu z widoku, nie chcę czekać, aż test integracji to wykryje. Chcę zostać wykryty i oznaczony w teście jednostkowym, który jest przeprowadzany wiele razy dziennie. Mam wrażenie, że po prostu nie rozumiem jakiejś kluczowej koncepcji. Czy ktoś może wyjaśnić, dlaczego oczekiwanie na natychmiastową informację zwrotną z testów na temat poprawności widoku MVC jest złą rzeczą? (lub jeśli nie jest zły, to nie jest to oczekiwany sposób na uzyskanie wspomnianej opinii)


Czy „przekazywanie przez wartość” jest równoznaczne z „programowaniem funkcjonalnym”? 1. Czy istnieją iteracyjne języki programowania, które (w dużej mierze) „przechodzą przez wartość”? 2. Czy są jakieś funkcjonalne języki programowania, które (w dużej mierze) „przechodzą przez odwołanie”? Dziękuję.


title: Jak kompilator obsługuje wyjątki, które są niejawne? Szukasz strategii projektowych

text: W całej funkcji handleException napotkany wyjątek jest niejawny. Jak kompilator obsługuje takie niejawne przekazywanie wyjątków? [Dla m.in. w metodach C++ **ten** wskaźnik jest przekazywany do konta bieżącego obiektu. Moje pytanie brzmi, w jaki sposób kompilator obsługuje wyjątki wewnętrznie — handleException nie ma argumentów.] void handleException() { try { throw; } catch (MyException& e) { ...kod do obsługi MyException... } catch (YourException& e) { ...kod do obsługi YourException... } } void f() { spróbuj { ...coś, co może wyrzucić ... } catch (...) { handleException(); } }


title: Alokacja sterty Java szybsza niż C++

text: Wysłałem już to pytanie na SO i wszystko poszło dobrze. Niestety został zamknięty (wystarczy tylko jeden głos, aby ponownie otworzyć), ale ktoś zasugerował, abym go opublikował tutaj, ponieważ jest lepiej dopasowany, więc poniższe jest dosłownie kopią wklejania pytania * * * Czytałem komentarze do tej odpowiedzi i Widziałem ten cytat. > Tworzenie instancji obiektów i funkcje zorientowane obiektowo są > błyskawicznie szybkie w użyciu (w wielu przypadkach szybciej niż C++), ponieważ zostały > zaprojektowane od samego początku. a kolekcje są szybkie. Standardowa Java przewyższa > C/C++ w tym obszarze, nawet w przypadku najbardziej zoptymalizowanego kodu C. Jeden użytkownik (z naprawdę wysoką reputacją, mógłbym dodać) odważnie bronił tego twierdzenia, stwierdzając, że 1. alokacja sterty w javie jest lepsza niż w C++ 2. i dodał to stwierdzenie broniąc kolekcji w javie > A kolekcje Java są szybkie w porównaniu do kolekcji C++ ze względu na głównie do innego podsystemu pamięci. Więc moje pytanie brzmi, czy cokolwiek z tego naprawdę może być prawdą, a jeśli tak, dlaczego alokacja sterty w javie jest o wiele szybsza.


title: Jaki popularny program jest używany do tworzenia GUI w C++?

text: Zadaję to pytanie, ponieważ moja kreatywność może zajść tylko w programach konsolowych w C++. Muszę wiedzieć, jakiego programu/oprogramowania większość programistów C++ używa do tworzenia GUI w C++. Za kilka tygodni wybieram się do college'u i chcę studiować programowanie komputerowe, a ja naprawdę chciałbym mieć przewagę. Dziękuję.


title: Testowanie dla nieprogramistów

text: Chciałbym nakłonić mojego młodszego brata, który nie potrafi programować, do przetestowania kodu, który piszę z wymagań, które podaję mu w dokumentacji. Czy jest sposób, aby szybko zaczął działać? Pomysły? Proszę i dziękuję.


title: Jaki jest związek Zend z PHP?

text: Jaki jest dokładnie stosunek Zend do PHP? Nie mam na myśli ram, ale samą firmę. Czy są strażnikami lub strażnikami swego rodzaju? Właśnie czytałem o PHP i poza wymaganiem znajomości języka C, aby go rozszerzyć, najwyraźniej musisz nauczyć się API Zend. Ale kiedy po raz pierwszy zaczynasz pracę z PHP, nie musisz wiedzieć nic o "Zend", i to samo dotyczy frameworków niezwiązanych z Zend, takich jak Cake i CodeIgniter. Jestem więc zdezorientowany i ciekaw, kiedy wiedza o tym, co Zend zaczyna mieć znaczenie w używaniu PHP.


title: Oracle jest właścicielem Javy, ale Google używa Javy?

text: Ok, nie rozumiem. Co oznacza „Oracle jest właścicielem Javy”? Google zdecydowanie używa Javy w Google App Engine, czy to oznacza, że Google musi za to płacić Oracle?


title: Programowanie równorzędne i dzielenie się doświadczeniami

text: W podkaście Java Posse pojawiła się wzmianka o tym, jak zespoły powinny być dzielone na pary. Jednak w podkaście pojawiła się wzmianka od pani: „Pary powinny być pomieszane [sic]” (zachęta do różnorodności) Rozumiem korzyści płynące z programowania w parach, ale jaka jest korzyść z celowego mieszania ludzi. Wydaje mi się, że lepiej byłoby zastosować podejście algorytmu genetycznego, aby znaleźć optymalne grupy do generowania par. Przykład: Załóżmy, że masz programistę podatkowego i programistę front-end, jak któryś z tych facetów skorzystałby na celowym mieszaniu grup rówieśników? Dlaczego jej twierdzenie pozostało niekwestionowane? (Odniosłem wrażenie, że radziła, aby to było między grupami i poziomami rozwoju)


title: Jak odnieść sukces jako główny programista?

text: Zostałem głównym programistą w konkretnym projekcie, ale mam trudności ze skupieniem się na całościowym obrazie i upewnieniem się, że wszystkie elementy projektu są objęte. O czym powinienem pamiętać, zarządzając tym projektem? Jak mogę się upewnić, że wszystko jest obsługiwane tak, jak powinno?


title: Scrum Codzienne spotkanie: Punktualność ponad Pełna obecność zespołu?

text: Rozumiem, że codzienne spotkanie Scrum powinno być bardzo szybkie, zorganizowane w przyjazny sposób i wymaga obecności wszystkich członków zespołu. Ponieważ celem jest, aby wszyscy byli na bieżąco z tym, co robią wszyscy inni. Lubię takie codzienne spotkania Scrum. W moim najnowszym projekcie nasze codzienne Scrumy przypominają bardziej spotkania dotyczące aktualizacji statusu. Chociaż pozycja jest taka, że trzymamy Scrumy i ćwiczymy właściwe Agile. Jesteśmy rozproszonym zespołem w 2 różnych krajach, a ludzie z tego samego kraju nie znajdują się w tym samym biurze. W konsekwencji mamy wirtualne Scrumy. Problem polega na tym, że nasze spotkania zawsze rozpoczynają się o czasie, wiele osób dzwoni przed faktycznym czasem rozpoczęcia, więc faktycznie zaczynają się w pierwszej sekundzie spotkania. Bez żadnej tolerancji dla małych opóźnień. Na przykład, gdy ostatnio rozmawialiśmy przez telefon, osoba koordynująca spotkanie sprawdziła, czy wszyscy są na liście, a my powiedzieliśmy, że jeden z członków naszego zespołu jeszcze nie dzwonił, ale dzwonił. I powiedziano mi, żebym zaczął udostępniać, nie czekając na członka mojego zespołu. Również każdy ma dużo spotkań, a czasami wracają do spotkania Scrum, więc zrozumiałe jest, że przychodzą w pierwszej lub drugiej minucie spotkania. Czy to normalne w przypadku zespołów praktykujących codzienne Scrumy? Zdarza mi się to po raz pierwszy. Nie mogę znaleźć żadnej bibliografii bezpośrednio na ten temat. Chociaż podkreśla się obecność wszystkich członków zespołu, podkreśla się również, że spotkania powinny zawsze rozpoczynać się o tej samej godzinie. Ale wyobrażam sobie, że może istnieć niewielka tolerancja opóźnienia. Czytałem nawet na blogu, jak ktoś sugerował, że Scrum Master może nałożyć kary, jeśli ktoś spóźni się „5 sekund”. Myślałem, że Scrumowie mają być przyjacielscy, a taka kara wydaje się nieproduktywna. Jakie jest zalecane podejście w takiej sytuacji?


title: Jak założyć stronę internetową z solidnym i skalowalnym hostingiem?

text: To pytanie dotyczy sprzętu i hostingu oraz sposobu ich „bootstrapowania”. Jeśli zbudowałeś naprawdę świetną stronę internetową, jak możesz ją hostować po niskich kosztach, ale tak, aby zapewniała klientów, że ich dane są bezpieczne i dostępne. Na przykład, co jeśli mam aplikację internetową, którą opracowałem dla małych firm do ich księgowości, zastępującą Quickbooks. Oprócz otrzymania mnóstwa pieniędzy od VC lub Aniołów, w jaki sposób możesz to hostować, aby zagwarantować swoim klientom, że ich dane nie zostaną utracone, a strona zawsze będzie działać, aby zawsze mogli dostać się do ich dane?


title: Czy Haskell jest dobry w nauczaniu podstaw matematyki?

text: Zajmuję się nauczaniem matematyki na zajęciach z wymaganiami takimi jak AS i specyfikacja matematyki na poziomie A. Zeszyty klasowe zwykle zawierają przykłady oprogramowania komputerowego stosowanego do zadań matematycznych, ale zwykle są one oparte na aplikacjach programowych, takich jak mathlab, mathematica lub Dev. Nawet jeśli używany jest _prawdziwy_ język programowania, zwykle jest to staromodny język, taki jak Pascal. I to jest moim zdaniem naprawdę smutne. Ponieważ Haskell słynie ze swoich zamiłowań do matematyki, a ponieważ ja też się nią interesuję, chciałbym zapytać, czy Haskell jest dobrym wyborem jako metoda ćwiczeń rozszerzających dla studentów pierwszego roku studiów. Typowymi przedmiotami są funkcje, caclulus, granice, ale także np. algebra liniowa. Mam średnio zaawansowaną wiedzę z zakresu programowania (c#, ruby, powershell, javascript, tex), a także zbliżyłem się już do programowania funkcjonalnego w XSLT. Odpowiedzi będą przegłosowane w sposób odpowiedzialny. Szczegółowe odpowiedzi, w tym również podstawowe przykłady kodu Haskella zastosowanego w matematyce, takie jak algebra liniowa (np. Przestrzeń wektorowa), wielomiany, rozwiązywanie równań liniowych są bardzo cenione i celowane jako pożądane.


title: Dynamicznie ładuj i dzwoń do delegatów na podstawie danych źródłowych

text: Załóżmy, że mam strumień rekordów, które wymagają obliczeń. Rekordy będą miały kombinację tych funkcji, które uruchamiają „Suma”, „Agregacja”, „Suma z ostatnich 90 sekund” lub „Ignoruj”. Rekord danych wygląda tak: Date;Data;ID **Question** Zakładając, że ID jest pewnego rodzaju `int` i że int odpowiada macierzy niektórych delegatów do uruchomienia, jak powinienem używać C# do dynamicznego kompilowania ta mapa startowa? Jestem pewien, że ten pomysł istnieje... jest używany w Windows Forms, który ma wiele delegatów/zdarzeń, z których większość nigdy nie zostanie wywołana w prawdziwej aplikacji. Poniższy przykład zawiera kilka delegatów, które chcę uruchomić (sumowanie, zliczanie i drukowanie), ale nie wiem, jak sprawić, by liczba delegatów była uruchamiana na podstawie danych źródłowych. (powiedzmy, że wydrukujemy zdarzenia i zsumujemy szanse w tym przykładzie) za pomocą Systemu; za pomocą System.Threading; za pomocą System.Collections.Generic; wewnętrzna klasa statyczna TestThreadpool { delegat int TestDelegate (parametr int); private static void Main() { try { // to podejście działa jest zwracane void. //ThreadPool.QueueUserWorkItem(nowy WaitCallback(PrintOut), "Hello"); int c = 0; intw = 0; ThreadPool.GetMaxThreads(out w, out c); bool rrr =PulaWątków.SetMinThreads(w, c); Konsola.WriteLine(rrr); // być może powyższe wymaga czasu, aby ustawić 6 Thread.Sleep(1000); DataCzas ttt = DataCzas.UtcNow; TestDelegate d = nowy TestDelegate(Wydruk); List<IAsyncResult> arDict = new List<IAsyncResult>(); liczba int = 1000000; for (int i = 0; i < licznik; i++) { IAsyncResult ar = d.BeginInvoke(i, new AsyncCallback(Callback), d); arDict.Dodaj(ar); } for (int i = 0; i < licznik; i++) { int wynik = d.EndInvoke(arDict[i]); } // Podaj czas wywołania zwrotnego do wykonania - w przeciwnym razie aplikacja // może zakończyć się przed wywołaniem //Thread.Sleep(1000); var res = DateTime.UtcNow - ttt; Console.WriteLine("Główny program gotowy----- Całkowity czas --> " + res.TotalMilisekundy); } catch (wyjątek e) { Console.WriteLine(e); } Konsola.KluczOdczytu(prawda); } static int PrintOut(int parametr) { // Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " Delegat PRINTOUT czekał i wyświetlał to:"+parametr); var tmp = parametr * parametr; powrót tmp; } static int Suma(parametr int) { Wątek.Sleep(5000); // Udawaj, że robisz jakąś matematykę... może zapisz podsumowanie na dysku w osobnym parametrze powrotu wątku; } static int Count(int parametr) { Thread.Sleep(5000); // Udawaj, że robisz jakąś matematykę... może zapisz podsumowanie na dysku w osobnym parametrze powrotu wątku; } static void Callback(IAsyncResult ar) { TestDelegate d = (TestDelegate) ar.AsyncState; //Console.WriteLine("Oddzwonienie jest opóźnione i zwrócone") ;//d.EndInvoke(ar)); } }


title: Czy to twórca oprogramowania jest odpowiedzialny za zrozumienie, co klient miał na myśli ze swoją prośbą?

text: Rodzaj pytania tak/nie i dlaczego? **Czy obowiązkiem programisty jest zrozumienie, co klient miał na myśli ze swoją prośbą, czy też obowiązkiem klienta jest prawidłowe wyjaśnienie jego/jej prośby programiście?** Sytuacja w pracy jest obecnie klient już nam wyjaśnił, czego chce. Twoim obowiązkiem jest zrozumieć prośbę, a nie zadawać więcej pytań". Chociaż angielski nie jest moją mocną stroną, wszystkie prośby są napisane mętnym angielskim z niewłaściwie umieszczonymi słowami i trudnymi do zrozumienia zdaniami, niektóre prośby zakładają wcześniejsze zrozumienie systemu z mojej strony. Jestem trzecim lub czwartym deweloperem systemu (ostatni deweloperzy odeszli z pracy) i to może być powód, dla którego klient oczekuje zrozumienia ze strony deweloperów. Sam system jest dość chaotyczny zarówno na poziomie interfejsu użytkownika, jak i kodu źródłowego. Dla mnie wygląda to na kodowanie małpy – zakoduj i miej nadzieję, że poprawnie wykonasz żądanie, nie rozumiejąc go w rzeczywistości. Właściwie myślę o rzuceniu pracy, ale jeszcze tego nie zrobiłem, biorąc pod uwagę, że nie jestem pewien, kto ma rację, a kto się myli.


title: Kiedy powinienem używać równoległości?

text: Po zadaniu tego pytania zdałem sobie sprawę, że paralelizm nie zawsze jest dobry. Jak dotąd widzę, że paralelizm (pod c#) jest * Trochę skomplikowany pod względem kodu * Prawdopodobnie wstawi pewne komplikacje współbieżności * Nie zawsze będzie szybszy Zaglądam do paralelizmu, ponieważ chcę, aby istniejące i nowe aplikacje działały szybciej, ale teraz widzę, że to nie jest srebrna kula. Kiedy powinienem go użyć? czy są jakieś najlepsze praktyki? Czy w większości przypadków to tylko strata czasu? Czy nadaje się do konkretnego rodzaju zastosowań? Czekam na Wasze spostrzeżenia w tej sprawie.


title: Jak Swift może być o wiele szybszy niż Objective-C w tych porównaniach?

text: Apple uruchomił swój nowy język programowania Swift na WWDC14. W prezentacji dokonali kilku porównań wydajności między Objective-C i Pythonem. Poniżej znajduje się zdjęcie jednego z ich slajdów, przedstawiające porównanie tych trzech języków wykonujących złożone sortowanie obiektów: ![tutaj wprowadź opis obrazka](http://i.stack.imgur.com/wcdXk.jpg) jeszcze bardziej niesamowity wykres dotyczący porównania wydajności przy użyciu algorytmu szyfrowania RC4. Oczywiście jest to rozmowa marketingowa i nie omówili szczegółowo, w jaki sposób zostało to zaimplementowane w każdym z nich. Zastanawiam się jednak: 1. Jak nowy język programowania może być o wiele szybszy? 2. Czy wyniki Objective-C są spowodowane przez zły kompilator, czy też jest coś mniej wydajnego w Objective-C niż Swift? 3. Jak wytłumaczyłbyś 40% wzrost wydajności? Rozumiem, że wyrzucanie śmieci/automatyczna kontrola referencji może generować dodatkowe obciążenie, ale aż tyle?


title: Dlaczego użycie słowa „final” na zajęciach jest takie złe?

text: Dokonuję refaktoryzacji starszej witryny PHP OOP. Kusi mnie, aby zacząć używać 'final' na klasach, aby "`pokazać wyraźnie, że klasa nie jest obecnie rozszerzona o nic`". Może to zaoszczędzić dużo czasu, jeśli przyjdę na zajęcia i zastanawiam się, czy mogę zmienić nazwę/usunąć/zmodyfikować `chronioną` właściwość lub metodę. Jeśli _naprawdę_ chcę rozszerzyć klasę, mogę po prostu usunąć ostatnie słowo kluczowe, aby _odblokować_ w celu rozszerzenia. Tzn. Jeśli przychodzę na zajęcia, które nie mają zajęć dla dzieci, mogę zapisać tę wiedzę, zaznaczając zajęcia jako końcowe. Następnym razem, gdy do niego dojdę, nie będę musiał ponownie przeszukiwać bazy kodu, aby sprawdzić, czy ma dzieci. Oszczędzając w ten sposób czas podczas refaktoryzacji. To wszystko wydaje się być rozsądnym pomysłem na oszczędność czasu… ale często czytałem, że zajęcia powinny być „końcowe” tylko przy rzadkich/specjalnych okazjach. Czy kiedykolwiek potraktowałeś „ostatecznie” liberalnie i miałeś złe doświadczenia, czy ten „strach przed finałem” to tylko mit. Może to psuje tworzenie Mock obiektu lub ma inne skutki uboczne, o których nie myślę. czego mi brakuje?


title: Unikać ELSE podczas ustawiania zmiennej?

text: Który z tych stylów preferują ludzie? string mystring = "wartość domyślna"; if (warunek) mystring = "inna wartość"; VS string mystring = null; if (warunek) mystring = "inna wartość"; else mystring = "wartość domyślna"; VS mystring = warunek? "inna wartość" : "wartość domyślna";


title: Pytania do rozmowy kwalifikacyjnej w OOP

text: Zmierzyłem się z poniższymi pytaniami do rozmowy kwalifikacyjnej w OOP w języku PHP. Uprzejmie proszę o wyjaśnienie moich wyjaśnień w tej sprawie. Jestem zdezorientowany. Ponieważ jestem początkującym w OOP, jestem zbyt zdezorientowany. Czy ktoś mógłby to jasno wyjaśnić? 1. **Różnica między klasą abstrakcyjną a interfejsem.** Ankieter : Rozważmy, że klasa abstrakcyjna zawiera trzy metody abstrakcyjne, takie jak a,b,ci interfejs zawiera trzy metody a,b,c. W tym przypadku mają tę samą funkcjonalność. Więc dlaczego idziemy na abstrakcję i dlaczego idziemy na interfejs. Ja : ? 2. **słowo kluczowe statyczne.** Ankieter: Wywołujemy metodę statyczną bez tworzenia obiektu za pomocą operatora rozpoznawania zakresu w PHP. Jak również możemy wywoływać konkretne metody. W takim razie po co tam słowo kluczowe statyczne? Ja: .... 3. **ostatnie słowo kluczowe.** Przeprowadzający wywiad: Podaj dowolny scenariusz użycia ostatniego słowa kluczowego. Ja: Dla metody związanej z połączeniem db Ankieter: Inne niż to? Ja: ... 4. **Konstruktor.** Przeprowadzający wywiad: Jaki jest pożytek z konstruktora? Ja: Nie ma potrzeby, aby obiekt miał do tego dostęp. Zadzwoni automatycznie, gdy klasa zadzwoni. Przeprowadzający wywiad: Poza tym? Ja : .... Z góry dziękuję ...


title: Dlaczego nie ma nowych wersji C?

text: Podczas gdy wiele innych języków rozwija się bardzo szybko, na przykład Python, który w ciągu ostatnich kilku lat pojawił się w zupełnie nowej wersji, lub wykorzystujący framework, Rails, który ewoluuje bardzo szybko (książka, która została opublikowana na początku 2011 roku, jest teraz przestarzałe), wydaje się, że nie ma aktualizacji dla C. Dlaczego?


title: Przezwyciężanie powolnego rozwiązywania problemów z powodu zwiększonej wiedzy o tym, co może pójść nie tak

text: Niepokoiło mnie to od jakiegoś czasu i bardzo doceniłbym wkład innych profesjonalistów. Krótkie tło: Zacząłem programować, kiedy moi rodzice kupili mi mój pierwszy komputer w 1988 roku (w wieku 14 lat, teraz mam 39 lat). Przeszedłem kilka innych ścieżek kariery, zanim w 1997 roku zostałem zawodowym programistą. Być może późno rozkwitłem, ale tak było. Nadal jestem zadowolony ze swojego wyboru, uwielbiam programować i uważam się za dobry w tym co robię. Ostatnio zauważyłem, że im więcej nabieram doświadczenia, tym dłużej zajmuje mi wykonanie projektów, czy niektórych zadań w projekcie. Jeszcze się nie starzeję. Po prostu widziałem tak wiele różnych sposobów, w jakie sprawy mogą pójść nie tak. A potencjalne pułapki i pułapki, o których wiem i pamiętam, stają się coraz większe. Trywialny przykład: kiedyś było po prostu „w porządku, napisz tutaj plik”. Teraz martwię się o uprawnienia, blokowanie, współbieżność, operacje atomowe, pośredniość/frameworki, różne systemy plików, liczbę plików w katalogu, przewidywalne nazwy plików tymczasowych, jakość losowości w moim PRNG, braki zasilania w środku operacja, zrozumiałe API dla tego, co robię, właściwa dokumentacja itp. itd. Krótko mówiąc, problemy już dawno przeniosły się z „jak to zrobić” na „jak najlepiej/najbezpieczniej to zrobić”. W rezultacie ukończenie projektu zajmuje mi więcej czasu niż nowicjuszowi. Moja wersja może być solidna jak skała i tak nieprzenikniona, jak wiem, jak to zrobić, ale trwa to dłużej. Powyższy przykład "utwórz plik" był właśnie tym przykładem. Prawdziwe zadania są oczywiście bardziej złożone, ale mniej pasują do ogólnych pytań, takich jak to. Mam nadzieję, że rozumiesz, do czego zmierzam. Nie mam problemu z wymyślaniem wydajnych algorytmów, kocham matematykę, lubię złożone przedmioty, nie mam trudności z koncentracją. Myślę, że mam problem z doświadczeniem, a co za tym idzie z lękiem przed błędami (wewnętrznymi lub zewnętrznymi). Spędzam prawie dwie godziny dziennie na czytaniu o nowych osiągnięciach, nowych technikach, językach, platformach, lukach w zabezpieczeniach i tak dalej. Zagadką jest to, że im więcej wiedzy zdobywam, tym wolniej realizuję projekty. Jak sobie z tym radzisz?


title: Narzędzia programistyczne .NET silverlight

text: Jakie narzędzia są potrzebne do efektywnego programowania z Silverlight 4? VS 2010 to gimme, ale w jakiej wersji? Czy Pro wystarczy? Premia? A co z Expression Blend/Web/Oba? Rozważając VS 2010, premia wiąże się z subskrypcją MSDN, ale jest to górna granica budżetu. Ma to jednak sens, jeśli towarzyszy mu Expression. To program dla jednego człowieka, który tworzy aplikację LOB, która integruje sprzęt wideo/audio i mikrofon/kamerę internetową.


title: Jak działa agregacja, gdy zaangażowane są bazy danych?

text: Czytam więc książkę o wzorcach projektowych (wyjaśnione wzorce projektowe, wydanie drugie), a w całej książce jest napisane, aby „faworyzować agregację nad dziedziczeniem”. Próbuję owinąć głowę, próbując coś zaprojektować i czuję się tak głupio. Więc koncepcyjnie mam „Rekruterów”. Doszedłem do wniosku, że ci rekruterzy mogą być klasą abstrakcyjną, ponieważ mam kilka różnych typów rekruterów... na pełny i niepełny etat. Chodzi o to, że chcę, aby każdy rekruter mógł mieć odniesienia do innych rekruterów, ponieważ mogą ze sobą współpracować i muszą dzielić się i łączyć informacje. Każdy Rekruter miałby jeden lub więcej „Regionów”, które nadzorowałby, być może dzieląc się nim z innymi Rekruterami. Cały region jest konceptualnym agregatem „Podregionów”. Podregiony definiują miejsca leżące w określonych granicach geograficznych. Zawierają one pewne liczbowe informacje statystyczne dotyczące rekrutacji dla tego podregionu jako całości. Podregiony składają się z „Rekrutacji”, które zawierają szczegółowe informacje o poszczególnych wydarzeniach rekrutacyjnych dla podregionu. Zawierają również inne informacje statystyczne, które mają sens, aby znajdować się w sekcji Rekrutacje (ponieważ są one bardzo specyficzne dla rekrutacji), ale nie w podregionach. Za każdym razem, gdy niektóre informacje z rekrutacji są aktualizowane, należy utworzyć nowy zapis tej transakcji, abym mógł zachować historię, jak zmieniają się liczby. Teraz chcę, aby wszystkie te dane mogły być przechowywane w bazie danych. Jestem bardzo naiwny, jeśli chodzi o projektowanie i strukturyzację baz danych, zwłaszcza jeśli chodzi o radzenie sobie z klasami abstrakcyjnymi i interfejsami, które są dla mnie nowe. Wszystko w bazie danych będzie w jakiś sposób połączone między różnymi tabelami. Powiedzmy, że Recruiters będzie tabelą, a także tabelą Region, tabelą SubRegion i tabelą Recruitment. Gdzie muszę umieścić logikę i jak ją umieścić, aby upewnić się, że mogę zapisać wszystko w bazie danych, ładnie połączone, ale luźno połączone w kodzie?


title: Czy używanie nazw plików CamelCased jest bezpieczne?

text: Zajmuję się tworzeniem prostego systemu CMS, który chciałbym uczynić open source. Czy uważasz, że w przypadku struktury plików można bezpiecznie używać nazw takich jak: AppData FileUploads zamiast app-data file-uploads ? Ponieważ słyszałem, że niektóre serwery mają problemy z camelCase.


title: Jeśli używam wielu komponentów innych firm, korzystając z kilku różnych licencji open source, jak mam je przypisać?

text: Zajmuję się tworzeniem aplikacji Java, która wykorzystuje kilka bibliotek open source innych firm. Dodaję sekcję do okna dialogowego "Informacje" mojej aplikacji, która zawiera listę składników i informacje o ich licencjach. Czy w przypadku osób korzystających z tej samej licencji muszę powtórzyć ten sam tekst licencji dla każdej z nich? Na przykład używam kilku komponentów, które są wydawane na licencji Apache 2. Czy muszę wymienić warunki licencji Apache 2 dla każdego z nich, czy po prostu powiedzieć „Foo, Bar i Baz są używane zgodnie z warunkami licencji Apache 2” i raz wymienić rzeczywiste warunki? Dziękuję. Po prostu chcę zrobić właściwą rzecz.


title: Czy podczas testowania integracji używasz obiektów dostępu do danych do konfiguracji i walidacji, czy innej metody dostępu do danych?

text: Kiedy piszesz testy integracji dla obiektów logiki biznesowej i obiektów dostępu do danych, co jest najbardziej sensowne do użycia na potrzeby konfiguracji i walidacji? W moim przypadku używam ORM w implementacji mojego interfejsu dostępu do danych, który będzie używany w środowisku produkcyjnym, i osadzam tę implementację ORM wraz z obiektami logiki biznesowej w celu testowania integracji. Biorąc pod uwagę, że implementacja ORM jest testowana oddzielnie przy użyciu instrukcji INSERT i SELECT do konfiguracji i walidacji, najlepiej do integracji testowania konfiguracji i walidacji użyć implementacji ORM interfejsu dostępu do danych, aby użyć ORM bezpośrednio, aby użyć tych INSERT i SELECT oświadczenia lub zrobić coś innego, **_edit: i dlaczego?_** ORM w tym przypadku to NHibernate, implementacja ORM interfejsu dostępu do danych jest prostym przejściem do dostawcy LINQ NHibernate, który zapewnia również prostą paginację i mechanizmy sortowania. Jestem ciekaw, co myślisz, ogólnie lub w tym konkretnym scenariuszu. _**edit:_** Nie chcę wiedzieć, jakie DAO powinienem połączyć z obiektami BL. To _oczywiście_ powinno być tym samym DAO, które będzie używane w produkcji. Pytanie dotyczy mechanizmu używanego do umieszczania danych w bazie danych w celu skonfigurowania testu _przed_ testowaniem funkcji logiki biznesowej. Przypuszczalnie ten sam mechanizm zostałby użyty do odpytywania bazy danych _po_ przetestowaniu funkcji logiki biznesowej. Oto kilka bardzo wysokopoziomowych pseudokodów, aby pokazać, co mam na myśli: MyIntegrationTest() { Foo fooBefore = GenerateFooForTesting(); W jakiś sposóbWstaw do bazy danych(foo); // Czego tu użyć i dlaczego? // Ułóż rzeczy razem; faktycznie zrobione przy użyciu IoC, a nie na sztywno. DaoFactory realDaoFactory = GetRealDaoFactory(); BizFactory realBizFactory = GetRealBizFactory(); rzeczywistaBizFactory.DaoFactory = rzeczywistaDaoFactory; BusinessLogicObject biz = realBizFactory.BuildBusinessLogicObject(); biz.DoBusinessWithFooById(fooBefore.Id); Foo fooAfter = JakośGetFooFromDatabase(fooBefore.Id); // To samo pytanie. Assert.AreEqual(5, fooPo.Coś, co powinno być pięć po zakończeniu działalności); }