iOS 프로그래밍을 공부하기 시작할 때, 이런 생각에 잠겨서 2 일 동안 방법론만 연구 했던 적이 있습니다.
나: 사람들은 프로그래밍을 할 때, 암기를 하지 말라고 하는데.. 이걸 암기안하고 무언가를 작성 할 수는 없는거 아닌가?
사람들: 좋은 프로그래머는 암기가 아니라 이해를 하고 찾아가며 공부한답니다.
나: 이해를 한다는게 결국 논리가 머리에는 있어야하는 거잖아요!
사람들: 그런 관점에서 생각하시면, 논리를 암기하는게 맞겠죠.
나: 그럼 암기잖아요 빼애애액~~
이런 생각을 혼자 했었습니다.써놓고 보니 부끄럽네요..ㅎㅎ
지금도 이것에 대해서 대중교통을 이용할 때, 생각하곤 합니다.
2021.06.06 기준으로 안다는 것
은 아직도 잘 모르겠습니다.
하지만 프로그래밍의 기술을 익히는 것
은 아주 조금 알겠습니다.
저는 추구하는 프로그래머에 따라서 안다는 것의 개념을 다르게 받아들인다고 생각하게 되었습니다.
제가 했던 생각뭉치들을 기록해볼게요.
제가 생각하는 프로그래머의 종류는 다음과 같습니다.
1. 표현주의 프로그래머
2. 구조주의 프로그래머
3. 성능주의 프로그래머
이름붙이는 걸 좋아해서 만들어 봤어요.
표현주의 프로그래머란, 내가 생각하는 것을 표현하는 중점을 둔 프로그래머를 의미합니다. 누가 그랬냐고요?
저요..ㅎ
표현주의 프로그래머는 UI에 관련된 기술에 관심이 많습니다. 왜냐하면 그들의 프로그래밍 목적은 자신의 생각을 표현하는데 있기 때문이죠. 마치 책 "해커와 화가" 에서 나온 말처럼, 표현하기 위해서 프로그래밍을 하는 사람들입니다.
최초에 공부할 때, 프로그래머는 당연히 표현주의인줄 알았습니다.
왜냐면 제가 프로그래밍을 시작한 이유이자 iOS 프로그래밍으로 결정한 이유가
제가 만든 앱으로 사람들과 소통하고 싶었거든요.
제 앱을 보며 기발하다고 하거나 갖고 싶다고 하고, 또는 편리하다고 하면서
이야기를 듣고 저도 제 이야기를 앱으로 풀어내고요.
래퍼들이 앨범을 내고,
가수들이 앨범을 내고,
작가들이 글을 쓰듯
저는 그 수단이 앱이 였던 것 뿐이므로 프로그래밍을 하게 되었습니다.
그런데 공부를 하다가 문득 이런 생각이 들더라구요.
1년이 지나고 3년이 지나고 10년이 지난 다음에 나랑 신입의 차이는 기술을 해보고 안해보고의 차이뿐인 것일까? 만약 신입이 내가 해본 표현들을 해봤으면,, 나는 쓸모없겠네?
좀 무서운말이죠.
공부를 한지 얼마 되지도 않았는데, 시니어 개발자
란 무엇일까? 라는 생각을 하게 되었어요.
그래서 생각한게 "구조주의 프로그래머"와 "성능주의 프로그래머" 입니다.
어느 정도 공부하다보니까, 눈에 보이는 것(UI)는 어느정도 노동력과 시간을 투입하면 만들어지긴 하더라구요. 그래서 그걸 넘어서는 기술이 있지 않을까 고민하다가 내린 결론이
구조주의 프로그래머 입니다.
구조주의 프로그래머는 표현주의 프로그래머가 바라보는 목표에서 조금 바뀝니다.
표현주의 프로그래머의 지향점: 앱을 이용하는 사람
구조주의 프로그래머의 지향점: 앱을 만드는 사람
앱 아키텍쳐인 MVVM, MVC VIPER 등등을 고민하고 이것들을 적용하는 프로그래머는
단순히 고객을 위한 것을 넘어 같은 개발자를 위한다고 느껴졌어요.
나만 볼 코드가 아니고, 함께 볼 코드이므로 약속을 정하는 거죠.
이때쯤, 앱의 설계 구조의 필요성을 느끼기 시작했던 것 같습니다.
그런데 생각을 하다보니...
이런 생각이 들더라구요
구조를 배운다는 것은 결국 시간이 흐르면 배울 수 있는 것 아닌가? 자신만의 독창적인 구조는 오히려 구조주의 프로그래머의 목표와 맞지도 않은 것 같고...
그러면 진정한 실력이 있는 프로그래머는 어떤 프로그래머일까?
긴 생각 끝에 생각해낸 프로그래머가 "성능주의 프로그래머" 입니다.
1년차가 10년차를 이길 수 없는 능력은 결국 "성능" 차이 아닐까?
같은 목표의 앱을 구현하더라도 성능차이가 날 것 같다.
여기서 말하는 성능은
사용자가 많아지더라도 동일한 서비스를 제공할 수 있는 확장성이 고려된 코딩
입니다.
이쯤 생각했을 때, 알고리즘이 필요한 이유를 조금은 알게 되었어요.
알고리즘은 코드를 짜기전에 제일먼저 생각하는 것들이
이 코드의 복잡성입니다. 1억건의 데이터를 처리할 때,
"얼마나 리소스를 잡아먹을까"
와 같은 생각들이요
안다는 것은 아직도 모르겠습니다. 코드를 짤 줄 알면 아는 것인지, 마음대로 커스터마이징이 가능하면 아는 것인지, 설명하면 아는 것인지..
다만,
무언가 알기 위한 방향성으로
1. 일단 프로그램을 만들 줄 알아야 한다. (생산성)
2. 그 다음은 그 프로그램을 담을 틀을 만들 줄 알아야 한다. (설계능력)
3. 이 모든걸 종합했을 때, 가장 적합하며 빠른 방법을 선택해야한다. (논리력)
옆에 능력치들은 제가 느끼기에 가장 대표되는 능력치들을 적어봤습니다.
위에 작성한 글들은 100% 개인의 경험에서 나온 극단적으로 주관적인 생각입니다.
짧지 않고 읽기 힘든 글 끝까지 읽어주셔서 감사합니다!
요즘은 고민보다는 해보고 있습니다.
뭐든 해봐야 판단이 더욱 명확해짐을 느꼈습니다.
길을 가는 도중에 잘못되었음을 느끼기 어렵다. 가봐야 알 수 있다.
이게 요즘 제 생각입니다. 해보고 싶고 해볼만한 방법이나 기술들을 찾아서 해보면서
경험치를 쌓고 있죠.
"개발하는 정대리" 님의 말씀처럼
강의중독에 빠지지 마세요. 무조건 그냥 해보셔야 실력이 늡니다.
무조건 해보려구요!