시리즈

개발 공부 하는 법

20221212
강의
개발
개발 공부
공부법
dev
development
study
tip

일반적인 이야기.

요즘은 어떤걸 개발하던 새로운 기술을 배워야 할 일이 많다.

언어, 프레임워크, 라이브러리, 플러그인, API, 툴, 패키지 등등 새로운 것은 계속해서 쏟아져 나온다.

"OO 어떻게 공부하면 될까요? OO 책/강의 추천해주세요." 같은 질문들이 올라오는 것을 많이 보게 된다.


어떤 기술에 대한 공부 자료들이 어떻게 만들어지는지, 어떤 특징이 있는지를 살펴보자.

예시는 플러터.


# 제일 먼저 만들어 지는 것은 [코드].

당연히 그런 기술들도 코드가 있다. 오픈소스라면 어딘가에 소스를 공개해뒀을 것이다.

https://github.com/flutter/flutter

# 그 다음 개발자/팀 에서 [기술 문서]를 만들게 된다.

이건 공식 사이트의 문서가 아니라 Spec 또는 API 문서를 말한다.

https://spec.dart.dev/DartLangSpecDraft.pdf 

https://api.flutter.dev/

# 기술 문서의 내용을 보기 좋게 [사이트]로 정리한다.

보통 이 단계에서 개발 기술이 출시된다.

https://flutter.dev/

# 출시된 기술을 써 본 사람들이 [블로그] 에다 소개를 시작한다. (유튜브 포함)

개발팀에서 하는 공식 블로그. 개인이 하는 블로그. 기업에서 하는 기술 블로그 등등 종류가 많이 있다.

개발 팀에서 하는 공식 블로그는 퀄리티가 보장되고, 해당 기술에서 핵심적인 것들을 다루는 경우가 많다. 해당 기술을 자주 사용한다면 꼭 팔로우 하고 있어야 한다. 가끔 열리는 이벤트들도 도움이 많이 된다.

https://www.youtube.com/@flutterdev

개인 블로그는 운영하는 사람에 따라 퀄리티와 난이도가 크게 차이가 난다. 플러터의 경우 GDE나 유명한 개발자들이 운영하는 유튜브나 블로그는 팔로우 하면 좋다. 좋은 블로그나 유튜브를 찾기는 쉽지 않다.

이런 유튜브들은 추천할 만하다.

https://www.youtube.com/@Flutterly

https://www.youtube.com/@SuperDeclarative

https://www.youtube.com/@tadaspetra

https://www.youtube.com/@RobertBrunhage

https://www.youtube.com/@JohannesMilke

기업 기술 블로그는 개발하는 과정이나 신기술에 대한 감상 같은 것을 담고 있는 경우가 많은데, 새로운 기술을 배우기 보다는 인사이트를 얻기에 좋은 장소라고 생각한다.

# [강의]

기술이 인기있어지면 강의가 생겨난다.

무료 강의 / 유료 강의

무료와 유료의 가장 큰 차이는 사후 관리라고 생각한다.

좋은 유료 강의들은 수강이 끝나도 질문도 잘 받아주고 시범 강의도 퀄리티가 좋다.

한글 강의는 코드팩토리를 추천한다.

https://www.youtube.com/@codefactory_official

다만 강의는 강사가 해당 기술 개발자는 아니기 때문에 오류는 있기 마련이다. 좋은 강의들은 틀린 내용 수정도 쿨하고 신속하게 해준다.

무조건 100% 맞다고 말할 수 없다. 결국은 공식 문서, API, 코드를 봐야 한다.


# []

보통 책은 블로그나 강의를 해 본 사람들이 정리 차원에서 쓰는 경우가 많다.

출판은 블로그나 강의에 비해서 훨씬 절차가 복잡하기 때문에 쓴 시점과 출판하는 시점의 간격이 매우 큰 경우가 종종 있다.


이렇게 

코드 - 기술 문서 - 공식 사이트 - 블로그 - 강의 - 책 순으로 만들어지는데

새로운 기술이 반영될 때도 이 순서로 반영된다.


그러니 코드에 변화가 있다면, 해당 코드를 책으로 공부하려면 매우 오랜 시간을 기다려야 한다.


재밌는 점은, 공부 난이도도 코드 - 기술 문서 - 공식 사이트 - 블로그 - 강의 - 책 순으로 쉬워진다.

강의나 책은 많이 팔기 위해서 많은 사람들을 타겟으로 하는 것이 유리하기 때문에 초보자나 입문자를 대상으로 한 입문용이 많을 수 밖에 없다.

블로그는 어떤 사람이 운영하는지에 따라 다르고 (여기는 입문용이다.)

코드를 바로 보는 것은 매우 어렵다.


그래서 어떻게 공부할까요?

공부 방법은 기술이 어느 정도로 성숙했냐에 따라 다르다.

비교적 최신 기술이고, 변화가 자주 일어난다면 공식 사이트와 공식 블로그 위주로 공부해야 한다.
다른 방법은 없다. 예를 들어, SvelteKit 의 경우 현재 유튜브에 올라와 있는 강의(검색했을 때 상단에 나오는)나, 시중 책들은 최근 Routing 시스템 변화 같은 필수적인 변화도 반영하지 못하고 있다.
강의나 책으로 공부한다면 코드가 제대로 동작하지 않을 것이다. Flutter 의 경우도 2.0 NNBD(nonnull by default) 가 적용되고 한참이 흘렀는데도 반영되지 않은 강의로 공부했다가 낭패를 보는 경우를 많이 봤다. 조금 실력이 늘면 코드 자체를 보는 것도 좋다.

기술이 어느 정도 성숙했다면, 강의와 책의 목차를 보면서 큰 그림을 그리는 것이 중요하다.
이런 기술들을 코드나 공식 사이트로 처음부터 보려면 너무 많은 공부량에 주눅들게 된다.
처음에 큰 틀을 잡고 필수적인 개념부터 배워가는 것이 좋다.

정말 시간이 없는 경우에는, 유튜브에서 시간 짧은 강의 하나보고 바로 시작할 수도 있다. 하지만 개발 초보자들은 이렇게 하면 정석으로 배우는 것보다 결국 많은 시간이 걸릴 것이다. 이 방법은 어느 정도 많은 비슷한 개발 툴들을 알고 있을 때만 적절한 방법이다.

결국 올바른 길이 빠른 길이다.



.

piano (press key Q)

Categories

flutter ( 82 ) dart ( 34 ) android ( 32 ) kotlin ( 11 ) plugin ( 8 ) provider ( 8 ) vim ( 7 ) bloc ( 6 ) iOS ( 6 ) state management ( 6 ) 플러터 ( 6 ) PS ( 5 ) algorithm ( 5 ) architecture ( 5 ) async ( 5 ) getx ( 5 ) java ( 5 ) API ( 4 ) BOJ ( 4 ) class ( 4 ) daily ( 4 ) git ( 4 ) golang ( 4 ) memo ( 4 ) riverpod ( 4 ) state ( 4 ) stream ( 4 ) test ( 4 ) web ( 4 ) widget ( 4 ) windows ( 4 ) HTTP ( 3 ) androidX ( 3 ) app state ( 3 ) context ( 3 ) crash ( 3 ) db ( 3 ) editor ( 3 ) error ( 3 ) extension ( 3 ) github ( 3 ) hive ( 3 ) ide ( 3 ) package ( 3 ) pubspec ( 3 ) python ( 3 ) syntax ( 3 ) vscode ( 3 ) app icon ( 2 ) await ( 2 ) chocolatey ( 2 ) consumer ( 2 ) cp949 ( 2 ) deployment ( 2 ) dev ( 2 ) flavor ( 2 ) gesture ( 2 ) globalkey ( 2 ) go ( 2 ) google ( 2 ) hack ( 2 ) js ( 2 ) json ( 2 ) key ( 2 ) keystore ( 2 ) list ( 2 ) listview ( 2 ) lock ( 2 ) mac ( 2 ) map ( 2 ) navigation ( 2 ) nosql ( 2 ) project ( 2 ) pub ( 2 ) recyclerview ( 2 ) rxdart ( 2 ) sdk ( 2 ) selector ( 2 ) setting ( 2 ) size ( 2 ) soc ( 2 ) synchronized ( 2 ) tdd ( 2 ) tip ( 2 ) version ( 2 ) viewmodel ( 2 ) vundle ( 2 ) webview ( 2 ) xcode ( 2 ) yaml ( 2 ) ( 2 ) 플러터 단점 ( 2 ) 16.0 ( 1 ) 2.0 ( 1 ) 2023 ( 1 ) AATP2 ( 1 ) ChangeNotifierProvider ( 1 ) Example ( 1 ) Guava ( 1 ) ImageReader ( 1 ) Mo's algorithm ( 1 ) OAuth2 ( 1 ) OpenGL ( 1 ) Oreo ( 1 ) ProgressBar ( 1 ) REST API ( 1 ) Trie ( 1 ) activity ( 1 ) adaptive ( 1 ) android P ( 1 ) android context ( 1 ) android11 ( 1 ) apktool2 ( 1 ) app exit ( 1 ) append ( 1 ) appicon ( 1 ) arkit ( 1 ) array ( 1 ) asciidoc ( 1 ) async * ( 1 ) async* ( 1 ) audio ( 1 ) authorization ( 1 ) await for ( 1 ) behaviorsubject ( 1 ) beta ( 1 ) binary ( 1 ) binarysearch ( 1 ) blender ( 1 ) book ( 1 ) bottomsheet ( 1 ) break ( 1 ) broadcast ( 1 ) browser ( 1 ) bubbles ( 1 ) bug ( 1 ) build ( 1 ) buildcontext ( 1 ) buildnumber ( 1 ) bundle ( 1 ) button ( 1 ) bytecode ( 1 ) cache ( 1 ) camera2 ( 1 ) cameramanager ( 1 ) cd ( 1 ) chrome ( 1 ) ci ( 1 ) circle ( 1 ) clean ( 1 ) clean architecture ( 1 ) cli ( 1 ) clip ( 1 ) clipboard ( 1 ) cloud ide ( 1 ) cmdlet ( 1 ) code ( 1 ) coding test ( 1 ) command ( 1 ) comparator ( 1 ) complexity ( 1 ) concurrency ( 1 ) conditional ( 1 ) const ( 1 ) constraint ( 1 ) constraintlayout ( 1 ) controlc ( 1 ) controlv ( 1 ) converter ( 1 ) copy ( 1 ) copy project ( 1 ) coupling ( 1 ) coverage ( 1 ) cp ( 1 ) css ( 1 ) cupertino ( 1 ) cursor ( 1 ) cv ( 1 ) data class ( 1 ) data structure ( 1 ) dataBinding ( 1 ) database ( 1 ) debounce ( 1 ) decompile ( 1 ) delegate ( 1 ) deno ( 1 ) design pattern ( 1 ) development ( 1 ) device ( 1 ) di ( 1 ) dialog ( 1 ) dio ( 1 ) drawable ( 1 ) drug ( 1 ) emmet ( 1 ) encoding ( 1 ) english ( 1 ) entries ( 1 ) environment ( 1 ) equality ( 1 ) equatable ( 1 ) euc-kr ( 1 ) euckr ( 1 ) exit ( 1 ) expand ( 1 ) expanded ( 1 ) export ( 1 ) extension method ( 1 ) facade ( 1 ) fake ( 1 ) field ( 1 ) figma ( 1 ) final ( 1 ) fixed ( 1 ) flutter pub ( 1 ) flutter web ( 1 ) flutter_inappwebview ( 1 ) flutter_test ( 1 ) flutterflow ( 1 ) fold ( 1 ) fonts ( 1 ) form ( 1 ) frame ( 1 ) future ( 1 ) gestureDetector ( 1 ) gestureRecognizer ( 1 ) gesturearena ( 1 ) get-command ( 1 ) get_cli ( 1 ) getbuilder ( 1 ) getx단점 ( 1 ) gitignore ( 1 ) glut ( 1 ) google fonts ( 1 ) gopath ( 1 ) goto ( 1 ) gradient ( 1 ) graphics ( 1 ) gvim ( 1 ) hackaton ( 1 ) hash ( 1 ) hashmap ( 1 ) hot reload ( 1 ) how to ( 1 ) html ( 1 ) i18n ( 1 ) icon ( 1 ) id ( 1 ) impeller ( 1 ) implementation ( 1 ) import ( 1 ) indicator ( 1 ) inkwell ( 1 ) interrupt ( 1 ) intl ( 1 ) introduction ( 1 ) io ( 1 ) isar ( 1 ) iterable ( 1 ) iteration ( 1 ) javascript ( 1 ) julia ( 1 ) juno ( 1 ) jupyter ( 1 ) kakaomap ( 1 ) keytool ( 1 ) korean ( 1 ) kotlin syntax ( 1 ) l10n ( 1 ) lambda ( 1 ) language ( 1 ) layer ( 1 ) layout ( 1 ) lineageOS ( 1 ) localkey ( 1 ) localtoglobal ( 1 ) long list ( 1 ) ls ( 1 ) mac osx ( 1 ) markdown ( 1 ) markup ( 1 ) material ( 1 ) method ( 1 ) microtask ( 1 ) migrate ( 1 ) mintlify ( 1 ) mock ( 1 ) module ( 1 ) monitor ( 1 ) moor ( 1 ) mouse ( 1 ) mouseregion ( 1 ) multiplatform ( 1 ) multiset ( 1 ) multithread ( 1 ) mutable ( 1 ) mvvm ( 1 ) new ( 1 ) node ( 1 ) nodejs ( 1 ) nosuchmethod ( 1 ) null-safety ( 1 ) numberformat ( 1 ) nvim ( 1 ) object ( 1 ) objectbox ( 1 ) objectkey ( 1 ) obx ( 1 ) online ide ( 1 ) operator ( 1 ) orientation ( 1 ) parabeac ( 1 ) parse ( 1 ) paste ( 1 ) path ( 1 ) pattern ( 1 ) pitfall ( 1 ) play store ( 1 ) pod ( 1 ) podfile ( 1 ) pointer ( 1 ) pointers ( 1 ) powershell ( 1 ) private ( 1 ) programming ( 1 ) pull to refresh ( 1 ) puzzle ( 1 ) pycharm ( 1 ) realitykit ( 1 ) recursion ( 1 ) reduce ( 1 ) reference ( 1 ) regex ( 1 ) regular expression ( 1 ) release note ( 1 ) renderbox ( 1 ) renderobject ( 1 ) repl ( 1 ) repository ( 1 ) response ( 1 ) rm ( 1 ) rotue ( 1 ) round ( 1 ) run ( 1 ) scope ( 1 ) scroll ( 1 ) search ( 1 ) server ( 1 ) serverless ( 1 ) service ( 1 ) sharp ( 1 ) singlerepo ( 1 ) singleton ( 1 ) sketch ( 1 ) sliver ( 1 ) sliverlist ( 1 ) snippets ( 1 ) sogae ( 1 ) sorting ( 1 ) source ( 1 ) sparse ( 1 ) sparse array ( 1 ) spec ( 1 ) split ( 1 ) sqflite ( 1 ) sqlite ( 1 ) sqrt decomposition ( 1 ) stateful ( 1 ) statefulwidget ( 1 ) step ( 1 ) stepper ( 1 ) string ( 1 ) stringbuffer ( 1 ) stringbuilder ( 1 ) studio ( 1 ) study ( 1 ) sub-directory ( 1 ) svn ( 1 ) swiftui ( 1 ) swipe to refresh ( 1 ) system_alert_window ( 1 ) system_cache ( 1 ) systemnavigator ( 1 ) tail recursion ( 1 ) tailrec ( 1 ) tap test ( 1 ) text ( 1 ) texteditingcontroller ( 1 ) textfield ( 1 ) texttheme ( 1 ) themedata ( 1 ) then ( 1 ) thread ( 1 ) throttle ( 1 ) time ( 1 ) tool ( 1 ) tools ( 1 ) tooltip ( 1 ) ts ( 1 ) tutorial ( 1 ) typescript ( 1 ) ui ( 1 ) unittest ( 1 ) update ( 1 ) usb ( 1 ) utf8 ( 1 ) ux ( 1 ) valuekey ( 1 ) variable ( 1 ) vector ( 1 ) versioncode ( 1 ) very_good ( 1 ) view ( 1 ) vim plugin ( 1 ) vimrc ( 1 ) virtualenv ( 1 ) wasm ( 1 ) web app ( 1 ) webview_flutter ( 1 ) while ( 1 ) widget tree ( 1 ) window ( 1 ) wsl ( 1 ) yield ( 1 ) 강의 ( 1 ) 개발 ( 1 ) 개발 공부 ( 1 ) 공부법 ( 1 ) 그래픽스 ( 1 ) 꼬리재귀 ( 1 ) 꿀팁 ( 1 ) 데노 ( 1 ) 두줄 ( 1 ) 디노 ( 1 ) 번역 ( 1 ) 블록 ( 1 ) 상태관리 ( 1 ) 실험 ( 1 ) 안드로이드 ( 1 ) 안드로이드프로젝트 ( 1 ) 안드로이드프로젝트복사 ( 1 ) 어이없는 ( 1 ) 조건부 임포트 ( 1 ) 주절주절분노조절실패의식으흐름 ( 1 ) 패키지 ( 1 ) 프로젝트복사 ( 1 ) 플러그인 ( 1 )