Porównując inżynierię oprogramowania z inżynierią lądową, byłem zaskoczony, widząc inny sposób myślenia: każdy inżynier budownictwa wie, że jeśli chcesz zbudować małą chatkę w ogrodzie, możesz po prostu zdobyć materiały i przejść do budowy, a jeśli chcesz zbudować dom 10-kondygnacyjny (lub, na przykład, coś jak ten ) trzeba zrobić sporo matematyki, aby mieć pewność, że nie będzie się rozpadać.
W przeciwieństwie do tego, rozmawiając z niektórymi programistami lub czytając blogi lub fora, często znajduję szeroko rozpowszechnioną opinię, którą można sformułować mniej więcej w następujący sposób: teoria i metody formalne są dla matematyków / naukowców, podczas gdy programowanie polega bardziej na wykonywaniu zadań .
Zwykle sugeruje się tutaj, że programowanie jest czymś bardzo praktycznym i chociaż chociaż formalne metody, matematyka, teoria algorytmów, czyste / spójne języki programowania itp., Mogą być interesującymi tematami, często nie są potrzebne, jeśli wszystko, czego się chce, to dostać rzeczy gotowe .
Zgodnie z moim doświadczeniem powiedziałbym, że chociaż nie potrzebujesz wiele teorii, aby stworzyć 100-liniowy skrypt (chatę), w celu opracowania złożonej aplikacji (10-piętrowy budynek) potrzebujesz projektu strukturalnego, cóż, -definiowane metody, dobry język programowania, dobre podręczniki, w których można wyszukiwać algorytmy itp.
Tak więc teoria IMO (odpowiednia ilość) jest jednym z narzędzi do wykonywania zadań .
Moje pytanie brzmi: dlaczego niektórzy programiści uważają, że istnieje kontrast między teorią (metody formalne) a praktyką (wykonywanie zadań)?
Czy inżynieria oprogramowania (oprogramowanie budowlane) jest postrzegana przez wielu jako równie łatwa w porównaniu, powiedzmy, inżynieria lądowa (budowanie domów)?
Czy te dwie dyscypliny są naprawdę różne (oprócz oprogramowania o kluczowym znaczeniu, awaria oprogramowania jest znacznie bardziej akceptowalna niż awaria budynku)?
Staram się podsumować, co zrozumiałem z dotychczasowych odpowiedzi.
- W przeciwieństwie do inżynierii oprogramowania, w inżynierii lądowej jest o wiele bardziej jasne, jaka teoria (modelowanie, projektowanie) jest potrzebna do określonego zadania.
- Wynika to częściowo z faktu, że inżynieria lądowa jest tak stara jak ludzkość, podczas gdy inżynieria oprogramowania istnieje już od kilku dziesięcioleci.
- Innym powodem jest fakt, że oprogramowanie jest bardziej niestabilnym rodzajem artefaktu, z bardziej elastycznymi wymaganiami (może wystąpić awaria), różnymi strategiami marketingowymi (dobry projekt można poświęcić, aby szybko wprowadzić go na rynek) itp.
W konsekwencji znacznie trudniej jest ustalić, jaka właściwa ilość projektu / teorii jest odpowiednia w inżynierii oprogramowania (za mało -> niechlujny kod, za dużo -> nigdy nie mogę się skończyć), ponieważ nie ma ogólnej reguły i tylko (dużo) doświadczenia może pomóc.
Więc jeśli poprawnie interpretuję twoje odpowiedzi, ta niepewność co do tego, ile teorii jest naprawdę potrzebna, przyczynia się do mieszanych uczuć miłości / nienawiści, które niektórzy programiści mają względem teorii.