Everyone loves a good statistic, so I've put together a [small python script](https://gist.github.com/mintar/269c62f1f2b4f00b057696ad8c324d03) that collects the major language used in each released ROS repository, as classified by GitHub. You can clearly see that C++ is the dominant language, but Python is also used a lot, including for "serious stuff". Some caveats in the statistics: * The list only shows the major language used in a repo (winner takes it all). Often, ROS repos contain both C++ and Python (or other) code, but C++ wins by LOC, so smaller languages are underrepresented in the list below. * I'm only counting repos, but the repos differ in size a lot. Some contain many packages with several 10,000 LOC, some are single-package repos with only a couple dozen LOC. To answer the question, I wouldn't say people "graduate" from Python to C++. Personally, I use both, depending on the task. My main criterion isn't performance, but library support (although the two are linked). If you're processing a lot of point clouds, you're probably going to use things like PCL and Octomap, which means C++. For image processing, you're probably going to use OpenCV, which has bindings both for C++ and Python. Most high-level executive frameworks (such as `executive_smach` or one of the behavior tree frameworks) are written in Python. And for small helper nodes, one-off scripts, or anything involving web sockets or REST APIs, I also prefer Python. Here are the results: ### Main languages in ROS repos by popularity | rank | Language | repos | percent | |------|-----------------|------:|--------:| | 1. | C++ | 350 | 55.0% | | 2. | Python | 158 | 24.8% | | 3. | CMake | 82 | 12.9% | | 4. | C | 15 | 2.4% | | 5. | Common Lisp | 8 | 1.3% | | 6. | None | 7 | 1.1% | | 7. | Java | 4 | 0.6% | | 8. | EmberScript | 3 | 0.5% | | 9. | Shell | 2 | 0.3% | | 10. | HTML | 2 | 0.3% | | 11. | Arduino | 1 | 0.2% | | 12. | Emacs Lisp | 1 | 0.2% | | 13. | Lua | 1 | 0.2% | | 14. | Protocol Buffer | 1 | 0.2% | | 15. | C# | 1 | 0.2% | ### Top 100 ROS repos by GitHub stars | rank | repo name | stars | language | |------|--------------------------------------------------------------|------:|-----------------| | 1. | [IntelRealSense/librealsense](https://github.com/IntelRealSense/librealsense) | 1291 | C++ | | 2. | [ros/ros](https://github.com/ros/ros) | 697 | Python | | 3. | [wjwwood/serial](https://github.com/wjwwood/serial) | 520 | C++ | | 4. | [introlab/rtabmap](https://github.com/introlab/rtabmap) | 489 | C++ | | 5. | [OctoMap/octomap](https://github.com/OctoMap/octomap) | 382 | C++ | | 6. | [ros-planning/navigation](https://github.com/ros-planning/navigation) | 317 | C++ | | 7. | [ethz-asl/grid_map](https://github.com/ethz-asl/grid_map) | 281 | C++ | | 8. | [AutonomyLab/ardrone_autonomy](https://github.com/AutonomyLab/ardrone_autonomy) | 264 | C | | 9. | [ros/ros_comm](https://github.com/ros/ros_comm) | 239 | Python | | 10. | [dartsim/dart](https://github.com/dartsim/dart) | 213 | C++ | | 11. | [introlab/find-object](https://github.com/introlab/find-object) | 210 | C++ | | 12. | [vrpn/vrpn](https://github.com/vrpn/vrpn) | 200 | C | | 13. | [intel-ros/realsense](https://github.com/intel-ros/realsense) | 193 | C++ | | 14. | [robopeak/rplidar_ros](https://github.com/robopeak/rplidar_ros) | 191 | C++ | | 15. | [ros-planning/moveit](https://github.com/ros-planning/moveit) | 173 | C++ | | 16. | [ros-visualization/rviz](https://github.com/ros-visualization/rviz) | 170 | C++ | | 17. | [mavlink/mavros](https://github.com/mavlink/mavros) | 169 | C++ | | 18. | [introlab/rtabmap_ros](https://github.com/introlab/rtabmap_ros) | 162 | C++ | | 19. | [ros-drivers/rosserial](https://github.com/ros-drivers/rosserial) | 162 | C++ | | 20. | [cra-ros-pkg/robot_localization](https://github.com/cra-ros-pkg/robot_localization) | 160 | C++ | | 21. | [ros/ros_tutorials](https://github.com/ros/ros_tutorials) | 144 | C++ | | 22. | [RobotWebTools/rosbridge_suite](https://github.com/RobotWebTools/rosbridge_suite) | 139 | Python | | 23. | [leggedrobotics/darknet_ros](https://github.com/leggedrobotics/darknet_ros) | 132 | C++ | | 24. | [ros/catkin](https://github.com/ros/catkin) | 129 | Python | | 25. | [ros-drivers/velodyne](https://github.com/ros-drivers/velodyne) | 128 | C++ | | 26. | [ros-perception/slam_gmapping](https://github.com/ros-perception/slam_gmapping) | 127 | C++ | | 27. | [ccny-ros-pkg/imu_tools](https://github.com/ccny-ros-pkg/imu_tools) | 125 | C++ | | 28. | [ros-industrial/universal_robot](https://github.com/ros-industrial/universal_robot) | 125 | Python | | 29. | [orocos/orocos_kinematics_dynamics](https://github.com/orocos/orocos_kinematics_dynamics) | 122 | C++ | | 30. | [ros-simulation/gazebo_ros_pkgs](https://github.com/ros-simulation/gazebo_ros_pkgs) | 119 | C++ | | 31. | [ros-controls/ros_control](https://github.com/ros-controls/ros_control) | 111 | C++ | | 32. | [rosjava/rosjava_core](https://github.com/rosjava/rosjava_core) | 108 | Java | | 33. | [ros-perception/image_pipeline](https://github.com/ros-perception/image_pipeline) | 108 | C++ | | 34. | [turtlebot/turtlebot](https://github.com/turtlebot/turtlebot) | 102 | C++ | | 35. | [facontidavide/PlotJuggler](https://github.com/facontidavide/PlotJuggler) | 102 | C++ | | 36. | [ROBOTIS-GIT/turtlebot3](https://github.com/ROBOTIS-GIT/turtlebot3) | 100 | Python | | 37. | [ROBOTIS-GIT/DynamixelSDK](https://github.com/ROBOTIS-GIT/DynamixelSDK) | 93 | C# | | 38. | [rst-tu-dortmund/teb_local_planner](https://github.com/rst-tu-dortmund/teb_local_planner) | 90 | C++ | | 39. | [ros-perception/vision_opencv](https://github.com/ros-perception/vision_opencv) | 84 | C++ | | 40. | [turtlebot/turtlebot_apps](https://github.com/turtlebot/turtlebot_apps) | 78 | C++ | | 41. | [yujinrobot/kobuki](https://github.com/yujinrobot/kobuki) | 75 | C++ | | 42. | [ros-controls/ros_controllers](https://github.com/ros-controls/ros_controllers) | 72 | C++ | | 43. | [ankitdhall/lidar_camera_calibration](https://github.com/ankitdhall/lidar_camera_calibration) | 71 | C++ | | 44. | [ipa320/cob_driver](https://github.com/ipa320/cob_driver) | 68 | C++ | | 45. | [PickNikRobotics/rviz_visual_tools](https://github.com/PickNikRobotics/rviz_visual_tools) | 67 | C++ | | 46. | [swri-robotics/mapviz](https://github.com/swri-robotics/mapviz) | 66 | C++ | | 47. | [ros-drivers/usb_cam](https://github.com/ros-drivers/usb_cam) | 65 | C++ | | 48. | [plasmodic/ecto](https://github.com/plasmodic/ecto) | 64 | C++ | | 49. | [AutonomyLab/bebop_autonomy](https://github.com/AutonomyLab/bebop_autonomy) | 63 | C++ | | 50. | [wg-perception/people](https://github.com/wg-perception/people) | 61 | C++ | | 51. | [ros/geometry](https://github.com/ros/geometry) | 59 | C++ | | 52. | [ipa320/cob_common](https://github.com/ipa320/cob_common) | 59 | Python | | 53. | [AndreaCensi/csm](https://github.com/AndreaCensi/csm) | 57 | C | | 54. | [ros-perception/perception_pcl](https://github.com/ros-perception/perception_pcl) | 57 | C++ | | 55. | [ipa320/cob_simulation](https://github.com/ipa320/cob_simulation) | 57 | Python | | 56. | [Intermodalics/tango_ros](https://github.com/Intermodalics/tango_ros) | 56 | C++ | | 57. | [clearpathrobotics/robot_upstart](https://github.com/clearpathrobotics/robot_upstart) | 53 | Python | | 58. | [jsk-ros-pkg/jsk_recognition](https://github.com/jsk-ros-pkg/jsk_recognition) | 52 | C++ | | 59. | [ipa320/cob_extern](https://github.com/ipa320/cob_extern) | 52 | C | | 60. | [intel/ros_intel_movidius_ncs](https://github.com/intel/ros_intel_movidius_ncs) | 50 | C++ | | 61. | [lagadic/vision_visp](https://github.com/lagadic/vision_visp) | 49 | C++ | | 62. | [AutonomyLab/create_autonomy](https://github.com/AutonomyLab/create_autonomy) | 49 | C++ | | 63. | [RobotWebTools/web_video_server](https://github.com/RobotWebTools/web_video_server) | 48 | C++ | | 64. | [fkie/multimaster_fkie](https://github.com/fkie/multimaster_fkie) | 46 | Python | | 65. | [skasperski/navigation_2d](https://github.com/skasperski/navigation_2d) | 45 | C++ | | 66. | [ccny-ros-pkg/scan_tools](https://github.com/ccny-ros-pkg/scan_tools) | 44 | C++ | | 67. | [stdr-simulator-ros-pkg/stdr_simulator](https://github.com/stdr-simulator-ros-pkg/stdr_simulator) | 44 | C++ | | 68. | [ros-industrial/industrial_core](https://github.com/ros-industrial/industrial_core) | 43 | C++ | | 69. | [ros-planning/navigation_tutorials](https://github.com/ros-planning/navigation_tutorials) | 43 | C++ | | 70. | [ipa320/cob_robots](https://github.com/ipa320/cob_robots) | 43 | Python | | 71. | [ros-drivers/pointgrey_camera_driver](https://github.com/ros-drivers/pointgrey_camera_driver) | 43 | C++ | | 72. | [orocos-toolchain/log4cpp](https://github.com/orocos-toolchain/log4cpp) | 42 | C++ | | 73. | [ros-perception/openslam_gmapping](https://github.com/ros-perception/openslam_gmapping) | 42 | C++ | | 74. | [yujinrobot/yujin_ocs](https://github.com/yujinrobot/yujin_ocs) | 41 | C++ | | 75. | [ros-industrial/ros_canopen](https://github.com/ros-industrial/ros_canopen) | 41 | C++ | | 76. | [ros-industrial/abb](https://github.com/ros-industrial/abb) | 40 | C++ | | 77. | [paulbovbel/frontier_exploration](https://github.com/paulbovbel/frontier_exploration) | 40 | C++ | | 78. | [ros/geometry2](https://github.com/ros/geometry2) | 38 | C++ | | 79. | [ros/executive_smach](https://github.com/ros/executive_smach) | 38 | Python | | 80. | [ros-industrial/kuka_experimental](https://github.com/ros-industrial/kuka_experimental) | 37 | C++ | | 81. | [ipa320/schunk_modular_robotics](https://github.com/ipa320/schunk_modular_robotics) | 36 | C++ | | 82. | [OctoMap/octomap_mapping](https://github.com/OctoMap/octomap_mapping) | 36 | C++ | | 83. | [arebgun/dynamixel_motor](https://github.com/arebgun/dynamixel_motor) | 35 | Python | | 84. | [youbot/youbot_driver](https://github.com/youbot/youbot_driver) | 35 | C++ | | 85. | [beltransen/velo2cam_calibration](https://github.com/beltransen/velo2cam_calibration) | 34 | C++ | | 86. | [ros/common_msgs](https://github.com/ros/common_msgs) | 34 | C++ | | 87. | [davetcoleman/ros_control_boilerplate](https://github.com/davetcoleman/ros_control_boilerplate) | 34 | C++ | | 88. | [hasauino/rrt_exploration](https://github.com/hasauino/rrt_exploration) | 33 | C++ | | 89. | [ros/actionlib](https://github.com/ros/actionlib) | 33 | C++ | | 90. | [ros-visualization/visualization_tutorials](https://github.com/ros-visualization/visualization_tutorials) | 32 | C++ | | 91. | [ros-drivers/joystick_drivers](https://github.com/ros-drivers/joystick_drivers) | 32 | Python | | 92. | [magazino/move_base_flex](https://github.com/magazino/move_base_flex) | 32 | C++ | | 93. | [turtlebot/turtlebot_simulator](https://github.com/turtlebot/turtlebot_simulator) | 32 | EmberScript | | 94. | [cbandera/rosparam_handler](https://github.com/cbandera/rosparam_handler) | 31 | Python | | 95. | [ros-naoqi/nao_robot](https://github.com/ros-naoqi/nao_robot) | 30 | Python | | 96. | [ipa320/cob_command_tools](https://github.com/ipa320/cob_command_tools) | 30 | Python | | 97. | [mrpt-ros-pkg/mrpt_navigation](https://github.com/mrpt-ros-pkg/mrpt_navigation) | 30 | C++ | | 98. | [ethz-asl/rqt_multiplot_plugin](https://github.com/ethz-asl/rqt_multiplot_plugin) | 30 | C++ | | 99. | [wg-perception/object_recognition_core](https://github.com/wg-perception/object_recognition_core) | 30 | C++ | | 100. | [orocos/rtt_ros_integration](https://github.com/orocos/rtt_ros_integration) | 30 | C++ | --- [Visit Topic](https://discourse.ros.org/t/are-serious-things-done-with-ros-in-python/4359/6) or reply to this email to respond. If you do not want to receive messages from ros-users please use the unsubscribe link below. If you use the one above, you will stop all of ros-users from receiving updates. ______________________________________________________________________________ ros-users mailing list ros-users@lists.ros.org http://lists.ros.org/mailman/listinfo/ros-users Unsubscribe: