JavaRush /Blog Java /Random-PL /Przerwa kawowa #83. Jakie cechy charakteru wyróżniają wyb...

Przerwa kawowa #83. Jakie cechy charakteru wyróżniają wybitnych programistów. Prosty przewodnik programowania: funkcje i metody

Opublikowano w grupie Random-PL

Jakie cechy charakteru wyróżniają wybitnych programistów?

Źródło: Hackernoon Co odróżnia świetnych programistów od dobrych? Odkryłem dwie cechy charakteru, które łączą wielkich programistów: byli konsekwentni i wytrwali. Cechy te same w sobie nie są oznaką geniuszu i jeśli zajdzie taka potrzeba, każdy może je rozwinąć, a następnie zastosować w swojej pracy. Przerwa kawowa #83.  Jakie cechy charakteru wyróżniają wybitnych programistów.  Prosty przewodnik programowania: funkcje i metody - 1

1. Bądź konsekwentny

Dobrzy programiści nie programują okazjonalnie. Mają raczej określony harmonogram doskonalenia swojej wiedzy i umiejętności w czasie wolnym: przed lub po pracy oraz w weekendy. Na przykład znany mi programista spędza pierwsze dwie godziny dnia – sześć dni w tygodniu – na osobistych projektach lub zadaniach związanych z nauką. Nie oznacza to, że tacy ludzie piszą kod przez całą dobę. Oni, jak każdy z nas, mają czas na swoje życie osobiste, obowiązki i zainteresowania. Ale są konsekwentni: programowanie stało się ich nawykiem. Jak możesz stać się konsekwentny? To jest to, co wielu z nas stara się osiągnąć. Odkryłem, że można to zrobić na kilka sposobów. Najpierw określ liczbę godzin tygodniowo, które możesz przeznaczyć na programowanie. Ta liczba to Twój tygodniowy „przebieg programu”. Jako były biegacz długodystansowy biegałem określoną liczbę mil tygodniowo. To był mój cotygodniowy bieg. Teraz mam doświadczenie w programowaniu: to jest liczba godzin, które spędzam na programowaniu w każdym tygodniu. Większość ludzi zaniedbuje ten etap. Od razu przechodzą do projektu, który chcą zrealizować lub tematu, który chcą studiować, nie myśląc o tym, jak znajdą na to czas. Dzięki temu pracują w nocy lub 16 godzin na dobę. Z takim podejściem jest problem: nie jest ono trwałe w dłuższej perspektywie. Doskonalenie swoich umiejętności programisty nie jest czymś, co można zrobić w ciągu pracowitego tygodnia lub dwóch. Zamiast tego musisz stale nad tym pracować, przez długi czas. Dlatego tak ważne jest określenie swojego doświadczenia w programowaniu. Aby to zrobić, rozważ użycie dziennika czasu, aby zobaczyć, gdzie i jak spędzasz czas. Weź kartkę papieru i zapisz wszystko, co robisz każdego dnia i jak długo to robisz, włączając w to sprawdzanie mediów społecznościowych lub poczty elektronicznej przez pięć minut. Dzięki temu łatwiej będzie Ci znaleźć wolne terminy w swoim grafiku. Być może uda Ci się znaleźć trochę dodatkowego czasu na prace domowe lub oglądanie telewizji. Następnie możesz stworzyć plan szkolenia z programowania, którego musisz się trzymać. Plan treningowy to jeden z najskuteczniejszych sposobów zachowania spójności. Pozwala na wcześniejsze rozesłanie wszystkich szczegółów. Wystarczy, że każdego dnia będziesz wprowadzać ten plan w życie. Moje plany treningowe dotyczące biegania określały, ile mil muszę przebiec każdego dnia i jak szybko muszę je przebiec. Teraz tworzę programistyczne plany treningowe, które służą temu samemu celowi: mówią mi, co mam robić każdego dnia. Pod koniec dnia otwieram Evernote na komputerze i ustalam harmonogram na następny dzień. Oto przykład:
6:30 - 8:30 - Programowanie
  1. Recenzja talii fiszek w języku Python Anki (20 minut).
  2. Rozwiązywanie problemu danych w chmurze programu Word.
Postępuję zgodnie z tym procesem przez cały dzień pracy: wyznaczam ilość czasu, jaki spędzę nad zadaniem i co chcę w tym czasie osiągnąć. Tworzę również miesięczny plan treningowy. Wymieniam w nim trzy rzeczy, które chcę osiągnąć, nauczyć się lub ukończyć w nadchodzącym miesiącu. Robiłem plany kwartalne. Ale potem odkryłam, że w ciągu trzech miesięcy zbyt wiele może się zmienić. Miesięczny plan zapewnia wystarczająco dużo czasu na wykonanie znaczących kroków w treningu.

2. Bądź wytrwały

Drugą cechą dobrych programistów jest wytrwałość. Przeglądają wszystkie możliwości rozwiązania problemu i znajdują odpowiedź. To wydaje się być tajemnicą. Wielcy programiści, których spotkałem, mają niesamowitą zdolność rozwiązywania problemów i znajdowania różnych rozwiązań lub rozwiązań trudnej sytuacji. Krótko mówiąc, mieli system rozwiązywania problemów. W szkole średniej nigdy nie miałem systemu rozwiązań. Ilekroć na lekcjach matematyki pojawiał się jakiś problem, od razu się w niego zagłębiałem. Potem kontynuowałem to, gdy zacząłem programować. Brak planu. Nie ma żadnego systemu. Nie ma czasu na myślenie. Żadnej analizy. Nic więc dziwnego, że w obu przypadkach niepotrzebnie kręciłem kołami i ciągle wpadałem na przeszkody. Mam teraz system rozwiązywania problemów, który pomaga mi rozbić problem i znaleźć różne opcje. Na przykład pierwszym krokiem w procesie rozwiązywania problemu jest określenie problemu. To jest pierwszy. Kiedy już zrozumiem problem, skupiam się na każdym z poniższych kroków.
  • Analiza danych wejściowych i oczekiwanych wyników.
  • Stworzenie algorytmu działania.
  • Pisanie pseudokodu.
  • Rozwiązanie uproszczonej wersji problemu.
Mam nadzieję, że zrozumiesz pomysł. Etapy mogą nie być łatwe, ale można je pokonać. Rozwiązując trudny problem stajemy się lepszymi ludźmi. Wzbudza także pewność siebie. Gdy rozwiążemy jeden trudny problem, jesteśmy gotowi na nowe.

3. Stosunek do problemów?

Na drodze do stawania się lepszymi programistami musimy wziąć pod uwagę jeszcze jedną rzecz: nastawienie. Trzeba mieć świeże podejście do problemów i niejasności. Pewnego dnia zadałem starszemu programiście kilka pytań na temat problemu, nad którym utknąłem. Byłem zdziwiony i rozczarowany. Początkowo deweloper również był zdziwiony. Jednak jego odpowiedź mnie zszokowała. „Wow, to fajny problem” – powiedział. Jego zainteresowanie wzbudziły szczegóły, które odkrył. Nie oznacza to, że wielcy programiści również nie utkną w jakimś problemie. Utkną. Ale różnica polega na podejściu. Lekcja, jaką wyciągnąłem tego dnia, była następująca: dobrzy programiści nie boją się wyruszać w nieznane. Rozumieją, że na pewno nauczą się czegoś nowego, studiując ten problem. Wiele możemy się nauczyć studiując innych programistów. Ale ostatecznie odpowiedzialność spoczywa na nas: musimy codziennie brać się do pracy i podejmować działania.

Prosty przewodnik programowania: funkcje i metody

Źródło: DZone Co czyni funkcję lub metodę dobrą? Wymaga to połączenia czynników, z których każdy ma znaczenie. Przyjrzyjmy się czterem najważniejszym. Przerwa kawowa #83.  Jakie cechy charakteru wyróżniają wybitnych programistów.  Prosty przewodnik programowania: funkcje i metody - 2

Znaczące imię

Funkcje powinny mieć nazwy opisujące ich przeznaczenie lub funkcjonalność. Gdy funkcja ma znaczącą nazwę, łatwo jest ją odczytać i zrozumieć jej cel. Na przykład, jeśli celem funkcji jest znalezienie klienta po ID, dobrą nazwą może być findCustomerById(id: String) . Inną opcją może być findCustomer(id: String) . Tutaj podpis funkcji oznacza, że ​​kupującego można znaleźć po jego identyfikatorze. Słowo „znajdź” oznacza również, że kupujący może zostać znaleziony lub nie. Jeśli nazwa funkcji zostanie zmieniona na getCustomer(id: String), wówczas jej znaczenie ulegnie zmianie, ponieważ obecnie nie oznacza ona wycofania zmian; klient został znaleziony lub funkcja kończy się niepowodzeniem i prawdopodobnie zgłasza wyjątek. Obie nazwy są poprawnymi nazwami funkcji, ale mają różne znaczenia, dlatego ich implementacje również muszą być różne.

Jak najmniej parametrów

Lubię przestrzegać zasady trzech. Oznacza to, że funkcja musi mieć trzy lub mniej parametrów. Gdy funkcja wymaga więcej niż trzech parametrów, należy ją przepisać, a parametry umieścić w pojemniku na dane, takie jak jej klasa, klasa danych, obiekt JavaScript i tak dalej. Jest to łatwy sposób na zmniejszenie liczby parametrów i uporządkowanie danych w aplikacji. Weźmy na przykład funkcję, która ma identyczne zachowanie, ale różne podpisy:
fun addCustomer(
  firstname: String,
  lastname: String,
  streetAddress: String,
  city: String,
  zipCode: String
)
Oto inna opcja:
data class Address(
  val street: String,
  val city: String,
  val zipCode: String,
  val streetNumber: String
)

data class Customer(
  val firstname: String,
  val lastname: String,
  val address: Address
)

fun addCustomer(customer: Customer)

Funkcja robi to, czego się oczekuje

Funkcja musi robić to, czego się od niej oczekuje. Nie więcej nie mniej. Jeżeli funkcja nazywa się findAddress(szerokość, długość geograficzna) to powinna znaleźć adres pod podanymi współrzędnymi lub, jeśli adresu nie da się przekonwertować na współrzędne, zwrócić None , null , pusty lub inny typ odpowiedni dla danego języka. Funkcja nie powinna robić niczego innego, na przykład wyszukiwać pobliskich adresów lub tworzyć rekordów współrzędnych. Funkcja może mieć skutki uboczne, takie jak rejestrowanie lub analiza, ale są one niewidoczne dla danych wejściowych i wyjściowych.

Funkcję można przetestować

Funkcje muszą być zaprojektowane w taki sposób, aby można je było przetestować. W poprzednim przykładzie kodu zdefiniowałem funkcję addCustomer , ale nie zdefiniowałem żadnego typu zwracanego, więc jej testowalność jest wątpliwa. Oczywiście można to przetestować za pomocą makiet lub szpiegów, w zależności od wewnętrznej implementacji. Można to osiągnąć po prostu podając typ zwracany:
fun addCustomer(customer: Customer): Customer
Dzięki tej sygnaturze funkcji możemy zwrócić dodaną jednostkę klienta do wywoływanego komponentu. Możemy także sprawdzić, czy funkcja robi z tym obiektem klienta to, co powinna (czyli przypisać mu unikalny identyfikator).
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION