Rozwój poza znajomością narzędzi i języka

1

Dzień dobry, a może dobry wieczór w zależności kto o jakiej porze będzie to czytał.

Pomijając to, że programista powinien znać język oraz biblioteki, w trakcie tworzenia oprogramowania dochodzą takie pojęcie jak np. cache, aspekty itp. Pojęcia te nie zazwyczaj nie są przedstawiane w kursach programowania. Pojawiają się, ponieważ trzeba rozwiązać jakiś konkretny user-case.
W zależności jak długo tworzy się produkt, coraz więcej takich technicznych zagwostek wychodzi.
Jak zaczynałem swoją pracę nie wiedziałem co to rest. Potem dziwowałem się na słowo cache. A o aspektach nawet nie śniłem.
Tak więc moje pytanie kieruję do bardziej doświadczonych użytkowników forum. Jakie jeszcze "kroki" mogą pojawić się w trakcje tworzenia produktu, a warto je znać.

Z mojego doświadczenia wymienię:

Takich rzeczy jak rest, podstawy baz danych + otoczka około językowa nie rozpatruję, gdyż w każdym poradniku się one pojawiają.

  1. Cache
  2. Aspect
  3. JWT, Oauth
  4. Rabbit / Kaffka
  5. WebSocket
  6. Solenie, hashowanie haseł
  7. Silnik wyszukiwania, ElasticSearch
  8. Tworzenie kontenerów - Docker
  9. Tworzenie monolitu lub aplikacji składającej się z wielu mikro-serwisów
  10. Transakcje, poziomy izolacji (bazy danych)

Jeżeli ktoś posiada większe doświadczenie, proszę o wypisanie w podobny sposób do mojego. Ewentualnie edytuję post i dodam nowe informacje. Myślę, że pomoże to wielu początkującym, którzy myślą że wszystko wiedzą odnośnie tworzenia aplikacji. A tu zonk, znajomość Javy / C# nie wystarczy bo co odpowiedzieć na pytanie:

"Czy trzeba za każdym razem wysyłać zapytanie do bazy aby dostać odpowiedź?"

  • "Panie, niee! Jam senior Java dev, zróbmy zmienna statyczna i do niej wsadzajmy rezultaty, potem będziemy tylko odczytywać"

"Zapisz hasło w bazie"

  • Zapisane w postaci "password" - a może by to jakoś zabezpieczyć?

To wszystko wychodzi w trakcie. Do tego potrzeba już doświadczenia, które pokaże możliwe do napotkania problemy.

1
  1. Narzędzie CI/CD (Jenkins, Bamboo, Travis)
  2. Znajomość frameworka do BDD (Cucumber, SpecFlow) - czy to dookoła językowe?
  3. Znajomość TDD i frameworka testowego (NUnit, JUnit, XUnit) - czy to dookoła językowe?
  4. Znajomość gita.
  5. Znajomość angielskiego.
  6. Znajomość metodyk pracy (Scrum, Kanban, Waterfall, DevOps).
  7. Znajomość interpretatora poleceń (PowerShell, Bash).
  8. Znajomość terminów związanych z testowanie oprogramowania. Piramida testów. Tworzenie unit testów zgodnie ze sztuką.
  9. Umiejętność wirutalizacji (HyperV, VMware, VirtualBox).
  10. Znajomość systemu (Windows, Linux, OS).
  11. Znajomość IDE (np. Visual Studio, PyCharm) i narzędzi do refaktoryzacji kodu (np. ReSharper).
  12. Znajomość technologii chmurowych (Google Cloud, Azure, AWS).
  13. Znajomość narzędzi do orchestracji (Kubernetes).

Oczywiście nie twierdzę, że to wszystko ma umieć junior, czy mid, ale generalnie płytką wiedzę z każdego z zagadanień mieć warto. Specjalizacja to inny temat.

1 użytkowników online, w tym zalogowanych: 0, gości: 1