Jakość kodu w waszych projektach/w waszej pracy

Jakość kodu w waszych projektach/w waszej pracy
Jak oceniasz jakość kodu w twoich projektach (* możesz oddać maksymalnie 4 głosy)
bardzo dobra
10%
10% [6]
dobra
33%
33% [21]
może być
40%
40% [25]
beznadzieja
17%
17% [11]
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Witam
spotkałem się z opinią w mojej obecnej jeszcze pracy(na szczęście do końca lipca...) że jakośc kodu jest slaba w dużej ilości firm
Chciałbym spytać się jak jest z tym u was, czy to jest tak że trafiłem na "złych" ludzi, czy po prostu nie ma co się łudzić i przez terminy przez 80% czasu będę miał do czynienia ze spaghetti?
W obecnej firmie dopóki samemu tworzyłem kod był w miare czytelny, ale niestety jak zobaczyłem co inni tworzą i to jeszcze senior developerzy to się załamałem...


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
SP
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 5 lat
  • Postów:120
1

W mojej obecnej pracy "kod wygląda jak kod" tzn. często trzeba go przeczytać, żeby widzieć co robi (nazwy metod niekoniecznie wszystko przekazują). Ale generalnie wiadomo gdzie czego szukać, jak trzeba dodać jakąś funkcjonalność, czy coś sfixowac. Ciężko jest znaleźć nieprzetestowany kod (testami automatycznymi, niekoniecznie jednostkowymi). A projekt to około 1,5 mln LOC.

AreQrm
  • Rejestracja:prawie 11 lat
  • Ostatnio:29 dni
  • Lokalizacja:Londyn
  • Postów:873
0

Dobra, do tego kod jest otestowany i przechodzi code review


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

U mnie pół na pół. Mamy kilka projektów z kodem dobrej jakości z ładnymi testami, ale jest też kilka potworków, których chętnie byśmy się pozbyli gdyby się dało ;] Na szczęście to są rzeczy oznaczone jako deprecated i nie ma mowy o jakimkowiek developmencie, co najwyżej raz na jakiś czas trzeba gasić pożary i łatać bugi. Niemniej tam można zobaczyć kod z serii what has been seen cannot be unseen ;]

@scibi92 z tym "brzydkim" kodem u ciebie w pracy, szczególnie do seniorów to bym uważał. Bo juniorzy często mają takie mylne wyobrażenie że "to jest bez sensu, zrobiłbym lepiej" a jak się zagłębisz w problem, przypadki brzegowe i różne dziwne wymagania to nagle się okazuje że zrobiłbyś tak samo, albo jeszcze gorzej by to wyglądało.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@Shalom
Ja mam brak seperacji na poszczególne składowe albo klasy na 1000 linijek ze static Stringami ;]


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Zobacz pozostałe 4 komentarze
vpiotr
szczęściarze, polecam funkcje na 500 LOC.
caer
1.5. A metody mamy spokojnie dłuższe niż 500 LOC, w tym 20k linijkowym serwisie jest może 10 metod
vpiotr
@caer: chodzi o Jave czy Asm?
caer
Javę, ty piszesz o asm?
vpiotr
W Javie, ale już przy 500 liniach patrze czy jest otwarte okno z laptopem w ręku. Przy 2k mogłoby być nawet zamknięte.
SA
  • Rejestracja:ponad 16 lat
  • Ostatnio:9 miesięcy
3

U mnie jest średnio, miałem projekty z lepszym kodem, ale np ostatni był tak przekombinowany (kilka wzorców na raz+convention over configuration), że wolę ten gorszy kod, bo potrafię szybko go zdebugować, naprawić. Inna sprawa, że wcześniej to był produkt, a teraz mam kod który działa 24h na produkcji i sam muszę go utrzymywać.

Jeśli jest jakiś mega zły kawałek kodu i inne osoby z zespołu również widzą w nim wady to po prostu jest to dług technologiczny. Jeśli się da to trzeba po kawałku spłacać.
Ja się nikogo nie pytam czy mogę coś zrefaktoryzować albo przepisać, po prostu tak estymuje taski, by systematycznie i po fragmencie polepszać kod. Nie jest to na początku łatwe, ale dużo osób tak robi i jest skuteczne.

Jeśli syf jest w prawie każdej klasie, wszelkie zmiany ciągną się tygodniami, na propozycje testów automatycznych wszyscy są na nie, to lepiej podziękować za współpracę. Są osoby które nigdy nie napiszą dobrego kodu dopóki nie zmienią myślenia/zespołu/firmy i praca z nimi jest ciężka.

Spotkałem też osoby które miały przegięcie w drugą stronę tzn mega pedantyczne i IMHO jest to równie męczące co skrajne druciarstwo.

0

Nie stosuję żadnych konwencji. Ważne jak działa program a nie czy zmienna nazywa się tak czy śmak czy duże czy małe litery albo gdzie wcięcie.

A najnowsze kompilatory obsługują w końcu polskie litery w nazwach zmiennych czy klas. W moim kodzie zawsze wszystko jest po polsku z polskimi znakami w nazwach - Polacy nie gęsi swój język mają.

Aha i nie marnuję czasu na jakieś głupawe testy - trzeba umieć myśleć w trakcie i pisać kod bez błędów. Jak ktoś nic nie umie to potem musi testy pisać, żeby sprawdzić sam siebie czy dobrze zrobił. Śmieję się z takich bo to znaczy że nic nie umie

Zobacz pozostałe 2 komentarze
LukeJL
Też tak kiedyś pisałem. Mieszanka polskiego z angielskim. Ale to było dawno temu, jak zaczynałem programować.
SA
Ja yhm, chyba kalkulator można tak napisać.
drorat1
@sarin Ale potencjalnego użytkownika takiego kalkulatora nie interesuje jak to było napisane, dla niego ma działać poprawnie. I gwarantuję Ci że można sobie poradzić testując ręcznie. I tak np. kalkulator wyborczy, też kod był tego typu i co z tego? Myślisz że to było główną przyczyną problemów? Nie, nawet z beznadziejnym kodem da się napisać dobrze działającą aplikację tego typu. Ja tu mówię o przypadkach typu oddaj i zapomnij, tutaj to nie ma większego znaczenia.
SA
@drorat1 W przypadku oddaj&zapomnij to przejdzie i tu zgoda, da się bez testów. Testy to jest pewien wysiłek, ale jest to też dobry dupochron dla programisty. Jeśli mam podstawowe przypadki w automacie to w krótkim czasie jestem w stanie udowodnić, że z punktu biznesu nic się nie zmieniło i np. to nie moja wina, że jakieś wejściowe api nie działa. Posiadanie testów (a szczególnie TDD) zmusza do trochę lepszej architektury: kod ma mniej zależności, więcej interfejsów itp itd
0

U mnie w pracy przykłada się dużą wagę do jakości kodu. Po każdym commicie startuje statyczna analiza kodu i parę narzędzi badających czy kod nie łamie ustalonych konwencji i zasad, więc jakość jest całkiem całkiem.

Minusem jest to, że ze wzgledu na dość skomplikowaną domenę, kod z logiką biznesową jest po polsku (żeby uniknąć nieporozumień przy tłumaczeniach). Na początku wygląda to kosmicznie, szczególnie w miejscach gdzie logika w jakimś stopniu miesza się z kodem obcych bibliotek pisanych oczywiście po angielsku ;-)

drorat1
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Krasnystaw
  • Postów:1181
0

Weźcie pod uwagę to że to co dla Was jest syfem, dla kogoś innego będzie cool. No i weźcie pod uwagę także sam model biznesowy firm w których pracujecie. I frameworki (własne rozwiązania vs. popularne rozwiązania). Tak np. kod jakiegoś popularnego CMS-a będzie syfem, zaś kod tej samej aplikacji na frameworku będzie ładny i wszystko łatwe do utrzymania. Jest tylko pytanie czy ta firma która używa FW będzie konkurencyjna vs. ta która używa CMS-y.

Możliwe że ten syf jest także celowy, bo przecież wiadomo że jak Wam ktoś coś zleci to nie chcielibyście żeby potem ktoś tańszy od Was to dalej rozwijał tylko lepiej żeby klient to Wam powierzył, za większą kasę bo nie będzie chętnych do rozwoju tego kodu.

Kiedy to wszedłem na jedno coraz bardziej popularne już forum informatyczne które stoi na platformie Question And Answer w PHP i śmiałem tylko wspomnieć o Laravelu albo Kohanie to zaraz w komentarzach posypało się kilka komentarzy (nie pochwalających tych rozwiązań), jak również otrzymałem kilka downvote :-D

Zastanawiam się tylko czy niektórzy aż za bardzo nie przesadzają bo wyglądałoby to raczej na ewangelizację niż to ile to może wnieść faktycznie :-) Za rok, może dwa to może będzie coś lepszego od Symfony albo będą w nim nowe rozwiązania a te stare będą opatrzone niepochlebnymi opiniami. Tak np. Active Record o którym śmiałem wspomnieć vs. Data Mapper i jakoby Active Record był przestarzały. Zastanawiam się tylko jakie to ma znaczenie w przypadku małej aplikacji a forum na które wtedy wszedłem na większy projekt nie wyglądało.

LukeJL
co do downvote'ów to powiem tak - jeśli na jakimś serwisie jest opcja downvote, to część ludzi będzie ją klikała gdzie popadnie, jak się z czymś nie zgadzają. Bo naciśnięcie downvote zajmuje ułamek sekundy, a na napisanie posta trzeba poświęcić minuty cennego czasu.
LukeJL
i ja zostałem kilka razy zdownvotowany na Hacker News czy na Reddit, w sumie nie wiem za co, bo pisałem z sensem (a żadnemu downvotującemu mnie leniowi akurat nie zachciało się napisać sensownej odpowiedzi).
LukeJL
No i downvoting powoduje spiralę downvotingu. Społeczny dowód słuszności. Jak coś jest zminusowane przez kogoś, to potem zaczyna coraz więcej minusów dostawać. I tak na takim Wykopie już cięzko dość o co chodzi, bo niektóre dobre wypowiedzi mają 20 plusów, a niektóre równie dobre wypowiedzi mają 20 minusów... Przypuszczam, że było tak, że w pewnym momencie ktoś dał albo +, albo -, a potem bydło zaczęło głosować tak samo jak pierwsza osoba.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około godziny
  • Postów:8410
1
Shalom napisał(a)

Bo juniorzy często mają takie mylne wyobrażenie że "to jest bez sensu, zrobiłbym lepiej" a jak się zagłębisz w problem, przypadki brzegowe i różne dziwne wymagania to nagle się okazuje że zrobiłbyś tak samo, albo jeszcze gorzej by to wyglądało.

Czasem tak, czasem nie.

szczególnie do seniorów to bym uważał.

Czemu "szczególnie do seniorów"? Widziałem już kody tworzone przez podobno "seniorów", które były na poziomie "junior programmer". Jak dla mnie senior to bardziej pozycja w hierarchii niż miernik skillów. Senior może mieć lepsze skille niż junior, czy regular, ale nie musi.

sarin napisał(a)

Spotkałem też osoby które miały przegięcie w drugą stronę tzn mega pedantyczne i IMHO jest to równie męczące co skrajne druciarstwo.

Ano, można przesadzić w drugą stronę. Pracowałem kiedyś z kimś, kto naprawdę miał super skille, ale miał fioła na punkcie jakości kodu (z formatowaniem włącznie) i każdy pull request przechodził przez code review z bólem i tysiącami mini-poprawek typu "zlikwidować spacje po średniku w linii 89" (to teoretycznie powinno wychodzić w narzędziu do statycznej analizy kodu, ale jednak nie wszystkie zasady były tam wpisane, więc i tak na code review to wyłaziło).

Może od strony programistycznej/edukacyjnej jest to fajne (sam nauczyłem się doceniać jakość kodu wtedy), ale jednak od strony biznesowej nie za bardzo, bo zamiast zmerdżować dzisiaj coś w 85% dobre, to się dopieszcza to do 99% tracąc mnóstwo czasu na poprawki i generując opóźnienia w sprincie.

Nie mówię, że nie warto dbać o jakość kodu, tylko raczej, że warto wiedzieć, kiedy przestać :)

No ale w drugą stronę idąc.

Pracowałem kiedyś z kodem, który był strasznej jakości i miał pełno kopiuj-wklejek.

I co? No i wciągnęło mnie to. Zacząłem wszystko refaktoryzować do bólu i tworzyć moduły do ponownego użycia. Tyle, że wygenerowałem przez to (między innymi) opóźnienia w projekcie, przez co zebrałem opieprz (chociaż moim zdaniem refaktor był naprawdę potrzebny w tym przypadku, bo to było zwyczajne spłacenie długu technologicznego zaciągniętego przez ludzi, którzy rozwijali ten projekt przed nami).

Ale mimo wszystko kopiuj-wklejki są o wiele lepsze i tak niż spaghetti kod albo niż kod przeinżynierowany(tzw. ravioli code: http://c2.com/cgi/wiki?RavioliCode ), ponieważ kopiuj wklejki są łatwe do ogarnięcia co się dzieje w tym kodzie, i do zrefaktoryzowania. O spaghetti kodzie czy kodzie przeinzynierowanym ciężko już to powiedzieć (zresztą sam teraz stosuję kopiuj-wklejki na początkowym etapie, a dopiero potem wydzielam sensowne moduły, trochę zainspirowawszy się tym: http://www.sandimetz.com/blog/2016/1/20/the-wrong-abstraction . Chociaż kiedy czytałem ten artykuł to shejtowałem go, dopiero później mnie tknęło, że coś w tym jest.


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Czemu "szczególnie do seniorów"?

Senior seniorowi nie równy ale jednak jak ktoś ma doświadczenie to spada szansa że pisze zły kod bo nie umie.

ponieważ kopiuj wklejki są łatwe do ogarnięcia co się dzieje w tym kodzie, i do zrefaktoryzowania

Żebyś się nie zdziwił. Copypaste ma to do siebie że często te fragmenty są lekko zmienione, mają jakieś własne przypadki brzegowe i trudno te subtelne różnie wyłapać, w efekcie refator to pole minowe bo może ci się wydawać że dobrze wydzieliłeś wspólny fragment a wcale tak nie jest.

zresztą sam teraz stosuję kopiuj-wklejki na początkowym etapie, a dopiero potem wydzielam sensowne moduły

I pewnie kończysz z połową kodu z duplikacjami bo zwyczajnie zapomniałeś że tu i tam coś było skopiowane. Powodzenia z takim podejsciem :D
A artykuł dość tendencyjny, bo problem opisywany przez autora wynikał nie z wprowadzonej abstrakcji tylko z tego że kolejni developerzy źle ja rozwijali przez dodawanie parametrów i robienie metody "z wajchą" (tzn z parametrem który sprawia że metoda robi coś zupełnie innego).


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około godziny
  • Postów:8410
1

Copypaste ma to do siebie że często te fragmenty są lekko zmienione,

Mnie tego nie musisz mówić. Znam ten ból i naprawdę mnóstwo czasu spędziłem wtedy na refaktoringu z powodu właśnie wyłapywania różnic i podobieństw. Ale i tak uważam, że lepsze to niż spaghetti kod, w którym się wszystko przeplata za wszystkim. Tak zwane "mniejsze zło" :)

trudno te subtelne różnie wyłapać,

To zależy. Myślę, że można to zautomatyzować. Eksperymentowałem z pisaniem automatycznego deduplikatora do kodu HTML i nawet mi się udało zrobić proof of concept, który robił ze zduplikowanego kodu HTML komponenty React i sam wydzielał dla nich odpowiednie parametry analizując co jest stałe, a co jest różne w każdym fragmencie.

Więc jest to możliwe. Co prawda z HTMLem jest o tyle łatwo, że ma on prostą hierarchiczną strukturę i łatwo go analizować statycznie. W przypadku języka programowania mogłoby być trudniej (chociaż nie jest to niemożliwe - w IntelliJ jest opcja replace duplicates, która ponoć automatycznie to wykrywa i pozwala zamieniać (niestety w WebStormie, z którego korzystałem nie ma takiej opcji z tego co wiem :( ).

W każdym razie myślę, że tutaj jeszcze statyczna analiza kodu oparta na AST (tudzież automatyczny refaktoring) ma tutaj duże pole do popisu.

A artykuł dość tendencyjny

Wiem że jest tendencyjny, dlatego jak mówię go shejtowałem z tych samych powodów o których piszesz. Cytując samego siebie:
: I often see copy pasted code which have these same characteristics author wrote about: "Another additional parameter. Another new conditional. Loopuntil code becomes incomprehensible." If somebody writes too many conditionals, parameters and creates incomprehensible loops, then he will do it always, no matter whether in abstracted code or in copy pasted code...
https://news.ycombinator.com/item?id=11047054

Bo te przykłady faktycznie były trochę z d**y.

Ale po przemyśleniu, to trochę w tym prawdy jednak jest, że lepsze czasem efekty daje zduplikowanie czegoś na początku, a potem wydzielenie modułu, niż wydzielenie błędnych abstrakcji a potem męczenie się z nimi.

I pewnie kończysz z połową kodu z duplikacjami bo zwyczajnie zapomniałeś że tu i tam coś było skopiowane. Powodzenia z takim podejsciem

raczej miałem na myśli kontrolowaną duplikację na małą skalę. Poza tym robię to tylko pracując w pojedynkę i mając pod kontrolą wszystko co się dzieje w projekcie. Jeśli robię projekt w więcej osób to jestem przeciwko takim praktykom, ponieważ w projektach wieloosobowych, gdzie pracuje się od tasku do tasku jak ktoś coś źle napisze, to potem tak zostanie na amen i dopiero następne osoby po iluś miesiącach będą spłacać ten dług techniczny (ja też przecież musiałem spłacać dług techniczny za te osoby, które radośnie kopiowały sobie wszystko).

zapomniałeś że tu i tam coś było skopiowane.

do tego służą komentarze // TODO, żeby o tym nie zapomnieć. Poza tym kopiuj wklejki w pewnych miejscach są zupełnie nieszkodliwe i łatwe do refaktoryzacji. Trzeba wiedzieć tylko w których.

Problem tylko, że większość programistów ma za mało doświadczenia, żeby odróżnić nieszkodliwe kopiuj wklejki od szkodliwych.

I drugi problem, że pracując w teamie w projekcie rozwijanym na przestrzeni kilkanastu miesięcy zwykle i tak o wszystkim się zapomni, a TODO będą leżały miesiącami, aż połowa programistów odejdzie, a przyjdą nowi i nawet jak zobaczą TODO, to zwykle i tak z nim nic nie zrobią, tylko będą dodawać kolejne duplikacje.

Myślę, że większą szkodą dla projektów są ludzie i ich proces pracy niż sam zduplikowany kod.

Więc generalnie nie polecam tego na większą skalę jak się rozwija długotrwały projekt w ileś osób. Co innego jeśli się robi coś samemu, albo w małym zespole i będzie się w stanie samemu zrobić potem porządek z kodem (albo udokumentować w jasny sposób, że coś jest duplikacją).


edytowany 3x, ostatnio: LukeJL
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)