Zabezpieczenie się na przyszłość podczas nauki programowania [zamknięte]

10

Chcę nauczyć się programować w sposób „przyszłościowy”, jeśli chcesz. Podczas gdy Windows dominuje na rynku systemów operacyjnych dla komputerów stacjonarnych (na razie), oczywiście nauka języka / frameworków / interfejsów API ma wiele wartości - może to ulec zmianie w miarę pojawiania się nowych urządzeń lub Windows strzela samotnie w stopę (ponad przyjazne zapowiedzi systemu Windows 8 nie wyglądają zbyt zachęcająco ...).

Czy miałbym rację, myśląc, że solidna znajomość C / C ++ w zakresie logiki zaplecza / programowania niskiego poziomu i tym podobnych, w połączeniu z niezwykle przenośnym językiem, takim jak Java dla GUI i tak dalej, byłby dobrą podstawą do rozwoju oprogramowania które okażą się przydatne na większości systemów? - Mówię o komputerach stacjonarnych, tabletach, telefonach.

Anonimowy
źródło
11
Nie ma czegoś takiego
Job
Zbuduj jaskinię i wypełnij ją książkami.
Edward Strange
4
Zbuduj jaskinię i napełnij ją puszkami. Najbardziej przyszłościowym programistą jest programista, który żyje po apokalipsie.
Tom Anderson
1
Nie ucz się języków programowania ani kodowania, ale głównie ucz się programowania, a to zajmuje wiele lat , prawie dziesięć, i powinieneś kontynuować naukę przez całe życie
Basile Starynkevitch

Odpowiedzi:

31

Jeśli chcesz być przyszłościowy, najlepszą radą, jaką mogę ci dać, jest nie angażowanie się w technologię.

Więc nie ucz się API na ślepo. Dowiedz się, jak zostały poczęte. Jakie są filozofie tej sceny? Jakie są ich zalety i wady? Myśl ogólnie o oprogramowaniu, a nie o konkretnej technologii.

Możesz także pracować nad dobrą koncepcją programu, przejście do OOP, a AOP to dobry wybór IMO. Ale nie tylko rozumiem mechanizm, naprawdę pracuj nad filozofią stojącą za mechanizmem.

Nie zaniedbuj ogólnej informatyki, takiej jak struktury danych i algorytmy, ponieważ stanowią one wiedzę na temat różnych technologii, która jest zawsze przydatna.

Idź też na dobre praktyki. Często masz kilkanaście sposobów na zrobienie czegoś, ale większość z nich to bzdury: podatne na błędy, trudne w utrzymaniu, trudne do zrozumienia później lub przez innego programistę itp. . . Zazwyczaj kod jest trudniejszy do odczytania niż do napisania. Dowiedz się, jak poświęcić trochę więcej czasu na pisanie, aby ułatwić czytanie (ponieważ będziesz czytać kod więcej niż piszesz).

Naucz się skutecznych technik debugowania (inteligentne korzystanie z dziennika i debugera) i testowania (jak pisać kod, który można łatwo przetestować jednostkowo i jak zautomatyzować te testy).

Następnie potrzebujesz ogólnego zaplecza technologicznego. Mówię o bardzo szerokiej wiedzy, na przykład o tym, jak działa procesor (brak pamięci podręcznej lub przewidywanie gałęzi to dobry początek), o systemach UNIX, o protokołach sieciowych, takich jak IP, TCP i Ethernet itp. . .

Na koniec naucz się, jak się uczyć. Jeśli wiesz, jak się uczyć, możesz się dostosować.

Będziesz potrzebować solidnej wiedzy na temat konkretnych technologii, aby znaleźć pracę, ale te są bardzo przestarzałe (pomyśl na przykład o COBOL lub programowaniu internetowym w czasie wojny IE / Netscape). Więc nie polegaj na nich, aby były przyszłościowe. Będą kluczem do zatrudnienia, ale zdecydowanie nie to, co czyni świetnego programistę i co sprawi, że twoje umiejętności będą trwałe z czasem.

EDYCJA: Jeśli dopiero zaczynasz, zdecydowanie powinieneś coś zrobić. Cokolwiek, naprawdę. Gra taka jak Tetris lub wąż to dobry początek i świetna zabawa. Jeśli nie załatwisz sprawy, poświęcisz dużo czasu na naukę i naprawdę nie zdobędziesz doświadczenia potrzebnego do pełnego zrozumienia tego, czego się uczysz.

Dajmy przykład z wzorami projektowymi. Wzory projektowe są świetne i powinieneś definitywnie ich użyć. Jednak nadużywanie sprawi, że kod będzie skomplikowany i trudny do zrozumienia. Będziesz musiał zmierzyć się z problemem, który rozwiązuje wzór projektowy i stracić trochę czasu na jego rozwiązanie lub jego skutki uboczne, aby w pełni zrozumieć, o czym jest wzór projektowy. Wzorce projektowe muszą być stosowane jako małe refaktoryzacje w miarę wzrostu kodu. I będziesz wiedział, kiedy wzorzec projektowy jest potrzebny, gdy jego korzyść jest większa niż złożoność kodu wywołana jego użyciem. To wymaga doświadczenia.

Zdecydowanie więc załatw sprawy, uczą się na własnych błędach. Nie mogę nalegać na więcej: ZRÓB RZECZY !

deadalnix
źródło
Dobra ... Świetna * odpowiedź i coś, co rozumiem - rozumiem potrzebę zrozumienia tematu „programowania” w ogóle, a nie każdego z wymienionych przez ciebie tematów. Nie martwię się zbytnio o znalezienie pracy w tej dziedzinie, ponieważ mam dobrze płatną listę zarządzającą witryną e-commerce, z której jestem zdecydowanie zadowolony. Moje zainteresowanie programowaniem sklasyfikowałbym jako poważne hobby, chociaż chciałbym je wykorzystać do usprawnienia pracy zarówno mojej, jak i innych osób.
Anonimowy
Dodano edycję, aby uczynić wszystko jaśniejszym z punktu widzenia początkującego.
deadalnix
4

Tym, co odróżnia dobrych programistów od złych, jest ich zdolność do programowania w DOWOLNYM języku. Jak zauważyli inni plakaty, znajomość dowolnego znaczącego języka obiektowego zapewni narzędzia do tworzenia świetnych programów i do popytu.

Również jeśli nadal jesteś w szkole, upewnij się, że masz jakieś lekcje pisania. Najlepsi inżynierowie i programiści są również tymi, którzy dobrze komunikują swoje pomysły.

Gdy zaczniesz działać, najlepszą rzeczą, aby zapobiec przestarzałości, jest nadążanie za aktualnymi trendami. Nie obawiaj się odejść z pracy dla innej, jeśli nie używają aktualnych technologii lub mają okropny proces itp. Najgorszą rzeczą, jaką możesz zrobić w swojej karierze, jest praca przy starych technologiach lub słabych procesach.

Bill Leeper
źródło
Rozumiem, że dobra znajomość pojęć programistycznych jest niezbędna, aby być dobrym „w tej grze”, ale posiadanie znajomości faktycznej składni języka / standardowej biblioteki i tego, co nadal nie jest niezbędne do korzystania ze wszystkich funkcji języka (w stosownych przypadkach). Niestety nie jestem jeszcze w szkole, pracuję - choć, jak sądzę, powiedziałem w poprzednim komentarzu, jestem dość dobrze opłacany, więc nie martwię się zbytnio o ten aspekt. Dziękuję za odpowiedź. =)
Anonimowy
4

Odpowiedź od @deadalnix jest dobra. Dodałbym do tego trzy rzeczy:

  1. informacje wielokrotnego użytku pochodzą od środka, a nie od skrajności. Minsky szczegółowo przedstawia to w swojej książce Society of Mind, dlatego streszczę to następująco: górna warstwa jest zbyt blisko konkretnego rozwiązania, aby większość z nich mogła zastosować się do następnego problemu, podczas gdy dolna warstwa jest zbyt blisko konkretna platforma dla większości z nich, aby zastosować się do następnego problemu. W środkowej warstwie znajdują się informacje wielokrotnego użytku - algorytmy, wzorce, taksonomie, taktyki, strategie, techniki, organizacje, protokoły i inne, które są na ogół przydatne do rozwiązywania podobnych problemów niezależnie od dziedziny (górna warstwa) lub platformy (dolna warstwa) ). Uwaga: te warstwy nie mają nic wspólnego z architekturą trójwarstwową, mówimy tutaj o semantyce problem-przestrzeń / rozwiązanie-przestrzeń.
  2. nie będziesz wiedział, co jest wspólne / ogólne / wielokrotnego użytku, dopóki nie zobaczysz co najmniej dwóch takich przypadków. Więc przestudiuj, jak Windows działa wewnętrznie, a następnie przestudiuj, jak działa Linux / Unix i porównaj oba. Wspólne rzeczy są wielokrotnego użytku. Różnymi rzeczami są decyzje projektowe, które mogą również skutkować uzyskaniem spostrzeżeń wielokrotnego użytku.
  3. w przypadku dowolnej sytuacji lub problemu zastanów się, jak możesz wdrożyć rozwiązanie, a następnie porównaj rozwiązanie fotela z rzeczywistym rozwiązaniem i spróbuj zrozumieć możliwe przyczyny różnic.
Steven A. Lowe
źródło
Świetne dodatki!
deadalnix
2

Ponieważ jesteś na początku, powiedziałbym, po prostu naucz się języka, nie ma znaczenia, który z nich. Trudność nie polega na samym języku (składni), ale na zrozumieniu pojęć; a te ogólne koncepcje programowania dotyczą wszystkich języków programowania, więc nauka drugiego i trzeciego i czwartego (...) języka będzie o wiele łatwiejsza.

Tak więc na początku nie myśl zbyt wiele o byciu „przyszłościowym”. Jednak w miarę postępów staraj się biegle posługiwać się językami bardzo różniącymi się od siebie. Zasadniczo (tak jak powiedziałeś) powinieneś być pod ręką z językiem niskiego poziomu (-ish), takim jak C / C ++, językiem programowania wyższego poziomu, takim jak Java, a także językiem skryptowym (Python, Ruby itp.). Jeśli chcesz zagłębić się w naprawdę zaawansowane rzeczy, musisz także znać Zgromadzenie.

Ale nie stresuj się teraz zbytnio na ten temat. Nauka programowania zajmuje lata. Na razie wybierz język Java, C # lub dowolny inny i wybierz go. :)

Paweł
źródło
Podoba mi się „wybierz jeden” i wybieraj to podejście… Prawdopodobnie go przyjmę. Czy może wybrać jeden język niskiego poziomu (C), jeden język wysokiego poziomu (Java) i jeden język skryptowy (Python) i uczyć się wszystkich 3 jednocześnie?
Anonimowy
Czy dopiero zaczynasz programować? Więc nie ucz się więcej niż jednego języka na raz, to tylko wprawi Cię w zakłopotanie. Na początku musisz nauczyć się pojęć, a nie języków. Powinieneś przejść do nowych języków tylko wtedy, gdy jest to wymagane. Na przykład dopiero niedawno poczułem potrzebę przechodzenia na języki skryptowe, a to dlatego, że zdecydowałem, aby moja gra była skryptowalna w Pythonie.
Paul
Nie powiedziałbym, że dopiero zaczynam - znałem html / css od lat (choć tak naprawdę nie kwalifikują się / nie mają znaczenia) i od kilku miesięcy buduję strony PHP / MySQL. Tworzenie stron internetowych, z którymi mogę się „obejść”, zajmuję się tworzeniem oprogramowania. Zważę jednak na to, co mówisz.
Anonimowy
If you want to go into the really advanced stuff you must also know Assembly- Możesz to zrobić na dowolnym poziomie, wyzwania są po prostu inne.
sixtyfootersdude
1

Czy miałbym rację, myśląc, że solidna znajomość C / C ++ w zakresie logiki zaplecza / programowania niskiego poziomu i tym podobnych, w połączeniu z niezwykle przenośnym językiem, takim jak Java dla GUI i tak dalej, byłby dobrą podstawą do rozwoju oprogramowania które okażą się przydatne na większości systemów?

Mówię o komputerach stacjonarnych, tabletach, telefonach.

Nie. Nic z tego nie pomoże.

Dobra znajomość struktur danych i algorytmów - niezależnie od konkretnego języka programowania - jest cenniejsza niż „programowanie na niskim poziomie i tym podobne”.

„Niezwykle przenośny język, taki jak Java”, jest równie przenośny jak C i nie pomaga. Next Big Thing będzie tak różne od tych językach, że super-przenośny Java będzie to zobowiązanie, a nie atut.

Mac OS (komputer stacjonarny, tablet i telefon) odbywa się w Celu C. To może być miejsce, od którego można zacząć.

Windows (komputer stacjonarny, stół i telefon) jest wykonywany w C #. To może być miejsce na początek.

S.Lott
źródło
Porównywałem Javę do C jako oba języki przenośne - Java była odpowiednio poziomem niskim i wysokim, co jest w pewnym sensie prawdą ... Jak sam powiedziałeś, Mac OS = Obj-C, Windows = C #, który jest gdzie nie chcę się specjalizować w jednym i odciąć moich opcji, lub obu i bądź „mistrzem żadnego”, jeśli złapiesz mój dryf. Doceniam to, co mówisz, ale solidna znajomość struktur danych i algorytmów bez znajomości języka programowania jest tak samo bezużyteczna, jak znajomość języka programowania bez tego drugiego.
Anonimowy
@Chris Bridgett: Całkowicie się mylisz. Istnieją uniwersalne podstawy, a język programowania nie jest żaden. Najpierw naucz się podstaw. Następnie język (lub system operacyjny) po prostu lukruje ciasto. Podstawy to ciasto i są przyszłościowe.
S.Lott