Python 대 C # /. NET — 대규모 웹 애플리케이션을 개발하는 데 사용할 때 고려해야 할 주요 차이점은 무엇입니까?
우리 조직은 현재 주로 SQL Server 2005/2008 백엔드, Java 모델 / 컨트롤러 프레임 워크 및 ColdFusion 기반 뷰를 기반으로하는 웹 응용 프로그램을 제공합니다. 우리는 새로운 프레임 워크로 전환하기로 결정했고 내부 탐색과 미니 프로젝트를 통해 Python과 C # /. NET 중에서 선택 범위를 좁혔습니다.
먼저 두 기술이 훌륭하게 작동 할 것임을 알고 있으며 주요 차별화 요소 (및 관련 장단점)를 찾고 있다고 말하면서 시작하겠습니다. 이 언어는 공통점이 많지만 많지 않습니다. 그들의 주요 차이점에.
내가 찾고있는 트레이드 오프 / 차별 기의 예 :
적은 코드로 더 많은 것을 달성하고 Python으로 더 창의적인 작업을 수행 할 수있는 것처럼 보이지만 .NET이 더 구조화되어 있기 때문에 다른 사람이 작성한 코드를 이해하고 수정하는 것이 더 쉬울 수 있습니다.
유용 할 수있는 몇 가지 추가 정보 :
우리의 엔지니어링 팀은 약 20 명이며 5-7 명으로 구성된 소규모 팀에서 일하며이 중 사람들을 자주 안팎으로 순환시킵니다. 우리는 새로운 코드를 작성하는 것만 큼 다른 사람이 작성한 코드를 작업합니다.
파이썬을 사용하면 Django 경로로 이동하고 .NET을 사용하면 MVC2로 이동합니다. 우리 서버는 IIS를 실행하는 Windows 서버입니다.
ColdFusion에 대해 우리가 좋아하는 점은 쿼리 작업이 매우 쉽고 웹 서버를 재부팅하거나 다른 사람을 중단하지 않고도 수정 사항을 "핫 배포"할 수 있다는 점입니다.
이 두 언어를 포함하는 다른 X 대 Y 스레드 중 일부를 읽었으며 매우 도움이되었지만 Python을 .Net에 직접 대면하고 싶습니다. 이 어려운 질문에 대한 귀하의 경험을 탭하게 해주셔서 미리 감사드립니다!
".NET"은 언어가 아닙니다. 아마도 그것은 Python 대 C # 또는 Python / Django 대 C # / ASP.NET 일 것입니다 (또는 원하는 "웹 워크"를 선택하십시오. Python과 ".NET"모두에 대한 다양한 솔루션이 있고 Django 또는 MVC2를 선택할 수 있습니다. 더 나은 실행 가능한 옵션을 심각하게 제한). Python 대 ".NET"에 대한 대응 : IronPython ( ". NET"의 Python)이 있습니다.
나는 고려할 것이다 : 언어에 대한 개발자의 편안함 과 그들이 파이썬과 ".NET"에서 동등하다면, 나는 개발을위한 처리 시간을 고려하고 이것을 최소화 한 언어 / "웹 워크"를 선택할 것이다 (다시 말하지만, 그것은 이전 일 필요는 없다). 제약).
단위 / 통합 테스트는 [대규모] 프로젝트에 필수이지만, 정적으로 형식화 된 언어 (C # / F #)는 형식과 관련된 "어리석은 버그"의 수를 크게 줄일 수 있습니다.
경기장 열기 :-)
댓글 수정 :
그런 다음 언어를 비교하는 것입니다.
이 경우 C #은 Single-Inheritance / Interface Class-Based OO를 사용하는 매우 지루한 명령형 언어입니다 (그러나 Java보다 몇 가지 더 깔끔한 트릭이 있습니다. 이것은 Python 과 동일한 기본 유형의 OO 이며 정적 / 동적 비트를 제외하고 두 언어 모두 강력한 유형이 지정됩니다 (메커니즘은 다르지만 최종 결과는 언어 스펙트럼에서 매우 유사합니다). 실제로 파이썬에는 MI가 있지만 'lambda'키워드의 사용으로 파이썬에서는 덜 받아 들여지고 파이썬은 동적으로 입력되기 때문에 인터페이스 / 유형 계약을 결정하기위한 컴파일 시간 지원이 없습니다 (그러나 일부 모듈은 이것을 제공하십시오).
Python을 배우고 알 수 있다면 C #을 배우고 알 수 있습니다. 패러다임의 변화가 아닙니다. 여기에있는 일부 키워드, 거기에 중괄호, 의미하는 유형, 다른 기본 라이브러리 ... 다른 환경 (REPL에 도달하려면 일부와 싸워야하지만 VS에서는 가능합니다.) 개발자가 좋아 / 배우는 방법 / 사용은 또 다른 이야기입니다. 이전에 C # 명령을 호출했지만 기본 C # 구문이 매우 절차 적이라 할지라도 LINQ / IEnumerable 확장 및 대리자없는 클로저와 같은 "기능적"기능이 추가 된 것을 보는 것은 좋습니다. 파이썬 (표현식, 중첩 함수, 문 / 표현식 나누기)과 매우 유사합니다.
새로운 '동적'이 선을 흐릿하게 만들지 만 (이전 C # 버전에서 리플렉션으로 돌아 가야했던 거의 모든 동일한 위치에서 좋은 용도는 거의 없습니다 .-- 이것은 사실이 아니지만 요점은 그것이 "최선 / 유일한 방법"인 소수의 경우를 제외하고는 일반적으로 "잘못된 방법"이라는 것입니다. 'var'는 그렇지 않습니다. 즉, 'var'변수의 유형은 컴파일시 알려 지며 동적 유형 지정 과 는 아무 관련이 없습니다 . 그것은 모두 유형 추론입니다. F # / SML 및 Haskell과 같은 일부 언어는 정적 유형을 유지하면서 "모든 추악한 유형 선언"(허용 된 유형 또는 유형 집합에 명시 적으로 주석을 달면 의도를 더 명확하게 할 수 있음)에 대한 필요성을 제거하는 훨씬 더 강력한 유형 추론을 제공합니다.
개인적으로 다른 모든 것은 제쳐두고 정적으로 입력 된 언어를 사용합니다. 저는 C #을 말하는 것이 아닙니다 (그리고 Java를 말하는 것도 아닙니다!).하지만 정적으로 형식화 된 언어는 형식 오류를 맨 위로 올릴 수 있고 사전에 명시적인 계약을 요구할 수 있습니다 (이것은 저에게 큰 승리입니다). 깔끔한 다이나믹 트릭을 놓치지 만 대상 언어로 동일한 작업을 수행하는 더 좋은 방법은 거의 항상 있습니다. 해당 언어로 생각하고 스크류 드라이버로 나사를 사용하고 망치를 사용하면됩니다. 손톱. 예를 들어 local () 또는 global ()의 (남용) 사용에 의존하는 Python 코드를있는 그대로 C #으로 가져올 것으로 기대하지 마십시오.
"단점"에서, 대부분의 정적으로 형식화 된 언어 (여기서는 C #)는 명시적인 컴파일 우선 (하지만 예쁜 어셈블리를 만드는만큼 나쁘지는 않습니다)이 필요하며 "REPL"과 같은 도구는 처음으로 간주되지 않습니다. 클래스 시민 (F # / VS2010의 일류 시민). 또한 Python / C #에 대한 필수 라이브러리가 있고 다른 언어에서는 사용할 수없는 경우 다른 언어보다 한 언어를 선택해야하는 이유를 결정할 수 있습니다.
Quora에 대한 매우 포괄적 인 답변을 작성했습니다. Python은 C #과 어떻게 비교됩니까?
TL; DR
대답은 거대하지만 (희망적으로) 상당히 포괄적입니다. 저는 거의 10 년 동안 C # /. NET으로 프로그래밍했기 때문에 정말 잘 알고 있습니다. 그리고 저는 Quora에서 약 7 개월 동안 Python으로 프로그래밍을하므로 잘 알고 있기를 바랍니다.
Python은 학습 용이성, 크로스 플랫폼 개발, 오픈 소스 라이브러리 가용성에서 승자
- C #은 표준 라이브러리, 언어 기능, 개발 프로세스 및 도구, 성능, 언어 진화 속도에서 승자입니다.
- 대략 균등 : 구문 (Python은 가독성이 더 좋고 C #은 구문이 더 일관적임), 채택.
또한 그러한 이동을하기 전에 언어 기능에 제한되지 않고 런타임을 비교해야한다고 제안합니다. Python은 인터프리터 CPython을 통해 실행되며 여기서 C #은 기본 구현에서 CLR에서 실행됩니다.
멀티 태스킹은 모든 대규모 프로젝트에서 매우 중요합니다. .NET은 스레드를 통해 쉽게 처리 할 수 있으며 IIS (ASP.NET)에서 작업자 프로세스의 이점을 얻을 수도 있습니다. CPython은 GIL로 인해 진정한 스레딩 기능을 제공하지 않습니다 ... 모든 스레드가 코드를 실행하기 전에 획득해야하는 잠금, 진정한 멀티 태스킹을 위해서는 여러 프로세스를 사용해야합니다.
단일 작업자 프로세스의 IIS에서 ASP.NET 응용 프로그램을 호스팅 할 때 ASP.NET은 여전히 스레딩을 활용하여 CPython이 여러 작업 프로세스에 의존하여 여러 코어에서 병렬 컴퓨팅을 수행하는 여러 코어에서 동시에 여러 웹 요청을 처리 할 수 있습니다.
All of this leads to a big question, how we are going to host Python/Django app on windows. We all know forking process on windows is much more costly than Linux. So ideally to host Python/Django app; best environment would be Linux rather than windows.
If you choose Python, the right environment to developed and host Python would be Linux...and if you are like me coming from windows, choosing Python would introduce new learning curve of Linux as well...although is not very hard these days...
The main problem in industry is the dynamic nature of python. Because you have some kind of safety with a static typed language.
But now we have modern IDEs like PyCharm. They integrate pylint and pep8 "code-checking" and "styleguide-check" when you type in your code. That eliminates the most stupid errors. So you have almost have the same safety in python now.
The other thing is, if you need "static type checking" do it by yourself when you need it. That's the pragmatic nature of python.
The GIL is a problem, but you can use gevent or ZMQ to do a kind of threading. But work in progress on PyPy STM.
Python runs almost everywhere and you have the choice of different, mostly compatible, runtimes (12 on Wikipedia) Wikipedia python interpreter list
ReferenceURL : https://stackoverflow.com/questions/3420594/python-vs-c-net-what-are-the-key-differences-to-consider-for-using-one-to-d
'programing tip' 카테고리의 다른 글
현재 가장 안전한 단방향 암호화 알고리즘은 무엇입니까? (0) | 2021.01.08 |
---|---|
Visual Studio IDE-이전으로 돌아 가기 (0) | 2021.01.08 |
TestNG에서 전체 단위 테스트를 비활성화하는 방법은 무엇입니까? (0) | 2021.01.08 |
SVG를 최적화하기위한 몇 가지 옵션은 무엇입니까? (0) | 2021.01.08 |
비디오 스트림에 이미지 시퀀스? (0) | 2021.01.08 |