Podoba mi się, jak „Wprowadzenie do algorytmów” Cormena i in. przekazuje wiedzę. Jednym z powodów jest to, że wszystko ma związek z problemami programistycznymi, a książka nie jest zaimplementowana w żadnym konkretnym języku programowania. Ta niezależność językowa zapewnia ogólne skupienie się na pomysłach.
Więc moje pytanie brzmi, jak mówi tytuł. Czy każdy możliwy do rozwiązania problem programistyczny można rozwiązać, myśląc w ten algorytmiczny sposób? Bez względu na język, dziedzinę itp.? Jeśli tak, proszę podać argumenty, w przeciwnym razie podać argumenty!
Nie wdrożyłem wielu złożonych programów z graficznym interfejsem użytkownika, AI, grafiką itp. Ale czy tego rodzaju problemy są również kwestią wymyślenia dobrych algorytmów?
algorithms
Wittgenstein
źródło
źródło
Odpowiedzi:
To zależy od tego, jak zdefiniujesz „Problem z programowaniem”.
W rzeczywistych projektach odpowiedź jest zdecydowanie NIE. Większość problemów to nawet nie problemy techniczne, ale problemy z komunikacją, niejasne wymagania itp.
Następnie masz całe przedmioty klas problemów, które nie wymagają prawie żadnych algorytmów. Na przykład GUI są często łatwe do „programowania”, ale faktycznym problemem jest dobry projekt (z punktu widzenia użyteczności, nie tylko wyglądu).
Istnieją jednak pola, w których problemy są z natury bardziej algorytmiczne. Na przykład AI jest głównym przedmiotem, w którym algorytmy są rdzeniem. Grafika może wymagać intensywnego algorytmu, ale zależy to od tego, co dokładnie oznacza „Programowanie grafiki”.
Ogólnie, jeśli problem, który rozwiązujesz programowo, jest odpowiedni dla reprezentacji matematycznej, to wchodzisz w obszar algorytmu. Oczywiście jest to tylko przybliżony wskaźnik, ponieważ możesz tworzyć modele matematyczne dla prawie wszystkiego. Ale w przypadku większości rzeczy zwykle nie rozważałbyś tego.
Ostatni przykład: jeśli problemem jest utworzenie interfejsu GUI, który umożliwia wprowadzanie danych dla obiektów biznesowych, nie zastanawiałbyś się zbyt wiele nad sformułowaniami matematycznymi. Jeśli jednak problemem jest utworzenie GUI, który dynamicznie się zmienia i przenosi elementy na podstawie pewnej wartości ważności, istnieje większe prawdopodobieństwo, że skończy się na modelu matematycznym i implementacji algorytmicznej.
źródło
i++
jako naszego nowego pana… algorytmu… eerm….Co rozumiesz przez programowanie problemu?
Według Wikipedii:
co oznacza, że programowanie jest z natury większe niż tłumaczenie algorytmów przez kod.
Aby dać przykład, problem programistyczny, który mam teraz, polega na tym, że muszę poradzić sobie ze starszym kodem źródłowym spaghetti, dodając testy jednostkowe, a następnie refaktoryzując je . Polega także na dodawaniu komentarzy w odpowiednich miejscach, znormalizowaniu wielkich liter w nazwach itp. Nie ma nic wspólnego z algorytmami.
W ten sam sposób wiele zadań programistów nie ma związku z algorytmami. Przykład: internacjonalizacja. W ten sam sposób wiele aplikacji (na przykład CRUD) nie używa algorytmów zbyt często w kodzie źródłowym (nie mówiąc o podstawowym kodzie frameworka).
Teraz, jeśli zakładasz, że w „problemie programistycznym”, „programowanie” jest synonimem tłumaczenia algorytmów przez kod, to tak, logicznie każdy problem byłby problemem algorytmicznym:
A × n = B × n
jeśliA = B
.źródło
Myślę, że odpowiedź jest zdecydowanie nie . Algorytmy to tylko elementy składowe o wiele większego zestawu umiejętności.
Mam dyplom z CS, specjalizujący się w AI
Tam podstawowym problemem, przynajmniej tak, jak to widziałem, było znalezienie dobrych reprezentacji dla informacji. Reprezentacje te powinny próbować dobrze pasować do struktur wiedzy znajdujących się w głowach ludzi i powinny ułatwiać dokonywane na nich manipulacje i zmiany.
Jeśli chodzi o codzienne programowanie, oznacza to, że podstawowym problemem jest określenie właściwego języka specyficznego dla domeny (DSL) dla danej sytuacji. Istnieje wiele sposobów tworzenia list DSL. Zwykłe programowanie, w którym definiowane są klasy, zmienne i metody, w rzeczywistości tworzy DSL, ponieważ pozwala ci mówić rzeczy (mapować struktury mentalne na kod), których nie można by powiedzieć bez nich.
Algorytmy są również ważne, ale są tylko częścią historii.
źródło
Przypuszczam, że można powiedzieć, że wszystkie programy komputerowe są algorytmami, ponieważ przepisuje się sekwencję instrukcji, aby osiągnąć pożądany rezultat. Jednak niektóre z najtrudniejszych problemów nie polegają na komunikowaniu programu na komputerze, lecz na przekazywaniu programu ludziom, którzy będą testować i modyfikować oprogramowanie.
Innymi słowy, komputery nie dbają o to, czy Twój kod jest całkowicie niezrozumiały dla ludzi. Tak czy inaczej, będą dobrze działać. Wyzwanie polega na tym, aby kod był wystarczająco jasny, aby wszelkie błędy wyróżniały się jak obolały kciuk.
Co ciekawe, techniczne rzeczy, których nauczyłem się na studiach na temat algorytmów, od dawna przyćmiewają tego, czego nauczyłem się od tamtego czasu. W tym momencie, jeśli chciałbym uzyskać stopień naukowy trzeciego stopnia, który pomógłby mi w mojej pracy, byłby to kompozycja angielska.
źródło
Większość problemów programistycznych to w rzeczywistości problemy administracyjne z systemem.
To trochę nieporadna odpowiedź, ale stwierdziłem, że jest to prawda częściej, niż można by się spodziewać. Nie wiem, ile razy napotkałem awarie, ponieważ DNS był źle skonfigurowany na maszynie testowej, nadal działa przestarzały proces, który blokuje procesor / pamięć / porty, program działa z niewłaściwym identyfikatorem użytkownika, a zatem ma niewłaściwy uprawnienia, dysk został niepoprawnie podzielony na partycje i zabrakło miejsca, zainstalowano niewłaściwą wersję pliku konfiguracyjnego itp.
Prawidłowe działanie algorytmów to zwykle tylko niewielka część problemu. Resztą problemu jest uruchomienie programu do rozwiązywania rzeczywistych problemów w prawdziwym świecie.
źródło
Sądzę, że tak, wszystkie problemy programistyczne można rozwiązać przez algorytmiczne myślenie. W końcu algorytm to tylko zestaw instrukcji, które mówią komputerowi, co ma robić.
Biorąc niektóre z powyższych przykładów
Jeśli chodzi o programowanie, a nawet projektowanie, które znają wzorce / reguły, które prowadzą do skutecznych projektów GUI, które są przyjazne dla użytkownika i wydajne. Reguły te można zredukować do algorytmu, którego przestrzeganie powinno pomóc w tworzeniu przyjaznego dla użytkownika interfejsu graficznego. W rzeczywistości faktyczne kroki umieszczania elementów sterujących w interfejsie GUI można również zredukować do algorytmu
Ale sposób podejścia do dodawania testów jednostkowych można opisać algorytmem takim jak
Problem z większością odpowiedzi Tak jest taki, że ludzie myślą o algorytmach w kategoriach QuickSort, Sortowanie bąbelkowe zamiast zestawu instrukcji, które redukują pełny, niejasny opis problemu do zestawu jasno zdefiniowanych logiki / reguł.
źródło