title: „Prowadzenie” eksperta domeny, aby wycofał się z programowania

text: Mam znajomego, który zajmuje się informatyką w lokalnej organizacji non-profit, gdzie używa niestandardowej aplikacji internetowej, która nie jest już obsługiwana przez firmę, która ją zbudowała. (poza biznesem, wsparcie było zbyt drogie, nie jestem pewien...) Rozwój tej aplikacji rozpoczął się około 10 lat temu, więc wykorzystywane technologie są już dość przestarzałe - klasyczne asp używające vbscript i SQL Server 2000. Domena aplikacji jest w sferze rządowej księgowości - więc mimo że zespołu programistów już dawno nie ma, często pojawiają się nowe wymagania tego oprogramowania. Wpisz... Ekspert domeny. Jest to geniusz księgowy w średnim wieku bez dużego (lub żadnego?) wcześniejszego doświadczenia w programowaniu. Studiował strony, kod i zapytania i nauczył się, jak małpować styl oryginalnego zespołu, który, wierz mi, jest w najlepszym razie przeciętny. Jest bardzo sprytny i bardzo wytrwały, ale nie ma doświadczenia w oprogramowaniu poza tym, co nauczył się z tej aplikacji. Poza tym jest miłym facetem do rozmowy i zdecydowanie zna swoją domenę. Mój przyjaciel z IT i prawdopodobnie jego przełożeni w firmie chcą go wyrzucić z kodu. Uważają go za marnującego swoją wiedzę na zadaniach kodowania, których nie powinien wykonywać. Kolega zaangażował mnie w kilka małych kontraktów, z którymi poradziłam sobie bez większego problemu - poza barierą w komunikacji z ekspertem domeny. Bardzo szybko wyjaśnił wymagania, zakładając wcześniejszą znajomość domeny, której nie mam. To po części jego normalny styl i myślę, że może trochę urażony moim zaangażowaniem. Myślę więc, że czuje się właścicielem kodu i zakorzenił się na stanowisku programisty. Więc... jego technika kodowania. Jednym z jego ostatnich przedsięwzięć było stworzenie strony, do której tylko on mógłby dotrzeć (teoretycznie - model bezpieczeństwa systemu jest nędzny), na której mógłby wprowadzić surowe zapytanie SQL, uruchomić je i zapisać zapytanie do ponownego uruchomienia później. Raport, nad którym pracowałem, został pierwotnie zaimplementowany przez niego przy użyciu 6 odrębnych zapytań, 3 lub 4 tabel tymczasowych do koordynowania danych między zapytaniami, a końcowy wynik uzyskany przez zaimportowanie danych z końcowego zapytania do programu Access i wykonanie trochę formatowania. Udało się – cóż, niektóre wyniki były nieprawidłowe – ale jakim kosztem! (Zaimplementowałem raport w pojedynczym zapytaniu z co najmniej 1/10 ilości kodu.) Edytuje kod w notatniku. Wydaje się, że nie ma pojęcia o materiałach referencyjnych online dla tych języków. Niedawno przeczytałem artykuł na temat Dr. Dobbsa zatytułowany „Co sprawia, że źli programiści są inni” \- i od razu pomyślałem o naszym ekspertze w dziedzinie domen. Z artykułu: > * Ich kod jest duży, niechlujny i pełen błędów. > * Mają bardzo powierzchowną wiedzę na temat swojej ~~problemowej domeny i~~ > swoich narzędzi. > * Ich kod ma dużo kopiowania/wklejania i bardzo mało interesuje ich > technikami, które go redukują. > * Brak uwzględnienia przypadków brzegowych przy nieefektywnym > radzeniu sobie z przypadkiem ogólnym. > * Nigdy nie mają czasu, aby skomentować swój kod lub podzielić go na mniejsze > kawałki. > * Dowody empiryczne odgrywają ~~nie~~ małą rolę w ich decyzjach. > 5,5 na 6. Mój znajomy chce, abym przedstawił sprawę swojemu kierownictwu - w szczególności otrzymałem tego e-maila od jego przełożonego, aby odpowiedzieć na: > ...Ponadto muszę z tobą porozmawiać o tym, jaki efekt _Domena > Ekspert_ kontynuuje wprowadzanie zmian w środowisku na żywo. Jeśli jest to > problem dla Ciebie, muszę to wiedzieć, abym mógł zablokować jego dostęp. Kilka przykładów może pomóc. Moim zdaniem, z technicznego punktu widzenia, to niebezpieczne, żeby wprowadzał zmiany bez przeoczenia. Z drugiej strony, w tym momencie robię tylko jednorazowe kontrakty i nie mam zbytniej ochoty angażować się na tyle głęboko, że zasadniczo spieram się jako jeden z Bobów z przestrzeni biurowej. Chciałbym pomóc mojemu przyjacielowi, ale czuję, że wdaję się w sam środek politycznej bitwy. Co ważniejsze - jeśli się zaangażuję i zasugeruję, aby usunąć jego uprawnienia do edycji, należy to potraktować ostrożnie, aby nie czuć się umniejszonym. Jest bez wątpienia czołowym ekspertem od tego systemu. Mam nadzieję, że jest to znajome terytorium dla niektórych innych zmieniaczy stosów, ponieważ czuję się trochę oszołomiony. Jak mam odpowiedzieć? Czy powinienem argumentować, że nie powinno się mu pozwolić dotykać kodu? Czy powinienem sformułować to jako „żaden programista, bez względu na to, jak doświadczony, nie powinien pracować nad kodem produkcyjnym bez zaznaczenia”? Czy powinienem kłócić się, aby był zaangażowany w kod, ale w procesie przeglądu? Czy powinienem powiedzieć "cieszę się, że mogłem pomóc, ale uh, jestem teraz zajęty!" Inne opcje? Wielkie dzięki!


title: Przecinek jako separator vs. przecinek jako separator

text: W tym filmie mówca mówi: > „Niektórzy ludzie nie wiedzą, jak działają przecinki. Uważają, że powinny one być > separatorami, a nie separatorami. Teraz możesz o nich myśleć w dowolny sposób”. Nie rozumiem różnicy między ogranicznikiem a separatorem (jeśli taki istnieje). Implikacja z filmu jest taka, że teraz (że końcowe przecinki są poprawne), można je traktować jako ograniczniki, a nie separatory... Przy okazji, językiem, o którym mowa, jest JavaScript. Z mojego rozumienia token przecinka ma dwa znaczenia: * jako operator (rzadko używany) * jako separator (w listach argumentów i parametrów, literałach tablicowych i obiektowych itp.) Nie jestem pewien, jak pasuje do tego separator przecinkowy ...


title: unikanie twardego kodowania znajomości algorytmu w testach?

text: Mam pakiet kodu, który ma mi powiedzieć, gdzie rozmieścić elementy. Kiedy dodaję nowy element, może to wymagać zmiany pozycji istniejących elementów, aby zachować moje „drzewo” w formacie, który obiecuje wyszukiwanie log-n. Ostatecznie, kiedy przekażę mu obecny system i nowe elementy do dodania, powinienem otrzymać listę, gdzie dodać nowe elementy i kiedy/gdzie przeniesiono stare elementy. Chcę sprawdzić, czy zwrócony zestaw jest prawidłowy, ale nie jestem pewien, jak to zrobić. Mogę łatwo sprawdzić, czy elementy są umieszczone w prawidłowych lokalizacjach, tj. lokalizacjach, które nie łamią założeń dotyczących mojego „drzewa”, ale to nie gwarantuje, że wykonałem minimalny i najbardziej efektywny ruch elementów. Jednak nie mogę wymyślić, jak sprawdzić, czy ruchy są skuteczne, bez przepisywania dużej części pakietu tylko po to, aby przetestować jego wyniki. Odkąd napisałem pakiet, znam pewne szczegóły dotyczące implementacji. Wiem, że A zostanie przeniesiony do B, ponieważ wiem dokładnie, jaka logika została użyta do podjęcia decyzji o przeniesieniu, ale jest to specyficzne dla implementacji. Zdarzają się przypadki, w których mam wiele równie ważnych wyborów i wybieram jeden sposób, kiedy mogę wybrać inny. Czy „właściwe” jest przeprowadzanie tego rodzaju testów funkcjonalnych, wykorzystując moje zrozumienie algorytmu, aby konkretnie określić, co powinno się przenieść, gdzie? jeśli nie, to jak inaczej mógłbym napisać test, aby mieć pojęcie, że nie robię najbardziej nieefektywnych, ale ważnych ruchów, które są możliwe?


title: Kompilowanie czy korzystanie z gotowych plików binarnych?

text: Czy wydajność będzie lepsza (szybsza), jeśli ręcznie skompiluję źródło komponentu oprogramowania dla rzeczywistej maszyny, na której będzie on używany, w porównaniu do sytuacji, gdy źródło zostało skompilowane na innej platformie, być może dla wielu różnych architektur? Mam dobre wyniki podczas kompilacji kodu źródłowego, który pobrałem i zastanawiam się, czy było to spowodowane kompilacją zamiast pobierania prekompilowanego pliku binarnego, co często ma miejsce w przypadku aktualizacji oprogramowania.


title: Strategia rozgałęziania i wersjonowania bibliotek współdzielonych

text: Te posty wydają się powiązane, ale mój mózg zaczyna się topić, próbując to przemyśleć :P Mój pracodawca właśnie zaczął używać kontroli kodu źródłowego, głównie dlatego, że zanim zatrudnił więcej programistów, „repozytorium” było twardym dyskiem samotnego dewelopera, który pracuje głównie w domu. Cały kod .NET, który napisał, został sprawdzony w _en masse_ , i jest wiele zduplikowanych (czytaj: kopiuj-wklej) funkcjonalności. W tej chwili nasz system SCM to uwielbiona kopia zapasowa. Chciałbym pobrać część zduplikowanego kodu do bibliotek współdzielonych. Zostawiam oryginalne repozytorium w spokoju, abyśmy niczego nie zepsuli — możemy przenieść i/lub zrefaktoryzować istniejący kod w razie potrzeby. Więc skonfigurowałem repozytorium tylko dla nowego kodu, w tym bibliotek. Mój problem kręci się wokół wersjonowania bibliotek bez pogrążania nas w nadmiernym procesie: przyznając, że potrzebujemy bardziej spójnego podejścia, z większą liczbą programistów piszących bardzo podobny kod, kierownictwo i inni programiści są otwarci na reorganizację, ale prawdopodobnie nie zejść dobrze, jeśli rozwiązanie zacznie wpływać na produktywność. Idealnym rozwiązaniem w moim obsesyjnym umyśle jest budowanie bibliotek osobno, z każdym zależnym projektem zbudowanym na celowo wybranych, kompatybilnych wersjach. W ten sposób wiemy dokładnie, którzy klienci mają jakie wersje jakich bibliotek, możemy bardziej niezawodnie odtwarzać błędy, utrzymywać niezależne gałęzie wydań dla produktów i bibliotek oraz nie łamać sobie nawzajem projektów przy zmianie współdzielonego kodu. To sprawia, że aktualizowanie bibliotek jest uciążliwe, szczególnie dla programistów pracujących w domu. Spodziewam się, że biblioteki będą się szybko zmieniać, przynajmniej początkowo, ponieważ (w końcu) łączymy wspólne elementy. Jest całkiem możliwe, że całkowicie się nad tym zastanawiam i byłoby dobrze, gdybyśmy po prostu zbudowali wszystko na podstawie najnowszych zmian w bibliotekach, ale chciałbym przynajmniej być _przygotowany_ na dzień, w którym zdecydujemy, że niektóre komponenty muszą być niezależnie wersjonowane i Rozpowszechniane. Fakt, że niektóre biblioteki będą musiały zostać zainstalowane w GAC, sprawia, że wersjonowanie jest szczególnie ważne. Więc moje pytanie brzmi: czego mi brakuje? Czuję, że skupiłem się na jednym rozwiązaniu i teraz próbuję znaleźć jego wariacje, które sprawią, że zmiany będą płynniejsze. Jakich strategii używałeś wcześniej, aby rozwiązać ten problem? Zdaję sobie sprawę, że to pytanie jest wszędzie; Zrobię co w mojej mocy, aby wyczyścić i wyjaśnić wszelkie wątpliwości. I chociaż bardzo chciałbym używać Mercurial, wydaliśmy już pieniądze na scentralizowany komercyjny SCM (Vault), a zmiana nie jest opcją. Poza tym wydaje mi się, że problem jest głębszy niż wybór narzędzia do kontroli wersji.


title: Utrzymywanie synchronizacji plików zdalnych z plikami lokalnymi?

text: W jaki sposób podczas tworzenia aplikacji internetowych można synchronizować pliki lokalne i pliki zdalne? Jest oczywisty sposób, że za każdym razem, gdy edytujesz plik na swoim komputerze lokalnym, po prostu prześlij ten plik na komputer zdalny. Czy istnieje bardziej wydajny sposób? Pytam, ponieważ używam kontroli subversion i tak łatwo jest synchronizować pliki na zdalnym serwerze. Wszystko, co muszę zrobić, to "commit" i znajdzie pliki, które wymagają wymiany.


title: Aby zmaksymalizować szanse na zatrudnienie programowania funkcjonalnego

text: Biorąc pod uwagę, że przyszłość programowania jest funkcjonalna, w niedalekiej przyszłości chcę otrzymać wynagrodzenie za kod w języku funkcjonalnym, najlepiej Haskell. Zakładając, że dobrze rozumiem język oraz wszystkie podstawowe atrybuty programisty (dobre umiejętności komunikacyjne/poczucie humoru/higiena itp.), na czym powinienem się skoncentrować na nauce, aby zmaksymalizować swoje szanse? Czy są jakieś szczególnie poszukiwane biblioteki, które powinienem znać? Alternatywnie, czy lepszym rozwiązaniem byłby inny język, powiedzmy F#? (Nie przejmuję się tym rodzajem pracy programistycznej, o ile jest ona w miarę interesująca i dość dobrze opłacana oraz z miłymi ludźmi)


title: Model bazy danych do śledzenia polubień/udostępnień/komentarzy w postach na blogu w czasie

text: Moim celem jest śledzenie popularnych postów na różnych blogach w oparciu o aktywność w sieciach społecznościowych w dowolnym momencie. Celem nie jest po prostu zdobycie najpopularniejszych teraz, ale znalezienie postów, które są popularne w porównaniu z innymi postami na tym samym blogu. Na przykład śledzę bloga technicznego, sportowego i plotkarskiego. Blog technologiczny zyskuje o wiele więcej czytelników niż pozostałe dwa blogi, więc w surowych liczbach każdy post na blogu technologicznym zawsze będzie miał więcej wyświetleń w pozostałych dwóch. Powiedzmy, że przeciętny post na blogu technologicznym ma 500 polubień na Facebooku, a pozostałe dwa otrzymują średnio 50 polubień na post. Następnie, gdy pojawi się post na blogu sportowym, który ma 200 polubień na fb i post plotkarski z 300, podczas gdy posty na blogu technicznym mają dziś polubienia 500, chcę podkreślić wpisy na blogu sportowym i plotkarskim (więcej polubień niż przeciętny blog techniczny z większą liczbą # polubień, ale tylko przeciętne dla bloga) Podejście, które zamierzam przyjąć, polega na umieszczeniu wpisu w bazie danych dla każdego posta na blogu. Co x minut (powiedzmy co 15 minut) sprawdzę, ile polubień/udostępnień/komentarzy otrzymał wpis na wszystkich portalach społecznościowych (facebook, twitter, google+, linkeIn). Z czasem więc będzie historia polubień dla każdego posta na blogu, tj. post 1234 po 15 min: 10 polubień fb, 4 tweety, 6 g+ po 30 min: 15 polubień fb, 15 tweetów, 10 g+ ... ... po 48 godzinach: 200 polubień na fb, 25 tweetów, 15 g+ Prowadząc taką historię dla każdego posta na blogu, mogę poznać średnią liczbę polubień/udostępnień/tweetów w dowolnym przedziale czasowym. Na przykład średnia liczba polubień na fb dla wszystkich postów na blogu 48 godzin po opublikowaniu wynosi 50, a konkretny post ma 200. Mogę oznaczyć go jako popularny post i wyróżnić go/wyróżnić. W projekcie należy wziąć pod uwagę możliwość łatwego zapytania o wartości (polubienia/udostępnienia) dla określonego przedziału czasowego, np. polubienia na fb po 30 minutach lub tweety po 24 godzinach w celu obliczenia średnich, z którymi należy porównać (lub średnie być przechowywane w jego własnej tabeli?) Jeśli to podejście jest wadliwe lub może wymagać poprawy, daj mi znać, ale nie jest to moje główne pytanie. Moje główne pytanie brzmi, jak powinien wyglądać schemat bazy danych do przechowywania tych informacji? Zakładając, że przyjęto powyższe podejście, próbuję dowiedzieć się, jak wyglądałby schemat bazy danych do przechowywania polubień w czasie. Jestem nowicjuszem w bazach danych, po zapoznaniu się z podstawowymi informacjami widzę, że wskazane jest stworzenie bazy danych 3NF. Wymyśliłem następujący możliwy schemat. Schemat 1 DB Popularne posty Tabela: Post post_id ( klucz podstawowy (pk) ) tytuł adresu URL Tabela: Aktywność społeczna Activity_id (pk) typ url (fk) (np. facebook, twitter, g+) wartość znacznik czasu To był mój początkowy instynkt (na podstawie mojego bardzo ograniczona wiedza na temat bazy danych). O ile rozumiem ten schemat byłby 3NF? Szukałem projektów podobnego modelu bazy danych i znalazłem to pytanie na stackoverflow, http://stackoverflow.com/questions/11216080/data-structure-for-storing-height-and-weight-etc-over-time-for- wielu użytkowników . Scenariusz w tym pytaniu jest podobny (rejestrowanie wagi/wzrostu użytkowników w godzinach nadliczbowych). Biorąc zaakceptowaną odpowiedź na to pytanie i stosując ją do mojego modelu, otrzymujemy coś takiego: Schemat 2 (tak samo jak powyżej, ale podziel aktywność społecznościową na 2 tabele) DB Popular Posts Table: Post post_id (pk) URL title Tabela: Social Pomiar Measurement_id (pk) post_id (fk) timestamp Tabela: Social stat_id stat_id (pk) Measurement_id (fk) type (np. facebook,twitter,g+) value Zaletą, jaką widzę w schemacie 2, jest to, że prawdopodobnie będę chciał uzyskać dostęp do wszystkich wartości na dany czas, tj. dokonując pomiaru po 30 minutach od opublikowania posta, jednocześnie sprawdzę liczbę polubień na fb, udostępnień na fb, komentarzy na fb, tweetów, g+, linkedIn. Tak więc z tym schematem może być łatwiej uzyskać wszystkie statystyki dla pomiaru_id odpowiadającego określonemu czasowi, tj. wszystkie statystyki społecznościowe dla postu 1234 w czasie x. Kolejną myślą, jaką miałem, jest to, że skoro nie ma sensu porównywać liczby polubień na fb z liczbą tweetów lub udostępnień w g+, może warto rozdzielić każdy pomiar społecznościowy na osobną tabelę? Schemat 3 DB Tabela popularnych postów: Tytuł adresu URL posta post_id (pk) Tabela: wartość znacznika czasu fb_likes fb_like_id (pk) post_id (fk) Tabela: fb_shares fb_shares_id (pk) wartość znacznika czasu post_id (fk) Tabela: tweety tweets__id (pk) post_id (fk) ) wartość znacznika czasu Tabela: google_plus google_plus_id (pk) post_id (fk) wartość znacznika czasu Jak widać, generalnie jestem zagubiony/nie jestem pewien, jakie podejście przyjąć. Jestem pewien, że to typowy problem z bazą danych (przechowywanie pomiarów w godzinach nadliczbowych, czyli statystyka temperatury), który musi mieć wspólne rozwiązanie. Czy istnieje na to wzór/model projektowy, czy ma on nazwę? Próbowałem wyszukać „okresowe zbieranie danych w bazie danych” lub „pomiary bazy danych w czasie”, ale nie znalazłem niczego konkretnego. Jaki byłby odpowiedni model do rozwiązania potrzeb tego problemu?


title: Jak stworzyć własny język programowania w oparciu o JVM?

text: Jestem ciekaw, jak stworzyć język programowania oparty na JVM, więc próbowałem zdobyć trochę informacji online, ale informacje, które otrzymałem, są dość fragmentaryczne. To, co znalazłem, to głównie informacje związane z pojedynczymi technologiami, takimi jak ASM, Eclipse JDT, JFlex, itp., ale chciałbym wiedzieć, jakie są główne kroki, które należy wdrożyć i sugerowane technologie dla tych kroków. Dowolny pomysł? Cóż, to pytanie brzmi dość szeroko, ale zacząłem myśleć, że tak nie jest. Ciągle szukałem informacji w Internecie i można (względnie łatwo) uzyskać podstawowy dostosowany język, używając tylko ANTLR (lub alternatywnego, takiego jak JavaCC) używanego przez Groovy'ego, mieszając go z ASM (alternatywny BCEL lub ten sam kompilator Javac). Pierwsza pomaga zbudować niezbędną gramatykę/parsowanie/AST, a druga do wygenerowania końcowego kodu bajtowego po pomyślnym przeanalizowaniu. BTW od tego samego autora ANTLR znalazłem tę książkę, której coraz mniej szukałem: http://pragprog.com/book/tpdsl/language-implementation-patterns


title: Kim są pierwsza i druga strona?

text: Więc to jest czysta ciekawość. Od dłuższego czasu słyszałem określenie 3rd party, jak w „bibliotece 3rd party”. Zastanawiam się, dlaczego mówimy 3. a nie 2. (lub 4.)? Kim jest pierwsza i druga strona i skąd wzięło się określenie?


title: Strategie korzystania z narzędzia do oceny metryki kodu

text: Czy narzędzia do oceny metryki jakości kodu, takie jak Sonar, powinny być zintegrowane z IDE w celu przeprowadzania lokalnej analizy, czy też powinny być częścią procesu budowania (np. zintegrowane z maven) w celu ciągłej kontroli, czy też powinno to być połączenie obu? Jak możemy maksymalnie wykorzystać moc takich narzędzi?


title: Jakie są początki deklaracji funkcji publicznych/prywatnych?

text: ## Pytanie Jakie są początki paradygmatu funkcji publicznych/prywatnych? ## Tło Na czacie pojawiło się pytanie o pliki nagłówkowe w C, a ich użycie ma głównie pomóc kompilatorowi, a nie programiście. Rozumiem jednak, że jest to pierwsze użycie koncepcji funkcji „prywatnych”, czyli funkcji, które nie są prototypowane w pliku nagłówkowym. Gdyby C nie używał plików nagłówkowych do deklarowania funkcji, czy nadal mielibyśmy obecną koncepcję funkcji publicznych i prywatnych, jak widać w C# lub Javie? A może ta koncepcja została pierwotnie opracowana w innym miejscu i po prostu wdrożona w schemacie C Header/Source?


title: Pobieranie biblioteki dla programistów na komputery Mac

text: Nie jestem pewien, na której stronie SE to należało, więc pomyślałem, że spróbuję tego. Za każdym razem, gdy przeglądam Mac Developer Library na developer.apple.com, w prawym górnym rogu okna pojawia się link do wersji PDF. Czy ktoś kiedykolwiek pobrał je wszystkie i połączył w jeden plik? Chcę pobrać bibliotekę programistów Mac dla mojego Kindle'a i wydaje mi się, że nie ma wersji .mobi, więc szukam wersji PDF. Z góry dziękuję i przepraszam, jeśli nie jest to właściwa strona.


title: Jak radzić sobie z nadmierną komplikacją?

text: Często łapię się na niepotrzebnie skomplikowanym kodzie (smutne, ale prawdziwe). Czy istnieje jakiś zestaw zasad, dyscypliny itp., które pomogą tego uniknąć? (poza zasadą KISS, bo ją znam, ale często zapominam, jeśli chodzi o prawdziwy kod :)


title: System głosowania, taki jak wymiana stosów

text: Próbuję stworzyć system głosowania, taki jak Stack Exchange. Czy powinienem utworzyć tabelę i wstawić wartości, takie jak następujące, a następnie podsumować „głosowanie”, czy są na to lepsze sposoby? Nazwa tabeli: identyfikator głosu userid identyfikator_artykułu głos 1 1001 12 1 2 1002 12 -1 3 1003 12 1 4 1002 10 -1 Nazwa tabeli: id_artykułu tytuł_artykułu treść_artykułu autor_artykułu 12 coś coś 10 coś coś coś Z powyższego przykładu całkowita liczba głosów na artykuł `12` to `1+(-1)+1 = 1`


title: Użytkownik blankietowy w instrukcji select na indeksowanej kolumnie varcharcolumn

text: To pytanie jest oparte na niektórych testach, które przeprowadziłem ostatnio, aby lepiej zrozumieć system indeksowania SQL. **Tabela z 500 tys. wpisów, silnik InnoDB** To proste zapytanie wybierające w polu `varchar`. Kolumna `name` jest **nie** indeksowana. ![tu wpisz opis obrazu](http://i.stack.imgur.com/0IhSU.jpg) Po zindeksowaniu są to wyniki: ![tu wpisz opis obrazu](http://i.stack.imgur.com /LjlvL.jpg) Wszystko w porządku do tego momentu. Kiedy próbuję umieścić symbol wieloznaczny na początku klucza wyszukiwania, mimo że kolumna jest zindeksowana, czas wyniku jest taki sam jak w przypadku nieindeksowanym: ![wstaw tutaj opis obrazu](http://i .stack.imgur.com/lEMxk.jpg) Zastanawiam się, dlaczego tak się dzieje? Czy to dlatego, że nie można już używać indeksu? Czy jest to w jakikolwiek sposób rozwiązane? czy mogę osiągnąć lepszy czas wyszukiwania, nawet jeśli używam `%` zarówno na początku, jak i na końcu szukanego ciągu? Dziękuję Ci!


title: jak ładnie używać stałej std::string w c++

text: W moim obecnym projekcie kodu jest strasznie dużo stałych ciągów, których używam do drukowania komunikatów o błędach. Zakodowanie takich ciągów na sztywno jest ogólnie uważane za złą praktykę. Teraz szukam „czystego sposobu”, aby uwzględnić te ciągi w moim programie. Dlatego napisałem "constants.h" i "constants.cpp", które wyglądają mniej więcej tak: #ifndef CONSTANTS_H_ #define CONSTANTS_H_ extern std::string error_message_1; #endif i constants.cpp: #include "constants.h" std::string error_message_1 = "to jest tylko próbka, a nie moja aktualna konwencja nazewnictwa. przejdź do pytania ;-)" Więc możesz zobaczyć problem, ja z tym: z powodu wielu komunikatów o błędach, sama nazwa zmiennej jest dość długa. Komunikat o błędzie jest jeszcze dłuższy, więc powoduje awarię standardowych 80 znaków w jednym wierszu kodu. Oczywiście chcę, żeby mój kod był ładny i czysty. Nie lubię wychodzić daleko poza 80 znaków na linię kodu. Nie lubię też czegoś takiego: std::string error_message_1 = "to jest tylko próbka o tym, jak" "wstawić jeden ciąg w wielu wierszach" "w kodzie źródłowym. To też nie jest zbyt ładne. ."; std::string msg = "i nagle pojawia się jedna linijka, która jest dobra."; std::string error_message_with_longer_name = "i jest nawet " "brzydszy bez " "równie długich nazw zmiennych"; Przechowywanie ciągów w zewnętrznym pliku, który można odczytać na początku programu, również nie wydaje się optymalne, ponieważ kompilator nie może ostrzegać o brakujących ciągach. Zasadniczo byłby to bałagan w utrzymaniu. Więc co z tym zrobisz? Czy jest taka fajna rzecz jak „Resources”, którą znam z rozwoju Androida (czy ogólnie Java?)? Uwaga: Proszę NIE mów mi, że moja konwencja nazewnictwa jest zła. Powyższe to tylko przykład. Nie tak to wygląda ;-)


title: Jak poświęcić mniej czasu na debugowanie?

text: Zgodnie z zasadą Pareto programista poświęca tylko 20% swojego czasu na naprawdę przydatne rzeczy. Spędzam 80% czasu na debugowaniu, naprawianiu drobnych rzeczy, aby wszystko działało. Czy istnieje sposób na spędzenie mniej czasu na debugowaniu?


title: Czy firma Microsoft ma bezpłatną wersję programu Visual Studio?

text: Nie wersja próbna, ale naprawdę darmowa wersja, którą oferują użytkownikom do pobrania .... Zastanawiałem się, czy w jakiś sposób przegapiłem opcję na ich stronie internetowej. Zrobi to dowolna wersja programu Visual Studio. Jeśli nie, to czy istnieją alternatywy typu open source (mające podobną funkcjonalność lub prawdopodobnie zdegradowany odpowiednik) programu Visual Studio? Używam systemu Windows 7, jeśli to ma jakiekolwiek znaczenie...


title: Pomysły na zmaksymalizowanie nauki w ciągu roku przerwy na naukę programowania?

text: Jestem uczennicą szkoły średniej, która za miesiąc ma ukończyć szkołę. Po czym chcę zrobić rok przerwy, aby całkowicie poświęcić się programowaniu komputerowemu. Będę wdzięczny za pomysły na rzeczy do zrobienia w tym roku, aby maksymalnie wykorzystać ten rok przerwy.


title: Jakie są procedury programistyczne w dużych aplikacjach internetowych?

text: Interesuje mnie poznanie różnych procedur i środowisk potrzebnych do utrzymania dużej aplikacji. Na przykład w moim przypadku używam lokalnego serwera CentOS, na którym rozwijam swoje aplikacje i korzystam z systemu kontroli wersji na niektórych aplikacjach, a następnie wgrywam go na moje konto host-gator i uruchamiam na żywo. Jest to bardzo prosta procedura iw tej chwili jedyna jaką znam. Pracowałem tylko jako freelancer, więc interesowałyby mnie procedury i środowiska dużych firm technologicznych. Jakie są ogólne nakazy i zakazy tworzenia dużych aplikacji? Najlepsze praktyki?


title: Czy istnieje metodologia oprogramowania nowsza niż Agile?

text: Czy istnieje proces tworzenia oprogramowania nowszy niż zwinny? Mam na myśli wodospad, potem zwinny, a potem co?


title: Co zrobić, gdy klient prosi o coś nierozsądnego (z mojego punktu widzenia)

text: Jestem niezależnym programistą i niedawno ukończyłem stronę internetową, wszystko działa dobrze, ale był jeden użytkownik, który skarżył się mojemu klientowi, że nie może się zalogować. Ten problem był wyraźnie związany z ograniczeniem plików cookie / starą przeglądarką (nie mogłem nie stwarzam problemu sam, a setki użytkowników pracują z witryną w porządku) Teraz mój klient powiedział: zapłaciłem ci za zrobienie czegoś i ktoś narzeka; więc nie wykonałeś poprawnie swojej pracy. Co mogę zrobić w tej sytuacji i jak sobie z tym radzicie?


title: Jaką uwagę należy zwrócić na patenty podczas tworzenia oprogramowania?

text: Powiedzmy, że chcę stworzyć program do edycji obrazu podobny do Photoshopa. Czy jest prawdopodobne, że pewne wzorce i podejścia do interfejsów są opatentowane i jeśli użyję ich również w swoim programie, mogę zostać pozwany? Czy muszę aktywnie uważać, aby nie robić rzeczy w taki sam sposób, jak konkurencyjne oprogramowanie? Jak sprawić, by funkcje nadal wydawały się znajome osobom przechodzącym z istniejących programów? I jaka to różnica, jeśli jest to organizacja non-profit?


title: Responsywne projektowanie stron internetowych a sniffing user-agent

text: Funkcja zapytań `media` CSS3 stworzyła wiele interesujących możliwości w zakresie tworzenia stron internetowych, które dostosowują się do wielu różnych rozmiarów ekranu i urządzeń. Jednak w praktyce zaczynam odczuwać, że funkcja zapytań „media” CSS3 i cały ruch „Responsive Web Design” mogą nie spełniać swoich obietnic. Problem, który widzę, polega na tym, że ostatecznie twórcy stron internetowych dbają głównie o to, czy ich użytkownicy przeglądają treści za pomocą komputera stacjonarnego, tabletu lub urządzenia mobilnego. Ale CSS3 dostarcza tylko środków do wykrywania _rozdzielczości ekranu_. Teoretycznie wykrywanie rozdzielczości ekranu wydaje się świetnym sposobem na dostosowanie się do różnych urządzeń. Ale w praktyce... Załóżmy, że mamy prostą funkcję JavaScript, która wyświetla tylko szerokość ekranu: function foo() { alert(screen.width); } Na moim Blackberry Touch to wyjście: 768 Na moim Samsung Galaxy to wyjście: 800 Więc...um, w tym momencie rozdzielczość popularnych smartfonów zbliża się do rozdzielczości pulpitu. Możliwość wykrycia, czy użytkownik przegląda Twoją witrynę za pomocą smartfona, tabletu czy komputera stacjonarnego, wydaje się coraz trudniejsza, jeśli chodzi tylko o rozdzielczość ekranu. To sprawia, że kwestionuję całą mądrość stojącą za całym ruchem CSS3 „Responsive Web Design” opartym na zapytaniach mediów. Wygląda na to, że funkcja zapytań „media” lepiej nadaje się do dostosowywania się do okna przeglądarki, które zmienia rozmiar na ekranie komputera stacjonarnego, niż do różnych urządzeń mobilnych. Inną możliwą techniką wykrywania urządzeń mobilnych lub tabletów jest użycie wykrywania funkcji poprzez sprawdzenie, czy zdarzenie „ontouchstart” jest obsługiwane. Ale nawet to staje się coraz bardziej zawodne, ponieważ wiele ekranów stacjonarnych zaczyna obsługiwać dotyk. **Pytanie:** A więc... jako programista stron internetowych, jeśli nie mogę polegać na RWD lub wykrywaniu funkcji, czy **podsłuchiwanie klienta użytkownika** (tak jak zawsze zawodne) jest naprawdę najlepszą opcją wykrywania urządzeń mobilnych urządzenia?


title: Jak zarządzać automatycznymi wiadomościami e-mail wysyłanymi z aplikacji internetowej

text: Projektuję aplikację internetową i zastanawiam się jak zaprojektować architekturę do zarządzania wysyłaniem automatycznych wiadomości e-mail. Obecnie mam tę funkcję wbudowaną w moją aplikację internetową, a wiadomości e-mail są wysyłane na podstawie danych wejściowych / interakcji użytkownika (takich jak tworzenie nowego użytkownika). Problem polega na tym, że łączenie się bezpośrednio z serwerem pocztowym zajmuje kilka sekund. Zwiększenie skali mojej aplikacji będzie w przyszłości znaczącym wąskim gardłem. Jaki jest najlepszy sposób na zarządzanie wysyłaniem dużej liczby automatycznych wiadomości e-mail w ramach mojej architektury systemu? Nie będzie dużej ilości wysyłanych e-maili (maksymalnie 2000 dziennie). E-maile nie muszą być wysyłane natychmiast, nawet 10 minut opóźnienia jest w porządku. Aktualizacja: Jako odpowiedź podano kolejkowanie wiadomości, ale jak miałoby to być zaprojektowane? Czy zostanie to obsłużone w aplikacji i przetworzone w cichym okresie, czy też muszę utworzyć nową „aplikację pocztową” lub usługę internetową, aby zarządzać kolejką?


title: Aplikacja .Net w systemie operacyjnym Android

text: Jestem administratorem baz danych, ale teraz muszę wiedzieć coś o aplikacjach na Androida. Muszę uruchomić istniejącą aplikację .Net w systemie operacyjnym Android, podczas surfowania po internecie dowiedziałem się, że mogę użyć MonoDroid do zbudowania i uruchomienia mojej aplikacji na systemie operacyjnym Android. Jestem nowy w tej aplikacji na Androida i MonoDroid, więc **Moje pytania:** * Czy można uruchomić istniejącą aplikację .Net na Androidzie bez modyfikacji? * Jeśli nie, czy istnieje znany zestaw zmian niezbędnych do uruchomienia aplikacji .NET w systemie Android? Dziękuję Ci.


title: Jak załadować doświadczenie menedżerskie?

text: Większość stanowisk menedżerskich inżynierów wymaga X-letniego doświadczenia menedżerskiego w opisie stanowiska. Oznacza to, że jako indywidualny współpracownik nigdy nie mogę się zakwalifikować. Ale to doświadczenie musi skądś pochodzić. Jak mogę załadować doświadczenie menedżerskie? Czy awans wewnętrzny na jakąś pozycję lidera jest jedynym możliwym sposobem, jeśli nie założę własnej firmy?


title: – Masz do nas jakieś pytania? W wywiadzie

text: Znasz dość dobrze potencjalną firmę, ale jesteś pytany „Masz do nas jakieś pytania?”. Aby okazać zainteresowanie, na jakie z Twoich ulubionych pytań należy odpowiedzieć?


title: Jak najlepiej podejść do czytania kodu innych osób?

text: Jestem młodszym programistą i próbuję uczyć się czytając kod open source (AutoMapper). Moje podejście polegałoby na tym, aby najpierw zrozumieć wymagania oprogramowania/funkcji. Następnie poszukaj szczegółów na temat implementacji poszczególnych wymagań i zagłęb się głębiej w kod, aż dojdę do końca. Powtarzam, dopóki nie spełnię każdego wymagania. Rozumiem, że moje pytanie nie ma „najlepszej” odpowiedzi. Proszę dać mi trochę informacji o tym, co działa dla was. Dziękuję!


title: Dlaczego w Go jest „nowość”?

text: Nadal zastanawia mnie, dlaczego w Go pojawiły się „nowe”. Kiedy chcesz utworzyć instancję struktury, robisz t := Thing{} i oczywiście możesz uzyskać wskaźnik do nowej instancji, wykonując t := &Thing{} Ale jest też taka możliwość : t := new(Thing) Ten ostatni wydaje mi się trochę obcy. `&Thing{}` jest tak samo jasne i zwięzłe jak `new(Thing)` i używa tylko konstrukcji, których często używasz gdzie indziej. Jest również bardziej rozszerzalny, ponieważ możesz zmienić go na `&Thing{3}` lub `&Thing{Feets:7}`. Moim zdaniem posiadanie dodatkowego słowa kluczowego1 jest kosztowne, czyni język bardziej złożonym i zwiększa to, co musisz wiedzieć. I może maskować nowicjuszom to, co kryje się za tworzeniem instancji. Tworzy też jeszcze jedno zastrzeżone słowo. Więc jakie jest uzasadnienie `nowego`? Czy to jest coś pożytecznego? Czy powinniśmy go używać? * * * 1 : Tak, wiem, że to nie jest słowo kluczowe na poziomie gramatycznym, możesz je cień, ale to nie zmienia faktu, że dla rozsądnego programisty jest to słowo zastrzeżone.


title: Określ, że odrodzony proces powraca do rodzica

text: Używam YED do zbudowania schematu blokowego aplikacji i nie mogę wymyślić „ładnie wyglądającego” sposobu reprezentowania, że wywołanie GUI w celu odrodzenia procesu zapętla się z powrotem do procesu GUI po jego zakończeniu, poza rysowaniem kolejnej strzałki do procesu GUI. Czy istnieje lepszy sposób na przedstawienie procesu powracającego do rodzica przy powrocie/wyjściu, inny niż rysowanie kolejnej strzałki z powrotem do rodzica?


title: Czy inżynierowie oprogramowania naprawdę muszą już znać rzeczy niskiego poziomu?

text: Ponieważ rozwijają się języki programowania wysokiego poziomu, takie jak C#, Java itp., wiele osób twierdzi, że będą one alternatywą dla języków takich jak język asembler i C/C++, co daje dostęp i kontrolę do sprzętu komputerowego, ponieważ programiści powinni się skupić na stworzeniu programu i rozwiązaniu problemu, nie marnowaniu czasu na zajmowanie się komputerem, aby działał. Ponieważ sprzęt wciąż się poprawia, różnica wydajności między C/C++ i Javą nie będzie znacząca, a duże gry mogą być programowane w języku takim jak Java. To jest ogólna idea, którą krótko podsumowuję po zapoznaniu się z tym tematem w Internecie. Czy myślisz, że stanie się to realne w najbliższej przyszłości? Czy to oznacza, że wszystko, czego dowiadujemy się o rzeczach niskiego poziomu, nie jest już praktyczne dla branży oprogramowania? Czy to oznacza, że język asemblera i C/C++ staną się istotne tylko dla inżynierów elektryków, ponieważ będą jedynymi, którzy będą musieli programować swoje komponenty elektryczne? * * * Edytuj: A ile nauki wystarczy? Jeśli nauczymy się zbyt wielu rzeczy niskiego poziomu, w końcu staniemy się bardziej zorientowani w elektrotechnice lub jeśli nauczymy się za dużo matematyki, moglibyśmy uczyć się, jak zostać matematykami, a nie programistami. Chcę tylko wiedzieć, czy rzeczy matematyczne, których się nauczyłem (wziąłem kurs matematyki, który obejmuje materiał podobny do tej książki (używano innego podręcznika): Matematyka dyskretna i jej zastosowanie) są faktycznie tak samo przydatne, jak nasz zestaw umiejętności programowania. Wiele ćwiczeń matematycznych może zająć większość z nas godzinami, a jeśli traktujesz je poważnie, będziesz miał mniej czasu na naukę programowania. Na naszym forum gamedev nawet matematyka i fizyka mają tylko jedną sekcję w porównaniu do części programowania. Właśnie zacząłem czytać "Sztukę Programowania Komputerowego". Matematyka jest omówiona tylko w około jednej czwartej książki, ale ćwiczenie jest trudne dla nas, niematematyków. Nawet taka „podstawowa” matematyka, czy używaliśmy jej tak często w naszej karierze? Niektórzy prawdopodobnie powiedzieliby mi, że czytanie książki TACOP to strata czasu i prawdopodobnie powinni poświęcić czas na coś bardziej praktycznego, mimo że książka dotyczy programowania (nieco bardziej akademickie w porównaniu z książką wyjaśniają podobne rzeczy). Ale myślę, że autor włożył dużo czasu i wysiłku, aby to wyprodukować. Potrafi nawet napisać pełny zestaw 5 książek, podczas gdy my – widzowie – mamy tylko misję, by je przeczytać. Dlaczego nie?


title: Czy używasz technik sprawdzania poprawności zarówno po stronie klienta, jak i po stronie serwera?

text: Czy podczas walidacji danych wejściowych od użytkownika używasz obok siebie zarówno technik walidacji po stronie klienta, jak i po stronie serwera, np. przez formularz kontaktowy? Jeśli tak, czy to naprawdę konieczne? Czy jesteś ponad inżynierią? Pozdrawiam TDG


title: Specjalnie dla JS, CSS, HTML: jaka jest różnica między optymalizacją, kompresją, minifikacją, porządkowaniem, konkatenacją?

text: Kiedy mówimy o kodzie źródłowym i pliku, który zawiera kod, taki jak CSS, HTML, JavaScript, a także mówimy o wydajności strony internetowej lub aplikacji, jakie są różnice między tymi terminami? * Optymalizacja * Kompresja * Minifikacja * Porządkowanie * Konkatenacja


title: Włączenie wzorców projektowych GoF w Objective-C bez klas abstrakcyjnych/wirtualnych

text: Jako ktoś, kto czuje się coraz bardziej komfortowo pracując w Objective-C, chciałbym móc włączyć więcej wzorców projektowych i funkcji OOP do moich projektów, ale mam trudności z ich implementacją zgodnie z wymaganiami GoF, ponieważ nie można stworzyć klasy abstrakcyjnej. Chcę: 1) uniknąć wielu podklas, 2) zminimalizować użycie `respondsToSelector`, `conformsToProtocol` itp., 3) unikać technik takich jak `swizzling` w jak największym stopniu, 4) zmaksymalizować enkapsulację i 5) uniknąć długich warunków lub wiele `typedef enum`. Na przykład w ostatnim projekcie chciałem oddzielić `RestKit` (bibliotekę dostępu do usług RESTful) od moich podklas `UIViewController`. Zrobiłem to, włączając `Adapter` między nimi z klasą bazową `ModelController`, która może uzyskać dostęp do modeli. Stworzyłem również protokół `ModelControllerDelegate` dla moich VC do podłączenia. Ale napotkałem duże trudności w tworzeniu `ModelControllerDecorator` bez użycia abstrakcyjnej klasy bazowej. Chciałem mieć możliwość udekorowania mojego `ModelController` różnymi aspektami, takimi jak `PaginationDecorator`, `CompressionDecorator`, `QueryableDecorator` i tak dalej. Słyszałem, że używanie Objective-C++ jest jednym ze sposobów na włączenie większej liczby funkcji OOP, ale co powiesz na używanie standardowych funkcji języka Objective-C? W jaki sposób udało Ci się włączyć do swoich projektów wzorce projektowe GoF, które wykorzystują cechy stylu C++ (takie jak klasy „wirtualne”)?


title: Dlaczego maven jest tak powolny w porównaniu do automake'u?

text: Mam projekt Maven składający się z około 100 modułów. Mam powód, aby rozłożyć projekt na tak wiele modułów i nie sądzę, abym je scalał w celu przyspieszenia procesu budowania. Czytałem wiele projektów innych osób, np. sam projekt Maven, Apache Archiva i projekt Hudson, wszystkie składają się z wielu modułów, może prawie 100, mniej więcej. Problem polega na tym, że zbudowanie ich wszystkich zajmuje tyle czasu, 3 godziny na pierwszą kompilację (jest to akceptowalne, ponieważ do pobrania jest wiele artefaktów) i 15 minut na drugą kompilację (jest to niedopuszczalne). W przypadku automake jest podobnie, za pierwszym razem, gdy trzeba _konfigurować_ projekt, przygotować magiczny plik config.h, jest to o wiele bardziej złożone niż to, co robi maven. Ale wciąż jest szybki, może 10 sekund na moim Debianie. Po tym, `make install` wymaga około 10 minut na pierwszą kompilację. Jednak po przygotowaniu wszystkiego, generowane są pliki obiektowe `.o`, nie trzeba ich wcale przebudowywać do drugiej budowy. (W Maven wszystko odbudowuje się za każdym razem.) Bardzo się zastanawiam, jak ludzie pracujący dla projektów Maven mogą wytrzymać tak długo dla każdej kompilacji, po prostu nie mogę siedzieć spokojnie za każdym razem, gdy Maven kompiluje, to też zajęło naprawdę od dawna.


title: Jakie imperatywne języki programowania nie obsługują rekurencji?

text: O ile mi wiadomo, wszystkie współczesne imperatywne języki programowania obsługują rekurencję w tym sensie, że procedura może wywołać samą siebie. Nie zawsze tak było, ale nie mogę znaleźć żadnych twardych faktów za pomocą szybkiego wyszukiwania w Google. Więc moje pytanie brzmi: które języki nie wspierały rekurencji od samego początku i kiedy ta obsługa została dodana?


title: Tworzenie aplikacji front-end

text: Chcę rozpocząć poboczny projekt w firmie, w której pracuję. Obecnie jesteśmy firmą w 100% internetową. Mam pomysł na fajny projekt, który zainstaluje aplikację na twoim komputerze. W każdym razie nie jestem tutaj, aby omawiać produkt. Jestem tutaj, aby zapytać o rozwój aplikacji frontendowych. Jestem dobrym programistą C++ ale tylko algorytmów (mam ponad 10 lat w tworzeniu stron internetowych). Nigdy wcześniej nie tworzyłem aplikacji UI (pomijając stare czasy VB). Chciałbym poznać moje opcje dla aplikacji frontendowej dla systemu Windows, osx i linux. Jakie są obecnie popularne wybory interfejsu użytkownika aplikacji w systemie Windows, osx i linux?


title: Jak przetestować stronę internetową?

text: Uważam, że naprawdę trudno jest podzielić zadanie tworzenia strony internetowej na zespół ludzi. Problem w tym, że strona internetowa powinna mieć spójny wygląd i być zintegrowana w oczach użytkowników. Styl i szablon strony muszą być wspólne dla wszystkich części. Dostęp do większości stron jest ograniczony, system kontroli dostępu jest zależny od wszystkich modułów. Niektóre moduły wymagają danych z innych modułów (nigdy nie możesz ponownie zadać użytkownikowi tego samego pytania). Chociaż te moduły mogą działać niezależnie. Dane testowe muszą być generowane przez inne. Wraz ze wzrostem kodu strona staje się coraz trudniejsza do przetestowania. Chociaż utrzymujemy skrypt automatyzujący wdrażanie. Ale jeśli coś pójdzie nie tak, programista nie może sam rozwiązać problemu, ponieważ nie jest zaznajomiony z pracą innych. Co gorsza, to konfiguracja. Ustawienia serwera są w dużym stopniu zależne od komputera. Niektóre funkcje wymagają planowania zadań, więc istnieje kilka konfiguracji crontab. Niektóre moduły wymagają innych demonów działających w backendzie. Niektóre aplikacje wymagają przepisywania adresów URL. Aby przetestować stronę, musimy skonfigurować wszystkie zależności wszystkich modułów na wszystkich maszynach. Czy jest jakaś sugestia, jak przetestować stronę internetową?


title: Proces Agile: jak i co należy dokumentować?

text: Jakiś czas temu firma, w której pracuję, zleciła projekt deweloperski firmie zewnętrznej. Przy tworzeniu rozwiązania zastosowali zwinne praktyki. Jednak poproszeni o dokumentację odpowiadali po prostu, że jest ona wymagana, ponieważ została włączona do wiki lub jako część ich sprintów. Wyjechali po zakończeniu projektu, z wszystkimi członkami zespołu projektowego poza jednym. Strona wiki projektu została zamknięta, gdy nadeszła roczna subskrypcja. Kiedy odeszli, zabrali większość wiedzy i zrozumienia tego, co zostało z nimi opracowane. Więc mam 2 główne pytania; 1. Czy to normalne dla agile, czy tylko wymówka, by nie chcieć tego pisać? 2. Jaka jest branżowa norma dotycząca dokumentacji w projektach zwinnych w celu rejestrowania wymagań rozwojowych, projektów, kluczowych decyzji i kontekstu?


title: Lista kontroli dostępu z wieloma rolami

text: Zwykle mam 2 role na większości moich stron internetowych, tj. `Admin` i `Member` i tworzę jeden folder dla każdej Roli, np. /Root /admin /member, ale teraz wymyśliłem `10 ról` oprócz `Admin` i każdej rola reprezentuje dział w firmie. I każda rola ma dostęp tylko do swoich `tablic działu` np. użytkownicy z rolami `kont` mają dostęp do tabel związanych z informacjami o kontach itd... Teraz nie jestem pewien, czy będzie to lepszy sposób na utworzenie tylu folderów jako liczba ról. I pod tym folderem będę miał prawie te same szablony i te same Zapytania, gdzie szablony mogą zawierać różne `linki` a `Zapytania` mogą być różne `Nazwa tabeli` Co doprowadzi do koszmaru związanego z konserwacją. Jaki będzie najlepszy sposób na poradzenie sobie z tym?


title: Jakie będą możliwości integracji opartej na chmurze („Cloud Service Bus”)

text: Zarówno cloud computing (w szczególności SaaS), jak i SOA promują ideę usług przekształcania oprogramowania w towar. Jednak większość dostawców SaaS koncentruje się głównie na dostarczaniu usługi użytkownikowi końcowemu, ale produkty nie są dobrze przystosowane do integracji zaplecza. Większość dostawców zapewnia tylko dostęp API do swoich usług. Niektóre zapewniają również integrację z innymi _specyficznymi_ usługami SaaS. Jeśli jednak ktoś chce agregować dane i funkcje z różnych usług, które nie były planowane do współpracy, musi użyć tradycyjnych narzędzi, aby uzyskać do nich dostęp i je skonsolidować - tracąc wiele korzyści SaaS * *Konkretny przykład** Rozważmy organizację, która korzysta z rozwiązania SaaS do CRM i innego rozwiązania do zarządzania zasobami ludzkimi. oba z nich prawdopodobnie będą zawierać API (REST lub WS), które pozwolą na interakcję z nimi. Jednak większość szans, że nie pozwolą na bezpośrednią synchronizację profili użytkowników między nimi. W tym celu należy pobrać dane z systemu HR i przesłać je do systemu CRM. ten mechanizm nie jest obecnie dostępny jako usługa w chmurze. i będziesz musiał użyć "standardowych" technologii integracyjnych - albo dedykowanych narzędzi (ESB, EAI) albo niestandardowego kodu, który będzie działał na serwerze, który musisz utrzymywać. Jak myślisz, co umożliwi integrację w chmurze („Cloud Service Bus”) Kilka pomysłów * Opracowanie wspólnych interfejsów API usług sieciowych dla dostawców SaaS (podobnie jak wszyscy dostawcy poczty e-mail obsługują SMTP i POP3, będzie wspólny protokół CRM i protokół HR) * Rozwój usług brokerskich opartych na chmurze z takimi możliwościami, jak kolejkowanie wiadomości, silniki transformacji, silniki przepływu pracy itp.


title: Czy programowanie obiektowe powinno być pierwszą rzeczą, jakiej uczą się uczniowie?

text: Moje liceum uruchamia program, w którym zamiast podążać za „tradycyjną” metodą nauczania programowania (uczenie się zmiennych, potem operacje, pętle, metody i wreszcie OOP), uczniowie są od razu wprowadzani w programowanie obiektowe bez żadnej innej wiedzy programistycznej. Czy to dobry pomysł? Osobiście uważam, że nauczanie OOP na początku jest błędne - kiedy zapoznałem się z OOP, mogłem docenić moc, jaką daje mi to przy projektowaniu złożonych programów, ponieważ byłem już zaznajomiony z programowaniem proceduralnym. Wprowadzanie studentów do OOP na tak wczesnym etapie może sprawić, że nie zorientują się, jaką moc i elastyczność zapewnia programistom OOP. Pojawiają się też problemy praktyczne – uczniowie mogą mieć trudności z projektowaniem zajęć, gdy nie zostali odpowiednio zapoznani z metodami (jak działają, kiedy należy ich używać itp.). Nie mam zbyt wielu szczegółów na temat programu kursu, ale według mojego rozumienia, studenci mają zostać wprowadzeni w OOP na swojej trzeciej lekcji, po nauczeniu zmiennych i operacji (jak również standardowych danych wejściowych/wyjściowych). Jeśli ma to znaczenie, językiem, którego uczy moja szkoła, jest C#.


Kiedy można wysłać produkt ze znanym błędem?


title: Jak upewnić się, że Twoja firma nie pójdzie pod wodę, jeśli Twoi programiści wygrają na loterii?

text: Mam pod sobą kilku programistów, wszyscy radzą sobie świetnie i oczywiście bardzo mądrze. Dziękuję Ci bardzo. Problem polega jednak na tym, że każdy z nich jest odpowiedzialny za jeden główny obszar, o którym nikt inny w zespole nie ma pojęcia, czym jest. Oznacza to, że jeśli któryś z nich zostanie usunięty, moja firma jako biznes jest martwa, ponieważ nie można ich zastąpić. Zastanawiam się nad sprowadzeniem nowych programistów do ich obsługi, na wypadek gdyby potrącił ich autobus, zrezygnowali lub cokolwiek. Ale obawiam się, że 1. Starzy programiści mogą aktywnie sprzeciwiać się idei transferu wiedzy, obawiając się, że kopia zapasowa może obniżyć ich wartość. 2. Nie mam systemu ułatwiającego transfer technologii między różnymi programistami, więc nawet jeśli ich o to poproszę, nie mam pewności, że zrobią to poprawnie. Moje pytanie brzmi: 1. Jak to przełożyć na starych programistów tak by się zgodzili 2. Jakich systemów używacie, aby ułatwić tego rodzaju „backup”? Rozumiem, że możesz dokonać przeglądu kodu, ale czy istnieje prosty sposób na przeprowadzenie tego? Myślę, że nie jesteśmy gotowi na pełną kontrolę kodu odprawy przez odprawę.


title: Jak ważne są wytyczne dotyczące formatowania kodu?

text: Standardy kodowania są powszechne w każdej organizacji zajmującej się tworzeniem oprogramowania, ale jak ważne jest ich przestrzeganie? Rozumiem potrzebę pewnej spójności, ale kiedy mam do czynienia z prostymi rzeczami, takimi jak położenie nawiasów klamrowych, długość linii itp., nie jestem pewien, czy nadmiernie surowe standardy mają duży wpływ na rozwój oprogramowania. Czy nie jest ważniejsze, aby Twój kod był czytelny, a nie zgodny z predefiniowanym standardem? Wygląda na to, że są bardziej jak... wytyczne w każdym razie.


title: Jaka jest idealna liczba wyświetlaczy potrzebnych do wysokiej produktywności?

text: > **Możliwe powielenie:** > Ile monitorów używasz? Czemu? Jak są używane? Widziałem ludzi, głównie freelancerów, pracujących z trzema lub czterema monitorami wokół siebie i wygląda to tak fajnie. Osobiście mam dwa ekrany w moim biurze i myślę, że odpowiada to moim potrzebom, z wyjątkiem pewnych sytuacji, w których czuję, że inny wyświetlacz ułatwiłby mi to. Więc jako programista/deweloper, jaka jest idealna liczba ekranów i ustawienia wyświetlania, które zwiększyłyby produktywność. Czy przejście na trzy lub cztery ekrany zmniejszy wydajność, a nie ją zwiększy?


title: Monitor(y) ustawiony poziomo czy pionowo?

text: > **Możliwe powielenie:** > Ile monitorów używasz? Czemu? Jak są używane? Inspirując się tym pytaniem, pomyślałem, że sam zadam sobie pytanie dotyczące monitorów. Niektóre monitory można obrócić o 90 stopni, dzięki czemu stoi pionowo. Widziałem również, że ta konfiguracja jest używana w niektórych biurach. Ale co jest lepsze do programowania? Tak jak ja to widzę, poziomo można zmieścić więcej dokumentów obok siebie, ale pionowo można wyświetlić więcej kodu tego samego dokumentu. Którą konfigurację wolisz? Jak to się skaluje w przypadku wielu monitorów?


title: Czy programiści w Twojej pracy nie zainteresowali się lub nie mieli ochoty na ofertę drugiego monitora?

text: Przygotowuję uzasadnienie biznesowe dla programistów w mojej firmie, aby uzyskać drugi monitor. Po moich własnych doświadczeniach i badaniach wydaje mi się to oczywiste, jeśli chodzi o zwiększanie produktywności i morale / szczęścia. Jednym z pytań, które mnie dręczyło, jest to, czy powinienem naciskać, aby wszyscy programiści byli na drugim monitorze, czy też pozwolić ludziom się zapisać (tj. Dostają jeden, jeśli chcą). Myśl na ten temat jest mile widziana, ale moje konkretne pytanie odnosi się do fragmentu na tej stronie: Ale kiedy kierownik IT w firmie Thibeault zapytał w zeszłym roku innych pracowników, czy chcą mieć dwa monitory, niewielu rzuciło się na tę ofertę. Oślepiony własnym osądem, zaskoczyło mnie to. Czy ktoś jeszcze tego doświadczył? W pełni doceniam to, że niektórzy wolą pojedynczy, większy monitor, ale moje ogólne doświadczenie w wyszukiwaniu w Internecie sugeruje, że większość programistów woli konfigurację podwójną (lub więcej). Sądzę, że powinno to być złagodzone myślą, że ci programiści, którzy biorą udział w takich dyskusjach, mogą nie być uważani za przeciętnego programistę, którego może nie obchodzić w ten czy inny sposób. W każdym razie, jeśli doświadczyłeś powyższego, czy próbowałeś sprzedać koncepcję podwójnych monitorów masom? Jeśli każdy po prostu dostał 2 monitory, niezależnie od tego, czy tego chciał, czy nie, czy wystąpiły niepożądane reakcje lub negatywne skutki? AKTUALIZACJA: Deweloperzy stosują mieszankę pojedynczych monitorów 17", 22" lub 24". Biurka powinny być w stanie pomieścić dwa monitory 22", jak proponuję, chociaż wyobrażam sobie, że trochę się przyzwyczai.


title: Prosty framework zadań - budowanie oprogramowania z elementów wielokrotnego użytku

text: Piszę usługę sieciową z kilkoma interfejsami API, które będą udostępniać część kodu implementacji. Aby nie kopiować-wklejać, chciałbym idealnie zaimplementować każde wywołanie API jako serię zadań, które są wykonywane w kolejności określonej przez logikę biznesową. Jedno oczywiste pytanie brzmi, czy jest to najlepsza strategia ponownego wykorzystania kodu, czy też mogę na to spojrzeć w inny sposób. Ale zakładając, że chcę iść z zadaniami, pojawia się kilka problemów: 1. Jaki jest dobry interfejs zadań do użycia? 2. Jak przekazać dane obliczone w jednym zadaniu do innego zadania w kolejności, która może ich potrzebować? W przeszłości pracowałem z interfejsami zadań takimi jak: interface Task<T, U> { U execute(T input); } Następnie miałem też coś w rodzaju obiektu „kontekstu zadania”, który miał pobierające i ustawiające dane dla każdego rodzaju danych, których moje zadania potrzebowały do wytworzenia lub zużycia, i były przekazywane do wszystkich zadań. Zdaję sobie sprawę, że ma to wiele problemów. Chciałem więc wymyślić lepszy sposób na zaimplementowanie tego tym razem. Moim obecnym pomysłem jest posiadanie obiektu TaskContext, który jest bezpiecznym dla typu kontenerem heterogenicznym (jak opisano w Efektywnej Javie). Każde zadanie może poprosić o element z tego kontenera (dane wejściowe zadania) lub dodać element do kontenera (wyjście zadania). W ten sposób zadania nie muszą wiedzieć o sobie bezpośrednio, a ja nie muszę pisać klasy z dziesiątkami metod dla każdego elementu danych. Istnieje jednak kilka wad: 1. Każdy element w tym kontenerze TaskContext powinien być typem złożonym, który otacza rzeczywiste dane elementu. Jeśli zadanie A używa String do jakiegoś celu, a zadanie B używa String do czegoś zupełnie innego, to samo przechowywanie mapowania między String.class i jakimś obiektem nie działa dla obu zadań. Innym powodem jest to, że nie mogę używać tego rodzaju kontenera bezpośrednio do kolekcji ogólnych, więc muszą być opakowane w inny obiekt. 2. Oznacza to, że w zależności od tego, ile zadań zdefiniowałem, musiałbym również zdefiniować liczbę klas dla elementów zadań, które mogą być zużywane lub produkowane, co może prowadzić do rozdęcia kodu i powielania. Na przykład, jeśli zadanie przyjmuje jakąś wartość Long jako dane wejściowe i generuje inną wartość Long jako dane wyjściowe, musiałbym mieć dwie klasy, które po prostu owijają się wokół Long, które IMO może szybko wymknąć się spod kontroli w miarę ewolucji bazy kodu. Pokrótce przyjrzałem się bibliotekom silnika przepływu pracy, ale wydają się one być ciężkim młotkiem dla tego konkretnego gwoździa. Jak byś podszedł do napisania prostego szkieletu zadań z następującymi wymaganiami: * Zadania powinny być jak najbardziej niezależne, aby można je było komponować na różne sposoby, aby tworzyć różne przepływy pracy. * Biorąc to pod uwagę, niektóre zadania mogą wykonywać kosztowne obliczenia, które są warunkiem wstępnym dla innych zadań. Chcemy mieć sposób na przechowywanie wyników obliczeń pośrednich wykonanych przez zadania, aby inne zadania mogły korzystać z tych wyników za darmo. * Framework zadań powinien być lekki, tj. rozwijanie kodu nie wiąże się z wprowadzaniem wielu nowych typów tylko po to, aby podłączyć się do frameworka.


title: Heredoc lub zewnętrzny plik szablonu w moim skrypcie bash - jak to wpływa na czytelność/utrzymanie?

text: Zdaję sobie sprawę, że to pytanie może zależeć od osobistych preferencji, ale jestem całkiem nowy w pisaniu skryptów bash/shell, więc pomyślałem, że warto byłoby poszukać, czy istnieje jakaś standardowa/najlepsza praktyka lub zadowalający konsensus. \-- Pracuję nad kilkoma skryptami, które w końcu chciałbym wydać open source (prawdopodobnie licencja MIT), więc chciałbym, aby skrypty były „zrobione dobrze”, jeśli coś takiego istnieje -- Skrypt o którym mowa, musi wygenerować wyjściowy plik tekstowy z szablonu przy użyciu podstawiania/rozszerzania zmiennych, aby „wypełnić puste miejsca”. Obecnie używam metody `heredoc`, ale chciałbym zachować wcięcia TAB, zarówno w moim skrypcie, jak i na wyjściu (dla czytelności). Chociaż udało mi się to do pewnego stopnia osiągnąć, używając `cat <<-EOF` do usunięcia wiodących tabulatorów (z mojego skryptu) i używając zmiennej do przechowywania spacji TAB (np. `T="$(printf '\t' )"`), do którego następnie odnoszę się za pomocą `$T`, który jest następnie poprawnie interpretowany w dokumencie heredoc z powrotem do znaku TAB, nie mogę się powstrzymać od myślenia, czy zewnętrzny plik byłby po prostu prostszy? Co może na ten temat powiedzieć ktoś z was, bardziej doświadczonych skrypciarzy basha? Która z tych praktyk jest lepsza, jeśli chodzi o czytelność/utrzymanie kodu? * * * Oto krótki przykład tego, co mam na myśli... moja_funkcja() { T="$(printf '\t')" kot <<- EOF To jest mój szablon na $coś $T Mam wcięcie Zmienna spacji TAB... $T ...ale w rzeczywistości mam wcięcie dwukrotnie, ponieważ „<<-” usuwa tylko „wiodące” tabulatory Potrzebuję czegoś jeszcze, ale może to być \${printed_literally}/$ or_expanded, co jest fajne! EOF } Tak naprawdę to nic _specjalnego_, nie szukam 'rozwiązania' jako takiego, tylko kilka wskazówek na temat tego, którego rozwiązania użyć - tj. _heredoc_ w skrypcie lub zewnętrznym pliku szablonu?


title: Czy istnieje test zgodności dla kompilatorów C++?

text: **Czy istnieje gdzieś swobodnie używany/dostępny skrypt, plik źródłowy lub cokolwiek, co jest w stanie zmierzyć zgodność danego kompilatora C++?** Na przykład test Acid3 dla przeglądarek: http://acid3. acidtests.org/ Wyniki, o których marzę, to globalna nota procentowa (lub wiele notatek, po jednej dla każdego standardu, np. c++98, c++11, c++14, itd.), a następnie szczegółowe testy z „sukcesem” lub „porażką” dla każdego z nich. _Tło: W pracy dyskutowałem na temat boosta i niektórych kompilatorów z problemami. Mój rozmówca mówił, że boost to projekt akademicki, ponieważ nie zadziała w głównych kompilatorach C++, a ja odpowiedziałem, że kompilatory umysłowo upośledzone nie powinny się liczyć. Możliwość pomiaru za pomocą kodu rzeczywistej zgodności kompilatora pomogłaby zarówno w ocenie kompilatora, jak i odkryciu „narożnych przypadków”, których należy unikać w skompilowanym z nimi kodzie międzyplatformowym._ ### Edycja: 2013-06- 22 Nie jest to odpowiedź, ale najwyraźniej komisja C++ pracuje nad tym tematem: > _**SG10, Feature Test:** Clark Nelson (Intel). Badanie, czy > i jak ustandaryzować sposób przenośnego kodu, aby sprawdzić, czy konkretny produkt > C++ implementuje już jakąś funkcję, ponieważ kontynuujemy rozszerzanie > standardu._ Źródło: http://isocpp.org/std/the- komisja


title: Jakie są zalety używania LISP i Haskella? Czy uczynią mnie lepszym programistą?

text: Wiem, że Lisp i Haskell to odpowiednio języki programowania funkcjonalnego i logicznego, ale co to dokładnie oznacza? Czym różnią się od innych języków? Słyszałem, że nauczenie się ich sprawi, że staniesz się lepszym programistą i poprawisz swoją logikę. Czy to prawda, a jeśli pójdę uczyć się Lispa lub Haskella na kompetentnym poziomie, czy moje programowanie się poprawi i czy będę lepiej radził sobie z każdym problemem w dowolnym języku? Chciałem tylko wiedzieć, czy są warte wysiłku nauki. Czy te języki są przydatne w obszarach takich jak GUI i grafika, czy też są przydatne tylko w aplikacjach konsolowych?


title: Języki z grafowymi strukturami danych i algorytmami w standardowej bibliotece

text: Próbuję poszerzyć swoją wiedzę i umiejętności z wykresami i algorytmami grafowymi i zauważyłem coś ciekawego: o ile wiem, żaden „główny” język nie obsługuje wykresów w swojej standardowej bibliotece. Drzewa tak, wykresy nie. Jedynym językiem, który jest nawet bliski, jest C ++ z Boost (który nie jest technicznie „standardową biblioteką”) Nie jestem pewien, dlaczego tak jest, ale zastanawiam się: czy są jakieś języki programowania, które są dostępne solidne wsparcie dla wykresów w ramach ich standardowej biblioteki? Edycja: Dla wyjaśnienia: przez „graf” rozumiem sieć węzłów i krawędzi; coś, na czym można by uruchomić algorytm Dijkstry, a nie „wykres” w sensie „graficzne przedstawienie danych”.


title: Czy jest jakaś wartość w znajomości czasu wykonania testu jednostkowego?

text: Czy czas wykonania testu jednostkowego jest przydatny? Czy test jednostkowy jest odpowiednim miejscem do profilowania kodu? Dlaczego lub dlaczego nie? **Przykładowy przypadek użycia** : * Każdy test jednostkowy zawiera nazwę, zaliczenie/niepowodzenie i czas wykonania. * Czas jest również obliczany na klasę testów jednostkowych i całkowity czas wykonania zestawu testów. Jak mogę wykorzystać te informacje?


title: Status projektu PocoCapsule

text: Czy ktoś zna stan tego C++ Inversion of Control Container? Jakaś alternatywa?


title: Gdzie powinno być obsługiwane uwierzytelnianie, w kodzie serwera, czy w kodzie po stronie serwera aplikacji?

text: Zajmuję się tworzeniem prostej aplikacji internetowej w node.js. Użytkownicy mogą logować się z dowolnej strony w aplikacji, więc zajmuję się uwierzytelnianiem w kodzie i logice serwera, a kod aplikacji po stronie serwera sprawdza, czy ustawiono kilka zmiennych sesji. Jeśli tak, aplikacja kontynuuje wyświetlanie informacji specyficznych dla użytkownika. Nie jestem pewien, czy jest to najlepszy sposób obsługi logiki uwierzytelniania. Czy powinienem przenieść całe uwierzytelnianie całkowicie do kodu aplikacji i mieć tylko serwer nasłuchiwania i przekazywania żądań, czy też, ponieważ serwer i tak ustawia sesję, powinien kontrolować logikę uwierzytelniania zaplecza, ponieważ teraz to obsłużę ? Na koniec, to, o co tak naprawdę pytam, to: koncepcyjnie, gdzie powinno być obsługiwane uwierzytelnianie? W kodzie serwera, czy w kodzie po stronie serwera aplikacji? * * * **Edytuj:** Mówiąc dokładniej, jest to publiczna aplikacja w internecie. Logika, którą kwestionuję, jest całkowicie logiką po stronie serwera. Dziękuję za wskazanie mi tego. Zmieniłem tytuł, aby był trochę dokładniejszy.


title: Co to jest dyspozytor zdarzeń kluczowych w aplikacjach interaktywnych z klawiaturą?

text: Co to jest : > **Klawisz Dyspozytor zdarzeń ?** w aplikacjach interaktywnych z klawiaturą. Co to naprawdę robi?


title: Jakieś pomysły na nowy sposób wprowadzania danych?

text: Nie zrozum mnie źle. Uwielbiam pisać. Jestem w tym dobry, a harmonijne klikanie klawiatury Das sprawia mi czystą radość. Ale z jakiegoś powodu po prostu opuszkami palców po całym monitorze i zacząłem nimi kręcić. Teraz wszystko jest brudne, ale człowieku, to zamieszanie naprawdę dało mi do myślenia. Wiem, że to bluźnierstwo, ale czy wierzysz, że jest możliwe (lub pewne), że istnieje bardziej efektywny sposób kodowania niż nasz obecny wiersz po wierszu, 1/3 angielski, 1/3 dziwne symbole, 1/3 cyfry wprowadzanie z klawiatury? Szczerze mówiąc, nie jestem do końca pewien, co mam na myśli, ale karty dziurkowane zostały powalone. Co dalej?


title: Jak utrzymać motywację przez cały dzień

text: To może być trochę subiektywne i może to jest problem, ale i tak zadaję moje pytanie :) Również znalazłem podobne pytania (ale żadne nie odpowiedziało na moje pytanie), więc nie musisz mi o tym przypominać, Dziękuję. Co do mojego pytania: mam problemy z utrzymaniem motywacji/koncentracji przez cały dzień. To znaczy, od rana, aż po lunchu wszystko jest w porządku. Problem zwykle zaczyna się około 15-16, gdzie (w ciężkie dni) mam ogromne problemy. Mam pewien rodzaj blokady pisarskiej i nie mogę już myśleć o problemach. Często tylko gapię się na kod i nic... Wiem, że muszę rozwiązać problem X lub osiągnąć coś Y za pomocą mojego kodu. Ale wydaje mi się, że mój mózg nie może (lub prawie nie może) nawiązać połączenia między pomysłem a rzeczywistym kodem, musiałbym to zrobić. Zwykle metody relaksacyjne nie działają już tak naprawdę, kiedy nadejdzie ten punkt. Kiedy mam kilka dodatkowych godzin na koncie, to zwykle spędzam dzień i wracam do domu. Ale oczywiście nie mogę tego zrobić w dowolnym momencie, czasami coś po prostu trzeba zrobić wkrótce lub potrzebuję dodatkowych godzin. Wiem, to znak mojego ciała, że nie mogę już tego wytrzymać bez dłuższego odpoczynku. I wiem (i wy też), że ta praca może być psychicznie bardzo wyczerpująca. (Pracuję z sharepoint...) Nie zrozum mnie źle, lubię swoją pracę, ale naprawdę źle się czuję, kiedy nie mogę zrobić z całą pasją, którą chcę i obijam się w późniejszych godzinach dzień. Po prostu czuję, że moja moc jest wyczerpana przez resztę dnia do pracy umysłowej. A teraz moje aktualne pytanie. Czy macie podobne doświadczenia? Co ci pomogło? Jak możesz utrzymać swoją moc przez cały dzień? (Po prostu nie chcę już pod koniec dnia zadawać sobie pytania "dlaczego byłem tak "leniwy" przez ostatnie 1-2 godziny") To jest dla mnie bardzo ważne, mam nadzieję, że ktoś może pomóc.


title: Najlepszy projekt dla UI wprowadzania danych

text: Pracuję nad projektem oprogramowania, który ma zastąpić wprowadzanie danych w arkuszach kalkulacyjnych Excel. Mamy kontrolkę siatki, która wyświetla dane, ale jest edytowana w formie z zakładkami dla różnych sekcji (ponad 60 kolumn w arkuszu kalkulacyjnym). Użytkownicy narzekają, że w formularzu z kartami zajmuje im więcej czasu, aby wprowadzić dane, które po prostu wpisują w arkuszu kalkulacyjnym i przechodzą do następnej komórki. Więc teraz zastanawiam się, czy w naszym projekcie interfejsu użytkownika wystąpił błąd. Czy są jakieś dobre książki lub inne zasoby opisujące najbardziej wydajny interfejs użytkownika do wprowadzania danych?


title: Najlepsze praktyki dotyczące indeksów baz danych

text: Jakie są DO i DONT w celu poprawy wydajności bazy danych przy użyciu indeksu? DO to przypadek, w którym należy utworzyć indeks lub inną wskazówkę dotyczącą indeksów, która poprawi wydajność. DONT będzie przypadkiem, w którym indeks nie powinien zostać utworzony lub inna akcja związana z indeksem, która może zaszkodzić wydajności.


title: Czy klasy czasownikowe to zapach kodu?

text: Dużo przetwarzam pliki płaskie, aby wyodrębnić dane. „Formaty” plików są bardzo unikalne, a każdy format pliku wymaga dużej ilości kodu specyficznego dla formatu. Czasami kod parsowania musi utrzymywać dużo stanu podczas odczytu pliku. Czasami używałem czegoś takiego jak ten „wzorzec”: parser = New FileTypeAParser(filename) parser.ParseEnterFile data = parser.ParsedData Lub rozważ klasę, która uwzględnia duże liczby. Ze względu na wydajność, po utworzeniu instancji, klasa wewnętrznie generowałaby i buforowała listę liczb pierwszych. Byłoby wtedy wywoływane wiele razy z różnymi liczbami w następujący sposób: factorizer = factorizer.Factor(veryLargeNumber) **Pytanie oryginalne** Powiedzenie to _Nazwy klas powinny być rzeczownikami; nazwy metod powinny być czasownikami._ Czy nazwanie i używanie klas w sposób pokazany w przykładach to zapach kodu? Jeśli tak, w jaki sposób mogę przerobić przykłady, aby je usunąć zapachem i usunąć zapach kodu? **Poprawione pytanie** Na podstawie komentarzy zdaję sobie sprawę, że _ja_ używam rzeczowników. Po zastanowieniu się nad tym zdałem sobie sprawę, że obawiam się, że te zajęcia są bardzo podobne do czasowników w treści i nazwie. Czy należy się tym martwić?


title: Dlaczego miałbym pisać DSL zamiast RIA opartej na formularzu?

text: Czytałem ostatnio kilka artykułów na temat języków specyficznych dla domeny (DSL), ale żaden z nich nie wydaje się omawiać zalet DSL nad bogatą aplikacją internetową (RIA). W RIA, zamiast uczyć się języka domeny, użytkownik otrzymuje obiekty domeny jako pola formularzy, które abstraktują definicje leksykalne dla języka domeny. Wydaje się to bardziej użyteczne. Czego mi brakuje?


title: Zły pomysł na wyświetlanie informacji o serwerze pocztowym w publicznym projekcie github?

text: Mam projekt do pracy, który wymaga ode mnie wysyłania e-maili do osób korzystających z naszego służbowego serwera pocztowego. Serwer nie wymaga uwierzytelniania. Część mojego projektu korzysta z pomocy Java-Helper, którą rozwijam na GitHub. Nie wiem, czy całkowicie rozumiem, jak to wszystko działa, ale zgaduję, że byłoby złym pomysłem, aby informacje o serwerze były dostępne na GitHubie, aby świat mógł je zobaczyć. Czy to jest poprawne? **Po namyśle:** Nie zamierzam umieszczać tego w Java-Helper, ponieważ nie byłoby to pomocne dla nikogo oprócz mnie. ale nadal jestem ciekaw odpowiedzi na to pytanie :) Dzięki!


title: Jak sprawdzić, czy zwracane są prawidłowe wyniki

text: Rozpoczynam nowy projekt i bardzo mocno staram się wykorzystać TDD do sterowania projektem. Od lat naciskam, aż w końcu uzyskałem zgodę na spędzenie dodatkowego czasu nad tym projektem, aby go wykorzystać, podczas gdy uczę się, jak to zrobić poprawnie. Jest to nowy moduł, który można połączyć z istniejącym systemem. Obecnie dostęp do wszystkich danych odbywa się za pośrednictwem usług sieciowych, które w większości są tylko cienkim opakowaniem procedur przechowywanych w bazie danych. Jednym z wymagań jest to, że dla danego sklepu zwracam wszystkie Zamówienia, które są uważane za ważne dla tej aplikacji. Zamówienie zakupu jest uważane za ważne, jeśli jego data wysyłki przypada w podanym zakresie od daty otwarcia sklepów (dotyczy to nowych sklepów). Teraz nie mogę umieścić tej logiki w kodzie aplikacji, ponieważ nie zamierzam przywracać miliona zamówień zakupu tylko po to, aby uzyskać tuzin, który dotyczy, może dotyczyć tego sklepu, biorąc pod uwagę powyższe ograniczenie. Myślałem, że mógłbym przekazać zakres dat do proc GetValidPOs i kazać mu użyć tych wartości do zwrócenia prawidłowych PO. Ale co, jeśli dodamy kolejny wymóg do tego, co jest uważane za ważne PO? A jak to przetestować i sprawdzić, czy nadal działa? Nie używamy ORM i jest to mało prawdopodobne. I nie mogę zadzwonić do DB w moim teście. Utknąłem. Moją inną myślą jest posiadanie mocków, które zwracają prawidłowe dane, innych, które zwracają złe dane i mają lokalne repozytorium rzucają wyjątek, jeśli wystąpią złe dane, i testują, czy wyjątek zostanie wyrzucony, jeśli nieprawidłowe dane zostaną zwrócone przez proc GetValidPOs (lub makieta używana w testach). Czy to ma sens? Czy jest jakiś lepszy sposób? **AKTUALIZACJA:** Wygląda na to, że mogę używać EF. Teraz muszę tylko dowiedzieć się, jak z niego korzystać i sprawić, by można go było przetestować, a jednocześnie móc polegać na procedurach składowanych i trudnościach związanych z rozproszeniem danych w kilku bazach danych.


title: Jak znaczące jest pojęcie „rzemiosła oprogramowania”?

text: Wydaje się, że ostatnio jest dużo szumu wokół rzemiosła oprogramowania. Czy to dobrze zdefiniowana koncepcja? Co oznacza? W jakim stopniu programowanie skutecznie jest czynnością rzemieślniczą?


title: Dlaczego pakiety węzłów umieszczają przecinek w nowej linii?

text: Uczę się node.js i wypróbowuję Express. Moja pierwsza aplikacja miała ten kod: var express = require('express') , route = require('./routes') , user = require('./routes/user') , http = require('http') , ścieżka = wymagaj('ścieżka'); Przeczytanie samouczka mongoose daje mi to: var mongoose = require('mongoose') , db = mongoose.createConnection('localhost', 'test'); W trybie ścisłym JSHint daje mi > app.js: linia 6, kolumna 32, Błędne łamanie linii przed ','. Co pokazuje, że nie jestem jedyną osobą, która jest podsłuchiwana przez tę składnię. Czy jest jakiś powód, aby deklarować `var`s w ten sposób zamiast dodawać przecinek na końcu wiersza?


title: Jak być produktywnym jako nieczęsty programista?

text: Moja obecna praca to głównie zarządzanie projektami i praca z klientami, ale czasami zajmuję się kodowaniem. Robię to albo dlatego, że mam jasną wizję tego, jak chcę, aby wyglądał wynik (a łatwiej go wdrożyć niż wyjaśniać), bo mam odpowiednią wiedzę, albo po prostu dodaję zasoby. Ale znajduję kilka powtarzających się problemów: 1. Czas uruchomienia do osiągnięcia produktywności może być zaporowy. Instalacja narzędzi programistycznych, uzyskanie dostępu do odpowiednich systemów, kodu źródłowego itp. i po prostu przejście do pierwszej kompletnej kompilacji. 2. Narzut związany z pracą na szybko zmieniającej się bazie kodu może być niedopuszczalny. Nie jest niczym niezwykłym w jednym z moich projektów, że trzeba całkowicie przebudować środowisko (czyli sprawdzić i ponownie zbudować cały kod, w tym utworzyć nową lokalną bazę danych, zapełnić ją itp.) co miesiąc. 3. Co najgorsze, jeśli przestanę coś kodować na dłużej niż około 2 tygodnie, całkowicie tracę cały swój „stan psychiczny”: nie pamiętam, gdzie są zainstalowane rzeczy, nie pamiętam, który z kilku katalogów roboczych jest „właściwy”, nie pamiętam, jak rozwiązać komunikat o błędzie, który widziałem kilka razy w przeszłości. (Podejrzewam, że moje pogorszenie stanu psychicznego jest znacznie szybsze niż przeciętnie.) Naprawdę byłbym wdzięczny za wskazówki od każdego innego w tej sytuacji. Do tej pory wypracowałem tyle: 1. Tylko kod w stałych blokach czasowych - minimum 2 dni. Przez kilka godzin nie mogę nic zrobić. 2. Dokument, dokument, dokument. Zachowaj arkusze kalkulacyjne, które przechowują stan jak najwięcej. Jeśli istnieje kilka systemów, w których wdrożony jest kod, zapisz wszystkie kluczowe katalogi, numery portów, nazwy użytkowników, nazwy baz danych itp. Co jeszcze?


title: Alternatywy dla pomocy HTML

text: Obecnie korzystamy z systemu o nazwie AsciiDoc, który pozwala nam tworzyć dokumentację w prostym znaczniku tekstowym. Z tego możemy wygenerować wiele formatów wyjściowych. Używamy tylko formatów wyjściowych pdf i chm. Zastanawiałem się, czy istnieje alternatywa dla chm? To, czego szukam, to coś, co może być używane w trybie off-line (jest to ważne, ponieważ wielu naszych użytkowników znajduje się w bardzo odległych miejscach) z naszym oprogramowaniem. Powinien mieć indeks (może być tak prosty jak strona html z terminami, do których prowadzą hiperłącza), powinien być przeszukiwalny i powinien mieć mechanizm umożliwiający wywoływanie określonych wpisów z kodu (podobny do pomocy kontekstowej). Dwie rzeczy, które są przeciwko PDF w tym przypadku to: 1. Pomoc kontekstowa nie jest opcją 2. Generalnie dokument jest dość duży 3. PDF jest bardziej odpowiedni do dokumentacji drukowanej niż pomocy kontekstowej Chciałbym użyć html. Jedyny problem z html polega na tym, że nie potrafię wymyślić, jak automatycznie zapewnić wyszukiwanie słów kluczowych (poza funkcjami ctrl+f w przeglądarkach - chciałbym coś bardziej oczywistego). Nie mogę też znaleźć metody automatycznego generowania indeksu słów kluczowych z hiperłączem. Pomoc kontekstowa byłaby prosta ze względu na tagi sekcji - mógłbym po prostu przekazać adres URL strony i sekcji, która mnie interesuje, do domyślnej przeglądarki i ta strona powinna załadować się do właściwej sekcji. Moje wymagania brzmią strasznie jak chm – tak. Wymodelowałem swoje wymagania od chm. Jedynym powodem, dla którego nie lubię chm, jest sposób, w jaki kod współdziała z nim za pomocą mapidów i tym podobnych. Wolałbym raczej używać listy zwykłego tekstu (która jest dla mnie generowana automatycznie), której mój kod może użyć, aby uzyskać dostęp do wrażliwej na kontekst części dokumentacji. Wyobrażam sobie skrypt, który przejdzie przez pliki wyjściowe html i wygeneruje stronę indeksu, która po prostu zawiera listę znalezionych słów kluczowych. oczywiście powinien istnieć mechanizm wykluczania słów, aby ignorować słowa typu: the, it, is itd. Ta część byłaby stosunkowo łatwa do napisania. Druga część potrzebowałaby jakiegoś skryptu, aby zebrać bazę danych słów kluczowych i ich lokalizację w tekście html. Myślę, że byłaby to trudna część wraz z zapewnieniem mechanizmu wyszukiwania w przeglądarce. Wszelkie pomysły dotyczące alternatyw byłyby mile widziane. Chciałbym użyć wiki lub zestawu statycznych stron html hostowanych gdzieś na serwerze sieciowym, ale mamy krytyczne wymaganie dotyczące użytkowania w trybie offline. Samo umieszczenie html na dysku lokalnym nie zapewnia nam wymagań wyszukiwania, których potrzebujemy. **EDYTUJ:** Projektuję oprogramowanie wykorzystywane przez przemysł wydobywczy. Wiele kopalń jest bardzo odległych i nie ma żadnego znaczącego dostępu do internetu. Nie ma nic złego w pdf, html czy chm (poza tym, że się starzeje). Gdybym mógł wyświetlić plik pdf we właściwej lokalizacji (tj. Pomoc kontekstowa), użyłbym go. Niemal kusi mnie, aby napisać własną - w zasadzie byłaby to przenośna wiki. Skoro już o tym mowa, jeśli proponujesz przenośną wiki - musisz pomyśleć o użytkowniku końcowym, który może nie mieć doświadczenia w korzystaniu z takich narzędzi. To musi być śmiertelnie proste. To było piękno chm, praca z nim jest uciążliwa, ale użytkownicy końcowi to lubią.


title: Wydajność filtra wulgaryzmów w Javie

text: Mam obowiązek odfiltrować wulgaryzmy z zgłoszeń użytkowników w aplikacji internetowej opartej na Javie. Klient jest świadomy zarówno Problemu Scunthorpe, jak i Problemu Clbuttic i zaakceptował konsekwencje. Proszę, nie życzę sobie debaty na temat zasadności braku cenzury. Istnieją dwa bity danych: 1. Zgłoszenie użytkownika, które potencjalnie może zawierać około 500 słów; 2. Jednokolumnowa tabela bazy danych zawierająca niedozwolone słowa. W tej tabeli może znajdować się wiele tysięcy rekordów. Obecne rozwiązanie wydaje mi się błędne: 1. Cała tabela jest ładowana do statycznego String[] podczas uruchamiania do Singletona (a zatem rezydującego w pamięci). 2. Dla każdego zgłoszenia użytkownika przechodzimy pętlę przez tablicę i wykonujemy .indexOf(), aby sprawdzić, czy w zgłoszeniu pojawia się dowolne dane słowo w String[]. 3. Jeśli się pojawi, zastępujemy znakami w stylu %$#@%. Odbywa się to poprzez tokenizację zgłoszenia użytkownika, zapętlenie całego zgłoszenia użytkownika jako tokenów (ponownie) i zastąpienie każdego wystąpienia znalezionego słowa. To rozwiązanie może być błyskotliwe, ale jestem sceptyczny. I patrząc na to przez chwilę, nie mogę znaleźć drogi przez to. Pytanie brzmi, jakie jest rozwiązanie, które zapewni dobrą wydajność i, miejmy nadzieję, będzie rozsądne dla przyszłych deweloperów, aby je utrzymać po tym, jak zostanę zwolniony za nieodfiltrowanie jakiegoś niejasnego słowa, o którym nigdy nie słyszałem?


title: Dlaczego łańcuchy Pythona są alokowane na stosie?

text: Zgodnie z tym wizualizatorem kodu Pythona, łańcuchy Pythona są alokowane na stosie, a nie na stercie. Dlaczego to? Myślałem, że będą podobne do Javy, w której Strings są alokowane na stercie.


title: Jaka jest kanoniczna odpowiedź na „to open source, prześlij poprawkę”?

text: Niebezpieczeństwo sugerowania jakiejś funkcji produktu, zwłaszcza open source, polega na tym, że otrzymasz odpowiedź „dlaczego tego nie zrobisz?”. To prawda i fajnie, że możesz sam dokonać zmian. Ale wiemy praktycznie, że produkty często się poprawiają, ponieważ programiści słuchają głosu użytkowników — nawet jeśli są to inni programiści. A skutecznym sposobem na wprowadzenie tych zmian może być osoba, która już pracuje nad projektem, podejmując pomysł i wdrażając go. Istnieje kilka powszechnych terminów używanych w odniesieniu do problemów związanych z tworzeniem oprogramowania. np. Zrzucanie rowerów. Czy istnieje powszechny termin, który zasadniczo odpowiada: „Tak, wiem, że mogę zmienić prawie wszystko na świecie — nawet zamknięte źródło. Mógłbym zostać zatrudniony i napisać ten kod. Ale w tym przypadku po prostu robię obserwacja, która w rzeczywistości może być przydatna dla innego programisty, który jest już dobrze przystosowany do łatwego wprowadzenia tej zmiany – lub po prostu ogólnie omawia możliwości”. [ps. (kilka dni później) - Powinienem był zauważyć, że "prześlij łatę" często mówi się z ironicznym humorem i szukam odpowiedniej dowcipnej odpowiedzi. ;)]


title: Jakie są różne metody podziału i organizacji pracy pomiędzy członkami zespołu projektowego?

text: W moim zespole każdy chciałby robić wszystko, łącznie z backendem, frontendem, warstwą środkową. Powiedziałem im, że powinniśmy podzielić pracę według ról i specjalizacji. Jakie są plusy i minusy dzielenia pracy w pionie (każda historyjka użytkownika jest wykonywana przez tę samą osobę od zaplecza do frontonu) w porównaniu z dzieleniem pracy w poziomie (każda warstwa abstrakcji jest wykonywana przez tę samą osobę)?


title: Umowa na rozwój aplikacji i utrzymanie usług

text: Zamierzam stworzyć aplikację na iPhone'a dla klientów, za stałą cenę projektu. Następnie pomogę w utrzymaniu aplikacji, pobierając opłatę za usługę/wsparcie. Pytania: 1. Co powinienem umieścić w umowie? Jakieś próbki, których mogę użyć w celach informacyjnych? 2. Czy programiści zazwyczaj udostępniają swój kod źródłowy klientowi? A jakie powinny być różnice cenowe dla każdego? 3. Jak zwykle są naliczane opłaty za usługę/wsparcie? Miesięcznie czy godzinowo? Wszelkie inne porady mile widziane!


title: Generowanie plików CSV za pomocą Java

text: W naszym projekcie mamy wymóg generowania dużego pliku CSV co 2 godziny za pomocą programu Java. Ten plik będzie miał około 60 000 wierszy (około 120 znaków w wierszu). Nie jestem jeszcze pewien co do rozmiaru. Chciałbym wiedzieć, czy napotkam jakieś problemy z pamięcią, ponieważ otworzę plik za pomocą FileWriter, a następnie kontynuuję pisanie, a następnie zamknę plik. Czy powinienem się martwić o rozmiar pliku? Jeśli tak, czy istnieją inne dobre techniki zapisu do dużego pliku w Javie niż użycie FileWriter? Używamy Javy 5.


title: 30 minut na wyjaśnienie programowania 15-latkowi

text: Zgłosiłem się na ochotnika, aby w przyszłym tygodniu usiąść i porozmawiać o życiu i pracy programisty z 15-letnim studentem z doświadczeniem zawodowym. Haczykiem jest to, że * mam tylko pół godziny, i * będę tylko jedną z osób, które z nią rozmawiają - inni ludzie w różnych rolach w biznesie również będą z nią przechodzić przez elementy swojej pracy przez cały czas dzień. Co powinienem omówić i czego, u licha, mogę ją nauczyć w zaledwie pół godziny? Zakładam, że prawdopodobnie nie ma doświadczenia z programowaniem lub programowaniem.


title: Dlaczego języki programowania, zwłaszcza C, używają nawiasów klamrowych, a nie kwadratowych?

text: Definicję "języka w stylu C" można praktycznie uprościć do "używa nawiasów klamrowych (`{}`)." Dlaczego używamy tego konkretnego znaku (i dlaczego nie czegoś bardziej rozsądnego, takiego jak `[]`, który nie wymaga klawisza Shift, przynajmniej na klawiaturach amerykańskich)? Czy jest jakaś rzeczywista korzyść dla produktywności programisty, która wynika z tych nawiasów, czy też projektanci nowych języków powinni szukać alternatyw (tj. faceci stojący za Pythonem)? Wikipedia mówi nam, że C _używa_ powiedział nawiasy klamrowe, ale nie dlaczego. Stwierdzenie w artykule w Wikipedii na temat listy języków programowania opartych na C sugeruje, że ten element składni jest nieco szczególny: > Mówiąc ogólnie, _Języki z rodziny C_ to te, które używają składni bloku podobnego do C (w tym _nawiasy klamrowe_ na początku i na końcu blok)...


title: Przechowuj i uruchamiaj akcje podobne do crona za pomocą PHP i (My)SQL

text: Rozbijam głowę nad decyzją projektową i próbuję uzyskać więcej inspiracji/wskazówek/wskazówek/.. od innych programistów. **Jaki jest cel:** Chcę uruchamiać **jedno zadanie cron** (skrypt php) co minutę. W tym skrypcie powinienem sprawdzić **bazę danych pełną harmonogramów** (taka sama składnia jak zadania cron), aby sprawdzić, czy akcja powinna zostać uruchomiona właśnie teraz. (Akcją może być wysłanie e-maila, wysłanie wiadomości tekstowej, ..) Nie sądzę, że jest to możliwe tylko przy użyciu sql, więc najlepiej jest pobrać wszystkie harmonogramy i sprawdzić w PHP, który z nich powinien zostać wykonany w danym momencie. Przechowam również datę „startFrom”, aby określić, kiedy ten harmonogram powinien zostać uruchomiony jako pierwszy. Jakieś sugestie na ten temat?


title: Jakie jest ogólne rozwiązanie pozwalające klientowi wybrać konkretną instancję wyniku metody?

text: Jakie są ogólne rozwiązania umożliwiające klientowi wybór konkretnego wystąpienia wyniku metody? Na przykład w Lucene API metoda wyszukiwania otrzymuje i modyfikuje parametr wejściowy kolektora, ale jest to ogólnie uważane za złą praktykę: IndexReader reader = DirectoryReader.open(index); Wyszukiwarka IndexSearcher = new IndexSearcher(reader); Kolektor TopScoreDocCollector = TopScoreDocCollector.create(10, true); search.search(q, kolektor); ScoreDoc[] trafienia = collector.topDocs().scoreDocs; Alternatywą byłoby dostarczenie Factory jako danych wejściowych i zwrócenie utworzonej instancji przez metodę wyszukiwania. Co jeszcze?


title: Tworzysz prostą aplikację internetową?

text: Zdecydowałem się na samodzielne wykonanie mini-projektu, aby pomóc mi zrozumieć nieco więcej na temat tworzenia aplikacji internetowych przed rozpoczęciem nowego semestru na uniwersytecie. Korzystanie z platform Java SE i JEE/J2EE. Stworzę prostą aplikację internetową, która będzie pobierać dane z bazy danych i wyświetlać je. Zdecydowałem się na użycie wzorca typu Model-View-Controller i do tej pory zdecydowałem, że: Modele: Będą obiektami Java, które są utrwalane w bazie danych za pomocą frameworka. Widok: będzie tylko frontendem, prawdopodobnie napisanym w HTML z jakimś CSS. Nie zdecydowałem (na wysokim poziomie) jak powinien być zaimplementowany kontroler, początkowo poszedłem za pomysłem, że będę używał JDBC do odpytywania wyników z bazy i wyświetlania go na front end, ale użycie frameworków powinno ułatwić proces. Powiedziano mi, że istnieje kilka frameworków open source, które pomagają w tworzeniu aplikacji internetowych, a kilka, które znalazłem, to Spring i Hibernate. Moje pytanie w takim razie, czy istnieje sposób włączenia tych ram do tego, co zaproponowałem, a jeśli tak, to jak mogę się o nich dowiedzieć, aby stworzyć aplikację internetową? Byłbym wdzięczny za porady i doświadczenia dotyczące tworzenia aplikacji internetowych. To jest coś, czego wcześniej nie robiłem, więc jest to dla mnie nowy i uczący się proces. W istocie chcę stworzyć aplikację webową używającą Javy jako podstawowego języka programowania, w której funkcjonalności odpytywania bazy danych pomagają w wyświetlaniu danych wyjściowych do frontendu. **Edytuj:** Zmieniono pytanie, aby było bardziej zrozumiałe dla tych, którzy chcą rozpocząć podobne projekty.


title: Produkcja a rozwój oprogramowania

text: Często mówi się, że branża oprogramowania jest niedojrzała w porównaniu z produkcją. W szczególności w odniesieniu do kierowania procesem. **Pytanie** : Czy jako programiści możemy uczyć się na podstawie procesów zachodzących w branży produkcyjnej? Czy wdrożenie ich procesów może zwiększyć wskaźnik sukcesu tworzenia oprogramowania? **Moje podejście** : W produkcji tworzenie produktu jest silnie uzależnione od procesu. Możesz mieć fabrykę, w której każda osoba ma określony zestaw zadań, za którymi podąża. Pracownik (lub robot) może dokręcać śrubę przez cały dzień. Następnie kolejne zadanie w procesie wykonuje kolejny specjalista. Pracownicy (i roboty) nie odstraszają od procesu ani nie wymyślają czegoś „w locie”. Części przechodzą przez cały proces, a wyjściem jest gotowy produkt. Działa dobrze, a firmy osiągają 99,99966% produktów wolnych od wad. Firmy z czasem niwelują nieefektywności. To robi wrażenie i bardzo dobrze może być oznaką dojrzałej branży. W produkcji zdefiniowany proces może dosłownie stworzyć gotowy produkt. Nie sądzę, że tak jest w przypadku oprogramowania. Możemy mieć procesy kontroli źródła, przeglądu kodu, ewidencjonowania arkuszy, zbierania wymagań, SDLC itp. Ale wykonywanie tych procesów samo w sobie nie tworzy gotowego produktu. Procesy te mogą być korzystne, ale są prostopadłe do rzeczywistego stworzenia. Załóżmy, że Twoja firma ma umowę na stworzenie oprogramowania, które będzie przeszukiwać miliony obrazów w celu znalezienia twarzy przestępców. Pomimo ciężkiego środowiska napędzanego procesami, programista musi angażować się w tworzenie rzeczy „w locie”. Robienie rzeczy w locie jest sprzeczne z duchem produkcji. Dobry proces produkcyjny może być wykonany bez zastanowienia przez robota. Do tworzenia skomplikowanych algorytmów, które nie zostały jeszcze zgłębione w umyśle człowieka, konieczne jest tworzenie rzeczy w locie. Tworzenie oprogramowania nie polega na podążaniu za procesem, ale na tworzeniu procesów, które mają być wykonywane przez komputer. To zasadnicza różnica. Bez względu na to, ile ortogonalnych procesów zastosujemy wokół rozwoju, zawsze będziemy uciekać się do robienia tego „w locie”, jeśli chodzi o tworzenie. Wszyscy, z którymi rozmawiam, zgadzają się z nastawieniem na produkcję. Czy jestem sam w swoich myślach? **Edytuj** : Zaakceptowałem odpowiedź. I mój umysł jest podjęty. [rozpocznij wykład] Oświadczam, że kierunek Inżynieria Oprogramowania rażąco błędnie zrozumiał naturę procesów. Proces to zestaw kroków. Jeśli coś można wyrazić jako zestaw kroków, można to zautomatyzować (lub przynajmniej aspekty wysokiego poziomu można zastosować na pamięć). Automatyzacja nie może wykonać oryginalnej kreacji, dlatego wszystkie procesy są prostopadłe do kreacji. Myślę, że najlepiej jest pogodzić się z tym, że procesy, które przyjmujemy, są ortogonalne. Nigdy nie możemy wyrosnąć z naszej „niedojrzałości”. To fizyka stworzenia sprawi, że na zawsze będziemy postrzegani jako niedojrzali. [/koniec wykładu]


title: Struktura kodu dla wielu aplikacji ze wspólnym rdzeniem

text: Chcę stworzyć dwie aplikacje, które będą miały wiele wspólnych funkcji. Zasadniczo jeden system jest bardziej zaawansowaną wersją drugiego systemu. Nazwijmy je „Prostymi” i „Zaawansowanymi”. System `Advanced` doda, rozszerzy, zmieni, a czasem zastąpi funkcjonalność systemu `Simple`. Na przykład system `Advanced` doda nowe klasy, doda właściwości i metody do istniejących klas `Simple`, zmieni zachowanie klas itp. Początkowo myślałem, że klasy `Advanced` po prostu odziedziczyły po klasach `Simple` ale widzę, że funkcjonalność znacznie się różni w miarę postępu rozwoju, nawet przy zachowaniu podstawowej funkcjonalności podstawowej. Na przykład system `Simple` może mieć klasę Project z właściwością Sponsor, podczas gdy system `Advanced` ma listę Project.Sponsors. Wydaje się kiepską praktyką dziedziczenie po klasie, a następnie ukrywanie, zmienianie lub wyrzucanie znaczących części jej cech. Alternatywą jest po prostu uruchomienie dwóch oddzielnych baz kodu i skopiowanie wspólnego kodu między nimi, ale wydaje się to nieefektywne, archaiczne i pełne niebezpieczeństw. Z pewnością wyszliśmy poza czasy „dziedziczenia kopiuj i wklej”. Innym sposobem ustrukturyzowania tego byłoby użycie klas częściowych i trzech projektów: `Core`, który ma wspólną funkcjonalność, `Simple`, który rozszerza klasy częściowe `Core` dla systemu prostego, oraz `Advanced`, który również rozszerza ` Klasy częściowe Core dla systemu zaawansowanego. Plus posiadanie trzech projektów testowych dla każdego systemu. Wydaje się, że to czystsze podejście. Jaki byłby najlepszy sposób ustrukturyzowania rozwiązania/projektów/kodu w celu utworzenia dwóch wersji podobnego systemu? Powiedzmy, że później chcę stworzyć trzeci system o nazwie `Extreme`, w dużej mierze oparty na systemie `Advanced`. Czy mam utworzyć projekt „AdvancedCore”, który zarówno „Advanced”, jak i „Extreme” rozszerza się przy użyciu klas częściowych? Czy jest na to lepszy sposób? Jeśli ma to znaczenie, prawdopodobnie będzie to system C#/MVC, ale chętnie zrobię to w dowolnym odpowiednim języku/ramie.


title: Czy stracę coś, kodując w c# i używając darmowych konwerterów kodu vb.net online?

text: Firma, w której pracuję, korzysta z vb.net, ponieważ jest wielu programistów, którzy przenieśli się z vb6 na vb.net. Zasadniczo więcej zasobów vb.net w firmie na wsparcie/konserwację w porównaniu z c#. Jestem koderem c# i zastanawiałem się, czy mógłbym po prostu kontynuować kodowanie w c# i po prostu korzystać z wielu darmowych konwerterów kodu c# na vb.net online. W ten sposób będę bardziej produktywny, a także bardziej rynkowy, ponieważ będzie więcej zadań c# w porównaniu z zadaniami vb.net. Zrobiłem vb6 wiele lat temu i czuję się komfortowo debugując kod vb.net. To tylko podstawowy język kodowania. Bardziej komfortowo czuję się w c#. Czy cokolwiek stracę, jeśli zastosuję takie podejście. (konwersja kodu). W oparciu o to, co przeczytałem w Internecie, przyszłość vb.net jest naprawdę „Dim”. Proszę doradź. Dziękuję Ci


title: Dlaczego przeglądarki nie rozwiązują prostych znanych problemów?

text: Dlaczego przeglądarki nie rozwiązują prostych znanych problemów, takich jak: (w kontekście CSS) NIE rozpoczynaj nazwy klasy od numeru! Jest to obsługiwane tylko w przeglądarce Internet Explorer i NIE rozpoczynaj nazwy identyfikatora od numeru! Nie będzie działać w Mozilli/Firefoxie.


title: Czy konieczne jest omówienie zmian w bazie danych?

text: Pracuję nad projektem z zespołem 4-5 osób. Czy przed wdrożeniem konieczne jest omówienie zmian w bazie danych z zespołem? Pracuję nad API bazy danych. Czy lepiej o tym dyskutować, czy nie? W moim zespole są seniorzy. Więc nie mogę sam wprowadzać zmian i wprowadzać zmiany i wyjaśniać zmiany.


title: Czy to normalne, że programista ma wiele problemów po uruchomieniu produktu?

text: W ostatnich miesiącach nasz produkt (który pojawił się prawdopodobnie 9 miesięcy temu) odnotował wzrost liczby korzystających z niego użytkowników. Mieliśmy do czynienia z wieloma pytaniami, problemami i skargami od użytkowników. Niestety wydaje się, że wiele problemów pochodzi z modułu, nad którym pracowałem. Czasami zastanawiam się, czy jestem niekompetentny, czy to całkiem normalne w tworzeniu oprogramowania, że błędy są znajdowane zwłaszcza na początkowych etapach cyklu tworzenia oprogramowania po jego uruchomieniu? Zastanawiam się, dlaczego niektóre problemy, z którymi się teraz borykaliśmy, nie są przewidziane przeze mnie ani przez zespół w fazie rozwoju. Jako programista pracuję od blisko 2 lat. Mam nadzieję, że otrzymacie Wasze opinie, opinie, porady! Dziękuję!


title: Zarządzanie projektami osobistymi jako samodzielny programista — wydobycie z głębi i nieudane projekty

text: Potrzebuję porady na temat zarządzania projektami. Zaczynam projekt i często jest to duży projekt dla samodzielnego programisty. Zwykle jest to projekt internetowy. Zajmuję się wszystkim, od interfejsu użytkownika, po JS, PHP, zarządzanie serwerem itp. W połowie czuję się poza moją głębią. Tracę miejsce, w którym jestem, więc spędzam kilka dni z dala od projektu, aby uniknąć stresu i zanim się zorientujesz, staje się kolejnym niedokończonym projektem. Staram się używać frameworków i bibliotek kodu, aby ułatwić sobie pracę. Czasami kończę projekt tak, aby "działał", a potem wracam i radzę sobie z błędami, zaprojektuję interfejs użytkownika poprawnie i takie tam. Ale bez wątpienia zawsze skończę z głębi. Myślałem o outsourcingu zadań, takich jak interfejs użytkownika i zachowanie, i skupiłem się tylko na PHP - co moim zdaniem jest moją mocną stroną. Ale wtedy pojawia się duma i nie czuję się jednością z projektem, którego sam nie ukończyłem. Czy to ma sens? Jestem pewien, że jest wielu innych, którzy czują się tak w domu lub w pracy, i chciałbym otrzymać kilka rad dotyczących lepszego zarządzania moimi projektami.


title: Klasa statyczna vs klasa Singleton w C#

text: > **Possible Duplicate:** > Jaka jest różnica między metodami all-static a zastosowaniem pojedynczego wzorca >? Muszę podjąć decyzję dla projektu, nad którym pracuję, czy użyć statycznego czy singletona. Po przeczytaniu takiego artykułu skłaniam się ku singletonowi. Co lepiej używać klasy statycznej czy singletona? Edycja 1 : Aplikacja kliencka na komputery. Proszę podać rozwiązania zorientowane na kod.