Czy nauka o informatyce nie żyje? [Zamknięte]


18

Pytanie: Czy nauka i sztuka CS są martwe? Rozumiem przez to, że rzeczywiste wymagania dotyczące myślenia, planowania i skutecznego rozwiązywania problemów wydają się obecnie odchodzić od CS. Wydaje się, że dziedzina ta obniża barierę wejścia, aby więcej osób mogło „programować” bez konieczności uczenia się, jak naprawdę programować.

Tło: Jestem absolwentem studiów licencjackich z informatyki. Pracuję na pozycji wyjściowej w przyzwoitej firmie w dziale IT. W swojej pracy głównie używam .NET i innych technologii Microsoft, ale wcześniej robiłem rzeczy związane z Javą poprzez staże i tym podobne. Osobiście jestem programistą C ++ dla moich własnych projektów dla zabawy.

W głębi: Dzięki pracy, którą wykonuję, wydaje mi się, że intensywne dyscypliny prawdziwej nauki nie istnieją już w CS. W przeszłości programiści musieli efektywnie rozwiązywać problemy, aby systemy były niezawodne i szybkie. Ale teraz, dzięki dominującym technologiom, takim jak .NET, Java i języki skryptowe, wydaje się, że wydajność i niezawodność zostały wymienione na łatwość rozwoju.

Większość współpracowników, z którymi pracuję, nie ma nawet dyplomu z informatyki. Większość ukończyła studia z inżynierii elektrycznej, kilka z inżynierii oprogramowania, nawet niektórzy ze szkół technicznych bez czteroletniego programu. Jednak radzą sobie dobrze bez wiedzy technicznej o CS, bez studiowania teorii i algorytmów, bez względu na tworzenie eleganckiego rozwiązania (po prostu wybierają najłatwiejsze, najtańsze rozwiązanie).

Firma namawia nas do korzystania z technologii Microsoft, które usuwają całą prawdziwą myśl i zastępują ją bibliotekami i narzędziami, które mogą automatycznie budować projekt za Ciebie o połowę krócej. Nie nienawidzę języków, rozumiem, że służą one celowi i robią to dobrze, ale kiedy Twoi pracownicy nie wiedzą, jak działa tablica skrótów, używają niewłaściwych metod sortowania lub uruchamiają polecenia SQL, które są okropnie nieefektywne (ale wykonują pracę w odpowiednim czasie), wydaje się, że wkłada się więcej wysiłku w opracowywanie technologii, które kodują nowych „programistów”, a nie uczą ludzi, jak robić dobrze.

Interesuje mnie tworzenie wydajnych i, moim zdaniem, pięknych programów. Jeśli jest na to lepszy sposób, wolę wrócić i przebudować go, niż pozwolić, by się ześlizgnął. Ale w świecie korporacyjnym zmuszają mnie do szybkiego wykonywania zadań, a nie do elegancji. I to mnie naprawdę wkurza.

Czy nie mogę się doczekać reszty mojego życia? Czy są jeszcze miejsca dla ludzi, którzy lubią naukę i sztukę CS, a nie tylko wynagrodzenie?

I z tej samej notatki, oto dobra lektura, jeśli nie widziałeś jej przed The Perils Of Java Schools


2
Dwie rzeczy - 1. Rozwój nie musi być trudny. 2. Dobrze napisane programy będą niezbędne w sytuacjach, w których ważna jest skalowalność, czyli tam, gdzie zapewne lśnisz. Zgadzam się jednak z tym, co mówisz w zasadzie. Chociaż uważam się za początkującego programistę, interesuje mnie nauka wszystkiego na niskim poziomie (do pewnego stopnia) i nieużywanie wstępnie napisanych ram itp. ... (przynajmniej na początek ... lub kiedy Korzystam z dowolnego frameworka, który będzie mój własny
Anonimowy,

48
Myślę, że twoje mylące CS z programowaniem są powiązane, ale dwie różne rzeczy.
Darknight

1
@chris Całkowicie się zgadzam. Szeroko wykorzystuję frameworki i biblioteki, ale staram się je robić bez uprzedniego zrozumienia problemu i tego, jak biblioteka go rozwiązuje. Raz ja wiem, to mogę wybrać, które biblioteka rozwiązuje to najlepiej w tym przypadku, a nie tylko rzucanie rodzajowe biblioteki na każdy problem i nadzieję przykleja
Veaviticus

8
Jaki problem próbujesz rozwiązać za pomocą tego pytania?
Jeremy,

15
@Veaviticus, naprawdę oczekujesz, że Twoi hydraulicy znają dynamikę płynów (aby mogli lepiej wykonywać swoją pracę?). Większość aplikacji Line Of Business (stacjonarnych / internetowych) nie wymaga rozwiązywania bardzo złożonych problemów (bardzo rzadko). Czy posiadanie doświadczenia w CS pomaga tak! z całą pewnością. Czy jest to wymagane dla LOB -> nie bardzo.
Darknight

Odpowiedzi:


25

Tak i nie

Dobre pytanie, ale złe założenie.

Wydaje się, że brakuje części naukowej w edukacji, ale założenie, że nauka była tam tylko po to, aby programy były wydajne, jest błędne.

Nauka była konieczna, aby nauczyć ludzi, jak definiować i rozwiązywać problemy.

Niestety, ta część niektórych programów nauczania „CS” (programów nauczania?) Wydaje się całkowicie pominięta, zastąpiona zabawkowymi problemami z trywialnymi lub znanymi rozwiązaniami i ma na celu jedynie nauczenie znajomości narzędzi

Niezadowalający; wielu absolwentów szkół Java zostało zmienionych, nigdy nie uczyło, jak rozłożyć problem, zaprojektować algorytm, określić test, a nawet skutecznie debugować.


2
Uczęszczałem do szkoły, która nawet nie stresowała się zbytnio Javą, większość tego, co zrobiłem, było w C ++. Ale wciąż nie nauczyli nas robić rzeczy, o których wspomniałeś. Omówili podstawy, przejrzeli niektóre rzeczy i pogłębili to, czym interesował się każdy profesor. Wygląda na to, że szkoły próbują obecnie wypompować jak najwięcej „programistów” zamiast naukowców.
Veaviticus,

@Veaviticus: To byłoby dla szczęśliwych studentów. Na moim uniwersytecie profesorowie mają schizofreniczny poziom abstrakcji, a ich pomysłem na egzamin jest „recytuj definicję formalną”.
DeadMG,

Język nie ma nic wspólnego z naukami o rozkładaniu problemu. Problem jest problemem niezależnie od tego, czy jest to C, Java czy Ruby.
Przypon

29

Czy informatyka nie żyje? ”…„ Jestem absolwentem studiów licencjackich z informatyki. Pracuję na pozycji wyjściowej w przyzwoitej firmie w dziale IT .

Szczerze mówiąc, moje dwa centy: nie znajdziesz „informatyki” pracującej w dziale IT w przyzwoitej firmie, ponieważ jest to dział IT, a nie dział CS. Spróbuj wrócić do szkoły na doktorat lub pracować w działach inżynierii firmy, która koncentruje się na informatyce (np. Przetwarzanie obrazu, sieci o wysokiej wydajności, systemy algebry komputerowej, lotnictwo itp.). To tutaj znajdziesz trudne, interesujące problemy, w których niechlujny projekt [ogólnie] nie będzie tolerowany.

„Czy są jeszcze miejsca dla ludzi, którzy kochają naukę i sztukę CS, a nie tylko wypłaty?”

Tak, absolutnie, ale prawdopodobnie nie w działach IT średnich firm.


16

Jeśli jesteś programistą, nie uważaj się za „informatyka”; informatycy tworzą te następną generację komputerów, z których niektóre wciąż są science fiction, dopóki nie powstanie właściwa mieszanka materiałów, miniatura i teoria obliczeń. To tylko początek rurociągu. Ludzie, którzy tworzą oprogramowanie tu i teraz, są „inżynierami oprogramowania”; biorą teorie i narzędzia, czasami nakładając na siebie praktyczną teorię i narzędzia w świecie rzeczywistym, aby wykorzystać moc w potencjale tego złożonego elementu elektroinicznego czarownictwa i sprawić, że robi to, co chcemy. To z kolei jedna specjalizacja w dziedzinie „inżynierii komputerowej”, która bierze teorie informatyków i stosuje je, sprzęt i oprogramowanie, do rzeczywistych rozwiązań elektronicznych użytkowników końcowych.

W IMO biznes spotyka się z teorią. W tego typu przypadkach stare powiedzenie „wróg lepszy jest wystarczająco dobry” można łatwo odwrócić, aby przeczytać „wróg wystarczająco dobry jest lepszy”. Uznanie siebie za „inżyniera” zamiast „naukowca” i zestawienie tego, co robisz z innymi dyscyplinami inżynierii, przynosi ulgę.

Powiedzmy, że klient przychodzi do ciebie, inżynier budowlany / inżynier, i prosi cię o zbudowanie mostu. Most musi rozciągać się na 20 stóp, sam się utrzymać i jedną tonę ładunku, powinien on trwać 10 lat przy rutynowej konserwacji i chcą go za miesiąc za 20 000 USD. To są twoje ograniczenia; spełniają minimalne wartości, nie przekraczając maksymalnych. Takie postępowanie jest „wystarczająco dobre” i zapewnia wypłatę. Zbudowanie mostu Golden Gate byłoby kiepską inżynierią, znacznie przekraczającą specyfikację projektu i budżet o kilka rzędów wielkości. Zwykle zjadasz przekroczenie kosztów i płacisz kary za przekroczenie czasu. Niewłaściwe byłoby też zbudowanie mostu linowego o masie 5 dorosłych mężczyzn, mimo że kosztował czas i materiały tylko 1000 USD; nie dostajesz dobrych opinii klientów i referencji,

Wracając do oprogramowania, powiedzmy, że masz klienta, który potrzebuje systemu przetwarzania plików zbudowanego do trawienia przychodzących plików i umieszczania informacji w systemie. Chcą, aby zrobiono to w ciągu tygodnia i musi obsłużyć pięć plików dziennie, około 10 MB danych, ponieważ to cały ruch, jaki obecnie otrzymują. Wasze cenne teorie w dużej mierze wychodzą z okna; Twoim zadaniem jest zbudowanie produktu, który będzie spełniał te specyfikacje w ciągu tygodnia, ponieważ robiąc to, dotrzymasz również budżetu kosztowego klienta (ponieważ materiały są na ogół kroplą w koszyku na umowę o oprogramowanie tego rozmiaru). Spędzenie dwóch tygodni, nawet dziesięciokrotnie więcej, nie jest opcją, ale najprawdopodobniej nie jest też programem zbudowanym w ciągu dnia, który może obsłużyć tylko połowę przepustowości, z instrukcją uruchomienia dwóch kopii.

Jeśli uważasz, że to przypadek marginesowy, to się mylisz; jest to codzienne środowisko większości mieszkańców. Powodem jest ROI; ten początkowy program nie kosztuje dużo i dlatego bardzo szybko się zwróci. KIEDY użytkownicy końcowi potrzebują tego, aby zrobić więcej lub przyspieszyć, kod może zostać refaktoryzowany i skalowany.

To główny powód obecnego stanu programowania; założeniem, potwierdzonym przez całą historię komputerów, jest to, że program NIGDY nie jest statyczny. Zawsze będzie wymagało uaktualnienia i ostatecznie zostanie zastąpione. Równolegle ciągłe doskonalenie komputerów, na których działają oba programy, pozwala na zmniejszenie uwagi na wydajność teoretyczną oraz zwiększenie uwagi na skalowalność i równoległość (algorytm działający w czasie N-kwadratowym, ale który można zrównoleglać, aby działał na rdzeniach N wydają się liniowe, a często koszt większej ilości sprzętu jest tańszy niż w przypadku deweloperów w celu opracowania bardziej wydajnego rozwiązania).

Ponadto istnieje bardzo prosta zasada, że ​​każda linia kodu programisty jest czymś innym, co może pójść nie tak. Im mniej programista pisze, tym mniej prawdopodobne jest, że to, co pisze, ma problem. To nie jest krytyka czyichś „błędów”; to proste stwierdzenie faktu. Być może wiesz, jak napisać MergeSort do tyłu i do przodu w 5 językach, ale jeśli wybierzesz tylko jeden identyfikator w jednym wierszu kodu, całe Sortowanie nie będzie działać, a jeśli kompilator go nie złapie, może to zająć godziny debugowania. Porównaj to z List.Sort (); jest tam, jest skuteczny w ogólnym przypadku, a najlepsze jest to, że już działa.

W związku z tym zbudowano wiele funkcji współczesnych platform oraz założenia nowoczesnych metod projektowania:

  • OOP - wbuduj powiązane dane i logikę w obiekt i wszędzie tam, gdzie poprawna jest koncepcja tego obiektu, a więc obiekt lub bardziej wyspecjalizowane wyprowadzenie.
  • Wstępnie zbudowane szablony - dobre 60% lub więcej kodu to cruft składniowy i podstawy, aby program pokazywał coś na ekranie. Standaryzując i automatycznie generując ten kod, zmniejszasz obciążenie programisty o połowę, co pozwala na zwiększenie wydajności.
  • Biblioteki algorytmów i struktur danych - tak jak powyżej, możesz wiedzieć, jak napisać stos, kolejkę, QuickSort itp., Ale dlaczego musisz, skoro istnieje biblioteka kodów, która ma to wszystko wbudowane? Nie przepisałbyś IIS ani Apache, ponieważ potrzebowałeś strony internetowej, więc po co implementować algorytm QuickSort lub czerwono-czarny obiekt drzewa, gdy dostępnych jest kilka świetnych implementacji?
  • Płynne interfejsy - wzdłuż tych samych linii może znajdować się algorytm filtrujący i sortujący rekordy. Jest szybki, ale prawdopodobnie nie jest zbyt czytelny; zajęłoby to Twojemu młodszemu programistowi dzień, aby to zrozumieć, nie mówiąc już o dokonaniu chirurgicznej zmiany potrzebnej do sortowania na dodatkowym polu w obiekcie rekordu. Zamiast tego biblioteki takie jak Linq zastępują wiele bardzo brzydkich, często łamliwych kodów, jednym lub dwoma wierszami konfigurowalnych wywołań metod, aby zamienić listę obiektów w przefiltrowane, posortowane, rzutowane obiekty.

2
Dobra odpowiedź, ale brakuje ci jednego ważnego punktu. „Tego, czego nie mogę powielić, nie rozumiem”. Znajomość ich działania nie oznacza, że ​​wpisujesz je ręcznie dla każdego projektu; raczej zapewnia, że ​​znasz każdą z ich mocnych i słabych stron, które pomogą ci wybrać najlepszą. Następnie wszystko, co musisz wiedzieć, to czy ten algorytm / struktura danych znajduje się w standardowej bibliotece.
Michael K,

Tyle że twoje przysłowie jest błędne; Rozumiem bardzo jasno koncepcje niektórych rzeczy materialnych, których nie mam nadziei na powielenie. Zasadniczo się zgadzam; sukcesy dowolnego inżyniera muszą znać wystarczającą teorię, aby wybrać rozwiązanie, które działa. Nie oznacza to, że inżynier musi być w stanie zbudować każdy rodzaj żarówki, aby poznać specyfikę każdego z nich, a tym samym wybrać odpowiednią dla domu. Podobnie mogę korzystać z czerwono-czarnego drzewa, rozumiejąc jego działanie i prawidłowe stosowanie, bez pojęcia, jak zaimplementować je od zera.
KeithS

Analogia z inżynierią nie jest dobra. Nie jest tak, że „lepszy most” w CS niekoniecznie kosztuje dużo - często jest to tylko kwestia zrozumienia, które narzędzie jest odpowiednie do właściwej pracy. Nawet wdrożenie dość złożonego algorytmu podręcznika często wychodzi poza strefę komfortu ludzi, ale nie jest to trudne ani drogie pojęcie (w zależności od zakresu - ale zakładając, że jest to projekt za lata osobodni, a nie osobodni). Zwykle jest to jeszcze łatwiejsze - bez niestandardowej implementacji, wystarczy pytanie o właściwe narzędzie i słowa kluczowe, których można użyć w Google.
Eamon Nerbonne

8

Wydaje mi się, że zajmujesz się IT, a nie CS, co nie powinno oznaczać, że CS nie żyje. CS nie jest martwy, po prostu większość zadań związanych jest z tworzeniem oprogramowania. Ponieważ większość studentów CS uczy się programować, zwykle zatrudniają się jako programiści, a nie jako informatyk. Praca w informatyce jest niewielka w porównaniu do pracy programistycznej. Być może robisz nawet skomplikowaną aplikację z wykorzystaniem technik informatycznych, ale moim zdaniem (i nie lubię opinii, ponieważ są one subiektywne), która mieści się w obozie inżynieryjnym niż obozie naukowym.

Również piękny i elegancki kod jest w oku patrzącego , ale dla większości firm / menedżerów, mających dobry-dość-design na czas jest o wiele ważniejsze niż piękny kodu, ale nigdy nie kończąc na czas.

Wreszcie istnieje prawdziwy świat i lala-land. Niestety otrzymujemy wypłatę z tego pierwszego i właśnie wtedy pojawia się „nauka / sztuka” tworzenia oprogramowania, jak wytwarzać wysoką jakość oprogramowania przy ograniczeniach czasowych / budżetowych. Czułem ten sam rodzaj uczuć, co na początku mojej kariery. Zawsze chciałem stworzyć „najlepszy”, ale wkrótce zdaję sobie sprawę, że „najlepszy” nie jest najbardziej wydajnym ani eleganckim, ale najbardziej opłacalnym projektem.


3
„piękny i elegancki kod” kontra „dobra enuogh, ale na czas” to fałszywa dychotomia. Łatwiej jest skończyć na czas, jeśli Twój projekt jest prosty, a prosty projekt to piękny projekt. Tylko proste nie oznacza uproszczone .
pillmuncher

1
@pillmuncher, tak, zgadzam się, dla mnie piękny kod jest prosty (ale nie prostszy), ale niestety ta przesłanka jest subiektywna / względna. „prosty design równa się pięknemu designowi” nie jest twierdzeniem, ale opinią (bardzo popularną opinią, którą zgadzam się w 100%, ale nadal opinią). To, co nie jest opinią, to harmonogram, wymagania i koszt. Ograniczenia te będą zwykle prowadzić do wystarczająco dobrego projektu dla danych ograniczeń.
Armando

„[1] Wydaje mi się, że zajmujesz się IT, a nie CS, i nie powinno to oznaczać, że CS nie żyje. [2] CS nie jest martwy, po prostu większość miejsc pracy jest w trakcie tworzenia oprogramowania”. Twoje pierwsze stwierdzenie jest poprawne - OP jest w IT, a nie CS. Nie zgadzam się jednak z twoim drugim stwierdzeniem, ponieważ wielu tak zwanych „informatyków” również zajmuje się tworzeniem oprogramowania. Nazywa się to „badaniami i rozwojem”, a przykładem może być informatyk definiujący, rozwiązujący i potwierdzający poprawność algorytmu routingu w określonych topologiach sieciowych, a następnie wdrażający „oficjalną” lub prototypową implementację
Bill VB,

8

Po pierwsze, źle to zrozumiałeś. „myśl, planuj i skutecznie rozwiązuj problemy” to nie nauka, to inżynieria. Nauka polega na odkrywaniu nowych dziedzin. W rzeczywistości w świecie akademickim ludzie mniej dbają o efektywność kodu niż w przemyśle. W środowisku akademickim chodzi bardziej o weryfikację koncepcji itp.

Nie, opisujesz, że do opracowania oprogramowania wymagana jest mniej dogłębna wiedza. Co może być prawdą, jeśli wymagania byłyby takie same. Ale obecnie oczekuje się, że inżynier oprogramowania będzie wiedział, jak radzić sobie z wielowątkowością, przetwarzaniem rozproszonym, skalowaniem itp. Oczekuje się, że będzie wiedział, jak skutecznie prowadzić projekt. Większość tego nie było wcale w programach nauczania kilkadziesiąt lat temu.


Nadal nie jest, z tego, co tutaj czytam. Wiele szkół nie uczy inżynierii, uczy języków. Jest to równoznaczne z nauczeniem Autocad studenta inżynierii lądowej.
Michael K,

@Michael: Nie widziałem, żeby jakiś przyzwoity uniwersytet to robił.
vartec

1
Idę do RIT. Jest wysoko oceniany i nadal dość gówniany. Żadna szkoła nie uczy prawidłowego programowania, ponieważ nie można tego zrobić w ciągu czterech lub pięciu lat w kontekście innych zajęć.
Jon Purdy

4

Nie sądzę, że to, co pan powiedział, jest dokładnie tak, ale trzeba coś z punktu tak. Myślę, że z biegiem czasu informatyka i inżynieria oprogramowania rozeszły się.

Inżynieria oprogramowania (podobnie jak inna inżynieria) polega na zastosowaniu nauki do tworzenia produktów, rozwiązywaniu problemów itp. Informatyka to przede wszystkim badania nad algorytmami i (choć ta część jest często nieco zapomniana) jak zaimplementować te algorytmy (przynajmniej w pewnym sensie teoretycznym - np. traktując wszystkie maszyny PRAM jako równoważne).

Pamiętając o tym, myślę, że przyczyna rozwidlenia staje się oczywista: większość problemów algorytmicznych związanych z czymś takim jak typowa strona internetowa została już rozwiązana - większość z nich już dawno temu. Być może, co ważniejsze, większość z nich została rozwiązana na tyle dobrze, że dla przeciętnego programisty problem zniknął prawie całkowicie. Na przykład robienie aktualizacji atomowych rozproszonych baz danych jest z pewnością nietrywialnym zadaniem - ale typowy programista pisze po prostu trochę kodu SQL i nie ma pojęcia (ani dbałości) o to, ile badań zajęło ustalenie sposobu wykonania pracy niezawodnie.

W pewnym momencie oddzielenie informatyki od inżynierii oprogramowania było zasadniczo niemożliwe. Tak mało problemów zostało rozwiązanych, że napisanie nawet stosunkowo trywialnego programu wymagało zbadania podstaw. Jeśli chcesz zrobić coś tak prostego, jak sortowanie wiązki danych pod koniec lat 50. lub wczesnych 60., szanse były całkiem spore, że będziesz musiał po prostu przeprowadzić analizę danych i spróbować zaprojektować algorytm, który najlepiej pasuje do tego, co zajęłoby sortowanie tych konkretnych danych - jak dotąd nie było tak wielu algorytmów sortowania, a nawet znane algorytmy nie były tak dobrze znane, jak dzisiaj .

50 lat badań i rozwoju się opłaciło - najbardziej typowy rozwój może wykorzystywać nie tylko znane algorytmy, ale także wstępnie napisane implementacje. Najbardziej typowe problemy można rozwiązać dość rozsądnie w oparciu o istniejącą wiedzę (a nawet istniejące implementacje) algorytmów.

Nie oznacza to jednak, że informatyka nie żyje - jest jeszcze więcej algorytmów do badań, a ludzie je badają. Oznacza to jednak, że większość badań jest bardziej wyspecjalizowana i prawdopodobnie dotyczyć będzie raczej wyspecjalizowanych dziedzin. Prawdopodobnie istnieje także większa „luka” między zdobywaniem a stosowaniem wiedzy. Pewnego razu wymyśliłeś lepszy sposób sortowania podczas pisania programu sortującego i prawie natychmiast został on zapisany w prawdziwym kodzie. Teraz wiele informatyki jest poświęcone takim rzeczom, jak używanie zasadniczo nieskończonej liczby procesorów - co prawdopodobnie kiedyś będzie przydatne, ale nawet prymitywne plemiona nie policzyłyby podwójnych rdzeni w moim komputerze jako „wielu” ... :-)


1

Rozwój oprogramowania i informatyka to nie to samo, i stwierdziłem, że większość moich kolegów z klasy ma tytuł licencjata. Program Comp Sci był tym sfrustrowany.

Uważam oprogramowanie za produkt informatyki ... podobnie jak obrazy są dziełem sztuki wizualnej.

Myślę, że większość osób z dyplomem CS zostaje zatrudniona do pracy w celu opracowania oprogramowania, szczególnie na początkowych etapach kariery. Myślę, że wiele osób w tej roli zostaje tam i nie idzie dalej.

Myślę, że różnica zaczyna się pojawiać, gdy pojawiają się nowe problemy lub paradygmaty lub gdy „splatanie się” nie jest wystarczająco dobre. Kto buduje nowe frameworki lub języki? Kto siada i objaśnia szczegóły nowego silnika fizyki? Kto wykorzystuje teorię graficzną / transformacje grafowe, aby wypisać kilka cykli na iterację wydajności z algorytmu?

Skończę tam, gdzie zacząłem, zgadzając się, że jest wielu informatyków na stanowiskach programistycznych / inżynieryjnych, być może nie do końca wykorzystujących swój potencjał.


1

Wygląda na to, że mylisz informatykę z programowaniem i tworzeniem oprogramowania w ogóle. Obie nie są takie same, nawet nie są blisko. Niezależnie od tego, co powiedzą nasze stopnie naukowe, zdecydowana większość z nas to programiści, a nie informatycy. O ile nie jesteś aktywnie zaangażowany w środowisko akademickie na wysokim poziomie, postawiłbym się, że tak naprawdę nie masz pojęcia, co się dzieje w informatyce.


0

Mogę powiedzieć, że informatyka żyje i ma się dobrze. Muszę codziennie rozwiązywać problemy i wymyślić skuteczne i eleganckie rozwiązanie tych problemów. Muszę codziennie wykorzystywać swoje umiejętności jako inżynier i wykorzystywać wiedzę siebie i moich kolegów, aby rozwiązać te problemy dla naszego klienta.

Nie nienawidzę języków, rozumiem, że służą one celowi i robią to dobrze, ale gdy Twoi pracownicy nie wiedzą, jak działa tablica skrótów, używają niewłaściwych metod sortowania lub uruchamiają polecenia SQL, które są okropnie nieefektywne (ale wykonują pracę w odpowiednim czasie), wydaje się, że wkłada się więcej wysiłku w opracowywanie technologii, które kodują nowych „programistów”, a nie uczą ludzi, jak robić dobrze.

To brzmi jak problem z pracownikiem i na pewno nie jest prawdą dla każdego programisty.

To, że istnieją narzędzia ułatwiające naszą pracę, nie oznacza, że ​​nie powinniśmy rozumieć podkreślonej technologii, jeśli nie, nie pomagamy nikomu i na pewno nie wykonujemy naszych zadań w rozwiązywaniu problemów we właściwy sposób.


Zgadzam się. Nie próbuję powiedzieć, że nie ma pracy, która nie wymaga myślenia ani że wszyscy programiści nie mają pojęcia, co robią, ale po prostu z programu CS mogę powiedzieć, że moja szkoła nie naucz mnie połowy rzeczy, które teraz wiem. Nauczyłem się ich sam. A teraz, kiedy je znam, mogę używać frameworków, które robią to za mnie. Ale gdybym nie nauczył się tego sam, po prostu ślepo korzystałbym z frameworka, najczęściej niepoprawnie
Veaviticus,

0

Po prostu nie zrozumiałeś problemu. Problemem nie jest uzyskanie maksymalnej wydajności - zapewnia ona wystarczającą wydajność, aby Twoja aplikacja była wystarczająco responsywna i wystarczająco szybka. Nauka programowania polega na rozwiązywaniu problemu za najmniejszą kwotę.

Nienawidzę tego tak wyrażać, ale każde wrażenie, że jesteś pod wrażeniem śmierci CS, jest tylko twoimi własnymi wyobrażeniami o tym, co powinien zrobić „prawdziwy” programista.


Dobrze. Wiem, że firmy muszą zarabiać pieniądze. I z pewnością nie jestem niewinny, aby części moich aplikacji były „wystarczająco szybkie” zamiast najlepszych, jakie mogą być. Jestem bardziej ciekawy trendu jako całości, że wielu (przynajmniej z tego, co mogę powiedzieć) deweloperów nigdy nie studiowało CS. Przybyli na pole skądinąd i nie mieli za nimi żadnej prawdziwej teorii, po prostu mieli doświadczenie z frameworkami
Veaviticus,

@Veaviticus: Korzystanie z frameworka może nie być przełomową teorią akademicką, ale zdecydowanie jest to CS.
DeadMG

0

Cóż, martwy czy nie jest dyskusyjny!

Faktem jest, że w dzisiejszej erze technologicznej większość firm zatrudnia ludzi do rozwiązywania rzeczywistych zadań typu workflow poprzez automatyzację oprogramowania. Nie są zainteresowani tym, jak elegancki lub szybszy program można napisać, o ile pozwala to firmie na szybsze działanie przy wyższej wydajności.

Stres jest na wyjściu więcej w krótszym czasie. (Pomyśl o komercjalizacji upraw / żywności; szybszy i większy wzrost przy niższych kosztach). To samo dzieje się w świecie technologii (kolejny nowy pomysł).

Pamiętaj, że w dzisiejszych czasach rzeczy poruszają się szybciej niż kiedykolwiek wcześniej ze względu na ilość i dostęp do wiedzy niż w przeszłości. W tamtych czasach produkcja była niewielka i lepsza, zyski większe. Teraz gra całkowicie się zmieniła. Wystarczy spojrzeć na takie rzeczy, jak jakość obsługi klienta i ogólnie rzecz biorąc, rzeczy nie trwają dłużej.

Elegancja i wydajność mają znaczenie dla firm technologicznych takich jak Google itp., Podczas gdy nawet te miejsca nie są idealne, ale możesz zbliżyć się do nich, pracując w jednej z tych firm w nadchodzących latach.

W życiu zawsze występuje kompromis. Możesz znaleźć pracę, która płaci mniej, gdzie masz cały czas i uwagę. Lub zdecydujesz się popływać z resztą z nas, aby lepiej płacić i ignorować rzeczy, które nie są idealne. Im szybciej ta realizacja zapada w tobie, możesz przygotować się do prawdziwego świata. Nie mówię, że powinieneś ignorować jakość i elegancję, ale znać dynamikę. Będziesz szczęśliwy :)


0

Moim zdaniem niektóre z najciekawszych rzeczy, które mogą przynieść przyszłość, z pewnością będą oparte na naukowej części informatyki, w szczególności na ulepszonym widzeniu komputerowym / uczeniu maszynowym i innych algorytmach sematyzujących. Prawdopodobnie zostaną one popchnięte do przodu w przemyśle (np. Microsoft Kinect), ale są tak niezwykle trudnymi problemami, że z pewnością będą oparte na ogromnych badaniach i postępach w nauce (ponownie weź Microsoft Kinect).


0

Myślę, że standardowe codzienne programowanie to tyle samo sztuki co nauki, ale z pewnością istnieją obszary, które są głęboko zainteresowane naukowymi aspektami informatyki. Na przykład naukowcy z firm i uniwersytetów. Jeśli naprawdę chcesz być zawodowo zaangażowany w naukę, powinieneś szukać doktora. Uważam jednak, że naukowe części mojej edukacji są ciągle cenne, mimo że w rzeczywistości muszę polegać na mojej bardziej kreatywnej stronie!

Ludzie, którzy nie wiedzą, co robią, mogą zhakować niektóre z narzędzi, o których wspomniałeś, ale zwykle zatrudniają prawdziwych ludzi CS, aby tworzyć narzędzia, po prostu musisz uzyskać bardziej abstrakcyjny charakter, aby naprawdę się zmusić.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.