title: Jaki jest najlepszy sposób na komentowanie w przeglądzie kodu?

text: Mój zespół właśnie zaczął używać tygla/rybiego oka do inicjowania przeglądu kodu za każdym razem, gdy ktoś z nas coś sprawdza. Jest nas tylko trzech i każdy z nas jest zachęcany do przeglądania kodu i zostawiania komentarzy tam, gdzie uważamy za stosowne. Moje pytanie brzmi, jak najlepiej zostawić komentarz w wierszu kodu, z którym widzę problem? Chcę przekazać mój punkt widzenia, nie wyglądając na szorstką. Nie chcę sprawiać wrażenia, że jestem na wysokim koniu i mówić: „Robiłam to w ten sposób…” i nie chcę też wyglądać, jakbym starała się być autorytatywna i coś powiedzieć na przykład „ _To powinno być zrobione w ten sposób..._ ”, ale nadal muszę zrozumieć, że to, co robią, nie jest zbyt dobre. **Do wyjaśnienia:** To naprawdę dobre źródło informacji o tym, _co_ powinienem skomentować: przegląd kodu: czy jest subiektywny czy obiektywny (wymierny)?, ale szukam _jak_ to skomentować.


title: Auto Transaction Failsafe, API stron trzecich, pliki harmonogramu Coldfusion

text: Mam aplikację internetową do automatycznego fakturowania i próbuję wbudować pewne zabezpieczenia oraz strukturę, która w żadnym wypadku nie pozwoli na podwójne obciążenie faktury. Wszystko działa idealnie, zaplanowane zadanie działa i wszystko ładuje się tak, jak powinno. Ale jest kilka znanych nam scenariuszy, które mogą powodować problemy. Serwer DB uległ awarii w trakcie procesu, co doprowadziło do wielu zduplikowanych opłat. Ponadto, jeśli z jakiegoś powodu plik musi zostać sprawdzony w przeglądarce, programista uruchomi odświeżanie przed zakończeniem przetwarzania pliku, wystąpią zduplikowane opłaty. Istnieje kilka podobnych scenariuszy, przed którymi należy się chronić, więc możesz dostrzec potrzebę rozwiązania tego problemu, biorąc pod uwagę wrażliwość transakcji (wyobraź sobie, że Twoja firma energetyczna automatycznie obciąża Cię dwukrotnie na wyciągu bankowym). Aktualna konfiguracja: * Zapytanie * API POST dla transakcji <!--- Parse Reply String ---> if response = "1" - Wstaw do płatności - Aktualizuj należną kwotę faktury - Wstaw do transakcji - Powiadomienie o przyjęciu wiadomości e-mail else - Powiadomienie o odrzuceniu wiadomości e-mail Istnieje kilka mniejszych procesów, które zachodzą między kilkoma z nich, a także sporo stwierdzeń if, ale są to części do podnoszenia ciężkich przedmiotów. Chciałbym się dowiedzieć i usłyszeć o tym, jaki byłby najlepszy sposób na zabezpieczenie tego, biorąc pod uwagę interfejs API innej firmy dla bramy? Jak byś to rozbił? Jednym z pomysłów, jaki miałem, było oflagowanie każdego procesu po jego uruchomieniu, aby zapisać, gdzie się znajdował, kiedy się nie powiódł, i zbudować zapytanie, aby odpowiednio je obsłużyć. Nie jestem pewien, jak wydajna lub bardziej prawdopodobna, jak nieefektywna byłaby.


title: Wzrost poziomy a wzrost pionowy

text: Od czasu ukończenia studiów pracowałem w wielu różnych środowiskach. Pracowałem jako analityk oprogramowania w środowiskach optycznych, sterowania numerycznego, wojskowym i sieciowym i uczyłem się, korzystając z wielu różnych narzędzi. Moją główną umiejętnością jest projektowanie oprogramowania (i programowanie w C++), ale nauczyłem się Pythona, Qt, MFC (wciąż używany, nie mogłem uwierzyć...), Bash i Perl. Nauczyłem się również konfigurować VPN, MySQL i mnóstwo innych narzędzi i bibliotek programistycznych. Opracowałem również moduły czasu rzeczywistego dla Linuksa. Ponieważ bardzo lubię uczyć się nowych rzeczy i niedługo pracować nad projektem (najlepiej 2 lata), zostałem konsultantem: najlepszy sposób na horyzontalny wzrost. Wybrałem tę drogę ze względu na osobiste preferencje, ale także dlatego, że moją największą obawą było zakończenie pracy nad pod-pod-problemem domeny pod-aplikacyjnej przez 30-40 lat mojego życia. Spotkałem takich ludzi. Posiadają ogromne umiejętności wertykalne w dziedzinie aplikacji. Na przykład mój kolega od 20 lat programuje automatyzację obrabiarek w C++. Zna każdą najmniejszą rzecz, którą musi wiedzieć o obrabiarkach, ale polimorfizm jest najbardziej zaawansowaną cechą C++, jaką zna, a C++ to jego główny język! W zasadzie obawiam się, że rynek pracy może mnie ukarać na dłuższą metę. Oczywiście mój kolega może mieć ten sam problem: jeśli jego firma zbankrutuje, życzę mu szczęścia w znalezieniu innej pracy w tej samej niszy. Istnieje kompromis między wzrostem pionowym a wzrostem poziomym. Jak sobie z tym radzisz? Czy uważasz, że wzrost pionowy ma więcej zalet na dłuższą metę? Proszę myśleć w kategoriach rynku pracy i rozwoju osobistego. Czy istnieje sposób na zrównoważenie tych dwóch rodzajów wzrostu?


title: Jak duże bazy kodu nie-OO są zarządzane?

text: Zawsze widzę, że abstrakcja jest bardzo przydatną funkcją, jaką zapewnia obiektowi zewnętrznemu do zarządzania bazą kodu. Ale jak zarządza się dużymi bazami kodu nie-OO? A może stają się w końcu „Wielką Kulą Błota”? **Aktualizacja:** Wygląda na to, że wszyscy myślą, że „abstrakcja” to po prostu modularyzacja lub ukrywanie danych. Ale IMHO oznacza to również użycie „klas abstrakcyjnych” lub „interfejsów”, które są niezbędne do wstrzykiwania zależności, a tym samym testowania. Jak radzą sobie z tym bazy kodu nie-OO? Ponadto, poza abstrakcją, enkapsulacja bardzo pomaga w zarządzaniu dużymi bazami kodu, ponieważ definiuje i ogranicza relacje między danymi a funkcjami. W C bardzo możliwe jest napisanie kodu pseudo-OO. Niewiele wiem o innych językach nie-OO. Czy jest to więc sposób na zarządzanie dużymi bazami kodu C?


title: Najlepszy sposób na przechowywanie dużych ilości danych (nie jest potrzebna relacyjna baza danych)

text: Chciałbym wiedzieć, w jaki sposób najlepiej przechowywać dane na serwerze związane z następującymi punktami: * **Dzienniki czatu** * **Ciężkie treści tekstowe** * **Referencje użytkowników**, takie jak ilość identyfikatorów ( 1,4,14,524,23220,...) Używam **PHP** i bazy danych **mysql**, ale oczywiste jest, że powyższe tematy nie pasują do mysql na dużą skalę i manewrowanie. Więc chciałbym wiedzieć, jak ( **nie, nie proszę o twoją pracę, tylko twoja 3-liniowa orientacja** ) dokładnie mam zachować dane :) * * * Ok, w zasadzie trzymam moich użytkowników w sql tabeli i innej tylko za ich przyjaźnie, w których mam pole zawierające referencje związane, _podobno_ , do dzienników czatu. Teraz chodzi o to, że tak naprawdę nie rozumiem, czy powinienem mieć tę zawartość w pliku, zachować ścieżkę pliku w tym polu sql, a następnie pobrać plik w razie potrzeby, przeanalizować go i wyświetlić użytkownikowi, czy przechowywać w bazie danych takich jak mongodb, raven, couch, ponieważ nigdy nie korzystałem z bazy danych bez SQL i chciałem poznać na niej doświadczonych ludzi. To samo dotyczy **obfitej treści tekstowej** i referencji użytkowników. Na przykład w mojej tabeli użytkowników mam pole zawierające jego znajomych w następujący sposób 1,4,5,6,14,51,... a odkąd mi powiedziano, to zła praktyka i **oczywiście** powinien być używany podczas zajmowania się dużymi ilościami danych, które musiałyby być stale zmieniane. Przybyłem tutaj w pełnym nadziei akcie przewodnictwa i oświecenia.


title: W jaki sposób projekty oprogramowania przekraczają budżet i nie są dostarczane?

text: Natknąłem się na tę historię kilka razy w Wielkiej Brytanii: System komputerowy NHS Podsumowanie: Wydaliśmy 12 miliardów funtów na oprogramowanie zdrowotne, które prawie nic nie działa. Siedziałem w biurze omawiając to z moimi kolegami i trochę się nad tym zastanowiliśmy. Z tego, co widzę, wszystko, czego potrzebuje NHS, to baza danych + środkowy poziom leków / szpitali / pacjentów / przedmiotów na receptę oraz różne GUI dla lekarzy i pielęgniarek. Musisz także pomyśleć o bezpieczeństwie i skalowalności. I musiałbyś trochę posiedzieć w szpitalu/aptece/gabinecie rodzinnym, aby dowiedzieć się, czego potrzebują. Ale, ogólnie rzecz biorąc, powiedziałbym, że mógłbym złożyć coś z taką strukturą w kilka dni i może dorzucić miesiąc lub dwa, aby wszystko działało na dużą skalę. * Gdybym miał kilka milionów funtów, prawdopodobnie mógłbym zatrudnić naprawdę doskonałych projektantów, aby stworzyli możliwą do utrzymania bazę kodu, a także kupić odpowiedni sprzęt do uruchomienia systemu. Nienawidzę trywializować czegoś, co wydaje się powodować wiele problemów, ale dla mnie wygląda to jak duży, rozproszony system CRUD + UI. Jak więc, u licha, ten projekt wzrósł do 12 miliardów funtów bez stworzenia tak przydatnego oprogramowania? Ponieważ nie wydaje mi się, że oprogramowanie brzmi tak skomplikowanie, mogę sobie tylko wyobrazić, że coś w jego organizacji spowodowało ten bałagan. Czy to outsourcing jest problemem? Czy to nie sprawia, że projektanci oprogramowania rozumieją biznes medyczny, który to spowodował? **Jakie są Twoje doświadczenia z projektami, które przekroczyły budżet, nie zostały zrealizowane? Jakie są najlepsze praktyki dla dużych projektów? Czy kiedykolwiek pracowałeś nad takim projektem?** **EDYTUJ** *Ten fragment wydawał się przykuć dużą uwagę. Chodzi mi o to, że prawdopodobnie mógłbym to zrobić za powiedzmy 30 użytkowników, wydając kilkadziesiąt tysięcy funtów. Nie włączam rzeczy, których nie wiem o branży medycznej i rządzie, ale myślę, że większość ludzi, którzy zajmowali się programowaniem, jest zaznajomiona z tego rodzaju projektowaniem baz danych/frontend. Chodzi mi o to, że projekt NHS wygląda jak WIELKA wersja tego, z dzwonkami i gwizdkami, zwłaszcza bezpieczeństwem. Ale z pewnością budżet miliony razy większy niż mój mógłby to zapewnić?


title: DDD/SOA przy użyciu wzorców komunikatów platformy .NET / żądanie odpowiedzi z zapisywaniem plików

text: Zrobiłem trochę badań na ten temat, ale nie mogę znaleźć bardziej szczegółowych przykładów, które by mi w tym pomogły. Generalnie jestem nowy w SOA/Patterns, proszę nie przejmuj się... :) Czy możesz wyświetlić przykład użycia kontrolki przesyłania plików w .net implementującej SOA Messaging Patterns?


title: Wydajniejszy sposób na stronicowanie wyników wyszukiwania

text: Tworzę stronę internetową w PHP, na której użytkownik może przeszukiwać dużą bazę danych MySQL. Użytkownikowi wyświetlany jest pierwszy wynik. Chcę, aby przycisk _następny_ przeniósł użytkownika do następnego wyniku i tak dalej. Trywialne rozwiązanie polega na tym, że na każdej stronie wyników należy wykonać zapytanie użytkownika _ponownie_ i użyć PRZESUNIĘCIA i LIMIT, aby uzyskać _n_ -ty wyświetlany wynik. Ale wygląda to jak algorytm Schlemiela Malarza: powtarzanie tego samego zapytania w kółko, aby dostać się do _n_ -tego wyniku, jest nieefektywne. Skoro inni musieli mieć do czynienia z taką sytuacją wcześniej: jak to zwykle rozwiązywane?


title: Zbieranie informacji o użytkowniku do debugowania i wsparcia

text: Mam aplikację Java, którą muszę obsługiwać. Chciałbym, aby zbierał informacje o użytkownikach, takie jak informacje o systemie: system operacyjny i sprzęt, aby ułatwić diagnostykę i pomoc techniczną. * Czy są jakieś przepisy dotyczące bezpieczeństwa i prywatności, których muszę przestrzegać? * Czy potrzebuję wyraźnej zgody użytkownika, aby to zrobić?


title: Jak mogę nauczyć moich współpracowników zasad SOLID?

text: W moim zespole mam grupę bardzo utalentowanych, ale nowych programistów. W pełni przyjąłem zasady SOLID w projektach, nad którymi pracuję, a moi koledzy programiści dostrzegli mądrość sposobów - ale nie jestem doświadczonym nauczycielem (ani też nie jestem doświadczonym uczniem - wszystko, czego się nauczyłem nauczyłem się samodzielnie lub z wpisów na blogu). Dostałem swobodę prowadzenia sesji nauczania z tymi facetami, ale muszę wymyślić jakiś plan lekcji, bo inaczej prawdopodobnie pomylę i sfrustruję ich i siebie. Istnieje wiele zasobów w sieci, które opisują lub wprowadzają zasady SOLID, ale nie widziałem wielu, które by je szczegółowo omawiały i nie widziałem w ogóle żadnego, który omawiałby, jak ich _nauczać_. Czy brakuje mi jakiegoś zasobu, który już tam jest? Jesteśmy programistami .NET, mieszamy C# i VB.NET, więc chociaż wezmę przykłady w dowolnym języku, przykłady .NET będą najlepszą pomocą, ponieważ nie będę musiał ich tłumaczyć przed pokazaniem ich zespołowi . Powinienem wspomnieć, że nie mamy budżetu na książki. Możesz o nich wspomnieć, ale pamiętaj, że jeśli nie są tanie, będą musiały być dla mnie _naprawdę_ przekonujące. W żadnym wypadku nie otrzymam zwrotu pieniędzy.


title: Walidacja parametru wejściowego w wywołującym: duplikacja kodu?

text: Gdzie jest najlepsze miejsce do walidacji parametrów wejściowych funkcji: w funkcji wywołującej czy w samej funkcji? Ponieważ chciałbym poprawić swój styl kodowania, staram się znaleźć najlepsze praktyki lub pewne zasady dotyczące tego problemu. Kiedy i co jest lepsze. W moich poprzednich projektach sprawdzaliśmy i traktowaliśmy każdy parametr wejściowy wewnątrz funkcji (na przykład, jeśli nie jest pusty). Teraz przeczytałem tutaj w kilku odpowiedziach, a także w książce Pragmatic Programmer, że walidacja parametru wejściowego jest obowiązkiem wywołującego. Oznacza to, że przed wywołaniem funkcji powinienem sprawdzić poprawność parametrów wejściowych. Wszędzie funkcja jest wywoływana. A to rodzi jedno pytanie: czy nie tworzy to duplikacji warunku sprawdzania wszędzie tam, gdzie funkcja jest wywoływana? Nie interesują mnie tylko warunki null, ale walidacja dowolnych zmiennych wejściowych (wartość ujemna do funkcji `sqrt`, dzielenie przez zero, niewłaściwa kombinacja stanu i kodu pocztowego lub cokolwiek innego) Czy istnieją jakieś zasady, jak decydować, gdzie sprawdzić stan wejścia? Zastanawiam się nad kilkoma argumentami: * gdy traktowanie nieprawidłowej zmiennej może się różnić, dobrze jest ją walidować po stronie wywołującego (np. funkcja `sqrt()` - w niektórych przypadkach może chcieć pracować z liczbą zespoloną, więc traktuję warunek w wywołującym) * gdy warunek sprawdzania jest taki sam u każdego wywołującego, lepiej sprawdzić go wewnątrz funkcji, aby uniknąć duplikacji * walidacja parametru wejściowego w wywołującym odbywa się tylko raz przed wywołaniem wielu funkcji z tym parametrem. Dlatego walidacja parametru w każdej funkcji nie jest skuteczna * właściwe rozwiązanie zależy od konkretnego przypadku Mam nadzieję, że to pytanie nie jest duplikatem żadnego innego, szukałem tego problemu i znalazłem podobne pytania, ale nie wspominają dokładnie o tym walizka.


title: Dlaczego przejście z C# na scala miałoby sens, aby wykorzystać możliwości funkcjonalne scala?

text: Jakie są korzyści z używania programu funkcjonalnego w projektach oprogramowania na dużą skalę? Słyszałem, że jest to dość wydajność równoważna zwykłemu OOP. Słyszałem też, że jest bardziej „matematycznie elegancki”. Tak czy inaczej, jakie są korzyści z funkcjonalnego wykonywania aplikacji na dużą skalę? W szczególności, dlaczego przejście z C# na scala miałoby sens, aby wykorzystać możliwości funkcjonalne scala?


title: Czy możliwe jest uzyskanie dynamicznie generowanego html w tagach asp.net przy użyciu modułów HTTP?

text: Chcę wiedzieć, czy jest możliwe pisanie do pliku dziennika/tekstowego dynamicznie generowanego kodu HTML w tagach asp.net na stronie .aspx przy użyciu modułów HTTP. Przez dynamicznie generowany HTML rozumiem zawartość html, którą asp.net generuje w odpowiedzi na stwierdzenia pomiędzy tagami <% %> lub <%# %> lub <%$ %>. Więc kiedy asp.net renderuje stronę, zasadniczo konwertuje wszystko na HTML. Na stronie asp.net jest napisany statyczny kod HTML, reszta to to, co nazywam kodem HTML generowanym dynamicznie. Moim celem jest zrzucenie gdzieś całej dynamicznie generowanej zawartości HTML. Czy można to zrobić za pomocą modułów HTTP lub innego mechanizmu? Przykład: Jeśli strona .aspx wygląda tak... `<td>Całkowity limit kredytowy </td>` `<td><%=creditLimit.ToString("C")%></td>`... Chcę, aby moduł HTTP zapisywał w pliku dziennika HTML renderowany przez tag asp <%=creditLimit.ToString("C")%> i wszystkie inne tagi asp na stronie. Moduł HTTP byłby ogólny i można go dodać do dowolnej witryny internetowej IIS. Zauważ, że nie byłoby różnicy w danych wyjściowych, które widzi przeglądarka.


title: Jak powiedzieć node.js, który kod javascript działa na serwerze a na kliencie?

text: Próbuję poznać teorię node.js, ale nie mogę zrozumieć, w jaki sposób node.js wie, czy wstępnie przetworzyć go na serwerze, czy wysłać do przeglądarki w celu wykonania.


title: Algorytm decydujący o zmianie gestu

text: Tworzę aplikację, w której jako dane wejściowe biorę dynamiczne gesty, a następnie mapuję je na kontrolki klawiatury. Przez gest dynamiczny mam na myśli np. ruch ręki od lewej do prawej lub rękę od prawej do lewej. Mam cztery gesty: ręka poruszająca się od dołu do góry, od góry do dołu, od lewej do prawej i od prawej do lewej. Jestem w stanie rozpoznać gesty, ale problem polega na tym, jak zdecydować o początku i końcu gestu na ciągłym wejściu wideo. Jaki jest najwydajniejszy i najskuteczniejszy algorytm wykrywania tego na wejściu wideo?


title: Kto reagowałby na szkody spowodowane po sklonowaniu obcej aplikacji, ale NIE uruchamiał jej jako freelancer?

text: To tylko teoretyczne pytanie, bez kontekstu. W przypadku * ktoś mnie zatrudni (jako freelancer (jestem A1)) * klient (A2) chce rozwijać **KLON** istniejącej aplikacji firmy B1 * po pewnym czasie oddaję wypełnioną aplikację mojemu klientowi (A2) * po pewnym czasie pierwotni właściciele aplikacji (B1) sklonowałem chcą iść do sądu Kto by odpowiadał za szkody wyrządzone firmie B1? Ja jako freelancer (A1) czy mój klient (A2), który prowadzi tę stronę i pobiera od niej pieniądze?


title: Jakie są najbardziej opłacalne sposoby na zwiększenie Twojej atrakcyjności rynkowej dla pracodawców?

text: Istnieje różnica między zostaniem lepszym programistą a pokazaniem, że jesteś lepszym programistą potencjalnym pracodawcom lub obecnemu pracodawcy (np. podwyżki i tym podobne). Zastanawiam się, jakie są najbardziej opłacalne sposoby na to. Przez opłacalność nie mam na myśli tylko tego, ile pieniędzy będzie musiał wydać deweloper. Najczęściej są to pieniądze i czas. To ostatnie jest często bardziej znaczące. Na przykład: Posiadanie własnego bloga może naprawdę rozwinąć cię jako programistę, ale _może_ nie być postrzegane jako wielka sprawa dla twoich obecnych lub przyszłych programistów i potencjalnie jest bardzo pracochłonne, podczas gdy niektóre certyfikaty mogą być bardzo ważne dla niektórych pracodawców i jest o wiele mniej pracy niż tworzenie dużej ilości wysokiej jakości treści na blogu lub opracowywanie projektu osobistego / OS - nawet jeśli to drugie może być bardziej zabawne. Zakładając, że znajdujesz się w przestrzeni .NET, jakie są bardziej opłacalne sposoby na zwiększenie swojej atrakcyjności rynkowej obecnym lub przyszłym pracodawcom? W idealnym świecie my/ja zrobilibyśmy je wszystkie, ale w celu ustalenia priorytetów należy/można najpierw zająć się tymi wyższymi zbywalnymi/kosztowymi, zanim przejdziemy do pozostałych.


title: JavaScript a biblioteki innych firm

text: Programuję w Javie i nie ma sensu myśleć o nauce biblioteki lub frameworka Java bez znajomości rzeczywistego języka, w którym jest zbudowana. To samo dotyczy C. Zawsze unikałem JavaScript po prostu dlatego, że nie interesowałem się stroną klienta, ale teraz to się zmieniło. Jestem zdezorientowany, jak i dlaczego ludzie unikają uczenia się JavaScript i zamiast tego skaczą od razu z biblioteką taką jak JQuery? Jak mogę programować bez znajomości cech JS, co jest językiem opartym na prototypach, działa jako obywatele pierwszej klasy, OOP, domknięcia itp. Ponadto większość rzeczy w dzisiejszym świecie po stronie klienta jest budowana za pomocą trzeciej biblioteki partyjne?


title: Nauka programowania - jak uczyć składni?

text: Spędziłem ten tydzień ucząc dzieci (11-18) programowania. Uczenie ich podstawowych pojęć i logiki szło dobrze, ale zauważyłem jeden szkopuł dla nich wszystkich: składnię. Czuję, że uczenie ich składni języka jest ogromną sekundą w stosunku do podstawowych pojęć i logiki. Jednak zmagając się ze składnią, nie uczą się tak skutecznie. Najczęściej ich logika jest wystarczająco dobra. Problemy, które mają, są związane ze składnią. Czy ktoś zna skuteczny sposób nauczania składni? Myślałem o stworzeniu ściągawki pokazującej składnię dla różnych instrukcji (przypisanie, if, while, for, itp.), ale czuję, że może to być trochę przeciążenie informacji, czy ktoś ma jakieś doświadczenie w korzystaniu z tej metody? Mam nadzieję, że to pytanie nie jest uważane za nie na temat!


title: Java z sieci i bez GUI?

text: Czy java jest używana poza siecią i bez GUI? Aby tworzyć aplikacje internetowe, musisz nauczyć się projektowania, html+css+javascript+ajax => nauczenie się tego zajmuje naprawdę dużo czasu. Tworzenie aplikacji GUI wymaga również umiejętności projektowania. Czy da się coś napisać w czystej javie i co dokładnie?


title: Która struktura danych ma reprezentować trójkątny graf nieskierowany

text: Chciałem stworzyć wykres podobny do tego w C++: ![tu wstaw opis obrazu](http://i.stack.imgur.com/GtckL.png) Ten, który zaimplementuję, będzie miał więcej krawędzi i wierzchołków, ale użyje tego stylu trójkąta. Chciałem stworzyć coś, na czym mógłbym wykonywać różne algorytmy wyszukiwania, aby znaleźć najkrótsze ścieżki do wybranych wierzchołków (lub najdłuższe bez pętli itp.). Na początek jest to wykres nieważony; jednak planowałem w przyszłości nadać krawędziom wagi. Miałem pewne problemy z przedstawieniem tego wykresu z kilku powodów: ponieważ chcę mieć więcej wierzchołków (może 105 wierzchołków), każda lista byłaby żmudna, aby wypisać, które wierzchołki są połączone z jakimi w każdym obiekcie (czy istnieje sposób na zautomatyzowanie przypisywania członków obiektu wierzchołkowego oznaczającego połączenie?). Ponadto, wydawało mi się to dziwne, próbując zaimplementować go w tablicy 2d, ponieważ tablica ma charakter kwadratowy i mam do czynienia z trójkątami; myślenie o ważeniu krawędzi i przypisywanie wartości między dwoma wierzchołkami sprawiło, że stało się to jeszcze mniej intuicyjne w przypadku tablicy.


title: 2 tablice wymiarowe w C++

text: Zacząłem uczyć się tablic w C++ i natknąłem się na małą uwagę w książce mówiącą o tablicach 2D w skrócie. Przetestowałem go i byłem zdumiony, że może dać programiście możliwość przechowywania danych lub informacji i układania ich przed sobą w formacie arkusza kalkulacyjnego. W normalnej tablicy, aby uzyskać dostęp do elementów, zrobiłbym to po prostu: int matrix[2] = { 1, 15}; Ale w tablicach 2D :Jedyny sposób, w jaki mówi mi, aby faktycznie uzyskać dostęp do elementów, to użycie pętli: int fly[2][2]; int i = 0; int n=0; for(i=0; i<2; i++){ for (n=0; n<2; n++){ fly[i][n] =0; } } for(i=0; i<2; i++){ for (n =0; n<2; n++){ cout << fly[i][n]<< endl; } } Próbowałem uzyskać dostęp do elementów w stary sposób: int fly[2][2] = { 0}; ale zauważyłem, że to zmienia wszystkie elementy na 0 Więc.. 1. Czy ktoś może wyjaśnić, kiedy próbuję uzyskać dostęp do tej tablicy 2D w ten sposób, wszystkie elementy się zmieniają. 2. Czy istnieje inny sposób uzyskania dostępu do elementów tablicy 2D bez użycia pętli. Dziękuję wam wszystkim.


title: Reorganizacja kodu na podstawie zależności

text: Zastanawiam się, czy istnieje narzędzie, które może generować wykres zależności między plikami obiektów języka C, a następnie analizować, jak przekształcić ten wykres w DAG, modyfikując kod, który tworzy cykle, przenosząc go do innych plików źródłowych. Narysowałem wykres zależności ręcznie i prawdopodobnie mógłbym go wykonać za pomocą makedepend lub czegoś podobnego, ale przenoszenie funkcji również musi być wykonane ręcznie. Przepraszam, jeśli to niejasne, ale to najlepsze, co mogę teraz opisać.


title: Dlaczego wskaźnik zerowy zamiast rzutowania klas?

text: W Javie: int count = (Integer) null; zgłasza wyjątek java.lang.NullPointerException. Dlaczego to nie generuje wyjątku klasy rzutowania, aby ułatwić zrozumienie przez programistę? Dlaczego ten wyjątek został wybrany zamiast jakiegokolwiek innego wyjątku?


title: Jakie informacje o stanie powinien zawierać adres URL w aplikacji internetowej wyłącznie w języku JavaScript?

text: Piszę aplikację sieci web pojedynczej strony, która komunikuje się z warstwą biznesową za pośrednictwem asynchronicznego RPC (zakodowane w formacie json). Celuję w dość nowoczesne przeglądarki, więc mogę przynajmniej kontrolować adres URL po hashu. Jednak URL tak naprawdę nie będzie tym, co steruje stanem aplikacji (który będzie utrzymywany przez warstwę modelu javascript), więc _nie muszę_ nic z nim robić. Mógłbym nawet utrzymać go przez cały czas bez problemu z implementacją. Pytanie brzmi, co _powinno_ znaleźć się w adresie URL? Nie będę wchodził do aplikacji, ponieważ mam nadzieję, że pytanie jest ogólnie przydatne. Jakie oczekiwania mają użytkownicy co do przycisków wstecz i do przodu? O wpisywaniu adresu URL? Czy istnieją obecnie jakieś ogólnie obowiązujące najlepsze praktyki dla tego rodzaju aplikacji?


title: Czy makra obsługują Scala jako dialekt Lisp?

text: Czytałem ostatnio, że obsługa makr w Scali jest już oficjalna. Sprawdziłem stronę dokumentacji i przypominają te z LISP-a. W jednym ze swoich esejów Paul Graham pisze, że kiedy „dodajesz ten ostateczny przyrost mocy” do języka, nie jest on już nowym językiem, ale dialektem seplenienia. Czy tak jest w przypadku Scali? Nie wydaje mi się to dialektem LISP-a, a obsługa makr w Scali jest dla mnie nieco niezręczna.


title: Zmuś użytkownika do rozszerzenia klasy lub użycia konfiguracji

text: Jaka jest lepsza praktyka: wymusić na użytkowniku rozszerzenie klasy abstrakcyjnej czy utworzenie klasy z konfiguracją? Np. pseudokod: ClassA{ this.name this.weight this.height this.width constr(config){ this.name = config.name this.weight = waga this.height = wysokość this.width = szerokość } } lub abstract ClassA{ this .name this.weight this.height this.width } ClassB extends ClassA{ this.name = 'Item' this.weight = 12 this.height = 11 this.width = 14 } Do tej pory używałem konfiguracji, ponieważ większość bibliotek używa tego metoda, ale co jest nie tak z drugą metodą? Niedawno odkryłem, że metoda z rozszerzaniem daje bardziej przejrzysty kod, ale może czegoś mi brakuje?


title: Alternatywy dla skryptów Perl/python do wyszukiwania i zamiany

text: Pracuję w dość starej, ale wystarczająco nieproduktywnej bazie kodu, którą muszę utworzyć (niektóre) skrypty, aby mi pomóc. Na przykład: * dodajemy numer wersji i znacznik czasu w nagłówku pliku (tak, używamy systemu opartego na CVS, ale jest to poza moją kontrolą). * mamy zduplikowany kod układu dla różnych języków (jest to era przed Unicode, więc po prostu powielamy rzeczy), a gdy atrybut kontrolki zmienia się w jednym języku, zmiana ta musi być kaskadowa do innych. Tak więc moje pierwsze przemyślenia dotyczyły kilku skryptów Perla lub Pythona do znalezienia i zastąpienia, aby rozwiązać te dwa problemy. Ale chciałem skontaktować się i sprawdzić, czy ktoś inny ma inne podejście.


title: Tworzenie projektu dla problemu

text: Napisałem wiele kodów przy użyciu OOPS i wciąż nie rozumiem, kiedy kod jest wystarczająco dobry, aby został zaakceptowany przez ekspertów. Procedura myślowa każdego człowieka jest inna, podobnie jak projekt. Moje pytanie brzmi, czy powinienem zrobić coś w szczególności, aby zaprojektować swoje programy w taki sposób, aby były wystarczająco dobre, aby zostały zaakceptowane przez ludzi. Czytałem też inne rzeczy, które czytałem Head First Object Oriented Design, ale w końcu czuję, że sposób, w jaki projektują problemy, jest zupełnie inny, ja bym je zaprojektował.


title: MVC dla naszej aplikacji?

text: Istnieje kilka problemów związanych z zarządzaniem projektami naszych programów i stylami programowania. Zostałem wyznaczony do znalezienia rozwiązania umożliwiającego pisanie kodu wielokrotnego użytku - jednak zespół programistów nie przestrzega zasad. Wolałbym używać MVC do wykonywania dobrze zorganizowanego stylu programowania. Dowiedziałem się, że plan kolejnych prac wymaga grona ekspertów. Chodzi o to, że muszę to wszystko zrobić sam. A najgorsze jest to, że muszę korzystać z ogólnej platformy MVC. Potrzebuję twojej pomocy i sugestii dotyczących: 1. Czy jest sposób na napisanie dokumentu dla MVC - aby użyć go w naszym projekcie w Javie? 2. Jak mogę to reprezentować? 3. Ile pracy potrzebuje? 4. Jak mogę połączyć ze sobą model, widok i części kontrolera?


title: Czy powszechne jest deklarowanie właściwości klasy na dole deklaracji klasy?

text: Pracuję w sklepie deweloperskim PHP, a do zespołu dołączyło kilku nowych programistów. Jeden z nowych członków nalega na deklarowanie właściwości klasy na dole deklaracji klasy, a nie na górze, jak można by się normalnie spodziewać. Przez całe moje 5 lat pracy w tworzeniu stron internetowych nigdy nie widziałem, aby to się robiło. Czy to powszechny styl kodowania?


title: Jakie są zalety korzystania z debugera Java w porównaniu z println?

text: Zawsze używam `System.out.println(...)` do debugowania mojego kodu i działa całkiem dobrze. W jakich przypadkach używasz debuggera eclipse java? Nigdy nie musiałem go używać, a symbol małego robaka wciąż jest dla mnie trochę tajemniczy. Czy są przypadki, w których pomaga mi debuger, których nie mogę rozwiązać za pomocą println?


title: Kilka porad dotyczących Oracle i Java

text: Widziałem wczoraj wiadomość, że Java 7 i Java 8 przeszły, ale większość nie była zbyt zadowolona. Czy ktoś może wyjaśnić, jakie konsekwencje ma to dla Javy i społeczności? Jakie licencje dokładnie zmieniła firma Oracle? Wiele osób myśli, że to może być koniec Javy. Czy powinienem kontynuować naukę Javy, czy może powinienem przenieść się na .NET? Nie mam żadnych preferencji co do jednego lub drugiego, ale jestem teraz trochę zaniepokojony całą presją otaczającą ekosystem Javy. Ponieważ czas jest ważny dla wszystkich, a czas jest tym, czego mam mniej w dzisiejszych czasach, poproszę o kilka rad od społeczności tutaj.


title: Profesjonalni programiści, czy mogę do ciebie dołączyć?

text: Obecnie pracuję w dziale wsparcia technicznego dla firmy zajmującej się oprogramowaniem/sprzętem i w większości jest to dobra praca, ale coraz bardziej czuję, że utknąłem tutaj. Żadnych podwyżek w ciągu 5 lat, kiedy tu jestem, a ostatnio wydaje się, że więcej jest zatrudniania z zewnątrz niż awansu od wewnątrz. Praca, którą wykonuję, jest bardziej techniczna niż wsparcie dla użytkowników końcowych, ponieważ mamy do czynienia głównie z naszymi technikami terenowymi, którzy mają nieco więcej umiejętności technicznych niż ogólna baza użytkowników. W rezultacie wchodzę w znacznie więcej problemów z pomocą techniczną... często śledząc błędy w naszym oprogramowaniu, znajdując wąskie gardła wydajności w schemacie bazy danych itp. Praca, z której jestem najbardziej dumny, to projekty, które wymyśliłem samodzielnie i pracowałem w przerwach na lunch i wolnych okresach w dziale Support. Przez lata napisałem szereg przydatnych narzędzi dla firmy. Aplikacje typu diagnostycznego używane i doceniane przez kilka działów. Należą do nich aplikacje symulujące nasze różne urządzenia sprzętowe, analiza plików dziennika, narzędzia oszczędzające czas dla naszych procesów roboczych itp. Moje najlepsze projekty to programy do symulacji sprzętu, których prawdopodobnie nie umieścilibyśmy w całości. -time developer na kazał komuś to zrobić, ale okazały się one na tyle popularne i użyteczne, że mogą być wykorzystywane przez programistów, QA, R&D i Support. Pozwalają nam łączyć nasze oprogramowanie z symulowanym sprzętem, zamiast zaśmiecać nasze miejsca pracy nieporęcznym, trudnym do zdobycia sprzętem. Odkąd zacząłem tutaj, moje życie posunęło się do przodu (żonaty, dziecko, jeszcze jeden w drodze), ale wydaje mi się, że moja kariera nie. Nadal zarabiam to, co zarobiłam, chodząc przez drzwi pierwszego dnia. Budżet firmy jest napięty, spadły premie, nie ma też podwyżek ani korekty kosztów utrzymania/inflacji. Jako jedyne źródło dochodu dla mojej rodziny czuję, że muszę robić więcej i chciałbym odgrywać bardziej aktywną rolę w _tworzeniu czegoś_ w pracy, a nie tylko usuwaniu błędów innych ludzi. Lubię pracę techniczną i myślę, że rozwój to kolejny logiczny krok w mojej karierze. Chciałbym wnieść trochę „legitymizacji” do mojej pracy rozwojowej w niepełnym wymiarze godzin i stać się bardziej wykwalifikowanym i wartościowym pracownikiem. Ostatecznie, jeśli to pomoże mi lepiej wspierać moją rodzinę, byłoby to idealne. Czy mogę przejść do profesjonalnego programisty? Mam dyplom inżyniera, ale nie posiadam formalnego wykształcenia w zakresie informatyki. Piszę aplikacje WinForms przy użyciu platformy .NET, pracuję jako freelancer w zakresie tworzenia stron internetowych, zgłosiłem się na ochotnika do pisania oprogramowania dla organizacji non-profit i zacząłem eksperymentować z programowaniem mikrokontrolerów. Lubię uczyć się nowych rzeczy w ograniczonym wolnym czasie, który mam do dyspozycji. Myślę, że mam predyspozycje do podjęcia roli rozwojowej, nawet jako „uczeń”, jeśli taka opcja jest możliwa. Czy któryś z was przeniósł się do rozwoju w ten sposób? Czy któryś z was programistów ma jakieś rady lub przestrogi? Czy są lepsze opcje kariery, o których nie pomyślałem? Z zadowoleniem przyjmuję wszelkie związane z nimi komentarze i z góry dziękuję za ich zamieszczenie.


title: Zamieszanie GPL! Czy mogę sprzedawać produkt z komponentami objętymi GPL bez udostępniania źródła?

text: Jestem naprawdę zdezorientowany.. Zastanawiam się nad stworzeniem komercyjnego programu i jest kilka komponentów typu open source, objętych GPL, których chciałbym użyć.. Czy mogę sprzedawać mój produkt z komponentami bez rozpowszechniania mojego źródła ? Na przykład... powiedzmy, że robiłem komercyjny edytor tekstu, a mój przyjaciel ma naprawdę niesamowity edytor tekstu na wolnym oprogramowaniu na licencji GPL... Ale chciałem stworzyć taki edytor tekstu, jak jego, ale ze specjalnymi funkcjami... Czy mogę go rozwidlić? edytor tekstu dodaje wszystkie moje specjalne funkcje i sprzedaje je bez posiadania kodu źródłowego do moich specjalnych funkcji dostępnych dla moich użytkowników?


title: Czy ma znaczenie kierunek węzła potomnego drzewa Huffmana?

text: Tak więc, jestem w moim dążeniu do stworzenia implementacji Java algorytmu Huffmana do kompresji/dekompresji plików (jak być może wiesz, odkąd Dlaczego warto tworzyć drzewo Huffmana na znak zamiast węzła?) do zadania szkolnego. Teraz lepiej rozumiem, jak ta rzecz ma działać. Wikipedia ma tutaj świetnie wyglądający algorytm, który zdawał się ułatwiać mi życie. Zaczerpnięte z http://en.wikipedia.org/wiki/Huffman_coding: > * Utwórz węzeł-liść dla każdego symbolu i dodaj go do kolejki priorytetów. > * Gdy w kolejce jest więcej niż jeden węzeł: > * Usuń dwa węzły o najwyższym priorytecie (najniższe prawdopodobieństwo) z kolejki > * Utwórz nowy węzeł wewnętrzny z tymi dwoma węzłami jako dziećmi i z prawdopodobieństwem > równym suma prawdopodobieństw dwóch węzłów. > * Dodaj nowy węzeł do kolejki. > * Pozostały węzeł to węzeł główny, a drzewo jest kompletne. > Wygląda prosto i świetnie. Jednak to sprawiło, że zacząłem się zastanawiać: kiedy „scalę” dwa węzły (uczynię je dziećmi nowego węzła wewnętrznego), ** czy ma to znaczenie, w jakim kierunku (w lewo lub w prawo) będzie później każdy węzeł? W pełni rozumiem kodowanie Huffmana i nie jestem pewien, czy istnieją kryteria określające, czy węzeł powinien iść w prawo, czy w lewo. Założyłem, że być może węzeł o najwyższej częstotliwości przejdzie w prawo, ale widziałem w sieci kilka drzew Huffmana, które wydają się nie spełniać takich kryteriów. Na przykład przykładowy obraz Wikipedii http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Huffman_tree_2.svg/625px-Huffman_tree_2.svg.png wydaje się umieszczać najwyższe z nich po prawej stronie. Ale inne obrazy, takie jak ten http://thalia.spec.gmu.edu/~pparis/classes/notes_101/img25.gif mają je wszystkie po lewej stronie. **Jednak nigdy nie są _pomieszane_ na tym samym obrazie (niektóre po prawej, a inne po lewej)**. Czy to ma znaczenie? Czemu?


title: Gdzie biblioteki narzędziowe mieszczą się w architekturze warstwowej?

text: Rozważ tę makietę stosu oprogramowania zaprojektowanego z myślą o architekturze warstwowej: ![Podstawowy przykład stosu oprogramowania o strukturze warstwowej.](http://i.stack.imgur.com/RQCSF.png) Każda warstwa aplikacji jest oddzielone przez wywołania API, ale w całym tekście używana jest biblioteka obsługi pamięci. Wszystkie warstwy muszą kopiować, przydzielać lub w jakiś sposób wpływać na pamięć. Czy to złe wykorzystanie wzorca architektury warstwowej, czy jest to jedna z jego pułapek? Z jednej strony, próba wymuszenia wzorca na wywołaniach biblioteki, być może poprzez dodanie wrapperów obsługujących pamięć do każdej warstwy aplikacji, stworzyłaby wiele standardowych kodów. Z drugiej strony, pozwalanie warstwom, poprzez wywołania biblioteki, tworzyć arbitralne punkty wejścia do różnych warstw, wydaje się zaprzeczać samemu uzasadnieniu architektury warstwowej.


title: Czy przydałoby się programiście zdobycie kwalifikacji w Prince2?

text: Nawet jeśli programista nie będzie pełnił funkcji kierownika projektu, czy mały zespół jednego z deweloperów, który ma kwalifikacje Prince2 odniesie jakąś korzyść?


title: Środowisko amnezyjne

text: Mój zespół szuka terminu technicznego, który może, ale nie musi istnieć. Staramy się opisać środowisko, takie jak baza danych, która została zbudowana na przestrzeni czasu z niewielką ilością dokumentacji dotyczącej procesu zmian, który w nią wszedł. Generalnie są to starsze systemy, których pierwotni programiści już dawno przenieśli się na wyższy poziom i są w tak zawiłym i niemożliwym do zarządzania stanie, że jedynym sposobem na odtworzenie środowiska, powiedzmy do celów testowych, jest skopiowanie go i zrobienie wszystkiego, co najlepsze przy rekonfiguracji do nowego celu. Jak dotąd najlepszym terminem, jaki wymyśliliśmy, jest „amnezja”, np. „ustawienie nowego środowiska testowego będzie wyzwaniem, ponieważ jest to amnestyczna db”. Jednak nadal nie jesteśmy zadowoleni z tego terminu i zastanawialiśmy się, czy istnieje lepsze i/lub bardziej akceptowane określenie dla tej sytuacji.


title: Rozwidlenie repozytorium na GitHubie, ale umożliwienie nowych problemów na forku

text: Wcześniej rozwidlałem repozytoria innych osób na GitHub i zauważyłem, że problemy pozostają w oryginalnym repozytorium i że nie mogę zgłaszać problemów w rozwidlonym repozytorium. Mam teraz następujące zadanie. Pracuję dla małej firmy, w której rozwój prowadził jeden z dyrektorów na swoim koncie osobistym. Polubownie opuścił projekt i chcielibyśmy przenieść ten projekt z jego osobistego konta na nowe konto „roli” na GitHub. Naturalnie rozwidlałbym repozytorium, aby zachować historię kodu, ale skończę z repozytorium, w którym nie możemy zgłaszać nowych problemów, co jest dość niepożądane. Jak mogę zrobić kopię tego oryginalnego repozytorium na naszym nowym koncie, najlepiej zachowując historię kodu, ale móc zgłaszać nowe problemy na tym nowym koncie?


title: Jak przekonać szefa, że korzystanie z aplikacji w celu uzyskania dostępu do zewnętrznej strony internetowej jest w porządku?

text: To znaczy, jeśli zgadzasz się, że jest OK. Musimy prowadzić dokładny wewnętrzny rejestr numerów rozliczeniowych banków, a mój szef chce, żebym ustanowił proces, w którym raz w tygodniu ktoś wchodzi na stronę Rezerwy Federalnej, klika link, aby uzyskać listę numerów rozliczeniowych (lub link podający aktualizacje od określonej daty), a następnie ręcznie wgrywa wynikowy plik tekstowy do aplikacji, która dokona aktualizacji naszych danych. Powiedziałem mu, że proces ręczny wcale nie jest konieczny i że mogę napisać procedurę, która będzie miała dostęp do numerów routingu FED w aplikacji, która aktualizuje nasze dane, i umieszcza je w dowolnym harmonogramie. Ale jest zdecydowanie przeciwny robieniu tego i nazywa to „hakowaniem strony internetowej Rezerwy Federalnej”. Myślę, że boi się, że FED nas dopadnie. Pokazałem mu plik robot.txt FED-a, a jedyne, czego zabrania, to automatyczne indeksowanie stron z rozszerzeniem .cf*: User-agent: * # dotyczy wszystkich robotów Disallow: CF # nie zezwalaj na indeksowanie wszystkich katalogów CF* i strony To nie mówi nic o automatycznym dostępie do tych samych danych, do których można uzyskać dostęp ręcznie. Czy ktoś ma dobry kontrargument na myśl, że będziemy „hakować” FED?


title: Czy złą praktyką jest umieszczanie wszystkich wyliczeń w jednym pliku i używanie ich w wielu klasach?

text: Jestem początkującym twórcą gier, pracuję nad okazjonalnymi grami niezależnymi i od jakiegoś czasu robię coś, co początkowo wydawało mi się złą praktyką, ale naprawdę chcę uzyskać odpowiedź od kilku doświadczonych programistów. Załóżmy, że mam plik o nazwie `enumList.h`, w którym deklaruję wszystkie wyliczenia, których chcę użyć w grze: // enumList.h enum materials_t { DREWNO, KAMIEŃ, ETC }; enum entity_t { GRACZ, POTWÓR }; wyliczenie mapa_t { 2D, 3D }; // i tak dalej. // Tile.h #include "enumList.h" #include <wektor> class tile { // stuff }; Główną ideą jest to, że deklaruję wszystkie wyliczenia w grze w **1 pliku** , a następnie importuję ten plik, gdy potrzebuję z niego użyć określonego wyliczenia, zamiast deklarować go w pliku, w którym muszę go użyć. Robię to, ponieważ sprawia to, że wszystko jest czyste, mogę uzyskać dostęp do każdego wyliczenia w **1 miejscu**, zamiast otwierać strony wyłącznie w celu uzyskania dostępu do jednego wyliczenia. Czy to zła praktyka i czy może w jakikolwiek sposób wpłynąć na wydajność?


title: dodaj prefiks do localhost

text: Czy istnieje możliwość dodania prefiksu przed localhost? Moje pytanie brzmi, czy chcę dodać przedrostek przed localhost dla adresu URL mojego projektu (tj. "dev.localhost/project/default.htm"). Dotyczy to aplikacji ASP.NET działającej w usługach IIS.


title: Znaczniki HTML a programistyczny JS

text: Myślałem o konsekwencjach używania programistycznych komponentów JavaScript w porównaniu ze znacznikami HTML. Na przykład przyjrzałem się Enyo Framework, który ma swoją moc w kompozycji. Można budować komponenty złożone z prostszych komponentów, a na końcu mogą być one zbudowane ze znaczników, ale nie pisze się za ich pomocą znaczników HTML. Pomyślałem też, że byłoby możliwe stworzenie biblioteki UI w stylu swingu, która renderowałaby się na kanwie HTML5. Nie byłoby też potrzeby stosowania jakichkolwiek znaczników. Ale czy jest taka potrzeba? Czy HTML5 nie wystarcza do osiągnięcia tych celów? Zrobiłem burzę mózgów w aplikacji internetowej podobnej do draw.io, gdzie byłoby wiele elementów, które trzeba zmieniać i przeciągać. Musiałyby być połączone, przekształcone, obrócone itp., A wszystko to musi być oczywiste ze względu na różne granice przedmiotów i inne wskazówki dotyczące interfejsu użytkownika. Czy można to osiągnąć za pomocą HTML5, czy skoro i tak muszę dużo kodować, czy używanie tylko komponentów JavaScript bez znaczników HTML byłoby szkodliwe? Jakie są kompromisy i co daje więcej bólu?


title: Zalecenia dotyczące nauki dobrego stylu programowania młodszych programistów

text: Jestem wielkim fanem dobrego stylu kodowania, tworzącego czysty, przejrzysty kod, który działa dobrze i jest łatwy w użyciu i integracji z większymi systemami. Uważam, że my, programiści, jesteśmy zasadniczo rzemieślnikami, którzy powinni być dumni z naszej pracy, z każdej linii. Nie przepadam za kodem, który jest niespójnie sformatowany, zaśmiecony zakomentowanym eksperymentalnym kodem i pełen nieprzydatnych lub mylących funkcji i nazw zmiennych. Ale czasami trudno mi się spierać z takim kodem, który w zasadzie działa. Jeśli uważasz, że styl kodowania ma znaczenie, to szukam rekomendacji, jak uczyć dobrego, profesjonalnego stylu kodowania młodszych programistów pode mnie. Chcę, aby byli dumni ze swojej pracy, ale obawiam się, że wydają się być zadowoleni, gdy ich kod ledwo działa i nie są zainteresowani tworzeniem tego, co profesjonaliści tacy jak ja uznaliby za profesjonalny kod. Z drugiej strony, jeśli uważasz, że styl kodowania nie jest szczególnie cenny, z zadowoleniem przyjmę Twoje uwagi i jestem otwarty na ponowne rozważenie moich standardów i tolerancji. Znam zwykłe argumenty przemawiające za dobrym kodem: zrozumiałość, łatwość obsługi itp., ale chciałbym też usłyszeć kilka obaleń na argumenty typu "to działa, czego chcieć więcej?" W naszej branży możemy użyć kompilatora do ukrycia wielu grzechów. Czysty kod i niechlujny kod mogą prowadzić do identycznie działających programów, więc czy czystość ma znaczenie, a jeśli tak, to dlaczego? [Chociaż istnieje kilka pytań dotyczących stylu kodowania, nie znalazłem żadnego związanego z metodami nauczania i sposobami zaszczepienia dobrego stylu kodowania młodszym programistom.]


title: W zależności od innej biblioteki open source: skopiuj/wklej kod lub dołącz

text: Pracuję nad dużą klasą i zacząłem wdrażać nowe funkcje, które wymagają grafiki. Sam zacząłem pisać funkcje graficzne, ale wiem, że istnieją biblioteki open source, które mogą zapewnić mi tę funkcjonalność bez konieczności samodzielnego jej pisania. Problem polega na tym, że wolę, aby klasa była samowystarczalna i niezależna od żadnej innej biblioteki. Jeśli sam tego nie napiszę, musiałbym poprosić użytkownika o upewnienie się, że biblioteka graficzna jest już zainstalowana (mniej przyjazna dla użytkownika). Jeśli sam to piszę, robię o wiele więcej pracy, niż muszę. Mógłbym również skopiować/wkleić część odpowiedniego kodu do mojej własnej klasy, ale nie jestem pewien co do wad tego działania (jest to biblioteka open source, która pasuje do mojej licencji, więc nie przejmuję się legalnością, tylko programistycznie, jeśli są wady). Co więc powinienem zrobić: * skopiować i wkleić kod z zewnętrznej biblioteki * sam napisać kod, aby był naprawdę samowystarczalny * poprosić użytkownika o pobranie i zainstalowanie innej biblioteki


title: Czy niebezpieczne jest dla mnie podawanie niektórych z moich klas Modelu metod typu Control?

text: W moim osobistym projekcie próbowałem trzymać się MVC, ale uświadomiono mi również, że zbyt ciasne trzymanie się MVC może być złą rzeczą, ponieważ sprawia, że pisanie staje się niezręczne i wymusza przepływ programu w dziwny sposób (tj. funkcje mogą być wykonywane przez coś, co normalnie nie byłoby, i uniknąć kosztów ogólnych związanych z MVC). Zaczynam więc czuć się usprawiedliwiony w tym kompromisie: mam kilka „programów menedżerskich”, które „posiadają” dane i potrafię nimi w jakiś sposób manipulować, dlatego myślę, że liczyłyby się one jako _zarówno_ część modelu, jak i część kontrolę i wydaje mi się to bardziej naturalne niż trzymanie ich osobno. Na przykład: Jednym z moich menedżerów jest PlayerCharacterManager, który ma następujące metody: void buySkill(PlayerCharacter playerCharacter, Skill skill); void changeName(); nieważna zmiana roli(); void restatCharacter(); void dodajCharacterToGame(); void utwórzNowyZnak(); PlayerCharacter getPlayerCharacter(); Lista<PlayerCharacter> getPlayersCharacter(Odtwarzacz gracza); List<PlayerCharacter> getAllCharacters(); _Mam nadzieję, że nazwy metod są na tyle przejrzyste, że nie trzeba ich wszystkich wyjaśniać._ Nazwałem go menedżerem, ponieważ pomoże on zarządzać wszystkimi obiektami „modelu” PlayerCharacter, które tworzy kod, oraz tworzyć i przechowywać ich mapę . Być może w przyszłości zdobędę go do przechowywania innych informacji. Planuję mieć kolejne dwie podobne klasy do tego rodzaju kontroli, ale będę organizować, kiedy i jak to się dzieje oraz co zrobić z zwracanymi danymi za pośrednictwem czystej klasy kontrolera. Rozdzielenie kontroli między poinformowanych menedżerów i kontrolera, w przeciwieństwie do działania tylko przez kontroler, uprości mój kod i sprawi, że będzie on bardziej płynny. Moje pytanie brzmi, czy jest to niebezpieczny wybór, jeśli chodzi o utrudnienie śledzenia/testowania/naprawiania kodu? Czy jest to coś, co zostało uznane za dobre, złe lub neutralne? Nie znalazłem niczego podobnego poza ideą Aktorów, ale nie do końca staram się to robić. **Edytuj:** Być może potrzebny jest przykład; Używam kontrolera do aktualizowania widoku i uzyskiwania dostępu do danych, więc po kliknięciu przycisku „Dodaj nowy znak do odtwarzacza” wywoła on metody w kontrolerze, które następnie przejdą i powiedzą klasie PlayerCharacterManager, aby utworzyła nową postać na przykład wywoła klasę PlayerManager, aby dodać ten nowy znak do mapy postaci gracza, a następnie doda te informacje do bazy danych i powie widokowi, aby uaktualnił wszystkie GUI. To jest rodzaj „sekwencji kontrolnej”, którą mam nadzieję stworzyć za pomocą tych klas menedżera.


title: Jaki algorytm jest używany na kartach inteligentnych dla Zaufanych Przedstawicieli Społeczności DNSSEC?

text: Czytałem trochę o DNSSec i interesuje mnie algorytm, którego zdecydowali się użyć podczas dzielenia zaufanego klucza między 7 zaufanych przedstawicieli społeczności (TCR). Niestety nie mogę nigdzie znaleźć żadnych informacji o samym algorytmie. Czy jest to tylko implementacja algorytmu Shamir Secret Sharing Algorithm, czy też inne podejście? Trochę informacji znajdziesz tutaj.


title: Po co metoda setter, kiedy metoda getter wystarcza w PHP OOP

text: Ćwiczę OOP z PHP i uderzają mnie metody ustawiające i pobierające. Mogę bezpośrednio uzyskać dostęp do właściwości i metod klasy za pomocą metody pobierającej, to jaki jest pożytek z metody ustawiającej? Zobacz mój przykład. <?php class MojaKlasa{ public $classVar = "Jest to zmienna klasy"; funkcja publiczna Getter(){ return $this -> classVar; } } $obj = nowa MojaKlasa; echo $obj -> Getter(); ?>


title: Czy dobrym pomysłem jest formatowanie kodu w Eclipse za pomocą automatycznego formatowania?

text: Do kodowania używam eclipse, a językiem, którego używamy, jest Java. Kiedyś ktoś zasugerował, aby poprawnie sformatować kod, używając auto formattera (CTRL+SHIFT+F) Chociaż to polecenie formatuje kod, ale czasami wydaje mi się, że ogólny wygląd staje się dziwny i nie jest zbyt czytelny. Czy jest to więc zalecana rzecz do zrobienia? Jeśli nie, co jest lepsze w formatowaniu naszego kodu w Eclipse?


title: Kiedy optymalizacja nie jest przedwczesna, a zatem nie jest zła?

text: „Przedwczesna optymalizacja jest źródłem wszelkiego zła” to coś, o czym prawie każdy z nas słyszał/czytał. Ciekawi mnie jaki rodzaj optymalizacji nie jest przedwczesny, tj. na każdym etapie tworzenia oprogramowania (projekt wysokiego poziomu, projekt szczegółowy, implementacja wysokiego poziomu, implementacja szczegółowa itp.) jaki zakres optymalizacji możemy rozważyć bez jej przejścia na ciemną stronę.


Niedawno zadałem pytanie na Stack Overflow, aby dowiedzieć się, dlaczego isset() jest szybszy niż strlen() w PHP. Rodziło to pytania dotyczące znaczenia czytelnego kodu i tego, czy poprawa wydajności w mikrosekundach w kodzie była warta rozważenia. Mój ojciec jest emerytowanym programistą i pokazałem mu odpowiedzi. Był absolutnie pewien, że jeśli koder nie bierze pod uwagę wydajności w swoim kodzie nawet na poziomie mikro, to nie są dobrymi programistami. Nie jestem tego pewien – być może wzrost mocy obliczeniowej oznacza, że nie musimy już brać pod uwagę tego rodzaju ulepszeń mikro-wydajności? Być może ten rodzaj rozważań należy do osób, które piszą rzeczywisty kod języka? (z PHP w powyższym przypadku). Znaczenie mogą mieć czynniki środowiskowe – internet zużywa 10% energii na świecie. Zastanawiam się, jak marnotrawstwem jest kilka mikrosekund kodu, gdy jest on replikowany biliony razy na milionach witryn? Chciałbym poznać odpowiedzi najlepiej w oparciu o fakty dotyczące programowania. **Czy mikrooptymalizacja jest ważna podczas kodowania?** Moje osobiste podsumowanie 25 odpowiedzi, dziękuję wszystkim. Czasami naprawdę musimy się martwić o mikrooptymalizacje, ale tylko w bardzo rzadkich przypadkach. W większości przypadków znacznie ważniejsze są niezawodność i czytelność. Jednak rozważanie od czasu do czasu mikrooptymalizacji nie zaszkodzi. Podstawowe zrozumienie może nam pomóc nie dokonywać oczywistych złych wyborów podczas kodowania, takich jak if (expensiveFunction() || counter < X) Powinno być if (counter < X || costFunction()) (Przykład z @zidarsk8) Może to być niedroga funkcja, a zatem zmiana kodu byłaby mikrooptymalizacją. Ale przy podstawowym zrozumieniu nie musiałbyś tego robić, ponieważ w pierwszej kolejności napisałbyś to poprawnie.


title: Jakie optymalizacje są przedwczesne?

text: Jestem tu od prawie miesiąca i wygląda na to, że ludzie mają tendencję do używania argumentu „Przedwczesna optymalizacja jest źródłem wszelkiego zła”, gdy tylko ktoś wspomni o wydajności. Czym tak naprawdę jest przedwczesna optymalizacja? Jaka jest różnica między tym, co zasadniczo polega na pisaniu dobrze zaprojektowanego systemu, a użyciem pewnych metod i przedwczesnych optymalizacji? Pewne aspekty, które moim zdaniem powinny być interesującymi tematami w ramach tego pytania: * W jaki sposób optymalizacja wpływa na złożoność kodu? * Jak optymalizacja wpływa na czas/koszt opracowania? * Czy optymalizacja kładzie nacisk na dalsze zrozumienie platformy (jeśli dotyczy)? * Czy optymalizacja jest abstrakcyjna? * Jak optymalizacja wpływa na projektowanie? * Czy „ogólne rozwiązania” są lepszym wyborem zamiast konkretnych rozwiązań problemu, ponieważ konkretne rozwiązanie jest optymalizacją? EDYCJA / aktualizacja: Znalazłem te dwa linki, które są bardzo interesujące, jeśli chodzi o to, czym naprawdę jest przedwczesna optymalizacja: http://smallwig.blogspot.com/2008/04/smallwig-theory-of-optimization.html http://www.acm .org/ubiquity/views/v7i24_fallacy.html


title: Czy przedwczesna optymalizacja zawsze jest zła?

text: Pracuję w małej firmie zajmującej się tworzeniem oprogramowania/stron internetowych. Przyzwyczaiłem się do przedwczesnej optymalizacji, wiem, że to zło i promuje zły kod, ale pracuję w tej firmie już od dłuższego czasu i uznałem to za zło konieczne. W przeszłości nigdy nie sprawiało mi to problemu, ale może, jeśli zdobędę partnerów lub następcę. Czy powinienem teraz zmienić swoją obecną praktykę, aby przygotować się na tę sprawę, czy nie powinienem się tym martwić?


title: Przejście między projektowaniem pod kątem wydajności a przedwczesną optymalizacją

text: > **Możliwe duplikowanie:** > Kiedy optymalizacja nie jest przedwczesna, a zatem nie jest zła? Podczas projektowania własnej biblioteki dostępu .Net SQL stwierdziłem, że chcę, aby wszystko działało tak szybko, jak to możliwe, więc staram się szukać najszybszych sposobów robienia rzeczy. Często jest to krytykowane jako przedwczesna optymalizacja, gdy szukam tylko najszybszego sposobu na zrobienie czegoś. Moje pytanie, czy istnieje skrzyżowanie między projektowaniem pod kątem wydajności a przedwczesną optymalizacją?


title: Jak kontrolować węzły w farmie serwerów?

text: Czytałem o konfiguracjach hadoop i wielowęzłowych, aw dokumentacji jest napisane, że musisz mieć już uruchomioną JVM i oprogramowanie hadoop na tych węzłach. Moje pytanie brzmi, czy ludzie instalują to oprogramowanie na każdym z tych komputerów indywidualnie? czy istnieje oprogramowanie, które automatyzuje ten proces? Czytałem też o przełącznikach KVM, ale nie jestem pewien, czy to jest to, czego ludzie zwykle używają w takich sytuacjach.


title: Jak ocenić umiejętności komunikacyjne programisty

text: Jeśli interesowałyby mnie pytania podczas rozmowy kwalifikacyjnej, takie jak „Opisz, jak wyjaśniłeś trudną kwestię techniczną osobie nietechnicznej”, użyłbym Google do wyszukiwania pytań dotyczących umiejętności komunikacyjnych podczas rozmowy kwalifikacyjnej. Ale tak naprawdę chciałbym mieć kogoś wyjaśnij _mi_ jakiś stosunkowo trudny problem techniczny. Dlatego interesują mnie odpowiedzi, które identyfikują przydatny temat do tego celu lub przykłady tego, co inni robią, aby stworzyć scenariusze w celu oceny komunikacji kandydata. Innymi słowy, pewne ćwiczenie, które faktycznie zmusza kandydata do zakomunikowania czegoś trudnego, zamiast opisywania jakiegoś czasu w przeszłości, kiedy był do tego zobowiązany.


title: Jakiego języka powinienem używać do programu wymagającego dużej mocy obliczeniowej?

text: To pytanie wieloczęściowe. Piszę program intensywny obliczeniowo, który będzie wykonywał obliczenia na bardzo dużych liczbach, w skali silni(100) . Rozważam użycie Javy lub C++ (to wszystko, co wiem, a C++ tylko nieznacznie), ale nie jestem pewien, który byłby lepszy w tym kontekście. Wiem, że C++ będzie szybszy, ale Java ma wbudowane narzędzie do dużych liczb, klasę BigInteger i nie znam żadnego odpowiednika w C++. Oto pytania... 1. Czy C++ jest o wiele szybszy niż java, aby warto było się uczyć i znaleźć sposób na radzenie sobie z dużymi liczbami? 2. Jeśli powinienem używać C++, jak poradziłbym sobie z dużymi liczbami? 3. Czy możliwe jest po prostu określenie nowego typu danych w C++, który reprezentuje liczbę, ale z większymi ograniczeniami niż int?


title: Czy SpecFlow powinien być używany z BDD jako samodzielny programista?

text: Jestem od dawna fanem TDD i po przeczytaniu książki RSpec chciałbym przejść na proces BDD. Podoba mi się pomysł wjeżdżania z zewnątrz do środka, tak jak jest to przedstawione w książce. To, czego trudno mi się uporać, to struktura testów. Próbowałem SpecFlow, ale wydaje się to kłopotliwe w użyciu, gdy jestem jedyną osobą, która naprawdę przygląda się testom. Podoba mi się pomysł, aby po prostu używać prostego NUnit, a nie dodawać kolejnego frameworka, tak jak jest to przedstawione tutaj. Czy to dobry sposób, aby spróbować ustrukturyzować testy BDD? Czy jest więcej informacji na temat porównywania tych dwóch sposobów (które mogą być nawet nowsze)?


title: Czy semantycznie poprawne byłoby utworzenie konstruktora „Login” w klasie API?

text: Ponieważ metody klasy będą działać tylko wtedy, gdy użytkownik jest zalogowany, czy to prawda, czy jest jakiś problem, który może spowodować, że mój kod będzie wolny/nieefektywny?


title: Jaki jest właściwy sposób tworzenia aplikacji ASP.NET w celu oddzielenia dostępu do danych od wizualizacji danych?

text: Obecnie zajmuję się migracją do TFS z SVN dużego projektu, który zostanie podzielony na pięć różnych witryn. Ten projekt umożliwia niektórym dostawcom wstawianie pięciu różnych danych produktów do korporacyjnej bazy danych. Podobnie jak wiele innych firm, mamy _dług technologiczny_, który należy rozwiązać (lub przynajmniej zmniejszyć) dzięki tej nowej organizacji projektu. Jednak jestem całkiem nowy w ASP.NET, a nasze oprogramowanie nadal działa w wersji 2.0 .NET, więc może czegoś brakuje lub coś powinno być zrobione w inny sposób w dzisiejszych czasach z 3.5+. Jedna z tych pięciu różnych części będzie nową. To jest ten, który zamierzam rozwijać. Aby osiągnąć wysoki stopień modułowości, kod obecnego projektu jest podzielony na kilka DAO ( _Data Access Object_ ) pod App_Code, moduły `*.ascx` żyjące w różnych częściach struktury projektu, klasy VB dziedziczące po `System .Web.UI.*` (dla **każdej** kontrolki wyświetlanej w sieci Web) w obszarze App_Code i wiele procedur składowanych służących do dostarczania danych do kontrolek. Ponadto mamy kilka `*.aspx`, które używają `<asp:PlaceHolder />` do wyświetlania każdej z kontrolek dziedziczących po System.Web.UI. Pytanie pojawia się, gdy widzę, że aby utworzyć prostą listę rozwijaną `<select>` wyświetlającą listę dostawców, muszę wykonać następujące kroki: 1. Utworzyć klasę `cProvider` wewnątrz App_Code, która ostatecznie dziedziczy po System.Web.UI, z metodą, która wywołuje następujący obiekt DAOPrvider. 2. Utwórz konkretny obiekt DAO, aby połączyć się z bazą danych, której potrzebuję. 3. Utwórz kolejny obiekt DAO o nazwie DAOProvider, który dziedziczy po poprzednim, z wywołaniem procedury składowanej, która pobiera listę dostawców. 4. Utwórz tę procedurę składowaną w bazie danych. 5. Utwórz kontrolkę `.ascx`, aby wyświetlić `<select>` z opcjami uzyskanymi z `cProvider`. Jeśli nadal tam jesteś, oto moje pytanie: Czy to właściwy sposób na robienie rzeczy? Czy ten _wysoki_ poziom modułowości jest właściwym sposobem tworzenia zarządzalnych aplikacji .NET? Czy muszę kierować się tym stylem i organizacją, czy też powinienem wybrać inny (proszę podać mi swoje zalecenia)? Z mojego punktu widzenia, konieczność wykonania wszystkich tych kroków, aby narysować prostą listę rozwijaną, w ogóle nie jest zgodna z zasadami KISS i staje się nie do opanowania, jeśli ktoś inny musi wziąć ten projekt, wiedząc, że kod jest jedyną dokumentacją, jaką posiadamy. EDYCJA: bardzo mile widziane byłyby linki do dokumentacji dotyczącej tego tematu.


title: Gdzie zwrócić się o ulepszenie bazy kodu w skali wieloprojektowej?

text: Czy są dostępne zasoby dla programisty z dużą bazą kodu, aby przeprowadzić profesjonalną analizę w celu znalezienia obszarów najbardziej potrzebnych ulepszeń? Logika/Powód mówi mi, że istnieje granica tego, co może wchłonąć pytanie dotyczące przeglądu kodu, a także, że ilość pracy, jaką trzeba wykonać, nie jest czymś, co powinno być bezpłatne.


title: Podejścia do zarządzania powiązanymi plikami binarnymi, oprócz kodu

text: Pracuję nad stroną internetową dla fotografa, cały kod to tylko kilka plików, a całe repozytorium to kilka MB bez rzeczywistych zdjęć. Ale kiedy dodaję rzeczywiste zdjęcia do git i commit, repozytorium skacze do 75 MB. Biorąc pod uwagę, że zdjęcia zostaną zaktualizowane, rozmiar repozytorium będzie rósł wraz z aktualizacją zdjęć. Wiem, że robię coś bardzo złego. Proszę, podzielcie się swoimi metodami zarządzania dużymi plikami binarnymi oddzielnie od kodu źródłowego i nadal utrzymuj zależności. PS: Obecnie nie używam db, wszystkie są zwykłymi plikami tekstowymi.


title: Wytyczne dotyczące topologii i wdrażania dużych witryn e-commerce

text: ## Problem Jestem głównym inżynierem witryny eCommerce o dużym natężeniu ruchu (ponad 1 mln odsłon na godzinę). Z różnych powodów mamy możliwość odbudowania dużej części naszej infrastruktury. Pojawia się wiele interesujących problemów w równoważeniu elastyczności, stabilności, szybkości wprowadzania na rynek itp. **Na wysokim poziomie jestem zainteresowany tym, jak inni radzili sobie w podobnych sytuacjach. W szczególności chcę wiedzieć, w jaki sposób inni zaprojektowali swoją witrynę, aby zapewnić stabilne wdrożenia w szybko zmieniającym się środowisku.** * Jednym z głównych kompromisów, na który patrzę, jest rozbicie naszej witryny według obszarów funkcjonalnych i zapewnienie każdemu z nich własnej subdomeny . Głównym czynnikiem jest to, że hostujemy na platformie Azure, a wdrożenia to wszystko albo nic. * Interesuje mnie również, w jaki sposób inni zachowali integralność architektoniczną w szybko zmieniającym się środowisku i zespole złożonym z różnych poziomów doświadczenia. ## Tech Jesteśmy przede wszystkim sklepem Microsoft: SQL Server, Windows Server 2008, .Net 4.0, Visual Studio 10, itd... Podjęliśmy również decyzję o hostowaniu naszej głównej witryny na platformie Azure i intensywnie korzystamy z przechowywanie tabel i obiektów blob, a także pamięć podręczna tkaniny aplikacji. Rozważamy korzystanie z wielu centrów danych Azure, ale do tej pory nie podjęliśmy ostatecznej decyzji. Cała zawartość statyczna, w tym JavaScript i CSS, zostanie zminimalizowana i umieszczona w naszym CDN. Nasza strona jest zbudowana przy użyciu .Net MVC 3 i jest obsługiwana przez architekturę w stylu DDD. Nasze biblioteki dostępu do danych i reguły biznesowe są dość dobrze zahermetyzowane i oddzielone od rzeczywistej logiki wyświetlania. ## Proces Chociaż nie jest to prawdziwie zwinny sklep, bardzo szybko wykonujemy iteracje z częstymi wdrożeniami, testami na wielu odmianach, wymaganiami just in time itp. Generalnie jesteśmy bardzo przedsiębiorczy i musimy szybko reagować na pojawiające się nowe możliwości. (kod dla "może być chaotyczny") ## Zespół Nasz zespół programistów składa się z kilkudziesięciu programistów o różnym poziomie umiejętności i doświadczenia. Podczas gdy niektórzy programiści mogą działać niezależnie, inni potrzebują bardzo dokładnych przeglądów kodu. Zespół QA ma bardzo dokładny proces ręcznego przeglądu. Zaczynają również budować zestaw testów QTP, aby zautomatyzować testy regresji. Zespół programistów z kolei korzysta z testów jednostkowych i testów BDD, gdy jest to właściwe. ## Nie Rozważania Wiem, że istnieje wiele silnych opinii, więc aby uprzedzić wojny religijne, oto kilka odpowiedzi, które nie będą dla mnie pomocne. * Po prostu używaj Java, Oracle, PHP, Ruby, itp... * Po prostu używaj EC2 * Poproś programistów, aby byli bardziej ostrożni * Po prostu powiedz programistom, aby kodowali szybciej * Po prostu powiedz „biznesowi”, aby spowolnił * Po prostu użyj Google Zamówienie ## Od kogo szukam informacji zwrotnych Wiem, że jest wielu inżynierów, którzy, choć są bardzo wykwalifikowani, nigdy nie pracowali z systemami obsługującymi więcej niż kilkuset jednoczesnych użytkowników. Wnioski wyciągnięte z witryny obsługującej 30 000 jednoczesnych użytkowników bardzo różnią się od wniosków z wewnętrznej aplikacji pomocy technicznej (pracowałem na obu, btw, i nie dyskredytuję aplikacji wewnętrznych. Wymagają one tylko innego podejścia). Jeśli masz doświadczenie w podobnej sytuacji, chciałbym usłyszeć, jak podszedłeś do problemu i jakie są wady Twojego rozwiązania.


title: Alternatywne opcje formatowania ciągów w C++?

text: Patrzę na optymalizację kodu do formatowania ciągów, który jest często spotykany w naszym kodzie. Używaliśmy ostringstream i przekonwertowałem kod, aby używał sprintf (właściwie bezpieczniejszy sprintf_s Microsoftu). Zamieniłem bezpieczeństwo typów na wydajność w czasie wykonywania. Ale debugowałem wystarczająco dużo dziwnych awarii związanych ze sprintf, aby wiedzieć, że sprintf ma swoje własne poważne wady, takie jak sprawdzanie czasu kompilacji z połowu ostringstream. Ale ostringstream jest więcej niż o rząd wielkości wolniejszy od sprintf według mojej miary, a to nie jest tolerowane w tym kodzie. Nie jestem też zachwycony czytelnością formatowania ciągu strumieniowego w C++, ale może to być całkowicie subiektywne. Tak więc niestety podczas formatowania napisów w C++ mam kilka "standardowych" opcji, które są nieoptymalne: 1. sprintf -- szybki, ale nie bezpieczny typu. Może mieć podstępne błędy, gdy nie zostanie użyty niewłaściwy ciąg formatu. 2. ostringstream - powolny, ale bezpieczny dla typu. IMO Brzydki, zbyt gadatliwy i trudny do odczytania. 3. boost::format -- trochę bardziej czytelny niż IMO ostringstream, ale w moich testach wydajności wydaje się być nawet _wolniejszy_ niż ostringstream, więc to jest niedostępne. Podsumowując, nie jestem zadowolony z opcji „standardowych”. Chciałbym coś, co poważnie traktuje zarówno wydajność, jak i bezpieczeństwo typu. Jakie inne opcje formatowania ciągów są dostępne dla C++?


title: Kariera Przejście od testowania do rozwoju

text: Mam kilka pytań dotyczących przejścia z testowania na programowanie. 1) Czy uważasz, że doświadczenie QA nie zostanie policzone? 2) Czy przejście z mnc do startupu w celu rozwoju umiejętności wpłynie na CV? 3) Czy projekt o małym profilu wygląda źle na CV, po 2 latach doświadczenia. 4) Jak menedżer wygląda w profilu kandydata? Poprzednia firma? poprzedni projekt? lub umiejętności, które rozwinął? 5) Czy liczy się tworzenie oprogramowania w firmie innej niż IT? Proszę o odpowiedź na swoje poglądy.


title: Jak opisywać zmiany w kodzie i autorstwo kodu?

text: W jaki sposób najlepiej opisać, kto jest autorem pliku i jakie zmiany zostały wprowadzone? Jestem wykonawcą nowego projektu, który dopiero się zaczyna, który korzysta z Subversion. Któregoś dnia zauważyłem, że członek zespołu zaktualizował skrypt napisany przez zewnętrznego konsultanta i zaktualizował nagłówek z „Napisane przez X” na „Napisane przez Y i X” (ponieważ dokonał przyzwoitej liczby aktualizacji). Nie sądziłem, że to dobry pomysł, ponieważ inni po nas mogą aktualizować ten skrypt małymi lub dużymi zmianami i byłoby niejasne, kiedy zaktualizować nagłówek „Napisane przez” (lub jak uporządkować nazwy). Przedstawiłem sposób, w jaki to zrobiłem w mojej poprzedniej firmie (z dziennikiem edycji na górze każdego pliku – który był wymuszony przez tego, kto zweryfikował zmiany, używaliśmy Clear Case, aby zmiany nie były przesyłane, dopóki nie zostaną zweryfikowane ), ale potem wspomniał, że możemy po prostu użyć polecenia „svn log”, aby zobaczyć zmiany i byłoby trudno wymusić dziennik edycji. Więc teraz nie jestem pewien, jaki jest najlepszy sposób opisywania autorstwa i zmian. Pliki mogą się całkowicie zmieniać w czasie, więc nie podoba mi się pomysł przestarzałego nagłówka „Napisane przez”. A nagłówek „Napisane przez”, który zawiera tylko długą listę osób bez kontekstu, nie wydaje się przydatny. Usuwamy nagłówek autorstwa i po prostu korzystamy z dziennika zmian subversion, ale co zrobić z nagłówkami „napisanymi przez” z kodu, który otrzymałeś (od konsultantów, starych baz kodu, pobranych z sieci itp.)? Jak radzą sobie z tym inne zespoły?


title: Jaki jest najlepszy sposób na zbudowanie aplikacji na Androida?

text: Uruchamiam nową aplikację na Androida. Jaka jest najlepsza struktura do użycia? Planuję wykonać projekt wielopakietowy w następujący sposób: 1. Pakiet główny, w tym Aktywność 2. Warstwa usług i danych 3. Pakiet Entity, w tym klasa encji. Jakakolwiek rada ?


title: Alternatywy dla porównywania danych z różnych baz danych

text: Mam dwie ogromne tabele na osobnych bazach danych. Jeden z nich zawiera informacje o wszystkich SMS-ach, które przeszły przez serwery firmy, podczas gdy drugi ma informacje o faktycznym rozliczeniu tych SMS-ów. Moim zadaniem jest porównanie próbek obu tych tabel (na przykład rekordów między 13:00 a 14:00), aby sprawdzić, czy są jakieś różnice: SMS, który został wysłany, ale nie został obciążony użytkownikiem z jakiegokolwiek powodu. Kolumny, których użyję do porównania, to numer telefonu płatnika i dokładna data wysłania SMS-a. Problem polega na tym, że daty zwykle są takie same po obu stronach, ale w wielu przypadkach różnią się o 1 lub 2 sekundy. Do tej pory mam dwie alternatywy, aby to zrobić: 1. (PL/SQL) Utwórz dwie tabele, w których będę tymczasowo przechowywać wszystkie rekordy tej 1-godzinnej próbki. Po jednym na każdy z głównych stołów. Następnie dla każdego odrębnego numeru telefonu wybierz czas każdego SMS-a wysłanego z tego telefonu z obu moich tabel tymczasowych i zacznij porównywać jeden po drugim za pomocą kursorów. W takim przypadku procedura zostałaby uruchomiona na serwerze, na którym znajduje się jedno ze źródeł, aby zawartość drugiego była wyszukiwana za pomocą dblink. 2. (sqlplus + c++) Zamiast przechowywać 1-godzinne próbki w nowych tabelach, wyślij zapytanie do pliku tekstowego. Będę miał dwa pliki tekstowe, po jednym dla każdego źródła. Następnie otwórz pierwszy plik i załaduj całą jego zawartość na hash_map (klucz-wartość) za pomocą c++, gdzie kluczem będzie numer telefonu, a wartość lista razy wysłanych SMS-ów z tego telefonu. Na koniec otwórz drugi plik, weź każdą linię (w tym formacie: numberX timeX), poszukaj wpisu numberX na hash_map (który będzie listą czasów), a następnie sprawdź, czy timeX jest na tej liście. Jeśli tak nie jest, zapisz go gdzieś, aby w końcu przechowywać go na „nieobciążonym” stole (byłby to również ostatni krok w przypadku 1) Moim głównym zmartwieniem jest wydajność. Próbki te mają około 2 miliony rekordów na każdym źródle, więc pobranie jednego rekordu z jednej strony i sprawdzenie go z drugiej nie byłoby możliwe. To jest powód, dla którego chciałem użyć hash_maps Jak myślisz, która opcja jest lepsza?


title: Jak często używasz kontenera DI w swojej aplikacji ASP.NET MVC?

text: Czytając książkę, natknąłem się na DI (dependency Injector) i późniejsze narzędzie DI Container. Wcześniej stworzyłem aplikację na podstawie samouczka na stronie asp.net, która nigdy nie korzystała z takiego narzędzia. Tak więc moje pytanie można podsumować w dwóch następujących kwestiach:- * **Jak często korzystasz z DI Containera?** * **Jakie wymagania na to skłaniają?** EDIT : Przykłady z i bez DI Containera. Napisałem kody, aby zrozumieć, które podejście jest lepsze. _**Bez** DI Container_ \-- LinqValueCalculator lc = new LinqValueCalculator(); ShoppingCart sc = nowy ShoppingCart(lc); suma dziesiętna = sc.CalculateStockValue(); Console.WriteLine("Razem: {0:c}", suma); _**With** DI Container_ \-- (Ninject jest używany w tym przykładzie) IKernel ninjectKernel = new StandardKernel(); ninjectKernel.Bind<IValueCalculator>().To<LinqValueCalculator>(); IValueCalculator calcImpl = ninjectKernel.Get<IValueCalculator>(); Koszyk Koszyk = nowy Koszyk(calcImpl); Console.WriteLine("Razem: {0:c}", cart.CalculateStockValue()); Będę szczery, czuję, że pisanie pierwszego kodu było łatwiejsze i wydawało mi się naturalne. Ale twoje poglądy są tym, co się liczy, ponieważ właśnie uczę się MVC.


title: Baza wiedzy / kwestionariusz / drzewo decyzyjne / platforma decyzyjna

text: Szukam platformy oprogramowania/struktury programistycznej, która może wykonać następujące czynności: * WEJŚCIE: użytkownik wprowadza tekst * DANE PROCESOWE/ODNIESIENIA: następnie użytkownik jest proszony o udzielenie odpowiedzi na kilka pytań dotyczących WEJŚCIA i przypisanie odpowiedzi do cały WEJŚCIE lub niektóre części WEJŚCIA * WYJŚCIE: lista odpowiedzi przypisanych do oryginalnego WEJŚCIA Niektóre wyjaśnienia: * dot.: DANE REFERENCYJNE: lista pytań powinna uwzględniać pytanie podrzędne/następujące * do: PROCES: proces odpowiadania powinien być jak najbardziej elastyczny (użytkownik powinien mieć możliwość pomijania pytań, udzielania własnych odpowiedzi itp.) * NIE ma to być narzędzie do automatycznego/uczenia maszynowego - użytkownik (człowiek) będzie klasyfikował sam WEJŚCIE na podstawie DANYCH REFERENCYJNYCH


title: Jaki jest najczęściej używany język programowania w obliczeniach o wysokiej wydajności? I dlaczego?

text: Uważam, że wiele Fortranu jest używanych w HPC, ale nie jestem pewien, czy dzieje się tak tylko ze względu na starsze przyczyny. Funkcje nowoczesnych języków programowania, takie jak zbieranie śmieci lub polimorfizm w czasie wykonywania, nie są odpowiednie dla HPC, ponieważ szybkość ma znaczenie, więc nie jesteś pewien, gdzie wkracza C#, Java lub C++. Jakieś myśli?


title: Czy te dwa scenariusze byłyby dobrymi kandydatami na bazę danych NoSQL?

text: Sprawdziłem kilka innych wątków na ten temat i poszukałem, zastanawiam się, czy ktoś może mi dać jasny kierunek, co do **_dlaczego_** powinienem rozważyć NoSQL i **_który_** jeden (ponieważ istnieje dość kilka z nich, każdy z innym przeznaczeniem) * Dlaczego NoSQL zamiast SQL? * Czy MongoDB to właściwy wybór w moim przypadku? * Czy bazy danych NoSQL zastąpią relacyjne bazy danych? Czy SQL zniknie? Podobnie jak wielu innych – zaczynałem od relacyjnych baz danych i od tamtej pory pracuję nad nimi, dlatego gdy pojawia się problem, pierwszym odruchem jest zawsze myśleć o _"Mogę tworzyć te tabele, z tymi kolumnami, z tymi kluczami obcymi"_ , itp. Moim głównym celem jest **Jak wejść w sposób myślenia „NoSQL”**? tj. odejście od skłonności do ciągłego myślenia o tabelach/kolumnach/FK (rozumiem, że są przypadki, w których RDBMS jest wciąż lepszym rozwiązaniem) Zastanawiam się nad 2 scenariuszami na przykład tylko po to, aby uzyskać bardziej konkretny kierunek **Scenariusz 1 ** Wyobraź sobie bazę danych do modelowania instrukcji budowy mebli (pomyśl o instrukcjach IKEA), w której miałbyś obiekt „meble”, który miałby listę „materiałów” i listę „instrukcji” * Meble - po prostu miałyby nazwy, które mają listę materiałów i instrukcji * Materiały - to nazwa + ilość, może nawet możemy mieć tabelę "Kategoria materiałów" * Instrukcje - byłyby po prostu uporządkowaną listą tekstów. sposób: * Utworzyć tabelę o nazwie „Meble”, „Materiał” i „Instrukcja” oraz odpowiednie kolumny * Utworzyć odpowiednie tabele JOIN według potrzeb i FK Korzystanie z tego systemu może obejmować _wyszukiwanie_ po materiałach lub może być kombinacją m materiały. A może pomyślisz o rozszerzeniu przechowywanych danych o informacje o tym, ile osób jest potrzebnych do ich zbudowania? Poziom trudności? ile czasu to zajmie? Czy coś takiego byłoby dobrym kandydatem na bazę danych NoSQL? **Scenariusz 2** Wyobraź sobie bazę danych, która modeluje bazę danych użytkownika z podstawowymi informacjami (np. imię i nazwisko, adres e-mail, numer telefonu itp.), ale chcesz też mieć możliwość dodawania dowolnych pól niestandardowych według własnego uznania. Pomyśl o różnych systemach korzystających z tej bazy danych użytkowników, każdy system będzie chciał mieć swój własny niestandardowy atrybut, który będzie dołączony do użytkownika. Moje skłonności byłyby zgodne z RDBMS: * Utwórz tabelę dla "USER" z kolumnami: ID, name, email, phone * Utwórz tabelę dla "USER_ATTRIBUTE" z kolumnami: ID, USER_ID, attr_name, attr_type, attr_value USER_ATTRIBUTE pozwoli na dostosowanie i elastyczność bez konieczności zamykania systemu, zmiany bazy danych i ponownego jej uruchamiania. Czy coś takiego byłoby dobrym kandydatem na bazę danych NoSQL?


title: Jak NAPRAWDĘ zacząć myśleć w kategoriach przedmiotów?

text: Współpracuję z zespołem programistów, którzy mają kilkuletnie doświadczenie z językami takimi jak C# i Java. Większość z nich jest na tyle młoda, że pokazano im OOP jako standardowy sposób tworzenia oprogramowania na uniwersytecie i bardzo dobrze znają takie pojęcia, jak dziedziczenie, abstrakcja, enkapsulacja i polimorfizm. Jednak wielu z nich, a ja sam muszę się zaliczyć, nadal tworzy zajęcia, które mają być używane w bardzo funkcjonalny sposób. Powstałe oprogramowanie to często kilka mniejszych klas, które poprawnie reprezentują obiekty biznesowe, które przechodzą przez większe klasy, które dostarczają jedynie sposobów modyfikowania i używania tych obiektów (funkcji). Efektem takiego zachowania są zwykle duże, złożone, trudne do utrzymania klasy o nazwie Manager. Widzę dwa teoretyczne powody, dla których ludzie mogą pisać tego typu kod: 1. Łatwo zacząć myśleć o wszystkim w kategoriach bazy danych 2. W głębi duszy, dla mnie, komputer obsługujący żądanie sieciowe jest bardziej funkcjonalną operacją niż operacja zorientowana obiektowo, gdy myślisz o obsłudze żądań, wątkach, procesach, rdzeniach procesora i operacjach procesora ... Chcę kodu źródłowego, który jest łatwy do odczytania i łatwy do modyfikacji. Widziałem doskonałe przykłady kodu OO, które spełniają te cele. Jak mogę zacząć pisać taki kod? Jak mogę naprawdę zacząć myśleć w sposób obiektowy? Jak mogę podzielić się taką mentalnością z moimi kolegami?


title: Czy funkcja puts ruby jest metodą obiektu?

text: Próbuję zrozumieć, jak funkcja `puts` pasuje do postawy Rubiego „Wszystko jest obiektem”. Czy `puts` jest metodą ukrytej klasy/obiektu? A może jest to metoda swobodnie pływająca, bez ukrytego obiektu?


title: Usługa sieciowa - SOAP

text: Moje doświadczenie z usługami sieciowymi jest niewielkie i staram się to trochę lepiej zrozumieć. Zrobiłem m.in. serwis internetowy w Visual Studio. Aby z niego korzystać, dodaję odwołanie do usługi sieciowej w moich projektach, a to tworzy proxy, a użycie jest dość proste. Czy to używa SOAP? Pytam o to, ponieważ będę teraz miał do czynienia z usługą sieciową, z którą muszę się komunikować za pomocą protokołu SOAP z załącznikami i próbuję zrozumieć kryjącą się za tym koncepcję i różnicę w stosunku do tego, co zrobiłem do tej pory. Czy serwer proxy nadal będzie działał, czy muszę ręcznie utworzyć plik XML i opublikować go w usłudze sieci Web? Te koncepcje wciąż są niejasne, więc każda pomoc jest doceniana. EDIT: Nie rozwijam usługi, po prostu będę z niej korzystał.


title: Czy mogę używać całego oprogramowania JetBrains po zakupie?

text: Zastanawiam się więc nad zakupem wersji Ruby IDEA, którą oferuje JEtBrain. Jeśli kupię na to osobistą licencję, czy pozwoli mi to również korzystać z licencji na IntelliJ, aby móc tworzyć aplikacje Java. A może do każdego z nich trzeba dokupić osobny klucz? Nie udało mi się znaleźć tego rodzaju informacji na ich stronie głównej, więc zwróciłem się tutaj z moim pytaniem.


title: Dlaczego system plików jest preferowany dla dzienników zamiast RDBMS?

text: Pytanie powinno być jasne z tytułu. Na przykład Apache zapisuje swoje dzienniki dostępu i błędów w plikach zamiast w RDBMS, bez względu na to, jak dużą lub małą skalę jest używany. W przypadku RDMS wystarczy napisać zapytania SQL, a to zadziała, podczas gdy dla plików musimy wybrać konkretny format, a następnie napisać regex lub możemy być parserami, aby nimi manipulować. A te mogą nawet zawieść w szczególnych okolicznościach, jeśli nie dołożono wielkiej staranności. Jednak wydaje się, że wszyscy wolą system plików do przechowywania logów. Nie jestem uprzedzony do żadnej z tych metod, ale chciałbym wiedzieć, dlaczego jest to praktykowane w ten sposób. Czy to szybkość, łatwość konserwacji, czy coś innego?


title: Zespół scrumowy do małych projektów

text: Zastanawiałem się, czy nie byłoby mądrze utworzyć jeden zespół scrumowy dla kilku małych projektów. Zdaję sobie sprawę, że bardzo trudno byłoby określić jeden cel sprintu, jeśli zespół pracuje nad kilkoma różnymi projektami. Z drugiej strony: Umieszczenie projektów, które są zwykle przypisane do pojedynczych programistów we wspólnym backlogu zespołu (IMHO), skorzystałoby na synergii zespołu scrumowego. Należy wspomnieć, że projekty nie różnią się tak bardzo od strony technicznej. Pracuję w dziale doradztwa, gdzie realizujemy projekty o bardzo różnej wielkości. Od jakiegoś czasu pracuję nad większym projektem z wykorzystaniem Scrum. Ostatnio zespół został rozbity, a ja mam tylko jednoosobowe zadania. Pomysł przyszedł mi do głowy, ponieważ byłem coraz bardziej sfrustrowany brakiem moich starych kolegów z drużyny do sparingów, kontroli jakości i dobrego, staromodnego ducha zespołu. Zdałem sobie sprawę, że około połowa mojego działu pracuje nad zleceniami jednoosobowymi. Wtedy przyszło mi do głowy, że może być wyjście z samotności: Scrum małych projektów. Chętnie poznam Twoją opinię w tej sprawie: Co sądzisz o tym pomyśle? Jakie są pułapki? Jakie są ograniczenia? Jak przekonać kierownictwo, że to świetny pomysł?


title: Nauka zasad gry w szachy

text: Podobne pytanie dotyczy tego, czy komputer może nauczyć się optymalnie grać w szachy, analizując tysiące partii. Jeśli maszyna może patrzeć na stan szachownicy dla kilku partii szachów (lub kilku partii w warcaby) na początku i po każdym ruchu, czy można ją zaprogramować tak, aby uczyła się zasad gry? Jeśli może, to w jakim stopniu (np. czy będzie w stanie rozliczyć roszadę lub awans) to zadziała? Jakie algorytmy uczenia maszynowego umożliwiłyby to?


title: Jakiego języka użyć do prototypowania i tworzenia szybkich skryptów?

text: Obecnie używam Pythona do moich szybkich skryptów i prototypów (np. algorytmów, mój pseudokod jest również bardzo podobny do Pythona). Inne języki, które znam, to Java, C, x86 Assembly and Scheme, a Python jest moim zdaniem najlepszy do tego spośród nich. Perl zyskuje za to wiele reputacji, a słyszałem, że Ruby też nie jest zły, a społeczność Pythona również za to chwali Pythona. Jaki język (może być inny niż te 3) uważasz za najlepszy język programowania do: * Tworzenia szybkich prototypów aplikacji lub algorytmów * Tworzenia prostych skryptów dla małych, powtarzalnych zadań Ważne funkcje dla takich języków to: * Mały kod wzorcowy, niezbyt gadatliwy * (Bardzo) wysokopoziomowy * Zinterpretowany * Dobra i obszerna standardowa biblioteka


title: Modelowanie zasobu, który może nie być częścią zasobu nadrzędnego

text: Projektuję API i mam kilka problemów z niektórymi częściami modelowania zasobów. Mam pojęcie o „SurveyItem”, które jako zbiorcze tworzą „Survey”: Punkt końcowy zasobów ankiety: http://api.somewhere.com/survey Dostęp do elementów ankiety http://api.somewhere.com/survey/1 /surveyitems Dość podstawowe i nie przejmuję się zbytnio powyższym. „Elementy ankiety” nie mogą istnieć poza kontekstem ankiety, stąd hierarchia. Tam, gdzie trochę się zmagam, jest następny poziom w dół. `SurveyItem` niekoniecznie jest jedną rzeczą (znoś się ze mną), ponieważ opiera się na zaimplementowanym interfejsie, ale możesz mieć coś w rodzaju „Prosta ankieta”, która umożliwia robienie notatek, „Ankieta wideo” pozwoli ci zrobić ankieta za pośrednictwem wideo itp., więc wszystkie są częścią podstawowej implementacji, ale potencjalnie mogą mieć różne zasoby podrzędne. Przykładowe punkty końcowe ankiety typu obraz i notatka http://api.somewhere.com/survey/1/surveyitems/1/images http://api.somewhere.com/survey/1/surveyitems/1/notes Ankieta wideo http:// /api.somewhere.com/survey/1/surveyitems/2/videos http://api.somewhere.com/survey/1/surveyitems/2/notes Jak widać powyżej, `SurveyItem` może mieć różne podpunkty końcowe w zależności od na typie SurveyItem to jest. Myślałem o modelowaniu tego w sposób opisany powyżej, ale używając podejścia HATEOAS polegającego na odpowiadaniu za pomocą zbioru adresów URL dostępnych podpunktów końcowych dla każdego indywidualnego typu ankiety, aby klienci mogli je wykryć. Czy to rozsądna rzecz, czy też istnieją lepsze podejścia do radzenia sobie z takimi sprawami?


title: Konwencje wartości zwracanych przez Erlang

text: Czy funkcje zwracające krotki powinny zawsze zwracać krotki? Na przykład mam funkcję `is_user_name_allowed`, która zwraca krotkę w tej formie, jeśli nazwa użytkownika nie jest dozwolona: `{false, ["Przyczyna 1","Przyczyna 2"]}` Jeśli chcę zwrócić prawdę, czy istnieje jakaś konwencja/korzyść ze zwracania krotki w przeciwieństwie do zwracania „prawda”? („{prawda}” a „prawda”)


title: Oszacowanie miejsca jest wymagane do przechowywania 275305224 z 5x5 MagicSquares?

text: Oto kilka przykładów magicznych kwadratów 5x5 znalezionych przez Magic Square Generator autorstwa Marcela Roosa: Magiczne kwadraty 5x5 Suma musi wynosić: 65 Rozwiązanie: 1 1 2 13 24 25 3 23 17 6 16 20 21 11 8 5 22 4 14 18 7 19 15 10 9 12 Rozwiązanie: 2 1 2 13 24 25 3 23 16 8 15 21 19 10 6 9 22 4 14 20 5 18 17 12 7 11 Rozwiązanie: 3 1 2 13 24 25 3 23 19 4 16 21 15 10 12 7 22 8 9 20 6 18 17 14 5 11 ... Liczba wszystkich możliwych rozwiązań to 275305224. Ponieważ obliczenie wszystkich rozwiązań zajmuje bardzo dużo czasu, chciałbym, aby jedna osoba z szybkim komputerem znalazła wszystkie rozwiązania (w przez długi czas), a następnie udostępniać je innym osobom w sieci. Jaki byłby skuteczny sposób przechowywania tych rozwiązań przy użyciu pewnego rodzaju kompresji? **(prosta logiczna sztuczka)zwracając uwagę na zasadę, że suma we wszystkich wierszach i kolumnach oraz przekątnej jest równa 65** **musimy tylko znać wartość tylko dla 14 komórek z 25 komórek, jak pokazano poniżej, to powoduje 14/25** przestrzeń pamięci prawie zmniejszona do połowy legenda: **+** oznacza zapisaną wartość, a **x** oznacza pominiętą wartość ! + + + + x + + + + x + + + + x x + x + x x x x x x


title: Ograniczenia wzorca mapy tożsamości

text: Po zapytaniu o implementację wzorca Identity Map w Ruby ze względu na potencjalny wyciek pamięci w długo działających aplikacjach serwerowych, zastanawiam się nad moją początkową koncepcją tego wzorca. Początkowo myślałem, że jest przeznaczony do buforowania wyników bazy danych ORAZ zagwarantowania, że **tylko jedna instancja tego samego obiektu istnieje w pamięci**. Czy to ostatnie założenie jest słuszne? W ramach DDD istnieje tendencja, w której równość encji opiera się na posiadaniu tego samego **id**, a nie tego samego adresu pamięci, co idealnie pasuje do problemu z pamięcią, jednak po użyciu wielu ORM-ów zawsze miałem „poczucie” posiadania * *unikalna instancja** moich obiektów. Czy to założenie jest _niebezpiecznym pomysłem_? Czy powinienem się martwić, że moje obiekty mają wiele instancji? A może nawet brak synchronizacji z bazą danych?


title: Jak wytłumaczysz innym kwestię Separacji obaw?

text: Gdybyś miał kolegę, który nie rozumiał korzyści płynących z separacji obaw lub nie rozumiał go wystarczająco, aby konsekwentnie stosować go w codziennej pracy, jak byś mu to wytłumaczył?


title: Jak poprawić swoje umiejętności kodowania?

text: Oto trochę informacji o mnie, zanim zacznę od pytania. Jestem studentem informatyki, Java jest moim podstawowym językiem programowania. Podstawowym problemem na mojej Uczelni są standardy nauczania. Nikt nie przejmuje się nauczaniem uczniów o kodowaniu, a nie tylko wiedzy teoretycznej. W efekcie większość moich kolegów ze studiów w ogóle nie rozumie programowania. Nawet ja nie byłem w stanie wyjść z tradycyjnego środowiska programistycznego, co w pewnym stopniu ogranicza moje kodowanie. Jakie są możliwe sposoby, dzięki którym mogę rozwijać i poszerzać swoje umiejętności programowania/kodowania. Czy możesz również zasugerować źródła tego samego? **Edytowane** : Źródła sugerujące rozwój umiejętności kodowania.


> **Możliwy duplikat:** > Jak poprawić swoje umiejętności kodowania? Zapytano mnie o to ( _Jaki jest najlepszy sposób, aby pozostać w czołówce inżynierii oprogramowania?_ ) i naprawdę niepokoiło mnie, że nie mam dobrej odpowiedzi. Tak naprawdę to pytanie składa się z dwóch części: 1. Gdzie jest dobre miejsce (strony internetowe - czasopisma), aby dowiedzieć się o nowych technologiach, frameworkach, zasadach projektowania itp.? 2. Jak mogę się przekonać, które nowe technologie zostaną przyjęte przez „przemysł”? Zdaję sobie sprawę, że drugie będzie trudniejsze niż pierwsze, ponieważ nikt nie ma kryształowej kuli, ale każda rada byłaby mile widziana.


title: Ciągły rozwój zawodowy – najlepsze podejście

text: Z mojego doświadczenia w obecnym środowisku pracy wynika, że rozwój zawodowy zdecydowanie leży w rękach jednostki. Jak widzę, istnieje kilka dróg do tego samego celu w oparciu o koszt, czas i dostępność 1. Zewnętrzne szkolenia Offsite Online 2. Dostawcy szkoleń (itunes U, Pluralsight itp.) 3. Książki 4. Grupy specjalistów/użytkowników 5. Specjalistyczne strony internetowe (Channel9, stackoverflow,dnrtv,codeplex itp.) Jakie podejście (mieszanka) uważasz za najlepsze do ciągłego uczenia się i utrzymania profesjonalnego standardu pracy?


title: jak napisać dobrą logikę programowania?

text: niedawno dostałem pracę jako programista java, a teraz mam też przydzielony projekt. Chcę wiedzieć, co to jest dobra logika? kiedy sprawdzam kod, szef zespołu mówi, że to dobry kod. Ale jeśli chodzi o mojego kierownika projektu, mówi, że to zły kod. I zmienia mój kod, po jego zmianach, jeśli widzę jego kod, jest naprawdę bardzo dobry, a nawet prosty. czy możesz mi powiedzieć, jak opracować dobry program, dobrą logikę? jaki jest najlepszy sposób na uporządkowanie problemu pod względem kodu?


title: Testy umiejętności logicznego rozumowania

text: Poszukuję pracy, więc postanowiłem podszkolić trochę swoich umiejętności. Pracuję nad implementacją rozwiązań niektórych problemów "Project Euler", ale chciałbym popracować nad rzeczami, które nie są specyficzne dla programowania. Czy ktoś ma dobre zasoby z testami, które służą do testowania umiejętności logicznego rozumowania, kreatywności i tego typu rzeczy? Wiem, że niektórzy kwestionują ich wartość jako predyktora zdolności programistów, ale są działy HR, które używają tego rodzaju testów, więc chcę się trochę przygotować. Dziękuję.


title: Jak zostać lepszym programistą jako młodszy programista

text: Jestem młodszym programistą w RPA. Właśnie ukończyłem college w zeszłym roku. Moi obecni pracodawcy zatrudnili mnie jako programistę, ale nie dają mi nic do rozwoju, a pracuję tu już 8 miesięcy. Jak zostać lepszym programistą? Jak się rozwijać? Trochę się rozwijam w domu, ale jak mogę uzyskać większą ekspozycję? Szukałem innej pracy, ale nie o to chodzi. Nie chcę się poddawać, chcę zostać lepszym programistą. Jak mogę poprawić swoje umiejętności?


title: Zwiększenie zaufania do osobistej wiedzy na temat kodowania

text: > **Możliwy duplikat:** > Ukończyłem studia na kierunku informatyka, ale nie czuję, że umiem > jak programować Jestem programistą .net od około 3 lat w firmie nie będącej oprogramowaniem, i Chcę spróbować wdrożyć testy jednostkowe do naszych projektów oprogramowania. Czytam blogi o podstawach testów jednostkowych i obecnie czytam The Art of Unit Testing. Czuję, że dość dobrze rozumiem, jak można skonfigurować i wdrożyć testy jednostkowe, ale jestem ostrożny, jeśli chodzi o ich implementację, ponieważ jeśli coś zostałoby źle skonfigurowane, nikt by nie zauważył / mój zespół pisałby złe testy, myśląc, że są dobre testy. Czuję, że cały mój podstawowy problem polega na strachu przed porażką, wdrażaniem testów jednostkowych lub przekonywaniem zespołu do rozpoczęcia używania / pisania testów jednostkowych. W jaki sposób zwiększyłeś/zwiększyłeś zaufanie do własnej wiedzy na temat kodowania?


title: Jak celowo praktykować inżynierię oprogramowania?

text: Właśnie skończyłem czytać ten ostatni artykuł. To bardzo ciekawa lektura i zawiera kilka świetnych punktów. Punktem, który szczególnie mnie rzucił, było to: > Różnica polegała na tym, jak spędzili ten [równy] czas. Elitarni gracze > spędzali prawie trzy razy więcej godzin niż przeciętni gracze na > świadomej praktyce - niewygodnej, metodycznej pracy nad rozciąganiem swoich > umiejętności. Ten artykuł (jeśli nie chcesz go czytać) dotyczy skrzypków. Oczywiście, będąc inżynierem oprogramowania, mój umysł zwrócił się ku umiejętnościom oprogramowania. To prawda, że istnieje kilka bardzo naturalnie utalentowanych osób, ale raz za razem to ci ludzie, którzy rozwijają swoje umiejętności poprzez celową praktykę, naprawdę stają się wyjątkowe w swoim rzemiośle. Moje pytanie brzmi - jak ćwiczyć "skale" inżynierii oprogramowania i informatyki? Kiedy ćwiczę na pianinie, spędzam więcej czasu na skalach, a mniej na zabawnej piosence. Jak mogę zrobić to samo przy tworzeniu oprogramowania? Na początku odpowiedzi, nie uważam, że „praca nad projektem open source” i podobne odpowiedzi są naprawdę właściwe. Jasne... że _możesz_ poprawić twoje umiejętności, ale równie łatwo możesz utknąć, skupiając się na czymś, co nie jest ważne dla twojego rzemiosła jako całości. Może stać się ekwiwalentem nauki "Twinkle Twinkle Little Star" i nigdy nie być w stanie grać Chopina. Więc ponownie pytam - jak sugerowałbyś, aby ktoś celowo ćwiczył inżynierię oprogramowania?


title: Co robisz, aby poprawić swoje umiejętności programowania logicznego?

text: Czy myślisz, że tylko praktyka programowania pomoże ci poprawić twoje umiejętności programowania logicznego, czy też trenujesz swój mózg grami łamigłówkami, próbując wyobrazić sobie, jak działa wszechświat, grając na instrumentach i tak dalej? Poświęcając więcej czasu na programowanie, czy szybciej zdobędziesz umiejętności programowania logicznego?


title: Kończę dyplom z informatyki, ale nie czuję, że umiem programować

text: Kończę dyplom z informatyki, ale widzę strony takie jak Stack Overflow i wyszukiwarki takie jak Google i nie wiem, od czego zacząłbym pisać coś takiego. Podczas jednego lata miałem okazję pracować jako programista iPhone'a, ale czułem, że głównie sklejam biblioteki, które napisali inni ludzie, nie rozumiejąc mechaniki zachodzącej pod maską. Staram się poszerzyć swoją wiedzę, studiując algorytmy, ale to długi i bolesny proces. Algorytmy są dla mnie trudne i w tempie, w jakim się uczę, minie dekada, zanim opanuję materiał z książki. Biorąc pod uwagę moją obecną sytuację, spędziłem miesiąc na szukaniu pracy, ale moje umiejętności (C, Python, Objective-C) są stosunkowo płytkie i nie są tak pożądane na lokalnym rynku, gdzie C#, Java i tworzenie stron internetowych są znacznie wyższe cieszący się popytem. Nie oznacza to, że możliwości C i Pythona nie istnieją, ale zwykle wymagają one ponad 3 lat doświadczenia, którego nie mam. Mój GPA jest OK (3.0), ale nie jest wystarczająco wysoki, aby aplikować do dużych firm, takich jak IBM, lub wrócić na studia magisterskie. Zasadniczo kończę studia na kierunku informatyka, ale nie czuję, że nauczyłem się programować. Myślałem, że dołączenie do firmy i programowanie na pełen etat da mi szansę na rozwój swoich umiejętności i uczenie się od bardziej doświadczonych ode mnie osób, ale nie mogę znaleźć pracy i zaczynam być naprawdę sfrustrowany. Mam zamiar zarzucić swoją sieć szerzej i wyjrzeć poza miasto, w którym dorastałem, ale co próbowali zrobić inni ludzie w podobnej sytuacji? Ciężko pracowałem, ale nie mam pewności siebie, żeby wyjść sam i napisać własną aplikację. (Oznacza to, że zostań niezależnym programistą na rynku aplikacji na iPhone'a.) Jeśli nic się nie pojawi, będę musiał rozważyć uaktualnienie i nauczenie się bardziej popularnych umiejętności lub spróbować czegoś marginalnie związanego, takiego jak IT, ale biorąc pod uwagę cały wysiłek, jaki w to włożyłem, czuję jak wykręcanie się. EDIT: Dziękuję za wszystkie rady. Myślę, że byłem wcześniakiem z powodu nierealistycznych oczekiwań, ale komentarze dały mi dawkę rzeczywistości. Wytrwam i będę dalej kodować. Mam na myśli projekt, choć znacznie przekraczający moje obecne możliwości, będzie on dla mnie wyzwaniem do doskonalenia rzemiosła i udowodnienia swojej wartości sobie (i potencjalnym pracodawcom). Gdybym wiedział, że nastąpiło przepełnienie kariery, zamieściłbym tam zamiast tego.


title: Jakie są sposoby na rozpoczęcie tworzenia rzeczywistych/rzeczywistych programów przy użyciu Java/C++, aby doskonalić moje umiejętności programistyczne?

text: > **Możliwy duplikat:** > Jak poprawić swoje umiejętności kodowania? > Jak staję się lepszym programistą jako młodszy programista Programowanie, którego uczymy się na uniwersytecie, nie jest tak obszerne, jakby to były naprawdę małe ćwiczenia budujące naszą logikę, ale wszyscy wiedzą, że nie będzie to scenariusz, w którym dostanę na rynku jako profesjonalny programista, naprawdę chcę tworzyć prawdziwe programy, które rzeczywiście wywrą pewien wpływ i będą przydatne. Powiedz mi w świetle swojego doświadczenia, jak mam zacząć tworzyć te programy i szlifować siebie jako profesjonalny programista, jeśli są jakieś dostępne źródła, to uprzejmie mi je poleć.


title: Poprawa logiki/kreatywności jako programista

text: Obecnie pracuję jako programista i radzę sobie dobrze, ale czuję, że czegoś brakuje w moim zestawie umiejętności. Patrząc na pytania i procesy rozmów kwalifikacyjnych w niektórych dużych firmach technologicznych, zdecydowanie kładzie się nacisk na rozwiązywanie problemów i kreatywność podczas rozwiązywania problemów z oprogramowaniem. Niektórych przykładów nie miałbym żadnych szans na rozwiązanie. Jak można poprawić/nauczyć się tych umiejętności? A może jest to po prostu naturalna rzecz, której nie można się nauczyć?


title: Umiejętności myślenia, aby być dobrym programistą

text: Programuję od 15 lat z dyplomem non-CS. Głównym powodem, dla którego zacząłem programować, było to, że lubiłem uczyć się nowych rzeczy i stosować je w swojej pracy. Udało mi się znaleźć i naprawić błędy programistyczne i ich przyczyny szybciej niż inni. Ale nigdy nie uważam się za guru ani eksperta, może z powodu mojej specjalizacji niebędącej CS. A kiedy zobaczyłem świetnych programistów, zauważyłem, że są bardzo dobrzy, oczywiście znacznie lepsi ode mnie w rozwiązywaniu problemów. Jedną z umiejętności, którą uznałem za dobrą w połowie mojej kariery, jest myślenie o wymaganiach i zadaniach w odwrotnej kolejności i w sposób abstrakcyjny. W ten sposób widzę, co naprawdę jest ode mnie potrzebne, bez szczegółów i mogę szybko znaleźć części rozwiązania, które już istnieją. Zastanawiam się więc, czy istnieją inne umiejętności myślenia, aby być dobrym programistą. Śledziłem poniższe pytania i odpowiedzi i przeczytałem kilka polecanych tam książek. Ale nie mogłem znaleźć dobrych metod, które można bezpośrednio zastosować w mojej pracy programistycznej. Jakie książki nieprogramistyczne powinien przeczytać programista, aby rozwinąć umiejętności programowania/myślenia? Umiejętności i nawyki, które należy rozwijać, aby być dobrym w programowaniu (jestem nowicjuszem)