Czy „Informatyka! = Inżynieria oprogramowania” jest pretekstem do złego nauczania programowania?


23

Wszyscy to słyszeliśmy; za każdym razem, gdy pojawia się dyskusja na temat słabych umiejętności rozwoju CS, ktoś w końcu mówi:

Informatyka to nie inżynieria oprogramowania.

Problem, który widzę, polega na tym, że programowanie i tworzenie oprogramowania prowadzone na kursach CS. Są po prostu źle nauczani. Jeśli jest nauczany, to dlaczego nie uczyć go poprawnie za pierwszym razem? *

Chciałbym więc zobaczyć, jakie są opinie na 2 pytania:

  1. Czy argument CS! = SE jest rozwinięciem lub usprawiedliwieniem niewłaściwego uczenia umiejętności programistycznych.

  2. Niezależnie od twojej odpowiedzi na pytanie 1; gdybyś miał wszechmocną pozycję do podjęcia takiej decyzji: czy nałożyłbyś nacisk na prawidłowe nauczanie programowania na kursach CS?

*. Podejrzewam, w oparciu o niepotwierdzone dowody uzyskane w trakcie mojej edukacji, że większość naukowców w tej dziedzinie nie musiała pisać kodu, aby go utrzymywać, i nie utrzymywała kodu, w wyniku czego nie ma wiedzy / umiejętności uczyć tego skutecznie.


7
Wyjaśnię mój komentarz; moim zdaniem są one różne (CS! = SE). Więc jeśli zastąpię CS i SE dwoma innymi polami A, B, gdzie A! = B, możesz uzyskać coś takiego jak Lekcje gry w kręgle! = Historia Japonii. Wtedy twoja kłótnia staje się: czy BL! = JH jest usprawiedliwieniem niewłaściwego nauczania JH? To jest teraz absurdalne pytanie i należy je odrzucić. Jeśli widziałeś absolwenta CS, który nie wiedział, dlaczego użyjesz tabeli mieszającej na połączonej liście, był źle nauczony. Jeśli widziałeś grad CS, który źle napisał kod refaktoryzacji pracy, można to usprawiedliwić.
Jeremiah Nunn

2
@Jeremiag Nunn: Aby użyć swojej analogii: historii Japonii nie uczy się w parze z kręgielnią. Podnoszę argument, że każdy program CS faktycznie uczy programowania i że używają argumentu „CS! = SE”, aby usprawiedliwić się jego dobrym nauczaniem.
Steven Evers

2
Inna myśl: czy brak umiejętności SE w konkretnej klasie CS jest winą szkoły lub ucznia? W każdej klasie prawdopodobnie masz dość szerokie umiejętności, od kompetentnego do okropnego.
Adam Lear

2
@SnOrfus Inżynieria oprogramowania polega na tworzeniu oprogramowania. Informatyka jest teorią oprogramowania. Znajomość obu jest idealna, ale wciąż są oddzielne. Lepszą analogią (IMO) niż @ Jeremiasza byłoby budowanie instrumentów vs. granie na nich.
dash-tom-bang

5
Przypis o tym, że pracownicy naukowi nie muszą pisać łatwego do utrzymania kodu jest prawie dokładnie o to chodzi. Nie na tym zależy CS.
dash-tom-bang

Odpowiedzi:


27

Nie wydaje mi się, żeby to był wyrzut, ale raczej twierdzenie, że informatyka nie jest inżynierią oprogramowania, to nie jest programowanie - jest to nauka sformalizowanych obliczeń. Zasadniczo jest to matematyka (w rzeczywistości wiele programów CS zaczęło jako programy matematyki stosowanej).

Myślę, że problem dotyczy bardziej przemysłu niż środowiska akademickiego. Przemysł widzi tytuł CS wymieniony w życiorysie i myśli: „Świetnie, ten facet jest dobry z komputerami” i wynajmuje go do robienia czegokolwiek związanego z komputerem: IT, programowanie, tworzenie oprogramowania, cokolwiek. Te rzeczy niekoniecznie leżą w sferze wiedzy absolwenta CS. Z kolei wiele osób, które lubią budować komputery lub grać w gry wideo, przystępuje do programu CS, oczekując tego typu rzeczy, i otrzymuje niemiłą niespodziankę; tzn. wielu studentów studiujących CS tak naprawdę nie należy do nich i lepiej byłoby w bardziej ukierunkowanym programie studiów.

Po drugie, jest bardzo ograniczony czas na nauczanie CS - bardzo szerokiego przedmiotu - w typowym programie studiów licencjackich. Mój program licencjacki miał 8 kursów CS (dla licencjata) lub 12 kursów CS (dla licencjata) oraz wszystkie wymagane kursy matematyki. To nie jest dużo czasu, aby nauczyć CS i matematyki i programowania i inżynierii oprogramowania, więc w pewnym momencie trzeba zdecydować, co jest ważne, a co student może wybrać się na własną rękę.

Ta ostatnia kwestia jest kluczowa: myślę, że dobry uczeń - w dowolnej dziedzinie - sam zbada pomysły. Mam stopień CS, ale myślę, że wyszedł z college'u jako godnej deweloper, bo studiował i napisał oprogramowanie na własną rękę . Studia to nie tylko zajęcia; chodzi również o zapewnienie studentom czasu na półautomatyczne rozwijanie umiejętności, przy jednoczesnym zapewnieniu cennych wskazówek.

I twierdzą, że teoria nauczania - CS, matematyki, etc. - jest tak samo ważne, jeśli nie bardziej istotne, niż nauczanie konkretnych umiejętności zawodowych związanych. Jeśli nauczysz ucznia, dlaczego kryje się za metodami i technikami, a nie tylko co , skończysz z kimś, kto jest znacznie bardziej elastyczny, jeśli zastosuje swoją wiedzę. Na przykład poszedłem do źle urażonej „szkoły Java” i dlatego uczyłem się w Javie, ale miałem także kursy teorii programowania, które wyjaśniały, dlaczego kryje się za nimi wiele języków; dzięki temu nauczyłem się pisać znacznie lepsze oprogramowanie niż gdybym nie miał takiego doświadczenia. Jasne, nie piszę oprogramowania w Haskell w mojej codziennej pracy, ale znajomość teorii języków programowania pozwoliła mi uzyskać wgląd w to, żema być stosowane do mojej pracy jako programista.

Myślę też, że przemysł zbyt wiele oczekuje od studentów. Przemysł chce obniżyć własne koszty, dlatego zamiast szkolić nowych rekrutów do pracy, oczekują, że uczelnie staną się szkołami handlowymi / technicznymi; w efekcie chcą, aby uczelnie przeprowadziły dla nich szkolenie. Nie można oczekiwać, że absolwenci szkół wyższych będą wiedzieć wszystko po studiach. Bycie dobrym programistą polega zarówno na doświadczeniu, jak i na wiedzy (szczególnie w stosunkowo młodej dziedzinie, takiej jak tworzenie oprogramowania).


To dokładnie moja myśl, ale wyjaśniona znacznie lepiej niż moja odpowiedź.
Jeremiah Nunn

+1: Tyle dobrych rzeczy tutaj, nie chciałbym wybierać jednej rzeczy, ale biorąc pod uwagę, że CS powstało jako matematyka stosowana, czy to nie oznacza znaczenia jej zastosowania - w tym przypadku programowania?
Steven Evers,

2
@SnOrfus: Tak, o ile programowanie jest stosowane w matematyce, tak. Ale podobnie jak informatyka! = Inżynieria oprogramowania, programowanie! = Inżynieria oprogramowania.
mipadi

1
@David Thornley: Po pierwsze, ja i każdy, kogo znam, kto brał fizykę, używał oscyliskopu podczas badania fal. Mimo to analogia się nie sprawdza. Studenci już uczą się programowania w ramach dyplomu CS. Byliście, ja, wszyscy z nas, którzy uczestniczyliśmy w nieświadomości. To nie był nawet jednorazowy odcinek jednego kursu. To integralna część co najmniej 1-2 zajęć w semestrze.
Steven Evers,

2
+1 za wyjaśnienie, że szkoła (uczelnia, uniwersytet, cokolwiek) powinna cię nauczyć, jak łowić ryby, a nie tylko dać ci ryby
Emiliano

25

Częściowym problemem jest to, że 4 lata to za mało czasu, aby zostać dopracowanym inżynierem oprogramowania. Biorąc pod uwagę, że chcemy, aby student miał kontakt z więcej niż tylko matematyką i kursami CS oraz fakt, że jest wiele do nauczenia się czystej mechaniki (algorytmy, struktury danych, składnia języka), nie możemy oczekiwać, że zielony kurs CS będzie inżynier oprogramowania.

Zgadzam się, że CS! = SE i nie jestem pewien, czy możesz po prostu iść do szkoły i zostać SE (nawet z magistrem)


+! 1: Widzę twój punkt widzenia, ale nie jest to tylko „dopracowane”. Wielu brakuje bardzo podstawowych umiejętności.
Steven Evers,

Myślę, że to zależy od tego, co uważasz za bardzo podstawowe umiejętności. Na przykład SQL jest podstawową umiejętnością w mojej głowie, ale zauważyłem, że moje stopnie CS są w nim dość słabe i myślę, że należy się tego spodziewać. Jeśli mówisz, że mają słabą składnię języka, podstawową modułowość lub koncepcje OOP, to jest duży problem i zacznę szukać ocen z różnych szkół
bigtang

Programuję zawodowo od 14 lat. Patrzyłem na SQL i potrafię nawet tworzyć podstawowe zapytania, ale nawet te podstawowe umiejętności pojawiły się dopiero w ubiegłym roku. SQL nie jest CS. SQL jest implementacją teorii baz danych, którą jest CS.
dash-tom-bang

@ dash-tom-bang: Czy uważasz, że instrukcje kontroli przepływu w imperatywnych językach są podstawami? Mogę potwierdzić, że istnieje stopień sumujący świeże oceny CS, które nie znają większości z nich.
Steven Evers

Nie uważałbym implementacji kontroli przepływu w żadnym konkretnym języku za jedną z „podstaw informatyki”. Jeśli jednak ktoś nie rozumie kontroli przepływu jako koncepcji , to nie nauczył się CS.
dash-tom-bang

10

CS w rzeczywistości nie jest SE. I ludzie zdają się łączyć te dwie rzeczy przez cały czas, nawet przyznając się do tego. Informatyka powinna zostać przemianowana na coś takiego jak informatyka lub informatyka. W rzeczywistości informatyka ma niewiele wspólnego z komputerami. To teoria grafów, analiza algorytmów, struktury danych itp.

Ludzie chcą założyć, że nowy stopień CS to tak naprawdę stopień ITT; chcą kogoś, kto został przeszkolony w powołaniu. Informatyka to nauka, programowanie to sztuka. To nie to samo.

To tak, jakby zapytać, dlaczego nowy absolwent fizyki nie jest dobrym inżynierem samochodowym. To jest głupie.


2
Programowanie to rzemiosło, a nie sztuka.
dash-tom-bang

6
Programowanie to rzemiosło, inżynieria i sztuka.
Maciej Piechotka,

2
Nie zmieniłbym tego. Czym jest informatyka, ale informatyka? innymi słowy, badanie maszyn obliczeniowych, co implikuje badanie obliczeń.
Michael K,

1
Należy zmienić nazwę, ponieważ ludzie wprowadzili zamieszanie w to, co ty. znasz Edsger W. Dijastra? powiedział kiedyś: „informatyka to nie tylko komputery, ale astronomia to teleskopy”. :)
boos,

1
Sztuka tworzy piękno; rzemiosło tworzy użyteczność. Sztuka jest stworzona dla swojego piękna; rzemiosło jest tworzone dla jego użyteczności. Sztuka może się przydać; rzemiosło może być piękne. Inżynieria oprogramowania tworzy narzędzie; dlatego inżynieria oprogramowania jest rzemiosłem.
systemovich,

8
  1. Przynajmniej w Stanach Zjednoczonych edukacja jako całość stała się zyskiem. Szkoły ogłuszają program nauczania, aby zwiększyć liczbę zapisów. W college'u jest więcej osób, które nie należą do nich niż kiedykolwiek. Uczenie się odpowiednich technik nie jest czymś, czego można łatwo nauczyć, więc tego nie robią.
  2. Osobiście kładę większy nacisk na SE niż zwykle, ale uważam, że CS jako program jest mniej odpowiedni dla osób chcących wejść do branży. Myślę, że więcej instytucji powinno oferować praktyczny program SE.

+1 za # 1. Zauważyłem to, kiedy poszedłem do szkoły. To była szkoła nastawiona na zysk i czułem, że wielu uczniów nie miało odpowiednich kwalifikacji. Ponadto szkoła otrzymywała tylko pieniądze na kurs, a niepowodzenie ucznia oznaczało, że nie dostały już od nich pieniędzy, więc dość często nauczyciele robili wszystko, aby przekazać uczniów. Mieliśmy co najmniej jedną osobę z dyplomem, która, jak sądzę, nie mogłaby nawet napisać programu Hello World w wybranym przez siebie języku!
Rachel

od kiedy dotknąłeś amerykańskiego systemu edukacji i roli zysku, oto obowiązkowy chór Miltona Friedmana: youtube.com/watch?v=W3Seg0JE1PM
Job

7

Czy argument CS! = SE jest rozwinięciem lub usprawiedliwieniem niewłaściwego uczenia umiejętności programistycznych.

Nie. CS to nie SE. To fakt, a nie wymówka.

Niezależnie od twojej odpowiedzi na pytanie 1; gdybyś miał wszechmocną pozycję do podjęcia takiej decyzji: czy nałożyłbyś nacisk na prawidłowe nauczanie programowania na kursach CS?

Nie. To byłoby jak zmuszanie astronomów do poznania szczegółów budowy teleskopów. Lub zmuszanie programistów do uczenia się szczegółów budowy komputerów. Powiązane rzeczy, ale jeden człowiek nie musi wiedzieć wszystkiego.


6

Tak, dla mnie to brzmi jak wyrzutek i znak niedojrzałości CS jako dyscypliny akademickiej.

Akredytowany program BS Amerykańskiego Towarzystwa Chemicznego wymaga zaliczenia określonych kursów w celu wykazania się specjalizacją zarówno w teorii (wykłady), jak i praktyce (zajęcia laboratoryjne). W chwili obecnej CS nie ma nic takiego, o ile wiem.

Jeden z moich absolwentów był teoretykiem z wieży z kości słoniowej, którego biuro nigdy nie było podkopane niczym fizyczniej chemicznym niż akwarium z Magic Rocks, ale kiedy byłem jego specjalistą od chemii na studiach pierwszego stopnia, okazał się również dość kompetentnym chemikiem stołowym .

Kiedy pracowałem jako chemik do farb przemysłowych, śmiali się z głowy na myśl, że będę miał licencjata i będę niekompetentny w laboratorium. Oczywiście szczegóły tego, co robiłem w laboratorium, były inne niż te, które miałem na zajęciach laboratoryjnych w szkole, ale zasady były takie same - po prostu użyliśmy miksera farby i puszki, a nie zlewki i mieszadła magnetycznego .

Jeśli zastosujemy to samo podejście do CS, szczegóły tego, czego można nauczyć jako praktycznych umiejętności tworzenia oprogramowania dla programu nauczania CS / SE, mogą się różnić w zależności od szkoły i czasu. Ale dla mnie to szaleństwo, że jest dopuszczalne, aby ktoś uzyskał dyplom w tej dziedzinie i nie był kompetentny w pisaniu, debugowaniu i utrzymywaniu jakiegoś kodu. (Oczywiście, tak właśnie jest w wielu programach CS, ale wciąż jest to szalone.)


To nie jest szalone, to epidemia. Około 90% kodu, który widziałem napisany przez moich rówieśników, jest tak samo łatwy do utrzymania jak krzywa wieża w Pizie.
Marcel Valdez Orozco

5

Zgadzam się, że 4 lata to tylko wystarczająco dużo czasu, aby dać im dobrą podstawę do rozwoju. Myślę jednak, że jedną rzeczą, która naprawdę pomaga, jest zaangażowanie ludzi z branży w opracowywanie programu nauczania, a nawet nauczanie w klasie. W zeszłym roku byłem pracownikiem branżowym w klasie oprogramowania na lokalnej uczelni. To było dla mnie bardzo otwierające oczy doświadczenie. Profesor i ja pracowaliśmy razem nad treścią kursu i umieściliśmy o wiele więcej informacji na temat procesu rozwoju, najlepszych praktyk branżowych i sytuacji „rzeczywistych”, jakie mieli wcześniej. Odkryliśmy, że ponieważ większość instruktorów nie opracowuje powszechnie używanego i utrzymywanego kodu, sprowadzenie kogoś z branży pomogło zidentyfikować i uczyć umiejętności potrzebnych do tego.


Chciałbym spróbować czegoś takiego.
ChaosPandion

Powinieneś skontaktować się z lokalnym uniwersytetem i sprawdzić, czy mają coś takiego. Gdzie się znajdujesz?
Beth Whitezel

3
  1. Tak, to jest 100% harcer, powinni uczyć długoterminowych umiejętności, które będą przydatne w całej naszej karierze. Niezależnie od tego, czy zamierzasz studiować w środowisku akademickim, czy w branży, musisz mieć możliwość programowania w sposób, który można utrzymać, nawet jeśli jest to tylko sam.

  2. Tak, chociaż byłoby to podkreślone tylko we właściwych kursach. Osobiście, jeśli będę musiał z tobą porozmawiać, aby lepiej zrozumieć, jak próbowałeś wdrożyć algorytm, oceniłbym twoją ocenę.

Nawet jeśli zajmujesz się wyłącznie badaniami CS, prawdopodobnie będziesz musiał stworzyć kod, aby zademonstrować swoje pomysły. W pewnym momencie przydatne będą odpowiednie umiejętności programowania, więc dlaczego nie zacząć na studiach.


Długoterminowe umiejętności to CS. „Java” nie jest umiejętnością długoterminową, podobnie jak .NET, SQL, Pascal lub COBOL. Chyba, że ​​przez „długoterminowy” masz na myśli „ciesz się, że masz pracę, gdy ktoś potrzebuje opieki nad tymi starszymi systemami”.
dash-tom-bang

Chociaż zgadzam się, że podstawowe umiejętności (CS) są potrzebne, mam na myśli pisanie kodu, który jest łatwy do utrzymania i łatwy do odczytania niezależnie od języka programowania, w którym jest napisany. Tak długookresowy oznacza umiejętności wykraczające poza stosowane technologie.
JustJohn

1
IMHO CS jest potrzebne, aby móc podejść do bardziej złożonego problemu, wiele osób tutaj, nie potrzebuje dyplomu CS do pisania kodu, ale jeśli potrzebujesz obsługiwać matrycę 10x10 milionów danych i manipulować nią, nie mogę zrozumieć, jak SE może sobie z tym poradzić bez dyplomu CS.
boos,

3

Myślę, że naszym problemem jest to, że jesteśmy bardziej podobni do lekarzy, niż jesteśmy gotowi przyznać ... Mamy pomysł, że czteroletni dyplom powinien przygotować studentów do pisania oprogramowania. Nie jest nawet blisko.

Nasz zawód jest w dużej mierze w powijakach w porównaniu do innych dyscyplin. Być może pytanie powinno brzmieć: w jaki sposób możemy poprawić CS, aby studenci, którzy ukończyli ten stopień, byli lepiej przygotowani do zostania produktywnymi członkami rzeczywistego zespołu programistycznego w znacznie krótszym czasie?

Może powinniśmy być bardziej jak medycyna. Cztery lata podstawowej pracy (stopień CS), a następnie rezydencji - praktyka jednostki pod nadzorem bardziej doświadczonego inżyniera oprogramowania. Może to już mamy, ale jest to mniej formalne ... To znaczy, jak mieszkaniec, uczymy się naszych najcenniejszych umiejętności w miejscu pracy podczas pierwszych prac.

Może jako dyscyplina musimy po prostu lepiej to sformalizować.


Lub program Master Craftsman / Apprentice
Austin Salonen

1
Program MD nie jest programem naukowym. Chcesz studiować naukę, bierzesz biologię. Jeśli masz problem medyczny, nie zanieś go biologowi.
David Thornley,

To bardzo dobry pomysł: sformalizowanie faktu, że inżynieria oprogramowania jest również kwestią doświadczenia. To samo dotyczy prawników i lekarzy
Emiliano

Ale o czym mówimy o Davidzie? Ilu z nas kończy studia z zakresu CS, a następnie spędza karierę, wykonując „Informatykę”? To, co większość z nas tak naprawdę robi, to wychodzenie w świat i ćwiczenie umiejętności tworzenia oprogramowania. To tak samo jak MD: „ćwiczą” medycynę. Ćwiczymy budowanie aplikacji.
Chris Holmes

@Chris Holmes: Jestem naprawdę zirytowany pomysłem, że dyplom CSci ma sprawić, że zmienisz się w programistę gotowego do zatrudnienia w najnowszym gorącym języku. Jest dużo miejsca na tego rodzaju stopień lub certyfikat, prawdopodobnie znacznie więcej niż faktyczne CSci. Myślę, że tworzenie oprogramowania jest analogiczne do uprawiania tutaj medycyny, ale nie dostaniesz swojego MD z wydziałów biologii lub psychologii, tylko ze szkoły medycznej. Jest to bardzo szanowany stopień, ale to nie jest doktorat.
David Thornley,

3

Mam dyplom CS i przez cały rok mojego programu nie było programowania, tylko teoria. Powiedziano nam, że nie uzyskujemy dyplomu z programowania, ale z informatyki. Jeśli chcesz zostać programistą, idź na Community College.

Dowiedzieliśmy się o algorytmach, wzorcach projektowych i wielu teoriach dotyczących rozwiązywania problemów bez języka przestrzennego. Języki programowania przychodzą i odchodzą, ale teoria podkreślania pozostaje taka sama.

Tak więc, na twoje pierwsze pytanie, nie, nie czuję, że CS! = SE to copout. To jest fakt.

Na twoje drugie pytanie nie, nie sądzę, żebym to zrobił. Jak właściwie uczysz programowania? Poza pętlami, ifami, metodami, klasami i OOP, co byłoby „właściwym programowaniem” i jak sprawiłoby, że byłby odpowiedni dla jakiegokolwiek języka programowania? Potrzebujesz doświadczenia w pisaniu kodu, czegoś, na co 4 lata nie może cię przygotować.

Jedną rzeczą, którą bym zrobił, to zapewnienie klasy na temat rozwoju w realnym świecie. Kontrola źródła, śledzenie biletów / błędów, śledzenie kodu i cały ten jazz byłby dobrym początkiem, aby przygotować się wkrótce do oceny na to, co czeka ich w nowej pracy.

Myślę, że to od nas zależy, kiedy zatrudniamy nowego absolwenta, aby zrozumieć, że prawdopodobnie nie będą pisać nagradzanego kodu. Potrzebują wskazówek i wskazówek.


++ - doskonałe punkty. Zgadzam się, że fajnie byłoby, gdyby programy CS oferowały klasę lub dwie na temat tego „realnego świata”. Rozmawialiśmy o tym na moim uniwersytecie (w 1993 r.), Ale nigdy nigdzie nie poszło.
dash-tom-bang

Jak oczekiwano od Ciebie wykazania się biegłością na zajęciach składających się na rok teorii bez programowania? Czysto napisane egzaminy?
Carson63000,

@ Carson630000 - pisemne zadania, czasem pisanie diagramów stanu, czasem pisanie esejów wskazujących, jak podejdziemy i rozwiążemy problem lub jak zastosujemy różne koncepcje CS. Zmusiło nas to do zrozumienia teorii, a nie konkretnego języka programowania.
Tyanna

2

Ważne jest, aby uniwersytet zachował równowagę między wiedzą teoretyczną a umiejętnościami praktycznymi. Podczas różnych kursów nauczyłem się obu. W pierwszych latach było wiele matematyki i algorytmów / struktur danych. To, co nastąpiło, było wyborem: albo możesz kontynuować naukę informatyki (rodzaj artystycznej ścieżki, na której możesz na przykład uczestniczyć w kursach z wyrafinowanymi algorytmami dopasowywania łańcuchów) lub skoncentrować się na inżynierii oprogramowania. W tym czasie trzeba było zdobyć solidne podstawy programistyczne.

Wybrałem inżynierię oprogramowania, ponieważ nigdy nie interesowałem się abstrakcyjnymi problemami. Ale nawet ci, którzy lubili czystą informatykę, musieli:

  • programuj mały system plików w przestrzeni użytkownika, stwórz linuxmoduł jądra i zmodyfikuj samo jądro, napisz grę zorientowaną na obiekt SmallTalk,
  • napisać własny protokół komunikacyjny, a następnie wdrożyć jeden, wybrany przez nauczyciela (było naprawdę fajnie, gdy programy dwóch uczniów mogły łatwo się komunikować, chociaż wcześniej nie współpracowały)
  • stworzyć większy projekt w Javaczteroosobowym zespole,
  • zbudować funkcjonalny projekt programistyczny,
  • napisz kilka solidnych programów Cdo programowania równoległego (pomysły były abstrakcyjne, ale recenzje były dość surowe, jak utrata punktów za niedostarczenie odpowiedniego wyjścia, gdy program zawiódł, tak jak programpowinien zrobić dobry unix ),
  • stworzyć portal internetowy przy użyciu jakiegoś frameworka (wybraliśmy django, co sprawiło, że pokochałem ten frameworek)
  • stworzyć dość duży program, używając LAMP(ciągle mam koszmary php, ale używana postgresqlzamiast MySQLi jestem bardzo zadowolony wiedząc o tym DBMSteraz),
  • a jeśli ktoś wybierze, mógłby napisać program do swojej pracy magisterskiej - napisałem przy pomocy 10k-liniowego pythonprogramu komputerowego PyQt.

Może były inne projekty, ale teraz po prostu o nich zapomniałem.

Chodzi mi o to: wszystko zależy od szkoły. Bardzo nie lubię czystego podejścia do inżynierii oprogramowania, gdzie Javajest główny język. Musiałem kiedyś pomóc przyjacielowi, który uczęszcza do takiej szkoły i musiałem napisać program do programowania równoległego. Musiałem napisać do niego w zasadzie, bo mimo, że sizeof(some_string)w Cdaje długość łańcucha.

Będę szczery: nienawidziłem matematyki, odczuwałem ból, gdy musiałem przygotować się do zadań abstrakcyjnych, które miałyby być podawane na egzaminach z algorytmów / struktur danych. Ale daje mi to pewną przewagę: mogę myśleć w bardzo abstrakcyjny sposób. To tak, jakbyś uczył się sztuk walki i nie pilnował się (przynajmniej w tych, w których powinieneś). Trener po prostu przychodzi i uderza cię w głowę, gdy opuszczasz ręce, ponieważ zapomniałeś lub ponieważ jesteś zbyt zmęczony, aby je utrzymać. Ale po pewnym czasie po prostu je utrzymujesz. I naprawdę ciężko jest trafić cię w twarz. To samo dotyczy abstrakcyjnych problemów algorytmicznych. Zapoznaj się z treścią Wstępu do algorytmów, a naprawdę niewiele rzeczy zaskoczy Cię w pracy.


Brzmi jak dobry program. Trochę teorii. Dużo praktyki.
Mike Dunlavey,

1

Myślę, że odpowiedź brzmi tak (w pewnym sensie).

Chodzi o to, że nie można uczyć dzieci w krótkim czasie programowania. Powinny być rozważane przez programistów logiczne myślenie, jak rozwiązać (w mniejszej skali) problemy programisty.

Jestem pewien, że programy szkolne powinny zostać zmienione, jestem moim bardzo małym krajem „trzeciego świata”, na szczęście podejmowane są wysiłki, aby tak się stało. Jesteśmy pierwszym krajem, który wdrożył program OLPC; http://laptop.org/en/


1

Z własnego doświadczenia (w tej chwili jestem studentem) muszę powiedzieć tak, to wymówka. Wszyscy nazywają CS jako naukę, która uczy nas wszystkich podstaw komputerów, a SE jako specjalną gałąź w CS, która wyraźnie uczy programowania. Imo, każdy, kto ma BS w CS, musi wiedzieć, jak pisać dobry i zoptymalizowany kod (nawet jeśli programowanie nie jest jego specjalizacją). Więc tak, gdybym miał wszechmocną pozycję do podjęcia takiej decyzji, zmusiłbym studentów do zdobycia dobrych umiejętności programistycznych.


Mój stopień naukowy nosi tytuł Informatyka i Inżynieria oprogramowania i miał na celu dać ci to, co najlepsze z obu światów, tj. Być kompetentnym programistą i znać teorię na tyle, aby móc przejść do szkoły lub badań. Myślę, że to było dobre podejście.
Michael K,

1

Zakładając, że celem jest kształcenie dobrych inżynierów oprogramowania (programistów), ponieważ świat ich potrzebuje, czy można odpowiedzieć, mówiąc, co moim zdaniem powinno się uczyć?

Po pierwsze, jest to ważne, ponieważ obecnie transfer wiedzy jest bardzo nieefektywny. Gdy potencjalni programiści są na zajęciach, ich umysły są otwarte i chłoną to, czego się uczą. Jednocześnie profesorowie (ja byłem jednym z nich) zbyt często są zainteresowani wypełnianiem oferty absolwentów szkół uczniami, którzy potrafią pracować nad przedmiotami ezoterycznymi. Kiedy pojawia się zastrzeżenie, że studenci nie są przygotowani na rzeczywiste problemy, widziałem, jak profesorowie twierdzą, że to nie ich praca . To prawdziwa praca na świecie.

Czy kiedy studenci stają się programistami w prawdziwym świecie, chętnie uczą się od swoich nowych kolegów? Nie z mojego doświadczenia. Raczej chętnie głoszą ewangelię, którą nabyli w szkole. Pamiętam, jak jako student i młody praktykujący zastanawiałem się, jak ciężko będzie wspierać nowe pomysły wśród starych, zboczonych facetów. Teraz, gdy jestem starym, dziwnym facetem, widzę, jak trudno jest otworzyć oczy nowych programistów na różnicę między teorią a praktyką.

Byłem studentem inżynierii, mechaniki, a później elektrotechniki. Zasadniczą częścią tego było a) podstawy matematyczne oraz b) praktyczne rozwiązywanie problemów. Inżynieria oprogramowania powinna być taka, a nie tylko programowanie.

Myślę, że inżynierii oprogramowania (programowania) należy uczyć z wystarczającą ilością informatyki, aby być praktyczną wiedzą - podstawową teorią automatów i teorią informacji. Nie trzeba ich robić dogłębnie. Po nauczeniu podstawowych umiejętności programistycznych powinny powstać projekty współpracy o charakterze nietrywialnym. Istotną ich częścią powinna być propozycja i rozważenie alternatywnych rozwiązań konkretnych problemów, wraz z analizą zalet i wad, a nie tylko najnowszą religią, „następną wielką rzeczą” lub uniwersalnym rozwiązaniem. Wreszcie, powinna istnieć współpraca i partnerstwo między przemysłem a środowiskiem akademickim, aby pomysły i ulepszenia mogły być przekazywane w obie strony, znacznie poprawiając kontrolę jakości.


0

Ci, którzy potrafią; tych, którzy nie mogą uczyć.

Na moim uniwersytecie baza wiedzy nauczycieli jest bardzo niedobra. Widziałem, jak nauczyciele mają problemy ze zrozumieniem, jak reprezentować tabele półstrukturalne w XML, jednocześnie mając doktorat z projektowania baz danych. Widziałem mojego nauczyciela asemblera, który pyta mnie, co robi mój kod, kiedy to jego fragment kodu skopiowałem i wkleiłem. Widziałem, jak mój nauczyciel projektowania oprogramowania powiedział nam, że metoda Agile jest taka sama jak metoda kaskadowa, tylko szybciej, że model iteracyjnego procesu programowania ma i może mieć tylko 3 iteracje, ponieważ to właśnie obraz przedstawia tę książkę jako przykład. Jeden z moich nauczycieli nawet nie wiedział, co to jest oświadczenie elseif.

Nie wierzę, że „zarabiają” lub robią wymówki, naprawdę wierzę, że robią wszystko, co w ich mocy, dzięki swoim doświadczeniom, których mają niewielu.

Zgadzam się z innymi ludźmi, którzy piszą tutaj, że 4 lata to za mało, aby zostać doświadczonym programistą, ale doświadczenie moich nauczycieli nie wystarcza, by sprawić, że będą doświadczeni. Jest to bardzo podobne do Ender's Shadow, w którym Fasola zauważa, że ​​mierniki używane przez nauczycieli w szkole walki są nieskuteczne, ponieważ ostatnia wojna, która jest zasadą przewodnią, była zbyt krótka, aby naprawdę pokazać, co jest rzeczywiście potrzebne. Innymi słowy, nauczyciele robili, co mogli, ale nie mieli doświadczenia, aby wiedzieć, co jest naprawdę potrzebne, aby zostać dobrym dowódcą (lub dobrym programistą w tym przypadku).


3
Myślę, że wiele z twoich przykładów to oczywiście tylko przypadki, w których nauczyciel stara się uprościć sprawy dla własnej korzyści. Those that can, do; those that cannot, teach.W ogóle się z tym nie zgadzam: kariery akademickie i przemysłowe prowadzą do zupełnie innych stylów życia. Wiele światowych badań pochodzi od naukowców. I nie widzę sposobu, w jaki odpowiedziałeś na pierwotne pytanie.
Nikt

2
Co XML ma wspólnego z projektowaniem bazy danych, poza tym, że gdyby ktoś był tak mało zainteresowany wydajnością, mógł używać XML jako magazynu kopii zapasowych bazy danych? Nie wspominając o tym, że niektórzy nauczyciele mogą przegapić ten punkt (pamiętam kłócenie się z instruktorem w sprawie punktów usuniętych z powodu „nadmiernego komentowania”, kiedy program nauczania do tego punktu nauczał „komentować jak wiatr”), ale jest to trochę zawyżone. Jeśli ktoś chce nauczyć się języka Java, istnieją tańsze sposoby na zrobienie tego niż przechodzenie programu nauczania CS.
dash-tom-bang

1
Istnieje również fakt, że niektóre uniwersytety są gorsze od innych, a twój może mieć szczególnie zły dział CS. Tradycyjnie osoby z dyplomem ukończenia studiów wyższych były w stanie zarobić znacznie więcej pieniędzy w przemyśle niż uczelnie, więc ci z uczelni byli tymi, którzy naprawdę chcą tam być i tymi, którzy nie mogliby znaleźć pracy w prawdziwym świecie. Widziałem oba i podejrzewam, że stosunek jest różny na różnych uniwersytetach.
David Thornley,

@ dash-tom-bang, XML jest prawie doskonałym przykładem częściowo ustrukturyzowanych baz danych. en.wikipedia.org/wiki/Semi-structured_model
Malfist

1
XML używany w ten sposób jest nadal implementacją teorii bazy danych. To nie jest sama teoria.
dash-tom-bang

0

Informatycy i inżynierowie oprogramowania są różni. Naukowcy to ludzie, którzy wykonują szalone eksperymenty i opracowują algorytmy, które my inżynierowie oprogramowania wykorzystujemy, aby być lepszymi.

Pomyśl o chemikach przeprowadzających eksperymenty dla firmy farmaceutycznej. Nie dbają o to, jak masowo wytwarzać chemikalia. Nie dbają też o marketing, pakowanie, dystrybucję lub cokolwiek, co stanie się z lekiem po jego odkryciu. Do diabła, nawet nie dbają o proces certyfikacji. Jedyne, na czym im zależy, to znalezienie substancji chemicznej, która ma działanie, gdy podaje się ją badanym. Firma jest odpowiedzialna za przeniesienie go poza to.

Informatycy są jak chemicy. Wszystko, co robią, to testowanie teorii za pomocą kodu. Nie dbają o to, jak łatwy do utrzymania jest kod. Udowadniają teorię i przechodzą do następnej. Ktoś inny pakuje ten algorytm i czyni go użytecznym dla mas, a my mamy wizję MP3 lub komputer z Kinect lub streaming wideo na twoim iPhonie. Zatem CS! = SE jest poprawnym argumentem.

WRT druga część twojego pytania. Gdybym zaoferował dyplom z teorii muzyki, może istnieć wymagany kurs pisania piosenek lub coś takiego, ale nie wymagałoby to od nikogo studiowania instrumentu. Od ucznia zależy poszukiwanie potrzebnej mu wiedzy. Informatyka to nie inżynieria oprogramowania ... jeśli chcesz nauczyć się SE, podejmij podwójną specjalizację.


0

Edsger Wybe Dijkstra był holenderskim informatykiem.

Otrzymał nagrodę Turinga z 1972 r. Za podstawowy wkład w rozwój języków programowania , powiedział kiedyś:

„NAUKA KOMPUTEROWA NIE JEST WIĘCEJ O KOMPUTERACH NIŻ ASTROM JEST O TELESKOPACH”.

CS jest NAPRAWDĘ RÓŻNY OD SE. (CS! = SE).

CS to naukowiec, który nabył wiedzę na temat NAUKI KOMPUTERA.

NAUKA KOMPUTEROWA lub informatyka (czasami w skrócie CS) to nauka o teoretycznych podstawach informacji i obliczeń oraz praktycznych technik ich wdrażania i stosowania w systemach komputerowych. Często opisywana jest jako systematyczne badanie procesów algorytmicznych, które tworzą, opisują, i przekształcać informacje.

Informatyka ma wiele sub-dziedzin, na przykład:

  • Informatyka teoretyczna
  • Teoria obliczeń
  • Algorytmy i struktury danych
  • Elementy komputerowe i architektura
  • Wieloprocesowe
  • Nauki obliczeniowe
  • Sztuczna inteligencja
  • Systemy oprogramowania

Wielu z nas nie potrzebuje żadnej z tych umiejętności w codziennej pracy, a przynajmniej jej trochę.

SOFTWARE ENGINEER (SE) to zawód poświęcony projektowaniu, wdrażaniu i modyfikowaniu oprogramowania, dzięki czemu jest ono wyższej jakości, tańsze, łatwiejsze w utrzymaniu i szybsze w budowie. Jest to „systematyczne podejście do analizy, projektowania, oceny, wdrażania, testowania, konserwacji i ponownej inżynierii oprogramowania poprzez zastosowanie inżynierii oprogramowania”

Jako specjalista od CS powinien mieć wiedzę pozwalającą na zarządzanie naprawdę złożonym problemem bez znajomości naprawdę dobrego języka programowania. IMHO tutaj możemy otworzyć kolejny wątek, w którym STOPIEŃ jest dla mnie TYLKO PUNKTEM STARTOWYM, a nie CELEM KOŃCOWYM.

Jako wiedza SE ma on mieć wiedzę, aby zarządzać produkcją tego naprawdę złożonego problemu i zarządzać rozwojem zespołu lub projektu na ten temat.

Razem dokonaj badań naukowych przeprowadzonych przez CS w dziedzinie nauk stosowanych przy pomocy SE.

Nie mam na myśli, że CS jest lepszy niż SE, mam na myśli CS! = SE.

Tego rodzaju pytanie jest tym samym pytaniem, które ludzie niebędący komputerami zadają sobie, gdy pytają cię, dlaczego, jako programiści, nie jesteś w stanie naprawić telefonicznie problemu programu X, Y, Z w systemie operacyjnym J, M, N. ;)

Właściwie nudzę się kodowaniem po 10 latach rozwoju systemu uniksowego w dziedzinie bezpieczeństwa i po przeczytaniu tego pytania rozumiem o co chodzi, muszę studiować więcej informatyki i mniej języka komputerowego i systemu komputerowego lub protokołu!

Nikt w mojej pracy nie poradzi sobie z różnicą w SE i CS! to naprawdę złe rzeczy.

Jeśli uważasz, że CS może być usprawiedliwieniem złej umiejętności programowania, naprawdę nie rozumiesz, czym jest CS, a co SE.

Przypuszczam, że jesteś SE, czy wiesz na przykład, że cały język, cały paradygmat i wszystkie związane z nim elementy komputerowe mogą być wyrażone matematycznie w zestawie częściowej funkcji rekurencyjnej i niezależnie od tego, czego nauczysz się nowego języka, KAŻDEGO NOWEGO JĘZYKA, jesteś tylko uczysz się nowej abstrakcji w stosunku do SAME częściowej funkcji rekurencyjnej?

baw się dobrze :)

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.