// Their idea of "good code"
public void ProcessData()
{
ArrayList myList = new ArrayList(); // Because who needs type safety?
for (int i = 0; i < 100; i++)
{
myList.Add("Item " + i); // String concat in a loop? Sure, why not.
}
}
그리고 위 코드에 대한 저자의 평입니다.
List 대신 ArrayList – .NET 2.0부터 있었음에도 불구하고 "너무 복잡하다"는 이유로.
루프에서 문자열 연결 – 그들은 StringBuilder에 대해 전혀 몰랐거나, 더 나쁜 경우 "과도하다"고 생각합니다.
마법의 숫자와 하드코딩된 값 – 구성 파일? 환경 변수? 안 돼요, 그냥 파일 시작 부분에 const int MAX_RETRIES = 5;를 던지고 끝내세요.
그들은 LINQ, async/await, 심지어 기본 OOP 원칙도 배우지 못할 겁니다. 그리고 개선 사항을 제안할 때는요?
Rx는 말씀하신 interface, delegate들이 모두 들어간 기술입니다. 그리고 이런 형태가 퍼져서 다른 언어까지 번지는…언어가 다른데도 문화를 만들어낼 수 있었던 점은 시작점이 다르다고 볼 수 있을 것 같습니다.
다만 시작점은 달랐지만 세월에 의한 스노볼링은 생각보다 적었던 것 같습니다. 오히려 다른 언어에 좋은 영감을 주었지, 정작 웹개발을 하면서 백앤드에는 .NET을 쓰면서도 JS만 Rx를 쓰는 형태가 많을 정도로 .NET 에서는 오히려 잘 안쓰이는 듯합니다.
언급 드린대로 Rx의 개념은 이제 여러 클래스로 기능이 분리되어서 굳이 Rx를 쓰지 않아도 됩니다만… 그저 아쉬울 뿐인거죠.
.NET의 기술이 그만큼 빨랐고 잘 디자인되었지만 오히려 일반 개발자들이 그냥 쓰는데 그친거 아닌가 싶습니다. 물론 회사 업무만 하고 개인시간이 중요하기때문에 굳이 그런걸 하지 않아도 되는 그런 건 당연히 저도 회사원이니까 이해합니다.
왜냐하면 기술적 욕심도 있지만 결국 언어라는 건 기술로 표현되는 비즈니스 도구인게 가장 원형의 모습이 아닌가 싶어서라고 생각합니다. 말씀하신대로 한때 유행하는 기술이 있고, 또 말씀하신대로 그 기술들이 개념이 유지된 상태로 이름이 변형되는 것도 IT 업계에서는 아주 흔하게 찾아볼 수 있습니다만… Rx는 현재 진행형입니다.
최근 멀티패러다임에 관심이 생겨 함수형, 객체지향, List Processing을 적재적소 활용하는 방법을 공부하다가 Reactive Programming의 가치를 많이 느끼기 시작했는데 Rx를 C#에서 꽤 선두로 시작했었군요. 새로 알게된 사실입니다. 현재 진행형이라는 말이 공감갑니다.