title: Styl kodowania (zrób więcej, potem uprość)

text: Jestem studentem CS i koduję od kilku miesięcy przed rokiem i wydaje mi się, że wyrobiłem sobie coś, co moim zdaniem może być „złym” nawykiem i zastanawiam się, czy ktoś robi to samo (lub czy to w ogóle zły nawyk). Kiedy koduję / rozwiązuję problem z kodem, stwierdzam, że moja początkowa implementacja jest długa i nadmiernie skomplikowana; innymi słowy, istnieje wiele obcego kodu (zmienne, kontrole), który po prostu nie jest potrzebny. Kiedy kończę wstępny „szkic” i upewniam się, że kod rzeczywiście działa, upraszczam go i ułatwiam zrozumienie/mniej gadatliwy. Myślę, że powodem, dla którego to robię, jest to, że mam problem z przewidzeniem tego, czego będę potrzebować do wykonania zadania, co kończy się nadmierną kompensacją i tworzeniem komplikacji, które nie powinny lub nie muszą istnieć. Czy ktoś ma jakieś wskazówki lub porady, jak poprawić ten aspekt mojego stylu kodowania, albo jakieś informacje, czy ten nawyk jest rzeczywiście zły?


title: Jak radzić sobie z członkami zespołu piszącymi zły kod

text: Nasz zespół składa się z młodszych i starszych programistów. Mam problem z kodem pisanym przez seniorów. Nie przestrzegają MINIMUM standardów kodowania. Wciąż się uczę, ale nie deklarowałbym stylu inline ani nie nadawałby niewłaściwych nazw dla zmiennych i kontrolek. Próbowałem wspomnieć o tym pośrednio, ale stwierdzili, że możemy zająć się tym później, a ponieważ jest zwinny, powinniśmy przejść dalej. Ale mój problem polega na tym, że kiedy zaczynam pracę nad swoim zadaniem, czuję się źle i skupiłbym się bardziej na refaktoryzacji niż na swoim zadaniu. Nie wiem, jak sobie z tą sytuacją poradzić. PS: Jestem pewien, że to pytanie było zadawane wiele razy. Ale każda rada jest bardzo ceniona.


title: Przestrzegaj terminów vs Zrób to dobrze

text: Otrzymałem ogromne zadanie migracji kilku funkcjonalności z jQuery do AngularJS. Byłem już całkiem dobry w Angularze. Ale chcę zanurkować głęboko i tworzyć futurystyczną, dźwiękową architekturę. BA siedzą na mojej szyi, chcąc jak najszybciej dostać się do moich zadań. Wolę zrobić coś raz i dobrze niż ciągle łatać istniejące funkcjonalności. I z takim nastawieniem zawsze pracuję więcej niż to konieczne. Czy czegoś mi brakuje? Czy mam właściwe podejście, czy po prostu nie jestem wystarczająco przekonujący, jako mój punkt widzenia. Jakie jest najlepsze podejście, Twoim zdaniem Dziękuję :)


title: Jaka powinna być minimalna ilość produkcji kodu na tydzień?

text: Postaram się dokładniej wyjaśnić, o co mi chodzi. Wyobraź sobie, że jesteś szefem firmy. Musisz poradzić sobie z kompromisem między jakością kodu a szybkością jego wytwarzania. Załóżmy, że mierzymy szybkość kodowania według metodologii Agile w Story Points. Rozważmy dwie skrajności: 1. Nasi programiści spędzają dużo czasu w formacji bez pisania żadnej linijki kodu. Otrzymują certyfikat. Znają każdą technologię i wzorzec, spędzają godzinę zastanawiając się, jak lepiej coś zaimplementować, ale wydajność spada do 0. 2. Nasi programiści od razu idą na rozwiązanie problemów. Tworzą dużo kodu, przestrzegają terminów. Ale to naprawdę kiepska jakość. Dużo zapachów kodu i innych problemów, które spowolnią kod za kilka czasu. Celem jest, aby obie te skrajności nie były optymalne. Więc jaka jest twoja sugestia i rozważenie znalezienia optymalnego kompromisu?


title: Prototypowanie a czysty kod na wczesnych etapach

text: Planuję pracować/rozpocząć pracę nad kilkoma osobistymi projektami, które mogą skończyć jako moja codzienna praca. To sprawiło, że pomyślałem, od czego mam zacząć? * Tylko prototyp — napisz działający podstawowy kod, który może kosztować mnie mnóstwo czasu na optymalizację i refaktoryzację w celu łatwej rozbudowy. * Napisz czysty, zoptymalizowany i udokumentowany kod od samego początku, pamiętając, że jeśli po pewnym czasie nie będzie to opłacalne, zostanie porzucone. **Aktualizacja:** Połączenie YAGNI z odpowiedziami sunpech i M.Sameer ma dla mnie sens :) dziękuję wszystkim za pomoc.


title: Kiedy refaktoryzować?

text: Przeczytałem większość książki Fowler's Refactoring i dokonałem refaktoryzacji wielu aplikacji w mojej przeszłości, dużych i małych. Jedną z trudniejszych rzeczy do nauczania jest „kiedy” refaktoryzacja. Zwykle robię to w oparciu o przeczucie, które w przeszłości służyło mi wyjątkowo dobrze. Jednak wchodząc w dyskusję z ludźmi na temat tego, czy fragment kodu powinien zostać pozostawiony sam, czy zrefaktoryzowany, trudno jest wytrzymać przy „kontroli instynktu”. Uważam, że powinno być bardziej rygorystyczne podejście do tego, ale nie jestem pewien, jakie one są. Rozumiem „zapachy kodu”, czerwono-zielone-refaktory i inne myśli, ale często czuję, że najlepszy czas na refaktoryzację to nie pierwszy raz, kiedy piszesz kod, ale drugi lub trzeci raz używasz kodu i zdajesz sobie sprawę że jest to rzeczywiście problem i jest w użyciu.


title: Projektowanie nowej aplikacji od podstaw, opartej na TDD, MVC, OOD

text: Zamierzam doskonalić swoje umiejętności we wszystkim, co wiąże się z projektowaniem aplikacji od podstaw przy użyciu odpowiednich zasad OOD, wykorzystując do tego wzorzec MVC i wykorzystując do tego podejście TDD. Mam na to projekt. Skończyłem też czytać książkę Matta Zandstry: Obiekty PHP, wzorce i praktyka I moje pytanie wciąż pozostaje bez odpowiedzi... Jak zacząć projektować od zera? Czy powinienem natychmiast zacząć używać TDD? Nie czujesz się komfortowo, gdy nie masz jeszcze niczego zaimplementowanego. Czy powinienem najpierw użyć spaghetti kodowego tylko po to, aby najpierw zbudować działający prototyp, zrozumieć zakres i potrzeby, a dopiero potem przepisać wszystko, używając odpowiednich OOD i TDD? Bardzo chciałbym uzyskać porady, jak pracować nad czymś, co uważa się za „PRAWO DO ZROBIENIA”, lub jakąkolwiek książkę, która faktycznie pokaże, jak zbudować aplikacje od podstaw lub zaprojektować architekturę i zależności, a nie tylko rzucać martwe przykładowe kody implementacji wzorców projektowych, tak jak zrobił to Zandstra. Dziękuję! **UPD:** Zasadniczo moje pytanie brzmi: czy dobrym pomysłem jest natychmiastowe rozpoczęcie nowego projektu od użycia TDD i odpowiedniego OOD, czy najpierw napisanie czegoś, co działa w najstraszniejszy i najszybszy sposób, a następnie przerobienie wszystkiego lub przepisanie od zera po zorientowaniu się, jak ma wyglądać Twoja aplikacja?


title: Czy powinienem pozwolić, aby moja „początkowość” mnie powstrzymywała? (nie retoryczne)

text: Moja sytuacja jest taka, że programuję od około trzech lat i dużo się nauczyłem, ale wciąż mam przed sobą długą drogę. Mam pomysł na aplikację, która moim zdaniem mogłaby wystartować, ale boję się ją zbudować, ponieważ wymaga to zaprojektowania zaplecza z bazami danych i uwierzytelnionymi transakcjami płatniczymi i kontami użytkowników, a _Nigdy tego nie robiłem._ Obawiam się, że gdybym zhakował go razem, ludzie by go używali i coś by poszło nie tak – luki w zabezpieczeniach, utrata danych, jakoś przypadkowo upuściłem tabelę i stracę historię płatności wszystkich itp., ponieważ nie mam wystarczającego doświadczenia w praktykach branżowych w zakresie zarządzania danymi, wersjonowania, hostingu przejść i zwykłego starego kodowania. Ale naprawdę chcę to zbudować. Czy ktoś był kiedyś w podobnej sytuacji i czy masz jakieś rady?


title: MVP Lean Startup: Kod jakości lub Szybki i brudny

text: Cześć, niektórzy programiści mogą wiedzieć o filozofii lean, budując minimalnie opłacalny produkt Lean Startup MVP. Zadaję sobie pytanie (przy tworzeniu aplikacji internetowych): > „Czy powinienem włożyć wysiłek w pisanie dobrego kodu wielokrotnego użytku, testowanie itp.” lub > "Napisz szybki i brudny kod. To po prostu działa. Klient nie dba o to, jakiego wzorca programistycznego użyłeś itp. On/ona po prostu chce go użyć." Więc czytanie artykułu o MVP jest dla mnie trochę paradoksem. Z jednej strony mówi: > "wersja nowego produktu, która pozwala zespołowi na zebranie maksymalnej ilości > zweryfikowanych informacji o klientach" z drugiej: > ...rozpocznij proces uczenia się tak szybko, jak to możliwe Więc co faktycznie ma wyższy priorytet? Dla mnie jest to kompromis między czasem a jakością. Popraw mnie, jeśli tego nie zrozumiałem. Dziękuję.


title: Jak rozbroić kodera kowboja?

text: Znalazłem pytanie (kod kowboja w zespole), ale było ono bardziej związane z „Ninja Coder” niż z problemem, który mam. Mam członka zespołu, który jest żywym przykładem „**Cowboy Coder**”. Rozumiem, że nie można zmienić ludzi, ale czy jest to sposób na to, żeby przestał zachowywać się jak „Kowboj Koder”? Nie chce słuchać zespołu, a ostatnio zatrzymał przeglądy kodu, testy jednostkowe, udostępnianie szczegółów implementacji itp. Tak, szybko "koduje", ale jego kod to tylko generator błędów. Inni członkowie zespołu i ja jesteśmy w „fazie naprawiania błędów”, a 80% błędów pochodzi z jego kodu. Nie chcę naprawiać jego błędów. A kierownictwo jest ślepe lub nie chce tego widzieć, a może podoba im się jego „szybkość”. Czy jest jakiś sposób, żebym ja (jako jego młodszy z wiekiem kolega, a nie jego szef) mógł coś z tym zrobić? **Jak mogę rozbroić tego kodera kowboja?** Czuję, że jestem ostatnią osobą, której w ogóle zależy na projekcie.


title: Twórz szybko i z błędami, a następnie poprawiaj błędy lub bądź powolny, uważaj na każdy wiersz kodu?

text: > **Możliwe duplikaty:** > Szczerze mówiąc, wolisz kodowanie kowbojskie? > Prototypowanie a czysty kod na wczesnych etapach > Dobry projekt: Ile hacky jest dopuszczalne? > Czy kunszt się opłaca? Co jest lepsze: 1. Szybkie kodowanie, nie przejmowanie się możliwymi błędami i ograniczeniami, może zapominanie o sprawdzeniu danych wejściowych, zwraca NULL itp., aby wykonać zadanie lub dostać się do kamienia milowego, a następnie poprawić wszystkie możliwe błędy. 2. Powolne kodowanie, sprawdzanie każdej linijki, którą piszesz wiele razy, pisanie testów i sprawdzanie wszystkich możliwych danych wejściowych, aby kod był jak najbardziej wolny od błędów, ale napisanie działającego programu zajmuje tygodnie. Właściwie używam drugiej drogi, ale to frustrujące pracować, pracować, pracować i widzieć tylko małe ulepszenia każdego dnia...


title: Czy powinienem szybko wprowadzać kod i testować później?

text: Jestem web i software developerem zajmującym się tworzeniem aplikacji mobilnych. Obecnie pracuję nad projektem, którego termin się zbliża. Zastanawiam się, czy powinienem zatwierdzać kod szybko i na dużą skalę i testować później, czy też robić małe zatwierdzenia i testować każdy z nich. Dziękuję Ci!


title: Czy porady dotyczące „pisania kodu jakości” odnoszą się do firm o dowolnej skali?

text: Podczas mojej kariery jako freelancer i programista uważnie stosowałem się do rady „zawsze pisz wysokiej jakości kod, chyba że piszesz prototyp”. Dość wcześnie przekonałem się, że unikanie przeglądów kodu, testów, QA czy refaktoryzacji nie czyni projektu szybszym, a jedynie wolniejszym. Książki takie jak The Mythical Man Month Freda Brooksa czy Rapid Development Steve'a McConnella potwierdziły moje przemyślenia. Doświadczenie zawodowe w firmach średniej wielkości pokazało mi również, jak wiele pieniędzy i czasu marnuje się na nawet nie próbowanie wykonywania dobrej pracy. Jednocześnie często słyszę, jak moi koledzy narzekają, że ciągłe utrzymywanie dobrej jakości kodu lub po prostu osiąganie dobrej jakości kodu jest zbyt skomplikowane dla małych firm i małych zespołów: * Po prostu zbyt drogie jest pozyskanie ludzi zdolnych do pisania i utrzymania kod jakości. Jeśli firma może zatrudnić dwie osoby za 3000 USD miesięcznie lub jedną osobę za 6000 USD miesięcznie, większość menedżerów uznałaby, że dwie osoby będą bardziej produktywne niż jedna: może nie dwukrotnie, ale jednak. Albo mała firma może zatrudnić jedną osobę za 3000 dolarów miesięcznie, a pozostałe 3000 wydać na coś innego. * Jest zbyt wiele aspektów, które należy wziąć pod uwagę, aby móc to zrobić w małym zespole. Pojedyncza osoba nie jest w stanie zadbać o styl kodu, czytelność, architekturę, projekt, łatwość testowania, samo testowanie, niezawodność, bezpieczeństwo, łatwość użytkowania, wydajność itp. * I nie warto. To nie jest tak, że kawałek kodu pozostanie w bazie kodu przez następne piętnaście lat i będzie czytany tysiące razy przez setki programistów. Są szanse, że ta sama osoba będzie utrzymywała ten program przez następne pięć lat, a potem po prostu wyrzuci go i napisze lepsze od zera. Zazwyczaj odpowiadam, że należy pamiętać o współczynniku produktywności wynoszącym 1:10 wśród programistów i że większość czasu spędza się nie na pisaniu kodu, ale na jego utrzymaniu. Oznacza to, że kod niskiej jakości jest nadal o wiele droższy. Ale czy tak jest? Czy każda firma, bez względu na swoją skalę, powinna starać się zatrudniać najlepszych programistów, na jakie ich stać i zachęcać ich do pisania kodu wysokiej jakości, czy też istnieje skala, powyżej której jakość kodu staje się tylko obciążeniem, stratą czasu i pieniędzy?


title: Jak daleko posunąć się przy standaryzacji kodu

text: Mój mały zespół i ja stworzyliśmy przyzwoitą aplikację internetową (~50k linii), z w pełni funkcjonalnym API, wszystko w Perlu. Jak my, hakerzy Perla wiemy, łatwo jest być niedbałym. Musieliśmy przenieść dużo starszego kodu.. w ten sposób powstał kod z perl whale guts. Krótko mówiąc, byliśmy pod dość napiętym ograniczeniem czasowym, które teraz zostało przesunięte, więc mamy trochę czasu, aby wrócić i ujednolicić kod. Szybko przekonaliśmy się, jak niestandardowy jest nasz kod, ponieważ nasz wykonawca tworzył aplikację na iOS, w której mamy numery kont o długości 10 w niektórych miejscach, 12 w innych z dołączonymi danymi itp. W miarę jak przerabiam formaty dat i formatowanie danych, Zauważam mnóstwo naprawdę nieopisowych nazw zmiennych i kluczy skrótu, które pochodzą ze starszego kodu - nie jest to miłe w dalszym ciągu. Zasadniczo moje pytanie brzmi - biorąc pod uwagę powyższy scenariusz lub własne doświadczenie, jak daleko posuwasz się podczas sprzątania i standaryzacji? Czy warto wchodzić i zastępować nazwy kluczy haszujących dłuższymi nazwami z wielbłądami i nazwami zmiennych, sposób przetwarzania danych w wynikach - itp. Wiem, że złamanie działającego kodu może spowodować dużo więcej bólu i może nie być tego warte. .ale skąd wiesz, jak daleko iść? Skończ z tym od czasu do czasu, a potem się opłaci, czy po prostu żyć z odrobiną „długu kodowego”?


title: Szczerze mówiąc, wolisz kodowanie kowbojskie?

text: Większość programistów broniących metodologii politycznie poprawnych, takich jak Agile, Waterfall, RUP itp. Niektórzy z nich stosują się do metodologii, ale nie wszyscy. Szczerze mówiąc, jeśli możesz wybrać metodologię, na pewno poszedłbyś do "poprawnych" metodologii głównego nurtu, czy wolisz "łatwiejszą" metodologię, taką jak programowanie kowbojskie? Czemu? Wiem, że to zależy. Proszę, wyjaśnij, kiedy użyjesz jednego lub drugiego. Proszę, powiedz, jakie widzisz zalety kodowania Cowboy. Zobacz o kodowaniu Cowboy na Wikipedii


title: Czy nadpisanie metody zawsze stanowi naruszenie zasady substytucji Liskov?

text: Zastąpienie metody pierwotnie zdefiniowanej w superklasie oznacza z definicji, że ta metoda będzie robić różne rzeczy, gdy zostanie wywołana na obiekcie klasy bazowej lub obiekcie podklasy. Czy to oznacza, że nadpisanie metod _zawsze_ oznacza naruszenie LSP? A może są przypadki, kiedy tak nie jest?


title: Dlaczego warto korzystać z fragmentów Androida?

text: Przeczytałem dokumentację i kilka innych wątków pytań na ten temat i nie czuję się przekonany; Nie widzę wyraźnie granic zastosowania tej techniki. Fragmenty są teraz postrzegane jako _najlepsza praktyka_; **każda aktywność powinna być w zasadzie wsparciem dla jednego lub więcej fragmentów**, a nie bezpośrednio wywoływać układ. Fragmenty są tworzone w celu: 1. umożliwienia `Działania` użycia wielu fragmentów, zmiany między nimi, ponownego użycia tych jednostek... ==> `Fragment` jest całkowicie zależny od `Kontekstu` czynności , więc jeśli potrzebuję czegoś ogólnego, co mogę ponownie wykorzystać i obsłużyć w wielu działaniach, mogę tworzyć własne niestandardowe układy lub widoki ... Nie będę dbał o tę dodatkową warstwę rozwijania złożoności, którą dodałyby fragmenty. 2. lepsza obsługa różnych rozdzielczości ==> OK dla tabletów/telefonów w przypadku długiego procesu, w którym możemy wyświetlić dwa (lub więcej) fragmenty w tej samej aktywności w tabletach i jeden po drugim w telefonach. Ale dlaczego miałbym używać fragmentów **zawsze** ? 3. obsługa wywołań zwrotnych do poruszania się między fragmentami (np. jeśli użytkownik jest zalogowany pokazuję fragment, w przeciwnym razie pokazuję inny fragment). ===> Po prostu spróbuj zobaczyć, ile błędów ma logowanie do facebook SDK z tego powodu, aby zrozumieć, że to naprawdę (?) ... 4. biorąc pod uwagę, że aplikacja na Androida jest oparta na działaniach... Dodawanie innego życia cykli w Aktywności byłoby lepiej zaprojektować Aplikację... Mam na myśli to, że moduły, scenariusze, zarządzanie danymi i łączność byłyby lepiej zaprojektowane w ten sposób. ===> To jest odpowiedź kogoś, kto widział Android SDK i Android Framework z wizją fragmentów. Nie sądzę, żeby to było złe, ale nie jestem pewien, czy da dobre rezultaty... I to jest naprawdę abstrakcyjne... **====> Dlaczego miałbym komplikować sobie życie, kodując więcej, używając ich zawsze ? inaczej, dlaczego jest to najlepsza praktyka, jeśli jest to tylko narzędzie w niektórych przypadkach? co to za przypadki?**


title: NHibernate i złożony model domeny w stosunku do starszej bazy danych

text: Próbuję zrefaktoryzować (właściwie przepisać) aplikację, która obecnie używa tylko procedur składowanych, aby uzyskać dostęp do bazy danych (setki SP). Moim celem jest używanie Nhibernate i podążanie za dobrym projektem w jak największym stopniu. Ale ponieważ baza danych (i SP) jest używana przez dziesiątki innych aplikacji, tak naprawdę nie mogę zmienić projektu bazy danych. I oczywiście, to okropne. Mam problem z projektem i naprawdę nie mogę znaleźć dobrego rozwiązania. Mam tabelę o nazwie filmy, która zawiera filmy, ale te filmy mogą być różnymi „rzeczami”. Na przykład ta tabela zawiera filmy oraz odcinki programów telewizyjnych, a jedynym sposobem na poznanie różnicy jest pole o nazwie „epizod”, które jest ustawione na 0 dla filmów i 1 dla odcinków. Moim celem jest ujawnienie następującej hierarchii klas : public abstract class Program {} public class Episode : Program {} public class Movie : Program {} Obecnie zmapowałem całą tabelę filmów do klasy modelowej MoviesModel, a następnie zbudowałem swój odcinek /Movie class poprzez AutoMapper i metodę fabryczną w klasie Program : public static Program Load(MoviesModel movieModel) { if (movieModel.Episode > 0) return Mapper.Map<Episode>(movieModel); return Mapper.Map<Film>(movieModel); } Wydaje się to naprawdę błędne na wielu poziomach: mam anemiczny model danych, ponieważ mój MoviesModel jest całkowicie pozbawiony jakiejkolwiek logiki biznesowej, automapper staje się naprawdę trudny do utrzymania, gdy dodam wiele innych encji powiązanych z Movies i przerywam lenistwo ładowanie z AutoMapperem. Słyszałem o dowolnym mapowaniu nhibernate, ale tak naprawdę nie rozwiązuje to mojego problemu, po prostu tworzy podkomponenty klasy. Więc moje pytania są następujące: * Idealnie, gdzie powinna być moja logika biznesowa? Myślę, że w klasie MoviesModel, ale nie podoba mi się pomysł ujawnienia pól mojej bazy danych. * Czy istnieje sposób z nhibernate na mapowanie tej samej tabeli w różnych klasach na podstawie wartości pola? * Czy jest sens zawijać obiekty nhibernate, jeśli chcę zapewnić "czysty" publiczny interfejs API? Moim celem jest zbudowanie podstawowej biblioteki, która będzie używana (miejmy nadzieję) w innych starszych aplikacjach, więc chcę zapewnić czyste API z logicznymi metodami i bez narażania bałaganu w bazie danych, nawet jeśli nadal muszę sobie z tym radzić. Dzięki za wszelką pomoc we właściwym kierunku.


title: Co oznacza zmiana głównej procedury? Język programowania C

text: W ćwiczeniu 1-16 w Języku programowania C (K & R) prosi nas o: zrewidowanie _głównej procedury_ programu o najdłuższej linii, tak aby poprawnie wyświetlał długość dowolnych długich linii wejściowych i jak najwięcej tekst. Z tego, co tutaj przeczytałem, dochodzę do wniosku, że główną procedurą jest wszystko wewnątrz `main`, czy to prawda? Poniżej zamieściłem kod dla najdłuższego programu, aby uzyskać więcej kontekstu, ale jestem zdezorientowany tym, o co mnie proszono, a nie kodem. Dziękuję! #include <stdio.h> #define MAXLINE 1000 /* maksymalna długość linii wejściowej */ int getline( char line[], int maxline ); void copy( char do[], char from[] ); /* wypisz najdłuższy wiersz wejściowy */ main() { int len; /* aktualna długość linii */ int max; /* maksymalna długość zaobserwowana do tej pory */ char line[MAXLINE]; /* bieżąca linia wejściowa */ char longest[MAXLINE]; /* najdłuższa linia zapisana tutaj */ max = 0; while (( len = getline( linia, MAXLINE )) > 0) if ( len > max ) { max = len; kopiuj( najdłuższy, linia ); } if ( max > 0 ) printf( "%s", najdłuższy ); zwróć 0; } /* getline: wczytaj linię do s, zwróć długość */ int getline( char s[], int lim ) { int c, i; for ( i = 0; i < lim - 1 && ( c = getchar() ) != EOF && c != '\n'; ++i ) s[i] = c; jeśli ( c == '\n' ){ s[i] = c; ++i; } s[i] = '\0'; powrót ja; } /* kopiuj: skopiuj 'z' do 'do'; załóż, że to jest wystarczająco duże */ void copy( char to[], char from[] ) { int i; i = 0; while ( (to[i] = from[i] ) != '\0' ) ++i; }


title: Jak głęboko ankieter zagłębia się w te umiejętności, o które pytano w ogłoszeniu o pracę

text: Widziałem wiele ofert pracy z wymaganymi normalnymi umiejętnościami technicznymi, ale jest w nich kilka rzeczy, o których nie mam pojęcia, jak mogę je ulepszyć lub jak mam udowodnić, że to wiem. 1. Kontrola jakości cyklu życia oprogramowania 2. Konfigurowanie kontroli wersji w tradycyjnym środowisku deweloperskim/testowym/etapowym/produkcyjnym z zaporami ogniowymi między etapem a produkcją.Uwaga: konfiguracja nie tylko przy użyciu kontroli wersji. 3. Automatyzacja i optymalizacja procesów wydawania oprogramowania 4. Jednoczesne aktualizacje baz danych i poprawki kodu 5. Wersje na rozproszone farmy serwerów w wielu lokalizacjach 6. Konfigurowanie procesów sprawdzania błędów, raportowania błędów i systemów alarmowych 7. Znajomość technologii wyszukiwania jest bardzo pożądana. 8. Metodologia programowania zwinnego i testowanie jednostek Doświadczenie Teraz chcę się dowiedzieć od doświadczonych programistów lub ankieterów o pracę, jak bardzo proszą o te rzeczy. Powodem, dla którego o to pytam, jest to, że jeśli ktoś może pokierować tym, jak mogę się ich nauczyć, abym przynajmniej mógł mieć te rzeczy w życiorysie, abym mógł uzyskać przewagę nad tymi, którzy nic o tym nie napisali. Nie chcę kłamać, ale to, co chcę zrobić, to zastosować te małe na niektórych stronach internetowych, aby przynajmniej móc im powiedzieć, że omówiłem to tutaj. Mam 6 miesięcy wolnego czasu przed wyjazdem do mojego kraju, aby zacząć ubiegać się o pracę, więc szukam tylko wymagań dotyczących pracy, aby móc zapisać je w swoim CV.


title: Jaki wzorzec projektowy dla systemu „inwestycyjnego”?

text: Tworzę grę przeglądarkową z nodejs. Staram się stworzyć funkcję "inwestuj" pozwalającą użytkownikom inwestować zgodnie z ich saldem. Problem polega na tym, że: użytkownik przyszedł i zainwestował 20 dolarów %40 bankrolla Użytkownik B przyszedł i zainwestował 30 dolarów %60 bankrolla Następnie: Użytkownik C zagrał i przegrał 10 dolarów Jak dotąd działało dobrze, teraz: Użytkownik ma 24 dolary %40 bankrolla (+4 dolary) B użytkownik ma 36 dolarów %60 bankrolla (+6 dolary) Ale jeśli użytkownik **D** przyjdzie i zainwestuje trochę dolarów, zysk witryny dzieli się przez 3 zgodnie z moją funkcją . Użytkownik **D** jest ostatni i **nie może** uzyskać żadnego zysku. Jak mogę skonfigurować działający i bezbłędny system inwestycyjny?


title: Czy rekurencja binarna jest rodzajem rekurencji wykładniczej?

text: Ludzie w tym wątku twierdzą, że Fibonacci działa w czasie wykładniczym. Profesor ten z kolei twierdzi, że ciąg Fibonacciego jest rekurencją binarną. Nie sądzę, by którykolwiek z nich był w błędzie, co prowadzi mnie do wniosku, że rekurencja binarna jest formą rekurencji wykładniczej.


title: Aplikacje SPA: AJAX do pobierania szablonów lub budowania z ciągów

text: Pracuję nad dużą aplikacją kątową i obecnie używam klasy fabryki, która buduje szablony HTML z ciągów. Nie musimy się martwić o obsługę mobilną aplikacji i zastanawiam się z architektonicznego punktu widzenia, którą metodę wolałbyś zaimplementować i dlaczego: statyczne pliki HTML, które są pobierane na żądanie, czy klasa budująca szablony jako stringi ?


title: Jak Facebookowi udaje się zezwolić użytkownikowi na nieograniczoną liczbę sesji?

text: Mogłem zalogować się przez stronę internetową, aplikację na Androida, aplikację na iOS, przeglądarki na telefonie komórkowym, a kiedy wyloguję się z jednej, nie wyloguje mnie ze wszystkich. Tradycyjnie wylogowałbyś się ze wszystkich usług jednocześnie, ponieważ twój token_auth_byłby ustawiony na null w DB. Biorąc to pod uwagę, nie widzę sposobu, aby to zrobić przez Rails i Devise. Na razie mam tylko dwa rozwiązania. Pierwszym z nich jest posiadanie oddzielnych tokenów sesji i ustalenie, których użyć na podstawie nagłówka. Jeśli jednak chcesz mieć nieograniczoną liczbę sesji, potrzebujesz unikalnego identyfikatora, aby kontynuować. Nie jestem pewien, jak byś to osiągnął. Drugim rozwiązaniem jest posiadanie licznika w nazwanych sesjach DB. Śledzi, ile sesji jest aktualnie zalogowanych. Jeśli jestem zalogowany przez stronę internetową, aplikację na Androida i aplikację na iOS, będzie to 3. Za każdym razem, gdy masz otwartą i wylogowaną więcej niż jedną sesję, liczba sesje zostaną zmniejszone. Jeśli liczba sesji wynosi 0, ustawiamy token auth_token na null w DB (nil w Ruby). Jedyną luką, jaką widziałem, jest to, że jeśli ktoś się wyloguje, nadal jest zalogowany na innej platformie i zna kod, może znaleźć token auth_token za pomocą poprzednich żądań w swojej przeglądarce. Następnie mogą go wysłać i nadal z niego korzystać, nawet jeśli technicznie się wylogowali. Niekoniecznie widzę z tym problem, ale nie wiem, czy jest to dobry sposób na zrobienie tego. Czy ktoś jeszcze ma dobrą sugestię? Czy jest lepsze miejsce na opublikowanie tego?


title: Szybka konwersja tabel mysql i SQLServer w narzędziu do aktualizacji

text: Wymagania to pobranie istniejącej listy identycznych stołów (AAA0001 - AAA9999), które generalnie nie spełniają naszych aktualnych wymagań i należy je zastąpić trzema stołami (XXX0001-XXX999, YYY0001-YYY999 i ZZZ0001-ZZZ999). Obecnie facet, który programuje tę aktualizację, która ma się odbyć na komputerach naszych klientów, które obsługują zarówno mysql, jak i microsoft SQL Server, uruchamia zapytania wybierające i wstawiające, co z pewnością sprawi, że następna aktualizacja będzie najwolniejsza i najbardziej bolesna w historii nasz produkt. Myślę, że możemy zrobić coś szybciej, zrzucając tabele do bazy danych, wykonując manipulacje ciągami i usuwając zrzuty bazy danych. Jednak nigdy nie używaliśmy w naszym programie żadnych łączników baz danych poza ODBC i niekoniecznie mamy zdolności do wykonywania zarówno zrzutu mysql, jak i SQLServer (chyba że jest to łatwe). Jaki jest więc najszybszy sposób na zrzucanie i cofanie zrzutów wierszy przez ODBC? Jeśli nie ma szybkiego sposobu, jaka jest najbezpieczniejsza i najłatwiejsza do wdrożenia alternatywa? * * * Używamy Delphi XE2 Enterprise, jeśli ktoś posiada narzędzia DB innych firm lub zna skróty. Nigdy nie używaliśmy datasnap, ponieważ nie mieliśmy „dobrej wersji” Delphi, dopóki nie zaktualizowaliśmy do XE2, więc nie mam pojęcia, czy ma tę funkcjonalność.


title: Jakie są najważniejsze algorytmy dla ludzkości w ostatnich dziesięcioleciach?

text: Które z najważniejszych algorytmów na świecie najbardziej przyczyniły się do rozwoju ludzkości w ostatnich dziesięcioleciach? Pomyślałem, że to dobra ogólna wiedza, o której powinien wiedzieć programista. **Aktualizacja:** Jeśli to możliwe, zachowaj odpowiedź na **konkretny algorytm programowania**. Chciałbym otrzymać listę najważniejszych, tylko jeden algorytm na odpowiedź. Zastanów się, dlaczego algorytm jest istotny i ważny...


title: BackgroundWorker a Async/Await

text: Jestem nowy w programowaniu C# i chcę stworzyć bardziej responsywny interfejs użytkownika. W moich wstępnych badaniach widziałem dwie metody osiągnięcia tego celu: 1. Wielowątkowość w połączeniu z klasą BackgroundWorker. 2. Nowsze modyfikatory Async/Await. Czy nowszy znaczy lepszy? Jaka jest różnica między tymi dwiema metodami? Jeśli chcę stworzyć nowy projekt, jak wybrać odpowiednią metodę? EDYCJA: Może powinienem sprecyzować. Tworzę aplikację Windows Forms, w której wszystkie niezbędne dane zostaną zapisane/wczytane na dysk lokalny. Będę też komunikował się z kilkoma urządzeniami USB.


title: Struktura danych szybkiego indeksowania zestawów do pobierania superzestawów

text: Dostaję zestaw zbiorów: {{a,b}, {a,b,c}, {a,c}, {a,c,f}} Chciałbym mieć strukturę danych do indeksowania tych zbiorów, takich jak że następujące "wyszukiwanie" jest wykonywane szybko: znajdź wszystkie nadzbiory danego zbioru. Na przykład, mając zbiór {a,c}, struktura zwróci {{a,b,c}, {a,c,f}, {a,c}}, ale nie {a,b}. Jakieś sugestie? Czy można to zrobić za pomocą inteligentnej, podobnej do próby struktury danych, przechowującej zestawy po odpowiednim sortowaniu? Te struktury danych będą często pytane. Dlatego szukam struktury, która może być kosztowna w kompilacji, ale raczej szybka w zapytaniu. AKTUALIZACJA: W końcu użyłem przedrostka Trie opisanego w artykule „Nowa metoda indeksowania i zapytań o zestawy”, autorstwa Jorga Hoffmanna i Jana Koehlera.


title: Co mam zrobić, gdy nie mogę dotrzymać terminu?

text: Kilka miesięcy temu założyłem startup z przyjaciółmi i — z powodu pewnych osobistych problemów, takich jak rozpoczęcie studiów i przeprowadzka do nowego miasta — stwierdziłem, że prawdopodobnie nie dotrzymam ważnego terminu realizacji projektu, nad którymi pracujemy. Stresuję się tym i nie jestem pewien, co powinienem zrobić. Jak poradzić sobie z tym stresem i poinformować o opóźnieniu mój zespół?


title: Jak skutecznie powiedzieć menedżerowi, że przegapiłeś „termin”

text: > **Możliwy duplikat:** > Nie mogę dotrzymać terminu. Co robić? Mój menedżer jest osobą bardzo terminową. Mimo że jestem praktykantem, on nalega na termin na każde małe zadanie, które zleca. Teraz tak się składa, że mija się z terminem. I chłopcze, wcale tego nie lubi! Jak więc mam powiedzieć, że nie dotrzymałem terminu, nie wywołując jego gniewu? Jak przestać wpadać w jego złe książki? PS Nie jestem leniwy. Tylko, że zadania, które daje, nie są łatwe, a dodatkowo robię to w Delphi, co jest dla mnie nowością.


title: Czy lepiej jest budować ciąg kodu HTML na serwerze czy po stronie klienta?

text: Wynikiem poniższego procesu powinien być formularz html. Struktura tego formularza różni się w zależności od użytkownika. Na przykład może być inna liczba wierszy lub może być potrzebne `rowspan` i `colspan`. Gdy użytkownik zdecyduje się zobaczyć tę tabelę, zostanie wykonane wywołanie ajax do serwera, gdzie struktura tabeli jest ustalana z bazy danych. Następnie muszę stworzyć kod html dla struktury tabeli, który zostanie wstawiony do DOM za pomocą JavaScript. Przychodzi mi do głowy następujący problem: Gdzie mam zbudować kod HTML, który zostanie wstawiony do DOM? Po stronie serwera, czy powinienem wysłać jakieś parametry w metodzie wywołania ajax i tam przetworzyć strukturę? Dlatego główne pytanie dotyczy dobrych praktyk, jeśli chodzi o wybór między przetwarzaniem po stronie serwera a przetwarzaniem po stronie klienta. Dziękuję Ci!


title: Jak mogę przetestować umiejętności PHP podczas rozmowy kwalifikacyjnej?

text: Moja firma musi zatrudnić programistę PHP, ale nikt w mojej firmie nie ma wiedzy na temat PHP i trudno jest nam przetestować umiejętności PHP. Gdyby to był programista C/Java, poprosiłbym go o napisanie szybkiej implementacji Game of Life, ale PHP to zupełnie inny język. Z zainteresowaniem widziałem ten test: http://vladalexa.com/scripts/php/test/test_php_skill.html Ktoś jeszcze ma więcej sugestii?


title: Jak ograniczyć różnice białych znaków dla programistów korzystających z różnych IDE/środowisk?

text: Korzystam z UltraEdit od lat i nigdy nie miałem problemu z udostępnianiem kodu innym programistom, niezależnie od tego, czy pracowali na Windows, Mac, Linux, Eclipse, Visual Studio - co ty... Ale teraz jestem w biurze, w którym niektórzy programiści używają emacsa i obficie narzekają na różnice w odstępach, które „wprowadza mój kod”. Mam ustawiony UltraEdit do zapisywania plików w stylu UNIX (bez zwracania systemu Windows), ale wydaje się, że białe znaki renderują się inaczej dla programistów emacs. Ponieważ nie używam emacs (ani vi), trudno jest mi zrozumieć, dlaczego to ma na nich wpływ, ale bardziej chcę, żeby się zamknęli! lol To nawet powoduje problemy w SVN/Diff! Masz jakieś przemyślenia, jak to naprawić? Zapomnij o wszystkich używających Emacsa, bo tak się nie stanie lol.


title: while(true) i łamanie pętli - antywzorcowanie?

text: Rozważmy następujący kod: public void doSomething(int input) { while(true) { TransformInSomeWay(input); if(ProcessingComplete(input)) przerwa; ZróbCośElseTo(wejście); } } Załóżmy, że ten proces obejmuje skończoną, ale zależną od danych wejściowych liczbę kroków; pętla jest zaprojektowana tak, aby kończyła się sama w wyniku działania algorytmu i nie jest zaprojektowana do działania w nieskończoność (do momentu anulowania przez zdarzenie zewnętrzne). Ponieważ test sprawdzający, czy pętla powinna się zakończyć, znajduje się w środku logicznego zestawu kroków, sama pętla while obecnie nie sprawdza niczego sensownego; kontrola jest zamiast tego wykonywana we „właściwym” miejscu algorytmu pojęciowego. Powiedziano mi, że jest to zły kod, ponieważ jest bardziej podatny na błędy, ponieważ warunek końcowy nie jest sprawdzany przez strukturę pętli. Trudniej jest wymyślić, jak wyjść z pętli i może zaprosić błędy, ponieważ warunek przerwania może zostać pominięty lub przypadkowo pominięty, biorąc pod uwagę przyszłe zmiany. Teraz kod może mieć następującą strukturę: public void doSomething(int input) { TransformInSomeWay(input); while(!ProcessingComplete(input)) { DoSomethingElseTo(input); Przekształć w jakiś sposób (wejście); } } To jednak duplikuje wywołanie metody w kodzie, naruszając DRY; jeśli `TransformInSomeWay` zostałyby później zastąpione inną metodą, oba wywołania musiałyby zostać znalezione i zmienione (a fakt, że są dwa, może być mniej oczywisty w bardziej złożonym fragmencie kodu). Możesz też napisać to tak: public void doCoś(int input) { var complete = false; while(!complete) { TransformInSomeWay(wejście); kompletne = ProcessingComplete(dane wejściowe); if(!complete) { DoSomethingElseTo(wejście); } } } ... ale teraz masz zmienną, której jedynym celem jest przeniesienie sprawdzania warunków do struktury pętli, a także musi być sprawdzana wiele razy, aby zapewnić takie samo zachowanie jak oryginalna logika. Ze swojej strony mówię, że biorąc pod uwagę algorytm, który ten kod implementuje w rzeczywistym świecie, najbardziej czytelny jest kod oryginalny. Gdybyś przechodził przez to sam, w ten sposób byś o tym myślał, a więc byłoby to intuicyjne dla osób zaznajomionych z algorytmem. Więc co jest „lepsze”? czy lepiej jest przypisać odpowiedzialność za sprawdzanie warunków do pętli while poprzez strukturyzację logiki wokół pętli? A może lepiej ustrukturyzować logikę w „naturalny” sposób, na co wskazują wymagania lub pojęciowy opis algorytmu, nawet jeśli może to oznaczać ominięcie wbudowanych możliwości pętli?


title: Oddzielenie walidacji od trwałości w modelach?

text: Modele w aplikacji MVC stają się trudne do przetestowania, gdy weryfikacja danych i trwałość danych są wypiekane razem w modelu. Chciałbym je przetestować osobno, aby zapobiec wykonywaniu testów integracyjnych zamiast rzeczywistych testów jednostkowych. Jakie wzorce są dostępne, aby oddzielić walidację i trwałość?


title: Dobrze organizując jednostronicowy kod za pomocą Notepad++

text: Mam plik c#, który będzie zawierał najprawdopodobniej ponad 10 000 wierszy kodu. Chciałbym podzielić ten plik na segmenty z zakładkami, abym mógł zorganizować każdą metodę w określoną zakładkę i nazwać zakładkę w stylu: konfiguracja początkowa, funkcje pomocnicze, logika wykonania, struktury list, zmienne globalne itp. Gdybym używał PHP miałbym osobne pliki i używałbym include(); dołączyć oddzielne pliki. Co można zrobić w tym samym stylu za pomocą c#?


title: Jaki jest najlepszy sposób na modularyzację schematu użytkownika, aby był ogólny?

text: Mam pytanie dotyczące projektu bazy danych. Zasadniczo chcę móc stworzyć schemat dla modelu User, a następnie używać tego modelu User w innych modelach, które rozszerzają User, ale chcę zaprojektować go w taki sposób, aby był wystarczająco ogólny, aby można go było używać w każdej aplikacji. Na przykład model Profilu lub Konta może rozszerzać Użytkownika i w obu przypadkach będą one różne w zależności od projektowanej aplikacji internetowej, ale podstawowe dane uwierzytelniające Użytkownika nigdy nie powinny różnić się w żadnej aplikacji internetowej. Jak myślisz, jakie pola powinny znajdować się w modelu User? Myślę, że absolutnym minimum do pomyślnej obsługi uwierzytelniania byłoby: * e-mail (unikalny identyfikator logowania) * sól (oczywiście!) * hasło (duh) * lostToken (hasz do weryfikacji funkcjonalności utraconego hasła) * rola (członek, administrator, redaktor itd.. IMO ta lista ról różniłaby się w zależności od strony, ale to zbyt ważne, aby model użytkownika nie miał tutaj?) Teraz przechodzimy do innych interesujących pól, które nadal są bardzo przydatne: * createdAt (kiedy konto zostało utworzone) * ipAddress (śledź ip, kiedy konto zostało utworzone) * refererUrl (z której strony pochodzi) * lastLoggedIn (czas ostatniego logowania użytkownika) * isOnline (czy użytkownik jest aktualnie online) I jeszcze więcej pól, które są nadal bardzo przydatne : * nazwa użytkownika (może nie być używana na każdej stronie) * liczba kolejnych logowań (podobnie jak w sieci stosu) Myślę, że cokolwiek innego, jak dane społecznościowe (polubienia, głosy, wyświetlenia profilu), odznaki/osiągnięcia, ostatnia aktualizacja profil/konto/cokolwiek i ot jej informacje, takie jak ich imię, należą do modelu profilu na stronie. Co myślisz? Edycja: W pełni rozumiem, że to pytanie jest częściowo subiektywne, ale myślę, że zdecydowanie jest miejsce na dyskusję.


title: Czy można używać przykładowego kodu z blogów, GitHub itp. w aplikacjach komercyjnych?

text: Szukając w sieci rozwiązania konkretnego problemu, często znajduję idealne rozwiązanie zamieszczone na czyimś blogu lub w publicznym repozytorium (GitHub, Google Code). W większości przypadków kod nie zawiera informacji o prawach autorskich, ani autor nie wspomina o żadnych zasadach atrybucji. Jestem prawie pewien, że krótkie fragmenty są w porządku, ale co, jeśli skopiuję dosłownie garść klas (ponownie, bez informacji o prawach autorskich, TOS, prośby o uznanie autorstwa itp.)? Czy mam jakieś prawne zobowiązania wobec pierwotnego autora?


title: Czy korzystanie z niezmiennych obiektów w języku skryptowym ma korzystny wpływ na wydajność?

text: Jak rozumiem, pisanie obiektów w niezmiennym stylu może pomóc w wydajności programu dla języków kompilowanych, ponieważ kompilator i tak ma tendencję do przepisywania kodu w postaci pojedynczego, statycznego przypisania pod maską. Czy korzystanie z niezmiennych obiektów w interpretowanym języku, takim jak Python lub PHP, zwiększa wydajność? Rozumiem, że niezmienność może przynieść korzyści w zakresie czytelności lub jakości kodu, ale pytam konkretnie o wydajność.


title: Czy w rozmowie kwalifikacyjnej można mieszać C i C++?

text: Jeśli w wywiadzie zostaniem poproszony o napisanie kodu, czy powinienem całkowicie trzymać się C++, czy też jest dopuszczalne „mieszanie” tych dwóch w celu napisania prostego kodu, gdy przychodzi mi do głowy? Wyjaśnię to: jeśli zostaniem poproszony o utworzenie typu danych „stack”, klasa C++ jest idealnie dopasowana, podczas gdy jeśli potrzebuję parsować niektóre ciągi, strtok/sscanf jest znacznie łatwiejszy niż STL. Z drugiej strony, jeśli potrzebuję ogólnego kontenera STL i szablonów, droga jest do zrobienia. Wszystko można zrobić w C lub w C++, ale w rozmowie nie potrafię wszystkiego zakodować ani zapamiętać każdej funkcji standardu/STL. Jaki jest akceptowalny kompromis?


title: Używanie „Google Guava” w wywiadach dotyczących kodowania

text: Niedawno uczestniczyłem w wywiadzie osobistym i dobrze się spisałem. Ale niespodziewanie zostałem odrzucony. Kiedy zapytałem HR o powód, skontaktował się z ankieterem technicznym i powiedział mi, że podczas kodowania popełniłem błąd składniowy. Do kodowania użyłem Google Guava. Mój kod wyglądał więc tak: `List<String> items = Lists.newArrayList()` zamiast `List<String> items =new ArrayList<String>();` Wiem, że kod skompiluje się i będzie działał zgodnie z oczekiwaniami. Czy w rozmowach kwalifikacyjnych można używać bibliotek innych firm, takich jak Google Guava?


title: Architektura dla danych wykresu społecznościowego z powiązanymi ramami czasowymi?

text: Dodaję kilka funkcji typu „społecznościowego” do istniejącej aplikacji. Istnieje ograniczona liczba typów węzłów i krawędzi. Ogólnie rzecz biorąc, same dane są stosunkowo małe (50 000 - 70 000 dla każdego typu węzła), będzie między nimi pewna liczba krawędzi (związków) (prawie wszystkie kierunkowe). Wiem, że jest to stosunkowo łatwe do przedstawienia za pomocą sklepu SDF (takiego jak BrightstarDB) lub czegoś takiego jak Trinity firmy Microsoft (lub naprawdę wielu opcji noSQL). Myślę, że to, co sprawia, że jest to wyjątkowy przypadek użycia, polega na tym, że każda relacja będzie miała skojarzony z nią ramy czasowe (daty rozpoczęcia i zakończenia). W tej chwili myślę o przechowywaniu tego w strukturze relacyjnej i radzeniu sobie z bólami głowy „przemierzania wykresu”, ale szukam sugestii dotyczących lepszego podejścia (zarówno pod względem struktury danych, jak i serwera): Kolumna ================ Od_Node_ID Relacja Do_Node_ID StartDate EndDate Wszelkie sugestie lub przemyślenia są mile widziane.


title: Jak mogę teoretycznie uczyć Javy na odległość?

text: Będę mógł uczyć Javy teoretycznie (nie będzie zawierał ekranu i pisania na klawiaturze, wszystko co będę miał to papier i aparat, żeby mogli obserwować moje dłonie podczas pisania). Jakieś pomysły, jakie tematy powinienem poruszyć, jeśli uczę w ten sposób?


title: Najlepszy sposób na stylizację aplikacji ASP.NET MVC 4 przez zewnętrznego (zdalnego) projektanta grafiki?

text: Mój klient ma własnego projektanta grafiki, którego chce użyć do stylizacji swojej aplikacji internetowej, którą budujemy w ASP.NET MVC 4. Nasze rozwiązanie znajduje się w Bitbucket, ale jeśli nie może go uruchomić, jakie mamy możliwości? Wątpię, żeby używał Visual Studio 2012. Jednym z pomysłów jest to, żebyśmy opublikowali nasze rozwiązanie w systemie plików, wyślij je do niego, aby utworzył lokalną witrynę IIS na swoim komputerze (zakładając, że nie używa komputera Mac). Mocowanie danych lub wskazywanie testowego SQL na platformie Azure nie stanowi problemu. Następnie może wprowadzać zmiany w plikach .css i .cshtml. Czy to w ogóle zadziała? Chodzi o to, że musi być w stanie przetestować swoje zmiany. Wiem, że może modyfikować widoki i po prostu się zameldować. Ale musi dostarczyć działający projekt. Więc wydaje się to nieefektywne. Grafik będzie miał dostęp do naszej strony testowej, dzięki czemu będzie mógł zobaczyć, jak to działa, jakie mamy dane i pola. Innym pomysłem jest zbudowanie przez niego statycznej makiety strony używając tylko HTML/CSS. Później zintegrowałem jego style z rozwiązaniem klienta, podzieliłem jego html na częściowe widoki, których używamy i dodałem składnię Razor. Ponownie, chcielibyśmy w tym wszystkim wykorzystać projektanta grafiki. Czy udokumentowano najlepszą praktykę dotyczącą tego tematu? Jak inne zespoły radzą sobie z tą sytuacją?


title: Aplikacja komputerowa, wstrzykiwanie zależności

text: Zastanawiam się nad zastosowaniem biblioteki iniekcji rzeczywistych zależności do mojej aplikacji klasycznej zabawki C#/GTK#. Wybrałem NInject, ale myślę, że to nie ma związku z moim pytaniem. Istnieje obiekt bazy danych, okno główne i kilka klas okien narzędziowych. Jasne jest, że mogę wstrzyknąć bazę danych do każdego obiektu okna, więc tutaj DI jest przydatne. Ale czy ma sens wstrzykiwanie klas okien użytkowych do innych klas okien? Przykład: mam takie klasy jak: class MainWindow {…} class AddItemWindow {…} class AddAttachmentWindow {…} class BrowseItemsWindow {…} class QueryBuilderWindow {…} class QueryBrowserWindow {…} class PreferencesWindow {…} … Każda z klas narzędziowych może otworzyć z MainWindow. Niektóre okna narzędziowe można również otworzyć z innych okien narzędziowych. Ogólnie rzecz biorąc, może istnieć naprawdę złożony wykres pokazujący, kto może kogo otwierać. Tak więc każda z tych klas może wymagać wstrzyknięcia wielu innych klas okien. Obawiam się, że takie użycie będzie sprzeczne z sugestią, aby nie wstrzykiwać zbyt wielu klas na raz i stać się zapachem kodu. Czy powinienem tutaj użyć jakiegoś obiektu lokalizatora usług?


title: Jak std::string w c++ przydziela pamięć?

text: Zauważyłem, że biblioteka ciągów nie wymaga przydzielenia miejsca przed zapisaniem danych wejściowych/wyjściowych. W jaki sposób biblioteka ciągów dynamicznie przydziela tę pamięć, wiem o słowie kluczowym „new” w c++ i „malloc” w c, ale kiedy próbuję czegoś takiego, mój program przestaje działać. char* str = nowy char[strlen(str) + 1]; cin>>str; nie mogę zmusić go do pracy w ten sposób, jak działa biblioteka ciągów? Znam również wektory w C++, ale nie jestem wielkim fanem ich używania, chciałbym wiedzieć, czy istnieje sposób na dynamiczne przydzielanie pamięci bez konieczności wcześniejszego przydzielania rozmiaru, coś bliskiego, ale nie tak wyrafinowanego jak biblioteka string.h. W jaki sposób biblioteka ciągów uzyskuje nieograniczone dane wejściowe od użytkownika bez określania przez programistę rozmiaru buforu?


title: Zmienić zdanie kierownictwa?

text: Jako programista pracujący w biurze ubezpieczeniowym mam paskudną małą hierarchię zarządzania, która znacznie utrudnia programowanie. Obecnie nasz dział IT ocenia na trzy punkty w teście Joela, co mnie niepokoi. Chciałbym to naprawić, ale zarząd wymusza szalenie agresywny harmonogram wydań. W zasadzie każdy projekt jest gotowy na „wczoraj”. W rezultacie podstawowe planowanie jest prawie niemożliwe. Najlepsze praktyki, takie jak planowanie, dokumentacja i testowanie, są pomijane w każdym projekcie, który podejmujemy. Do tej pory wypróbowałem niezliczoną ilość metod. Wszystko, od prób przestraszenia ich najgorszymi scenariuszami, po odwoływanie się do standardów branżowych w celu uzyskania porad, jak postępować w danym temacie. Jestem na końcu mojej liny. Powstaje więc pytanie, jakie metody sprawdziły się u innych programistów, aby zmienić sposób, w jaki kierownictwo postrzega programowanie. Moją największą obawą jest to, że po prostu nie da się zmusić ich do zobaczenia światła, a rozwiązaniem jest „praca gdzie indziej”.


title: Nauka programowania przez zanurzenie?

text: Od dawna zdałem sobie sprawę, że najlepszym sposobem na naukę innego (naturalnego) języka jest „zanurzenie” – możesz uczyć się hiszpańskiego w klasie, ale nigdy nie będziesz tak płynny jak ktoś mieszkający w Hiszpanii (przez dłuższy czas który jest zainteresowany nauką języka hiszpańskiego). Byłem ciekawy, czy to samo dotyczy osób, które dopiero zaczynają programować. Teraz wiem, że nie wszystkie z nich są specyficzne dla programowania, ale ogół społeczeństwa przynajmniej ogólnie kojarzy te rzeczy z „komputerowym maniakiem”. Czy przejście na Linuksa byłoby dobrym wyborem? Czy korzystanie z Gita (lub innego typu VCS) byłoby dobrym wyborem? A co z dołączeniem do forów internetowych i IRC? A co z pisaniem testów jednostkowych lub pracą nad większymi projektami? Wiem, że w przeszłości programowanie i informatyka były wprowadzane w bardzo sterylnym środowisku. Zacząłeś w klasie uniwersyteckiej z dobrze znanym programem nauczania i książką (np. _Struktura i interpretacja programów komputerowych_ ), powiedzmy dla kilku "hakerów", którzy zaczynali młodo (i często z BASIC lub podobnymi). Zauważyłem, że rzeczywiste doświadczenie programisty jest bardziej skomplikowane niż tylko znajomość języka (i tego, jak go używać), jest dużo pomiędzy i dużo do nauczenia. Czy uważasz, że lepiej zacząć programować od zanurzenia? Niekoniecznie od razu, ale szybko wprowadzając nowe „koncepcje”, z których korzystają profesjonaliści? A może lepiej zacząć powoli i akademicko?


title: Czy mogę rozwijać swoją karierę w USA, jeśli brakuje mi lokalnej sieci?

text: Jestem web developerem z 10-letnim doświadczeniem w Microsoft. Zostałem sprowadzony do USA przez moją firmę, ale moja umowa się skończyła. Chcę kontynuować karierę w USA, ale wydaje się, że jeszcze na studiach skupiam się na networkingu. Ze względu na moje zagraniczne wykształcenie mój networking miał miejsce gdzie indziej. Jednak ze względu na ten efekt sieciowy wydaje się, że większość programistów w USA musi aplikować tylko na jedno lub dwa stanowiska w ciągu swojej kariery. Czy jestem utrudniony, ponieważ nie mam profesjonalnej sieci w USA?


title: Odczytywanie i warunkowa aktualizacja N wierszy, gdzie N > 100 000 dla przetwarzania sekwencji DNA

text: Mam aplikację dowodową, która wykorzystuje tabele Azure do kojarzenia sekwencji DNA z „czymś”. Tabela 1 jest tabelą główną. Zawiera unikatową listę każdej sekwencji DNA. PK to skrót RK o zrównoważonym obciążeniu. RK to unikalna zakodowana wartość sekwencji DNA. Dodatkowe tabele są tworzone na temat. PK to skrót o zrównoważonym obciążeniu, a RK to unikalna wartość sekwencji DNA. Załóżmy, że ilość RK jest tutaj o wiele rzędów wielkości mniejsza niż w tabeli Master. Każdy badany ma listę N sekwencji DNA, które mają jedno odniesienie w tabeli głównej, gdzie N jest > 100 000. Wiele tabel może odwoływać się do tej samej sekwencji DNA, ale w tym przypadku w tabeli Master będzie obecny tylko jeden wpis. **Mój dylemat Azure:** Podczas pracy z danymi muszę zablokować odwołanie w tabeli głównej. Muszę obsłużyć limity czasu i zapobiec zastępowaniu moich danych przez inne wątki, ponieważ jeden wątek C# pracuje z informacjami. Inne wątki muszą zdać sobie sprawę, że jest to zablokowane, przejść do innych odblokowanych rekordów i wykonać pracę. Idealnie chciałbym uzyskać raport o postępach moich obliczeń i mieć możliwość anulowania procesu (i rozwinięcia blokad). **Pytanie** Jakie jest najlepsze podejście do tego? Szukam inspiracji na tych fragmentach kodu: http://blogs.msdn.com/b/jimoneil/archive/2010/10/05/azure-home-part-7-asynchronous-table-storage-pagination.aspx http://stackoverflow.com/q/4535740/328397


title: Krytyka postrzegania monady IO jako monady państwowej działającej na świecie

text: Monada `IO` w Haskell jest często tłumaczona jako monada państwowa, w której państwo jest światem. Tak więc wartość typu `IO a` monad jest postrzegana jako coś w rodzaju `worldState -> (a, worldState)`. Jakiś czas temu przeczytałem artykuł (lub post na blogu/listy mailingowej), który skrytykował ten pogląd i podał kilka powodów, dla których jest niepoprawny. Ale nie pamiętam ani artykułu, ani powodów. Czy ktoś wie? **_Edytuj:_ Artykuł wydaje się zaginiony, więc zacznijmy zbierać różne argumenty tutaj.** Rozpoczęłam nagrodę, aby uczynić rzeczy bardziej interesującymi. _Edytuj:_ Artykuł, którego szukałem, to Zmaganie się z niezręczną drużyną: monadyczne wejście/wyjście, współbieżność, wyjątki i połączenia w języku obcym w Haskell autorstwa Simona Peytona Jonesa. (Dzięki odpowiedzi TacTics.)


title: Twarde deklaracje w Haskell (á la C)

text: http://susam.in/blog/clumsy-pointers/ Jak rozwiązać różne zagadki deklaracji za pomocą Haskella? `void x1(int *)` Funkcja, która ma argument int * i zwraca typ void. `void (*x2)(int *)` Wskaźnik do funkcji, która ma argument int * i zwraca typ void. `void (*x3())(int *)` Funkcja zwracająca wskaźnik do funkcji, która ma argument int * i zwraca typ void. `void (*x4(void (*)(int *)))(int *)` Funkcja, która ma wskaźnik do funkcji, która ma argument int * i zwraca typ void jako argument i zwraca wskaźnik do funkcji, która ma int * argument i zwraca typ void. `void (*x5(void (*[10])(int *)))(int *)` Funkcja, która ma tablicę 10 wskaźników do funkcji, która ma argument int * i zwraca typ void jako argument i zwraca wskaźnik do funkcji, która ma argument int * i zwraca typ void. `void (*(*x6)(void (*[10])(int *)))(int *)` Wskaźnik do funkcji, która ma tablicę 10 wskaźników do funkcji, które mają argument int * i typ zwracany void jako argument i zwraca wskaźnik do funkcji, która ma argument int * i zwraca typ void. `char (*(*x7())[])()` Funkcja zwracająca wskaźnik do tablicy[] wskaźnika do funkcji zwracającej znak. `char (*(*x8[3])())[5]` Tablica[3] wskaźnika do funkcji zwracającej wskaźnik do tablicy[5] znaku.


title: iOS - Testy jednostkowe dla kodów KVO/delegowanych

text: Mam zamiar zaprojektować wzorzec MVC. Może być zaprojektowany jako wzorzec delegata lub Key-Value-Observing(KVO), aby powiadomić kontroler o zmianie modeli. Projekt wymaga pewnych procedur kontroli jakości w celu zapewnienia zgodności z tymi dokumentami weryfikacyjnymi. Moje pytania: 1. Czy wzorzec delegata lepiej pasuje do testów jednostkowych niż KVO? 2. Jeśli KVO pasuje lepiej, czy możesz zasugerować kilka przykładowych kodów?


title: Jak „sprzedawać” wsparcie jako opcję kariery?

text: Stosunkowo łatwo jest nam zatrudnić programistów do pracy przy różnych projektach. Problem pojawia się, gdy projekt jest ukończony, ale nadal wymaga wsparcia. Naprawdę walczymy o to, aby ludzie dołączyli do zespołu wsparcia. Jest to postrzegane jako ślepy zaułek, ograniczający karierę, nudny, drugorzędny itp. Obecnie radzimy sobie z tym, zachęcając zespół projektowy do przydzielenia na jakiś czas części swojego zespołu do zespołu wsparcia. Częścią zadania jest wykonanie „zrzutu mózgu” projektu, aby zespół wsparcia go zrozumiał. Działa to tak długo, jak przydział jest tylko na czas określony. Problemem jest zatrudnianie ludzi do pracy w charakterze wsparcia w pełnym wymiarze godzin. Zastosowań jest niewiele, a kaliber nie jest szczególnie wysoki. (Rzeczywistość finansowa jest jednak taka, że wsparcie może być bardzo lukratywne dla firmy, a gdy zdobędziesz reputację, inne firmy podejdą do ciebie, aby udzielić wsparcia, nawet jeśli nie byłeś zaangażowany w pierwotny rozwój).


title: Pytania do rozmowy kwalifikacyjnej C++?

text: Oczekuję rozmowy kwalifikacyjnej dla C++, jakich pytań powinienem się spodziewać? Programuję w C od 5 lat. Wiem, czym jest OOP i od jakiegoś czasu o tym czytam. Ale najprawdopodobniej mogę pominąć ważne szczegóły, ponieważ nie robię nic prawdziwego w C++. Z poważaniem,


title: Czy Java jest znacznie trudniejsza do „podkręcenia” pod kątem wydajności w porównaniu z C/C++?

text: Czy „magia” JVM utrudnia wpływ programisty na mikrooptymalizacje w Javie? Ostatnio czytałem w C++, że czasami kolejność elementów danych może zapewnić optymalizacje (przyznane, w środowisku mikrosekundowym) i przypuszczam, że ręce programisty są związane, jeśli chodzi o wyciskanie wydajności z Javy? Doceniam, że przyzwoity algorytm zapewnia większe przyrosty prędkości, ale kiedy masz poprawny algorytm, czy Java jest trudniejsza do dostosowania ze względu na sterowanie JVM? Jeśli nie, czy ludzie mogą podać przykłady sztuczek, których można użyć w Javie (poza prostymi flagami kompilatora).


title: Kiedy „właściwe” programowanie przestaje mieć znaczenie?

text: W wolnym czasie buduję grę na Androida. Używa biblioteki libgdx, więc sporo ciężkiej pracy wykonuje za mnie. Podczas opracowywania niedbale dobierałem typy danych do niektórych procedur. Użyłem tablicy haszującej, ponieważ chciałem czegoś zbliżonego do tablicy asocjacyjnej. Kluczowe wartości czytelne dla człowieka. W innych miejscach, aby osiągnąć podobne rzeczy, używam wektora. Wiem, że libgdx ma klasy vector2 i vector3, ale nigdy ich nie używałem. Kiedy natrafiam na dziwne problemy i szukam pomocy w Stack Overflow, widzę, że wiele osób po prostu rozwija pytania, które używają określonego typu danych, gdy inny jest technicznie „właściwy”. Podobnie jak przy użyciu ArrayList, ponieważ nie wymaga ona zdefiniowanych granic w przeciwieństwie do ponownego definiowania int[] z nowymi znanymi granicami. Lub nawet coś trywialnego jak to: for(int i = 0; i < items.length; i ++) { // zrób coś } Wiem, że ocenia item.length w każdej iteracji. Wiem jednak również, że przedmioty nigdy nie będą większe niż 15 do 20 sztuk. Czy więc powinno mnie obchodzić, czy oceniam items.length w każdej iteracji? Przeprowadziłem kilka testów, aby zobaczyć, jak aplikacja działa przy użyciu metody, którą właśnie opisałem, w porównaniu z właściwą, postępuj zgodnie z samouczkiem i używaj dokładnych typów danych sugerowanych przez społeczność. Wyniki: To samo. Średnio 45 kl./s. Otworzyłem każdą aplikację na karcie telefonu i galaktyki. Bez różnicy. Więc myślę, że moje pytanie do ciebie brzmi: czy istnieje próg, w którym nie ma już znaczenia, aby być właściwym? Czy można powiedzieć - "dopóki wykona swoją pracę, nie obchodzi mnie to?"


title: Powinienem był użyć metody fabrycznej zamiast konstruktora. Czy mogę to zmienić i zachować zgodność wsteczną?

text: **Problem** Załóżmy, że mam klasę o nazwie `DataSource`, która udostępnia metodę `ReadData` (i może inne, ale zachowajmy prostotę) do odczytywania danych z pliku `.mdb`: var source = new DataSource ("mójPlik.mdb"); var data = source.ReadData(); Kilka lat później zdecydowałem, że chcę mieć możliwość obsługi plików `.xml` oprócz plików `.mdb` jako źródeł danych. Implementacja "odczytu danych" jest zupełnie inna dla plików `.xml` i `.mdb`; więc gdybym miał zaprojektować system od podstaw, określiłbym go tak: abstract class DataSource { abstract Data ReadData(); static DataSource OpenDataSource(string fileName) { // odpowiednio zwróć MdbDataSource lub XmlDataSource } } class MdbDataSource : DataSource { override Data ReadData() { /* implementacja 1 */ } } class XmlDataSource : DataSource { override Data ReadData() { / * implementacja 2 */ } } Świetna, doskonała implementacja wzorca metody Factory. Niestety, `DataSource` znajduje się w bibliotece, a refaktoryzacja kodu w ten sposób uszkodziłaby wszystkie istniejące wywołania var source = new DataSource("myFile.mdb"); u różnych klientów korzystających z biblioteki. Biada mi, dlaczego w ogóle nie zastosowałem metody fabrycznej? * * * **Rozwiązania** Oto rozwiązania, które mógłbym wymyślić: 1. Spraw, aby konstruktor DataSource zwracał podtyp (`MdbDataSource` lub `XmlDataSource`). To rozwiązałoby wszystkie moje problemy. Niestety C# tego nie obsługuje. 2. Użyj różnych nazw: abstract class DataSourceBase { ... } // odpowiada DataSource w powyższym przykładzie class DataSource : DataSourceBase { // odpowiada MdbDataSource w powyższym przykładzie [Obsolete("Nowy kod powinien zamiast tego używać DataSourceBase.OpenDataSource" )] DataSource(string fileName) { ... } ... } class XmlDataSource : DataSourceBase { ... } Właśnie tego użyłem, ponieważ utrzymuje on kompatybilność wsteczną kodu (tj. wywołania `new DataSource("myFile. mdb")` nadal działa). Wada: Nazwy nie są tak opisowe, jak powinny. 3. Uczyń `DataSource` "opakowaniem" dla rzeczywistej implementacji: class DataSource { private DataSourceImpl impl; DataSource(string fileName) { impl = ... ? nowy MdbDataSourceImpl(nazwa_pliku) : nowy XmlDataSourceImpl(nazwa_pliku); } Dane ReadData() { return impl.ReadData(); } abstract private class DataSourceImpl { ... } private class MdbDataSourceImpl : DataSourceImpl { ... } private class XmlDataSourceImpl : DataSourceImpl { ... } } Wada: Metoda źródła danych _Every_ (np. `ReadData`) musi być kierowana przez kod wzorcowy . Nie podoba mi się standardowy kod. Jest zbędny i zaśmieca kod. Czy jest jakieś _eleganckie_ rozwiązanie, którego przegapiłem?


title: Jak mogę przetwarzać wielokrotnie mój program?

text: Napisałem program, który zdrapuje strony internetowe. Jest to dość proste, ponieważ przetwarza link jeden po drugim. Ze względu na czynnik ograniczający prędkość Internetu proces ten jest raczej powolny. Zastanawiam się, jak mogę zrobić to wieloprocesowe? Moduły Pythona są mylące. Nie znam różnicy między podprocesem a wieloprocesem. Słyszałem, że przetwarzanie wieloprocesowe jest trudne i nieefektywne z powodu GIL od czasu Pythona 2.x. Używam Pythona 3.2, więc zastanawiam się, czy coś się poprawiło.


title: Pomoc ze strukturą bazy danych, stroną vOD

text: Mam witrynę w stylu wideo na żądanie, która zawiera _serię_ filmów wideo w różnych _modułach_. Jednak sposób, w jaki zaprojektowałem bazę danych, okazuje się być bardzo powolny. Zadawałem to pytanie już wcześniej i ktoś zasugerował indeksowanie, ale wydaje mi się, że nie mogę tego ogarnąć. Ale chciałbym, aby ktoś pomógł tutaj w strukturze bazy danych, aby zobaczyć, czy można ją ulepszyć. Podstawowa tabela to Filmy: ID bigint(20) (klucz podstawowy, auto-inkrementacja) pID tekst data emisji tekst tytuł tekst temat średni tekst url średni tekst mID int(11) vID int(11) sID int(11) pID to unikatowe 5 cyfr do każdego filmu, który jest skróconym identyfikatorem. Airdate to TS (przechowywany w formacie tekstowym, właśnie tam może powinienem to zmienić na TIMESTAMP AUTO UPDATE), tytuł nie wymaga wyjaśnień, temat nie wymaga wyjaśnień, adres URL to twardy link na stronie do filmu, do którego dołączony jest mID inna tabela dla tytułu modułu, vID jest połączony z inną tabelą dla języka wideo (angielski, rosyjski itp.), a sID jest podsumowaniem modułu, akapitem przechowywanym w zewnętrznej bazie danych. Najwolniejszą częścią witryny jest jej część związana z logowaniem. Przechowuję dane w innej tabeli o nazwie „Hits”: id mediumint (10) (klucz podstawowy, auto-inkrementacja) tekst progID ts int (10) Ponownie tutaj (wszystko to zostało zrobione jakiś czas temu), ale mój znacznik czasu (ts) jest INT zamiast ON UPDATE CURRENT TIMESTAMP, co, jak sądzę, powinno być. Jednak ta tabela ma teraz 47 492 wierszy, a skrypt, który napisałem, aby ją przetworzyć, jest bardzo powolny, tak powolny, że minął limit czasu. Do tej tabeli dodawany jest wiersz za każdym razem, gdy użytkownik kliknie „Odtwórz” na stronie internetowej, a następnie progID jest taki sam jak pID i rejestruje znacznik czasu php time() w `ts`. Zasadniczo ładuję całą bazę danych „Hits” do tablicy i liczę trafienia każdego dnia za pomocą kolumny TS. Zgaduję (jestem w tym dość powolny, ale nie miałem pojęcia, że to się stanie, kiedy to zbudowałem), że jest to prawdopodobnie najgorszy sposób na zrobienie tego. Więc moje pytania są następujące: 1. Czy istnieje lepszy sposób na uporządkowanie tabeli „Wideo”, czy tak, co sugerujesz? 2. Czy istnieje lepszy sposób na zorganizowanie „hitów”, jeśli tak, pomóż/powiedz mi! A może to fakt, że moje tabele są w porządku, a kodowanie PHP jest kiepskie?


title: Problemy z Unikaniem Smurf Naming klas z przestrzeniami nazw

text: Wyciągnąłem stąd termin smerf nazewnictwo (numer 21). Aby oszczędzić każdemu, kto nie zna kłopotów, nazewnictwo Smurf polega na poprzedzeniu zbioru powiązanych klas, zmiennych itp. wspólnym prefiksem, dzięki czemu otrzymujesz „SmurfAccountView przekazuje SmurfAccountDTO do SmurfAccountController” itp. Rozwiązanie, które Generalnie słyszałem, że jest to stworzenie przestrzeni nazw smurf i porzucenie przedrostków smurf. Ogólnie dobrze mi to służyło, ale napotykam dwa problemy. 1. Pracuję z biblioteką z klasą `Configuration`. Mogłoby się nazywać `WartmongerConfiguration`, ale znajduje się w przestrzeni nazw Wartmonger, więc nazywa się po prostu `Configuration`. Podobnie mam klasę `Configuration`, którą można nazwać `SmurfConfiguration`, ale znajduje się ona w przestrzeni nazw Smurf, więc byłoby to zbędne. W moim kodzie są miejsca, w których `Smurf.Configuration` pojawia się obok `Wartmonger.Configuration`, a wpisywanie w pełni kwalifikowanych nazw jest nieporęczne i sprawia, że kod jest mniej czytelny. Lepiej byłoby zajmować się `SmurfConfiguration` i (gdyby to był mój kod, a nie biblioteką) `WartmongerConfiguration`. 2. Mam klasę o nazwie `Service` w mojej przestrzeni nazw Smurf, która mogłaby nazywać się `SmurfService`. `Service` to fasada na szczycie złożonej biblioteki Smerf, która obsługuje zadania Smerf. `SmurfService` wydaje się być lepszą nazwą, ponieważ `Service` bez prefiksu Smurf jest niesamowicie ogólny. Zgadzam się, że `SmurfService` było już ogólną, bezużyteczną nazwą, a odebranie smerfowi tylko sprawiło, że stało się to bardziej widoczne. Ale mógłby zostać nazwany „Runner”, „Launcher” itp. i nadal „czułbym się lepiej” jako „SmurfLauncher”, ponieważ nie wiem, co robi „Launcher”, ale wiem, co „SmurfLauncher” czy. Można argumentować, że to, co robi „Smurf.Launcher”, powinno być tak samo oczywiste jak „Smurf.SmurfLauncher”, ale widziałem, że „Smurf.Launcher” to rodzaj klasy związanej z konfiguracją, a nie klasą, która uruchamia smerfy. Jeśli istnieje otwarty i zamknięty sposób radzenia sobie z którymkolwiek z nich, byłoby świetnie. Jeśli nie, jakie są typowe praktyki mające na celu złagodzenie ich irytacji?


title: Dlaczego wyjątki języka F# zazwyczaj nie mają sufiksu „Wyjątek”?

text: W .NET idiomatyczne jest dodawanie do typów wyjątków wyrażenia `Exception`. Ale większość, jeśli nie wszystkie, źródła, które widziałem dla niestandardowych typów wyjątków w F#, nie są zgodne z tym idiomem. Większość używa sufiksu „Błąd”. From F# Wyjątek For Fun and Profit MyFSharpError1 wyjątek string MyFSharpError2 wyjątek string * int From Microsoft Documentation* wyjątek MyError of string Książka 'Expert F# 3.0', której współautorem jest Don Syme, zawiera przykład, który nawet nie wydaje się podążać dowolny idiom: wyjątek BlockedURL of string Dlaczego niestandardowe wyjątki w języku F# nie są zgodne ze standardowymi idiomami dla platformy .NET? Czy to z powodu dziedzictwa OCamla? * Link jest do pamięci podręcznej Google, ponieważ nie mogę połączyć się z MS w momencie pisania.


title: Jaka jest różnica między serwerem a komputerem mainframe?

text: Wydaje mi się, że „mainframe” jest terminem nieco przestarzałym; czy jest to po prostu starszy synonim terminu „serwer”, czy też służy do celów bardziej zbliżonych do klastra/superkomputera?


title: Jaka jest dobra technika uniemożliwiająca nieuwierzytelnionym użytkownikom dostęp do metod kontrolera?

text: Mam kontroler zdarzeń: class Event extends CI_Controller{ public function index() { } public function foo() { } // Nie powinien być w stanie użyć tej metody, chyba że jest zalogowany w funkcji publicznej bar() { } } A ja staram się uporządkować mój kod tak, aby był dość uporządkowany i prosty. Właśnie teraz mam kontroler o nazwie `MY_Controller`, aby tylko uwierzytelnieni użytkownicy mieli dostęp do metod(`edit_event()`,`add_event()`) dowolnych kontrolerów rozszerzających go. Jednak niektóre metody w moim kontrolerze muszą być dostępne dla nieuwierzytelnionych użytkowników (takich jak `get_event()`). Jaki jest dobry sposób radzenia sobie z tym? Czy powinienem utworzyć dwa całkowicie oddzielne kontrolery, czy rozszerzyć podstawowy kontroler zdarzeń i dodać uwierzytelnione metody? Wcześniej miałem kontroler zarządzający, który obsługiwał wszystkie metody wymagające uwierzytelnienia, takie jak `add_user`,`delete_user`,`add_doc`,`delete_doc`. Ale bardzo szybko się zamazał i nie było łatwo zaktualizować lub zmodyfikować kontroler (dodatkowo był bałaganiarski i nie wydawał się przestrzegać dobrej etykiety programistycznej).


title: Konwersja systemu zarządzania użytkownikami do używania ajax

text: Obecnie buduję stronę internetową, która do niedawna była czysto PHP. Jednak teraz staram się, aby witryna używała więcej AJAX, aby zmniejszyć przeładowania strony. W PHP miałem uroczą klasę zorientowaną obiektowo z metodami aktualizacji danych, wylogowania i tak dalej. Gdy użytkownik zaloguje się, zostanie to zapisane jako zmienna sesji, a następnie każda strona, która chce zrobić cokolwiek, może po prostu pobrać ją z sesji i wywołać jej metody. Oczywiście to użycie obiektów php i sesja tak naprawdę nie działają z ajaxem. Nie chcę jednak tracić na przechowywaniu użytkownika w obiekcie (co nieco porządkuje), więc nie chcę po prostu podążać ścieżką definiowania mnóstwa funkcji js, które pobierają bieżącą nazwę użytkownika i używają do wykonywania zapytań mysql poprzez ajax. Czy jestem tu głupi i jaką trasę poleciliby mi ludzie.


title: Kto jest właścicielem pomysłu w sieci?

text: Powiedzmy, że osoba „A” wspomniała o pomyśle na projekt oprogramowania w sieci (np. na forum). Osoba „B” widzi ten pomysł i go realizuje. Czy osoba „A” może zgłosić prawo własności do pomysłu? Czy osoba „B” zrobiła coś nielegalnego, realizując pomysł, który opublikowała osoba „A”?


title: TDD w JavaScript

text: Mam zamiar wziąć udział w Coding Kata i chciałbym to zrobić w JavaScript. Jakich narzędzi i bibliotek potrzebuję do TDD w JavaScript?


title: Strategia unikania zduplikowanych identyfikatorów obiektów dla danych udostępnianych między urządzeniami za pomocą iCloud

text: Mam aplikację iOS intensywnie korzystającą z danych, która nie korzysta z CoreData ani nie obsługuje synchronizacji iCloud (jeszcze). Wszystkie moje obiekty są tworzone za pomocą unikalnych kluczy. Używam prostego `long long` inicjowanego aktualnym czasem. Następnie, gdy potrzebuję nowego klucza, zwiększam wartość o 1. Wszystko to działało dobrze przez kilka lat z aplikacją działającą odizolowaną na jednym urządzeniu. Teraz chcę dodać obsługę automatycznej synchronizacji danych między urządzeniami korzystającymi z iCloud. Jak napisano w mojej aplikacji, istnieje możliwość, że dwa obiekty utworzone na dwóch różnych urządzeniach mogą mieć ten sam klucz. Muszę uniknąć takiej możliwości. Szukam pomysłów na rozwiązanie tego problemu. Mam kilka wymagań, które musi spełniać rozwiązanie: 1) Klucz musi pozostać pojedynczym integralnym typem danych. Konwertowanie wszystkich istniejących kluczy na klucz złożony, łańcuch lub inny typ wpłynęłoby na całą bazę kodu i prawdopodobnie spowodowałoby więcej błędów, niż jest to warte. 2) Rozwiązanie nie może zależeć od połączenia internetowego. Użytkownik musi mieć możliwość uruchamiania aplikacji i dodawania danych nawet bez połączenia z Internetem. Dane powinny zostać poprawnie rozwiązane później, gdy dane zostaną zsynchronizowane przez iCloud, gdy połączenie będzie dostępne. Zaakceptuję jeden wyjątek od tej reguły. Jeśli nie jest dostępna żadna inna opcja, mogę wymagać połączenia z Internetem przy pierwszym inicjalizacji danych aplikacji. Jednym z pomysłów, którym się bawiłem w mojej głowie, jest logiczne podzielenie klucza liczb całkowitych na dwie części. Wysokie 4 lub 5 bitów mogą być używane jako identyfikator urządzenia, podczas gdy reszta reprezentuje rzeczywisty klucz. Rozmyta część polega na wymyśleniu, jak wymyślić niekonfliktowe identyfikatory urządzeń, które pasują do kilku bitów. To powinno być opłacalne, ponieważ nie muszę zajmować się milionami urządzeń. Muszę tylko poradzić sobie z kilkoma urządzeniami, które będą współdzielone przez dane konto iCloud. Jestem otwarta na propozycje. Dziękuję. Aktualizacja: Po zastanowieniu się nad tym, zdecydowałem się przyjąć krótkoterminowy hit i zrobić to we właściwy sposób. Korzystanie z GUID jest zdecydowanie najlepszą długoterminową opcją. Korzystanie z tego podejścia eliminuje potrzebę wykonywania różnych opcji, aby poradzić sobie z rozdawaniem zakresów kluczy lub tłumaczeniem kluczy po nawiązaniu połączenia z Internetem. Moje pierwotne wymaganie uniemożliwiło użycie opcji GUID, ponieważ ani SQLite, ani iOS nie obsługują prostego, 128-bitowego typu liczb całkowitych. Ponieważ mam dużą istniejącą bazę kodu, która jest napisana w taki sposób, że moje klucze są prostymi typami całkowitymi, będzie to wymagało poważnej refaktoryzacji zarówno kodu, jak i schematu bazy danych. W końcu zdecydowałem, że krótkoterminowy ból związany z przeprowadzeniem tej refaktoryzacji waży długoterminowe problemy związane z radzeniem sobie z niezgrabnym rozwiązaniem. Przyjęcie ciosu teraz daje mi znacznie prostsze i mniej podatne na błędy rozwiązanie, które przetrwa długoterminowo.


title: Jak dodać pierwszeństwo parserowi LALR jak w YACC?

text: _Uwaga, proszę o napisanie parsera LALR, **nie** pisanie reguł dla parsera LALR._ ## Potrzebuję... **...naśladować definicje priorytetów YACC. Nie wiem, jak to jest zaimplementowane, a poniżej opisuję, co do tej pory zrobiłem i przeczytałem.** * * * Na razie mam napisany podstawowy parser LALR. Kolejny krok – dodanie pierwszeństwa, aby `2+3*4` mogło zostać przetworzone jako `2+(3*4)`. Czytałem o parserach pierwszeństwa, jednak nie wiem jak dopasować taki model do LALR. Nie rozumiem dwóch punktów: * jak obliczyć, kiedy generator wstawia nawiasy * jak obliczyć, ile nawiasów powinien utworzyć generator Wstawiam generatory, gdy symbole są pobierane z wejścia i umieszczane na stosie, prawda? Powiedzmy, że mam coś takiego (`|` oznacza granicę między stosem a wejściem): 1. `ID = 5 | + ...`, w tym miejscu dodaję open, więc daje 2. `ID = < 5 | + ...`, potem czytam więcej input 3. `ID = < 5 + | 5 ...` i więcej 4. `ID = < 5 + 5 | ; ...` i więcej 5. `ID = < 5 + 5 ; | ...` W tym momencie powinienem wykonać kilka ruchów redukujących w normalnym LALR, ale otwarty nawias nie pasuje, więc kontynuuję czytanie większej ilości danych wejściowych. Co nie ma sensu. Więc to był problem **kiedy**. A jeśli chodzi o **count** , powiedzmy, że mam takie dane `< 2 + < 3 * 4 >`. Jako człowiek widzę, że ostatni generator powinien utworzyć 2 nawiasy, ale jak to obliczyć? W końcu mogą istnieć dwa scenariusze: * `( 2 + ( 3 * 4 ))` \-- nawiasy służą do pokazania wyniku generatora * lub `(2 + (( 3 * 4 ) ^ 5)` ponieważ tam było więcej danych wejściowych Proszę zauważyć, że w obu przypadkach przed 3 był otwarty generator, a po 4 był zamknięty, jednak w obu przypadkach po przeczytaniu `4` muszę zredukować, więc muszę wiedzieć, co generator "tworzy".


title: plik nagłówkowy do konwersji mowy na tekst

text: Robię projekt na mowę do tekstu z procesorem omap w zestawie utlp. Istnieje interfejs API do nagrywania mojego głosu, który konwertuje mój głos na pcm i jest przechowywany w buforze. Mam kilka angielskich słów, które nagrałem i przekonwertowałem na tablicę, teraz chciałem wiedzieć, jak porównać wypowiadane słowo w formie pcm z tablicą, którą utworzyłem. Czy jest jakiś plik nagłówkowy, czy też można wydrukować pcm jako tekst.


title: lista_inicjalizacyjna połączona z innymi parametrami

text: Załóżmy, że mam klasę, która pobiera w konstruktorze parametr typu „T” i zbiór parametrów typu „U”. Działa następujące rozwiązanie: struct Q { Q(T t, std::initializer_list<U> us); }; Stworzenie instancji tej klasy wyglądałoby zatem następująco: `Q q {t1, {u1, u2, u3, u4} };` Ale to wygląda na nieczyste dla mnie. Czy istnieje lepsze rozwiązanie niż to?


title: Czy dobra gramatyka jest warunkiem wstępnym dla twojego zespołu programistów?

text: Rozumiem, że może to być przede wszystkim oparte na opiniach, ale myślę też, że jest to interesujące pytanie i chciałbym poznać opinie innych na ten temat. Niedawno zostałem starszym programistą w dużej firmie i odziedziczyłem to, co mogę opisać tylko jako nieodpowiednią bazę kodu. Chociaż nie będę wdawać się w szczegóły, dlaczego większość z nich była okropna, coś, co _wyróżniało_ się, to ogromna ilość błędów ortograficznych. Jednym z bardziej godnych uwagi było „Actual” pisane jako „Acutal”. Było to wszechobecne w funkcjach, klasach, nazwach procedur składowanych i nazwach kolumn. Dla mnie jest to wyraźna oznaka braku staranności i należytej staranności w stosunku do wykonywanej pracy. Uważam, że jeśli kod jest zaśmiecony tego rodzaju rzeczami, dany programista nie zwraca na to uwagi. Rozumiem, że istnieje zastrzeżenie, jeśli dany programista być może nie jest native speakerem języka angielskiego (w tym przypadku byli) - ale proste przeglądy kodu powinny wychwycić te rzeczy. Jako programiści spędzamy dużo czasu upewniając się, że nasza praca jest funkcjonalnie poprawna, optymalna bez nadmiernej optymalizacji i wreszcie - łatwa do odebrania i pracy dla innej osoby. Kod zaśmiecony błędami ortograficznymi jest znakiem (zważywszy na powyższe zastrzeżenie), że programista nie zwraca uwagi i że te błędy mogą również wskazywać na brak zrozumienia _rozwiązywanego_ problemu. W taki sam sposób, w jaki wszelkie błędy ortograficzne w CV są natychmiastową sytuacją, w której pojawia się czerwona flaga. Co o tym myślicie? Czy powinniśmy przejmować się gramatyką angielską w kodzie? Czy to ma znaczenie? Czy wskazuje to na rozpiętość uwagi dewelopera, czy też nie ma korelacji, którą można by wiarygodnie wyciągnąć? (Uwaga: rozumiem, że ludzie zajmują się programowaniem w innych krajach i użyłem tutaj angielskiego jako przykładu. Z całym szacunkiem rozumiem również, że osoba, której pierwszym językiem _nie_ angielski nie był, może mieć trudności. To pytanie jest skierowane do tych, którzy _powinni wiedzieć lepiej_ )


title: Czy mogę uznać metody interfejsu za metody abstrakcyjne?

text: Myślałem o tym i miałem pewne wątpliwości. Kiedy deklaruję interfejs, na przykład: public interface MyInterface { public void method1(); public void method2(); } Czy te metody interfejsu można uznać za abstrakcyjne? Chodzi mi o to, że pojęcie metody abstrakcyjnej brzmi: > Metoda abstrakcyjna to metoda zadeklarowana bez implementacji > (bez nawiasów klamrowych, po której następuje średnik). Czy zatem te metody można uznać za abstrakcyjne? Nie są to „czyste” abstrakcyjne metody, ponieważ nie używam słowa „abstrakcyjny”, ale koncepcyjnie wygląda na to, że nimi są. Co możesz mi o tym powiedzieć? Dziękuję.


title: Używa System.gc() w Javie

text: W Javie istnieje metoda o nazwie `System.gc()`, która wywołuje garbage collector (lub raczej "sugeruje" JVM uruchomienie GC). Czy istnieją uzasadnione powody, aby wywoływać tę metodę? Myślę, że byłoby to oczywiste z powodu złego projektowania oprogramowania.


title: Unikanie wyjątku IllegalStateException w MVP, gdy widok nie jest jeszcze gotowy

text: W celu doskonalenia umiejętności kodowania staram się wykorzystać wzorzec MVP w jednej z moich pierwszych aplikacji na Androida. Idzie dobrze, ale trafiłem na jeden problem, z którym nie jestem pewien, jaki jest „właściwy” sposób rozwiązania. Mam klasę View, która zawiera obiekt Google Map. Zawiera również „pokrętło”, które pozwala użytkownikowi wybrać spośród wielu trybów centrowania mapy. * przypadek 0 jest wyśrodkowany na określonym znaczniku użytkownika * przypadek 1 jest wyśrodkowany na środku grupy znaczników Gdy użytkownik wybierze jeden z tych trybów, prezenter jest powiadamiany i w zależności od trybu współpracuje z modelem, aby dowiedzieć się, co nowego powinien znajdować się środek mapy, a następnie nakazuje Widokowi wyśrodkować mapę. Problem polega na tym, że gdy urządzenie jest obracane, cały „system” jest restartowany, a jedną z pierwszych rzeczy, które się dzieje, jest to, że system Android ustawia pokrętło w stanie, w którym znajdował się przed obróceniem. To uruchamia metodę wyśrodkowania, która próbuje wycentrować mapę, zanim będzie gotowa. Moim szybkim rozwiązaniem tego problemu było sprawdzenie czegoś w klasie Model, co powinno być prawdziwe tylko wtedy, gdy mapa jest gotowa, tj. Są znaczniki, które powinny już być wyświetlane. public void centerOnModeSelected(int position) { centerOnModeIndex = pozycja; if (mMapMarkers.size() > 0 ) refresherMap(); } Planuję zrobić tak: W konstruktorze prezentera miałbym pole private Boolean mapIsReadyForUpdates = false; oraz metodę public void setMapIsReadyForUpdates() { mapIsReadyForUpdates = true; } i wtedy musiałbym wywołać View tę metodę po dodaniu kilku znaczników do mapy lub gdy tylko mogę mieć pewność, że jest gotowy do zaakceptowania metod, które aktualnie generują wyjątki. Myślę, że inną opcją jest utrzymanie tego stanu w samym widoku, a następnie zablokowanie wywołań obiektu mapy na podstawie stanu widoku. Moją obecną metodologią jest nie mieć widoku podtrzymywania stanu, prezenter utrzymuje stan. Zakładam, że inni mieli do czynienia z sytuacjami w MVP, gdy uważali, że nie jestem w stanie, w którym może akceptować wywołania określonych metod. Czy ktoś może mi pomóc zrozumieć kompromisy z moimi 3 rozwiązaniami lub zasugerować lepsze rozwiązanie? Moja „szybka poprawka” działa, ale wygląda na hack. Jeśli nie ma znaczników, nie ma potrzeby centrowania mapy, ale fakt, że znaczniki istnieją, nie oznacza również, że mapa jest gotowa do aktualizacji. **AKTUALIZACJA** Ponieważ prezenter całkowicie kontroluje widok, wie, kiedy mapa jest gotowa do aktualizacji, więc wystarczyło utworzyć pole w prezenterze (jak wspomniano powyżej), a następnie ustawić je na true , kiedy byłem pewien, że stworzyłem mapę w widoku. Następnie sprawdź to pole przed wywołaniem jakichkolwiek metod, które będą próbowały zaktualizować mapę. Myślę, że to ma sens dla wzoru MVP.


title: Jak powinienem zaktualizować mój C++ z powrotem z nowoczesnymi rozwiązaniami?

text: Jak powinienem zaktualizować bardzo zardzewiały C++, ponieważ jestem pewien, że język i najlepsze praktyki ewoluowały? Zdaję sobie sprawę, że może to być prawie nie na temat, więc pozwól mi wyjaśnić kilka szczegółów. Około 10 lat temu byłem całkiem niezłym programistą C++, pochłaniałem książki Scotta Meyersa, potrafiłem rozwiązywać zagadki w reklamówkach dr. Dobbsa. Byłem prawdopodobnie trochę prawnikiem językowym. Przez ostatnie 10 lat programowałem głównie Javę, niektóre Pythona, więc moje umiejętności OO są wciąż na najwyższym poziomie. Ale dołączając do firmy, w której C++ jest powszechny, zdałem sobie sprawę, że muszę przyznać przed sobą, że oboje jestem naprawdę zardzewiały, a teraz są nowe funkcje językowe, które są albo nowe, albo o wiele bardziej powszechne niż pamiętam - takie rzeczy jak przestrzenie nazw itp. zdaj sobie sprawę, że czytanie i pisanie kodu (zwłaszcza parowanie) to dobry sposób na przyspieszenie, ale czy są jakieś inne zasoby, które ludzie poleciliby w tym, aby dać mi przyspieszony start. Książka? Strona internetowa? Poradniki? Podsumowując: * Zalecenia dotyczące zasobów odświeżających specyficznych dla C++? * Nie OO/programowanie ogólnie. * Rzeczy oprócz czytania i pisania kodu.


title: Czy są jakieś powody, aby nie używać rozproszonej kontroli wersji w środowisku korporacyjnym?

text: > **Możliwy duplikat:** > Co SVN robi lepiej niż git? Próbując popchnąć współpracowników w kierunku rozproszonego systemu VCS, chciałbym najpierw zrozumieć, dlaczego **nie** jest to dobra zmiana z praktycznego punktu widzenia. Dlaczego scentralizowany system VCS może być preferowany zamiast rozproszonego w środowisku korporacyjnym?


title: jeśli poproszono Cię o odpowiedź na pytanie „Jaka jest różnica między językiem angielskim a językiem programowania”, jak odpowiesz?

text: Zasadniczo w obu przypadkach masz: * dobrze zdefiniowane słownictwo * szanowaną składnię * obaj potrafią wyrazić logikę biznesową * potrafią zdefiniować semantykę Nie sądzę, aby można było powiedzieć „Język programowania jest użyteczny tylko dla PC” czy coś takiego. Po prostu nie mogę znaleźć prawdziwej odpowiedzi, ale czujemy różnicę, to dziwne.


title: ORM ma schemat generowania klas, czy istnieje odwrotność?

text: W Entity-Framework można utworzyć schemat bazy danych, a następnie wygenerować klasy ORM. Czy jest jakieś oprogramowanie, które robi to w odwrotnej kolejności? Na przykład tworzysz kilka klas, które mają relacje, a oprogramowanie generuje schemat bazy danych z odpowiednimi relacjami klucza podstawowego i obcego?


title: Jaki jest najlepszy lub standardowy sposób obsługi rozszerzalności biblioteki JavaScript?

text: W szczególności chcę obsługiwać „wtyczki”, które modyfikują zachowanie części biblioteki. Nie mogłem znaleźć zbyt wielu informacji w sieci na ten temat. Ale oto moje pomysły na rozszerzanie biblioteki. 1. Biblioteka eksportuje obiekt z funkcjami publicznymi i "chronionymi". Wtyczka może zastąpić dowolną z tych funkcji, modyfikując w ten sposób zachowanie biblioteki. Zaletą tej metody jest to, że jest prosta i że funkcje wtyczki mogą mieć pełny dostęp do "chronionych" funkcji biblioteki. Wadą jest to, że biblioteka może być trudniejsza w utrzymaniu z większym zestawem ujawnionych funkcji i może być trudno debugować, jeśli zaangażowanych jest wiele wtyczek (jak wiedzieć, która wtyczka zmodyfikowała którą funkcję?). 2. Biblioteka udostępnia funkcję „dodaj wtyczkę”, która akceptuje obiekt z określonym interfejsem. Wewnętrznie biblioteka użyje wtyczki zamiast własnego kodu, jeśli będzie to konieczne. Dzięki tej metodzie można swobodniej zmieniać układy wewnętrzne biblioteki, o ile nadal obsługuje ona ten sam interfejs wtyczek. Może to również wspierać posiadanie różnych interfejsów wtyczek do modyfikowania różnych części biblioteki. Wadą tej metody jest to, że wtyczki mogą wymagać ponownego zaimplementowania kodu, który jest już częścią biblioteki, ponieważ wewnętrzne funkcje biblioteki nie są eksportowane. 3. Biblioteka udostępnia funkcję „ustaw implementację”, która akceptuje obiekt dziedziczony z określonego obiektu bazowego. Publiczny interfejs API biblioteki wywołuje funkcje w obiekcie implementacji dla dowolnej funkcjonalności, która może być modyfikowana, a podstawowy obiekt implementacji zawiera podstawową funkcjonalność, zarówno z funkcjami zewnętrznymi (w stosunku do API), jak i wewnętrznymi. Wtyczka tworzy nowy obiekt implementacyjny, który dziedziczy z obiektu bazowego i zastępuje wszelkie funkcje, które chce zmodyfikować. Łączy to zalety i wady obu pozostałych metod.


title: Jakie języki powinienem znać, jeśli jestem zainteresowany tworzeniem aplikacji internetowych?

text: Interesuję się programowaniem dla sieci i ciekawi mnie jakie języki powinienem znać oprócz html, css, javascript, php/python/ruby. Nie wiem zbyt wiele na temat c# lub java, aby podjąć decyzję, czy się ich uczyć, czy nie, czy są one często używane w dziedzinie, która mnie interesuje? Jakimi innymi technologiami powinienem się zająć?


title: Jakie są zasady pisania technicznego?

text: Jako programista, pisanie techniczne jest dla mnie ważną umiejętnością. Czerpię z tego dużo frajdy. Uczyłem się także z dobrych artykułów technicznych i książek. Potrzebuję technicznych zasad pisania lub reguł, które odświeżą mój umysł. Każdy odpowiedni artykuł, samouczek i prezentacja są mile widziane, a Twoje własne doświadczenie również będzie świetne!


title: Jak poprawnie zdeprecjonować metody w Javie?

text: Dzisiaj straciłem metodę, której używałem, odkąd mój współpracownik przedefiniował ją, by zamiast tego przyjąć jej superklasę. Więc po synchronizacji z repozytorium miałem kłopoty. Czy w tym przypadku nie byłoby lepiej użyć adnotacji typu `@Przestarzałe` zamiast usuwać metodę, aby otrzymać komunikat o błędzie z informacją, że metoda jest przestarzała? Czy system kontroli wersji lub IDE może obejść takie sytuacje, odrzucając metody zamiast je usuwać?


title: Skąd mam wiedzieć, czy korzystam z metodologii Scrum?

text: Kiedy po raz pierwszy zacząłem swoją obecną pracę, moim celem było przepisanie ogromnej aplikacji skoroszytowej Excel-VBA do C# WinForm, ponieważ uważano, że nowa aplikacja C# naprawi wszystkie istniejące problemy i będzie miała wszystkie nowe funkcje dla idealnego świata. Gdyby był to port bezpośredni, teoretycznie byłoby to _łatwe_, ponieważ wystarczyłoby przejść przez _wszystkie_ formuły, formatowanie warunkowe, walidacje, VBA itp., aby to zrozumieć. Tak jednak nie było. Wiele nowych funkcji jest ściśle zależnych od logiki biznesowej, której nie znam. Jako solowy programista pierwszy rok spędziłem wyłącznie na rozszyfrowaniu skoroszytu programu Excel i napisaniu aplikacji w C#. Teoretycznie miałem ludzi biznesu, którzy „pomogli” mi określić wymagania, jak wygląda i działa GUI, testowanie aplikacji itp.; ale w praktyce przypomina to ciągłe tsunami pełzania funkcji. Na początku drugiego roku udało mi się przekonać kierownictwo, że to nigdzie się nie wybiera. Zrobiłem im zacząć od zera z excel-VBA. Mam ten „dziennik problemów” zapisany w sieci, za każdym razem, gdy znajdą coś, co im się nie podoba w aplikacji Excel-VBA, napiszą to tam. Codziennie sprawdzam dziennik i konsoliduję problemy (w moim umyśle) głównie na 2 grupy: (1) wymaga ogromnej zmiany. (2) można naprawić w aktualnej wersji. W przypadku dużych problemów ze zmianami wykonuję kopię najnowszego programu Excel-VBA i nadaję mu nowy numer wersji, a następnie pracuję nad nim, kiedy tylko mogę. W przypadku bieżących poprawek wersji wprowadzam zmiany w ciągu kilku dni do tygodnia, a następnie natychmiast je publikuję. Zapewniam również, że zaktualizuję tę samą zmianę we wszelkich trwających ogromnych zmianach w przyszłych wersjach. Trwa to około 4 miesięcy i czuję, że działa świetnie. Zrobiłem wiele wydań i rozwiązałem wiele rzeczywistych problemów, coraz bardziej rozumiałem też logikę biznesową. Jednak mój szef (nie przeszkolony w zakresie IT) uważa, że to, co robię, to tylko zmiany doraźne i że nie patrzę na „szerszy obraz”. Staram się przekonać szefa, że to działa. Więc mam nadzieję, że sformalizuję moje podejście i może pożyczę modne słowo, żeby go zmylić. Nawiasem mówiąc, czytałem o Agile i SCRUM, o backlogu i sprintach. Ale to wszystko wciąż jest dla mnie bardzo niejasne. **PYTANIE (w końcu):** Chcę mu powiedzieć, że to jest SCRUM! Ale najpierw chcę wstrzymać oddech i zapytać, czy moje obecne podejście jest uważane za SCRUM czy podobne do SCRUM? Jak mogę uczynić go bardziej podobnym do SCRUM? Zauważ, że mam tylko siebie, nie ma lidera projektu ani zespołów.


title: Przejrzyj przed lub po zatwierdzeniu kodu, co jest lepsze?

text: Tradycyjnie przeprowadzaliśmy przegląd kodu przed zatwierdzeniem, dzisiaj pokłóciłem się z kolegą, który wolał przegląd kodu po zatwierdzeniu. Po pierwsze, oto trochę tła, 1. Mamy kilku doświadczonych programistów, a także mamy nowych pracowników z prawie zerowym doświadczeniem w programowaniu. 2. Chcielibyśmy wykonać szybkie i krótkie iteracje, aby wydać nasz produkt. 3. Wszyscy członkowie zespołu znajdują się w tym samym miejscu. Zalety przeglądu kodu przed zatwierdzeniem, których nauczyłem się: 1. Mentoruj nowych pracowników 2. Staraj się zapobiegać błędom, porażkom, błędnym projektom na początku cyklu rozwoju 3. Ucz się od innych 4. Kopia zapasowa wiedzy, jeśli ktoś odejdzie Ale ja też miał złe doświadczenia: 1. Niska wydajność, niektóre zmiany mogą być sprawdzane w ciągu kilku dni 2. Trudno zbalansować szybkość i jakość, szczególnie dla początkujących 3. Jeden członek zespołu czuł nieufność Jeśli chodzi o przegląd po zatwierdzeniu, niewiele o tym wiem, ale najbardziej martwię się o ryzyko utraty kontroli z powodu braku recenzji. Jakieś opinie? **AKTUALIZACJA:** 1. Używamy Perforce dla VCS 2. Programujemy i zatwierdzamy w tych samych gałęziach (gałęzie naprawiające trunki lub błędy) 3. Aby poprawić wydajność, próbowaliśmy podzielić kod na małe zmiany. Próbowaliśmy również przeglądu dialogów na żywo, ale nie wszyscy przestrzegali tej zasady. To jednak kolejny problem.


title: Jak znaleźć mentora programistycznego?

text: Postanowiłem nauczyć się programowania. Czytam SO od kilku dni i myślę, że zacznę od C++, ponieważ czytam kilka artykułów. Jestem trochę świadomy pętli, tablic, logiki programu i obiektów i potrzebuję kogoś, kto mnie obejrzy i pomoże mi z małymi pytaniami, które otrzymuję podczas moich pierwszych projektów. Więc tu jest pytanie - gdzie znajdę takiego gościa? Nie mam żadnych przyjaciół, którzy programują iw ogóle. EDIT: 2 lata później nadal szukam mentora. Nie kodowałem aktywnie, dopiero co zacząłem 3 miesiące. Pracuję nad programowaniem Objective-C i iOS oraz programowaniem gier w Cocos2d. Jeśli chcesz zostać moim mentorem, napisz do mnie lub skomentuj.


title: Znalezienie „mentora” programowania

text: > **Możliwy duplikat:** > Jak znaleźć mentora programistycznego? Od jakiegoś czasu programuję. Przeczytałem kilka książek, wypróbowałem kilka języków (Perl, Ruby, Python, C++, .NET, HTML, CSS, JavaScript, SQL) i skorzystałem z mnóstwa porad i czuję, że szybko zrobiłem duży postęp. Ale czuję, że nauczyłbym się więcej, gdybym miał mentora. Cóż... nie mentor. Więcej kogoś, kto może mnie poprowadzić i kogoś, kogo mogę zapytać, czy mam problem. Tak, StackOverflow jest świetny, Programers-SE jest niesamowity i istnieje ogromna społeczność dla języków, ale to nie to samo, co posiadanie „mentora”. Więc gdzie mogę go znaleźć? Tak jak powiedziałem, nie szukam kogoś, kto mnie wszystkiego nauczy, ani kogoś, z kim będę musiał się spotykać raz w tygodniu. Tylko e-maile tu i tam. Nic wielkiego. Oczywiście chciałbym _chciałbym_, żeby był wolny. Ale gdzie i kto? Czy istnieje strona internetowa lub organizacja, która może mi pomóc? Ktoś kogo znasz? Dzięki wielkie!


title: Czy wszyscy programiści przechodzą stromą krzywą uczenia się?

text: Nie mam wielu rówieśników, którzy pracują jako programiści lub przynajmniej są na tyle społeczni, aby dzielić się częścią swojej cennej wiedzy, więc nie mam do porównania. Sama uczę się nowych rzeczy, ale za każdym razem, gdy zaczynałem uczyć się A, łączyło się to z B, co kończy się w połączeniu z X itd. W końcu nie uczę się prawie niczego poza tym, że programowanie dla nowicjuszy jest bolesny. Pierwsza część krzywej uczenia się wydaje się szalenie stroma dla początkującego takiego jak ja, co w pewnym momencie wydaje się nieistotne. Czy jestem złym programistą, który tego doświadczył? A może jest tam jakiś kolega programista, który tego doświadczył i przeżył, i jest na tyle zainteresowany, by podzielić się tym, w jaki sposób? Edycja : Ponieważ jest oznaczony jako duplikat, sprawdziłem podany link do pytania. Jedyna rzecz, która jest podobna między moim pytaniem a tym zadanym, to to, że oboje jesteśmy całkiem sami w naszej dziedzinie programowania. Ale zapytałem, czy wszyscy programiści przechodzą przez tę stromą krzywą uczenia się? A jeśli tak (co oznacza, że niekoniecznie jestem złym programistą), jak przez to przetrwali?


title: Definiowanie standardu

text: Jak byś podszedł do zdefiniowania standardu? Definiuję protokół dla czegoś, co jeszcze nie istnieje i chciałbym stworzyć dla niego RFC i użyć dobrze znanego numeru portu dostarczonego przez IANA. Jak zacząć?


title: Jak wytłumaczyć programowanie nie-programiście?

text: > **Możliwy duplikat:** > Jak dzielisz się swoim rzemiosłem z nie-programistami? Wydaje mi się, że w przyszłości może dostanę takie pytanie... Jak powinienem odpowiedzieć na nie w kategoriach laika?


title: Czego nauczyć 12-letniego programistę VB ogólnie o programowaniu?

text: Udzielam mentoringu 12-latkowi w programowaniu. Zaczął tworzyć VB (.net) (2008) i tworzy proste programy WinForms, ale nie rozumie niektórych podstawowych pojęć (pętle, funkcje, typy danych) Pochodzący z tła C/C++, nie wiem od czego zacząć, nie sądzę, że jest jeszcze do c/c++ lub java


title: Jak przedstawić nie-programistom, z czym wiąże się programowanie?

text: Często proszono mnie o poświęcenie kilku dni na nauczenie kogoś programowania. Większość ludzi naprawdę myśli, że może nauczyć się tego, co ja wiem w kilka dni. Kiedy mówię im, że robię to od wielu lat i nie mogę ich nauczyć, jak być programistą w kilka dni, patrzą na mnie jak na palanta i po prostu nie chcą im pomagać. Myślę, że dzieje się tak dlatego, że kiedy mówię, że jestem programistą, albo zaprogramowałem _to_. Naprawdę myślę, że większość ludzi nie zdaje sobie sprawy, że mam na myśli to, że napisałem kod, który to tworzy. Myślę, że myślą, że mam na myśli to, że to skonfigurowałem, tak jak wtedy, gdy mówisz: „Zaprogramowałem mój magnetowid”. Czy ktoś jeszcze tak myśli? Jakie jest twoje doświadczenie?


title: Trudno mi wytłumaczyć, czego się nauczę

text: > **Możliwe duplikaty:** > Jak dzielisz się swoim rzemiosłem z nie-programistami? > Jak wytłumaczyć programowanie nie-programiście? > Jak mogę stać się bardziej elokwentny? Uwielbiam programować i lubię uczyć się wszystkiego, co czytam na ten temat. Trudno mi jednak wytłumaczyć, czego się nauczyłem, komuś, kto nie wie nic o programowaniu, a nawet koledze programiście. Jest cytat Alberta Einsteina, który brzmi mniej więcej tak: Jeśli nie potrafisz wyjaśnić tego sześciolatkowi, sam tego nie rozumiesz. lub Jeśli nie możesz tego wyjaśnić po prostu, nie rozumiesz tego wystarczająco dobrze. Czy ktoś jeszcze znajduje się w sytuacji, w której się znajduję? Może to również wpłynąć na moje rozmowy o pracę; gdy ktoś prosi mnie o wyjaśnienie pewnych pojęć, które znam, ale nie potrafię tego wystarczająco dobrze wyrazić słowami, może pomyśleć, że nie jestem dobrze przygotowany, podczas gdy w rzeczywistości jestem, ale jestem kaleką z powodu mojej niezdolności do wyjaśnienia się. Jak mogę to przezwyciężyć i być bardziej elokwentnym?


title: Jak dzielisz się swoim rzemiosłem z nie-programistami?

text: Czasami czuję się jak muzyk, który nie potrafi grać na żywo. Programowanie to całkiem fajna umiejętność i bardzo szeroki świat, ale wiele z tego dzieje się „poza kamerą” – w twojej głowie, w twoim biurze, z dala od widzów. Możesz oczywiście rozmawiać o programowaniu z innymi programistami, jest też programowanie równorzędne i możesz stworzyć coś, co możesz pokazać ludziom, ale jeśli chodzi o wyjaśnianie nieprogramistom, co robisz lub jak było Twój dzień w pracy jest dość trudny. Jak sprawić, by nie-programiści w twoim życiu zrozumieli, czym się zajmujesz? UWAGA: to nie jest powtórka Zrozumienia procesu rozwoju przez nie-programistów, ponieważ to pytanie dotyczyło zarządzania oczekiwaniami klientów.


title: Czy Dependency Injection może być używany jako alternatywa dla Reflection do tworzenia instancji?

text: Istnieje fragment kodu .net C#, który używa Reflection do tworzenia instancji za pomocą `Activator.CreateInstance()`. To jest stary fragment kodu i działa na górze Biblioteki Enterprise. Czy lepszym pomysłem jest zastąpienie tego Dependency Injection przy tworzeniu obiektów? Czy są jakieś plusy i minusy dla obu podejść?


title: LUA vs skrypty powłoki vs C dla skryptów cgi na urządzeniach osadzonych

text: Zamierzam wypróbować skrypty CGI do implementacji graficznego interfejsu użytkownika opartego na sieci Web na wbudowanym urządzeniu. Jakie zalety mają skrypty LUA nad skryptami powłoki lub C do implementowania dynamicznych plików HTML? Jak myślisz, który z nich jest łatwy w użyciu z perspektywy programisty. Mój GUI będzie składał się z kilku stron HTML opartych na formularzach. Czasami chciałbym, aby program w C uruchamiał się zgodnie z akcją wykonaną w GUI, a następnie wyświetlał wynik działania programu użytkownikowi w GUI. Czy skrypty powłoki wystarczą w takim scenariuszu, czy „muszę” używać LUA? Właściwie mam pewne doświadczenie ze skryptami powłoki.